Java programozás – 2014 októberi emelt informatika érettségi programozási feladatának megoldása

Egy Krisztián nevű kedves olvasóm beküldött egy megoldást a 2014 októberi emelt szintű informatika érettségi feladatra. A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. A megoldást nem ellenőriztem le. A forrásból a lényegi információt nem tartalmazó kommenteket töröltem, valamint az oldalon található kódok tördelési mintája alapján újraformáztam. Néhány sort újratördeltem, hogy a sorok hosszúsága miatt a kód olvashatóbb legyen a lapon. Az eredeti megoldást innen letölthető formában is megtalálod.

A letölthető tömörített állományokban megtalálod a NetBeans-ben megnyitható projecteket. 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 nezoter;

A megoldás forrása:

package nezoter;

import java.io.*;
import java.util.Scanner;

/**
 *
 * @author ikrisztian
 * @version v2.0
 */
public class Nezoter
{

  public static void main(String[] args)
  {
    RandomAccessFile fogRaf, katRaf;
    String sor;
    int ind = 0;
    String[] foglaltsag = new String[15];
    String[] kategoria = new String[15];
    try
    {

      System.out.println( "1. feladat" );
      fogRaf = new RandomAccessFile( "foglaltsag.txt", "r" );
      for( sor = fogRaf.readLine(); sor != null; sor = fogRaf.readLine() )
      {
        foglaltsag[ind++] = sor;
      }
      ind = 0;
      katRaf = new RandomAccessFile( "kategoria.txt", "r" );
      for( sor = katRaf.readLine(); sor != null; sor = katRaf.readLine() )
      {
        kategoria[ind++] = sor;
      }

      System.out.println( "2. feladat" );
      System.out.println( "Kerem a sor szamat: " );
      Scanner sc = new Scanner( System.in );
      int x = sc.nextInt();
      System.out.println( "Kerem a szek szamat: " );
      int y = sc.nextInt();
      System.out.println( "A megadott szek "
        + ((foglaltsag[x - 1].charAt( y - 1 ) == 'x')
          ? "foglalt." : "szabad.") );

      System.out.println( "3. feladat" );
      int sold = 0;
      for( String s : foglaltsag )
      {
        sold = sold + countMatches( s, 'x' );
      }
      double ratio = (sold / (15.0 * 20.0)) * 100;
      int intRatio = (int) ratio;
      System.out.println( "Az eloadasra eddig " + sold
        + " jegyet adtak el, ez a nezoter " + intRatio + "%-a." );

      System.out.println( "4. feladat" );
      int[] sumofCat = new int[5];
      for( int i = 0; i < foglaltsag.length; ++i )
      {
        for( int j = 0; j < foglaltsag[i].length(); ++j )
        {
          if( foglaltsag[i].charAt( j ) == 'x' )
          {
            sumofCat[Character.getNumericValue( kategoria[i].charAt( j ) ) - 1]++;
          }
        }
      }
      int maxInd = 0;
      for( int i = 1; i < sumofCat.length; ++i )
      {
        if( sumofCat[maxInd] < sumofCat[i] )
        {
          maxInd = i;
        }
      }
      System.out.println( "A legtobb jegyet a(z) " + (maxInd + 1)
        + ". arkategoriaban ertekesitettek." );

      System.out.println( "5. feladat" );
      int[] szorzo = { 5000, 4000, 3000, 2000, 1500 };
      int sum = 0;
      for( int i = 0; i < foglaltsag.length; ++i )
      {
        for( int j = 0; j < foglaltsag[i].length(); ++j )
        {
          if( foglaltsag[i].charAt( j ) == 'x' )
          {
            sum = sum + szorzo[Character.getNumericValue( kategoria[i].charAt( j ) ) - 1];
          }
        }
      }
      System.out.println( "A szinhaz bevetele a pillanatnyilag "
        + "eladott jegyek alapjan " + sum + "Ft lenne." );

      System.out.println( "6. feladat" );
      int solo = 0;
      for( int i = 0; i < foglaltsag.length; ++i )
      {
        if( foglaltsag[i].startsWith( "ox" ) )
        {
          solo++;
        }
        if( foglaltsag[i].endsWith( "xo" ) )
        {
          solo++;
        }
        for( int j = 0; j < foglaltsag[i].length() - 2; ++j )
        {
          if( foglaltsag[i].substring( j, j + 3 ).equals( "xox" ) )
          {
            solo++;
          }
        }
      }
      System.out.println( "A nezoteren " + solo + " db egyedulallo ures hely van." );

      System.out.println( "7. feladat" );
      StringBuilder ujSor = new StringBuilder();
      RandomAccessFile ki = new RandomAccessFile( "szabad.txt", "rw" );
      ki.setLength( 0 );
      for( int i = 0; i < foglaltsag.length; ++i )
      {
        for( int j = 0; j < foglaltsag[i].length(); ++j )
        {
          ujSor.append( foglaltsag[i].charAt( j ) == 'x'
            ? "x" : kategoria[i].charAt( j ) );
        }
        ujSor.append( System.getProperty( "line.separator" ) );
        ki.writeBytes( ujSor.toString() );
        ujSor.setLength( 0 );
      }
    }
    catch( IOException e )
    {
      System.out.println( "Hiba!" );
    }
  }

  public static int countMatches(String s, Character c)
  {
    int sum = 0;
    for( int i = 0; i < s.length(); ++i )
    {
      sum = sum + ((s.charAt( i ) == c) ? 1 : 0);
    }
    return sum;
  }
}

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

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

*

Ez a weboldal az Akismet szolgáltatását használja a spam kiszűrésére. Tudjunk meg többet arról, hogyan dolgozzák fel a hozzászólásunk adatait..