Otóż mam problem z zadaniem ze struktur. Polecenie:
Napisz program, w którym zadeklarujesz tablicę struktur przelot zawierających następujące pola:
trasa - określenie, dokąd leci samolot(na przykład Warszawa - Londyn),
cena - cena jednego biletu na określony przelot samolotem,
ilosc - długość trasy przelotu ( w kilometrach),
czas - czas przelotu samolotem na danej trasie ( w godzinach),
linia - nazwa linii lotniczej.
Typy pól należy określić samodzielnie.
W programie należy podać maksymalny rozmiar tablicy struktur jako stałą oraz wprowadzić z klawiatury aktualną liczbę struktur, nie większąod ustalonego maksimum.
Program powinien wykonywać następujące operacje:
a) wczytanie danych z klawiatury do tablicy struktur,
b)wypisywanie na ekranie wczytanych danych;
c) wypisywanie trasy i ceny dla wszystkich przelotów;
d) obliczanie średnie ceny wszystkich biletów na przelot samolotem;
e) obliczenie ceny przelotu samolotem za 1 km dla pierwszego wczytanego przelotu;
f) wypisywanie wszystkich tras, których czas przelotu nie przekracza dwóch godzin oraz nazwa linii lotniczej rozpoczyna się literą 'L'.
Problem w tym, że gdy wprowadzi się do zmiennej maxi - 5, to niby się wszystko zainicjowało, ale potem podczas wypisywania danych wychodzą kosmiczne liczby.
Drugim problemem jest, że podczas wpisywania danych do tablicy, po czasie od razu przeskakuje do trasy i nie można wpisać linii.
Z góry dzięki za każdą odpowiedź.
Mój kod:
#include <iostream>
using namespace std;
int main()
{
struct przelot
{
string trasa;
double cena;
int ilosc;
int czas;
string linia;
};
int maxi;
cout<<"Podaj ilosc lotow ile chcesz wprowadzic(1-5): "<<endl;
cin>>maxi;
if (maxi>5 || maxi<1)
{
cout<<"Nieprawidlowa wartosc! Program zakonczy teraz swoje dzialanie."<<endl;
return 0;
}
//A
cin.get();
cout<<"a) "<<endl;
cin.get();
cout<<"Wczytanie danych..."<<endl;
przelot tab[maxi];
if (maxi==5) //jesli wielkosc tablicy wynosi 5 to nie trzeba podawac danych z klawiatury
{
przelot tab[5]=
{
{"Warszawa-Krakow",790.30,200,2,"PLL LOT"},
{"Londyn-Dubaj",3000.50,1000,9,"Emirates Airline"},
{"Kuwejt-Hong Kong",2500.30,500,6,"Hong Kong Airlines"},
{"Warszawa-Bangkok",1400.20,600,1,"Lufthansa"},
{"Praga-Hanoi",2100.60,700,8,"KLM"},
};
}
else
{
for (int i=0; i<maxi ; i++)
{
cout<<"Podaj trase: "<<endl;
getline(cin,tab[i].trasa);
cout<<"Podaj cene: "<<endl;
cin>>tab[i].cena;
cout<<"Podaj dlugosc trasy: "<<endl;
cin>>tab[i].ilosc;
cout<<"Podaj czas przelotu: "<<endl;
cin>>tab[i].czas;
cout<<"Podaj nazwe linii lotniczej: "<<endl;
getline(cin,tab[i].linia);
cout<<endl;
}
}
//B
cin.get();
cout<<"b) "<<endl;
cin.get();
cout<<"Wypisanie danych..."<<endl;
for (int i=0; i<maxi; i++)
{
cout<<"Dane "<<i+1<<" lotu:"<<endl;
cout<<tab[i].trasa<<endl;
cout<<tab[i].cena<<endl;
cout<<tab[i].ilosc<<endl;
cout<<tab[i].czas<<endl;
cout<<tab[i].linia<<endl;
cout<<endl;
}
//C
cin.get();
cout<<"c) "<<endl;
cin.get();
for (int i=0; i<maxi; i++)
{
cout<<"Trasa i cena "<<i+1<<" przelotu: "<<endl;
cout<<tab[i].trasa<<endl;
cout<<tab[i].cena<<endl;
cout<<endl;
}
//D
cin.get();
cout<<"d) "<<endl;
cin.get();
double srednia=0.0;
for (int i=0; i<maxi; i++)
{
srednia+=tab[i].cena;
}
srednia=srednia/maxi;
cout<<"Srednia cena wszystkich lotow wynosi: "<<srednia<<endl;
//E
cin.get();
cout<<"e) "<<endl;
cin.get();
double cena1=tab[0].cena/tab[0].ilosc;
cout<<"Cena przelotu za 1 km dla 1 przelotu wynosi: "<<cena1<<endl;
//F
cin.get();
cout<<"f) "<<endl;
cin.get();
for (int i=0; i<maxi; i++)
{
if (tab[i].czas<=2 && tab[i].linia.at(0)=='L')
cout<<tab[i].trasa;
}
return 0;
}