Gyakorlati alapok

Digit vagy helyiérték?

 

Ez a fejezet kivételesen nem programozásról, hanem közben felmerülő értelmezési, ezzel együtt elnevezési problémákról szól.

 

A Signore Fibonacci feltételes bekérései című fejezetben felmerült egy érdekes  kódrészlet, amely egy számnak várt karakterfüzér "számjegyeit" vizsgálja meg külön-külön azért, hogy bemeneti adatként ne kerüljön a programba NEM numerikus adat (például betű).

 

for(int i = 0; i < elem.length(); i++){
    char karakter = elem.charAt(i);
        if(karakter != '0'
            && karakter != '1'
            && karakter != '2'
            && karakter != '3'
            && karakter != '4'
            && karakter != '5'
            && karakter != '6'
            && karakter != '7'
            && karakter != '8'
            && karakter != '9'){
        rosszAdat = true;
        break;
    }
}

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Ilyesfajta eljárás egyébként gyakori programozási elem, amely során egy tetszőleges bemeneti szám-karakterfüzér "számjegyein" lépkedünk végig, valamely általunk fontosnak minősített tulajdonságát vizsgálva, például:

 

2-860430-7501

→→→→→→

 

Sok olyan bemeneti számadat van, amely nem reprezentál semmilyen matematikai összefüggést, ilyen például egy autórendszám számrésze, amely nagy valószínűséggel egyszerű sorszám (például MAG-945), de említhetjük a személyi számot is (például 2-860430-7501), amely utolsó 4 számjegyének ugyan lehet matematikai tartalma, de kiindulópontja lényegében mégis dátum. A mögöttes matematika tehát legtöbbször a kód egy adott pontján nem lényeges, főként ott, ahol a számkaraktereket bekértük és ellenőriztük. De ha igen, ez sem változtatja meg az alapszemléletet: például a személyi számot nem lehet egységesen sem int, sem long, sem double típusként értelmeznünk. Helyette a bemeneti szám-karakterfüzér "számjegyeit" külön-külön vizsgáljuk meg. (A személyi számmal és az általa által hordozott matematikai összefüggésekkel részletesen foglalkozunk egy későbbi, Nyilvános adatok a szupertitkos személyi számból című fejezetben.)

 

Nos, ezzel nincs is gond, ez a feladatunk, pusztán az eljárás elnevezése okoz némi bonyodalmat. Ugyanis ha a bemeneti szám-karaktereket "számjegyeknek" vagy "helyiértékeknek" nevezzük, akkor valójában téves elnevezést alkalmazunk, hiszen mindkettő matematikai fogalom, főleg a "helyiérték". Az előbbi, a "számjegy" egyébként is elég tág elnevezés, ráadásul meglehet, hogy a névadás pillanatában a bemeneti szám nem is "klasszikus" számformátum, ilyen például egy mobilszám: 06301234567. Sőt továbblépek: egyenesen hiba volna ezt számként értelmeznünk.

 

Programozás-technikai javaslatom, hogy ilyen esetekben induljunk ki az angol digit szóból. Ilyen jellegű "magyarosítás" korántsem idegen az informatika területén, sőt, igazából a magyar nyelv manapság már hemzseg tőlük, gondoljunk csak a fájl, operációs rendszer, lájkol, stb. szavakra.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Értelmezésem szerint: a digit egy bemeneti számformátumnak adott pontban (indexen) lévő karaktere. A számolás mindig balról jobbra történjen () és kövessük a tömbindexelés szabályait, amely mindig 0-tól kezdődik.

 

Tehát az alábbi mobilszám a következő (szabványos) tulajdonságokkal bír:

 

06301234567