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
 21/35 SimkoL ***** válasza:

[link]

[link]

[link]


Jobban nem néztem bele, mert hét/7 napot dolgozom 'terepen', nincs erőm, de így lenne a szép (szebb).


Teljesen off:

A Füzéri vár felújításához készítettünk, vittünk 7 korhű ágyút és 10 szakállas puskát. Nagyon szépen újítják fel a várat, aki erre jár tavasszal ki ne hagyja :)

2015. nov. 29. 05:30
Hasznos számodra ez a válasz?
 22/35 progizo válasza:

#4.: "nem tudom a free pascalból kimásolni. Rámegyek az editben a copyra de csak a pascalban tudom beilleszteni. Erre valami ötlet?"


Az EDIT menüpontjában ott van, hogy:

Copy to Windows

és

Paste from Windows


Ezekkel tudod a Windows vágólapját elérni. Csak egérrel használható.

2015. nov. 29. 14:34
Hasznos számodra ez a válasz?
 23/35 tabaki ***** válasza:

@SimkoL:

Egyszer már tényleg el kéne néznem tifelétek, állandóan kiderül valami ottani érdekesség. Megvallom, Füzér létezéséről, meg a vár felújításáról általad értesültem először, persze azt nyilván te is belátod, hogy pár ezer ember helyi iparkodásának sosem lehet akkora hírértéke, mint F. Pákó országos jelentőségű kultúraformáló tevékenységének...


@Kérdező:

Hát, az ifjeiddel kapcsolatos elemzés ma is elmarad, viszont megkíséreltem én is csupa iffel megoldani a feladatot, hogy az eddig tanultakhoz képest túl sok újdonság ne kerüljön belé:

[link]

Éppen csak kipróbáltam, viszont nem teszteltem igazán, vagyis csúszhattak bele hibák, de te majd kijavítod őket...

Igyekeztem normálisan tagolni, de azt hiszem, abban megegyezhetünk, hogy a végtelenbe nyúló if-láncolat nem igazán kedvez a kód áttekinthetőségének. Mindenesetre szerintem érdemes összehasonlítanod az eljárásokba szedett változattal (annak bénaságait majd tisztább fejjel javítom), hogy hogyan jelennek meg a műveletek a két programban. Remélem, az derül ki majd a számodra, hogy a procedure-használat alapjainak megértése nem is olyan embert próbáló feladat.

Ha valami nem világos, kérdezz.

2015. nov. 29. 23:44
Hasznos számodra ez a válasz?
 24/35 tabaki ***** válasza:

Az ifekről:


Az if kétféle formában használatos. A rövidebbik változatban a feltétellel úgy kapcsolsz be egy programrészt, hogy az a többi lefutását (legalábbis közvetlenül) nem befolyásolja:

Ha nyitva van a pék, veszek egy kiló kenyeret, azután hazamegyek.


IF PEK = NYITVA THEN

      KENYERVETEL;

HAZAMENES;


Tehát vagy tudok kenyeret venni, vagy sem, de ettől függetlenül a hazatéréssel folytatom.

A másik változatban a további tevékenység is a feltételtől függ. Ilyenkor nemcsak azt közlöd, hogy mi a teendő a feltétel esetén, hanem egy ELSE utasítás után azt is, hogy más esetben mi történjék:

Vasárnap sült csirkét eszünk, egyébként spenótot.


IF VASARNAP THEN

      CSIRKE

ELSE

      SPENOT;


Ebben az esetben tehát nem az történik, hogy vasárnap a csirke után még spenót is következik, hanem az, hogy vagy ezt esszük, vagy amazt. Az ELSE-ágnak

köszönhetően a spenótevés csak akkor lép életbe, ha történetesen nem vasárnap van. Fontos érdekesség, hogy az

IF feltétel THEN

      utasítás1

ELSE

      utasítás2;

egyetlen kifejezésnek számít, ezért az ELSE előtti utasítás (vagy BEGIN..ELSE utasításblokk) végére nem kell pontosvessző! Ha ugyanis kiteszed, az azt jelenti a fordító számára, hogy ott az utasítás vége (vagyis a rövidebb változatot használtad), és az önmagában értelmetlen ELSE már a következő utasítás akar lenni -- ezért nem is fogadja el, leáll a fordítás.


Te a saját programodban sehol nem használod az ELSE utasítást, tehát -- leegyszerűsítve -- valahogy így vizsgálsz:


IF V = 0 THEN {összeadás};

IF V = 1 THEN {kivonás};

IF V = 2 THEN {szorzás};

IF V = 3 THEN {osztás};

...


Más szóval: Megnézed, hogy nem összeadás-e, és utána az eredménytől függetlenül, sorban ellenőrzöd, hogy hátha kivonás, szorzás, osztás. Ez látható futási hibára nem vezet, hiszen a felsoroltak közül nyilván csak egyik érvényes -- ha viszont az már megtaláltad, tökéletesen fölösleges a többit végigellenőrizgetned. Ez egy ilyen kis program esetén semmi észrevehető problémával nem jár, de más feladatnál, amikor esetleg millió ilyen vizsgálatot kell elvégeztetned, visszaüthet az efféle trehányság, ezért érdemes az ELSE segítségével kizárni a további vizsgálódást, valahogy így (az itt kapcsos zárójelek közé tett szavakkal jelzett programrészek természetesen lehetnek akármilyen hosszú BEGIN..END utasításblokkok):


IF V = 0 THEN

      {összeadás}

ELSE

      IF V = 1 THEN

            {kivonás}

      ELSE

            IF V = 2 THEN

                  {szorzás}

            ELSE

                  IF V = 3 THEN

                        {osztás}

                  ELSE

                        {nemtudommi};

...


Látható, hogy itt a behúzások már kényelmetlenül sok helyet foglalnak el a sorból, ezért inkább zavarják, mint segítik a program áttekinthetőségét. Szerencsére ennek nincs jelentősége a fordítás szempontjából, ezért megteheted, hogy kellemesebb tördelést választasz:


IF V = 0 THEN

      {összeadás}

ELSE IF V = 1 THEN

      {kivonás}

ELSE IF V = 2 THEN

      {szorzás}

ELSE IF V = 3 THEN

      {osztás}

ELSE

      {akármi};

...


Hasonlóan fölösleges vizsgálatot végzel a műveletek kiértékelésénél is (a színezgetést elhagyom, hogy ne zavarjon):


if c2=o2 then

      begin

            WriteLn('A válasz helyes!');

            p2:=p2+1;

      end;

if c2<>o2 then

      begin

            WriteLn('A válasz rossz!');

            h2:=h2+1;

      end;


Ha már egyszer kiderült, hogy c2 egyenlő-e o2-vel, mi értelme az firtatni, hogy nem egyenlő-e? Vagy egyenlő, ekkor minden további vizsgálódás szükségtelen, vagy nem az, akkor meg nem szorul ellenőrzésre, hogy a másik lehetőség érvényes.


if c2=o2 then

      begin

            WriteLn('A válasz helyes!');

            p2:=p2+1;

      end

else

      begin

            WriteLn('A válasz rossz!');

            h2:=h2+1;

      end;


Persze ez megint csak egy kicsi, hibát nem okozó pongyolaság, az a néhány kis fölösleges vizsgálat az emberi észlelés sebességéhez képest jelentéktelen. De érdemes nem megszokni, hátha adódik olyan feladat, amelyben az ilyen apróságok halmozódása már észrevehető következményekkel jár.

2015. nov. 30. 12:50
Hasznos számodra ez a válasz?
 25/35 tabaki ***** válasza:

Annak bemutatására, hogy a „már jó” állapot nem biztos, hogy az egyetlen megoldás, szigorúan csak az érdekesség kedvéért átépítettem a programot teljesen más szerkezetűre. Az eredetihez képest alaposan meg lett kavarva, úgyhogy szó sincs arról, hogy ezt tőled is elvárnám 3 hónap tanulás után. Annak ellenére, hogy hosszasan sorolom a konstansokat, és átkos szokásom ellenére most igyekeztem rendesen, utasításonként tördelni a sorokat, a forráskód is rövidebb lett, meg csodák csodájára a lefordított program is, pedig nagyjából ugyanazt csinálja, viszont még többet színezget, és megpróbálja kiküszöbölni a bevitel hibalehetőségeit.

Itt van a kísérletem egy darabban, eljárások nélkül:

[link]

Itt pedig valamivel értelmesebben szervezve:

[link]

Raktam bele egy pár számodra szokatlan megoldást, amelyektől a tudakozódási hajlandóságod üdvös növekedését remélem. Egyébként meg bízom benne, hogy SimkoL előbb-utóbb befejezi a fegyverkezést, ugyanis én pont ugyanannyira nem vagyok programozó, mint te, és kíváncsi volnék arra, ő mit hoz ki az anyagból. Gyanúm, hogy érhetnek meglepetések.

2015. dec. 2. 00:00
Hasznos számodra ez a válasz?
 26/35 anonim ***** válasza:
Elképesztő mennyit tudnak szarakodni a "pascalosok" egy általános iskolai feladat megoldásán...
2015. dec. 2. 07:26
Hasznos számodra ez a válasz?
 27/35 tabaki ***** válasza:

#26:

Tanulságos és főként lényeglátó megjegyzés. A hablatyolásomnak pont annyi köze van a pascalhoz, mint az adott feladat megoldásához. Mmm, frappáns.

2015. dec. 2. 09:09
Hasznos számodra ez a válasz?
 28/35 anonim ***** válasza:
Pont erről beszélek észlény...
2015. dec. 2. 09:14
Hasznos számodra ez a válasz?
 29/35 SimkoL ***** válasza:
Kedves Ismeretlen ! Nem azért irkálunk itt oly sokat, mert nem tudnánk, tudjuk a feladatot megoldani elsőre, tökéletesen :) Vagyunk itt egy páran akik elhivatottságot érzünk a fiatalság oktatása iránt. Mivel a Kérdező világossá tette, hogy pár hónapja tanulja a nyelvet, ezért megérdemel egy kis magyarázatot a kód, az elgondolás.
2015. dec. 2. 12:13
Hasznos számodra ez a válasz?
 30/35 SimkoL ***** válasza:

Off:

@tabaki: a fegyverkezésből átváltottunk karácsonyi fényekre - idénymunka, de jól fizet - így nem nagyon leszek. A pocakból már lement vagy 10 kiló, az asszony azt mondta maradjak még vagy két hetet :) mert a gép mellett csak összefele szedtem magam. Most lassan szép vagyok (leszek), karcsú !!!, üde és kívánatos.....

2015. dec. 2. 12:27
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!