Kezdőoldal » Számítástechnika » Programozás » Hol a hiba a programomban?

Hol a hiba a programomban?

Figyelt kérdés

Heló! Hol a hiba, pls segítsetek:

[link]

Ez egy egyszerű algoritmus (turbo) pascal-ban, ami teszteli, hogy prím-szám-e, de nem futtatja le. Azt írja az "else oszto:=oszto+1" sornál, hogy error 113: error in statement, de akárhova teszem a bekezdést, akkor is. Meg még sztem lehet vmi hiba az "if"-eknél is, meg más bekezdéseknél is.



2014. jan. 25. 18:59
1 2
 1/20 anonim ***** válasza:
begin és then után nem kell pontosvessző.
2014. jan. 25. 19:04
Hasznos számodra ez a válasz?
 2/20 anonim ***** válasza:

else után sem.

(#1 voltam)

2014. jan. 25. 19:05
Hasznos számodra ez a válasz?
 3/20 A kérdező kommentje:
Oké, köszi, de kiszedtem, és még mindig ugyan az, ugyan ott a hiba.
2014. jan. 25. 19:15
 4/20 anonim ***** válasza:
else elé sem kell pontosvessző.
2014. jan. 25. 19:35
Hasznos számodra ez a válasz?
 5/20 SimkoL ***** válasza:

Érdekes egy primkeresés :) de végül is igazad van ha csak két osztója van akkor prim.


var a, oszto, db : longint;

begin

Write('Kerem a szamot: ');

ReadLn(a);

oszto := 1;

db := 0;

while oszto <= a do

begin

if a mod oszto = 0 then db := db + 1;

Inc(oszto);

end;

if db = 2 then WriteLn('Prim szam') else WriteLn('Nem prim szam');

end.


Hasonlítsd össze a tieddel !

2014. jan. 25. 20:37
Hasznos számodra ez a válasz?
 6/20 A kérdező kommentje:

Köszi! Átírtam a kettőt ezzé:


var a, oszto, db : longint;

begin

Writeln('Kerem a szamot: ');

ReadLn(a);

oszto := 1;

db := 0;

while oszto <= a do begin

if a mod oszto = 0 then

db := db + 1;

oszto := oszto + 1;

end;

if db = 2 then WriteLn('Prim szam')

else WriteLn('Nem prim szam');

readln;

end.


A program működik, bár arra még mindig nem jöttem rá, mi lehetett a hiba. De köszi!

2014. jan. 27. 17:00
 7/20 A kérdező kommentje:

Na, most tovább írtam egy kicsit(az első hibájának az okát még mindig nem tudom :D) úgy, hogy 2 szám közötti prímeket írja ki:


var a, x, y, oszto, db : longint;

begin

writeln('Kerem az elso szamot: ');

readln(x);

writeln('Kerem a masodik szamot: ');

readln(y);

a := x+1;

oszto := 1;

db := 0;

while a <= y do begin

while oszto <= a do begin

if a mod oszto = 0 then db := db + 1;

oszto := oszto + 1;

end;

if db = 2 then WriteLn(a);

a := a + 1;

end;

readln;

end.


Elindítja, meg minden, de azt csinálja, hogy pl. beírom, hogy első szám 2, második 100(de az tökmindegy neki) és kiírja végeredménynek, hogy 3. Viszont, ha 3-at írok be, nem ír ki végeredményt. Szóval, kiírja, a-t hogyha (x+1) prím, ha nem akkor semmit. Tehát nem ismétli a while-t.(?)(?-De miért?)

Nem értem mi nem jó.

2014. jan. 28. 21:09
 8/20 anonim ***** válasza:

Játszd végig fejben, mi történik a programban, az egyes iterációkban mik a változók értékei. :) Ha ez nehéz, akkor csinálj kiíratásokat minden iterációban, külső és belső ciklusban is. Pl.:


"kulso ciklus: db=? oszto=? a=? y=? ..."

"belso ciklus: db=? oszto=? a=? y=? ..."


Meg fogod látni mi a hiba. :)

2014. jan. 28. 21:31
Hasznos számodra ez a válasz?
 9/20 SimkoL ***** válasza:
Itt van javítva, magyarázva és pofásítva: [link]
2014. jan. 29. 01:42
Hasznos számodra ez a válasz?
 10/20 A kérdező kommentje:

Értem és köszönöm szépen! :)

Köszi, hogy nem csak abban segítettél, hogy működjön, hanem meg is értettem mi a baj, és szebb is lett a program.

És köszi neked is, #8 !

2014. jan. 29. 17:38
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!