Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Come organizzo le informazioni di un volo
Forum - C/C++ - Come organizzo le informazioni di un volo

Avatar
Krackel (Normal User)
Newbie


Messaggi: 3
Iscritto: 15/02/2014

Segnala al moderatore
Postato alle 21:34
Sabato, 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++

  1. //file struttura.h
  2. struct Volo {
  3. char partenza[30];
  4. char arrivo[30];
  5. char linea[30];
  6. char tipo[16];
  7. int numpass;
  8. }



Codice sorgente - presumibilmente C#

  1. //File funzioni.h
  2. Volo leggi_info();
  3. void leggi_elenco(Volo elenco[], int num);
  4. void ordina_elenco(Volo elenco[], int num);
  5. void inserisci(Volo elenco[], int num, Volo ins); //questo è il punto in cui sono rimasto bloccato
  6. 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++

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include "struttura.h"
  4. #include "funzioni.h"
  5. #define NMAX 100
  6. using namespace std;
  7.  
  8. int main(int argc, char** argv)
  9. {
  10.  Volo elenco[NMAX];
  11.  int num, k;
  12. Volo elem;
  13.  
  14. //Lettura iniziale dell'elenco
  15. cout << "Numero voli: ";
  16. cin >> num
  17.  
  18. leggi_elenco(elenco, num);
  19.  
  20. //Fase di ordinamento
  21. ordina(elenco, num);
  22.  
  23. //Utilizzo il do while per evitare che il numero dei voli
  24. //non ecceda le cardinalità dell'array
  25. do {
  26.  cout << "Nuovi voli da inserire: ";
  27. cin >> k;
  28. }while(num+k > NMAX);
  29.  
  30. for(int i = 0; i < k; i++) {
  31. cout << "Inserire i dati del nuovo volo n. " << i+1 << endl;
  32. elem = leggi_volo();
  33. inserisci(elenco, num, elem);
  34. num++;
  35. }
  36.  
  37. //Stampa finale elenco
  38. cout << "\nElenco finale\n";
  39. stampa_elenco(elenco, num);
  40.  
  41. return 0;
  42. }



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++

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include "struttura.h"
  5. using namespace std;
  6.  
  7. Volo leggi_info()
  8. {
  9.   bool corretto;
  10.   Volo v;
  11.  
  12.   cout << "Scalo di partenza: ";
  13.  cin.ignore();
  14. cin.getline(v.partenza, 30);
  15.  
  16. cout << "Scalo di arrivo: ";
  17. cin.getline(v.arrivo, 30);
  18.  
  19. cout << "Linea: ";
  20. cin.getline(v.linea, 30);
  21.  
  22. do {
  23. cout << "Tipologia volo (Linea/Charter/Aerotaxi): ";
  24. cin.getline(v.tipo, 16);
  25. if((strcmp(v.tipo, "Linea")==0) ||
  26.  (strcmp(v.tipo, "Charter")==0) ||
  27.  (strcmp(v.tipo, "Aerotaxi")==0))
  28.  corretto = true;
  29. else
  30. corretto = false;
  31. }while(!corretto);
  32.  
  33. cout << "Numero Passeggeri: ";
  34. cin >> v.numpass;
  35.  
  36. return v;
  37. }
  38.  
  39. void leggi_elenco(Volo elenco[], int num)
  40. {
  41.  for(int i = 0; i < num; i++) {
  42.  cout << "Inserire i dati del volo n." << i+1 << endl;
  43.  elem = leggi_info();
  44. }
  45. }
  46.  
  47. void ordina(Volo elenco[], int num)
  48. {
  49.   int last, end;
  50.   bool fattoswap;
  51.  
  52.   last = 0;
  53.   do {
  54.    fattoswap = false;
  55.    end = last;
  56.   for(int i = num-1; i > end; i --)
  57.   if(elenco[i].partenza > elenco[i-1].partenza) {
  58.   Volo appo = elenco[i];
  59. elenco[i] = elenco[i-1];
  60. elenco[i-1] = appo;
  61.  
  62. last = i;
  63. fattoswap = true;
  64. }
  65. }while(fattoswap);
  66. return;
  67. }
  68.  
  69. void inserisci(Volo elenco[], int num, Volo elem)
  70. {
  71. //Sono rimasto bloccato in questa funzione dove non so andare avanti nel fare il codice che
  72. //se il volo è già presente (uguali scalo di partenza e di arrivo, linea aerea e tipologia di volo),
  73. //si aggiorni solo il numero dei passeggeri, aggiungendo al numero esistente
  74. //il numero di passeggeri presente nel nuovo volo; nel caso il volo non sia presente, lo si aggiunga all'elenco
  75. }
  76.  
  77. void stampa_elenco(Volo elenco[], int num)
  78. {
  79.  for(int i = 0; i < num; i++)
  80. {
  81.  cout << "Volo n." << i+1 << endl;
  82. cout << "Scalo partenza: " << elenco[i].partenza << endl;
  83. cout << "Scalo arrivo: " << elenco[i].arrivo << endl;
  84. cout << "Linea: " << elenco[i].linea << endl;
  85. cout << "Tipologia volo: " << elenco[i].tipo << endl;
  86. cout << "N. Passeggeri: " << elenco[i].numpass << endl;
  87. cout << "----------------------------------------------------------" << endl;
  88. }



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
PM Quote
Avatar
Krackel (Normal User)
Newbie


Messaggi: 3
Iscritto: 15/02/2014

Segnala al moderatore
Postato alle 18:24
Martedì, 18/02/2014
Ho risolto da solo potete chiudere :k:

PM Quote