Esercizio su una sequenza di interi
Buonasera!
Stavo provando a svolgere questo esercizio:
Si scriva un programma in linguaggio C per poter analizzare una sequenza di numeri.
Dati N numeri interi letti da tastiera si vogliono calcolare e stampare su schermo diversi
risultati:
• quanti sono i numeri positivi, nulli e negativi
• quanti sono i numeri pari e dispari
Ecco, trovo alcune difficolta' sulla parte di input dei numeri. Io ho scritto il codice in questo modo:
(ho tralasciato parte scrittura). Ecco, il codice funziona per quanto riguarda i vari contatori pero' c'è il problema che quando inserisco un numero piu grande del totale dichiarato inizialmente il ciclo si ferma... secondo voi, in base alla traccia è accettabile? O, in caso, come si potrebbe modificare il codice?
Grazie tante!!!!

Stavo provando a svolgere questo esercizio:
Si scriva un programma in linguaggio C per poter analizzare una sequenza di numeri.
Dati N numeri interi letti da tastiera si vogliono calcolare e stampare su schermo diversi
risultati:
• quanti sono i numeri positivi, nulli e negativi
• quanti sono i numeri pari e dispari
Ecco, trovo alcune difficolta' sulla parte di input dei numeri. Io ho scritto il codice in questo modo:
include <iostream> using namespace std; int main(void){ int totale; int n; int positivo,negativo,nullo; int pari,dispari; cout<<"Quanti numeri saranno inseriti? "; cin>>totale; positivo=0; negativo=0; nullo=0; pari=0; dispari=0; n=0; while (n < totale){ cout<<"Inserisci un numero:"; cin>>n; if (n==0){ nullo=nullo+1; }else{ if (n>0){ positivo=positivo+1; }else{ negativo=negativo+1; } } if(n%2==0){ pari=pari+1; }else{ dispari=dispari+1; } }
(ho tralasciato parte scrittura). Ecco, il codice funziona per quanto riguarda i vari contatori pero' c'è il problema che quando inserisco un numero piu grande del totale dichiarato inizialmente il ciclo si ferma... secondo voi, in base alla traccia è accettabile? O, in caso, come si potrebbe modificare il codice?
Grazie tante!!!!

Risposte
Alcune considerazioni:
- la traccia dice C, ma questo è C++;
- per una maggiore chiarezza e leggibilità ti consiglio di rispettare la spaziatura, l'indentazione e di scrivere una sola istruzione per riga;
- invece di separare dichiarazione e inizializzazione, puoi anche effettuare una dichiarazione con inizializzazione;
- per la cronaca, quando vuoi incrementare o decrementare una variabile intera di un'unità, puoi utilizzare gli operatori ++ e --;
- volendo si può fare a meno delle variabili "negativo" e "dispari", infatti sarà:
* negativo = totale - nullo - positivo;
* dispari = totale - pari.
Ovviamente no.
Nessuna idea? Eppure non mi sembra qualcosa di molto complicato.
- la traccia dice C, ma questo è C++;
- per una maggiore chiarezza e leggibilità ti consiglio di rispettare la spaziatura, l'indentazione e di scrivere una sola istruzione per riga;
- invece di separare dichiarazione e inizializzazione, puoi anche effettuare una dichiarazione con inizializzazione;
- per la cronaca, quando vuoi incrementare o decrementare una variabile intera di un'unità, puoi utilizzare gli operatori ++ e --;
- volendo si può fare a meno delle variabili "negativo" e "dispari", infatti sarà:
* negativo = totale - nullo - positivo;
* dispari = totale - pari.
... pero' c'è il problema che quando inserisco un numero piu grande del totale dichiarato inizialmente il ciclo si ferma... secondo voi, in base alla traccia è accettabile?
Ovviamente no.
... come si potrebbe modificare il codice?
Nessuna idea? Eppure non mi sembra qualcosa di molto complicato.
"Super Squirrel":
Alcune considerazioni:
- la traccia dice C, ma questo è C++;
Sisi, volevo io provare ad implementarlo in c++;
... come si potrebbe modificare il codice?
Nessuna idea? Eppure non mi sembra qualcosa di molto complicato.
Eh infatti... c'ho pensato a lungo, ho provato e riprovato diversi comandi ma non mi è venuto fuori nulla di utile... vuoto proprio.

Per il resto adesso provo a riscrivere il codice in maniera piu ordinata e lo riposto.

Ecco qualche alternativa:
o equivalentemente
while(totale > 0) { ... --totale; }
int i = 0; while(totale > i) { ... ++i; }
o equivalentemente
for(int i = 0; i < totale; ++i) { ... }
"Super Squirrel":
Ecco qualche alternativa:
int i = 0; while(totale > i) { ... ++i; }
Ti ringrazio, in effetti doveva essere una cosa semplice

Comunque ricapitolando ho riscritto il codice in questo modo:
#include <iostream> using namespace std; int main(void){ int totale; int n; int positivo; int nullo; int negativo; int pari; int dispari; int i =0; //inizializzo le variabili positivo =0; nullo =0; negativo =0; pari =0; dispari =0; cout << "Quanti numeri saranno inseriti? "; cin>> totale; while (totale > i) { ++ i; cout << "Inserisci un numero:"; cin >> n; if (n==0) { nullo ++; } else { if (n > 0) { positivo++; }else { negativo++; } } if(n % 2 == 0){ pari ++; } else { dispari ++; } } cout<<"Hai inserito: "<<positivo<<" Positivi; "<<negativo<<" Negativi; "<<nullo<<" Nulli; "<<endl; //stampa dei valori cout<<"Hai inserito: "<<pari<<" Pari; "<<dispari<<" Dispari. "<<endl; }
Poi un'altra cosa: quando ho in una traccia una cosa del tipo: Dato un vettore di N interi,inizializzati da tastiera,determinare il valore massimo e stampare a video sia il massimo che la posizione in cui esso compare per stabilire la dimensione N dell'array devo farlo io arbitrariamente (es assegno N10) oppure devo fare un sistema simile a quello visto in questo esercizio?
Ti ringrazio!!


Ti ringrazio!!
"Amedim":
Poi un'altra cosa: quando ho in una traccia una cosa del tipo: Dato un vettore di N interi,inizializzati da tastiera,determinare il valore massimo e stampare a video sia il massimo che la posizione in cui esso compare per stabilire la dimensione N dell'array devo farlo io arbitrariamente (es assegno N10) oppure devo fare un sistema simile a quello visto in questo esercizio?![]()
![]()
Ti ringrazio!!
tutto ok questo sono riuscito a risolverlo in entrambi i modi utilizzando il vettore dinamico.
