Witam. Miałem za zadanie napisać program wyświetlający mediane liczb z pliku, zakładając, że liczby są posortowane rosnąco/malejąco. Nie miałem z tym większych problemów. Własne ambicje zmusiły mnie do napisania lepszej wersji;] czyli nie zakładając posortowania. Napisałem tak jak mi się zdawało, że dobrze. Później zacząłem gmatwać tak, że ledwo się mogę odnaleźć w tym kodzie (jestem "mocno początkujący").
#include <iostream>
#include <fstream>
#include <cstdlib>
int main()
{
using namespace std;
int licznik(0), ilosc_min(0), ilosc_max(0);
double liczba(0), test2(0), mediana(0), test(0);
char nastepna(0);
ifstream kwej, pwej, swej, wej, wejscie, dwej;
ofstream pwyj, swyj;
cout << "Trwa czytanie w pliku...\n";
dwej.open("lista.txt");
if (dwej.fail() )
{
cout << "Nie udało się otworzyć pliku";
exit(1);
}
while (dwej >> liczba)
{
licznik++;
}
dwej.close();
liczba = 0;
kwej.open("lista.txt");
if (kwej.fail() )
{
cout << "Nie udało się otworzyć pliku";
exit(1);
}
pwyj.open("pwyj.txt");
if (pwyj.fail() )
{
cout << "Nie udało się otworzyć pliku";
exit (1);
}
kwej.get(nastepna);
while (! kwej.eof())
{
pwyj.put(nastepna);
kwej.get(nastepna);
}
kwej.close();
pwyj.close();
nastepna = 0;
wejscie.open("lista.txt");
if (wejscie.fail() )
{
cout << "Nie udało się otworzyć pliku";
exit(1);
}
swyj.open("swyj.txt");
if (swyj.fail() )
{
cout << "Nie udało się otworzyć pliku";
exit (1);
}
wejscie.get(nastepna);
while (! wejscie.eof())
{
swyj.put(nastepna);
wejscie.get(nastepna);
}
wejscie.close();
swyj.close();
nastepna = 0;
pwej.open("lista.txt");
if (pwej.fail() )
{
cout << "Nie udało się otworzyć pliku";
exit(1);
}
wej.open("swyj.txt");
if (swej.fail() )
{
cout << "Nie udało się otworzyć pliku";
exit(1);
}
do
{
swej.open("pwyj.txt");
if (swej.fail() )
{
cout << "Nie udało się otworzyć pliku";
exit(1);
}
pwej >> test;
wej >> test2;
if ((licznik%2) == 0)
{
while (swej >> liczba)
{
if (test > liczba)
{
ilosc_min++;
}
if (test < liczba)
{
ilosc_max++;
}
if (test2 > liczba)
{
ilosc_min++;
}
if (test2 < liczba)
{
ilosc_max++;
}
}
if (ilosc_min==ilosc_max)
{
mediana = (test + test2) / 2;
}
}
else
{
while (swej >> liczba)
{
if (test > liczba)
{
ilosc_min++;
}
if (test < liczba)
{
ilosc_max++;
}
}
if (ilosc_min==ilosc_max)
{
test=mediana;
}
}
ilosc_min=0;
ilosc_max=0;
swej.close();
} while (mediana==0);
pwej.close();
wej.close();
cout << "Mediana liczb w pliku wynosi " << mediana << endl;
return (0);
}
Jedyne co się wyświetla na ekranie to "Trwa czytanie w pliku" i nic się nie dzieje. Wiem, że większość z was mnie wyśmieje, ale nie wiem jak sobie z tym poradzić. Proszę was o pomoc.