Java programozás – 2010 októberi emelt informatika érettségi – anagramma (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.
Adattároló osztály:

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

public class Szo
{
  private String szo;
  private String abc;
  
  public Szo(String szo)
  {
    this.szo = szo;
    
    // minden szo betuit mar a letrehozasakor rendezzuk
    char[] tomb = szo.toCharArray();
    for( int i = 0; i < tomb.length-1; i++ )
    {
      for( int j = i + 1; j < tomb.length; j++ )
      {
        if(tomb[i] > tomb[j])
        {
          char csere = tomb[i];
          tomb[i] = tomb[j];
          tomb[j] = csere;
        }
      }
    }
    abc = new String(tomb);
  }

  public String getAbc()
  {
    return abc;
  }

  public String getSzo()
  {
    return szo;
  }

  @Override
  public String toString()
  {
    return "Szo{" + "szo=" + szo + ", abc=" + abc + '}';
  }
}

A feladat megoldásai:

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

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

public class Webotlet_10okt_anagram
{

  public static void main(String[] args)
  {
    
    System.out.println("1. feladat");
    System.out.println("Adja meg a szoveget:");
    Scanner sc = new Scanner(System.in);
    String szo = sc.nextLine();
    
    char[] betuk = szo.toCharArray();
    
    int[] betukDb = new int[((int)'z') + 1];
    
    for( int i = 0; i < betuk.length; i++)
    {
      betukDb[ (int)betuk[i] ]++;
    }
    
    for( int i = 0; i < betukDb.length; i++ )
    {
      if(betukDb[i] > 0)
      {
        System.out.println(betukDb[i] + " " + (char)i);
      }
    }
    
    RandomAccessFile raf;
    String sor;
    Szo[] szavak = null;
    
    try
    {
      raf = new RandomAccessFile("szotar.txt", "r");
      int db = 0;
      for(sor = raf.readLine(); sor != null; sor = raf.readLine())
      {
        db++;
      }
      raf.seek(0);
      szavak = new Szo[db];
      
      int hely = 0;
      for(sor = raf.readLine(); sor != null; sor = raf.readLine())
      {
        szavak[hely] = new Szo(sor);
        hely++;
      }
      raf.close();
    }
    catch(IOException e)
    {
      System.out.println("HIBA");
    }
    
//    for( int i = 0; i < szavak.length; i++ )
//    {
//      System.out.println(szavak[i].toString());
//    }
    
    try
    {
      RandomAccessFile ki = new RandomAccessFile("abc.txt", "rw");
      ki.setLength(0);
      
      for( int i = 0; i < szavak.length; i++ )
      {
        ki.writeBytes(szavak[i].getAbc() + "\n");
      }
      ki.close();
    }
    catch(IOException e)
    {
      System.out.println("HIBA");
    }
    
    System.out.println("4. feladat");
    
    String szo1;
    String szo2;
    System.out.print("1. szo: ");
    szo1 = sc.nextLine();
    System.out.print("2. szo: ");
    szo2 = sc.nextLine();
    
    if( rendezett(szo1).equals(rendezett(szo2 )) )
    {
      System.out.println("Anagramma");
    }
    else
    {
      System.out.println("Nem anagramma");
    }

    System.out.println("5. feladat Adj meg egy szot!");
      
    Scanner sc2 = new Scanner(System.in);
    String feladat5 = sc2.nextLine();
    
    feladat5 = rendezett(feladat5);
     
    for( int i = 0; i < szavak.length; i++ )
    {
      if( szavak[i].getAbc().equals(feladat5) )
      {
        System.out.println(szavak[i].getSzo());
      }
    }
    
    System.out.println("6. feladat");
    int maxhossz = szavak[0].getSzo().length();
    for( int i = 0; i < szavak.length; i++ )
    {
      if( szavak[i].getSzo().length() > maxhossz )
      {
        maxhossz = szavak[i].getSzo().length();
      }
    }
    
    int db = 0;
    for( int i = 0; i < szavak.length; i++ )
    {
      if( szavak[i].getSzo().length() == maxhossz )
      {
        db++;
      }
    }
    
    Szo[] leghosszabb = new Szo[db];
    int hely = 0;
    for( int i = 0; i < szavak.length; i++ )
    {
      if( szavak[i].getSzo().length() == maxhossz )
      {
        leghosszabb[hely] = szavak[i];
        hely++;
      }
    }
    
    for( int i = 0; i < leghosszabb.length - 1; i++ )
    {
      for( int j = i + 1; j < leghosszabb.length; j++ )
      {
        if( leghosszabb[i].getAbc().compareTo(leghosszabb[j].getAbc()) > 0)
        {
          Szo csere = leghosszabb[i];
          leghosszabb[i] = leghosszabb[j];
          leghosszabb[j] = csere;
        }
      }
    }
    
    for( int i = 0; i < leghosszabb.length; i++ )
    {
      System.out.println(leghosszabb[i].getSzo());
    }
    
    Szo[] rendezett = new Szo[szavak.length];
    
    for( int i = 0; i < szavak.length - 1; i++ )
    {
      for( int j = i + 1; j < szavak.length; j++ )
      {
        if( szavak[i].getSzo().length() > szavak[j].getSzo().length()
          || (szavak[i].getSzo().length() == szavak[j].getSzo().length()
              && szavak[i].getAbc().compareTo(szavak[j].getAbc()) > 0 ) )
        {
          Szo csere = szavak[i];
          szavak[i] = szavak[j];
          szavak[j] = csere;        }
      }
    }
    
    try
    {
      RandomAccessFile ki = new RandomAccessFile("rendezve.txt", "rw");
      ki.setLength(0);
      
      ki.writeBytes(szavak[0].getSzo());
      for( int i = 1; i < szavak.length; i++ )
      {
        if( szavak[i].getAbc().equals(szavak[i - 1].getAbc()))
        {
          ki.writeBytes(" " + szavak[i].getSzo());
        }
        else if( szavak[i].getSzo().length() == szavak[i - 1].getSzo().length() )
        {
          ki.writeBytes("\n" + szavak[i].getSzo());
        }
        else
        {
          ki.writeBytes("\n\n" + szavak[i].getSzo());
        }
      }
      ki.close();
    }
    catch( IOException e )
    {
      System.out.println(e.getMessage());
      System.out.println("HIBA");
    }

  }
  
  // egy tetszoleges szo betuinek abc rendezese
  public static String rendezett( String szo )
  {
    char[] tomb = szo.toCharArray();
    for( int i = 0; i < tomb.length - 1; i++ )
    {
      for( int j = i + 1; j < tomb.length; j++ )
      {
        if(tomb[i] > tomb[j])
        {
          char csere = tomb[i];
          tomb[i] = tomb[j];
          tomb[j] = csere;
        }
      }
    }
    return new String(tomb);
  }
}

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 .