Mi a megoldása ennek a programnak? (A konkrét levezetés nem megy, pascal)
Ki(x:y) eljárás X szöveges, ill. szám kifejezés értékét írja ki a szabványos kimenetre (általában a képernyőre) az aktuális karakterpozíciótól! Az aktuális karakterpozíció a legutoljára kiírt érték mögötti hely. A :y arra vonatkozik, hogy egy-egy érték kiíratása hány karakteren történjen.
A Nem(L) az L logikai érték tagadása.
Beadandó a Pascal forrásnyelvű fájl, amely megoldja az alábbi algoritmust.
Konstans n=400
Változók:
b:VEKTOR(1..n):Logikai
i,j:Egész Szám
Program eleje
Ciklus i:=1 től n-ig 1-esével
b(i):=Hamis
Ciklus Vége
Ciklus i:=1 től n-ig 1-esével
j:=0
Ciklus amíg j+i<=n
j:=j+i
b(j):=Nem(b(j))
Ciklus Vége
Ciklus Vége
Ciklus i:=1 től n-ig 1-esével
Ha b(i) akkor KI(i:4)
Ciklus Vége
Program Vége
konstans = const
változók = var
program eleje = program eleje;
ciklus = for
ciklus amíg = while
ciklus vége = end;
program vége = end.
Program hetes;
Uses Crt;
Const=400;
Var b: vektor [1..n]: boolean;
i,j: integer;
Begin
For i:=1 to n do
b(i):=false;
end;
For i:=1 to n do
j:=0;
while j+i<=n
j:=j+i;
b(j):=false(b(j));
end;
For i:=1 to n do
If b(i) then write(i:4);
end;
readln;
end.
Eddig jutottam el, de így nem stimmel.
ja, és ahova end;-et teszel, oda begin is kell. Ha kell end; egyáltalán.
Pascalban a begin....end;-et úgy értelmezi, mintha az egész egy utasítás lenne, ezért ezt a feltételes vagy a vezérléses szerkezetek magjára szoktuk alkalmazni:
if feltétel then egyutasítás;
if feltétel then begin
elsoutasítás;
másodikutasítás;
end;
for i:=1 to n do egyutasítás;
for i:=1 to n do begin
elsoutasítás;
másodikutasítás;
end;
Haladjunk szépen soronként a programoddal:
Első sor OK.
A Uses crt; sor hacsak nem használsz valamit a CRT unitból nem kell. Te most nem használsz belőle semmit.
Const=400; ez így nem helyes. Inkább így próbáld: Const n=400;
Var b: vektor [1..n]: boolean; ez a sor sem helyes. A Vektor ebben az esetben egy egy dimenziós tömb, tehát a var marad, mert ugye azzal jelezzük, hogy változókat deklarálunk és a továbbiakban így néz ki a sor b : array[1..n] of boolean;
A következő két sor helyes, nincsen benne hiba.
Az első for ciklus jó lenne, ha nem tettél volna egy end;-et a végére. Ha a ciklusmagban csak egy utasítás szerepel, akkor azt nem kell begin és end közé zárni. Ha viszont kiteszed az end;-et, akkor ki kell tenned a for után a begin-t is.
Az első For ciklusban (a ciklus magban) hibásan adsz értéket a tömbtípusú változód egyik elemének. Helyesen így hivatkozol a tömb egy elemére: b[i]:=false azaz szögletes zárójelet használsz a kerek helyett.
A második For ciklus után mindenképpen kell a begin, mert egynél több utasítás van a ciklusmagban (egy értékadás, és egy másik ciklus).
Az értékadás rendben van a második For cikluson belül.
A While ciklus hibásan van megadva. Helyesen : while j+i<=n do
A while ciklusnak is több mint egy utasítás van a magjában ezért oda is kell a begin
Az értékadás a j változónak rendben van.
A tömb típusú változódnak itt sem jól adsz értéket. Helyesen: b[j]:=not b[j];
Mivel a while ciklus a for ciklusba van ágyazva, ezért itt két end; sornak kell egymás után következnie, hogy mind a két ciklus lezárjuk.
Az utolsó for ciklus rendben van, nem is kell az end, ami a ciklust zárja
Az if utasításban megint hibásan hivatkozol a tömb típusú változód elemére helyesen : if b[i] then write(i:4)
A readln sortól lefele a programod rendben van.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!