„Számrendszer” változatai közötti eltérés

A Wikipédiából, a szabad enciklopédiából
[ellenőrzött változat][nem ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
aNincs szerkesztési összefoglaló
Pkmic (vitalap | szerkesztései)
122. sor: 122. sor:
111 / 101 = 1 maradék 10 (2)
111 / 101 = 1 maradék 10 (2)
1 / 101 = 0 maradék 1 (1) => 1213</pre>
1 / 101 = 0 maradék 1 (1) => 1213</pre>

A


Egy lehetséges megvalósítása az átváltásnak c nyelven, a kód kevesebb, mint 1023 jegyű számot tud átváltani 2-től 36-os alapig:
Egy lehetséges megvalósítása az átváltásnak c nyelven, a kód kevesebb, mint 1023 jegyű számot tud átváltani 2-től 36-os alapig:

A lap 2009. november 24., 15:51-kori változata

A számábrázolási rendszer vagy számrendszer meghatározza, hogyan ábrázolható egy adott szám különböző alapszámot használó számrendszerekben.

Egy számjegy egy olyan szimbólum, vagy azok csoportja, ami egy számot ír le. A számjegyek éppen úgy különböznek az általuk leírt számtól, mint egy szó attól a dologtól, amit valójában jelent. A "11" jelek a "tizenegy" és a "XI" különbözőek, de ugyanazt a számot írják le, jelentik. A szócikk megkíséreli bemutatni a különböző számrendszereket. Lásd még számok nevei.

Egy számrendszer (vagy számábrázolási rendszer) egységes szabályok alapján meghatározza, hogy számjegyek sorozata milyen számokat jelenít meg. A használt ábrázolási rendszer meghatározza, hogy a "11" számot a a bináris háromnak, vagy a decimális tizenegynek, vagy a hexadecimális tizenhétnek, vagy a használt számrendszer alapszámának függvényében más számnak kell érteni.

Elméletileg egy számrendszernek meg kell határoznia:

  • A használt számok egy csoportjának (pl.. minden egész szám, egészek, vagy valós számok) ábrázolási szabályait;
  • Egy egyedi ábrázolást (vagy ábrázolási szabályt) minden számhoz ;
  • Az aritmetikai (esetleg algebrai) szabályokat.

Például, a leggyakrabban használt decimális számábrázolás minden számhoz egy egyedi, a jegyek egy véges sorozatát rendeli, megadja a megfelelő aritmetikai műveletek szabályait (összeadás, kivonás, szorzás és osztás) illetve meghatároz egy algoritmust a számláláshoz.

A racionális esetében gyakorlati okokból nem ábrázolják a szám összes tizedes jegyét, hanem az igényelt pontosság függvényében kevesebbet. Kivételek az un. periodikus tizedes törtek, amit az utolsó szám után tett pontokkal jelölünk (például 2,30999999… ). A számok ábrázolásánál a záró számjegy általában nem nulla, bár bizonyos esetekben használnak záró nullákat (igazítás). Például, a 2,31 és a 2,310 számok a gyakorlatban azonosnak tekinthetők, kivéve a természettudományokban, ahol a két ábrázolási mód két eltérő pontosságú tárolást és aritmetikát is jelenthet (ui. a 2,31 lehet például a 2,31231 szám 2 tizedes jegyre kerekített ábrázolása, míg a 2,310 esetében az 1 biztosan nem kerekítés eredménye).

A számábrázolási rendszereket gyakran nevezik számrendszereknek, bár ez az elnevezés félrevezető: különböző számrendszerek, például a valós számok rendszere, a komplex számok rendszere, a p-adikus számok stb., nem tartoznak e szócikk témájához.

A számrendszerek típusai

A legegyszerűbb számrendszer az egyes számrendszer, unáris számrendszer, amelyben minden természetes számot megfelelő számú szimbólummal ábrázolnak. Ha a megjelenítésre a ′ szimbólumot választjuk, akkor például a hetes számot a következő képen jeleníthető meg: ′′′′′′′. Az unáris rendszer jól használható kisebb számok esetén. A számítástechnika néhány területén, például az Elias gamma kódolásnál, valamint az adattömörítési algoritmusok esetében gyakran használt számrendszer.

Az unáris ábrázolás rövidebbé tételéhez gyakran használnak speciális szimbólumokat, amelyek különleges jelentéssel bírnak. Ezek a speciális szimbólumok gyakran a 10 különböző hatványait (10, 100, 1000 stb.) jelentik. Így például, ha ′ jelenti az 1-et, a – jelenti a 10-et, és + jelenti a 100-at, akkor a számok tömörített formában a következő képen ábrázolhatók:

a 304 szám +++ ′′′′ a 123 szám pedig + –- ′′′ formában jelenik meg.

A régi egyiptomiak is hasonló rendszerű számrendszert használtak, és a római számrendszer ennek a számábrázolási rendszernek egy módosítása.

Használatosak voltak olyan rendszerek is, amelyekben speciális rövidítéseket használtak a szimbólumok többszörös előfordulása esetén. Például ha az ABC első 9 betűjét használjuk a többszörös előfordulás rövidítésére, akkor A jelenti az egyszeres előfordulást, B jelenti a kétszeres előfordulást, és így tovább. Ebben az esetben az előzőekben +++ ′′′′ formában ábrázolt 304-es számot most C+ D′ formában írjuk le.

Még elegánsabb a helyiértékes rendszer: a világszerte használt 10-es alapú számrendszer csak a 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 számjegyeket használja. A felsorolás egyben a számok un. alaki értéke, a számjegy tényleges értéke helyiértéke attól függ, hogy a szám melyik pozíciójában áll, mert ekkor az alaki érték még megszorzódik a 10 alapszám adott pozíciója szerint hatványával. A 304 = 3×100 + 0×10 + 4. Meg kell jegyezni, hogy a zéró, amelynek használatára az előzőekben említett rendszerekben nem volt szükség, itt alapvetően fontos, mivel lehetővé teszi egy hatvány nagyságrend kihagyását, illetve "átugrását" . A ma világszerte elterjedt arab számrendszer, amely valójában indiai eredetű, a 10-et alapszámnak tekintő helyiértékes rendszer.

Az aritmetikai műveletek is sokkal egyszerűbbek a helyiérték rendszerekben, mint az előzőekben megismert, un. additív számrendszerekben, ugyanis az additív rendszerek elméletileg végtelen számú különböző szimbólumot kell, hogy használjanak a 10 különböző hatványainak ábrázolásához, míg a helyiérték rendszerben ehhez elegendő 10 különböző szimbólum (10-es számrendszert feltételezve).

A számítástechnika néhány területén egy módosított helyiérték rendszert használnak, az u.n. k alapú helyiérték rendszert, amit bijektív számrendszernek neveznek, melyben a használható számjegyek az 1, 2, …, k (k ≥ 1), és a nullának egy üres karaktersorozat string felel meg. Ez a módszer biztosítja a bijekciót minden számjegyekből álló string halmaza és a nem-negatív egészek halmaza között, és elkerülhetővé teszi a nem-egyértelműséget a vezető nullák használata esetén. A bijektív k-alapú számrendszert k-adik jelölésnek is nevezik, de ez nem tévesztendő össze az un. p-adikus számokkal. A bijektív 1-es alapú rendszer megegyezik az unáris rendszerrel.

Történet

Lásd még: A természetes számok története és a nulla.

A történelem előtti időkben a számokat fából vagy kövekből faragott „pálcikák” reprezentálták. A kőkorszaki kultúrákban, ideértve az ősi amerikai indián csoportokat, a pálcikákat lovak, szolgák, személyes szolgáltatások adás-vételénél, illetve szerencsejátékoknál használták.

A legelső írott emlékeket a pálcikák használatáról a Sumér birodalom romjai között találták, agyagtáblákba karcolták, amelyeket később kiégettek. A sumérok a kissé különleges, 60-as alapú számrendszert használták az asztronómiai és egyéb számításaiknál. Ezt a rendszer átvették és az asztronómiában használták az ősi mediterrán nemzetek (görögök, rómaiak és egyiptomiak). A rendszer maradványait könnyen felismerhetjük a mai idő- (órák, percek) és a szögmérésben (szögpercek).

Kínában, a katonák és a gazdálkodók már a maradékokat is használták a számításaikban (prímszámok). A csapatok számának, illetve a rizs mennyiségének méréséhez a pálcikák egyedi kombinációi szolgáltak. A számításokat kényelmesebbé tette a moduláris aritmetika, ami megkönnyítette a szorzást. A moduláris aritmetika használata egyszerűvé tette a számításokat. A moduláris aritmetikát ma a digitális jelfeldolgozás használja.

A Római Birodalomban a pálcikákat viaszba vagy kőbe karcolták, vagy papiruszra írták és a számok ábrázolására a görögöktől átvett rendszert használták, de egyes számokra saját jeleket vezettek be. A római számrendszer használata a helyiérték rendszer bevezetése előtt (1500-as évek) általános volt.

A közép-amerikai maja kultúra egy 20 vagy 18 alapú számrendszert használt, ismerték már a helyiértékeket és a nulla fogalmát. Nagyon pontos asztronómiai számításokat végeztek, különösen az év hosszával és a Vénusz pályájával kapcsolatban.

Az Inka Birodalom kiterjedt gazdaságirányítási rendszert működtetett kipu, ahol pálcikák helyett színes fonalakra kötött csomókat használtak. A csomók és színek használata a spanyol hódítók a 16. században történt megjelenésével feledésbe merült, ennek ellenére egy kipuhoz hasonló, egyszerű jelzésrendszer még ma is használatos az Andok területén.

Néhány szerző azt feltételezi, hogy a helyiérték rendszert széles körben az abakusz használatával a kínaiak terjesztették el. Az első írásos emlékek a pálcikákról, illetve az abakusz használatáról 400 körüliek. A kínai matematikusok a nullát csak 932 körül írták le.

Indiából, ahol már ismerték a modern helyiértékes rendszert, valószínűleg egy Indiába küldött követ által, egy 773 körül vásárolt asztronómiai táblázat közvetítésével jutott el a rendszer az arabokhoz. A rendszerek részleteit lásd arab számok és indiai számok.

A iszlám fejedelmek és Afrika, valamint az India közötti élénk kereskedelem juttatta el az indiaiak által használt rendszert Kairóba. Az arab matematikusok kibővítették az általuk addig használt rendszert a decimális hatványokkal, amit al-Hvárizmí a 9. században már írásban rögzített. A rendszerrel Európát Fibonacci a Liber Abaci 1201-ben, Spanyolországban megjelent munkájában ismertette meg, lefordítva az arab forrást. Így Európába a 12. században jutott el arab közvetítéssel a nullával kiegészített teljes indiai rendszer.

A 2-es alapú bináris rendszert már a 17. században Gottfried Leibniz ismertette, aki Kínában hallott róla, de általános használata a 20. században, a számítógépek megjelenésével terjedt el.

Alapszámok használata

Manapság a 10-es alapú számrendszer a legelterjedtebben használt számrendszer. Feltehetően a rendszer elterjedtségének az az oka, hogy az embereknek tíz ujjuk van (kezükön).

A 8-as alapú rendszert az észak-kaliforniai yuki indiánok találták ki, akik feltehetőleg az ujjak közét is használták a számláláskor. Vannak nyelvészeti bizonyítékok, amelyek alapján feltehető, hogy a bronzkorban korai indo-európaiak (akiktől a legtöbb európai és indiai nyelv ered) helyettesíthették az addig használt 8-as alapú rendszert (vagy a rendszert, ami csak a 8-ig történő számlálást engedte meg) a 10-es alapú rendszerrel. Bizonyíték erre, hogy az angol nyelvben ekkor merül fel a 9-et jelentő, newan mint ami az 'új'at jelentő 'new', newo szavakból származik, feltehetőleg a nemrégen kitalált 9-es számot úgy nevezték el 'új szám'nak (Mallory & Adams 1997). (Franciául a neuf szó máig is egyaránt jelent 9-et és 'új'at.)

A maja, valamint a pre-kolumbiai és közép-amerikai civilizációk 20-as alapú számrendszereket használtak, (ennek eredete feltehetőleg összefügg az emberek kéz- és lábujjainak számával). A 60-as alapú rendszert a sumér és az azt követő Mezopotámiai kultúrák használták, de mint túlélőt, a ma használt időmérő rendszerben is ezt a rendszert használjuk (egy órát 60 percre osztunk, illetve 1 percet 60 másodpercre). A 60-nak, mint alapszámnak a használata azzal magyarázható, hogy elég nagy szám, ugyanakkor meglehetősen sok osztója, különösen igaz ez az első hat természetes számra, illetve sok törzstényezője van. A 12-es számrendszer nagyon népszerű volt, mert a 12 maradék nélkül osztható 2-vel (felezhető), 3-mal (harmadolható), 4-gyel (negyedelhető), 6-tal(hatodolható). A ma használt naptárban az év 12 hónapra oszlik, 12 óra a nappal és 12 óra az éjszaka az év mind a 365 napján. Csaknem minden nyelvben külön szó van a 12 dologból álló csoportra, például a magyar „tucat”, az angol „dozen”, a német „das Dutzend”, az orosz „djuzsina” stb.

A kapcsolók/relék (és elektronikus követőik, az elektroncsövekből, majd később a tranzisztorokból álló kapcsolóáramkörök) csak két állapotúak lehetnek : „nyitottak” és „zártak”. A nyitott=1 és a zárt=0 helyettesítéssel (vagy fordítva) nyerjük a bináris számjegyek sorozatát. (A tranzisztorok esetében a feszültégekre gyakran használatos a magas és az alacsony kifejezés a 'be' és 'ki' helyett). A bináris rendszer az alapja a digitális számítógépek működésének. Ezt a számrendszert használja csaknem minden digitális számítógép az egészekkel való aritmetikai műveleteknél, kivéve néhány, a kezdetekben használt exotikus 3 és 10 alapu számítógépet számítógép hardver története. Megjegyezzük, hogy a számítógépek nem minden tárolt adatot dolgoznak/értelmeznek egész számnak – van, amit szövegnek, van amit programnak értelmeznek. Valós számok (amelyek közé az egészek is tartoznak) általában lebegőpontos számokként kerülnek tárolásra és feldolgozásra, amelyekre külön műveleti szabályok vonatkoznak, ez az ún. lebegőpontos aritmetika.

A múltban és ma leggyakrabban használt számrendszerek alapszámai a 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 16, 20 és 60.

A helyiértékes ábrázolási rendszer

Egy b alapú számrendszerben (ahol b egy pozitív természetes szám alapszám), a b-t a számrendszer alapszámának nevezzük, a rendszerben használható szimbólumok (számok) pedig az első b természetes szám, ideértve a nullát is. (10-es ill. annál kisebb alapszám esetén a 0,1,2,…9 közül értelemszerűen, tizenhatos alapszám esetén a fentiek még kiegészülnek az A,B,C,D,E,F "számokkal). A szám legutolsó pozíciójában a szimbólumok saját értéküket alaki érték képviselik, ettől a pozíciótól balra az értéküket a b-vel való szorzatuk határozza meg.

Például, a decimális rendszerben (10-es alapszám), a 4327 szám a következőt jelenti (4×103) + (3×102) + (2×101) + (7×100), megjegyezzük, hogy 100 = 1.

Általában, ha b a számrendszer alapja, a számot a a1bk + a2bk-1 + a3bk-2 + … + ak+1b0 formában fejezzük ki, a szám számjegyeit a1a2a3ak+1 sorrendben írjuk le. A használt számjegyek a természetes számok, 0 és b-1 között, ez utóbbit is ideértve.

Szövegben (mint itt) a számokat tetszőleges számrendszerben írhatjuk le, de a ez többértelműséghez vezet, ezért (önmagában 10-es alapot, decimális ábrázolást tételezzünk fel) alsó indexként (subscript) a szám jobb oldalánál tüntessük fel az ábrázolásnál használt alapszámot, mint például itt: számalapszám. Speciális környezet említése nélkül, a számok jelzés nélküli ábrázolása megegyezés szerint 10-es alapút, decimálist jelent.

A helyiértékes ábrázolási rendszerben vessző (10-es alapú számrendszerben tizedesvessző) a számjegyeket két csoportja osztja, egész és tört részre. Például, a 2-es alapú 10,11 szám jelentése 1×21+ 0×20 +1×2−1 +1×2−2 = 2,75.

Általánosan, egy b alapszámú számrendszerben a számok a következő formában írhatók le:

A bk és b-k számok a "k"-adik pozícióhoz tartozó ún. nagyságrendek.

Megjegyezzük, hogy a számok vagy egy számjeggyel, vagy egy ismétlődő számjegycsoporttal zárulnak, ami akkor és csak akkor igaz, ha a szám racionális; ez független a számrendszer választott alapszámától. Az viszont alapszámfüggő, hogy az adott racionális számot milyen számrendszerben ábrázoljuk: a 0,310 ábrázolása esetén egy számmal zárul, míg ugyanez a 0,3 bináris ábrázolásban 0,0100110011001…2 már ismétlődő számjegycsoporttal zárul. Egy irracionális szám nemismétlődő (végtelen számú nemismétlődő) számjeggyel írható le, és ez igaz bármilyen egész alapszám használata esetén is. Példa erre, hogy a pi = 3,1415926…10 2-es alapú számrendszerben szintén a a nemperiodikus 11,001001000011111…2 formában írható le.

Ha b=p, azaz prímszám, definiálhatók olyan p-alapú számok ezek, amelyeknek a bal oldala végtelen, ezek az ún. p-adikus számok.

Tört alapszámú számrendszerek

Átváltás különböző számrendszerek között

Egy egyszerű algoritmus segítségével átválthatók a pozitív egész számok egyik számrendszerből a másikba. Az algoritmus maradékos osztások ismételt alkalmazását írja elő. Az algoritmus minden lépése után a következő lépésben a kapott hányadost osztjuk tovább, egészen addig, míg a hányados 0 lesz. Ekkor az osztási maradékok összeolvasva adják az új számrendszerben a számot (vagyis a szám alaki értékét).

Például 1020304 10-es számrendszerbeli szám 7-es számrendszerbe váltása:

     1020304 = 145757 · 7 + 5
      145757 =  20822 · 7 + 3
       20822 =   2974 · 7 + 4
        2974 =    424 · 7 + 6
         424 =     60 · 7 + 4
          60 =      8 · 7 + 4
           8 =      1 · 7 + 1
           1 =      0 · 7 + 1   => 11446435

Például 10110111 2-es számrendszerbeli szám 5-ös számrendszerbe váltása:

10110111 / 101 = 100100 maradék 11  (3)
  100100 / 101 =    111 maradék  1  (1)
     111 / 101 =      1 maradék 10  (2)
       1 / 101 =      0 maradék  1  (1)  => 1213

A

Egy lehetséges megvalósítása az átváltásnak c nyelven, a kód kevesebb, mint 1023 jegyű számot tud átváltani 2-től 36-os alapig:

#include <stdio.h>
#include <string.h>

int main()  {

    int alap,ujalap,jo,st,i,temp,elojel,jegy[1024],ujjegy[1024];
    int hossz,ujhossz,maradek;
    char szam[1024];
    
    while(1)  {
          printf("Szamok konverzioja szamrendszerek kozott (alap=2..36)\n");
          printf("Kerem az alapot: "),scanf("%d",&alap);
          printf("Kerem az uj alapot: "),scanf("%d",&ujalap);
          if((alap<2)||(alap>36)||(ujalap<2)||(ujalap>36))  printf("Rossz alap/ujalap!\n");
          else {
          printf("Kerem az atvaltando szamot (A=10,B=11,...,Z=35): "),scanf("%s",szam);
          
          jo=1;
          hossz=strlen(szam);
          if(szam[0]=='-')  elojel=-1,st=1;
          else if(szam[0]=='+')  elojel=1,st=1;
          else elojel=1,st=0;
          for(i=st;i<hossz;i++)  {
              if((szam[i]>='0')&&(szam[i]<='9'))  jegy[i-st]=szam[i]-'0';
              else if((szam[i]>='A')&&(szam[i]<='Z'))  jegy[i-st]=szam[i]-'A'+10;
              else jo=0;
              if(jegy[i-st]>=alap)  jo=0;
          }
          if(jo==0)  printf("Ervenytelen input!\n");
          else {
                hossz-=1+st;
                for(i=0;2*i<=hossz;i++)
                    temp=jegy[i],jegy[i]=jegy[hossz-i],jegy[hossz-i]=temp;
                ujhossz=0;
                do {
                    maradek=0;
                    for(i=hossz;i>=0;i--)  {
                        maradek=maradek*alap+jegy[i];
                        jegy[i]=maradek/ujalap;
                        maradek%=ujalap;
                    }
                    ujjegy[ujhossz]=maradek;
                    ujhossz++;
                    while((hossz>=0)&&(jegy[hossz]==0))  hossz--;
                } while(hossz>=0);
                printf("Atkonvertalt szam: ");
                if(elojel==-1)  printf("-");
                for(i=ujhossz-1;i>=0;i--)  {
                    if(ujjegy[i]<10)  printf("%d",ujjegy[i]);
                    else              printf("%c",ujjegy[i]-10+'A');
                }
                printf("\n");
          }
          }
          printf("\n");
    }
    return 0;
}

A decimális törtrészek konverziója ismételt szorzással oldható meg. A szorzat egész része a megfelelő jegy. Sajnos, az eljárás automatikusan nem minden alapszám esetén fejeződik be. Pl a 0,1A4C hexadecimális (16-os alapú) szám 9-alapúvá alakítása esetén:

0,1A4C · 9 = 0,ECAC
0,ECAC · 9 = 8,520C
0,520C · 9 = 2,E26C
0,E26C · 9 = 7,F5CC
0,F5CC · 9 = 8,A42C 
0,A42C · 9 = 5,C58C  => 0,082785...

Speciális eset

Egyes speciális esetekben az átváltás különösen egyszerű a következő módszerrel: Ha az a alapú számrendszerben írt n számot egy b=ah alapú számrendszerbe írjuk át, akkor a számjegyeket az egyesektől kezdve h hosszú részekre osztjuk, és az egyes részek helyett a neki megfelelő számjegyet írjuk.

A másik irányban az egyes b alapú jegyek helyett azok a alapú alakjait írjuk.

A módszer akkor is működik, ha az átírandó szám nem egész.

Például

3 0 2 1 0
11 00 10 01 00

vagyis 302104 = 11 00 10 01 002.

és

001 010 111 100
1 2 7 4

ezért 10101111002 = 12748

Bizonyítás:

Legyen az átírandó szám

Osszuk h hosszú részekre:

Itt , és az egy-egy tagban levő összeg éppen a b alapú számrendszer egy-egy jegyének a számrendszerbeli alakja.

Lásd még

Külső referencia

  • D. Knuth. The Art of Computer Programming. Volume 2, 3rd Ed. Addison-Wesley. pp.194–213, "Positional Number Systems".
  • J.P. Mallory and D.Q. Adams, Encyclopedia of Indo-European Culture, Fitzroy Dearborn Publishers, London and Chicago, 1997.
  • Filep László - Bereznai Gyula: A számírás története, 1999, (ISBN 9789638347749)

Külső hivatkozások