Gyakorlati alapok

Mobilszámok listázása

 

Az előző fejezetben a PIN-kódokat listáztuk ki. Ebben a fejezetben voltaképpen ugyanolyan jellegű és megoldású problémát vázolunk fel: kilistázzuk az összes lehetséges mobilszámot.

 

Amint az mindannyiunk előtt ismeretes, a mobiltelefonszám a kötelező előhívószámokon kívül 7 db számjegyből áll. Például magyar Telekom-hívószám esetén:
 

0036 - 30 - 0123456
országhívószám - tartományi hívószám - egyéni hívószám
 

Most az előhívószámokkal nem foglalkozunk, csakis a mobiltelefonszámok lehetséges variációival. Ennek tartományát könnyen felvázolhatjuk, mert az 0000000 és 9999999 között változik, tehát összvariációs mennyisége 10.000.000 db.
A mobiltelefonszám tehát 7 számjegyből áll és hasonlít egy konkrét, hétjegyű számjegyhez (például 1234567), de valójában nem az, hiszen míg itt elméletileg megengedettek olyan számvariációk, mint például 0000000, 0001111, 0123456, addig a “klasszikus” matematikában már nem.

 

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

 

Tehát ez a 7 számjegy csak 7 db összeillesztett számvariáció 0 és 9 között.

 

A konkrét számításra a kombinatorikai lehetőségek közül az ismétléses variációt alkalmazhatjuk, mert nk képlet alapján 107 = 10.000.000. Implementációs listázó motorunk a már jól bevált egybeágyazott ciklusok, amelyekben kiválóan felhasználhatjuk az összes iterátort (i, j, k, l, m, n, o), sőt még feltételeket sem kell állítanunk.

 

www.informatika-programozas.hu - További információk!

Érdekes, bár haszontalan elmejáték, hogy miképpen oszthatja ki a mobilszolgáltató a lehetséges mobilszámokat. Nos, a teljes számegyezős mobilszámokat az eszelős bennfentesek nyilvánvalóan maguknak tartják fent (például 1111111, de szerintem a legdurvább a 0000000), ám a sorozatokat (például 1234567, 7654321, 1234321), illetve az egymás mellett lévő egyezéseket is garantáltan extraárért kínálhatják a marketingeseknek, például 1234444. Szerintem a mobilszolgáltató által definiált legkisebb egymás mellett lévő egyezés 4, esetleg 5 azonos számjegy (én már láttam 3 egyezést egyszerű mobiltelefonszámban, az tehát még nem definiált). Ezt tehát nagy valószínűséggel külön algoritmussal szűrik és osztályozzák. Ugyanakkor garantáltan nem zárják ki a 0-val kezdődő mobilszámokat.

 

Nézzük meg a futtatható Java-kódot (bár a konzol nem fogja az összes variációt pontosan megjeleníteni a túl gyors kiírás miatt):

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 



public class Main {
public static void main(String[] args) {
    for (int i = 0; i < 10; i++){
        for(int j = 0; j < 10; j++){
            for (int k = 0; k < 10; k++){
                for (int l = 0; l < 10; l++){
                    for (int m = 0; m < 10; m++){
                        for (int n = 0; n < 10; n++){
                            for (int o = 0; o < 10; o++){
                                System.out.println(""+i+j+k+l+m+n+o);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

 

Végeredmény:
0000000

0000001

0000002

0000003

...

 

9999997

9999998

9999999

 

Érdemes felfigyelnünk a System.out.println() függvényben lévő kezdő aposztrófokra:

 

System.out.println(""+i+j+k+l+m+n+o);

 

Nélkülük a rendszer nem karakterekként, hanem integer típusú számokként értelmezi az iterátorokat, ezért kiíráskor összeadja őket. Ezzel az eredménylistával persze nem sokat tudunk kezdeni. Futtatással ellenőrizzük le ezt az érdekességet is!