Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package szakmaierettsegi;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.RandomAccessFile;
- import java.text.DecimalFormat;
- public class footgolf
- {
- static Adatok adattar[]= new Adatok[500]; // ADAT SZERKEZET, AMI MAXIMUM 500 SOR ELTÁROLÁSÁRA ALKALMAS!
- static int n= 0;// - Ez fogja mutatni azt,ahova ténylegesen adatot tartalmaz.
- public static void main(String[] args) throws IOException
- {
- feladat2();
- feladat3();
- feladat4();
- // Az 5. feladathoz tartozó függvényt "osszpontszam" néven lehet megtalálni.
- feladat6();
- feladat7();
- feladat8();
- }
- private static void feladat8() {
- // Készítsen statisztikát a minta szerint, hogy az egyes egyesületekből hány versenyző indult
- // a bajnokságon! Az egyesületen kívül indult versenyzőknél az egyesületnél az „n.a.” adat
- // szerepel. Ezek a versenyzők és az egy vagy két versenyzőt indító egyesületek ne
- // szerepeljenek a statisztikában!
- // Ez egy kicsit nagyobb munka,de egyszerűbb lesz ha kategória szerint rendezzük az adattárat
- String csere1;
- String csere2;
- String csere3;
- int csere4[]= new int [8];
- int csere5;
- for (int i = 0; i < n; i++) {
- for (int j = i+1; j < n; j++) {
- if (adattar[i].egyesulet.compareTo(adattar[j].egyesulet) >0) {
- csere1=adattar[j].nev;
- adattar[j].nev=adattar[i].nev;
- adattar[i].nev=csere1;
- csere2=adattar[j].kategoria;
- adattar[j].kategoria=adattar[i].kategoria;
- adattar[i].kategoria=csere2;
- csere3=adattar[j].egyesulet;
- adattar[j].egyesulet=adattar[i].egyesulet;
- adattar[i].egyesulet=csere3;
- csere4=adattar[j].fordulok;
- adattar[j].fordulok=adattar[i].fordulok;
- adattar[i].fordulok=csere4;
- csere5=adattar[j].osszpontszam;
- adattar[j].osszpontszam=adattar[i].osszpontszam;
- adattar[i].osszpontszam=csere5;
- }
- }
- }
- System.out.println("8. feladat: Egyesület statisztika");
- int tagok=1;
- for (int i = 1; i < n; i++) { // Most hogy rendezett,összeszámoljuk hogy hány tagja van egy-egy résztvevő egyesületnek.
- if (i-11 < n) {
- if (adattar[i].egyesulet.equals(adattar[i-1].egyesulet)) {
- tagok++;
- }else {
- if (tagok > 2 && !(adattar[i-1].egyesulet.equals("n.a."))) {
- System.out.println(" "+adattar[i-1].egyesulet+" - "+tagok+" fő");
- }
- tagok=1;
- }
- }
- }
- }
- private static void feladat7() throws IOException {
- // Készítsen szöveges állományt osszpontFF.txt néven, amelybe kiírja a felnőtt férfi
- // kategóriában indult versenyzők nevét és a bajnokságban elért összpontszámát! A sorokban
- // az adatokat pontosvesszővel válassza el egymástól a minta szerint!
- // RandomAccessfile,megint.
- RandomAccessFile output= new RandomAccessFile("osszpontFF.txt", "rw");
- for (int i = 0; i < n; i++) {
- if (adattar[i].kategoria.equalsIgnoreCase("Felnott ferfi")) {
- output.writeBytes(adattar[i].nev+";"+adattar[i].osszpontszam);
- output.writeBytes("\n"); // sortörés
- }
- }
- }
- private static void feladat6() {
- // Határozza meg és írja ki a minta szerint a 2016-os footgolf bajnokság legtöbb pontot
- // szerzett női bajnokát! Feltételezheti, hogy legalább egy női induló volt a bajnokságon, és
- // nem alakult ki holtverseny.
- // Egyszerű ismét,maximum keresése +1 feltétellel.
- // Itt előtte hozzá kell rendelni az összpontszámot,ezt jobb ha megtesszük most az ÖSSZESNÉL,időt spórolunk ezzel is.
- for (int i = 0; i < n; i++) {
- adattar[i].osszpontszam=osszpontszam(adattar[i].fordulok);
- } // Most hogy kész,már csak maximum kell
- System.out.println("6. feladat: A bajnok női versenyző");
- int max=0;
- int maxpos=0;
- for (int i = 0; i < n; i++) {
- if (adattar[i].osszpontszam > max && adattar[i].kategoria.equalsIgnoreCase("Noi")) {
- max=adattar[i].osszpontszam;
- maxpos=i;
- }
- }
- System.out.println(" Név:"+adattar[maxpos].nev);
- System.out.println(" Egyesület:"+adattar[maxpos].egyesulet);
- System.out.println(" Összpont:"+adattar[maxpos].osszpontszam);
- }
- private static int osszpontszam( int fordulok[]) {
- // 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:
- // Két legrosszabb pontás kiesik
- // Ha ez a két legrosszabb nem nulla akkor 10-10 pont jár érte.
- // A függvénynek a bemeneti értéke "fordulok" nevű tömb,amivel majd végig dolgozni fogunk.
- int minpos1=0;
- int minpos2=0;
- int min1=15000; // Megadok egy értéket,aminél tuti van kisebb
- int min2=15000; // Is.
- // Megkeressük az első minimumot
- for (int j = 0; j < fordulok.length; j++) {
- if (min1 > fordulok[j]) {
- min1 = fordulok[j];
- minpos1= j;
- }
- }
- // Megkeressük a második minimumot,ami nem lehet az első helyén,de lehet ugyan olyan értéke.
- for (int j = 0; j < fordulok.length; j++) {
- if (fordulok[j] < min2 && j != minpos1) {
- min2= fordulok[j];
- minpos2=j;
- }
- }
- if (fordulok[minpos1] != 0) {
- fordulok[minpos1]= 10; // Ha ez az érték nem nulla, akkor 10 pontot kap érte.
- }
- if (fordulok[minpos2] != 0) {
- fordulok[minpos2]= 10; // Szintén.
- }
- int osszpontszam=0;
- //Most számoljuk ki az összpontszámot
- for (int i = 0; i < fordulok.length; i++) {
- osszpontszam=osszpontszam+fordulok[i];
- }
- return osszpontszam;// Visszaadjuk a pontszámot!
- }
- private static void feladat4() {
- // Határozza meg és írja ki a képernyőre a minta szerint a női versenyzők arányát az összes
- // versenyzőszámhoz képest! A százalékos értéket két tizedesjegy pontossággal jelenítse
- // meg!
- // Elsőnek meg kell számolni a nőket,ezt a "kategoria" nevű Stringben fogjuk találni.
- 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..
- double arany; // Ezáltal fogjuk megkapni majd az arányt.
- for (int i = 0; i < n; i++) { // Csak n-ig(!!!),mert n után már nincs adat.
- if (adattar[i].kategoria.equalsIgnoreCase("Noi")) { // Nem muszáj IgnoreCase-t odaírni jelen esetben,mivel pontosan tudjuk hogy nagybetűvel van írva.
- nok++;
- }
- }
- // Most határozzuk meg az arányt!
- arany= nok/n*100; // Ez így nem két tizedesjegy,hanem 15. Ezért kell a DecimalFormat.
- DecimalFormat df= new DecimalFormat("#.##"); // Ha ezzel a változóval fogjuk kombinálni akkor már két tizedesjegy lesz. A "#.##" erre utal.
- String szazalekban= df.format(arany); // Így már formázva van!
- System.out.println("4. feladat: A női versenyzők aránya:"+szazalekban+"% ");
- }
- private static void feladat3() {
- // Határozza meg és írja ki a képernyőre a minta szerint, hogy hány versenyző indult összesen
- // a két kategóriában a bajnokságon!
- System.out.print("3. feladat:");
- // Mivel minden sor egy versenyző adatát tartalmzza,ezért egyszeű dolgunk van.
- System.out.println("Versenyzők száma:"+n);
- }
- private static void feladat2() throws IOException {
- // Olvassa be a fob2016.txt állományban lévő adatokat és tárolja el egy olyan
- // adatszerkezetben, amely a további feladatok megoldására alkalmas! A fájlban legfeljebb
- // 500 sor lehet.
- String sor;
- String sor1[]= new String [11];
- RandomAccessFile raf= new RandomAccessFile("fob2016.txt", "r"); // RAF- Mert egyszerűbb,rugalmasabb.
- // ADAT FELTÖLTÉS!
- for(sor=raf.readLine(); sor!= null; sor=raf.readLine()){
- Adatok egyAdat= new Adatok();
- sor1= sor.split(";");
- egyAdat.nev= sor1[0];
- egyAdat.kategoria= sor1[1];
- egyAdat.egyesulet= sor1[2];
- int counter1=3;
- for(int i=0; i < 8; i++) { // Butaság lenne egyenként feltölteni minden elemet.
- egyAdat.fordulok[i]=Integer.parseInt(sor1[counter1]);
- counter1++;
- }
- egyAdat.osszpontszam=0; // Ezt nem töltöm fel,mert majd az 5. feladat függvényében megteszem.
- adattar[n]= egyAdat;
- n++;
- }
- }
- }
- class Adatok {
- // ADAT OSZTÁLY
- String nev;
- String kategoria;
- String egyesulet;
- int[] fordulok= new int [8]; // Nincs kedvem egyenként felírni a 8 fordulót,egyszerűbb egy belső tömb.
- // ÉS KÖNNYEBB LESZ MAJD VELE SZÁMOLNI!!! - Mert 5. feladattól számolás van ezekkel.
- int osszpontszam; // Ez is majd kelleni fog,hogy kinek mi az egyéni pontszáma.
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement