Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Le Jabra Evolve3 85 non sono semplicemente cuffie Bluetooth con cancellazione del rumore. Sono un dispositivo professionale pensato per chi trascorre gran parte della giornata in riunione, al telefono o davanti a un assistente basato sull'intelligenza artificiale
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-02-2012, 11:39   #1
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
[C++] Switch

Codice:
/*
 * TestGradeBook.cpp
 *
 *  Created on: 07/feb/2012
 *      Author: andrea
 */

#include <iostream>
#include "GradeBook.h"

using namespace std;

int main()
{
   GradeBook gradeBook1("Il corso uno è troppo lunga da scrivere e quindi verra automaticamente tagliato");

   gradeBook1.displayCourse();
   cout << "\n";


   gradeBook1.inputGrades();
   gradeBook1.displayGradeReport();


   return 0;
}
Codice:
/*
 * GradeBook.h
 *
 *  Created on: 07/feb/2012
 *      Author: andrea
 */

#include <string>
using namespace std;

class GradeBook{
   private:
   string courseName;
   string instructorName;

   int aCount;
   int bCount;
   int cCount;
   int dCount;
   int eCount;
   int fCount;


   public:
   void setCourseName(string);
   string getCourseName();


   GradeBook(string);

   void displayCourse();
   void determineClassAverage();

   void inputGrades();
   void displayGradeReport();

};
Codice:
/*
 * GradeBook.cpp
 *
 *  Created on: 07/feb/2012
 *      Author: andrea
 */

#include <iostream>
#include <cstdio>
#include "GradeBook.h"
using namespace std;


   void GradeBook::setCourseName(string name)
   {
      if(name.length() <= 25) courseName = name;
	  else
		{
			courseName = name.substr(0,25);
			cout << "Nome troppo lungo" << endl;
		}
   }

   string GradeBook::getCourseName()
   {
      return courseName;
   }
/*
	void GradeBook::setInstructorName(string name)
	{
	   instructorName = name;
	}

	string GradeBook::getInstructorName(){
		return instructorName;
	}
*/
	GradeBook::GradeBook(string name)
	{
      setCourseName(name);
      aCount = 0;
      bCount = 0;
      cCount = 0;
      dCount = 0;
      fCount = 0;
	}

	void GradeBook::displayCourse()
	{
		cout << getCourseName() << endl;
	}

	void GradeBook::determineClassAverage()
	{
		int gradeCounter = 1;
		int total, grade;

		total = 0;

		while(gradeCounter<=10)
		{
			cout << "Enter grade: " << endl;
			cin >> grade;
			total = total + grade;
			gradeCounter = gradeCounter +1;
		}

		cout << "The average is " << (total/10);
	}
	void GradeBook::inputGrades()
	{
		int grade;

		cout << "Enter the Letter Grade: " << endl << "Enter the EOF character to end input " << endl;

		while ((grade = cin.get()) != EOF){
			switch (grade)
			{
			case 'a':
			case 'A':
				aCount++;
				break;
			case 'b':
			case 'B':
				bCount++;
				break;
			case 'c':
			case 'C':
				cCount++;
				break;
			case 'd':
			case 'D':
				dCount++;
				break;
			case 'e':
			case 'E':
				eCount++;
				break;
			case 'f':
			case 'F':
				fCount++;
				break;
			default:
				cout << "Incorrect Letter Grade entered" << "\n Enter a new grade: " << endl;
				break;
			}
		}


	}

	void GradeBook::displayGradeReport(){
		cout << "\n\nNumber of students who received each Letter Grade:"
		<< "\nA: " << aCount
		<< "\nB: " << bCount
		<< "\nC: " << cCount
		<< "\nD: " << dCount
		<< "\nE: " << eCount
		<< "\nF: " << fCount
		<< endl;
	}
Questo è l'output

Codice:
Nome troppo lungo
Il corso uno è troppo lu

Enter the Letter Grade: 
Enter the EOF character to end input 
a
Incorrect Letter Grade entered
 Enter a new grade: 
d
Incorrect Letter Grade entered
 Enter a new grade: 
a
Incorrect Letter Grade entered
 Enter a new grade: 
A
Incorrect Letter Grade entered
 Enter a new grade:


Perchè mi dice che anche caratteri come A e a sono sbagliati

Avete qualche idea ragazzi?
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 13:36   #2
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Non ho il pc sotto mano ma grade è un int.
cin dovrebbe convertire il carattere immesso ad un int corrispondente tratto dalla tabella ASCII, ma poi case riconverte grade in char per il confronto?
Cmq se metti char grade è tutto molto più intuitivo e naturale, a prescindere che funzioni o no.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 14:20   #3
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Anche cambiando con Char il programma non funziona. Le istruzioni del blocco default vengono eseguite in ogni caso e non capisco perché.
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 15:01   #4
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da legolas93 Guarda i messaggi
Anche cambiando con Char il programma non funziona. Le istruzioni del blocco default vengono eseguite in ogni caso e non capisco perché.
Ho fatto qualche prova.
Innanzitutto ho notato che col tuo programma se in input dai aaa, in una sola botta aCount va su di 3, verificato così:
Codice:
			default:
				cout << "Incorrect Letter Grade entered " << aCount << " " << bCount << "\n Enter a new grade: " << endl;
//				break;
Poi ho usato:
Codice:
char grade
while (cin >> grade, grade != EOF)
ed ora funziona. Solo con char grade però, int grade manda tutto in loop. Ma non so quale carattere corrisponda a EOF quindi non so uscire

Cmq anch'io ho sbattuto la testa varie volte con cin, e ancora non ho imparato bene come usare >> e altre funzioni come get() o read().
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 15:12   #5
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Inoltre qui la media la calcoli come divisione tra interi:
Codice:
	void GradeBook::determineClassAverage()
	{
		int gradeCounter = 1;
		int total, grade;

		total = 0;

		while(gradeCounter<=10)
		{
			cout << "Enter grade: " << endl;
			cin >> grade;
			total = total + grade;
			gradeCounter = gradeCounter +1;
		}

		cout << "The average is " << (total/10);
	}
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 15:23   #6
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Inoltre qui la media la calcoli come divisione tra interi:
Codice:
	void GradeBook::determineClassAverage()
	{
		int gradeCounter = 1;
		int total, grade;

		total = 0;

		while(gradeCounter<=10)
		{
			cout << "Enter grade: " << endl;
			cin >> grade;
			total = total + grade;
			gradeCounter = gradeCounter +1;
		}

		cout << "The average is " << (total/10);
	}
Sisi lo so. Sto seguendo il Deitel e sto rifacendo a manina gli esempi. Sisi lo so che la vera media non si fa così! . Ora guardo il tuo esempio sopra
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 15:25   #7
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Ci sono:
tu inputti "a[invio]", e cin contiene proprio quei due caratteri.
La prima volta grade = 'a', la seconda volta non ti fa immettere il carattere e grade = '\n' perchè cin ha dentro un "rimasuglio". Per questo motivo quando prima scrivevo aaa[invio] aCount andava su di 3.
A quanto pare devi usare >> perchè quest'operatore scarta da solo il carattere '\n'
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 15:26   #8
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Ho fatto qualche prova.
Innanzitutto ho notato che col tuo programma se in input dai aaa, in una sola botta aCount va su di 3, verificato così:
Codice:
			default:
				cout << "Incorrect Letter Grade entered " << aCount << " " << bCount << "\n Enter a new grade: " << endl;
//				break;
Poi ho usato:
Codice:
char grade
while (cin >> grade, grade != EOF)
ed ora funziona. Solo con char grade però, int grade manda tutto in loop. Ma non so quale carattere corrisponda a EOF quindi non so uscire

Cmq anch'io ho sbattuto la testa varie volte con cin, e ancora non ho imparato bene come usare >> e altre funzioni come get() o read().
Yaaa ..Avevo pensato anche io di farlo così. Solo che volevo capire perchè copiando l'esempio dal libro non funzionava.

Sono sicuro di non aver fatto errori di battitura quindi ad occhio direi che è il libro un po...

Ora cerco da qualche parte come funziona il get()

Grazie!

PS: se avete qualche idea di cosa intenda il libro postate pure!
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 15:31   #9
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Ci sono:
tu inputti "a[invio]", e cin contiene proprio quei due caratteri.
La prima volta grade = 'a', la seconda volta non ti fa immettere il carattere e grade = '\n' perchè cin ha dentro un "rimasuglio". Per questo motivo quando prima scrivevo aaa[invio] aCount andava su di 3.
A quanto pare devi usare >> perchè quest'operatore scarta da solo il carattere '\n'
Hai ragione perchè come detto qua:

http://www.cplusplus.com/reference/i...m/istream/get/

get() estrae un carattere per volta e penso che prenda anche i whitespace.

Ora guardo se sull'8 versione del Deitel hanno corretto sto errore..

Grazie!
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 15:54   #10
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Quote:
Originariamente inviato da legolas93 Guarda i messaggi
Hai ragione perchè come detto qua:

http://www.cplusplus.com/reference/i...m/istream/get/

get() estrae un carattere per volta e penso che prenda anche i whitespace.

Ora guardo se sull'8 versione del Deitel hanno corretto sto errore..

Grazie!
Dopo aver guardato anche la versione 8 e vedendo che il codice era uguale. Ho provato a fare qualche ricerca su internet e ho trovato questo su un forum inglese:

http://www.sysopt.com/forum/archive/.../t-157787.html

e io come lui non avevamo notato che tra i case c'era anche:
Codice:
case '\n': // ignore newlines,
case '\t': // tabs,
case ' ': // and spaces in input
break; // exit switch
di modo che ignorasse i white space.

Che errore sciocco
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 16:02   #11
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da legolas93 Guarda i messaggi
Dopo aver guardato anche la versione 8 e vedendo che il codice era uguale. Ho provato a fare qualche ricerca su internet e ho trovato questo su un forum inglese:

http://www.sysopt.com/forum/archive/.../t-157787.html

e io come lui non avevamo notato che tra i case c'era anche:
Codice:
case '\n': // ignore newlines,
case '\t': // tabs,
case ' ': // and spaces in input
break; // exit switch
di modo che ignorasse i white space.

Che errore sciocco

Cmq anche con cin >> grade se scrivi aaa[invio] aCount va su di 3. Per questi esercizi va bene ma in un programma serio ci vuole un controllo serio dell'input mi sa.

Ultima modifica di vendettaaaaa : 07-02-2012 alle 16:04.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 17:55   #12
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi

Cmq anche con cin >> grade se scrivi aaa[invio] aCount va su di 3. Per questi esercizi va bene ma in un programma serio ci vuole un controllo serio dell'input mi sa.
Sisi.. I know


Questo era solo un esercizio per far vedere come funzionava lo Switch.

Dai che prima o poi arriverò a fare qualcosa di seriooo

Mi manca ancora qualcosa come 800 pagine più tutta l'esperienza sul campo
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 19:53   #13
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Ah, a me 200 pagine di un libro, 1200 di un altro solo per il C++
Poi ci sono i libri sulle Qt...e l'esperienza sul campo
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Il CEO di NVIDIA Jensen Huang ammette la...
Moon Base: la NASA amplia contratti e mi...
L'italiana Avio fa un passo indietro sul...
SpaceX Starship: Flight 15 punta al prim...
Smartbox colpita da un attacco hacker: e...
Un'IA risolve in 3 giorni un enigma che ...
TOP 10 Amazon weekend: tornano gli Smart...
ReactOS introduce il supporto USB 3.0: i...
TECLAST M60 a soli 159€ su Amazon: table...
Haier da 65 pollici a partire da 397€ su...
Google Pixel 11, Pro e Pro XL in offerta...
Memorie, inversione di tendenza: i PC co...
Rubati 6 pallet di hardware NVIDIA da 11...
Addio ai limiti del silicio? Ecco il dia...
Windows 11 27H2 sarà un 'cambio completo...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:31.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v