2020. szeptember 2., szerda

Lottó program - Felkészülés a Középszintű Szakmai informatikai érettségi feladat mintapélda és megoldása

Magyarországon 1957 óta lehet ötös lottót játszani. A játék lényege a következő: a lottószelvényeken 90 szám közül 5 számot kell a fogadónak megjelölnie. Ha ezek közül 2 vagy annál
több megegyezik a kisorsolt számokkal, akkor nyer. Az évek során egyre többen hódoltak
ennek a szerencsejátéknak és a nyeremények is egyre nőttek.
Adottak a lottosz.dat szöveges állományban a 2003. év 51 hetének ötös lottó számai. Az
első sorában az első héten húzott számok vannak, szóközzel elválasztva, a második sorban a
második hét lottószámai vannak stb.
Például: 37 42 44 61 62
18 42 54 83 89
...
9 20 21 59 68
A lottószámok minden sorban emelkedő számsorrendben szerepelnek.
Az állományból kimaradtak az 52. hét lottószámai. Ezek a következők voltak: 89 24 34 11 64.
Készítsen programot a következő feladatok megoldására!
1. Kérje be a felhasználótól az 52. hét megadott lottószámait!
2. A program rendezze a bekért lottószámokat emelkedő sorrendbe! A rendezett számokat
írja ki a képernyőre!
3. Kérjen be a felhasználótól egy egész számot 1-51 között! A bekért adatot nem kell ellenőrizni!
4. Írja ki a képernyőre a bekért számnak megfelelő sorszámú hét lottószámait, a
lottosz.dat állományban lévő adatok alapján!
5. A lottosz.dat állományból beolvasott adatok alapján döntse el, hogy volt-e olyan
szám, amit egyszer sem húztak ki az 51 hét alatt! A döntés eredményét (Van/Nincs) írja ki
a képernyőre!
6. A lottosz.dat állományban lévő adatok alapján állapítsa meg, hogy hányszor volt páratlan szám a kihúzott lottószámok között! Az eredményt a képernyőre írja ki!
7. Fűzze hozzá a lottosz.dat állományból beolvasott lottószámok után a felhasználótól
bekért, és rendezett 52. hét lottószámait, majd írja ki az összes lottószámot a lotto52.ki
szöveges fájlba! A fájlban egy sorba egy hét lottószámai kerüljenek, szóközzel elválasztva
egymástól!
8. Határozza meg a lotto52.ki állomány adatai alapján, hogy az egyes számokat hányszor
húzták ki 2003-ban. Az eredményt írja ki a képernyőre a következő formában: az első sor
első eleme az a szám legyen ahányszor az egyest kihúzták! Az első sor második eleme az
az érték legyen, ahányszor a kettes számot kihúzták stb.! (Annyit biztosan tudunk az értékekről, hogy mindegyikük egyjegyű.) 

Megoldás

/**
 *
 * @author http://webotlet.hu
 */
 
package webotlet_e05maj_lotto;
 
import java.io.*;
import java.util.Scanner;
 
public class Webotlet_e05maj_lotto
{
  public static void main( String[] args )
  {
    Scanner sc = new Scanner(System.in);
    RandomAccessFile raf;
    String sor;
    int db;
    try
    {
// 1. feladat
      System.out.print("Ird be az 52. het lottoszamait szokozzel elvalasztva: ");
      String[] het52 = sc.nextLine().split(" ");
      int[] het52sz = new int[5];
      for ( int i = 0; i < het52.length; i++ )
      {
        het52sz[i] = Integer.parseInt(het52[i]);
      }
         
// 2. feladat
      System.out.println("\n2. feladat");
      int csere;
      for ( int i = 0; i < het52sz.length-1; i++ )
      {
        for ( int j = i+1; j < het52sz.length; j++ )
        {
          if( het52sz[i] > het52sz[j] )
          {
            csere = het52sz[i];
            het52sz[i] = het52sz[j];
            het52sz[j] = csere;
          }
        }
      }
       
      for( int sz : het52sz )
      {
        System.out.print(sz+" ");
      }
      System.out.println();
 
// 3. feladat
      System.out.println("\n3. feladat");
      System.out.println("Adj meg egy szamot (1-51): ");
      int het = sc.nextInt(); 
 
// 4. feladat      
      int[][] szamok = new int[52][5];
      raf = new RandomAccessFile("lottosz.dat","r");
      db = 0;
      String[] heti;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        heti = sor.split(" ");
        for( int i = 0; i < heti.length; i++ )
        {
          szamok[db][i] = Integer.parseInt(heti[i]);
        }
        db++;
      }
       
      System.out.println("A "+het+". het nyeroszamai: ");
      for( int i = 0; i < szamok[het-1].length; i++ )
      {
        System.out.print(szamok[het-1][i]+" ");
      }
      System.out.println();
       
// 5. feladat
      System.out.println("\n5. feladat");
      int[] szamokDb = new int[90];
// az 52. hét adatait egyelőre kihagyjuk, azért -1
      for( int i = 0; i < szamok.length-1; i++ )
      {
        for( int j = 0; j < szamok[i].length; j++ )
        {
          szamokDb[szamok[i][j]-1]++;
        }
      }
      boolean van = false;
      for( int sz : szamokDb )
      {
        if( sz == 0 )
        {
          van = true;
          break;
        }
      }
 
      if( van )
      {
        System.out.println("Van");
      }
      else
      {
        System.out.println("Nincs");
      }
       
// 6. feladat
      System.out.println("\n6. feladat");
      int paratlan = 0;
// kettesével lépkedünk a megszámolt számokon, hogy csak
// a páratlanok darabszámait adjuk össze
      for( int i = 0; i < szamokDb.length; i += 2 )
      {
        paratlan += szamokDb[i];
      }
      System.out.println("A fajlban levo szamok alapjan "+paratlan+
                         " alkalommal huztak paratlan szamot");
 
// 7. feladat
// az 52. hét számait hozzáfűzzük a többihez
      for( int i = 0; i < het52sz.length; i++ )
      {
        szamok[51][i] = het52sz[i];
      }
 
      RandomAccessFile ki = new RandomAccessFile("lotto52.ki","rw");
// ha esetleg létezne a fájl, töröljük a tartalmát
      ki.setLength(0);
 
      StringBuilder sb = new StringBuilder();
       
      for( int i = 0; i < szamok.length; i++ )
      {
        for ( int j = 0; j < szamok[i].length; j++ )
        {
          sb.append(szamok[i][j]+ " ");
        }
        sb.append("\n");
      }
       
      ki.writeBytes( sb.toString().replaceAll(" \n", "\n") );
 
// 8. feladat
      System.out.println("\n8. feladat");
      sb = new StringBuilder();
      for( int i = 0; i < szamokDb.length; i++ )
      {
        sb.append(szamokDb[i]+" ");
        if( (i+1) % 15 == 0 )
        {
          sb.append("\n");
        }
      }
      System.out.println(sb.toString().replaceAll(" \n", "\n"));
       
// 9. feladat
      System.out.println("\n9. feladat");
      System.out.print("A kovetkezo primszamokat nem huztak ki: ");
      int[] primek = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89 };
 
// a kezzel beirt 52. het szamainak hozzaszamolasa az eddigiekhez
      for( int i = 0; i < het52sz.length; i++ )
      {
        szamokDb[het52sz[i]-1]++;
      }
       
      for( int sz : primek )
      {
        if( szamokDb[sz-1] == 0 )
        {
          System.out.print(sz+" ");
        }
      }
    }
    catch( IOException e )
    {
      System.err.println("HIBA");
    }
  }
}

Nincsenek megjegyzések:

Megjegyzés küldése