tanszek:oktatas:szamitastechnika:egyszeru_mintapeldak
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tanszek:oktatas:szamitastechnika:egyszeru_mintapeldak [2022/09/05 21:24] – superuser | 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**: | ||
<sxh c> | <sxh c> | ||
Line 21: | Line 25: | ||
**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? |
<sxh c> | <sxh c> | ||
Line 41: | Line 55: | ||
} | } | ||
</ | </ | ||
+ | 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 meg áttérni float adattípusra, |
+ | |||
+ | **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> | <sxh c> | ||
Line 57: | Line 74: | ||
</ | </ | ||
- | **Feladat**: | + | Azért nem segít, mert az a / b elvégzésekor, |
+ | |||
+ | **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> | <sxh c> | ||
Line 68: | Line 87: | ||
if ( b > a) | if ( b > a) | ||
{ | { | ||
- | | + | |
+ | } | ||
+ | else | ||
+ | { | ||
+ | | ||
} | } | ||
- | printf(" | ||
} | } | ||
</ | </ | ||
- | **Miért számol hibásan (pontatlanul) a következő kód?** | + | **4. Feladat: |
<sxh c> | <sxh c> | ||
#include < | #include < | ||
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: |
<sxh c> | <sxh c> | ||
#include < | #include < | ||
Line 107: | Line 129: | ||
</ | </ | ||
- | 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.1662413056.txt.gz · Last modified: 2022/09/05 21:24 by superuser