Witam. Mam niewielki problem z zadaniem polegającym na znalezieniu dwóch największych elementów (nie mogą być sobie równe) w pliku zawierającym losowe liczby typu word. Mój pomysł polega na przeszukaniu danego pliku w celu znalezienia największej liczby, oznaczonej np. max i ponownym przeszukaniu tego pliku w celu znalezienia największej liczby będącej jednocześnie mniejszą od max. Jak rozwiązać to zadanie przeszukując plik tylko raz? Program piszę w Pascalu, ale wystarczy mi sam pomysł.
Użyj prostej pętli while w taki sposób:
String line;
int n, num1, num2;
num1 = Integer.parseInt(fileIn.readLine());
num2 = num1;
while ((line = fileIn.readLine()) != null) {
n = Integer.parseInt(line);
if (num1 < n) num1 = n;
if (num2 < n && n < num1) num2 = n;
}
W Pascalu będzie wyglądało bardzo podobnie, ale chodzi o sam pomysł, a dokładniej te dwie instrukcje warunkowe.
No tak, teraz już wszystko śmiga. Dzięki za pomoc!
Hmm, w przypadku gdy pierwsze dwie liczby w pliku są największymi to program nie do końca działa, bo do obu zmiennych przypisuje tą największą wartość.
Możesz zainicjalizować obie liczby najmniejszą wartością typu Integer, zamiast wczytywać z pliku.
W pascalu chyba robi się to tak: num1 := Low(Integer);
Racja, przypisałem tym zmiennym wartość początkową równą zero i już wszystko działa poprawnie. Jeszcze raz dzięki.
No i znowu się trochę pospieszyłem.
Tym razem nie działa np. dla takiego ciągu: 1,2,3
W obu przypadkach nie działa dla np.: 5,213,325,754,200,1.
nie działa
Cóż za dokładny opis problemu!
Warunek
if (num1 < n) num1 = n;
if (num2 < n && n < num1) num2 = n;
Bym przerobił na coś w stylu:
if (num1<n)and(num2<n) then begin num1:=num2;num2:=n; end else if (num1<n) then num1:=n;
Teraz już działa poprawnie dla (chyba) wszystkich możliwych kombinacji. Dzięki.