Kezdőoldal » Számítástechnika » Programozás » PASCAL. Hogyan tudom kiíratni...

Mr.Lor kérdése:

PASCAL. Hogyan tudom kiíratni egymás alá a 4-el oszható számokat? (1től 20-ig)

Figyelt kérdés

Az alapok megvannak, hogy:

begin

clrscr;

for i:=1 to 20 do

begin

writeln( ÉS ITT NEMTUDOM MIT KELL ÍRNI, HOGY 4-EL OSZHATÓ SZÁMOT KAPJAK)

end;


readln;

end.



2017. okt. 3. 16:43
1 2
 11/20 2*Sü ***** válasza:

És akkor jöjjön egy vicces, bár komolyan belegondolva tanulságos megoldás:


begin

WriteLn(4);

WriteLn(8);

WriteLn(12);

WriteLn(16);

WriteLn(20);

end.


Előnyei: Nem igényel változókat, így kevesebb memóriát foglal. Nincsenek ciklusok, műveletek, így gyorsabb is. A lefordított program is kisebb lehet.


Hátránya: Nem univerzális, az 1 és 1000 közötti négyjegyű számok kiírásához nem elég egyetlen paramétert megváltoztatni.


Nota bene főiskolán volt egy feladat, hogy kellett írni egy programot, ami kiírja 1 és 1000 között azon prímszámokat, amiben nem szerepel páros számjegy. Mindenki univerzális megoldást csinált, ahol ez az 1000 lehetne akár 10 000 is. Az egyik srác viszont papíron kiválogatta, hogy melyik számokat is kell kiírni, és a fentihez hasonló módon simán számokat írt ki sorban. Mindenki röhögött, kivéve a tanárt. A tanár megadta a maximum pontot a feladatra, hiszen a feladat adott volt, a program végrehajtja a feladatot hibátlanul, tehát a megoldásban nincs hiba. És ez elgondolkodtatott, és néha eszembe jut. Néha az ember lehet, hogy jobban jár, ha nem a programmal számoltat ki bizonyos dolgokat, hanem előre kiszámolja (akárhogy, programmal, excel táblával, papíron), és a program kvázi részeredményként csak felhasznál egy adatsort. Néha hatékonyabb kódot lehet ezzel a szemlélettel írni. Ha a paraméterezhetőség, univerzalitás nem szempont, akkor ez is egy járható út.

2017. okt. 5. 10:06
Hasznos számodra ez a válasz?
 12/20 tabaki ***** válasza:
57%

@#11:

Jé, hasonlókat én is írtam, csak illendőségből nem raktam be, de igazad van, ez is belefér. Az én változataim (szintén ReadLn nélkül):


begin WriteLn(4,#10#13,8,#10#13,12,#10#13,16,#10#13,20) end.


begin WriteLn(#52#10#13#56#10#13#49#50#10#13#49#54#10#13#50#48) end.



@#10: „le is írtam, miért elég egy sornyi kód.”

Kárba veszett fáradság volt. Értelmes ember csak közölte volna, mi a baja a hozzászólásoddal -- ha még igaza is lett volna, az éppen elég ok a bosszúságra.

A lepontozós troll voltaképpen elég szomorú helyzetben van. Nincs meg a lehetősége, hogy artikulálja az akcióit, ezért rád van bízva, hogy melyik értelmezés szerez neked nagyobb örömöt:

      1. Az illető egy fogyatékos értelmű, gyermeteg lélek, aki azt hiszi, hogy a jó válaszok leértékelése valami zavart okoz majd, és ezt mulatságosnak találja.

      2. Nem éri fel ésszel a válaszod értelmét, ezért tévesen ítéli meg.

      3. Magadra haragítottad, és ezért törleszteni akar -- például egy másik kérdésnél majmot csináltál belőle valami szócsatában, és most ott próbál ártani neked a maga együgyű módján, ahová a szűkös korlátai terelték. Bonyodalmasabb lenne arra várni, amikor majd te mondasz valami támadhatót, meg aztán hátha az a csetepaté sem úgy sül el, mint szeretné...

Akárhogyan is, a lepontozós trollkodásból nem lehet fölénnyel kijönni. A troll maga deklarálja alacsonyabb rendűségét, annak meg egy anonim oldalon nem sok jelentősége van, hogy tudod-e a nickjét, anélkül is lenézett pária marad.

2017. okt. 5. 11:14
Hasznos számodra ez a válasz?
 13/20 anonim ***** válasza:

Na ne már srácok! Képesek lennétek oszthatóságot vizsgálni?? Ahelyett, hogy egyszerűen kiírnátok a 4 többszöröseit? Az egész csak 5 ciklus lenne.


while szorzat>=20 do

begin

szorzat = szorzat * i


end;

2017. okt. 5. 11:35
Hasznos számodra ez a válasz?
 14/20 anonim ***** válasza:
Oh, bakker, véletlenül sortörés helyett elküldte a posztot ez gagyi GYK-s form. A lényeg, hogy addig hajtod végre a loopot, amíg nem nagyobb a szorzatot 20nál. A szorzat minden ciklusban 4*i lesz, és i minden ciklusban eggyel nagyobb lesz.
2017. okt. 5. 11:38
Hasznos számodra ez a válasz?
 15/20 2*Sü ***** válasza:

#12 > begin WriteLn(4,#10#13,8,#10#13,12,#10#13,16,#10#13,20) end.


Igen, ha a kód olvashatóságát is feláldozzuk, akkor ez még tömörebb megoldás, és egy nüansznyival hatékonyabb is. Bár akkor már a második megoldás még tetszetősebb, mert az elsőnél még mindig konvertálni kell belül a számokat szöveggé. A második egyszerűen, az egy lépésben kiírja a programban eleve tárolt végeredményt, mint sortöréseket tartalmazó stringet.

2017. okt. 5. 11:53
Hasznos számodra ez a válasz?
 16/20 tabaki ***** válasza:

@#15:

Persze, persze... nem is kell komolyan venni.

2017. okt. 5. 12:13
Hasznos számodra ez a válasz?
 17/20 tabaki ***** válasza:

Újabb kísérlet, általánosabban:


var hatar, oszto : integer;

begin

Write('Határérték: ');

ReadLn(hatar);

Write('Osztó: ');

ReadLn(oszto);

for hatar := 1 to hatar div oszto do WriteLn(hatar * oszto);

ReadLn;

end.

2017. okt. 5. 12:32
Hasznos számodra ez a válasz?
 18/20 anonim ***** válasza:

#17 a for ciklusodban azzal, hogy ezt írod "hatar := 1" egyből át is írod az eredetileg megadott határt, mivel rég pascaloztam vagy egyszer fog lefutni és kiírja a négyet vagy egyszer se. (bár asszem a for egyszer így is úgy is lefut) (for i := 1 to hatar div oszto do WriteLn(hatar * oszto); -val már működne. De ez se elegáns, mert minden egyes ciklus során elosztja a határ az osztóval ami fölösleges erőforrás pazarlás. A jobb megoldás ha ragaszkodsz a kódhoz, hogy közvetlen osztó beolvasása után határ:=határ div oszto-t és akkor a for már mehet határig)


Amúgy nem jutott volna eszembe :(( de a 13-as megoldása a legelegánsabb.

2017. okt. 8. 09:31
Hasznos számodra ez a válasz?
 19/20 tabaki ***** válasza:

#17:

"a for ciklusodban azzal, hogy ezt írod "hatar := 1" egyből át is írod az eredetileg megadott határt..."


Nagyon örülök, amiért erre fölhívtad a figyelmet, ha most az egyszer tévedtél is.

Igen, erre az érdekességre kellett volna Kérdezőnek fölneszelnie, ha nem tojna bele magasról a saját kérdésébe. Ebben a furcsa szösszenetben éppen az lett volna a játék, hogy a fordító nem azt műveli, amit parasztlogikával elvárnál tőle. Tehát bizony, hogy nem osztogat ciklusban, hanem igen okosan, csak egyszer, amikor a határértéket kiszámolja. Ezt megjegyzi valahol (nem a megadott két változó valamelyikében), és hatar változó értékét a továbbiakban már nem fúrja-faragja, hanem csak -- ciklusváltozóként újrahasznosítva -- lépteti 1-től az imént kiszámolt ciklushatárig. Lehet, hogy egy ilyen vicc valóban messze van a legelegánsabb megoldástól, de szerintem annyira azért nem is trampli, mint ahogy elképzelted. Meg aztán ez sem tanulságok nélkül való.

2017. okt. 8. 11:00
Hasznos számodra ez a válasz?
 20/20 tabaki ***** válasza:
+ Köhhhm... Szóval nem magamnak akartam címezni, hanem #18-nak...
2017. okt. 8. 11:02
Hasznos számodra ez a válasz?
1 2

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!