Switch case obbligatorio su un programma/ C++

di Anonimizzato27046 il
25 risposte
Salve, il mio professore d'informatica (3 informatico) ci ha assegnato un programma da scrivere su dev c++, da fare a tutti i costi con lo switch case per scopo puramente didattico, la restrizione è il non poter fare una caterba di switch e/o switch con case lunghissimi. Ho provato a farlo sfruttando l'if else per assegnare a seconda dell'età inserita un valore ad una variabile d'appoggio, da utilizzare poi con lo switch. Purtroppo in output mi da tutti 0, potete darmi una mano? ps: cout<<varapp l'ho inserito per "debug"
//Marco Lombardi, 3H informatica, ISIS A. Serra, Napoli.
//Inserire l'età anagrafica di 10 clienti
//Calcolare e presentare a video:
//Quanti clienti sono minorenni;
//Quanti clienti sono tra i 30 ed i 45 anni;
//Quanti clienti sono tra i 45 ed i 60 anni;
//Quanti clienti hanno più di 60 anni;

#include <iostream>
using namespace std;
int main()
{
int eta=0,varapp=0,minorenni=0,fascia3045=0,fascia4560=0,over60=0;

for (int c=0; c<10; c++)
{
	cout<<"Inserire l'eta' anagrafica"<<endl;
	cin>>eta;
	
	if (eta<18){
	varapp=1;}
	else if (eta>=30 && eta<=45){
	varapp=2;}
	else if (eta>=45 && eta<=60){
	varapp=3;}
	else if (eta>60){
	varapp=4;}
	
	cout<<varapp<<endl;
	
	
	switch (varapp)
	{
		case '1':
			minorenni++;
			break;
		
		case '2':
			fascia3045++;
			break;
			
		case '3':
			fascia4560++;
			break;
			
		case '4':
			over60++;
			break;
			
	}
}

cout<<"I clienti minorenni sono: "<<minorenni<<endl
<<"I clienti con eta' compresa tra i 30 ed i 45 anni sono: "<<fascia3045<<endl
<<"I clienti con eta' compresa tra i 45 ed i 60 anni sono: "<<fascia4560<<endl
<<"I clienti con piu' di 60 anni sono: "<<over60<<endl;
system: ("PAUSE");
return 0;
}

25 Risposte

  • Devi scrivere

    case 1:

    non

    case '1' :

    E già che ci sei sistem la if della fascia 45 per non sovrapporsi. E aggiungi la fascia 18-29
  • La variabile varapp e la struttura switch non ti serve a niente. Puoi incrementare i contatori già nei diversi rami della if.
  • [Post eliminato]
  • [CODE] system: ("PAUSE"); Oltre ad esserci un errore sintattico, l’intera chiamata a system andrebbe evitata.
  • Ma la "prescrizione" di usare la selezione a "switch - case" è cogente?
    intendo, il professore vuole prorpio che tu usi uno switch?
    perchè è il costrutto meno adatto, anche una semplice if - else if viene più leggibile e più semplice
    che poi dopo che hai pretrattato i dati con una serie di if-elseif lo switch non serve più, come giustamente ti hanno detto
    io aborro "if -else if", ma devo ammettere che qui va meglio di uno "switch - case"
    io lo farei in maniera diversa ancora, con array e soglie, ma non sono io che devo risolvere l'esercizio
  • Probabilmente il professore vuole fargli fare uno switch su eta/15
  • Punto di vista alternativo, che non avevo considerato

    io avrei fatto un array di strutture di tre membri, due interi e uno stringa
    oppure tre array da usare con unico indice, un intero per il contatore, un intero per la soglia d'età e una stringa per la descrizione
    ad ogni input attraverso l'array, appena l'età supera la soglia incremento il contatore ed esco dal for
    (qui col verbo "attraversare" intendo "percorro l'array con un ciclo for")
    poi in sede di output attraverso di nuovo l'array, stampo il contatore e la sua descrizione
    però in effetti non uso switch (e nemmeno le da me odiatissime if-elseif, che aborro, odio, detesto, evito e altro ancora...
  • Direi che gli array o altre strutture dati non sono contemplate nella natura dell’esercizio che è fare mano con lo switch
  • In effetti secondo me il professore ha fatto una cappella, in pratica dopo averci rispiegato lo switch (lo aveva spiegato in secondo un'altra prof e abbastanza male) ci ha dato questo esercizio, forse essendo abituato ad altri linguaggi che nello "switch" consentono dei range nei case.
    Gliel'ho spiegato e lui ha detto di usarlo comunque suggerendo l'impostazione che ho attuato nel programma che ho fatto (if e poi switch).
    Comunque ho aggiustato la sintassi dei case ma niente...
  • markibox48 ha scritto:


    ... ma niente...
    Cioè, cosa hai scritto? Cosa succede ancora? Ce lo inventiamo?
  • Sempre 0 in output, invio il codice me l'ero scordato.
  • Aspettiamo questo codice ... sperando che tu abbia apportato le correzioni ai case che ti ho indicato nella prima risposta e che tu abbia RICOMPILATO.
  • Scusate, ecco il codice ( il prof ha assegnato un altro programma)
    //Marco Lombardi, 3H informatica, ISIS A. Serra, Napoli.
    //Inserire l'età anagrafica di 10 clienti
    //Calcolare e presentare a video:
    //Quanti clienti sono minorenni;
    //Quanti clienti sono tra i 30 ed i 45 anni;
    //Quanti clienti sono tra i 45 ed i 60 anni;
    //Quanti clienti hanno più di 60 anni;
    
    #include <iostream>
    using namespace std;
    int main()
    {
    int e=0,t=0,f1=0,f2=0,f3=0,f4=0;
    
    for (int c=0; c<10; c++)
    {
    	cout<<"Inserire l'eta' anagrafica"<<endl;
    	cin>>e;
    	
    	if (e<18)
    	t=1;
    	else if (e>=30 && e<=45)
    	t=2;
    	else if (e>=45 && e<=60)
    	t=3;
    	else if (e>60)
    	t=4;
    	
    	
    	switch (t)
    	{
    		case '1':
    			f1++;
    			break;
    		
    		case '2':
    			f2++;
    			break;
    			
    		case '3':
    			f3++;
    			break;
    			
    		case '4':
    			f4++;
    			break;
    	}
    }
    
    cout<<"I clienti minorenni sono: "<<f1<<endl
    <<"I clienti con eta' compresa tra i 30 ed i 45 anni sono: "<<f2<<endl
    <<"I clienti con eta' compresa tra i 45 ed i 60 anni sono: "<<f3<<endl
    <<"I clienti con piu' di 60 anni sono: "<<f4<<endl;
    return 0;
    }
  • 1 != '1'

    Te l'hanno già detto!
Devi accedere o registrarti per scrivere nel forum
25 risposte