Problema con ciclo while controllato da sentinella

di il
6 risposte

Problema con ciclo while controllato da sentinella

Salve, mi sto approcciando da poco al C++ e ho trovato molto interessante questo forum. Il mio ambiente di lavoro è eclipse. Ho un problema con un programma: il programma deve permette l'inserimento di un indefinito numero di venditori e di 10 numeri, che rappresentano le vendite, per ciascuno; deve poi valutare la vendita migliore del singolo venditore e la vendita migliore tra tutti i venditori e individuare il venditore migliore tra tutti. Il mio programma ha due errori: il primo è che il ciclo non riconosce il valore sentinella del while, infatti continua anche se inserisco -1. Il secondo problema è che il programma che ho fatto non attribuisce al singolo venditore la sua vendita massima, infatti se il venditore inserito successivamente ha vendite inferiori al primo, il programma attribuisce al secondo venditore la vendita massima del primo. Non riesco a capire perchè il programma non riconosca il valore sentinella, ne ho fatti altri e hanno funzionato ma non riesco a capire quale sia il mio errore stavolta.

#include <iostream>
using namespace std;

int main() {
	int vendite;
	int venditaMax = 0;
	int venditaMaxTot = 0;
	int codiceVenditore;
	int Vincitore;

    while (codiceVenditore != -1) {
		cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
		cin >> codiceVenditore;

		cout << "Inserire il numero di vendite " << endl;
		cin >> vendite;

		for(int contatoreVendite = 1; contatoreVendite <= 10; ++contatoreVendite) {
			cout << "Inserire il numero di vendite successivo" << endl;
			cin >> vendite;

			if (vendite > venditaMax)
				venditaMax = vendite;

		}

		cout << "Il numero maggiore di vendite del venditore n° " << codiceVenditore << " é " << venditaMax << endl;
	}

			if (venditaMax > venditaMaxTot) {
				venditaMaxTot = venditaMax;
			    Vincitore = codiceVenditore; }



	cout << "Il vincitore è il venditore n° " << Vincitore << "con " << venditaMaxTot << "vendite" << endl;

	return 0;
}

6 Risposte

  • Re: Problema con ciclo while controllato da sentinella

    In che senso non riconosce il valore sentinella?
  • Re: Problema con ciclo while controllato da sentinella

    Se digito il valore sentinella il ciclo va avanti come se avessi digitato un qualsiasi altro valore invece di bloccarsi e andare oltre il while.
  • Re: Problema con ciclo while controllato da sentinella

    E' naturale che va avanti dato che la while viene testata all'inizio del ciclo e non dopo la cin.
  • Re: Problema con ciclo while controllato da sentinella

    Ok, grazie mille, ho risolto il primo problema di questo programma, eccolo funzionante
    #include <iostream>
    using namespace std;
    
    int main() {
    	int vendite;
    	int venditaMax = 0;
    	int codiceVenditore;
    
    
    	cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
    	cin >> codiceVenditore;
    
        while (codiceVenditore != -1) {
        	cout << "Inserire il numero di vendite " << endl;
    		cin >> vendite;
    
    			for(int contatoreVendite = 2; contatoreVendite <= 10; ++contatoreVendite) {
    				cout << "Inserire il numero di vendite successivo" << endl;
    				cin >> vendite;
    		}
    
    			if (vendite > venditaMax)
    				venditaMax = vendite;
    
    		cout << "Il numero maggiore di vendite del venditore n° " << codiceVenditore << " é " << venditaMax << endl;
    		cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
    		cin >> codiceVenditore;
        }
    
    	return 0;
    }
    
    Ora il secondo problema è che il programma che ho fatto non attribuisce al singolo venditore la sua vendita massima, infatti se il venditore inserito successivamente ha vendite inferiori al primo, il programma attribuisce al secondo venditore la vendita massima del primo. Suggerimenti?
  • Re: Problema con ciclo while controllato da sentinella

    La if va fatta per ogni input delle vendite, non solo alla fine
  • Re: Problema con ciclo while controllato da sentinella

    Ok, grazie mille, ho inserito la if nel ciclo for. Ecco il codice corretto
    #include <iostream>
    using namespace std;
    
    int main() {
    	int vendite;
    	int venditaMax = 0;
    	int codiceVenditore;
    
    
    	cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
    	cin >> codiceVenditore;
    
        while (codiceVenditore != -1) {
        	cout << "Inserire il numero di vendite " << endl;
    		cin >> vendite;
    		venditaMax = vendite;
    
    			for(int contatoreVendite = 2; contatoreVendite <= 10; ++contatoreVendite) {
    				cout << "Inserire il numero di vendite successivo" << endl;
    				cin >> vendite;
    
    				if (vendite > venditaMax)
    				venditaMax = vendite;
    			}
    
    		cout << "Il numero maggiore di vendite del venditore n° " << codiceVenditore << " é " << venditaMax << endl;
    		cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
    		cin >> codiceVenditore;
        }
    
    	return 0;
    }
    
    
    
Devi accedere o registrarti per scrivere nel forum
6 risposte