Kezdőoldal » Számítástechnika » Programozás » Miért nem működik? :S

Miért nem működik? :S

Figyelt kérdé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.


2011. jan. 18. 23:10
 1/3 zsomkovacs ***** válasza:

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.

2011. jan. 19. 06:40
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:
tejóó ég nemsemmik vagytok minden elismerésem xD
2011. jan. 19. 18:50
Hasznos számodra ez a válasz?
 3/3 A kérdező kommentje:
Köszönöm a segítséget!
2011. jan. 20. 20:04

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!