Info2/2008tavasz/kuka
A MathWikiből
(Változatok közti eltérés)
1. sor: | 1. sor: | ||
− | == | + | == 2. előadás (2008-02-22) == |
− | + | ===Változók, alap adattípusok, konstansok=== | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | |||
− | + | ===Utasítások=== | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | ==== | + | ====Vigyázzunk a pontosvesszőkre==== |
− | + | if (a > b); | |
+ | b = a; | ||
− | + | if (a > b) | |
− | + | b = a; | |
− | + | ||
− | + | ||
− | + | do { | |
+ | ... | ||
+ | } while (a < b); | ||
− | + | while (a < b) { | |
+ | ... | ||
+ | } | ||
− | + | ====Műveletek, relációk==== | |
− | + | ;++ -- | |
+ | :csak változó előtt/után | ||
+ | ;i---j | ||
+ | :mohó lexikális elemzés miatt = i-- - j | ||
+ | ;---i | ||
+ | :értelmetlen (mohó algoritmus miatt = -- -i) | ||
− | + | ;bitműveletek | |
− | + | :~ bitenkénti NOT | |
− | + | :& | ^ AND, OR, XOR | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ;logikai műveletek | |
+ | : && || ! | ||
− | + | ====Bitszámlálás*==== | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Számoljuk meg az unsigned i, egészként deklarált szám 2-es | |
+ | számrendszerbeli alakjában az 1-es biteket. | ||
− | + | unsigned i; | |
− | + | int sz; | |
− | + | ... | |
− | + | for (sz=0; i != 0; i >>= 1) if (i & 01) sz++; | |
− | + | ... | |
− | + | ||
− | + | Ha i 2-es komplemens alakban van tárolva, akkor i&(i-1) az utolsó 1-es | |
+ | bitet törli (MIÉRT?). Ezt kihasználva cseréljük ki a fenti sort egy vele | ||
+ | ekvivalens, de gyorsabbra (amely ráadásul int-nek deklarált i-re is | ||
+ | jól fut). | ||
− | + | ====Precedencia (műveletek végrehajtási sorrendje)==== | |
− | + | if ( a&04 ) ... ; | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | if ( a&04 != 0 ) ... ; | |
+ | if ( a & (04!=0) ) ... ; | ||
− | + | bajt = felso<<4 + also; | |
− | 4 | + | bajt = felso << (4 + also); |
− | + | ||
− | + | ||
− | + | bajt = (felso<<4) + also; | |
+ | bajt = felso<<4 | also; | ||
− | + | if ( ( (ev%4 == 0) && (ev%100 != 0) ) || (ev%400 = 0) ) printf("szokoev"); | |
+ | if ( (ev%4 == 0 && ev%100 != 0) || ev%400 = 0 ) printf("szokoev"); | ||
+ | if ( ev%4 == 0 && ev%100 != 0 || ev%400 = 0 ) printf("szokoev"); | ||
− | + | ====Kiértékelési sorrend==== | |
− | + | ||
− | + | Egy <= irány | |
− | + | ||
− | + | a = b = c = 0; | |
− | + | ||
− | + | Egy => irány | |
− | + | ||
+ | if ( n!=0 && osszeg/n < atlag ) ... ; | ||
+ | if ( n==0 || osszeg/n < epszilon ) ... ; | ||
+ | |||
+ | ====Lógó else==== | ||
+ | |||
+ | Helyes: | ||
+ | |||
+ | if ( a == 0 ) | ||
+ | if ( b == 0 ) | ||
+ | return 0; | ||
+ | else { | ||
+ | c = f(a,b); | ||
+ | return c; | ||
} | } | ||
− | |||
− | |||
} | } | ||
− | + | Helytelen: | |
− | + | if ( a == 0 ) | |
− | + | if ( b == 0 ) | |
+ | return 0; | ||
+ | else { | ||
+ | c = f(a,b); | ||
+ | return c; | ||
+ | } | ||
− | + | Az else mindig a legközelebbi else-nélküli if-hez tartozik! | |
− | + | Javítás: (a kapcsos zárójelek használata segít) | |
− | + | ||
− | + | if ( a == 0 ) { | |
− | + | if ( b == 0 ) | |
− | + | return 0; | |
− | + | } else { | |
− | + | c = f(a,b); | |
− | + | return c; | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | return | + | |
} | } | ||
+ | |||
+ | |||
+ | ===Tömbök=== | ||
+ | |||
+ | ====Asszimetrikus korlátok==== | ||
+ | |||
+ | Írjunk Mapleben 1-től, majd k-tól 7-elemű ciklust: | ||
+ | |||
+ | for i from 1 to 7 do ... end do; | ||
+ | for i from k to k+7-1 do ... end do; | ||
+ | |||
+ | A tömbök indexelése 1-től! Szimmetrikus intervallum! | ||
+ | |||
+ | - + - - - - - - + - - - | ||
+ | 0 1 2 3 4 5 6 7 8 9 | ||
+ | ^ ^ | ||
+ | - + - - - - - - + - - - | ||
+ | 1 2 3 4 5 6 7 8 9 | ||
+ | ^ ^ | ||
+ | |||
+ | Írjunk C-ben 0-tól, majd k-tól 7-elemű ciklust: | ||
+ | |||
+ | for ( i=0; i<7; i++) ... ; | ||
+ | for ( i=k; i<k+7; i++) ... ; | ||
+ | |||
+ | A tömbök indexelése 0-tól! Aszimmetrikus intervallum! | ||
+ | |||
+ | - + - - - - - - + - - | ||
+ | 0 1 2 3 4 5 6 7 8 | ||
+ | ^ ^ | ||
+ | - + - - - - - - + - - | ||
+ | 1 2 3 4 5 6 7 8 9 | ||
+ | ^ ^ |
A lap 2008. február 21., 21:08-kori változata
Tartalomjegyzék |
2. előadás (2008-02-22)
Változók, alap adattípusok, konstansok
Utasítások
Vigyázzunk a pontosvesszőkre
if (a > b); b = a;
if (a > b) b = a;
do { ... } while (a < b);
while (a < b) { ... }
Műveletek, relációk
- ++ --
- csak változó előtt/után
- i---j
- mohó lexikális elemzés miatt = i-- - j
- ---i
- értelmetlen (mohó algoritmus miatt = -- -i)
- bitműveletek
- ~ bitenkénti NOT
- & | ^ AND, OR, XOR
- logikai műveletek
- && || !
Bitszámlálás*
Számoljuk meg az unsigned i, egészként deklarált szám 2-es számrendszerbeli alakjában az 1-es biteket.
unsigned i; int sz; ... for (sz=0; i != 0; i >>= 1) if (i & 01) sz++; ...
Ha i 2-es komplemens alakban van tárolva, akkor i&(i-1) az utolsó 1-es bitet törli (MIÉRT?). Ezt kihasználva cseréljük ki a fenti sort egy vele ekvivalens, de gyorsabbra (amely ráadásul int-nek deklarált i-re is jól fut).
Precedencia (műveletek végrehajtási sorrendje)
if ( a&04 ) ... ;
if ( a&04 != 0 ) ... ; if ( a & (04!=0) ) ... ;
bajt = felso<<4 + also; bajt = felso << (4 + also);
bajt = (felso<<4) + also; bajt = felso<<4 | also;
if ( ( (ev%4 == 0) && (ev%100 != 0) ) || (ev%400 = 0) ) printf("szokoev"); if ( (ev%4 == 0 && ev%100 != 0) || ev%400 = 0 ) printf("szokoev"); if ( ev%4 == 0 && ev%100 != 0 || ev%400 = 0 ) printf("szokoev");
Kiértékelési sorrend
Egy <= irány
a = b = c = 0;
Egy => irány
if ( n!=0 && osszeg/n < atlag ) ... ; if ( n==0 || osszeg/n < epszilon ) ... ;
Lógó else
Helyes:
if ( a == 0 ) if ( b == 0 ) return 0; else { c = f(a,b); return c; } }
Helytelen:
if ( a == 0 ) if ( b == 0 ) return 0; else { c = f(a,b); return c; }
Az else mindig a legközelebbi else-nélküli if-hez tartozik!
Javítás: (a kapcsos zárójelek használata segít)
if ( a == 0 ) { if ( b == 0 ) return 0; } else { c = f(a,b); return c; }
Tömbök
Asszimetrikus korlátok
Írjunk Mapleben 1-től, majd k-tól 7-elemű ciklust:
for i from 1 to 7 do ... end do; for i from k to k+7-1 do ... end do;
A tömbök indexelése 1-től! Szimmetrikus intervallum!
- + - - - - - - + - - - 0 1 2 3 4 5 6 7 8 9 ^ ^ - + - - - - - - + - - - 1 2 3 4 5 6 7 8 9 ^ ^
Írjunk C-ben 0-tól, majd k-tól 7-elemű ciklust:
for ( i=0; i<7; i++) ... ; for ( i=k; i<k+7; i++) ... ;
A tömbök indexelése 0-tól! Aszimmetrikus intervallum!
- + - - - - - - + - - 0 1 2 3 4 5 6 7 8 ^ ^ - + - - - - - - + - - 1 2 3 4 5 6 7 8 9 ^ ^