KURZUS: Bevezetés a számítógépek használatába

MODUL: Informatikai alapismeretek

1. lecke: Alapok

Cél: Az informatikai tárgy keretein belül elsőként számrendszerekkel és adatábrázolással (kódolással) foglalkozunk. Ez szükséges már az alapszintű Excel feladatok értelmezésénél és megoldásánál, valamint a Visual Basic, ill. MATLAB tanulmányok megkezdésénél. (Számítási módszerek tárgy, Informatika II.)

A lecke kisebb terjedelmű olvasmányos részeket is tartalmaz.

Követelmények: Ön akkor sajátította el megfelelően a tananyagot, ha

  • át tud váltani pozitív egész számokat tízesből kettesbe és fordítva;
  • emlékezetből fel tudja írni a tanult logikai műveletek igazságtáblázatát;
  • saját szavaival el tudja mondani a szövegek kódolásának főbb jellemzőit;
  • képes az "A", "a" és "0" jelek ASCII kódjának megadása után az angol nagy- és kisbetűk, ill. a számjegyek kódjainak meghatározására;
  • elő tudja állítani negatív egész számok kettes komplemens kódját, illetve megadott előjeles kód alapján vissza tudja állítani a kódolt eredeti egész számot.

Időszükséglet: A tananyag elsajátításához (a feladatok megoldásával együtt) hozzávetőlegesen 3 órára lesz szüksége.

Kulcsfogalmak

  • Kettes, tízes és tizenhatos számrendszer, átváltások.
  • Boole-algebra, logikai műveletek, igazságtáblázat.
  • ASCII kódtáblázat, karakterek kódja.
  • Kettes komplemens kódolás.
  • Gépi epszilon.
Számrendszerek
Út a helyi értékes számrendszerekig, a tízes és a kettes számrendszer

A számolás kialakulása és (korai) fejlődésének története az emberi kultúra rendkívül fontos és érdekes fejezete. Jegyzetünkben nincs mód arra, hogy ezt az izgalmas periódust kifejtve tárgyaljuk, ezért csak felsorolásszerűen közöljük azokat a főbb mérföldköveket, amelyek elvezettek odáig, hogy a ma használt - alapszintű - számolási módszerek, jelölések és rendszerek az élet természetes részévé váltak:

  • A számolás kezdetei (ujjakon, apró tárgyakkal; Kr. e. 500 000 - Kr. e. 20 000), a számfogalom kezdetleges megjelenése (kezdetben csak: egy, kettő, sok).
  • Fejlettebb számfogalom, de még csak "kapcsolatokban" (kezdetben a számokat nem önállóan, hanem valaminek a mennyiségét, nagyságát kifejezve használták; tört mennyiségek is).
  • Önállóan is megjelennek a számok.
  • Számrendszerek, kitűntetett alappal (hatvanas, tízes, tizenkettes stb., ókor), mai naptárunk és időmérésünk is az akkori konvenciókon alapul.
  • A tízes számrendszer válik hivatalossá a világ kulturált részének "zömén" (ókor).
  • Római számírás és számolás (tízes alapon, egyértelmű, de még nem valódi helyiértékes rendszer, Európában a 13. századig általánosan elterjedt forma; hátrányok: nehézkes aritmetika, nincs nulla jel).
  • Az ókorban kialakult hindu tízes alapú rendszer (a nullát is használták) arab közvetítőkön keresztül eljut Európába és lassan elterjed.
  • Más alapú számrendszerek leírása tudományos igényességgel (elsőként a kettes, az újkortól).

A következőkben áttekintjük a helyiértékes számrendszerek fontos jellemzőit.

Tekintsük először a decimális rendszert, azaz legyen a rendszer alapja a tíz. A számírás azon a tényen alapul, hogy minden nemnegatív valós szám felírható olyan tíz-hatványok összegeként, amelyben minden különböző tíz-hatvány maximum kilencszer szerepelhet. Ennek az összegnek a rövidített felírásából keletkezik a szám helyiértékes alakja (a képviselt érték tehát a sorban elfoglalt hellyel is meghatározott, ellentétben a római rendszerrel).

Nem kell mást tenni, csak az összegben szereplő tíz-hatványok együtthatóját jelentő számjegyeket a kitevők nagyság szerinti sorrendjében leírni, figyelembe véve, hogy amelyik kitevő nem szerepel az összegben, annak az együtthatója nyilván nulla. A nulladik kitevő együtthatója után vesszőt teszünk, ezzel jelezve, hogy befejeződött az egészrész, és a törtrész következik.

Példa: Az 1948,4 valójában az 11000+9100+410+81+4 1 10 =1 10 3 +9 10 2 +4 10 1 +8 10 0 +4 10 1 összeg rövidítése. Ebben valóban maximum kilencszer szerepel minden előforduló tíz-hatvány.

Általánosan, ha a számot a-val jelöljük, az előzőek képletben: a= a n1 10 n1 + a n2 10 n2 +...+ a 0 10 0 + a 1 10 1 +...+ a m 10 m = i=0 n1 a i 10 i + i=1 m a i 10 i , ahol n az egész rész számjegyeinek számát, m a törtrész számjegyeinek számát jelenti. Minden lehetséges i indexre a i { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } , azaz a i valamelyik számjegy. Az összeg segítségével az a számot egyszerűen úgy lehet felírni, hogy az a i együtthatókat az indexek szerint csökkenő sorrendben egymás után írjuk, az a 0 után tizedesvesszőt teszünk. Azaz a= a n1 a n2 ... a 0 , a 1 ... a m .

Ha a szám negatív, akkor igaz, hogy a=| a | , de az | a | már nemnegatív, így a hatványok összegére való bontás az előzőek szerint elvégezhető, és a= a n1 a n2 ... a 0 , a 1 ... a m . Ezzel a módszerrel tehát bármilyen valós szám tíz számjeggyel (plusz az esetleges előjellel és a tizedesvesszővel) felírható. Az alapműveletek a rendszer segítségével könnyen automatizálhatók, ezért elvégzésük könnyen tanulható (ez volt a tízes alapú számrendszer egyik igen nagy előnye a római számolással szemben, és ennek lett köszönhető elterjedése is).

Jegyezzük meg: a tízes számrendszerben a számok jeleinek helyiértékes felépítéséhez pontosan tíz számjegy kell.

Természetesen a helyiértékes felírási mód nemcsak a tízes, hanem tetszőleges számrendszer esetén is használható, csak a számjegyeket kell megfelelően megválasztani, továbbá meg kell mutatni, hogy az adott számrendszerben is felírható minden szám a számrendszer alapjának hatványait megfelelően összegezve; mégpedig úgy, hogy az összegben minden hatvány legfeljebb az alap értékénél eggyel kevesebbszer szerepelhet (azaz: a számjegyek száma minden számrendszerben pontosan az alapszám értékével egyezik meg).

A számjegyek kiválasztása tíznél kisebb alap esetén nem okoz fejtörést, egyszerűen elhagyjuk a tízes rendszer számjegyei közül a feleslegeseket (az éppen vizsgált alapnál nagyobb vagy egyenlő értékű jegyeket). Ha azonban az alap tíznél nagyobb, akkor új számjegyekre van szükség. A mai gyakorlat szerint nem új jeleket szokás új számjegyként kreálni, hanem az latin ábécé elejéről választunk annyi nagybetűt, amennyit az alap értéke megszab.

A kettes számrendszerben is - a tízes rendszerhez hasonlóan - igaz, hogy minden nemnegatív valós szám felírható az alap, azaz a kettő hatványainak olyan összegeként, amelyben minden kettőhatvány maximum egyszer szerepel. Képlettel: tetszőleges nemnegatív a valós számra igaz, hogy a= a n1 2 n1 + a n2 2 n2 +...+ a 0 2 0 + a 1 2 1 +...+ a m 2 m = i=0 n1 a i 2 i + i=1 m a i 2 i , ahol minden lehetséges i-re a i { 0, 1 } . Az a szám kettes számrendszerbeli alakja pedig: a= a n1 a n2 ... a 0 , a 1 ... a m . Negatív szám esetén ugyanúgy járunk el, mint ahogyan a tízes számrendszernél láttuk.

A kettes számrendszer számjegyeit (a 0-t és az 1-et) angol nevük (binary digit) rövidítéséből bitnek is szokás nevezni.

Írja fel kettes számrendszerben a következő számokat: 1, 2, 3, 4, 5.
Végezze el kettes számrendszerben a következő összeadási műveleteket: 1+1, 1+2, 1+3, 3+3.

Vizsgáljuk meg most a tizenhatos számrendszerbeli felírásokat! Alkalmazva a tízes és a kettes rendszernél már tárgyalt ismereteket, azt kapjuk, hogy minden nemnegatív valós a számra a= a n1 16 n1 + a n2 16 n2 +...+ a 0 16 0 + a 1 16 1 +...+ a m 16 m = i=0 n1 a i 16 i + i=1 m a i 16 i , ahol minden lehetséges i-re a i { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F } . Az A, B, C, D, E és F jelek tizenhatos rendszerben rendre a 10, 11, 12, 13, 14 és 15 tízes számrendszerbeli számnak megfelelő számot jelentik. Az a szám tizenhatos számrendszerbeli alakja pedig: a= a n1 a n2 ... a 0 , a 1 ... a m . Ha a szám negatív, akkor ugyanúgy járhatunk el, mint a tízes és kettes alapú rendszer esetében láttuk.

Példa egy egyszerű összeadásra a tizenhatos számrendszerben: 11 (16) + AF (16) =C 0 (16)

Írja fel tizenhatos számrendszerben a következő számokat: 14, 15, 16, 17, 18.
Végezze el tizenhatos számrendszerben a következő összeadási műveleteket: 12+5, 12+12.

Fontos leszögeznünk, hogy a számok helyiértékes leírása után a kapott jelsorozatból nem lehet egyértelműen eldönteni, hogy az milyen számrendszerben lett megadva (gyakran persze a környezet alapján ez mégis egyértelművé válik). Ezért - sok esetben - a számjegyek mellett fel kell tüntetni valamilyen módon azt is, hogy melyik számrendszert használtuk.

Mi a következőkben - ha szükséges - a szám jegyei után alsóindexben és zárójelben a számrendszer alapját (tízes számrendszerben) megadva jelezzük a használt rendszert. Például: 176 (16) , A1 F (16) tizenhatos, 1011 (2) , 10 (2) kettes, 10 (10) , 176 (10) tízes számrendszerben megadott számok. Vigyázzunk arra, hogy 10 (2) nem egyenlő 10 (10) -zel és 176 (16) nem egyenlő 176 (10) -tal.

A hétköznapi életben a tízes számrendszer a megszokott. Az alap nélkül leírt számokat mi is mindig tízes számrendszerben megadott számnak tekintjük, és a tízes alapot csak akkor írjuk ki, ha külön hangsúlyozni szeretnénk azt, hogy a szám ebben a rendszerben van megadva.

A fentiek alapján gondolja át, hogy hogyan lehet leírni egy számot nyolcas (oktális) számrendszerben.

Számok átírása egyik számrendszerről másik számrendszerre

Ezek után felmerülhet az a kérdés, hogy hogyan kell - ha szükségessé válik - egyik számrendszerben leírt számot egy másik számrendszerbe átírni.

Mivel tetszőleges számrendszerből tízes számrendszerre való átírás az egyszerűbb, először ezzel foglalkozunk. Az átalakításhoz egyszerűen fel kell írni azt az összeget, amelynek rövidítéséből a szám jelsorozatát kaptuk. Azokat a számjegyeket, amelyek a tízes rendszerben nincsenek benne, helyettesíteni kell az értékük tízes rendszerbeli alakjával. Az így kialakult összegben már minden tízes számrendszerben van felírva, és ha elvégezzük a műveleteket az eredmény is tízes számrendszerbeli lesz (és ez éppen a szám tízes számrendszerben megadott alakja).

Példa:

A1 F (16) A 16 2 +1 16 1 +F 16 0 10 16 2 +1 16 1 +15 16 0 =10256+116+151= 2591 (10)

1011 (2) 1 2 3 +0 2 2 +1 2 1 +1 2 0 =8+2+1= 11 (10)

AA ,8 (16) A 16 1 +A 16 0 +8 16 1 10 16 1 +10 16 0 +8 16 1 =1016+10+81/16

Adja meg a 8A3E 1 (16) , 726 (8) , 1010101,01 (2) , számok tízes számrendszerbeli alakját!

A feladat megoldása számológéppel, illetőleg számítógéppel (alkalmas programmal) automatizálható, felgyorsítható.

Megemlítjük azt is, hogy a mostanra már széles körben elérhető és elterjedt tudományos számológépek is meg tudnak oldani ilyen típusú feladatokat, de ezekkel a számolást segítő ügyes kis gépekkel jegyzetünkben nem foglalkozunk.

Átváltás kettes számrendszerbe

Az algoritmus népszerű változata az úgynevezett akasztófa módszer. Ennél az eljárásnál az átváltandó számot kell folyamatosan a számrendszer alapjával (jelen esetben kettővel) osztani mindaddig, amíg el nem érjük a nullát. Az osztás hányadosát lefelé egészre kerekítve írjuk az akasztófa bal oldalára, a maradékát pedig a jobbra. Papír-ceruza módszerként alkalmazva:

Az akasztófa módszer alkalmazása tízes számrendszerből kettesbe váltáshoz
1. ábra

A keletkezett nullákat és egyeseket alulról felfelé kell leírni a bináris számban.

Így végül: 2014 (10) = 011111011110 (2)

Hasonlóan a tízesbe történő átváltáshoz, ez a feladat is automatizálható, felgyorsítható számológéppel, illetőleg számítógéppel (alkalmas programmal). Bemutatunk egy Excel-példát, amely megvalósítja az egyszerű átváltást tízes számrendszerből.

Töltse le a gyak1.xls fájl, és nyissa meg az Excellel! Tanulmányozza a táblázatot. Az átváltandó szám az S6 (sárga hátterű) cellába írandó!

Átváltás tízesből kettes számrendszerbe Excellel
2. ábra

Számítsa ki a 2015 kettes és tizenhatos számrendszerbeli alakját!

Valamely valós szám tetszőleges A alapról tetszőleges B alapra való átalakítása, ha sem A sem B nem tíz, két menetben történhet. Először alakítsuk át a számot tízes alapú formára, majd ezt alakítsuk tovább B-alapú alakra.

Természetesen a számokkal minden számrendszerben lehet műveleteket végezni. A négy alapművelet elvégzése nem is olyan nehéz, ha felismerjük, hogy ugyanolyan szabályok érvényesek, mint amiket a tízes számrendszerben megismertünk. A problémát legfeljebb ezeknek a szabályoknak az adaptálása okozza. Nehezebb lehet ugyanis a bonyolultabb műveletek hozzáigazítása tetszőleges, de nem tízes alapú számrendszerhez.

Kódolás
A kódolás feladata, logikai és szöveges adatok kódolása

Kódolásnak hívjuk - tágabb értelemben - azt a módszert, amely segítségével mások számára is elérhetővé, érthetővé tesszük gondolatainkat. Ilyen kódolás a beszéd, az írás bármilyen formája, így a számok leírása is.

Szűkebb értelemben kódolásról akkor beszélünk, ha szokásos eszközökkel (számjegyekkel, írással, képpel, videóval, hanggal) megadott objektumokat valamilyen egységes rendszerben újra megadunk, leírunk. A továbbiakban a szűkebb értelmű kódolást értjük kódolás alatt.

A következőkben a jelen eszközeinek használatához nélkülözhetetlen kódolásokkal fogunk foglalkozni. Ezeknek a kódolásoknak alapja a kettes számrendszer, mivel eszközeink elektronikus eszközök, és a kettes számrendszer két különböző bitje elektronikus eszközökkel könnyen megjeleníthető vagy könnyen továbbkódolható úgy például, hogy az 1-nek egy magas, míg a 0-nak egy alacsony feszültségszintet feleltetünk meg.

A különböző kódrendszereket vizsgálva megkülönböztethetünk fix hosszúságú és változó hosszúságú kódokból álló kódrendszert. A kódok hosszát a kódban lévő jelek számával szokás definiálni. A számítástechnikában mindkét rendszert használják.

A Boole-algebra objektumainak kódolása a lehető legegyszerűbb kódolás, hiszen csak két elemnek kell kódot választani ( I, H). Legfeljebb az okozhat fejtörést, hány jelből álljon a kód, ha ragaszkodunk ahhoz, hogy a kódokat bitekből építjük fel. Egyetlen jelből álló kód esetén például az I objektumot 1-gyel, a H objektumot 0-val kódolhatjuk, 8 bites kód esetén az I kódja a 11111111 jelsorozat, a H-é a 00000000 jelsorozat lehet.

A betűk és egyéb jelek kódolására fix hosszúságú rendszert használunk, a kód hossza általában 8 vagy 16 bináris jel, ritkábban előfordul a 24 és 32 kódhossz is.

Mivel 0 és 1 jelekből 8 hosszúságú kódot 256-féleképpen lehet előállítani, ezért ezzel a kódrendszerrel összesen 256 különböző jel kódolható. Ezeket a jeleket, illetve kódjaikat szabványok határozzák meg. A legelterjedtebb szabványok egyike az ASCII (American Standard Code for Information Interchange = amerikai szabványkód információcseréhez). Az első 128 kód sztenderd, azaz állandósult jeleket tartalmaz, a második 128 kód az ún. kiterjesztett jelek kódjai. A kiterjesztés többféleképpen is történhet, a bemutatott példa a Latin1 kiterjesztésű változat. A kódrendszert az 1. és 2. táblázat tartalmazza, amelyben a bináris kód mellett megtaláljuk a kód decimális és hexadecimális értékét is (a felesleges nullák nélkül). (A bináris kódban fontosak a kódok kezdő nullái is, mivel ezek nélkül a kód nem lenne egyértelműen visszafejthető!)

Látható, hogy ebben a rendszerben összefüggő tömböt alkotnak az angol ábécé nagybetűi és a kisbetűi, valamint a számjegyek. Megtalálhatók a jelek között az írásjelek, a gyakran használt matematikai jelek, sok ékezetes betű jele és néhány speciális jel is.

Az ASCII rendszerben nem kódolhatók a távol-keleti nyelvek betűi, sőt némely európai ábécé különleges betűje sem. Ennek a problémának a kiküszöbölésére alkották meg az Unicode, az UTF-8 rendszereket, Ezekben a kódok 16, 24, 32, 40, 48 hosszúságú 0 és 1 jelből álló sorozatok. Ezekben a rendszerekben 16 bittel 2562, 24 bittel 2563 különböző jelet lehet kódolni.

Ha jeleket tudunk kódolni, akkor már szöveget is. Ekkor a szöveg betűit, számjegyeit, írásjeleit, betűközeit a jelek kódtáblázatát felhasználva kódoljuk, és a kódokat egymás mögé írva megkaphatjuk a kódolandó szöveg kódját. Vegyük észre, hogy a kapott kód hossza függ a jelek kódhosszától és a szöveg jeleinek számától is. Mivel a jelek száma más és más szövegben általában nem egyforma, ezért a szöveg ilyen kódolása változó hosszúságú kódot eredményez.

Az ASCII kódrendszer első 128 jele és kódjai
1. táblázat
Az ASCII kódrendszer második (Latin1 kibővítés) 128 jele és kódjai
2. táblázat
Számok kódolása

Természetesen az előző részben leírt kódolási módszer számok kódolására is jó, de az így kódolt számokkal a műveletvégzés nehézkes lesz, tehát alkalmasabb rendszert célszerű választani. Sokféle számkódolás lehetséges. A következőkben négyféle módszerrel fogunk foglalkozni.

Nemnegatív egész számok kódolása

Ezeket a számokat számítástechnikában előjeltelen (angolul unsigned) számoknak is szokás nevezni. Kódolásukra 8, 16, 32, 64 bites kódok a legelterjedtebbek. Nyolc bittel 0 és 2 8 1=255 , 16 bittel 0 és 2 16 1=65535 , 32 bittel 0 és 2 32 1=4294967295 , 64 bittel 0 és 2 64 1 közé eső számokat szokás kódolni. A kód megállapítása nagyon egyszerű. Írjuk fel a kódolandó számot kettes számrendszerben, írjunk eléje annyi nullát, amennyi ahhoz kell, hogy a kód hossza megfelelő legyen. Amit kaptunk az a szám kódja! Fontos megjegyezni, hogy a fenti módszerekkel a megadott intervallumokon kívüli egész számok nem kódolhatók!

Egész számok kódolása kettes komplemens kóddal

Ezeket a számokat számítástechnikában előjeles (angolul signed) számoknak szokás nevezni. Szintén 8, 16, 32, 64 bites kódokat használunk a kódoláshoz. Nyolc bittel a 2 7 =128 és 2 7 1=127 , 16 bittel a 2 15 =32768 és 2 15 1=32767 , 32 bittel a 2 31 =2147483648 és 2 31 1=2147483647 , 64 bittel 2 63 és 2 63 1 közé eső számokat kódoljuk. A megadott intervallumokon kívül eső számok ezzel a módszerrel nem kódolhatók!

A kódolás a következő (csak a nyolcbites változattal foglalkozunk, a másik három változatban ennek mintájára történik a kódok megállapítása). Ha a szám nemnegatív, akkor - ugyanúgy, mint az előző kódolási módszernél - vesszük a kettes számrendszerbeli alakot, eléje írunk annyi nullát, hogy nyolc jelből álljon, és már készen is van a kód. Ha a szám negatív, akkor hozzáadunk 2 8 =256 -ot. Az eredmény 127-nél nagyobb, 256-nál kisebb pozitív szám lesz. Ennek vesszük a kettes számrendszerbeli alakját, és az lesz a negatív számunk kódja. Vegyük észre, a nemnegatív szám kódja mindig nullával, a negatívé mindig eggyel kezdődik, ezért a kód vezető bitje megadja azt is, hogy kód negatív vagy nemnegatív számot jelent-e. Ez a bitet emiatt előjelet jelző bitnek hívjuk, hiszen nem direkt módon az előjel kódolására használjuk (ezért az elterjedt "előjelbit" megnevezés nem pontos).

A negatív szám kódját kettes komplemens kódnak is nevezik.

A kettes komplemens kód megállapítására egy kevesebb számolást igénylő módszert is lehet használni. A módszer azon alapul, hogy a 2 n 1 szám kettes számrendszerben pontosan n darab egyesből áll, nulla nélkül. Ebből a számból könnyű kivonni bármilyen n-nél kevesebb bitből álló pozitív bináris számot, hiszen nem kell mást tenni, csak 0-t írni arra a helyiértékre, ahol a kivonandóban 1 van, és 1-et arra, ahol 0 van. Az eredmény nem más, mint az a szám, amit úgy kapunk, hogy a kivonandóban minden bitet az ellentettjére - 0-t 1-re, 1-et 0-ra - cserélünk, más szóval negáljuk, és annyi 1-gyel kiegészítjük a szám elején, hogy n jegyű legyen. Ez a szám eggyel kisebb, mint a kivonandó -1-szeresének kettes komplemens kódja, ezért a kettes komplemens eléréséhez 1-et hozzá kell adni. Amit kaptunk, az nem más, mint a kivonandó (pozitív) szám 1 -szeresének (ez már negatív) kódja.

Példa: Számítsuk ki a 1848 kettes komplemens kódját (16 biten)! Az ún. 2-es komplemenst használjuk a következő módon:

1.Írjuk fel a negatív szám abszolút-értékének bináris alakját!
2.Fordítsunk meg ellenkezőjére minden bitet (negálás)!
3.Egészítsük ki vezető egyesekkel 16 bitre.
4.Adjunk hozzá 1-et!

A megoldás táblázatba foglalva:

Érdemes megjegyezni, hogy a fenti módszert mechanikusan alkalmazva a kettes komplemens kódra, a kódhoz tartozó negatív szám abszolút értékének kettes számrendszerbeli alakját, azaz a kódját kapjuk. 1848 esetén:

Számítsa ki a -1848 32 bites komplemens kódját!

Most is bemutatunk egy Excel példát, amely automatizáltan végrehajtja a kettes komplemens kód előállítását. A szám pozitív alakjából kapjuk meg a negatív számot reprezentáló kódot. A Nem függvénnyel megfordítjuk a bináris jegyeket, a "plusz 1" művelethez viszont most egyszerűen kézi átírást használunk.

A korábbiakhoz hasonlóan, erre a feladatra is biztosít az Excel beépített függvényt, de ennek az alkalmazhatósága is korlátozott (lásd később).

Kettes komplemens kód előállítása Excellel
3. ábra

Ebben a kódrendszerben két szám összegének kódját rögtön megkaphatjuk, ha a kódokat összeadjuk, tehát nem kell az összeadás elvégzéséhez oda-vissza kódolgatni, a számok összeadása helyett elég a kódokat összeadni. Ezen kívül megspórolhatjuk a kivonást is, ugyanis ab=a+( b ) tetszőleges a és b esetén, az a és a b kódjának összege ebben a kódrendszerben éppen az ab szám kódja lesz. A b kódja pedig az előbb megismert mechanikus módszerrel könnyedén előállítható.

Jegyezzük meg, hogy ha két szám összege vagy különbsége nagyobb, mint a kódolható számok intervallumának végpontja vagy kisebb, mint a kezdőpontja, akkor a kódok összege nem állít elő kódot, hiszen a kérdéses összeg vagy különbség ezzel a módszerrel nem kódolható!

Példa: 15921848=1592+( 1848 )=256 . Kódokkal:

Ellenőrizze, hogy az eredmény valóban a 256 kódja-e!

Összetett objektumok (pl. képek) kódolása

Nem célunk, hogy az összetett objektumok néha mélyebb ismereteket is igénylő kódolását és kódrendszereiket ismertessük, de annak érzékeltetéséhez, hogy milyen elveket alkalmaznak egy ilyen eljárás során, bemutatunk egy vázlatos példát.

Legyen egy ilyen objektum egy kép. Az első lépés a kódolásban az, hogy a képet diszkrét egységek rendszerére bontjuk. Ezek az egységek az ún. képpontok (a képpont angolul pixel). Minden képpont egy-egy téglalap alakú képrész lesz. A felbontás annál jobb - és ennek következményeképpen a pontokból összerakott kép annál jobban hasonlít az eredeti képhez -, minél több pontból áll. Ezért szokás a felbontást egy adott hosszúságegységre (inch) eső pontok számával jellemezni. A mértékegység a pont per inch (angolul: Dot Per Inch), röviden DPI. Minél nagyobb a DPI érték, annál nagyobb és jobb a felbontás. Mivel a képek kétdimenziósak, és a vízszintes-függőleges irányú pontra bontás nem szükségképpen egyezik meg, ezért előfordulhat, hogy a vízszintes és a függőleges felbontást szorzat alakban adják meg, ahol az első tényező a vízszintes, a második a függőleges irányú egy inch-re eső pontszámot jelenti.

Az eljárás során tehát egy, a képhez tartozó pontrendszer áll elő. Ennek a rendszernek a pontjait a méretük és a színük jellemzi. A méret a DPI értékből minden pontra egységesen megállapítható, a szín minden pontban más és más lehet.

A kép bitekből álló kódját tehát úgy lehet megadni, hogy megadjuk a bitkódját annak, hogy hány pontból áll a kép vízszintesen, hány pontból függőlegesen, megadjuk a bitkódját a vízszintes és függőleges pontméretnek, majd egyenként kódoljuk a pontok színét is. A bitkódokat egymás után írva egy 0-1 sorozatot kapunk, és ez lesz a kép kódja. Érdemes megemlíteni, hogy ezzel a kódolási mechanizmussal visszakódoláskor az eredeti képnek egy egyszerűbb változatát kapjuk. Ennek megértéséhez elég azt látni, hogy más és más felbontásra más és más kód alakul ki ugyanarról a képről, és a visszaalakítás után a képek csak "hasonlítani" fognak egymásra is és az eredeti képre is.

Azt a folyamatot, amely egy valós, folytonos objektumhoz diszkrét, legtöbbször bináris kódot állít elő, digitalizálásnak nevezzük.

Természetesen ez a leírás egy elnagyolt leírása az egyik lehetséges kódolásnak (legjobban az úgynevezett pixelgrafikus, ill. rasztergrafikus kódoláshoz hasonlít), de ahhoz, hogy a bonyolultabb objektumok bináris kódolását megértsük - elegendő.

A pixelgrafikus tárolással kapcsolatban célszerű vázlatosan megismerni az RGB modellt. Ebben a modellben minden színt három alapszín összetételével állítunk elő. Ezek a színek: vörös (Reed), zöld (Green) kék (Blue). 16 bites színkód esetén a vörös összetevő kódolására 5, a zöldére ugyancsak 5, a kékre 6 bitet szokás használni. Ez 65536-féle szín kódolását teszi lehetővé, ami az emberi szem teljesítőképességét figyelembe véve egy hétköznapi kép kódolására bőségesen elegendő. Sok ember a képpontok színének 8 bittel (256 féle szín) való kódolásakor kapott kódból visszaállított képről sem tudja megmondani, hogy mi a különbség az eredeti és a visszaállított kép között.

A képpontokhoz tartozó direkt kódok mellett a kép kódjában általában még bizonyos kiegészítő vagy járulékos információt is kódolnak (pl. hibajavításra). Ez a kód végső hosszát, méretét csak minimális mértékben megnöveli.

A pixelgrafikus kódolást elsősorban fényképszerű képek kódolására használják. A vonalakból összerakott képek kódolására nem célszerű módszer. Az ilyen típusú ábrákat matematikai módszerek - vektorok - segítségével lényegesen rövidebb kóddal lehet leírni (vektorgrafikus kódolás).

Logikai kifejezések, Boole-algebra

A 19. század közepétől a számokkal való műveletvégzés mellett megjelentek más objektumokon végezhető műveletek is, és kialakult az absztrakt algebra. Számítástechnikai szempontból ennek a tudományágnak legfontosabb területe a Boole-algebra, amit George Boole munkássága alapozott meg.

A Boole-algebra egy olyan struktúra, amely egy kételemű (logikai) halmazból és a rajta elvégezhető műveletekből épül fel. A halmaz egyik elemét I(gaz), másik elemét H(amis) értéknek tekintjük, ezeken az értékeken maximum 4 egyoperandusú és 16 kétoperandusú művelet definiálható. Mi ezek közül egy egyoperandusú műveletet és három kétoperandusú művelet fogunk megismerni.

A tárgyalandó egyoperandusú műveletet negációnak nevezzük. A műveleti jele ¬ jel legyen. A művelet elvégzése pedig a következő: ha az operandus értéke I, akkor az eredmény legyen H, ha az operandus értéke H, akkor az eredmény I. Formálisan: ¬I=H , ¬H=I . A művelet leírását ún. igazságtábla segítségével is megadhatjuk.

operandus: Aeredmény: ¬A
IH
HI

A kétoperandusú műveletek egyikét "és", a másikat "vagy", a harmadikat "kizáró vagy" műveletnek nevezzük, a műveleti jelük: , , valamint . A három művelet igazságtáblája:

1. operandus: A2. operandus: Beredmény: AB eredmény: AB eredmény: AB
IIIIH
IHHII
HIHII
HHHHH

A logikai műveletek számunkra a későbbiekben felhasználható fontosabb tulajdonságai:

Az "és" valamint a "vagy" művelet:

  • asszociatív, azaz ( AB )C=A( BC )=ABC és ( AB )C=A( BC )=ABC ;
  • kommutatív, azaz AB=BA és AB=BA .

A "kizáró vagy" kommutatív azaz ( AB )=( BA ) , de nem asszociatív, azaz ( ( AB )C ) nem egyenlő ( A( BC ) ) -vel.

Az "és" művelet disztributív a "vagy" műveletre, illetve a "vagy" az "és"-re, azaz: ( AB )C=( AC )( BC ) , illetve ( AB )C=( AC )( BC ) .

Természetesen ezek csak a legegyszerűbb műveleti tulajdonságok, többre azonban nem lesz most szükségünk. Egy konkrét feladat megoldását tartalmazza a következő fájl: boole-példa.docx.

Oldja meg önállóan is az alábbi kidolgozott feladatokat!

Feladat: A=IGAZ , B=HAMIS , C=?

C=¬( AB( BB ) )
C=¬( IGAZHAMIS( HAMISHAMIS ) )
C=¬( IGAZHAMISHAMIS )
C=¬( HAMISHAMIS )
C=¬HAMIS
C=IGAZ

Feladat: A=IGAZ , B=HAMIS , C=?

C=¬( ¬A¬B )¬( ¬A¬B )
C=¬( ¬IGAZ¬HAMIS )¬( ¬IGAZ¬HAMIS )
C=¬( HAMISIGAZ )¬( HAMISIGAZ )
C=¬( IGAZ )¬( HAMIS )
C=HAMISIGAZ
C=IGAZ

Feladat: A=IGAZ , B=HAMIS , C=IGAZ , D=?

D=¬CAB( A¬A )( CB )
D=¬IGAZIGAZHAMIS( IGAZ¬IGAZ )( IGAZHAMIS )
D=HAMISIGAZHAMISHAMISIGAZ
D=HAMIS

Önellenőrző kérdések
1. Számítsa át tízes számrendszerre a következő előjeles számokat!

AF 5 (16) =
123 (4) =
001010 (2) =
1100101 (2) =

2. Alakítsa át a következő tízes számrendszerbeli számokat előjel nélküli 16 bites bináris alakba!

413 (10) =
  284 (10) =

3. Alakítsa át a következő tízes számrendszerbeli számokat előjeles 16 bites bináris alakba!

413 ( 10 ) =
  284 (10) =

4. Válassza ki a következő bináris számok közül a párosokat!
111010111
011100010
011011010
011110111
100010010
5. Döntse el az alábbi állításokról, hogy igaz vagy hamis!
A Boole-algebra elemeit egy bittel is lehet kódolni.
Minden negatív szám kódolható egész számként.
A nemnegatív szám kódja mindig nullával, a negatívé mindig eggyel kezdődik.
6. Adja meg a C változó értékét!

A = IGAZ, B = HAMIS
C=¬( AB( BB ) )
C =

7. Adja meg a C változó értékét!

A = IGAZ, B = HAMIS
C=¬( ¬A¬B )=¬( ¬A¬B )
C =

8. Adja meg a D változó értékét!

A = IGAZ, B = HAMIS, C = IGAZ
D=¬CAB( A¬A )( CB )
D =