Ecco il codice che ho scritto fino ad ora:
C++:#include<iostream> #include<string> using namespace std; int main() { int fb_N=0; string fb_titolo=""; string fb_materia=""; int fb_numero_pagine=0; int fb_libri_italiano=0; int fb_libri_matematica_con_più_300_pagine=0; int fb_numero_medio_pagine_libri_matematica=0; string fb_titolo_libro_con_maggior_numero_pagine=""; string fb_libro_italiano_con_minor_numero_pagine=""; cout<<"Inserisci il numero dei libri di testo: "; cin>>fb_N; while(fb_N>0) { cout<<"Inserisci il titolo del libro: "; cin>>fb_titolo; cout<<"Inserisci la materia del libro: "; cin>>fb_materia; if(fb_materia=="Italiano") { fb_libri_italiano++; } if(fb_materia=="Matematica"&&fb_libri_matematica_con_più_300_pagine>300) { fb_libri_matematica_con_più_300_pagine++; } cout<<"Inserisci il numero di pagine del libro: "; cin>>fb_numero_pagine; // Mi sono bloccato qui. } }
Messaggio unito automaticamente:
Alcuni punti chiave, prima che me li scordi:
- non usare le lettere accentate nelle variabili
- ti consiglierei anche di usare il minuscolo per le variabili, quindi fb_N dovrebbe diventare fb_n (il maiuscolo lo si usa per le costanti, solitamente)
- prima di fare il confronto della stringa, è meglio se uniformi l'input: trasforma tutto in minuscolo e confronta con "italiano" e "matematica"
Di sicuro la soluzione non potrà essere però scrivere tutto il codice nel main(), come stai facendo. Non penso abbiate visto le classi ancora, quindi ve lo farà usare come fosse C...
Quindi ti direi: non so se puoi usare i vector a questo punto, se non puoi, usa un VLA, quindi:
C++:
cin>>fb_n;
Book books[fb_n];
(oh si scusa, importante:
fb_books
)Dove Book è una cosa come:
C++:
struct Book {
string title;
string subject; // la "materia", non so bene come tradurlo
int pages;
};
Spero abbiate trattato le strutture almeno, che mi sembra il modo migliore per gestire decentemente un problema come questo.
A questo punto ti fai un bel for da 0 a fb_n dove richiedi tutti i vari libri, con le relative info, schematicamente:
Codice:
cout << Inserimento libro #" << i << endl;
cout << "Inserisci il titolo:" << endl;
cin >> books[i].title;
......
Al termine del for avrai un array di tipo Book che contiene i tuoi N books. Qui richiamerai le tue funzioni passando come parametro alla funzione l'array di libri.
Il main quindi lo userai solo per popolare il tuo array di libri (puoi farlo anche separatamente se vuoi, ma evitiamo di complicare troppo le cose) e per richiamare le funzioni che ti restituiranno il valore desiderato, eg. per i libri di testo in italiano la firma delle funzione potrebbe essere per esempio:
C++:
int nr_italian_books(struct Book books[]);
// Che richiamerai quindi semplicemente così
cout << "Nr. di libri di italiano: " << nr_italian_books(books) << endl;
Così è come lo strutturerei io almeno. Mi sembra pulito come codice, e facile da adattare ad altre situazioni.
Non uso C++ da un secolo, però non dovrei aver sbagliato (troppo) la sintassi degli "esempi".
Le iniziali fb nelle variabili sono le iniziali del mio nome e cognome; il professore per cercare di rallentarci nel copiare ce li fa inserire così almeno non facciamo copia e incolla senza non modificare niente dice XD
Non ho parole...
Invece di farvi dare nomi esplicativi e farvi usare un prefisso in maniera sensata, fa così.