tanszek:oktatas:szamitastechnika:egyszeru_mintapeldak
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| tanszek:oktatas:szamitastechnika:egyszeru_mintapeldak [2022/09/05 21:09] – létrehozva knehez | tanszek:oktatas:szamitastechnika:egyszeru_mintapeldak [2023/10/11 08:19] (current) – knehez | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ==== A változók pontos megadása ==== | ||
| + | |||
| + | A következő érdekes példák a változók pontos típusmegadására figyelmeztetnek. | ||
| + | |||
| **Feladat**: | **Feladat**: | ||
| - | <code c> | + | <sxh c> |
| #include < | #include < | ||
| Line 18: | Line 22: | ||
| printf(" | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| **Megjegyzés: | **Megjegyzés: | ||
| - | Jegyezzük meg, hogy a 10 általában minden programozási nyelvben egész számot jelent, binárisan 32 biten kódolva: | + | Jegyezzük meg, hogy a 10 általában minden programozási nyelvben egész számot jelent, binárisan 32 biten kódolva: |
| - | A 10.0 jelenti a double típusú lebegőpontos számot ami 64 bites és így nézne ki: 0 10000000010 0100000000000000000000000000000000000000000000000000 és a 10.0f (igen, a végére egy f betűt írunk), jelenti a float típusú lebegőpontos számot ami ugyancsak 32 bites de így néz ki binárisan: 0 10000010 01000000000000000000000. A szóközök az előjel az exponens és a mantissza tagokat választják el egymástól. Látható tehát hogy a 10 10.0 10.0f három teljesen különböző módon van értelmezve kettes számrendszerben. | + | **00000000 00000000 00000000 00001010** lesz. |
| + | |||
| + | A 10.0 jelenti a double típusú lebegőpontos számot ami 64 bites és így nézne ki: | ||
| + | |||
| + | **0 10000000010 0100000000000000000000000000000000000000000000000000** | ||
| + | |||
| + | és a 10.0f (igen, a végére egy f betűt írunk), jelenti a //float// típusú lebegőpontos számot ami ugyancsak 32 bites, de így néz ki binárisan: | ||
| + | |||
| + | **0 10000010 01000000000000000000000** | ||
| + | |||
| + | A szóközök az előjel az exponens és a mantissza tagokat választják el egymástól. Látható tehát hogy a 10 10.0 10.0f három teljesen különböző módon van értelmezve kettes számrendszerben. | ||
| **f = 70.0 / 3.0;** helyett ha ezt írjuk: **f = 70 / 3;** ezért fog más eredményt adni hiszen így elvesztjük a tizedesjegyeket. | **f = 70.0 / 3.0;** helyett ha ezt írjuk: **f = 70 / 3;** ezért fog más eredményt adni hiszen így elvesztjük a tizedesjegyeket. | ||
| - | **Feladat**: | + | **1. Feladat**: Hibásan számol a c nyelv??? Mi lehet a hiba? |
| - | <code c> | + | <sxh c> |
| #include < | #include < | ||
| Line 40: | Line 54: | ||
| printf(" | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| + | A 3 nem osztója a 13-nak. A 13 / 3 eredményét a c változóban egészként tároljuk, ilyenkor az eredmény egész részét aza a 4-et fogjuk eredményként kapni. | ||
| - | **Feladat**: | + | Ahhoz hogy a tizedes jegyeket is megkapjuk, próbáljunk |
| - | <code c> | + | **2. Feladat**: Az előző kódban változtassuk meg a c-t float-ra és a printf()-ben használjunk %f-et és próbáljuk ki úgy is. Segített? |
| + | |||
| + | <sxh c> | ||
| #include < | #include < | ||
| Line 55: | Line 72: | ||
| printf(" | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| - | **Feladat**: | + | Azért nem segít, mert az a / b elvégzésekor, |
| - | <code c> | + | **3. Feladat**: Hozzon létre egy **unsigned int** változót 2 illetve egy **int** változót -1 értékkel és végezzen összehasonlítást, |
| + | |||
| + | <sxh c> | ||
| #include < | #include < | ||
| Line 68: | Line 87: | ||
| if ( b > a) | if ( b > a) | ||
| { | { | ||
| - | | + | |
| + | } | ||
| + | else | ||
| + | { | ||
| + | | ||
| } | } | ||
| - | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| - | **Miért számol hibásan (pontatlanul) a következő kód?** | + | **4. Feladat: |
| - | <code c> | + | <sxh c> |
| #include < | #include < | ||
| Line 85: | Line 107: | ||
| printf(" | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| Nézzük meg hogyan ábrázoljuk a változókat: | Nézzük meg hogyan ábrázoljuk a változókat: | ||
| Line 95: | Line 117: | ||
| Magyarázzuk meg miért nem működik a (double) (a/b) típuskonverzió? | Magyarázzuk meg miért nem működik a (double) (a/b) típuskonverzió? | ||
| - | **Miért számol hibásan (pontatlanul) a következő kód?** | + | **5. Feladat: |
| - | <code c> | + | <sxh c> |
| #include < | #include < | ||
| #define N 3 + 5 | #define N 3 + 5 | ||
| Line 105: | Line 127: | ||
| printf(" | printf(" | ||
| } | } | ||
| - | </code> | + | </sxh> |
| - | Az eredménynek 2 * 8 nak kellene lennie, de 11-et ír ki, mi lehet a hiba? Az a probléma, hogy a #define nem végez műveletet, hanem egyszerűen | + | Az eredménynek 2 * 8 nak kellene lennie, de 11-et ír ki, mi lehet a hiba? Az a probléma, hogy a #define nem végez műveletet, hanem egyszerűen |
| ==== Formátum leírók ==== | ==== Formátum leírók ==== | ||
tanszek/oktatas/szamitastechnika/egyszeru_mintapeldak.1662412166.txt.gz · Last modified: 2022/09/05 21:09 by knehez
