Witam. Program ma wczytać dane z pliku (w załączniku). Następnie ma posortować bazę danych, którą jest wektor struktur sortowaniem przez wstawianie. I tu pojawia się problem.
Kiedy testowałem sortowanie działał poprawnie tylko do 3 osób, kiedy zwiększyłem do 5 już nie - zauważyłem że algorytm sortowania wykonuje chyba za mało przebiegów; algorytm jest na bazie artykułu [http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0013.php] dlatego nie wiem co jest grane???
Jeszcze druga sprawa - dla każdego pola struktury mam inną funkcję na sortowanie, a jak zrobić żeby zawrzeć to w jednej funkcji tylko do której przekazywałbym parametr co sortuję??
Dzięki za pomoc; jeśli macie jeszcze jakieś inne uwagi co do programu to piszcie
unsigned short int ilosc = 5;
struct osoba
{
string imie;
string nazwisko;
string numer;
};
vector<osoba> ksiazka(ilosc);
void SortujKsiazke()
{
do
{
system("CLS");
cout << "\n\tSortowanie ksiazki\n\n\n";
cout << " 1. Sortuj wedlug imienia\n";
cout << " 2. Sortuj wedlug nazwiska\n";
cout << " 3. Sortuj wedlug numeru telefonu\n\n";
cout << " 4. Powrot do menu >>> ";
ch = getch();
if (ch == '1' || '2' || '3')
{
switch (ch)
{
case '1':
SortowaniePoImieniu();
break;
case '2':
SortowaniePoNazwisku();
break;
case '3':
SortowaniePoNumerze();
break;
}
}
} while (ch != '4' && ch != 27);
ch = ' ';
}
void SortowaniePoImieniu()//Insertion Sort
{
osoba tmp;
for(int j = ilosc - 2; j >= 0; j--)
{
tmp = ksiazka[j];
i = j + 1;
while((i < ilosc) && (ksiazka[j].imie > ksiazka[i].imie))
{
ksiazka[i - 1] = ksiazka[i];
i++;
}
ksiazka[i - 1] = tmp;
}
cout << "\n\n Sortowanie zakonczone pomyslnie";
timer(2);
}
void SortowaniePoNazwisku()//Insertion Sort
{
osoba tmp;
for(int j = ilosc - 2; j >= 0; j--)
{
tmp = ksiazka[j];
i = j + 1;
while((i < ilosc) && (ksiazka[j].nazwisko > ksiazka[i].nazwisko))
{
ksiazka[i - 1] = ksiazka[i];
i++;
}
ksiazka[i - 1] = tmp;
}
cout << "\n\n Sortowanie zakonczone pomyslnie";
timer(2);
}
void SortowaniePoNumerze()//Insertion Sort
{
osoba tmp;
for(int j = ilosc - 2; j >= 0; j--)
{
tmp = ksiazka[j];
i = j + 1;
while((i < ilosc) && (ksiazka[j].numer > ksiazka[i].numer))
{
ksiazka[i - 1] = ksiazka[i];
i++;
}
ksiazka[i - 1] = tmp;
}
cout << "\n\n Sortowanie zakonczone pomyslnie";
timer(2);
}
void WczytajKsiazke()
{
do
{
char sciezka[100] = "C:\\kstel.txt";
system("CLS");
cout << "\n\tWczytaj ksiazke telefoniczna z pliku\n\n\n";
cout << " 1. Uzyj domyslnej sciezki 'C:\\kstel.txt'\n";//znak \\ daje \, nie mozna zastosowac jednego backslasha!
cout << " 2. Podaj wlasna sciezke odczytu\n\n";
cout << " 3. Powrot do opcji programu >>> ";
ch = getch();
switch (ch)
{
case '1':
Wczytywanie(sciezka);
break;
case '2':
//cin.get();//wyczyszczenie bufora
cout << "\n\n\n Podaj sciezke (dodaj rozszerzenie): ";
cin.getline(sciezka,100);//sciezka pliku ograniczona do 99 znakow
Wczytywanie(sciezka);
break;
}
} while (ch != '3' && ch != 27);
ch = ' ';
}
void Wczytywanie(char sciezka[])
{
string bin;
ifstream fin;//tworzymy obiekt fin ("filein") podobny do obiektu cin ("consolein")
fin.open(sciezka);//skojarzenie obiektu zplikiem
if (fin.is_open())
{
for (pv = ksiazka.begin(); pv != ksiazka.end(); pv++)
{
getline(fin, bin);
getline(fin, pv->imie);
getline(fin, pv->nazwisko);
getline(fin, pv->numer);
getline(fin, bin);
}
}
if (!fin.fail())
cout << "\n\n\n Wczytywanie zakonczone pomyslnie\n\n\n ";
else
cout << "\n\n\n Blad odczytu\n\n ";
fin.close();
system("PAUSE");
}