Kezdőoldal » Számítástechnika » Programozás » Mi nem jó a free pascalban?

Mi nem jó a free pascalban?

Figyelt kérdés

Egy olyan gondom lenne hogy itthon unalomból csináltam egy programot amiben a számolást lehet gyakorolni kiírja hogy hány hiba hány jó és hány százalék. A számolás a négy alapművelettel történik Az elején választani lehet hogy melyiket 0, Összeadás 1, Kivonás 2, Szorzás 2,Osztás 4,Véletlen

A program most kb 170 soros ha az elején beírom a 3-ast akkor nem történik semmi vagy kilép és kiír valamit. A ketesnél még müködik, de a véletlennél is összezavarodik kicsit. És ugy van megcsinálva hogy egymás után többször lefut tehát kilépés nélkül akárhányszor lehet probálni jelenleg 10000-szer. A számolásokat és a véletleneket random végzi, de a program tele van for és if ciklusokkal. A kérdés ez miért van hogy a 3-adikat már nem akarja normálisan lefutattni?



2015. nov. 27. 20:15
1 2 3 4
 11/35 anonim ***** válasza:
Borzasztó.
2015. nov. 27. 23:28
Hasznos számodra ez a válasz?
 12/35 tabaki ***** válasza:
Bocs, ez egy kissé valóban embertelen, kell némi idő, míg átlátom az egész tohuvabohut.
2015. nov. 27. 23:33
Hasznos számodra ez a válasz?
 13/35 tabaki ***** válasza:

Ennyi időbe telt, míg az indentálással végeztem, mert neked ide kellett beraknod, nem ám az ajánlott kódfeltöltő oldalra. Még semmit sem foglalkoztam a kódoddal, de előzetesen:

A Randomize utasítást elég egyszer használni, a program elején.

Mi ez a millió változó, és miért nincs értelmes nevük?

Amíg tökéletesen nem működik a program, minek 30 ismétlés a kipróbálásához, és minek színezéssel cirkalmazni? Majd, amikor már minden oké.

Esküszöm, ezt kigyomlálni ötször hosszabb idő lesz, mint nulláról felépíteni (remélem, idetéved SimkoL, és megteszi az utóbbit, míg én a te kódodat fésülgetem).

2015. nov. 28. 00:14
Hasznos számodra ez a válasz?
 14/35 tabaki ***** válasza:
Hát, nem... megcsinálom inkább a saját változatomat.
2015. nov. 28. 00:50
Hasznos számodra ez a válasz?
 15/35 tabaki ***** válasza:

Na jó, mára elég, egyelőre itt tartok:

[link]


Igen, tudom, hogy te még nem tartasz az eljárásoknál (procedure), de előbb valamennyire gatyába kellett ráznom, hogy egyáltalán lássam, mi történik, nem, mintha ez már a tökély csúcsait ostromolná. Ha lesz lelkierőm, majd lerontom csupa IF-re.

2015. nov. 28. 02:53
Hasznos számodra ez a válasz?
 16/35 A kérdező kommentje:
Hát igen ott még nem tartunk. Tudom, hogy nem valami szakszerű program, de még az elején vagyunk ezeket tudom és ezekből próbálok dolgokat csinálni ithon. Az osztályban én vagyol a legjobb pascalban és vannak olyanok akik nem annyira értik vagy tudják akár a tömböt is megcsinálni. Pedig ha nem kellene ennyit gyakorolni azok miatt akor már sokkal előrébb tartanánk. Néha nem is értetem hogy milyen egyszerű programokat nem tudnak megcsinálni, azoknak a jegyeiken is látszik 2db-es 2-es én 3db 5-ös. Ezt a Randomize kodot is a netröl néztem le és értette meg mert még azt se tanultuk. Pedig már szeretnék sokkal elörébb tartsni.
2015. nov. 28. 08:34
 17/35 A kérdező kommentje:
Meg én minden művelethez más változókat használok így biztosabb. És szerintem színezve sokkal szebb. 30-szor azért van mert már jó csak az a gondom hogy az osztásnál nem tudom megoldani azt hogy egytized elég legyen válasznak. Erre valami ötlet? Az elöbbinél a hiba hogy egy szám elvolt írva, nem tudom az elsöt megcsináltam a többit meg másoltam az elsöről és szerintem ezért lehetett az hogy az egyik számot nem írtam át. És mondom biztos van ennek jobb mocere de nagyon az elején vagyunk még. Ez a program igazából semmihez nem kell csak unatkoztam és gondoltam összerakok egyet aminek értelme van. Evvel például kisebbek tudnák a számolást gyakorolni. Meg megcsinálnám a nehézségi szinteket után felsöbb és középiskolásoknak is jó lenne. Így evvel lehetne tesztelni magunkat. Meg megcsinálnám versenye is hogy számolással lehetne vele versenyezni a végén diagramon kiírná az eredményt minden pontot hibát és a százalékot. Hosszú lesz lehet jobb megoldással is dolgozni de ezekből is össze lehetne hozni én úgy gondolom.
2015. nov. 28. 13:18
 18/35 tabaki ***** válasza:

„az osztásnál nem tudom megoldani azt hogy egytized elég legyen válasznak. Erre valami ötlet?”


Talán, ha kegyeskednél elolvasni a tegnap éjszakai kódom OSZTAS eljárását...

Nézz utána az ABS() függvénynek, és meséld már el, mire használom azon a helyen.


Egyébként lesz még mondanivalóm elég, de egész nap nem érek rá. Talán majd este.

2015. nov. 28. 14:25
Hasznos számodra ez a válasz?
 19/35 tabaki ***** válasza:

Azt írod, hogy „biztonságosabb” minden művelethez külön változókat rendelned. Félretéve azt, hogy ez az elv majd az eljárások és függvények használatakor _bizonyos esetekben_ nagyon hasznos lehet, sőt, az objektumorientált programozásban különös jelentőséget kap -- vagyis igen okos sejtés részedről -- érdemes mélyebben belegondolnod, hogy a programoddal kapcsolatban van-e értelme alkalmazni. Szerintem nincs. Pontosan ugyanolyan változókat használsz minden esetben, még a véletlenértéket is ugyanúgy kapják a feladat során, és semmit nem kezdesz azzal, hogy nem ugyanazok. Akkor miért nem? Én tíz változót használok, te harmincnégyet. Ez a fölösleges bitpocsékoláson túl még a kódot is szükségtelenül bonyolítja, ami éppenhogy nem kedvez a biztonságos megoldásoknak.


Három hónap nem nagy idő, ahhoz képest igazán jó programod, és nagy erénye, hogy működik. De ez még nem jelenti azt, hogy ezzel meg van oldva, még az egyelőre igen korlátozott eszközeiddel sem. Most még sok dolgot bonyolultabbnak látsz, illetve bonyolultabban valósítasz meg a kelleténél -- köztünk legyen mondva, szerintem még élvezed is, hogy ezt a hatalmasan gomolygó káoszt átlátod, miközben a többiek az alapfogalmakkal birkóznak... Megoldás azonban sokféle van, és azzal teszed magadnak a legjobbat, ha mindig a lehető legegyszerűbbet keresed, még ha ez azzal jár is, hogy náladnál butábbak is megértik a programod működését, esetleg „szégyenszemre” kiderül, hogy az voltaképpen egészen szimpla dolog. Hidd el, értelmes embereknek sokkal inkább imponál, ha valami parasztosan egyszerű, és utólag bezzeg oly' kézenfekvő megoldást találsz egy problémára, amellyel a többiek csak küzdenek, mint a disznó a jégen, és kínjukban fogant pillanatnyi ötleteket kupacba rakva tákolnak rá össze valami nyögvenyelős kódot, amire rá lehet fogni, hogy nem egészen használhatatlan.


Ezért nem tetszett nekem sem a nagyívű harmincszori ismétlés, sem a színezgetés. A kódod egyelőre igen messze van az optimálistól, és ez független kérdés attól, hogy a hasonlókra jelest kapsz-e az informatika-órán, vagy ájult tiszteletet vált-e ki a többiekből, hogy ez a számukra kínai betűkupac helyesen működik, tehát nyilván érted a csíziót. Hogy a programod helyesen fut, az tényleg örvendetes és becsülendő, de azért ne ennyi legyen a cél. Ha eljutottál eddig a helyzetig, az inkább azt jelentse, hogy van egy jól használható alapanyagod, amelyet megfelelően átszabva orvosolhatod a tervszerűtlen munka fogyatékosságait. A kódodról egyelőre süt, hogy vadon nőtt, előzetes tervezés nélkül, mindig az éppen adódó részproblémácskákat megoldva. A működőképes állapot jelzi, hogy a kiindulópontodról eljutottál a végpontig, ami jó kaland, de nem rosszabb az sem, hogy most egyenesebb utakat vágjál a dzsungelben. Amíg nincs igazán tisztázva, addig minden hosszadalmas folyamat nehezíti a tesztelését, és minden csicsa csak még átláthatatlanabbá teszi a kódot.


A kész program ismeretében van egy pár furcsa vagy értelmetlen dolog, ami a probléma előzetes átgondolása esetén valószínűleg másképpen alakult volna.

A változók szükségtelen halmozását már említettem, de az például mire jó, hogy még ráadásul longint típusúak is? Minden feladatban két 0..9 számot használsz, ami a legnagyobb eredményt adó szorzás esetén sem vezethet 81-nél nagyobb számra. Ez pedig nagyon lötyögősen elfér egy shortintben. Igen, a Free Pascal Randomja longintet ad eredményül, de a számodra szükséges része belefér egy kisebb változóba, és a program bele is teszi.

A felhasználónak meg két esélye van arra, hogy túl nagy számot írjon be, mégpedig a választáskor és a válaszok megadásakor. Ha kellően hülye, mindkét esetben beírhat a longint lehetőségeinél nagyobbat, és a program hibára fut. Tehát a nagy változó használata kevés a bolondbiztos programhoz. A szándék dicséretes, a megoldás viszont nem ez. A jelenlegi tudásod alapján egyelőre tételezd fel, hogy a felhasználó tisztességesen válaszol, ahhoz meg elég a shortint.


Annak ellenére, hogy (ahol nem kéne, a változóknál) kínosan ügyelsz a műveletek megkülönböztetésére, elfelejted, hogy az osztásnak van egy olyan sajátossága, amelyik miatt nem alkalmazható rá a szokásos kaptafa: A második szám nem lehet 0, mert a nullával osztás értelmetlen. Ráadásul, amikor ez előáll, te még a feladat kiírása előtt elvégzed a műveletet, ami egy külső szemlélőnek érthetetlen, váratlan Runtime Errorral szakasztja végét a programnak.

Nagyon kellemetlenül néz ki egyébként az osztás logaritmikus alapú kiírása, hiszen végül is ugyanazokról a kicsi természetes számokról van szó, mint a többi feladatban. Ez megoldható lenne a számok formázott kiírásával, csak éppen szükségtelen: A műveletben részt vevő változók nyugodtan lehetnek egész típusúak, attól még az eredmény lebegőpontos lesz. Mellesleg itt, rejtve, megint csak megmutatkozik, hogy a változó típusának nem kell a Random longintjéhez alkalmazkodnia. Lám, a programod itt realba rakja a longintet, és mégse dől össze a világ.


Az if elágazás működését láthatólag nem tisztáztad magadban, gyakorlatilag mindenütt ügyetlenül használod, de erről inkább holnap, nekem is kell aludnom.

2015. nov. 29. 03:05
Hasznos számodra ez a válasz?
 20/35 tabaki ***** válasza:
+Ja, azért illő megemlítenem, hogy a saját progimban is találtam utólag kínos melléfogásokat, szóval, nyugi.
2015. nov. 29. 03:08
Hasznos számodra ez a válasz?
1 2 3 4

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!