Krackel (Normal User)
Newbie
Messaggi: 3
Iscritto: 15/02/2014
|
Buonasera,
sono un nuovo utente e voglio salutare tutti quanti. Il mio problema risale in un esercizio che sono riuscito a risolverlo al 90%, il 10% rimanente si trova nella traccia che vi sto per mostrare. (Le spiegazioni che ho capito le scrivo tramite codice, così vi faccio capire in che punto mi sono sbagliato).
INIZIO ESERCIZIO - Si scriva un programma che utilizzi la struttura dati più adatta per gestire un elenco di voli, in cui il
generico elemento deve contenere le seguenti informazioni:
Codice sorgente - presumibilmente C++ |
//file struttura.h struct Volo { char partenza[30]; char arrivo[30]; char linea[30]; char tipo[16]; int numpass; }
|
Codice sorgente - presumibilmente C# |
//File funzioni.h Volo leggi_info(); void leggi_elenco(Volo elenco[], int num); void ordina_elenco(Volo elenco[], int num); void inserisci(Volo elenco[], int num, Volo ins); //questo è il punto in cui sono rimasto bloccato void stampa_elenco(Volo elenco[], int num);
|
Successivamente l'esercizio dice: Il programma deve prevedere inizialmente la lettura dell'elenco con tutti i dati per un numero N di
voli specificato dall'utente. Successivamente, il programma preveda la lettura di un valore K fornito
dall'utente e, per K volte, legga un nuovo volo (con la stessa organizzazione delle informazioni
descritto prima). Ovvero il codice è così:
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <cstdlib> #include "struttura.h" #include "funzioni.h" #define NMAX 100 using namespace std; int main(int argc, char** argv) { Volo elenco[NMAX]; int num, k; Volo elem; //Lettura iniziale dell'elenco cout << "Numero voli: "; cin >> num leggi_elenco(elenco, num); //Fase di ordinamento ordina(elenco, num); //Utilizzo il do while per evitare che il numero dei voli //non ecceda le cardinalità dell'array do { cout << "Nuovi voli da inserire: "; cin >> k; }while(num+k > NMAX); for(int i = 0; i < k; i++) { cout << "Inserire i dati del nuovo volo n. " << i+1 << endl; elem = leggi_volo(); inserisci(elenco, num, elem); num++; } //Stampa finale elenco cout << "\nElenco finale\n"; stampa_elenco(elenco, num); return 0; }
|
Successivamente la traccia dice così (continuando sempre quella scritta sopra): e lo inserisca nell'elenco secondo la seguente regola: se il volo è già presente
(uguali scalo di partenza e di arrivo, linea aerea e tipologia di volo), si aggiorni solo il numero dei
passeggeri, aggiungendo al numero esistente il numero di passeggeri presente nel nuovo volo; nel
caso il volo non sia presente, lo si aggiunga all'elenco. Al termine, si stampi l'elenco così
modificato.
Ora svolgo il file funzioni.cpp
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <cstdlib> #include <cstring> #include "struttura.h" using namespace std; Volo leggi_info() { bool corretto; Volo v; cout << "Scalo di partenza: "; cin.ignore(); cin.getline(v.partenza, 30); cout << "Scalo di arrivo: "; cin.getline(v.arrivo, 30); cout << "Linea: "; cin.getline(v.linea, 30); do { cout << "Tipologia volo (Linea/Charter/Aerotaxi): "; cin.getline(v.tipo, 16); if((strcmp(v.tipo, "Linea")==0) || (strcmp(v.tipo, "Charter")==0) || (strcmp(v.tipo, "Aerotaxi")==0)) corretto = true; else corretto = false; }while(!corretto); cout << "Numero Passeggeri: "; cin >> v.numpass; return v; } void leggi_elenco(Volo elenco[], int num) { for(int i = 0; i < num; i++) { cout << "Inserire i dati del volo n." << i+1 << endl; elem = leggi_info(); } } void ordina(Volo elenco[], int num) { int last, end; bool fattoswap; last = 0; do { fattoswap = false; end = last; for(int i = num-1; i > end; i --) if(elenco[i].partenza > elenco[i-1].partenza) { Volo appo = elenco[i]; elenco[i] = elenco[i-1]; elenco[i-1] = appo; last = i; fattoswap = true; } }while(fattoswap); return; } void inserisci(Volo elenco[], int num, Volo elem) { //Sono rimasto bloccato in questa funzione dove non so andare avanti nel fare il codice che //se il volo è già presente (uguali scalo di partenza e di arrivo, linea aerea e tipologia di volo), //si aggiorni solo il numero dei passeggeri, aggiungendo al numero esistente //il numero di passeggeri presente nel nuovo volo; nel caso il volo non sia presente, lo si aggiunga all'elenco } void stampa_elenco(Volo elenco[], int num) { for(int i = 0; i < num; i++) { cout << "Volo n." << i+1 << endl; cout << "Scalo partenza: " << elenco[i].partenza << endl; cout << "Scalo arrivo: " << elenco[i].arrivo << endl; cout << "Linea: " << elenco[i].linea << endl; cout << "Tipologia volo: " << elenco[i].tipo << endl; cout << "N. Passeggeri: " << elenco[i].numpass << endl; cout << "----------------------------------------------------------" << endl; }
|
Ragazzi sono rimasto bloccato in quel punto dove non riesco a inserire quella funzione di verifica. Ho letto il regolamento e com'è scritto li, ho scritto tutto in modo dettagliato. Spero che possiate aiutarmi a risolvere questo mio piccolo dubbio. Vi ringrazio in anticipo Ultima modifica effettuata da Krackel il 15/02/2014 alle 21:35 |