Esercizio media/numeri pari-dispari

di il
2 risposte

Esercizio media/numeri pari-dispari

Ciao ,

Per cortesia mi date un parere anche sullo stile ( spazi , dichiarazioni,cavolate che ho scritto ). Ho letto un topic qui sul forum e ho provato a fare qualcosa
Grazie

#include "pch.h"
#include <iostream>
#include <vector>
#include <iomanip>

using namespace std;

int main()
{
	const int max = 1000;
	vector<int> pari;			// contiene l'elenco dei numeri pari
	vector<int> dispari;			// contiene l'elenco dei numeri dispari
	vector<int>::iterator it;		// iterum 

	cout << "Inserisci un numero per volta fino a raggiungere il totale di " << max << endl;
	cout << endl;

	int numb;
	int contNumb = 0;
	int modulo   = 0;
	float totale = 0.0;
	
	do {
		cout << "Il totale in questo momento : " << totale << endl;
		cout << ">";
		//Ottiene un nuovo numero
		cin >> numb;				
		// conta gli addendi
		contNumb++;					
		// controlla se è divisibile per due
		modulo = numb % 2;			
		//modulo = 0 il numero è pari , altrimenti è dispari
		(!modulo) ? pari.push_back(numb): dispari.push_back(numb); 

	} while ((totale+=numb) <= max && numb!=0);	// 0 = esci
	cout << endl;
	
	cout << "Hai raggiunto il totale di " << totale << endl;
	cout << endl;
	cout << "Il risultato della media : " << fixed << setprecision(3) << totale / contNumb << endl ;
	cout << endl;

	cout << "I numeri pari inseriti sono :" << endl;
	for (it = pari.begin(); it != pari.end(); it++) {
		cout <<*it << ' ';
	}
	cout << endl;
	
	cout << "I numeri dispari inseriti sono :" << endl;
	for (it = dispari.begin(); it != dispari.end(); it++) {
		cout << *it << ' ';
	}
	cout << endl;
	return 0;
}

2 Risposte

  • Re: Esercizio media/numeri pari-dispari

    	} while ((totale+=numb) <= max && numb!=0);	// 0 = esci
    
    Due note stilistiche:
    - mettere il while alla fine a me non piace, preferisco averlo all'inizio in modo da sapere subito qual'è la condizione di uscita.
    - l'aggiornamento del valore di totale è più visibile e leggibile se messo in una riga separata. Dal punto di vista del codice generato non c'è differenza ma quando torni a rileggere il codice, si!
  • Re: Esercizio media/numeri pari-dispari

    Ciao ,

    Mettere il while all'inizio non mi permette più di uscire immettendo un valore pari a zero.
    Ho fatto un pò di ricerca e ho scoperto
    stoi(string)
    Sfruttando l' eccezione che si verifica quando tentiamo di convertire un intero su un input di tipo string in un int,
    posso gestire l'uscita con la lettera 'f'
    Quindi non occorre solo aspettare di arrivare a max ma ci si può fermare prima , oppure uscire subito se non si
    ha digitato nessun numero.
    Il return 0; mi lascia perplesso non so se conviene utilizzarlo in quel modo
    
    #include "pch.h"
    #include <iostream>
    #include <vector>
    #include <iomanip>
    #include <string>  
    
    using namespace std;
    
    int main()
    {
    	const int max = 1000;
    	vector<int> pari;			// contiene l'elenco dei numeri pari
    	vector<int> dispari;			// contiene l'elenco dei numeri dispari
    	vector<int>::iterator it;		// iterum 
    
    	cout << "Inserisci un numero per volta fino a raggiungere il totale di " << max << " (f=termina)" << endl;
    	cout << endl;
    
    	int numb = 0;
    	int contNumb = 0;
    	int modulo   = 0;
    	float totale = 0.0;
    	string userInput;
    	
    	while (totale <= max) {
    		cout << "Il totale in questo momento : " << totale << endl;
    		cout << ">";
    		//Ottiene un nuovo numero
    		cin >> userInput;
    		
    		// Se viene digitata un lettera , crea una eccezione 
    		try
    		{
    			numb = stoi(userInput);
    		}
    		catch (const std::exception& e)
    		{
    			// Se la lettera è la 'f' o 'F' esce dal programma
    			if (tolower(userInput[0]) == 'f') {
    				// Se non è stato digitato nessun numero esce altrimenti calcola la media
    				// con i valori fino a quel momento disponibili
    				if (contNumb == 0) {
    					cout << "Hai scelto di uscire dal programma digitando " << userInput[0] << endl;
    					return 0;
    				}
    				else break;
    			}
    		}
    		// conta gli addendi
    		contNumb++;					
    		// controlla se è divisibile per due
    		modulo = numb % 2;			
    		//modulo = 0 il numero è pari , altrimenti è dispari
    		(!modulo) ? pari.push_back(numb): dispari.push_back(numb); 
    		// Somma ogni numero inserito dall'utente
    		totale += numb;
    
    	} // end of while
    	cout << endl;
    	
    	cout << "Hai raggiunto il totale di " << totale << endl;
    	cout << endl;
    	cout << "Il risultato della media : " << fixed << setprecision(3) << totale / contNumb << endl ;
    	cout << endl;
    
    	cout << "I numeri pari inseriti sono :" << endl;
    	for (it = pari.begin(); it != pari.end(); it++) {
    		cout <<*it << ' ';
    	}
    	cout << endl;
    	
    	cout << "I numeri dispari inseriti sono :" << endl;
    	for (it = dispari.begin(); it != dispari.end(); it++) {
    		cout << *it << ' ';
    	}
    	cout << endl;
    	return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
2 risposte