[Mat08] ezt a hétfői infócsoportnak szól , Barna küldi

Podonyi Aniko podonyia at math.bme.hu
2008. Okt. 13., H, 21:03:25 CEST


Szia!

    igen, így nem lehet leröviditeni az egyenlõséget. Sajnos muszáj kiírni,
hogy  l[i] mod 7=3 or l[i] mod 7=4,
    mert a megoldásodban két számot hasonítottál össze logikailag, majd ezt a
true/false/fail értéket hasonlítod össze, hogy egyenlõ-e egy 0 és 7 közötti
számmal...
    A for-os próbálkozással magadat szivattad csak, és jellemzõen - a jobb
programoknál/gépeknél legalábbis -
    a for-os megoldás lassabb, mert pl. nem futtatható párhuzamosan.

    Ha magyar mondatban olyat látsz, hogy válasszuk ki, akkor az biztos, hogy
select lesz,
    a csináljunk ilyen vagy olyan sorozatot, az -majdnem- tuti map, kivéve, ha
olyan függvény kell, ami csak
    kiválasztós logikával mûködik, pl. 1-tõl százig a prímek
=select(isprime,[$1..100]). Bár ebben a prímes példában a
    selectre az utal, hogy nem tudod elõre, milyen hosszú listát fogsz kapni,
ha map-pel meg lehet oldani egy (rész)feladatot, akkor mindenképpen elõre kell
tudnod, milyen hosszú listát kell kapnod.

    Persze olyan is van, h tudjuk a lista hosszát, mégsem lehet használni a
map-et - ilyenkor általában a select sem megy :D
    erre példa: az elsõ száz prímszámmal csináljunk ezt vagy azt. Mivel asszem
nincs olyan beépített függvény, ami rögtön az n-edik prímet adja, a map nem
mûködik, és a select azért nem, mert ott meg honnan tudnánk, [$1..?] ? helyére
mennyit kell írni ahhoz, hogy pont az elsõ száz prímet kapjuk vissza, listában.

    Na ilyenkor lehet erõlködni (pl. van egy foldl nevû eljárás, amit érdemes
tanulmányozni... (foldl((p,k)->[op(p),nextprime(p[-1])],[0],$1..100)[2..-1]; -
szedjétek darabokra a parancsokat és értelmezzétek) ),
    vagy most jöhet a for. :S :)

    Küldd át lszi a levlistátokra a hétfõi csoportnak címezve! Kösz Barna

    2008/10/13 László Árokszállási <aroklaci at gmail.com>

        l:=[5,11,3];
        for i to 3 do
        if l[i] mod7=(3 or 4) then l(op(l) l2=


    for i to nops(l) do if l[i] mod 7=3 or l[i] mod 7=4 then l2:=[op(l2),l[i]]
fi; od; #nem látszik els&#245;re, mir&#245;l szól a program...
    select(x->x mod 7=3 or x mod 7 = 4, l);

    ja, és egyébként ez a feladat a wiki.math.bme.hu informatika gyakorlat
példái között meg van oldva...
    szal miel&#245;tt jöttök, érdemes megnézegetni az ottani új infókat.


More information about the Mat08 mailing list