Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-06-2006, 13:51   #1
Satiel
Senior Member
 
Iscritto dal: Jun 2004
Città: Reggio Emilia
Messaggi: 592
[C] visualizzazione vettore

Ciao a tutti sto preparando l'esame di Info e vorrei un aiuto con un programma visto che da solo nn ci salto fuori.
Ecco cosa dovrebbe fare

1) Leggere i dati da input di un vettore V1 di N1 numeri interi pari tra A e B (inclusi), cioè il programma deve controllare che i valori immessi da input siano pari compresi tra A e B (inclusi)

2) Determinare e stampare a video il valore massimo del vettore V1 quindi determinare e stampare a video quante volte tale numero compare nel vettore.


Per ora ho fatto questo
Quote:

#include <stdio.h>
#include <stdlib.h>
#define N1 6
#define A 20
#define B 80
int main(int argc, char *argv[])
{
int V[N1];
int I=0;
int J;
int test;

/*input dei numeri e verifica dell'intervallo*/

printf("Immetti 6 numeri compresi tra %d e %d:\n ",A,B);
for (I=0; I<N1-1; I++){
scanf("%d", &V[i]);
if(V[i]>=A,V[i]<=B,V[i]%2==0)
I=I-1;
}


/*visualizzazione vettore*/

printf("\nVettore ");
for(J=0; J<N1; J++)
printf("%5d ",V[N1]);

system("\nPAUSE");
return 0;
}

Problema n°1
con questo sistema non salta il valore ma decrementa di 1 I e quindi se sbaglio piu volte I mi va anche a numeri negativi

Problema n°2
Il vettore che stampo nn è costituito solo dai numeri pari,in più mi saltano fuori numeracci casuali che non capisco (tipo 6546464)

Qualche suggerimento??
__________________
Case: CM-690, ALI:Enermax Modu82+ 525W, Procio: Intel E8400, MB: Asus P5Q-E, RAM: TeamGroup TXDD2048M800HC4, HD:VelociRaptor WD3000GLFS, VGA:Sapphire Ati HD4870, SchedaAudio: Creative Xtreme Gamer, Dissipatore ThermalTake Big Typhoon con Noctua NF-P12, Monitor: Samsung T220, Tastiera Zboard, mouse Razer Lachesis con Goliatus speed edition
Satiel è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 14:30   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Satiel
Problema n°1
con questo sistema non salta il valore ma decrementa di 1 I e quindi se sbaglio piu volte I mi va anche a numeri negativi
Innanzitutto non si fa un test così:
if (V[i]>=A,V[i]<=B,V[i]%2==0)

Una possibile soluzione (I è già inizializzato a 0):
Codice:
while (I < N1)
{
    printf ("Inserire il valore #%d: ", I+1);
    scanf ("%d", &V[i]);
    if (V[i]>=A && V[i]<=B && V[i]%2==0)
        I++;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 14:33   #3
Satiel
Senior Member
 
Iscritto dal: Jun 2004
Città: Reggio Emilia
Messaggi: 592
per il vettore ho risolto così

Quote:

printf("Immetti 6 numeri compresi tra %d e %d:\n ",A,B);

for(I=0;I<N1;I++)
do
scanf("%d", &V[i]);
while (! ((V[i] % 2)==0 && (V[i]>=A && V[i]<=B)));
Ora devo solo visualizzarlo correttamente
__________________
Case: CM-690, ALI:Enermax Modu82+ 525W, Procio: Intel E8400, MB: Asus P5Q-E, RAM: TeamGroup TXDD2048M800HC4, HD:VelociRaptor WD3000GLFS, VGA:Sapphire Ati HD4870, SchedaAudio: Creative Xtreme Gamer, Dissipatore ThermalTake Big Typhoon con Noctua NF-P12, Monitor: Samsung T220, Tastiera Zboard, mouse Razer Lachesis con Goliatus speed edition
Satiel è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 14:38   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Satiel
while (! ((V[i] % 2)==0 && (V[i]>=A && V[i]<=B)));
Ok, troppe parentesi comunque:
while (!(V[i] % 2==0 && V[i]>=A && V[i]<=B));
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 14:58   #5
Satiel
Senior Member
 
Iscritto dal: Jun 2004
Città: Reggio Emilia
Messaggi: 592
Ecco il programma completo e funzionante (anche se nn ve ne frega niente )
Quote:
#include <stdio.h>
#include <stdlib.h>
#define N1 6
#define A 20
#define B 80
int main(int argc, char *argv[])
{
int V[N1];
int I;
int J;
int max;
int cont;

/*input dei numeri e verifica dell'intervallo*/

printf("Immetti 6 numeri compresi tra %d e %d:\n ",A,B);

for(I=0;I<N1;I++)
do
scanf("%d", &V[i]);
while (! (V[i]%2==0 && V[i]>=A && V[i]<=B));


/*visualizzazione vettore*/

printf("\nVettore ");
for(J=0; J<N1; J++)
printf("%5d ",V[J]);

/*calcolo di Vmax*/

max=V[0];
cont=1;
for(I=1;I<N1;I++)
if(V[i]>=max) {
max=V[i];
cont=cont+1; }

printf("\n\n\nIl valore max e' %d e compare nel vettore %d volte\n\n",max,cont);


system("PAUSE");
return 0;
}
__________________
Case: CM-690, ALI:Enermax Modu82+ 525W, Procio: Intel E8400, MB: Asus P5Q-E, RAM: TeamGroup TXDD2048M800HC4, HD:VelociRaptor WD3000GLFS, VGA:Sapphire Ati HD4870, SchedaAudio: Creative Xtreme Gamer, Dissipatore ThermalTake Big Typhoon con Noctua NF-P12, Monitor: Samsung T220, Tastiera Zboard, mouse Razer Lachesis con Goliatus speed edition
Satiel è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 16:07   #6
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Quote:
Originariamente inviato da Satiel
Ecco il programma completo e funzionante (anche se nn ve ne frega niente )
Non mi pare funzionante. Infatti inserendo i seguenti valori: 40 42 44 46 48 50, il software risponde che: "Il valore max e' 50 e compare nel vettore 6 volte". In realta', se ho ben capito il numero 50 compare nel vettore 1 sola volta e non 6 volte. Ma potrei aver frainteso il problema.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 16:10   #7
Satiel
Senior Member
 
Iscritto dal: Jun 2004
Città: Reggio Emilia
Messaggi: 592
uh?
a me non lo dava....
__________________
Case: CM-690, ALI:Enermax Modu82+ 525W, Procio: Intel E8400, MB: Asus P5Q-E, RAM: TeamGroup TXDD2048M800HC4, HD:VelociRaptor WD3000GLFS, VGA:Sapphire Ati HD4870, SchedaAudio: Creative Xtreme Gamer, Dissipatore ThermalTake Big Typhoon con Noctua NF-P12, Monitor: Samsung T220, Tastiera Zboard, mouse Razer Lachesis con Goliatus speed edition
Satiel è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 16:13   #8
Satiel
Senior Member
 
Iscritto dal: Jun 2004
Città: Reggio Emilia
Messaggi: 592
Si ho provato in effetti fa come hai detto tu, io avevo provato con numeri più bassi 22 26 26 24 24 22 e funzionava
__________________
Case: CM-690, ALI:Enermax Modu82+ 525W, Procio: Intel E8400, MB: Asus P5Q-E, RAM: TeamGroup TXDD2048M800HC4, HD:VelociRaptor WD3000GLFS, VGA:Sapphire Ati HD4870, SchedaAudio: Creative Xtreme Gamer, Dissipatore ThermalTake Big Typhoon con Noctua NF-P12, Monitor: Samsung T220, Tastiera Zboard, mouse Razer Lachesis con Goliatus speed edition
Satiel è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 16:26   #9
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Quote:
Originariamente inviato da Satiel
Si ho provato in effetti fa come hai detto tu, io avevo provato con numeri più bassi 22 26 26 24 24 22 e funzionava
Dispongo di una soluzione al tuo problema, se vuoi la posso rendere pubblica. Ma credo che tu voglia risolvere il problema autonomamente.

NOTA: Il problema e' chiaramente qui:

Codice:
max=V[0]; 
cont=1; 
for(I=1;I<N1;I++) 
if(V[i]>=max) { 
max=V[i]; 
cont=cont+1; }
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 16:29   #10
Satiel
Senior Member
 
Iscritto dal: Jun 2004
Città: Reggio Emilia
Messaggi: 592
In effetti ci ero arrivato che potesse essere nel cont, solo che ora ho il cervello in pappa è da stamattina che studio quindi rendi pure pubblica la soluzione
__________________
Case: CM-690, ALI:Enermax Modu82+ 525W, Procio: Intel E8400, MB: Asus P5Q-E, RAM: TeamGroup TXDD2048M800HC4, HD:VelociRaptor WD3000GLFS, VGA:Sapphire Ati HD4870, SchedaAudio: Creative Xtreme Gamer, Dissipatore ThermalTake Big Typhoon con Noctua NF-P12, Monitor: Samsung T220, Tastiera Zboard, mouse Razer Lachesis con Goliatus speed edition
Satiel è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 16:43   #11
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Quote:
Originariamente inviato da Satiel
In effetti ci ero arrivato che potesse essere nel cont, solo che ora ho il cervello in pappa è da stamattina che studio quindi rendi pure pubblica la soluzione
Codice:
#include <stdio.h> 
#include <stdlib.h> 

#define N1 6
#define A 20
#define B 80

void main(void)

{
    int v[N1],i,max,cont;

    printf("Inserire %d numeri pari compresi tra %d e %d\n\n",N1,A,B); 

    for(i=0;i<N1;i++)
    {
        do
	{
	    printf("Numero %d: ",i+1);
	    scanf("%d",&v[i]); 
         } while (v[i]&1==1||v[i]<A||v[i]>B); 
    }

    printf("\nVettore:"); 
    for(i=0;i<N1;i++)
	printf(" %d",v[i]); 

    for(max=v[0],cont=i=1;i<N1;i++) 
    {
	if(v[i]==max)
	    cont++;
	if(v[i]>max)
	{ 
	    max=v[i]; 
	    cont=1;
	} 
    }

    printf("\n\nIl valore massimo e' %d e compare nel vettore %d volte\n",max,cont); 
}
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 17:26   #12
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da repne scasb
Codice:
...
while (v[i]&1==1||v[i]<A||v[i]>B);
...
Soluzione indubbiamente elegante... ma forse è meglio mettergli un più classico v[i]%2 == 0 invece del (bellissimo) v[i]&1 == 1

forse per un "novizio" è più comprensibile!
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 18:44   #13
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Quote:
Originariamente inviato da sirus
forse è meglio mettergli un più classico v[i]%2 == 0 invece del v[i]&1 == 1

forse per un "novizio" è più comprensibile!
Concordo (v[i]%2==1 (non c'e' il 'NOT')). Un annotazione a margine circa l'efficienza in C della riga di codice in esame: In C-- avrei scritto:

Codice:
	while (v[i]-A)=&1==1||>(B-A);
Se interessa spiego cosa significa, ma e' interessante notare che rispetto al C e' stato possibile ridurre i salti condizionati da 3 a 2 rendendo il codice assembly piu' digeribile (NOTA: il vettore v[i] deve essere dichiarato come 'unsigned').

Ultima modifica di repne scasb : 25-06-2006 alle 18:49.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 21:24   #14
mind_
Member
 
L'Avatar di mind_
 
Iscritto dal: Apr 2006
Città: Trieste
Messaggi: 141
Quote:
Originariamente inviato da sirus
Soluzione indubbiamente elegante... ma forse è meglio mettergli un più classico v[i]%2 == 0 invece del (bellissimo) v[i]&1 == 1

forse per un "novizio" è più comprensibile!
Si può anche togliere il ==1
Saluti
__________________
HardwareStation.net Overclockers Team
------------------------------------------------
www.GilVegliach.eu
Internet, Informatica, Tecnologia
mind_ è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2006, 23:07   #15
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Quote:
Originariamente inviato da mind_
Si può anche togliere il ==1
Ottimo. E' comunque possibile spingere molto oltre. Ad esempio si possono togliere tutti e tre i salti condizionati all'interno del 'while' (ossia il test per numeri pari il test per minore ed il test per maggiore):

Codice:
         } while ((v[i]*(A+B)-A*B-v[i]*v[i])&(int)((1<<((sizeof(int)<<3)-1))+1));
Spero apprezzerai.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2006, 09:54   #16
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da repne scasb
Concordo (v[i]%2==1 (non c'e' il 'NOT')). Un annotazione a margine circa l'efficienza in C della riga di codice in esame: In C-- avrei scritto:

Codice:
	while (v[i]-A)=&1==1||>(B-A);
Se interessa spiego cosa significa, ma e' interessante notare che rispetto al C e' stato possibile ridurre i salti condizionati da 3 a 2 rendendo il codice assembly piu' digeribile (NOTA: il vettore v[i] deve essere dichiarato come 'unsigned').
Interessato... il C-- non lo conosco!
hai link particolarmente interessanti in proposito?
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2006, 09:55   #17
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da repne scasb
Ottimo. E' comunque possibile spingere molto oltre. Ad esempio si possono togliere tutti e tre i salti condizionati all'interno del 'while' (ossia il test per numeri pari il test per minore ed il test per maggiore):

Codice:
         } while ((v[i]*(A+B)-A*B-v[i]*v[i])&(int)((1<<((sizeof(int)<<3)-1))+1));
Spero apprezzerai.
Devo ammetterlo, ci ho messo un po' a decodificarla ...
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2006, 10:05   #18
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
scusate la mia ignoranza, ma non ho capito a che serve
Codice:
#define N1 6
#define A 20
#define B 80
quando si puo scrivere
Codice:
int n1=6;
int a=20;
int b=80;
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2006, 10:07   #19
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da repne scasb
Codice:
} while ((v[i]*(A+B)-A*B-v[i]*v[i])&(int)((1<<((sizeof(int)<<3)-1))+1));
Spero apprezzerai
certo, ho apprezzato il giramento di testa ^10
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2006, 10:32   #20
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da AngeL)
scusate la mia ignoranza, ma non ho capito a che serve
Codice:
#define N1 6
#define A 20
#define B 80
quando si puo scrivere
Codice:
int n1=6;
int a=20;
int b=80;
Usando #define, N1, A, B sono delle "macro" (che si espandono quando sono usate), non delle variabili.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Cina, nuove regole per le auto elettrich...
OPPO A6 Pro arriva in Italia a 299,99 eu...
Black Myth: Wukong, oggi un maxi aggiorn...
Nomad in missione senza alcun controllo ...
Apple prepara il chip H3 e nuovi AirPods...
Battlefield 6 è uno spettacolo an...
Hyundai Ioniq 9, prima prova: viaggiare ...
Allarme blackout in Spagna: la rete elet...
MindsEye, rivolta dei dipendenti contro ...
In Cina Xiaomi SU7 Ultra prende fuoco do...
Apple Smart Glass: display integrato e d...
Mortal Kombat 3 si farà: la confe...
iPhone 18 Pro: prime indiscrezioni sulle...
Vai all'università? Hai un anno d...
Rubrik accelera su IA e sicurezza: tra c...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:10.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v