Oppure

Loading
15/02/14 20:34
Krackel
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:

//file struttura.h
struct Volo {
char partenza[30];
char arrivo[30];
char linea[30];
char tipo[16];
int numpass;
} 


//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ì:

#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
#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 15/02/14 20:35
aaa
18/02/14 17:24
Krackel
Ho risolto da solo potete chiudere :k:
aaa