Java programozás – 2005 májusi emelt informatika érettségi programozási feladatának megoldása

A feladat leírását, melynek a megoldását közzéteszem innen töltheted le.

A letölthető tömörített állományban megtalálod a NetBeans-ben megnyitható projectet. Amennyiben Geany szerkesztővel kívánod megtekinteni a megoldást, akkor töröld ki a források elejéről a következő sorokat:

package webotlet_e05maj_lotto;

A megoldásban csak egy osztály található, mivel a feladat egy kétdimenziós tömb típusfeladat, így nincs szükség külön osztályra. Akkor lássuk a megoldást:

/**
 *
 * @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");
    }
  }
}

4 Replies to “Java programozás – 2005 májusi emelt informatika érettségi programozási feladatának megoldása”

  1. for( int sz : szamokDb )
    {
    if( sz == 0 )
    {
    van = true;
    break;
    }
    Ez a rész mit csinál? Minden egyes hét minden számát végignézi 1-tól 90-ig a két for ciklus, de mi alapján találja meg az egyezést? Ezt nem értem.

    • A szamokDb tömbben az található, hogy az egyes számokból melyiket hányszor húzták ki. Itt azt keresem meg, hogy van-e olyan szám, amit egyszer sem húztak ki. A többszörös megszámlálás leckében írom le, hogyan lehet ilyen szamokDb tömbnek megfelelő szerkezetet használni.

  2. 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");
    Ezt kifejtené valaki, hogy működik? Egyáltalán nem értem. Főleg ha kiíratom a szamokDb[i] értékét is: 4 2 2 6 1 0 2 1 3 0 5 6 5 0 4 3 5 3 4 2 2 1 3 2 2 2 2 4 1 5 5 0 2 4 1 6 5 2 3 2 1 4 3 2 4 Ezt kapom meg. Ebből hogy lesz 126? Mit mutatnak ezek a számok?

    • A számokDb tömb azt tárolja, hogy melyik számból mennyit húztak ki. Kicsit át fogom dolgozni a megoldást, hogy az intervallum eltolás miatt egyértelműbb legyen. Elég régi megoldás, kicsit modernizálni kellene 🙂

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

*

Ez az oldal az Akismet szolgáltatást használja a spam csökkentésére. Ismerje meg a hozzászólás adatainak feldolgozását .