Esercizio su una sequenza di interi

Messaggioda Amedim » 18/09/2018, 18:21

Buonasera! :D
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:


Codice:
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!!!! :)
Amedim
Junior Member
Junior Member
 
Messaggio: 131 di 357
Iscritto il: 02/09/2016, 10:50

Re: Esercizio su una sequenza di interi

Messaggioda Super Squirrel » 18/09/2018, 18:58

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.

... 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.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 291 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Esercizio su una sequenza di interi

Messaggioda Amedim » 18/09/2018, 19:15

Super Squirrel ha scritto:
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. :oops:
Per il resto adesso provo a riscrivere il codice in maniera piu ordinata e lo riposto. :smt023
Amedim
Junior Member
Junior Member
 
Messaggio: 132 di 357
Iscritto il: 02/09/2016, 10:50

Re: Esercizio su una sequenza di interi

Messaggioda Super Squirrel » 18/09/2018, 20:06

Ecco qualche alternativa:
Codice:
while(totale > 0)
{
    ...
    --totale;
}

Codice:
int i = 0;
while(totale > i)
{
    ...
    ++i;
}

o equivalentemente
Codice:
for(int i = 0; i < totale; ++i)
{
    ...
}
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 292 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Esercizio su una sequenza di interi

Messaggioda Amedim » 18/09/2018, 21:11

Super Squirrel ha scritto:
Ecco qualche alternativa:

Codice:
int i = 0;
while(totale > i)
{
    ...
    ++i;
}



Ti ringrazio, in effetti doveva essere una cosa semplice :cry: . Il fatto è che quando mi trovo a voler risolvere un codice con un while fatico sempre un po' a trovare le condizioni per "uscire dal ciclo". Quindi,per capire, in sostanza usando questo sistema viene introdotta una nuova variabile i che viene sempre incrementata "fin quando" il valore totale inserito inizialmente resta maggiore di i con i che diventerebbe in un certo senso il valore che inserisci di volta in volta, o sbaglio ?
Comunque ricapitolando ho riscritto il codice in questo modo:

Codice:
#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;
}
Amedim
Junior Member
Junior Member
 
Messaggio: 133 di 357
Iscritto il: 02/09/2016, 10:50

Re: Esercizio su una sequenza di interi

Messaggioda Amedim » 18/09/2018, 23:34

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? :roll: :roll:
Ti ringrazio!!
Amedim
Junior Member
Junior Member
 
Messaggio: 134 di 357
Iscritto il: 02/09/2016, 10:50

Re: Esercizio su una sequenza di interi

Messaggioda Amedim » 19/09/2018, 09:42

Amedim ha scritto: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? :roll: :roll:
Ti ringrazio!!

tutto ok questo sono riuscito a risolverlo in entrambi i modi utilizzando il vettore dinamico. :smt023
Amedim
Junior Member
Junior Member
 
Messaggio: 135 di 357
Iscritto il: 02/09/2016, 10:50


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite