Kezdőoldal » Számítástechnika » Programozás » Mi a megoldása ennek a program...

Mi a megoldása ennek a programnak? (A konkrét levezetés nem megy, pascal)

Figyelt kérdés

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


2010. dec. 21. 21:25
 1/6 ejbenjaro ***** válasza:
A konkrét levezetés ott van előtted, csak át kell írni pascalra (nagyjából 5 perces munka). Semmi nehéz nincsen benne. Ha ezt sem tudod megcsinálni, akkor ne akarj programozást tanulni szerintem. Továbbá, ha azt szeretnéd, hogy valaki segítsen, akkor előbb mutasd meg, hogy meddig jutottál. Másold be ide a pascal forráskódodat és majd kijavítgatjuk.
2010. dec. 22. 14:33
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

konstans = const

változók = var

program eleje = program eleje;

ciklus = for

ciklus amíg = while

ciklus vége = end;

program vége = end.

2010. dec. 22. 20:46
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:

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.

2010. dec. 24. 12:57
 4/6 anonim ***** válasza:
próbáld meg a false(b(j))-t not b(j)-re cserélni. (ha kiabál rá, akkor not(b(j)) )
2010. dec. 24. 13:33
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:

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;

2010. dec. 24. 13:36
Hasznos számodra ez a válasz?
 6/6 ejbenjaro ***** válasza:
100%

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.

2010. dec. 26. 21:06
Hasznos számodra ez a válasz?

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

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!