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; } }