TCH (statz) | #1, Főfasz (10466) |
1815 | #26d2 | ^ | Idézet | Sat, 27 Jul 2013 19:50:33 +02 |
84.3.*.* | *.catv.pool.telekom.hu |
Mai témánk (a kecskebaszáson kívül) megint egy kis pacal, noha valószínűleg még mindig senki nem mérgezi rajtam kívül magát vele. C-like nyelvekben ugye van a "feltétel operátor" (l = (round(random) & 1) != 0 ? 63 : 58;) de Pascalban nincs ilyen egysoros if. (Illetve ez nem igaz, mert egy utasításos blokk esetén nem kell a begin/end, de if-es szerkezeteknél az átláthatóság miatt célszerű mindig kirakni a blokkhatárokat, akkor is, ha egyetlen utasítás van, hogy ne kelljen keresgetni hol a vége. Azonfelül az if nem ad vissza értéket, a blokkon belül van az értékadás helye, míg C alatt a két ágban már csak a visszaadandó érték van.) Szóval a Pascal ilyet nem tud, viszont tud olyat, hogy - értelemszerűen kételemű - tömböt booleannal címez (const faszom: array[false..true] of longint = (58, 63);) amit lehet használni ugyaneme feladatra (l := faszom[round(random) and 1 <> 0];) Na most, csak az a kérdés, hogy ez vajh lassabb-e, mint a sima if-es megoldás (if (round(random) and 1 <> 0) then l := 63 else l := 58;) ? Bencsmárkollyuk ki. program test1; var i, l: longint; const faszom: array[false..true] of longint = (58, 63); begin for i := 0 to 1000000000 do begin l := faszom[round(random) and 1 <> 0]; end; end. program test2; var i, l: longint; begin for i := 0 to 1000000000 do begin if (round(random) and 1 <> 0) then l := 63 else l := 58; end; end. root@Csabi:~/uasm# time ./test1 real 0m48.110s user 0m48.110s sys 0m0.000s root@Csabi:~/uasm# time ./test2 real 0m49.930s user 0m49.930s sys 0m0.000sHangyafasszal. Viszont sokkal átláthatóbb, imho még a C-s verziónál is, tehát célszerű használni. |