Gyakorlati alapok

Virtuális ötös lottó külön függvényeskedéssel III.

 

A fejezet gondolati és programozás-technikai előzményei...

...valamint annak házi feladatában (Találati szám) olvashatók.

 

A házi feladat már számolt találati számot is, tehát azt az értéket, hogy tippszámaink közül mennyi egyezett valamelyik lottószámmal. Ebben a rövid fejezetben sem lesz többről szó, a kódot csupán azzal egészítjük ki, hogy sokszor sorsolunk, illetve megnézzük a véletlenszámok által képviselt lottószámok számszerű előfordulásait. A sorsolási kör számát az int sorsolasiKor változó képviseli, a számok előfordulásainak tárolója pedig int[] elofordulas nevű tömb.

 

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

 

Amint arról már több helyen szóltam, alapjában véve nem voltam arról meggyőződve, hogy a Java által generált véletlenszámok és a valós lottószám-sorsolások matematikai valószínűségei azonosak. Ezzel természetesen a Java rendszertervezői is tisztában voltak és addig vacakolhattak a megfelelő matematikai függvénnyel, amíg az (determinisztikus volta ellenére) szintén kvázi véletlenszámokat szolgáltatott. Ha megnézzük a végeredményben a számeloszlásokat, akkor láthatjuk, hogy jó munkát végeztek.

 

A kód része Sike Zoltán informatika tanár oktatási anyagának. Nézzük meg a futtatható Java-kódot:

 

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

 

 

 

 

 

 

 

 

import java.util.Random;
import java.util.Scanner;

public class Main {

public static boolean benneVan(int szam, int[] tomb) {
    boolean talalat = false;
    for(int i = 0; i < tomb.length; i++) {
        if(szam == tomb[i]) {
            talalat = true;
            break;
            }
        }
    return talalat;
}

public static int[] tombFeltoltes(int elemszam, int hatar) {
    int[] tomb = new int[elemszam];
    Random rnd = new Random();
    int szam;
    for(int i = 0; i < tomb.length; i++) {
        do{
            szam = rnd.nextInt(hatar) + 1;
        }while (benneVan(szam, tomb));
        tomb[i] = szam;
    }
    return tomb;
}

public static void kiir(int[] tomb){
    System.out.println();
    for (int i = 0; i < tomb.length; i++) {
        System.out.print(tomb[i]+" ");
    }
}

public static int[] metszet(int[] szamok, int[] tippek) {
    int[] tomb = new int[szamok.length + 1];
    int db = 0;
    for (int i = 0; i < szamok.length; i++) {
        if(benneVan(szamok[i], tippek))
        {
            db++;
            tomb[db] = szamok[i];
        }
    }
    tomb[0] = db;
    return tomb;
}

public static void main(String[] args) {
    int[] szamok = new int[5];
    int[] tippek = new int[5];
    int szam;
    Scanner in = new Scanner(System.in);
    for(int i = 0; i <= 4; i++) {
        do{
            System.out.print("Kérem a "+ (i + 1) + ". számot: ");
            szam=in.nextInt();
        }
    while(benneVan(szam,tippek) || (szam < 1 || szam > 90));
    tippek[i] = szam;
    }

    int[] talalatok = new int[6];
    int[] aktualisTalalat = new int[6];
    int[] elofordulas = new int[91];
    int sorsolasiKor = 1000;
    for(int i = 0; i < sorsolasiKor; i++) {
        szamok = tombFeltoltes(5, 90);
        for(int j = 0; j < szamok.length; j++) {
            elofordulas[szamok[j]]++;
        }
        aktualisTalalat = metszet(szamok,tippek);
        talalatok[aktualisTalalat[0]]++;
    }
    System.out.println("\n" + sorsolasiKor + " keverés alatt a találatok száma: " + talalatok[0]);
    System.out.println();
    for(int i = 1; i < elofordulas.length; i++){
        System.out.println("A(z) " + i + " előfordulása "

        + sorsolasiKor + " sorsolási kör alatt: " + elofordulas[i]);
        }
    }
}

 

Végeredmény:

Kérem a 1. számot: 1
Kérem a 2. számot: 23
Kérem a 3. számot: 23
Kérem a 3. számot: 34
Kérem a 4. számot: 56
Kérem a 5. számot: 45

1000 keverés alatt a találatok száma: 756

A(z) 1 előfordulása 1000 sorsolási kör alatt: 54
A(z) 2 előfordulása 1000 sorsolási kör alatt: 59
A(z) 3 előfordulása 1000 sorsolási kör alatt: 64
A(z) 4 előfordulása 1000 sorsolási kör alatt: 49
A(z) 5 előfordulása 1000 sorsolási kör alatt: 68
A(z) 6 előfordulása 1000 sorsolási kör alatt: 59
A(z) 7 előfordulása 1000 sorsolási kör alatt: 60
A(z) 8 előfordulása 1000 sorsolási kör alatt: 43
A(z) 9 előfordulása 1000 sorsolási kör alatt: 63
A(z) 10 előfordulása 1000 sorsolási kör alatt: 52
A(z) 11 előfordulása 1000 sorsolási kör alatt: 51
A(z) 12 előfordulása 1000 sorsolási kör alatt: 61
A(z) 13 előfordulása 1000 sorsolási kör alatt: 62
A(z) 14 előfordulása 1000 sorsolási kör alatt: 46
A(z) 15 előfordulása 1000 sorsolási kör alatt: 62
A(z) 16 előfordulása 1000 sorsolási kör alatt: 52
A(z) 17 előfordulása 1000 sorsolási kör alatt: 62
A(z) 18 előfordulása 1000 sorsolási kör alatt: 55
A(z) 19 előfordulása 1000 sorsolási kör alatt: 53
A(z) 20 előfordulása 1000 sorsolási kör alatt: 58
A(z) 21 előfordulása 1000 sorsolási kör alatt: 56
A(z) 22 előfordulása 1000 sorsolási kör alatt: 62
A(z) 23 előfordulása 1000 sorsolási kör alatt: 49
A(z) 24 előfordulása 1000 sorsolási kör alatt: 57
A(z) 25 előfordulása 1000 sorsolási kör alatt: 56
A(z) 26 előfordulása 1000 sorsolási kör alatt: 53
A(z) 27 előfordulása 1000 sorsolási kör alatt: 67
A(z) 28 előfordulása 1000 sorsolási kör alatt: 65
A(z) 29 előfordulása 1000 sorsolási kör alatt: 55
A(z) 30 előfordulása 1000 sorsolási kör alatt: 55
A(z) 31 előfordulása 1000 sorsolási kör alatt: 58
A(z) 32 előfordulása 1000 sorsolási kör alatt: 67
A(z) 33 előfordulása 1000 sorsolási kör alatt: 70
A(z) 34 előfordulása 1000 sorsolási kör alatt: 57
A(z) 35 előfordulása 1000 sorsolási kör alatt: 59
A(z) 36 előfordulása 1000 sorsolási kör alatt: 49
A(z) 37 előfordulása 1000 sorsolási kör alatt: 58
A(z) 38 előfordulása 1000 sorsolási kör alatt: 56
A(z) 39 előfordulása 1000 sorsolási kör alatt: 48
A(z) 40 előfordulása 1000 sorsolási kör alatt: 56
A(z) 41 előfordulása 1000 sorsolási kör alatt: 62
A(z) 42 előfordulása 1000 sorsolási kör alatt: 47
A(z) 43 előfordulása 1000 sorsolási kör alatt: 61
A(z) 44 előfordulása 1000 sorsolási kör alatt: 52
A(z) 45 előfordulása 1000 sorsolási kör alatt: 56
A(z) 46 előfordulása 1000 sorsolási kör alatt: 60
A(z) 47 előfordulása 1000 sorsolási kör alatt: 42
A(z) 48 előfordulása 1000 sorsolási kör alatt: 55
A(z) 49 előfordulása 1000 sorsolási kör alatt: 62
A(z) 50 előfordulása 1000 sorsolási kör alatt: 50
A(z) 51 előfordulása 1000 sorsolási kör alatt: 39
A(z) 52 előfordulása 1000 sorsolási kör alatt: 45
A(z) 53 előfordulása 1000 sorsolási kör alatt: 48
A(z) 54 előfordulása 1000 sorsolási kör alatt: 71
A(z) 55 előfordulása 1000 sorsolási kör alatt: 63
A(z) 56 előfordulása 1000 sorsolási kör alatt: 56
A(z) 57 előfordulása 1000 sorsolási kör alatt: 57
A(z) 58 előfordulása 1000 sorsolási kör alatt: 54
A(z) 59 előfordulása 1000 sorsolási kör alatt: 49
A(z) 60 előfordulása 1000 sorsolási kör alatt: 54
A(z) 61 előfordulása 1000 sorsolási kör alatt: 50
A(z) 62 előfordulása 1000 sorsolási kör alatt: 55
A(z) 63 előfordulása 1000 sorsolási kör alatt: 75
A(z) 64 előfordulása 1000 sorsolási kör alatt: 59
A(z) 65 előfordulása 1000 sorsolási kör alatt: 53
A(z) 66 előfordulása 1000 sorsolási kör alatt: 48
A(z) 67 előfordulása 1000 sorsolási kör alatt: 55
A(z) 68 előfordulása 1000 sorsolási kör alatt: 37
A(z) 69 előfordulása 1000 sorsolási kör alatt: 51
A(z) 70 előfordulása 1000 sorsolási kör alatt: 50
A(z) 71 előfordulása 1000 sorsolási kör alatt: 63
A(z) 72 előfordulása 1000 sorsolási kör alatt: 47
A(z) 73 előfordulása 1000 sorsolási kör alatt: 46
A(z) 74 előfordulása 1000 sorsolási kör alatt: 52
A(z) 75 előfordulása 1000 sorsolási kör alatt: 69
A(z) 76 előfordulása 1000 sorsolási kör alatt: 45
A(z) 77 előfordulása 1000 sorsolási kör alatt: 64
A(z) 78 előfordulása 1000 sorsolási kör alatt: 60
A(z) 79 előfordulása 1000 sorsolási kör alatt: 57
A(z) 80 előfordulása 1000 sorsolási kör alatt: 50
A(z) 81 előfordulása 1000 sorsolási kör alatt: 53
A(z) 82 előfordulása 1000 sorsolási kör alatt: 56
A(z) 83 előfordulása 1000 sorsolási kör alatt: 49
A(z) 84 előfordulása 1000 sorsolási kör alatt: 50
A(z) 85 előfordulása 1000 sorsolási kör alatt: 53
A(z) 86 előfordulása 1000 sorsolási kör alatt: 58
A(z) 87 előfordulása 1000 sorsolási kör alatt: 58
A(z) 88 előfordulása 1000 sorsolási kör alatt: 58
A(z) 89 előfordulása 1000 sorsolási kör alatt: 53
A(z) 90 előfordulása 1000 sorsolási kör alatt: 57

 

www.informatika-programozas.hu - Házi feladat

 

Házi feladat - Nézzük meg, hogy a Java rendszerprogramozói jó munkát végeztek-e a kvázi véletlenszámok generálásában! Hogyan tudnánk ezt leellenőrizni?

 

A megoldás fejezete a képre kattintva érhető el.