Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a programban?

Mi a hiba a programban?

Figyelt kérdés

Lottozó programot szeretnék csinálni , ahol előszór bekér 5 számot és ha nem kisebb 1-nél, de nem is nagyobb 90-nél akkor generáljon le magától 90-ig számokat


program valami;


var a,b,c:integer;

begin



for b:= 1 to 5 do

begin


a:=0;



repeat


writeln(b, '. szám:');

readln(a);

if a < 1 then write('Írj be nagyobb számot')

else if a > 90 then write('Írj be kisebb számot')



else



for c:= 1 to 5 do

Begin

until

randomize;

a:=random(89)+1;

writeln(a);

end;



end.



és ha lehetséges a végén kiírja, hogy szám jó és ebből hány van jó helyen


2014. ápr. 29. 21:52
1 2 3
 21/29 anonim válasza:
jó fos
2014. máj. 1. 18:48
Hasznos számodra ez a válasz?
 22/29 A kérdező kommentje:
He nem próbálsz meg segíteni , akkor ne kommentelj.. és attól, hogy te nem ebben programozol még nem kell szidni avgy el lehet húzni...köszi
2014. máj. 1. 20:01
 23/29 tabaki ***** válasza:

Attól függetlenül, hogy a programod még mindig működésképtelen, nagyot léptél előre egy nap alatt, különösen, hogy a tanácsokat megszívlelve nekiestél a tömböknek. Láthatólag még nem egészen érted, de ha így haladsz, holnapra menni fog. Néhány megjegyzés:


1. Tervezd meg papíron, hogy hogyan működik a program. Persze, némi tapasztalat után egy ilyen egyszerű feladatot fejben is átlátsz, de most még nem. Nem muszáj folyamatábrát rajzolnod, de átláthatóbb emberi nyelven írd le magadnak a lépéseket, amelyeket majd pascalban le akarsz kódolni.


2. Gondold át, hogy ténylegesen mire van szükséged. A lottószelvény 90 mezőből áll, ez igaz -- de következik ebből, hogy egy kilencven elemű tömb kell? Ha ténylegesen szimulálnád a kitöltést (a 90 elem kiválasztott öt elemében jeleznéd, hogy beikszelted-e vagy sem), akkor igen, viszont igen/nem lehetőségekhez miért kéne integerekből álló tömb? De te nem ezt csinálod, hanem létrehozol egy 90 elemű tömböt, és csak az első öt elemét használod. Ennek mi értelme van? Ha átgondolod, akkor nyilvánvaló, hogy a tiedhez hasonló megoldásban két 5 elemű számcsoportot kell kezelned: A játékos tippjeit, meg a gép által generált véletlenszámokat. Erre legalkalmasabbnak két 5 elemű vektor (alias egydimenziós tömb), vagy egyetlen 2*5 elemű kétdimenziós tömb tűnik. Utóbbit addig ne erőltesd, amíg a tömbkezelést nem érted egészen.


3. Az ne zavarjon, hogy nem tudsz egyszerre mindent megoldani. Próbáld meg, hogy a programnak csak egy része működjön, de az teljesen. Például foglalkozz először csak azzal, hogy a tippek beolvasása legyen tökéletes, utána ellenőrzésként írasd ki a kapott értékeket. Ez a kiíratás a végleges programban nem lesz benne, de addig is ellenőrizheted vele, hogy a beolvasott értékek tényleg azok-e, amelyeknek lenniük kell.


4. Alaposan gondold át a feltételeket, ne csak azokkal foglalkozz, amelyek kiütik a szemed. Gondosan ellenőrzöd, hogy a szám a megfelelő értéktartományban van-e, ezzel vélhetőleg már a tökélyt reméled megközelíteni. De mi van akkor, ha én mind az öt számnak beírom mondjuk a hatvanhármat? Az engedélyezett tartományban van, tehát a programod boldogan elfogadja, jaj, de jó, kapott öt hibátlan tippet. Vagy -- amit számbeolvasással nem tudsz orvosolni, ezért tedd el későbbre -- mi van, ha tippként beírom, hogy "ló"?


5. Továbbra sem hiszed el, hogy elég egyszer randomizálni, nem kell minden véletlenszám előtt? Pedig így van.


6. Mi a fenének van az egész egy nagy repeat...until ciklusba rakva, és ha már van, minek a végére egy tökéletesen értelmetlen kilépési feltétel?

Bármi is b[l] aktuális értéke, arra igaz lesz, hogy vagy nagyobb, mint egy, vagy kisebb, mint 90. Egytől végtelenig, vagy mínusz végtelentől kilencvenig -- szerinted melyik szám nincs benne?


7. a:=random(90)+90; Mi ez a marhaság, amellyel beállítod, hogy A értéke csakis 90 és 180 közé eshessen? Egyrészt eddig azt hittem, csak 1..90 közötti számokat lehet kihúzni, másrészt így gondoskodsz arról, hogy csakis egyetlen találat lehet, ha a játékos 90-et tippel, és a vakvéletlen is azt hozza ki.


8. A kiírásoknál tegyél szóközt a számok elé.


9. Be vagy oltva értelmes változónevek ellen? Jó, a ciklusszámlálásban megvan a hagyománya mondjuk az I és C elnevezéseknek (index, counter), de egyébként miért nem használsz mondjuk TIPP, VELETLEN, SZAMLALO vagy efféle neveket, hogy két hét múlva is megértsd, mi mire való?


Egyelőre ennyi. Szerintem egyelőre bontsd apró részekre a feladatot, és próbáld darabonként megoldani. Ez később is gyümölcsözni fog, amikor már eljárásokra, függvényekre tagolod a programjaidat.

2014. máj. 2. 01:05
Hasznos számodra ez a válasz?
 24/29 A kérdező kommentje:
Rendben értem, és azt szeretném kérdezni, hogy az untilba lévő feltételt mért nem nézi?
2014. máj. 2. 16:22
 25/29 tabaki ***** válasza:
Miért ne nézné? Csak az van, amit föntebb leírtam: A feltétel b[l] bármely értékére kilépést ír elő. Ezt a program korrekt módon teljesíti, vagyis sohasem ugrik vissza.
2014. máj. 2. 16:53
Hasznos számodra ez a válasz?
 26/29 A kérdező kommentje:
de ha kitörlöm a b[l] -t meg az egész feltételt, kivéve ami az untilban van akkor meg nem csinál semmit
2014. máj. 2. 17:30
 27/29 tabaki ***** válasza:

"kivéve ami az untilban van"


Én ezt nem értem. Egyszer megemlítettem, hogy az until "feltétele" értelmetlen, mert minden esetben kilép. Másodszor megerősítettem ugyanezt. Erre most -- miközben egyáltalán nem világos a számomra, mit akarsz törölni -- arról értesítesz, hogy ezt a garantáltan működésképtelen dolgot mindenképpen meg akarod őrizni...

Akkor még egyszer: Nem jöttem rá, mit akarsz az egész repeat...until ciklussal, de a feltétele NEM FELTÉTEL. A program minden esetben ki fog lépni a ciklusból. Ez az első dolog, amit ki kéne dobnod és mással helyettesítened, nemhogy foggal-körömmel ragaszkodnod hozzá.

Mellesleg: Te nem olvastad el, amit írtam? Csak, mert semmiféle összefüggést nem látok a több órás munkával megfogalmazott (és néhány perc alatt elolvasható) szövegem, meg a te reakcióid között. Semmiféle indítványt nem tettem b[l] vagy egyéb törlésére.


-- Béluska, ugorj már le a boltba, hozzál ötér' túrót!

-- De ha pirosra festem a mókust, összeragad a szőre.


Ez milyen párbeszéd? És továbbra is érvényes, hogy ne vaktában törölj fölöslegesnek sejdített részeket, és szúrj be reményteljesnek ítélt sorokat, hanem okoskodd ki előre, hogy mit kell csinálnia a programnak. Nemlétező javaslataimra talált ellenérvek helyett sokkal szívesebben látnék egy pontokba szedett listát a teendőkről.

2014. máj. 2. 19:50
Hasznos számodra ez a válasz?
 28/29 A kérdező kommentje:
a repeat until azért tettem volna bele, hogy csak addig csinálja a programot amíg a untilban lévő feltétel igaz ha nem akkor előröl kezdi az egészet
2014. máj. 2. 20:25
 29/29 tabaki ***** válasza:
Ez a repeat...until ciklus tökéletes meg nem értését mutatja. Nem azt jelenti, hogy "csak addig csinálja a programot" hanem, hogy a blokk eleje (repeat) és vége (until) közötti részt folyamatosan ISMÉTLI mindaddig, amíg az until feltétele nem teljesül. Jó, angolul nem mindenkinek muszáj tudni, de ez a "repeat" egy kicsit sem emlékeztetett téged a "repeta" kifejezésre? Föl nem foghatom, honnan vetted az egész kifacsarodott ötletet, hogy a program kérés nélkül saját akaratából újraindul, ha te másképp nem utasítod. Rémes...
2014. máj. 2. 22:23
Hasznos számodra ez a válasz?
1 2 3

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!