Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Scrivere 1 programma che, chiede ad un utente dei numeri e li memorizza in un vettore
Il programma smette di chiedere numeri, quando o vengono nseriti 20 numeri o viene inserito zero
In un vettore chiamato Pari, metti i numeri pari ed in uno Dispari metti i numeri dispari
Poi in una variabile minimo metti il valore minimo
In una medio metti il valore medio di tutti i numeri inseriti
In massimo il valore massimo
Ed in fine scrivi a monitor Pari se son stati inseriti + num,eri pari o Dispari se son stati inseiti + numeri dispari..
Sono arrivato a far uscire dal programma se premuto il tasto 0 e disporre i n pari e dispari in array..ma non riesco a far visualizzare gli array..ho usato un ciclo for..vi posto li sorgente;
Codice sorgente - presumibilmente C++
#include <stdio.h>
int main(){
int inserito,n,volte,fermo,pari[50],dispari[50],media,b,c,ped;
volte=1;
n=0;
c=0;
b=0;
printf("Scrivi 20 numeri o premi 0 per fermarti:\n");
Allora il problema è che il tuo programma non memorizzava i dati in input e non faceva nemmeno partire il ciclo while.
Codice sorgente - presumibilmente C++
#include <stdio.h>
int main(){
int inserito,n,volte,fermo,pari[20],dispari[20],media,b,c,ped;
volte=1;
n=0;
c=0;
b=0;
//Affinchè il ciclo while funzioni devi inizializzare la variabile fermo ad un valore diverso da 0:
fermo=1;
printf("Scrivi 20 numeri o premi 0 per fermarti:\n");
while(fermo!=0 & n<20)
{
printf("Numero %d: ",volte);
scanf("%d", & inserito);
fermo=inserito;
n++;
volte++;
if(inserito%2==0)
{
//inserito=pari[c]; Questo comando non è corretto perchè copia il valore di pari[c] nella variabile inserito, invece deve fare il contrario. Quindi:
pari[c]=inserito;
c++;
}
else
{
//inserito=dispari[b]; Stessa cosa qui
dispari[c]=inserito;
b++;
}
}
printf("Numeri Pari Inseriti: \n");
for(c=0; c<20; c++)
{printf("%d\n",pari[c]);
}
printf("Numeri Dispari Inseriti: \n");
for(b=0; b<20; b++)
{printf("%d\n",dispari[b]);
}
return0;
}
Altri miglioramenti che ho apportato sono la nuova linea nella visualizzazione dei risultati (altrimenti sono illeggibili) e il ridimensionamento dell'array a 20 elementi (visto che l'utente inserisce 20 numeri sono inutili 50 elementi).
Consiglio: quando stampi i risultati otterrai sempre dei numeri senza senso. Questo perchè un array non inizializzato assegna valori casuali ai suoi elementi. Quindi siccome fra l'array pari e quello dispari ci saranno sempre 20 elementi a cui non viene assegnato alcun valore, dovresti aggiungere un controllo per stampare solo i veri risultati.
Buon lavoro!
grazie mille..ho provato ad inserire il controllo..ma niente..l'array restituisce dei valori a caso!
Codice sorgente - presumibilmente C/C++
#include <stdio.h>
int main() {
int inserito,n,volte,fermo,pari[20],dispari[20],d,p,c,b;
printf ("Scrivi 20 numeri o premi 0 per fermarti:\n");
fermo,volte=1;
n=0;
c,b=0;
while(fermo!=0 & n<20)
{
printf ("Numero %d: ",volte);
scanf ("%d", & inserito);
fermo=inserito;
n++;
volte++;
if(inserito%2==0)
{
//inserito=pari[c]; Questo comando non è corretto perchè copia il valore di pari[c] nella variabile inserito, invece deve fare il contrario. Quindi:
pari[c]=inserito;
c++;
}
else
{
//inserito=dispari[b]; Stessa cosa qui
dispari[c]=inserito;
b++;
}
}
printf ("Numeri Pari Inseriti: \n");
/*Ho pensato ke se la variabile c incrementa ogni volta che prende
un numero,appena i numeri sono finiti essa si ferma..se io prendo quella variabile come fine del ciclo dovrebbe venire..invece no! */
for (p=0; p==c; p++)
{printf("%d\n",pari[c]);
}
printf ("Numeri Dispari Inseriti: \n");
for (d=0; d==b; d++)
{printf("%d\n",dispari[b]);
}
}
Certo che non funziona:
fermo,volte=1;
in questo modo inizializzi solo la variabile volte. Per inizializzarle entrambe bisogna scrivere:
fermo=1,volte=1;
int inserito,n,volte,fermo,pari[20],dispari[20],d,p,c,b;
printf("Scrivi 20 numeri o premi 0 per fermarti:\n");
fermo=1,volte=1;
n=0;
c,b=0;
while(fermo!=0 & n<20)
{
printf("Numero %d: ",volte);
scanf("%d", & inserito);
fermo=inserito;
n++;
volte++;
if(inserito%2==0)
{
pari[c]=inserito;
c++;
}
else
{
//dispari[c]=inserito; Sbagliato
dispari[b]=inserito;
b++;
}
}
printf("Numeri Pari Inseriti: \n");
//for (p=0; p==c; p++) Questo non è corretto perchè nel ciclo for il secondo argomento è il test, ossia la condizione che deve essere vera affinchè il ciclo venga eseguito
for(p=0; p<c; p++)
{
//printf("%d\n",pari[c]); Sbagliato
printf("%d\n",pari[p]);
}
printf("Numeri Dispari Inseriti: \n");
for(d=0; d<b; d++)
{printf("%d\n",dispari[d]);
}
}
Ora dovrebbe funzionare. Comunque se vuoi un consiglio per imparare a programmare, prova a dedicare un po più di tempo al test dei programmi quando incontri dei problemi. Sono sicuro che molti degli errori con un po di impegno li avresti risolti anche da solo. La programazione è così: ore e ore a sbattere la testa contro un programma che non fa cosa vorremmo, solo così si può veramente imparare dai propri errori.
Ultima modifica effettuata da Matthew il 25/08/2009 alle 11:31