Kezdőoldal » Számítástechnika » Programozás » Mit rontottam el/hogy kéne...

Mit rontottam el/hogy kéne megcsinálni? (Free pascal)

Figyelt kérdés

A feladat:

Kérjünk be két természetes számot (M,N), majd rajzoljunk ki a képernyőre egy MxN méretű paralelogrammát csillag (*) jelekből (a paralelogrammának N sora legyen, mindegyik sorban M csillaggal).


Például M=8 és N=3-ra:

********

********

********

Az én megoldásom:

program paralelogramma;

var n,m,i,s,h:integer;

begin

write ('Írj be 2 természetes számot szóközzel elválasztva! ');

read(n,m);

for i:=1 to n do begin

for h:=n downto 0 do write (' ');

for s:=1 to m do write ('*');

writeln;

end;

end.

Minden sor elejére n szóközt ír..... tudom, hogy a downto-s sorban van a hiba, de nem jövök rá, hogyan kellene megcsinálni.



2014. okt. 23. 12:45
 1/7 A kérdező kommentje:
Persze a paralelogrammát ide sem sikerült normális formájában bemásolni, de gondolom értitek, mire gondol a feladat.
2014. okt. 23. 12:47
 2/7 anonim ***** válasza:

Hát nézzük: az első sorba 2 = (n-1) spacet akarsz írni. A 2. sorba 1 = (n-2) = (n-i)


A ciklusokba belekavarodtál. A begin-től endig lévő rész csak egy sor kiírásáért felelős, ott nem kell downto.


Helyesen: for h:=0 to n-i do write(' ');

2014. okt. 23. 12:49
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
Én csak azt nem értem mitől lesz ez palalegramma, téglalap helyett.
2014. okt. 23. 13:06
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:
Ha csak ennyi a feladat, akkor téglalapot is kirajzolhatsz, az is paralelogramma.
2014. okt. 23. 17:34
Hasznos számodra ez a válasz?
 5/7 tabaki ***** válasza:

Nem szoktam kóddal válaszolni, de megdolgoztál vele...


program paralelogramma;

var n,m,i,s,h:integer;

begin

write ('Írj be 2 természetes számot szóközzel elválasztva! ');

read(n,m);

for i:=1 to n do begin

for h:=1 to n do write (' '); // így egyszerűbb...

for s:=1 to m do write ('*');

writeln;

dec(n); // lényeg

end;

end.


Amúgy be vagy oltva beszélő változónevek ellen, vagy mi? Őszintén szólva nemigen fedeztem fel logikát a változóneveidben. Kissé átesve a ló túlsó oldalára, lehetett volna ilyesmi:


program paralelogramma;

var magassag,szelesseg,szamlalo,csillagok,szokozok:integer;

begin

write ('Írj be 2 természetes számot szóközzel elválasztva! ');

read(magassag,szelesseg);

for szamlalo:=1 to magassag do begin

for szokozok:=1 to magassag do write (' ');

for csillagok:=1 to szelesseg do write ('*');

writeln;

dec(magassag);

end;

end.


Kissé értelemzavaró ugyan, hogy egy MAGASSAG nevű változót csökkentesz a ciklusban, de nevezheted másképp is... Ellenkező dőléshez bevezethetsz egy újabb változót:


program paralelogramma;

var magassag,szelesseg,eltolas,szamlalo,csillagok,szokozok:integer;

begin

write ('Írj be 2 természetes számot szóközzel elválasztva! ');

read(magassag,szelesseg);

eltolas:=1;

for szamlalo:=1 to magassag do begin

for szokozok:=1 to eltolas do write (' ');

for csillagok:=1 to szelesseg do write ('*');

writeln;

inc(eltolas);

end;

end.


A fenti programok egy szóközzel eltolják a paralelogrammádat. Ha ez zavar, némi bonyolítással ki tudod küszöbölni, kihasználva, hogy a ciklus nem fut le, ha a végértéke kisebb a kezdőértéknél:


program paralelogramma; // jobbra dőlő

var magassag,szelesseg,szamlalo,csillagok,szokozok:integer;

begin

write ('Írj be 2 természetes számot szóközzel elválasztva! ');

read(magassag,szelesseg);

for szamlalo:=1 to magassag do begin

for szokozok:=1 to magassag-1 do write (' '); // 0 esetén egyszer se fut le

for csillagok:=1 to szelesseg do write ('*');

writeln;

dec(magassag);

end;

end.


program paralelogramma; // balra dőlő

var magassag,szelesseg,eltolas,szamlalo,csillagok,szokozok:integer;

begin

write ('Írj be 2 természetes számot szóközzel elválasztva! ');

read(magassag,szelesseg);

eltolas:=0; // emiatt nem ír szóközt első alkalommal

for szamlalo:=1 to magassag do begin

for szokozok:=1 to eltolas do write (' ');

for csillagok:=1 to szelesseg do write ('*');

writeln;

inc(eltolas);

end;

end.

2014. okt. 23. 23:30
Hasznos számodra ez a válasz?
 6/7 A kérdező kommentje:
Nagyon köszönöm, főleg neked, utolsó! Sajnos most nem tudom kipróbálni, de amint géphez jutok, megteszem. Dec és inc parancsokat még nem "tanultam" (egyedül próbálom itthon megtanulni az egészet), a változók pedig nekem így egyszerűbbek, nem szeretek sokat gépelni :'D
2014. okt. 24. 07:24
 7/7 tabaki ***** válasza:

A dec() csökkenti, az inc() növeli a változó értékét (decrease, increase).

Itt ezt is írhatod helyettük:

magassag:=magassag-1; //dec(magassag);

eltolas:=eltolas+1; //inc(eltolas);


Ami a változókat illeti, nem muszáj negyed sor hosszúságú neveket adnod nekik, de a 3-4 karakteres értelmes rövidítésekre igazán rákaphatnál. Gondolj arra, hogy nemcsak tíz soros programokat fogsz majd írni öt változóval. Lehet, hogy a kód megírásakor még nem állsz fejre a sok értelmetlen betűnévtől, de képzeld el, hogy két hét múlva akarsz javítani valami bosszantó hibát, amikor már túl vagy néhány másik programon... Az is lehet, hogy megint tanácsot kérnél valakitől, vajon hova fog kívánni az illető a nyolc oldalon (és akkor még finom voltam) sereglő ábécés változóiddal? A munkát inkább a szövegszerkesztő funkciók használatával csökkentsd.

2014. okt. 24. 08:45
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!