Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.20 KB | None | 0 0
  1. package szakmaierettsegi;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.io.RandomAccessFile;
  6. import java.text.DecimalFormat;
  7.  
  8. public class footgolf
  9. {
  10.     static Adatok adattar[]= new Adatok[500]; // ADAT SZERKEZET, AMI MAXIMUM 500 SOR ELTÁROLÁSÁRA ALKALMAS!
  11.       static int n= 0;// - Ez fogja mutatni azt,ahova ténylegesen adatot tartalmaz.
  12.   public static void main(String[] args) throws IOException
  13.   {
  14.     feladat2();
  15.     feladat3();
  16.     feladat4();
  17.     // Az 5. feladathoz tartozó függvényt "osszpontszam" néven lehet megtalálni.
  18.     feladat6();
  19.     feladat7();
  20.     feladat8();
  21.    
  22.   }
  23. private static void feladat8() {
  24. //  Készítsen statisztikát a minta szerint, hogy az egyes egyesületekből hány versenyző indult
  25. //  a bajnokságon! Az egyesületen kívül indult versenyzőknél az egyesületnél az „n.a.” adat
  26. //  szerepel. Ezek a versenyzők és az egy vagy két versenyzőt indító egyesületek ne
  27. //  szerepeljenek a statisztikában!
  28.    
  29.     // Ez egy kicsit nagyobb munka,de egyszerűbb lesz ha kategória szerint rendezzük az adattárat
  30.     String csere1;
  31.     String csere2;
  32.     String csere3;
  33.     int csere4[]= new int [8];
  34.     int csere5;
  35.    
  36.     for (int i = 0; i < n; i++) {
  37.         for (int j = i+1; j < n; j++) {
  38.             if (adattar[i].egyesulet.compareTo(adattar[j].egyesulet) >0) {
  39.                 csere1=adattar[j].nev;
  40.                 adattar[j].nev=adattar[i].nev;
  41.                 adattar[i].nev=csere1;
  42.                 csere2=adattar[j].kategoria;
  43.                 adattar[j].kategoria=adattar[i].kategoria;
  44.                 adattar[i].kategoria=csere2;
  45.                 csere3=adattar[j].egyesulet;
  46.                 adattar[j].egyesulet=adattar[i].egyesulet;
  47.                 adattar[i].egyesulet=csere3;
  48.                 csere4=adattar[j].fordulok;
  49.                 adattar[j].fordulok=adattar[i].fordulok;
  50.                 adattar[i].fordulok=csere4;
  51.                 csere5=adattar[j].osszpontszam;
  52.                 adattar[j].osszpontszam=adattar[i].osszpontszam;
  53.                 adattar[i].osszpontszam=csere5;
  54.             }
  55.         }
  56.     }
  57.     System.out.println("8. feladat: Egyesület statisztika");
  58.     int tagok=1;
  59.     for (int i = 1; i < n; i++) { // Most hogy rendezett,összeszámoljuk hogy hány tagja van egy-egy résztvevő egyesületnek.
  60.         if (i-11 < n) {
  61.             if (adattar[i].egyesulet.equals(adattar[i-1].egyesulet)) {
  62.                 tagok++;
  63.             }else {
  64.                 if (tagok > 2 && !(adattar[i-1].egyesulet.equals("n.a."))) {
  65.                     System.out.println("        "+adattar[i-1].egyesulet+" - "+tagok+" fő");
  66.                 }
  67.                 tagok=1;
  68.                
  69.                
  70.             }
  71.         }
  72.     }
  73.  
  74.    
  75. }
  76. private static void feladat7() throws IOException {
  77. //  Készítsen szöveges állományt osszpontFF.txt néven, amelybe kiírja a felnőtt férfi
  78. //  kategóriában indult versenyzők nevét és a bajnokságban elért összpontszámát! A sorokban
  79. //  az adatokat pontosvesszővel válassza el egymástól a minta szerint!
  80.     // RandomAccessfile,megint.
  81.    
  82.     RandomAccessFile output= new RandomAccessFile("osszpontFF.txt", "rw");
  83.     for (int i = 0; i < n; i++) {
  84.         if (adattar[i].kategoria.equalsIgnoreCase("Felnott ferfi")) {
  85.             output.writeBytes(adattar[i].nev+";"+adattar[i].osszpontszam);
  86.             output.writeBytes("\n"); // sortörés
  87.         }
  88.     }
  89.    
  90. }
  91. private static void feladat6() {
  92. //  Határozza meg és írja ki a minta szerint a 2016-os footgolf bajnokság legtöbb pontot
  93. //  szerzett női bajnokát! Feltételezheti, hogy legalább egy női induló volt a bajnokságon, és
  94. //  nem alakult ki holtverseny.
  95.    
  96.     // Egyszerű ismét,maximum keresése +1 feltétellel.
  97.     // Itt előtte hozzá kell rendelni az összpontszámot,ezt jobb ha megtesszük most az ÖSSZESNÉL,időt spórolunk ezzel is.
  98.     for (int i = 0; i < n; i++) {
  99.         adattar[i].osszpontszam=osszpontszam(adattar[i].fordulok);
  100.     } // Most hogy kész,már csak maximum kell
  101.     System.out.println("6. feladat: A bajnok női versenyző");
  102.     int max=0;
  103.     int maxpos=0;
  104.    
  105.     for (int i = 0; i < n; i++) {
  106.         if (adattar[i].osszpontszam > max && adattar[i].kategoria.equalsIgnoreCase("Noi")) {
  107.             max=adattar[i].osszpontszam;
  108.             maxpos=i;
  109.         }
  110.     }
  111.     System.out.println("        Név:"+adattar[maxpos].nev);
  112.     System.out.println("        Egyesület:"+adattar[maxpos].egyesulet);
  113.     System.out.println("        Összpont:"+adattar[maxpos].osszpontszam);
  114.    
  115. }
  116. private static int osszpontszam( int fordulok[]) {
  117.     // Ide nem teszem be az 5. feladatot,mert akkor fél óráig kéne görgetni a többi feladatig a lényeg röviden:
  118.     // Két legrosszabb pontás kiesik
  119.     // Ha ez a két legrosszabb nem nulla akkor 10-10 pont jár érte.
  120.    
  121.     //  A függvénynek a bemeneti értéke "fordulok" nevű tömb,amivel majd végig dolgozni fogunk.
  122.    
  123.     int minpos1=0;
  124.     int minpos2=0;
  125.     int min1=15000; // Megadok egy értéket,aminél tuti van kisebb
  126.     int min2=15000; // Is.
  127.     // Megkeressük az első minimumot
  128.         for (int j = 0; j < fordulok.length; j++) {
  129.             if (min1 > fordulok[j]) {
  130.                 min1 = fordulok[j];
  131.                 minpos1= j;
  132.             }
  133.         }
  134.     // Megkeressük a második minimumot,ami nem lehet az első helyén,de lehet ugyan olyan értéke.
  135.         for (int j = 0; j < fordulok.length; j++) {
  136.             if (fordulok[j] < min2 && j != minpos1) {
  137.                 min2= fordulok[j];
  138.                 minpos2=j;
  139.             }
  140.         }
  141.         if (fordulok[minpos1] != 0) {
  142.             fordulok[minpos1]= 10; // Ha ez az érték nem nulla, akkor 10 pontot kap érte.
  143.         }
  144.         if (fordulok[minpos2] != 0) {
  145.             fordulok[minpos2]= 10; // Szintén.
  146.         }
  147.         int osszpontszam=0;
  148.         //Most számoljuk ki az összpontszámot
  149.         for (int i = 0; i < fordulok.length; i++) {
  150.             osszpontszam=osszpontszam+fordulok[i];
  151.         }
  152.         return osszpontszam;// Visszaadjuk a pontszámot!
  153.    
  154.    
  155. }
  156. private static void feladat4() {
  157. //  Határozza meg és írja ki a képernyőre a minta szerint a női versenyzők arányát az összes
  158. //  versenyzőszámhoz képest! A százalékos értéket két tizedesjegy pontossággal jelenítse
  159. //  meg!
  160.    
  161.     // Elsőnek meg kell számolni a nőket,ezt a "kategoria" nevű Stringben fogjuk találni.
  162.     double nok=0; // Azért nem int,mert java8tól valamiért már nem lehet osztani két intet és doubleben tárolni simán valamiért..
  163.     double arany; // Ezáltal fogjuk megkapni majd az arányt.
  164.    
  165.     for (int i = 0; i < n; i++) {               // Csak n-ig(!!!),mert n után már nincs adat.
  166.         if (adattar[i].kategoria.equalsIgnoreCase("Noi")) { // Nem muszáj IgnoreCase-t odaírni jelen esetben,mivel pontosan tudjuk hogy nagybetűvel van írva.
  167.             nok++;
  168.            
  169.         }
  170.     }
  171.     // Most határozzuk meg az arányt!
  172.     arany= nok/n*100; // Ez így nem két tizedesjegy,hanem 15. Ezért kell a DecimalFormat.
  173.    
  174.     DecimalFormat df= new DecimalFormat("#.##"); // Ha ezzel a változóval fogjuk kombinálni akkor már két tizedesjegy lesz. A "#.##" erre utal.
  175.     String szazalekban= df.format(arany); // Így már formázva van!
  176.     System.out.println("4. feladat: A női versenyzők aránya:"+szazalekban+"% ");
  177.    
  178. }
  179. private static void feladat3() {
  180. //  Határozza meg és írja ki a képernyőre a minta szerint, hogy hány versenyző indult összesen
  181. //  a két kategóriában a bajnokságon!
  182.    
  183.     System.out.print("3. feladat:");
  184.    
  185.     // Mivel minden sor egy versenyző adatát tartalmzza,ezért egyszeű dolgunk van.
  186.     System.out.println("Versenyzők száma:"+n);
  187.    
  188.    
  189. }
  190. private static void feladat2() throws IOException {
  191. //  Olvassa be a fob2016.txt állományban lévő adatokat és tárolja el egy olyan
  192. //  adatszerkezetben, amely a további feladatok megoldására alkalmas! A fájlban legfeljebb
  193. //  500 sor lehet.
  194.       String sor;
  195.       String sor1[]= new String [11];
  196.       RandomAccessFile raf= new RandomAccessFile("fob2016.txt", "r"); // RAF- Mert egyszerűbb,rugalmasabb.
  197.  
  198.                         // ADAT FELTÖLTÉS!
  199.   for(sor=raf.readLine(); sor!= null; sor=raf.readLine()){
  200.         Adatok egyAdat= new Adatok();
  201.         sor1= sor.split(";");
  202.         egyAdat.nev= sor1[0];
  203.         egyAdat.kategoria= sor1[1];
  204.         egyAdat.egyesulet= sor1[2];
  205.         int counter1=3;
  206.         for(int i=0; i < 8; i++)  {             // Butaság lenne egyenként feltölteni minden elemet.
  207.         egyAdat.fordulok[i]=Integer.parseInt(sor1[counter1]);
  208.           counter1++;
  209.      
  210.    
  211.         }
  212.         egyAdat.osszpontszam=0; // Ezt nem töltöm fel,mert majd az 5. feladat függvényében megteszem.
  213.         adattar[n]= egyAdat;
  214.         n++;
  215.        
  216.   }
  217.  
  218. }
  219. }
  220. class Adatok {
  221.        // ADAT OSZTÁLY
  222.       String nev;
  223.       String kategoria;
  224.       String egyesulet;
  225.       int[] fordulok= new int [8]; // Nincs kedvem egyenként felírni a 8 fordulót,egyszerűbb egy belső tömb.
  226.                                    // ÉS KÖNNYEBB LESZ MAJD VELE SZÁMOLNI!!! - Mert 5. feladattól számolás van ezekkel.
  227.       int osszpontszam;            // Ez is majd kelleni fog,hogy kinek mi az egyéni pontszáma.
  228.      
  229.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement