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