Miért nem működik? :S
Egy madármegfigyelő állomáson a vonuló gólyákat tanulmányozzák. Tíz napon keresztül rögzítik az állomás fölött elvonuló gólyák számát. Adja meg a napok sorszámát az átvonuló madarak darabszáma szerint növekvő sorrendben, oly módon, hogy az egyes számok külön sorba kerüljenek, kivéve az olyan napoknál, ahol az észlelések száma megegyezik, az ilyen esetekben a számok egy sorba kerüljenek, egymástól szóközzel elválasztva!
program golya;
uses crt;
procedure beolvas;
var
a,i : integer;
begin
writeln('A g˘ly k sz ma naponta: ');
for i:=1 to 10 do
begin
read(a);
write(' ');
end;
end;
procedure rendezes;
var
temp,i,j :integer;
nap : array[1..10] of integer;
begin
for i:=0 to 9 do
begin
for j:=0 to 10 do
begin
if (nap[i]<nap[j]) and (i<>j) then
nap[i]:=nap[j];
nap[j]:=temp;
temp:=nap[i];
end;
end;
end;
procedure kiir;
var
temp,j,i : integer;
nap : array[1..10] of integer;
begin
for i:=0 to 10 do
begin
j:=i;
while
nap[i]=nap[j] do
begin
write(nap[j]);
j:=j+1;
end;
writeln;
i:=i+1;
end;
end;
begin
clrscr;
beolvas;
rendezes;
kiir;
end.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Húha... Itt van jópár hiba...
1) Sehol nem tárolod a beolvasott adatokat. Mindig berakod "a"-ba, aztán felülírod, majd a végén kidobod az egészet.
2) Van az a nap nevű változó. Két eljárásban is deklarálod, de értékek nincsenek benne, továbbá a két eljárás nem is látja egymásét. Deklaráld a nap változót globálisan, az eljárásokon kívül, az eljárásokban ne. A beolvas eljárásban a "read(a)" parancsot cseréld "read(nap[i])"-re, így máris megmaradnak az adatok. Ezután persze a beolvas eljárás "a" változójára nincs szükség.
3) A rendező eljárásban is akad pár hiba. Egyrészt ezt
For j:=i+1 To 10 Do
formában szokták írni, nem pedig
For j:=0 To 10 Do
-ként. Ha a másodikat használod, akkor azt hiszem (bár ezt most nem látom biztosan, és kiszámolni sincs kedvem), a rendezés semmit nem csinál, mert visszaállítja az eredeti állapotot. Ráadásul így az if-be nem kell az "and (i<>j)" feltétel. Másik hiba, hogy ez így csökkenő sorrendbe rendezne. A (nap[i]<nap[j]) kifejezést cseréld (nap[i]>nap[j])-re. Továbbá a csere is kissé érdekesre sikerült. Helyesen:
temp:=nap[i];
nap[i]:=nap[j];
nap[j]:=temp;
Továbbá a külső ciklus 1-től 9-ig fusson.
3) Végül a kiir is hibás. Egyrészt for ciklus változójának értékét TILOS cikluson belül átírni, másrészt még rosszul írod át. Továbbá nem hagysz szóközöket. A ciklus előtt állítsd be i értékét 1-re. A for ciklust írd át while (i<=10) do-ra. Az i:=i+1-et írd át i:=j+1-re. A write(nap[j]) utasítás után írj be még egy write(' ')-t is. A belső while ciklus feltételét írd át (j<=10) and (nap[i]=nap[j]) -re.
És elvileg kész is. Ha így is hibás, írd ki azt is, megnézem még egyszer.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!