Dwa największe elementy w pliku

0

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ł.

0

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.

0

No tak, teraz już wszystko śmiga. Dzięki za pomoc!

0

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ść.

0

Możesz zainicjalizować obie liczby najmniejszą wartością typu Integer, zamiast wczytywać z pliku.
W pascalu chyba robi się to tak: num1 := Low(Integer);

0

Racja, przypisałem tym zmiennym wartość początkową równą zero i już wszystko działa poprawnie. Jeszcze raz dzięki.

0

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.

0

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;

0

Teraz już działa poprawnie dla (chyba) wszystkich możliwych kombinacji. Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1