Kezdőoldal » Számítástechnika » Programozás » Free Pascal? DIV, MOD

Free Pascal? DIV, MOD

Figyelt kérdés

Leírná nekem valaki részletesen, hogy a DIV és a MOD hogyan működik?

Esetleg pluszban még ehhez a sorhoz egy magyarázatot is.

while (a mod 7>0) or (a mod 2>0) do a:=a+1;



2016. okt. 19. 19:53
 1/8 anonim ***** válasza:
Egy pár ezren már leírták mindenféle oktatóanyagokban, de a hivatalos dokumentációban is elég precízen megtalálható.
2016. okt. 19. 19:57
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:

A div a sima maradékos osztás, megadja, hogy a baloldali számban hányszor van meg a jobboldali.

Pl 12 div 4 = 3, pont ahogy 12/4 = 3. De 13 div 4 is 3 lesz, mivel maradékos osztás, és csak az egész értéket fogja visszaadni (nem kerekít, csak elhagyja a maradékot, ez fontos!)


A mod pedig a moduló művelet, ez pedig ponthogy az osztás utáni maradékot fogja megadni. 12 mod 4 = 0, mivel 12-t 4-el elosztva 0 lesz a maradék. 13 mod 4 esetén pedig 1 lesz az eredmény.

Amire itt oda kell figyelni, hogy Pascalban a moduló művelet előjele a baloldali értéktől függ. Tehát:

13 mod 4 = 1

13 mod (-4) = 1

viszont,

-13 mod 4 = -1

-13 mod (-4) = -1

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

while (a mod 7>0) or (a mod 2>0) do a:=a+1;


Amíg A változó héttel vagy kettővel való osztásának egész része nagyobb nullánál, addig növeld eggyel az értékét.

2016. okt. 19. 22:26
Hasznos számodra ez a válasz?
 4/8 tabaki ***** válasza:

+ JUJ,DE CSÚNYÁT MONDTAM!


Amíg A változó héttel vagy kettővel való osztásának MARADÉKA nagyobb nullánál, addig növeld eggyel az értékét. (tehát hagyd abba, ha héttel vagy kettővel osztható)

2016. okt. 19. 22:31
Hasznos számodra ez a válasz?
 5/8 SimkoL ***** válasza:

a 'while (a mod 7 > 0) or (a mod 2 > 0) do Inc(a);' értelmezése jelen esetben, addig növeld a értékét amíg kettővel ÉS héttel nem lesz osztható maradék nélkül.

Az elől és hátultesztelős ciklusok 'érdekessége'.


program Project2;


{$APPTYPE CONSOLE}


uses SysUtils;


var a : Integer;


begin

a := 1;

while (a mod 7 > 0) or (a mod 2 > 0) do

begin

Write(a:3);

Inc(a);

end;

a := 1;

repeat

Write(a:3);

Inc(a);

until (a mod 7 > 0) or (a mod 2 > 0);

ReadLn;

end.


Az első ciklusunk 14-ig fut a második 2-ig. Ha a while ciklusban a feltétel 'while (a mod 7 > 0) and (a mod 2 > 0) do Inc(a);' lenne az is csak kettőig futna.

2016. okt. 20. 11:13
Hasznos számodra ez a válasz?
 6/8 tabaki ***** válasza:

@SimkoL:

Igazad van. Most már nem is merek az éjszakázás áldatlan hatásaival mentegetőzni, lassan szembe kell néznem a szellemi leépülés rémével. Hiába olajoztam Soproni Fekete Démonnnal az akadozó fogaskerekeket, már az se a régi...


@Kérdező:

Az idézett sor logikája tehát nagyjából:

Akkor fejezd be a ciklust, ha A osztható héttel, de ez alól felmentést ad, ha ugyanakkor nem osztható kettővel. Az (A mod 7) is, meg az (A mod 2) is igaz vagy hamis értékeket szolgáltató kifejezések, tehát:


hamis vagy hamis → // egyikkel sem osztható, folytasd

igaz vagy hamis → // 7 osztja, de 2 nem, folytasd

igaz vagy igaz → // mindkettő osztja, teljesült a feltétel, állj le


Vagyis a cseles ciklus a 7 első páros többszörösénél áll le.


Itt SimkoL programját úgy módosítottam, hogy a REPEAT most ugyanazt csinálja a WHILE, esetleg így még jobban látszik a különbség a feltételek megadása között:


program WhileRepeat;


var a : Integer;


begin

      a := 1;

      while (a mod 7 > 0) or (a mod 2 > 0) do

            begin

                  Write(a:3);

                  Inc(a);

            end;

      WriteLn;

      a := 1;

      repeat

            Write(a:3);

            Inc(a);

      until (a mod 7 = 0) and (a mod 2 = 0);

      ReadLn;

end.

2016. okt. 20. 12:59
Hasznos számodra ez a válasz?
 7/8 tabaki ***** válasza:
+ ...a repeat most ugyanazt csinálja, MINT a while...
2016. okt. 20. 13:09
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
Köszönöm a válaszokat
2016. okt. 21. 21:45

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!