Java programozás – 2017 októberi emelt informatika érettségi – hiányzások (1. verzió)

A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. Ez a megoldás tömbbel dolgozik. A 7. feladat megoldása borzasztóan körülményes tömbök használata miatt. A listás megoldás ezt a feladatot drasztikusan leegyszerűsíti majd.

Adattároló osztály:

package webotlet_17okt_hianyzasok;

public class Hianyzo
{
  private String nev;
  private int honap;
  private int nap;
  private String hianyzas;
  
  public Hianyzo(String[] tomb, String datum)
  {
    nev = tomb[0] + " " + tomb[1];
    String[] tmp = datum.split(" ");
    honap = Integer.parseInt(tmp[1]);
    nap = Integer.parseInt(tmp[2]);
    hianyzas = tomb[2];
  }

  public String getNev()
  {
    return nev;
  }

  public int getHonap()
  {
    return honap;
  }

  public int getNap()
  {
    return nap;
  }

  public String getHianyzas()
  {
    return hianyzas;
  }

  @Override
  public String toString()
  {
    return "Hianyzo{" + "nev=" + nev + ", honap="
      + honap + ", nap=" + nap + ", hianyzas="
      + hianyzas + '}';
  }
}

A feladat megoldásai:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_17okt_hianyzasok;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;

public class Webotlet_17okt_hianyzasok
{

  public static void main(String[] args)
  {
    Hianyzo[] hianyzasok = null;
    
    try
    {
      RandomAccessFile raf = new RandomAccessFile("naplo.txt", "r");
      String sor;
      int db = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        if( sor.charAt(0) != '#' )
        {
          db++;
        }
      }
      
      hianyzasok = new Hianyzo[db];
      raf.seek(0);
      
      int hely = 0;
      String datum = "";
      for( sor = raf.readLine();sor != null; sor = raf.readLine() )
      {
        if( sor.charAt(0) == '#' )
        {
          datum = sor;
        }
        else
        {
          hianyzasok[hely] = new Hianyzo(sor.split(" "), datum);
          hely++;
        }
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
    
//    for( int i = 0; i < hianyzasok.length; i++ )
//    {
//      System.out.println(hianyzasok[i].toString());
//    }
    
    System.out.println("2. feladat");
    System.out.println("A naploban " + hianyzasok.length
      + " bejegyzes van.");
    
    System.out.println("3. feladat");
    int igazolt = 0;
    int igazolatlan = 0;
    for( int i = 0; i < hianyzasok.length; i++ )
    {
      for( int j = 0; j < 7; j++ )
      {
        if( hianyzasok[i].getHianyzas().charAt(j) == 'X' )
        {
          igazolt++;
        }
        else if( hianyzasok[i].getHianyzas().charAt(j) == 'I')
        {
          igazolatlan++;
        }
      }
    }
    System.out.println("Az igazolt hianyzasok szama "
      + igazolt + ", az igazolatlanoke " + igazolatlan + " ora.");
    
    System.out.println("5. feladat");
    Scanner sc = new Scanner(System.in);
    System.out.print("A honap sorszama=");
    int honap = sc.nextInt();
    System.out.print("A nap sorszama=");
    int nap = sc.nextInt();
    System.out.println("Az adott napon " + hetnapja(honap, nap) + " volt.");
    
    System.out.println("6. feladat");
    sc = new Scanner(System.in);
    System.out.print("A nap neve=");
    String napnev = sc.nextLine();
    System.out.print("Az ora sorszama=");
    int sorszam = sc.nextInt();
    
    int hianyzasDb = 0;
    for( int i = 0; i < hianyzasok.length; i++ )
    {
      if( hetnapja(hianyzasok[i].getHonap(), hianyzasok[i].getNap()).equals(napnev) )
      {
        if( hianyzasok[i].getHianyzas().charAt(sorszam - 1) == 'X'
          || hianyzasok[i].gethianyzas().charAt(sorszam - 1) == 'I' )
        {
          hianyzasDb++;
        }
      }
    }
    System.out.println("Ekkor osszesen " + hianyzasDb + " ora hianyzas tortent.");
    
    System.out.println("7. feladat");
    
    // kivalogatom az egyedi neveket
    String[] nevek = new String[hianyzasok.length];
    nevek[0] = hianyzasok[0].getNev();
    int hely = 1;
    for( int i = 1; i < hianyzasok.length; i++ )
    {
      boolean benne = false;
      for( int j = 0; j < hely; j++ )
      {
        if( nevek[j].equals(hianyzasok[i].getNev()) )
        {
          benne = true;
          break;
        }
      }
      if( benne == false )
      {
        nevek[hely] = hianyzasok[i].getNev();
        hely++;
        
      }
    }
    
    // a hely valtozo azt is jelenti, hogy
    // hany valodi nev van a nevek tombben
    int[] diakHianyzas = new int[hely];
    for( int i = 0; i < hianyzasok.length; i++ )
    {
    // megkeresem a hianyzashoz tartozo nevet a nevek tombben
    // amikor megtalaltam, a diakhianyzas azonos helyere
    // megszamolom az adott diak hianyzasat
      for( int j = 0; j < hely; j++ )
      {
        if( nevek[j].equals(hianyzasok[i].getNev()) )
        {
          for( int k = 0; k < hianyzasok[i].getHianyzas().length(); k++ )
          {
            if( hianyzasok[i].getHianyzas().charAt(k) == 'X'
              || hianyzasok[i].getHianyzas().charAt(k) == 'I' )
            {
              diakHianyzas[j]++;
            }
          }
          break;
        }
      }
    }
    
    for( int i = 0; i < diakHianyzas.length; i++ )
    {
      System.out.println(nevek[i] + " " + diakHianyzas[i]);
    }
    
    int max = 0;
    for( int i = 1; i < hely; i++ )
    {
      if( diakHianyzas[i] > diakHianyzas[max] )
      {
        max = i;
      }
    }
    
    System.out.print("A legtobbet hianyzo tanulok: ");
    for( int i = 0; i < hely; i++ )
    {
      if( diakHianyzas[i] == diakHianyzas[max] )
      {
        System.out.print(nevek[i] + " ");
      }
    }
    System.out.println();
  }
  
  // 4. feladat
  public static String hetnapja(int honap, int nap)
  {
    String[] napev = {"vasarnap","hetfo","kedd","szerda"
      ,"csutortok","pentek","szombat"};
    int[] napszam = {0,31,59,90,120,151,181,212,243,273,304,335};
    int napsorszam = (napszam[honap-1] + nap) % 7;
    return napev[napsorszam];
  }
}

Ha hibát találsz benne, kérlek jelezd!

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 .