Oppure

Loading
24/08/09 8:27
rockdavide
Devo fare questo:

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;

#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");

    while(fermo!=0 & n<20)
    {
    printf ("Numero %d: ",volte);
    scanf ("%d", & inserito);
    fermo=inserito;
    n++;
    volte++;
    if(inserito%2==0)
    {
    inserito=pari[c];
    c++;
    }
    else
    {
    inserito=dispari[b];
    b++;
    }
    }

     
    printf ("Numeri Pari Inseriti: \n");
	
    for (c=0; c<50; c++)
		{printf("%d",pari[c]);
    }
    	
    printf ("Numeri Dispari Inseriti: \n");
  	for (b=0; b<50; b++)
		{printf("%d",dispari[b]);
    }

return 0;		
}
aaa
24/08/09 9:25
Matthew
Allora il problema è che il tuo programma non memorizzava i dati in input e non faceva nemmeno partire il ciclo while.

#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]);
    }

return 0;        
}

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!
aaa
24/08/09 9:27
Matthew
Altro consiglio: prova a rendere il codice più efficiente, per esempio la variabile "fermo" non serve, puoi benissimo farne a meno... :k:
aaa
24/08/09 20:23
rockdavide
grazie mille..ho provato ad inserire il controllo..ma niente..l'array restituisce dei valori a caso!

#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]);
    }       
}

aaa
24/08/09 20:34
giuseppe93
ma non dovrebbe andare nella sezione C e non C++?
Ultima modifica effettuata da giuseppe93 24/08/09 20:35
aaa
24/08/09 23:11
Matthew
Postato originariamente da rockdavide:

grazie mille..ho provato ad inserire il controllo..ma niente..l'array restituisce dei valori a caso!

#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;
aaa
25/08/09 6:18
rockdavide
il problema resta: una volta finito li ciclo non mi stampa a video gli array!
aaa
25/08/09 9:29
Matthew
Ok, dunque c'erano più errori del previsto...

#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=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 25/08/09 9:31
aaa