ciao
Allora.. vediamo se riesco a spiegarmi
il codice sotto permette all'utente di
inserire per due ipotetiche famiglie un numero tot
di nomi e ne calcola il più lungo in caratteri:
volevo implementarlo permettendo all'utente di inserire all'inizio anchecodice:#include <iostream> #include <string> #include <stdlib.h> #include <iomanip> using namespace std; char responso[256]; /* Prototipi di funzione */ void legginomi(string *source,int numelementi); void visualizzanomi(string *source,int numelementi); int leggiMassimo(string *source, int numelementi, int &max); int Lunghezza(string source); int main() { int QUANTISONO = 0; int QUANTISONO2 = 0; int max1, max2; int indice1, indice2; cout << "Quante persone ci sono nella prima famiglia?: "; cin.getline(responso,256); QUANTISONO = atoi(responso); string* pNomi = new string[QUANTISONO]; cout << "Quante persone ci sono nella seconda famiglia?: "; cin.getline(responso,256); QUANTISONO2 = atoi(responso); string* pNomi2 = new string[QUANTISONO2]; cout <<endl<<"Inserisci i nomi della prima famiglia:"<<endl; legginomi(pNomi,QUANTISONO); cout <<endl; cout <<endl<<"Inserisci i nomi della seconda famiglia:"<<endl; legginomi(pNomi2,QUANTISONO2); cout << endl << "I " << QUANTISONO << " nomi che hai inserito della prima famiglia sono:" << endl; visualizzanomi(pNomi,QUANTISONO); cout << endl << "I " << QUANTISONO2 << " nomi che hai inserito della seconda famiglia sono:" << endl; visualizzanomi(pNomi2,QUANTISONO2); //calcola il nome più lungo in caratteri e visualizzazione indice1=leggiMassimo(pNomi, QUANTISONO, max1); cout<<endl<<"Il massimo della prima famiglia e': "<<max1<<" in posizione: "<<indice1+1; cout << " ("; cout << pNomi[indice1] << ")" << endl; //calcola il nome più lungo in caratteri e visualizzazione indice2=leggiMassimo(pNomi2, QUANTISONO2, max2); cout<<endl<<"Il massimo della seconda famiglia e': "<<max2<<" in posizione: "<<indice2+1; cout << " ("; cout << pNomi2[indice2] << ")" << endl<<endl; if(max1>max2) { cout<<"il massimo tra le due famiglie e': "<< setw(3) << max1; cout << " (" << pNomi[indice1]; cout << " - nella prima famiglia)" << endl<<endl; } else if(max1<max2) { cout<<"Il massimo tra le due famiglie e': "<< setw(4)<<max2; cout << " (" << pNomi2[indice2]; cout << " - nella seconda famiglia)" << endl<<endl; } else if(max1==max2) { cout<<"Il massimo dei nomi delle 2 famiglie e' identico"<< endl<<endl; } delete [] pNomi; //Cancella l'array dal free store delete [] pNomi2; //Cancella l'array dal free store pNomi = 0; //Assegna un valore null al puntatore pNomi2 = 0; //Assegna un valore null al puntatore system ("PAUSE"); return 0; } void legginomi(string *source,int numelementi) { for (int riga = 0; riga < numelementi; riga++) { cout << "Inserisci il nome #" << riga+1 << " "; cin.getline(responso,256); source[riga] = responso; } } void visualizzanomi(string *source,int numelementi) { for (int riga = 0; riga < numelementi; riga++) { cout << source[riga] << endl; } } int leggiMassimo(string *source, int numelementi, int &max) { max = 0; int i; int index; for(i=0;i<numelementi;i++) { if(Lunghezza(source[i]) > max) { max=Lunghezza(source[i]); index=i; } } return index; //Ritorno l'indice del più lungo } int Lunghezza(string source) { int i=0; int contatore=0; //finche' la stringa non termina while(source[i] != '\0') { //Se non è uno spazio if(source[i] != ' '&& source[i] != '_') { //Aumenta il conteggio di 1 contatore++; } //Passa al prossimo carattere i++; } //Quando ha finito ritorna il numero di caratteri trovati return contatore; }
un numero variabile di famiglie, invece delle solite due fisse.
Avevo provato questo (riporto solo la parte più significativa):
cout << "Quante famiglie ci sono?: ";
cin.getline(responso,256);
quantefam = atoi(responso);
string* pNomifam = new string[quantefam];
leggifam(pNomifam,quantefam);
cout<<endl;
for (int i = 0; i < quantefam; i++)
{
cout << "Quante persone ci sono nella famiglia "<<pNomifam[i]<< "?: ";
cin.getline(responso,256);
..e qui mi sono perso.
Il problema a questo punto è che dopo aver scelto il numero di famiglie
e assegnato loro i relativi nomi, per ogni famiglia bisognerebbe creare
un array che contenga i nomi il cui numero dei membri è deciso sempre
dall'utente..riprenda cioè le funzionalità del mio programma sopra postato..
Chi mi aiuta?
grazie e ciao

Rispondi quotando