Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C] Consulenza per programma in C
Forum - C/C++ - [C] Consulenza per programma in C

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
rockdavide (Normal User)
Newbie


Messaggi: 6
Iscritto: 24/08/2009

Segnala al moderatore
Postato alle 10:27
Lunedì, 24/08/2009
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;

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5. int inserito,n,volte,fermo,pari[50],dispari[50],media,b,c,ped;
  6.  
  7. volte=1;
  8. n=0;
  9. c=0;
  10. b=0;
  11.        
  12. printf ("Scrivi 20 numeri o premi 0 per fermarti:\n");
  13.  
  14.     while(fermo!=0 & n<20)
  15.     {
  16.     printf ("Numero %d: ",volte);
  17.     scanf ("%d", & inserito);
  18.     fermo=inserito;
  19.     n++;
  20.     volte++;
  21.     if(inserito%2==0)
  22.     {
  23.     inserito=pari[c];
  24.     c++;
  25.     }
  26.     else
  27.     {
  28.     inserito=dispari[b];
  29.     b++;
  30.     }
  31.     }
  32.  
  33.      
  34.     printf ("Numeri Pari Inseriti: \n");
  35.        
  36.     for (c=0; c<50; c++)
  37.                 {printf("%d",pari[c]);
  38.     }
  39.        
  40.     printf ("Numeri Dispari Inseriti: \n");
  41.         for (b=0; b<50; b++)
  42.                 {printf("%d",dispari[b]);
  43.     }
  44.  
  45. return 0;              
  46. }


PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 11:25
Lunedì, 24/08/2009
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++

  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5. int inserito,n,volte,fermo,pari[20],dispari[20],media,b,c,ped;
  6.  
  7. volte=1;
  8. n=0;
  9. c=0;
  10. b=0;
  11. //Affinchè il ciclo while funzioni devi inizializzare la variabile fermo ad un valore diverso da 0:
  12. fermo=1;
  13.      
  14. printf ("Scrivi 20 numeri o premi 0 per fermarti:\n");
  15.  
  16.     while(fermo!=0 & n<20)
  17.     {
  18.     printf ("Numero %d: ",volte);
  19.     scanf ("%d", & inserito);
  20.     fermo=inserito;
  21.     n++;
  22.     volte++;
  23.     if(inserito%2==0)
  24.     {
  25.     //inserito=pari[c]; Questo comando non è corretto perchè copia il valore di pari[c] nella variabile inserito, invece deve fare il contrario. Quindi:
  26.       pari[c]=inserito;
  27.     c++;
  28.     }
  29.     else
  30.     {
  31.     //inserito=dispari[b]; Stessa cosa qui
  32.        dispari[c]=inserito;
  33.     b++;
  34.     }
  35.     }
  36.  
  37.    
  38.     printf ("Numeri Pari Inseriti: \n");
  39.    
  40.     for (c=0; c<20; c++)
  41.         {printf("%d\n",pari[c]);
  42.     }
  43.        
  44.     printf ("Numeri Dispari Inseriti: \n");
  45.       for (b=0; b<20; b++)
  46.         {printf("%d\n",dispari[b]);
  47.     }
  48.  
  49. return 0;        
  50. }


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!

PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 11:27
Lunedì, 24/08/2009
Altro consiglio: prova a rendere il codice più efficiente, per esempio la variabile "fermo" non serve, puoi benissimo farne a meno... :k:

PM Quote
Avatar
rockdavide (Normal User)
Newbie


Messaggi: 6
Iscritto: 24/08/2009

Segnala al moderatore
Postato alle 22:23
Lunedì, 24/08/2009
grazie mille..ho provato ad inserire il controllo..ma niente..l'array restituisce dei valori a caso!

Codice sorgente - presumibilmente C/C++

  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5. int inserito,n,volte,fermo,pari[20],dispari[20],d,p,c,b;
  6.    
  7. printf ("Scrivi 20 numeri o premi 0 per fermarti:\n");
  8.  
  9.     fermo,volte=1;
  10.     n=0;
  11.     c,b=0;
  12.  
  13.     while(fermo!=0 & n<20)
  14.     {
  15.     printf ("Numero %d: ",volte);
  16.     scanf ("%d", & inserito);
  17.     fermo=inserito;
  18.     n++;
  19.     volte++;
  20.     if(inserito%2==0)
  21.     {
  22.     //inserito=pari[c]; Questo comando non è corretto perchè copia il valore di pari[c] nella variabile inserito, invece deve fare il contrario. Quindi:
  23.     pari[c]=inserito;
  24.     c++;
  25.     }
  26.     else
  27.     {
  28.     //inserito=dispari[b]; Stessa cosa qui
  29.        dispari[c]=inserito;
  30.     b++;
  31.     }
  32.    
  33.     }
  34.  
  35.     printf ("Numeri Pari Inseriti: \n");
  36. /*Ho pensato ke se la variabile c incrementa ogni volta che prende
  37. un numero,appena i numeri sono finiti essa si ferma..se io prendo quella variabile come fine del ciclo dovrebbe venire..invece no! */    
  38.     for (p=0; p==c; p++)
  39.         {printf("%d\n",pari[c]);
  40.     }
  41.        
  42.     printf ("Numeri Dispari Inseriti: \n");
  43.       for (d=0; d==b; d++)
  44.         {printf("%d\n",dispari[b]);
  45.     }      
  46. }


PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 22:34
Lunedì, 24/08/2009
ma non dovrebbe andare nella sezione C e non C++?

Ultima modifica effettuata da giuseppe93 il 24/08/2009 alle 22:35
PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 1:11
Martedì, 25/08/2009
Testo quotato

Postato originariamente da rockdavide:

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

Codice sorgente - presumibilmente C/C++

  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5. int inserito,n,volte,fermo,pari[20],dispari[20],d,p,c,b;
  6.    
  7. printf ("Scrivi 20 numeri o premi 0 per fermarti:\n");
  8.  
  9.     fermo,volte=1;
  10.     n=0;
  11.     c,b=0;
  12.  
  13.     while(fermo!=0 & n<20)
  14.     {
  15.     printf ("Numero %d: ",volte);
  16.     scanf ("%d", & inserito);
  17.     fermo=inserito;
  18.     n++;
  19.     volte++;
  20.     if(inserito%2==0)
  21.     {
  22.     //inserito=pari[c]; Questo comando non è corretto perchè copia il valore di pari[c] nella variabile inserito, invece deve fare il contrario. Quindi:
  23.     pari[c]=inserito;
  24.     c++;
  25.     }
  26.     else
  27.     {
  28.     //inserito=dispari[b]; Stessa cosa qui
  29.        dispari[c]=inserito;
  30.     b++;
  31.     }
  32.    
  33.     }
  34.  
  35.     printf ("Numeri Pari Inseriti: \n");
  36. /*Ho pensato ke se la variabile c incrementa ogni volta che prende
  37. un numero,appena i numeri sono finiti essa si ferma..se io prendo quella variabile come fine del ciclo dovrebbe venire..invece no! */    
  38.     for (p=0; p==c; p++)
  39.         {printf("%d\n",pari[c]);
  40.     }
  41.        
  42.     printf ("Numeri Dispari Inseriti: \n");
  43.       for (d=0; d==b; d++)
  44.         {printf("%d\n",dispari[b]);
  45.     }      
  46. }



Certo che non funziona:
fermo,volte=1;
in questo modo inizializzi solo la variabile volte. Per inizializzarle entrambe bisogna scrivere:
fermo=1,volte=1;

PM Quote
Avatar
rockdavide (Normal User)
Newbie


Messaggi: 6
Iscritto: 24/08/2009

Segnala al moderatore
Postato alle 8:18
Martedì, 25/08/2009
il problema resta: una volta finito li ciclo non mi stampa a video gli array!

PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 11:29
Martedì, 25/08/2009
Ok, dunque c'erano più errori del previsto...

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5. int inserito,n,volte,fermo,pari[20],dispari[20],d,p,c,b;
  6.    
  7. printf ("Scrivi 20 numeri o premi 0 per fermarti:\n");
  8.  
  9.     fermo=1,volte=1;
  10.     n=0;
  11.     c,b=0;
  12.  
  13.     while(fermo!=0 & n<20)
  14.     {
  15.     printf ("Numero %d: ",volte);
  16.     scanf ("%d", & inserito);
  17.     fermo=inserito;
  18.     n++;
  19.     volte++;
  20.     if(inserito%2==0)
  21.     {
  22.     pari[c]=inserito;
  23.     c++;
  24.     }
  25.     else
  26.     {
  27.     //dispari[c]=inserito; Sbagliato
  28.     dispari[b]=inserito;
  29.     b++;
  30.     }
  31.    
  32.     }
  33.  
  34.     printf ("Numeri Pari Inseriti: \n");
  35.     //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
  36.     for(p=0; p<c; p++)
  37.     {
  38.     //printf("%d\n",pari[c]); Sbagliato
  39.     printf("%d\n",pari[p]);
  40.     }
  41.        
  42.     printf ("Numeri Dispari Inseriti: \n");
  43.       for (d=0; d<b; d++)
  44.         {printf("%d\n",dispari[d]);
  45.     }      
  46. }



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
PM Quote
Avatar
rockdavide (Normal User)
Newbie


Messaggi: 6
Iscritto: 24/08/2009

Segnala al moderatore
Postato alle 20:34
Martedì, 25/08/2009
no..una volta inseriti i n o premuto 0 il programma si interrompe senza iniziare i cicli for per visualizzare gli array!:(

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo