[C++] Un problema da risolvere

Sentenza1
Ciao a tutti, ho provato a risolvere il problema, ma non capisco cos'è che non funzioni. Non è un problema di analisi, il problema è semplice. Ho sbagliato a strutturare il programma? Ecco l'esercizio:

- Una ditta produce pacchetti di sale. Tali pacchetti devono contenere 1 Kg di sale con una tolleranza in più o in meno del 2%. Costruisci un algoritmo che, data in ingresso la sequenza dei pesi dei pacchetti (che termina con 0), fornisca:
1) I pacchetti di peso corretto, sottopeso e sovrappeso;
2) Il peso totale della merce nei pacchetti a norma ed il peso totale dei pacchetti fuori norma;

Ecco il mio algoritmo: (L'unica cosa di cui non ho tenuto conto è 'la sequenza che termina con 0 dei pacchetti', che non ho capito a cosa serve, cosa significa, e come inserire una condizione simile.. mi aiutereste?)

#include <iostream>
using namespace std;

int main () {
	float peso, somma, somma2, cont=0, num;
	int flag, n;
	
	cout <<endl;
	cout <<"Quanti pacchetti vuoi inserire?"<<endl;
	cin >> n;
	
	while (cont<n) {
		
		cout <<"Inserisci il peso del pacchetto di sale in Kg."<<endl;
		cin >> peso;
		
		cont=cont+1;
		
		if (peso==1) {
			cout <<"Il pacchetto è in norma"<<endl;
			flag=0;
			peso=num;
		}
		if (peso>1) {
			cout <<"Il pacchetto è sovrappeso"<<endl;
			flag=1;
		}
		if (peso<1)	{
			cout <<"Il pacchetto è sottopeso"<<endl;
			flag=1;
		}
	}
	
	if (flag==0) {
		somma=somma+num;
		cout <<"Il peso dei pacchetti in norma è "<<somma<<endl;
	}
	if (flag==1) {
		somma2=somma2+peso;
		cout <<"Il peso dei pacchetti fuori norma è "<<somma<<endl;
	}
	
	return 0;
	system ("Pause");
}

Risposte
Rggb1
Effettivamente mancano alcune cose, ma a parte ciò credo che controllare se il peso sia esattamente un chilogrammo non sia conforme alle specifiche originali (che ti dicono che la tolleranza ammessa è il 2%).

Inoltre, tutto lo schema del ciclo non va: per ogni valore dato devi fare i controlli appropriati, all'interno del ciclo; se il valore è ammissibile lo somma al totale dei pesi ammissibili, altrimenti... prova a continuare.

Sentenza1
Lo somma al totale dei pesi non ammissibili.. ma come chiudo la sequenza con 0?

Sentenza1
Ragazzi nessuno può aiutarmi?

Rggb1
Come ti ho anticipato, lo schema del ciclo non è corretto. Intanto correggi questo: le somme vengono eseguite al di fuori del ciclo, mentre devono essere eseguite al suo interno, in quanto la somma deve essere fatta per ogni singolo valore (peso) letto.

Sentenza1
Alla fine ho risolto, grazie.

vict85
Penso che il codice abbia vari problemi. Al di là del fatto che tu abbia risolto il problema.

1) Per prima cosa è generalmente meglio se il problema viene diviso. Tu hai invece inserito tutto nel main e hai unito l'assegnazione con il test (quest'ultima può anche starci data la semplicità del test). In questo caso non cambiava nulla perché ci sono poche righe di codice ma quando il codice diventa più lungo il tutto potrebbe essere meno gestibile.

2) Usare un int per un lavoro da bool è sconsigliato in C++ e usare un bool rende il tutto più leggibile. Quel bool peraltro è inutile.

3) system(pause); dopo il return è come non metterlo :wink: . Comunque esistono modi migliori (più portabili e spesso l'uso degli IDE rende il tutto piuttosto inutile).

4) Hai usato un while per fare il lavoro classico di un for.

5) I tuoi 3 if potevano essere trasformati in un singolo if-else o in un if-else if-else.

6) Usa i +=

E poi ci sono i problemi di progettazione.

Sentenza1
Ti ringrazio =)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.