Witam potrzebuję pomocy w zadaniu , nie mogę poradzić sobie z sortowanie piosenek , treść w zadaniu.
#include <iostream>
/*
Napisać program Piosenki, który wczytuje informacji o utworach muzycznych.
Dla każdego utworu mamy przechowywać informacje o: nazwie, czasie trwania w sekundach,
wykonawcy(imię, nazwisko, data urodzenia), roku wydania.
Do przechowywania napisów można korzystać z klasy std::string.
Aplikacja ma wypisać utwory o: czasie trwania większym niż oraz wykonywanym przez wykonawcę urodzonego wcześniej niż.
Długość trwania utworu i data urodzenia są podawane przez użytkownika.
Założyć, że:
-dane wejściowe są poprawne,
-nazwa utworu i nazwa wykonawcy są to napisy bez białych znaków.
Przykład:
Dane wejściowe :
3
Utwór1 1230 Imię1 mazwisko1 12 01 1932 1958
Utwór2 2500 Imię2 nazwisko2 2 07 1948 1979
Utwór3 4010 imię3 nazwisko2 30 11 2000 2020
1500
3 08 1960
Wynik:
Utwór2 2500 Imię2 nazwisko2 2 07 1948 1979
*/
int const maxPiosenek = 20;
struct Data
{
int rok;
int miesiac;
int dzien;
};
struct Wykonawca
{
std::string imie;
std::string nazwisko;
struct Data data_urodzenia;
};
struct Piosenka
{
std::string tytul;
struct Wykonawca wykonawca;
int rok_wydania;
int czas_trwania;
};
struct Piosenki
{
struct Piosenka piosenki[maxPiosenek];
int liczba_piosenek;
};
bool wczytajPiosenke(struct Piosenka* piosenka);
bool wczytajWykonawce(struct Wykonawca* wykonawca);
bool wczytajDate(struct Data* data);
bool wczytajPiosenki(struct Piosenki* piosenki);
void wyswietlPiosenke(struct Piosenka* piosenka);
void wyswietlWykonawce(struct Wykonawca* wykonawca);
void wyswietlDate(struct Data* data);
void wyswietlPiosenki(struct Piosenki* piosenki, int min_dlugosc, struct Data* data);
/*
* Funkcja porównuje dwie daty.
* Wynik:
* -1 data1 < data2
* 0 data1 == data2
* 1 data1 > data2
*/
int porownaj(Data* data1, Data* data2);
bool wczytajPiosenki(struct Piosenki* piosenki)
{
int liczba_piosenek;
std::cin >> liczba_piosenek;
for (int i = 0; i < liczba_piosenek; ++i)
{
if (!wczytajPiosenke(&(piosenki->piosenki[i])))
return false;
}
piosenki->liczba_piosenek = liczba_piosenek;
return true;
}
bool wczytajPiosenke(struct Piosenka* piosenka)
{
std::cin >> piosenka->tytul;
std::cin >> piosenka->czas_trwania;
if (!wczytajWykonawce(&(piosenka->wykonawca)))
return false;
std::cin >> piosenka->rok_wydania;
return true;
}
bool wczytajWykonawce(struct Wykonawca* wykonawca)
{
std::cin >> wykonawca->imie;
std::cin >> wykonawca->nazwisko;
if (!wczytajDate(&(wykonawca->data_urodzenia)))
return false;
return true;
}
bool wczytajDate(struct Data* data)
{
std::cin >> data->dzien;
std::cin >> data->miesiac;
std::cin >> data->rok;
return true;
}
void wyswietlPiosenke(struct Piosenka* piosenka)
{
std::cout << piosenka->tytul;
std::cout << " ";
std::cout << piosenka->czas_trwania;
std::cout << " ";
wyswietlWykonawce(&(piosenka->wykonawca));
std::cout << " ";
std::cout << piosenka->rok_wydania;
}
void wyswietlWykonawce(struct Wykonawca* wykonawca)
{
std::cout << wykonawca->imie;
std::cout << " ";
std::cout << wykonawca->nazwisko;
std::cout << " ";
wyswietlDate(&(wykonawca->data_urodzenia));
}
void wyswietlDate(struct Data* data)
{
std::cout << data->dzien;
std::cout << " ";
std::cout << data->miesiac;
std::cout << " ";
std::cout << data->rok;
}
void wyswietlPiosenki(struct Piosenki* piosenki, int min_dlugosc, struct Data* data)
{
for (int i = 0; i < piosenki->liczba_piosenek; ++i)
{
//TODO wyświetlić tylko tpiosenki spełniające kryterium z treści zadania
wyswietlPiosenke(&(piosenki->piosenki[i]));
std::cout << "\n";
}
}
int main()
{
struct Piosenki piosenki;
if (!wczytajPiosenki(&piosenki))
{
std::cout << "Bład\n";
return 0;
}
//TODO posortowaś piosenki według wykonawcy (data urodzenia, nazwisko, imię)
struct Data data;
int dlugosc_utworu;
std::cin >> dlugosc_utworu;
wczytajDate(&data);
wyswietlPiosenki(&piosenki, dlugosc_utworu, &data);
return 0;
}
Na samym dole jest co trzeba zrobić jako ToDo