A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. Ez az első saját megoldásom, nagyjából nettó 40 perc alatt készült, nem garantálom, hogy hibamentes. Arra mindenképp jó lesz, hogy megnézd, mihez hogyan kellett volna hozzányúlni. Később még letisztázom, és megcsinálom listával is. Ez most csak tömbökkel dolgozik.
A megoldást letöltheted innen.
Ember osztály az adattárolásra és rövidítésre:
package tarsalgo; public class Ember { private int ora; private int perc; private int azon; private String irany; private boolean be; public Ember( String[] tomb ) { ora = Integer.parseInt(tomb[0]); perc = Integer.parseInt(tomb[1]); azon = Integer.parseInt(tomb[2]); irany = tomb[3]; be = tomb[3].equals("be"); } public int getOra() { return ora; } public int getPerc() { return perc; } public int getAzon() { return azon; } public String getIrany() { return irany; } public boolean isBe() { return be; } @Override public String toString() { return "Ember{" + "ora=" + ora + ", perc=" + perc + ", azon=" + azon + ", irany=" + irany + ", be=" + be + '}'; } }
A main()-t tartalmazó osztály, mely a fájlkezelést és a feladatokat tartalmazza:
package tarsalgo; import java.io.IOException; import java.io.RandomAccessFile; import java.util.Scanner; public class Tarsalgo { public static void main(String[] args) { // 1. feladat Ember[] emberek = null; try { RandomAccessFile raf = new RandomAccessFile("ajto.txt","r"); String sor; int db = 0; for( sor = raf.readLine(); sor != null; sor = raf.readLine() ) { db++; } emberek = new Ember[db]; raf.seek(0); db = 0; for( sor = raf.readLine(); sor != null; sor = raf.readLine() ) { emberek[db] = new Ember(sor.split(" ")); db++; } raf.close(); } catch( IOException e ) { System.out.println("HIBA"); } // for( Ember e : emberek ) // { // System.out.println(e); // } // 2. feladat System.out.println("2. feladat"); System.out.println("Az elso belepo: "+emberek[0].getAzon()); int hely = -1; for( int i = emberek.length-1; i >= 0; i-- ) { if( !emberek[i].isBe() ) { hely = i; break; } } if( hely != -1 ) { System.out.println("Az utolso kilepo: "+emberek[hely].getAzon()); } else { System.out.println("Senki nem ment ki a tarsalgobol."); } // 3. feladat int max = 0; for( int i = 0; i < emberek.length; i++ ) { if( emberek[i].getAzon() > max ) { max = emberek[i].getAzon(); } } int[] darabok = new int[max+1]; for( int i = 0; i < emberek.length; i++ ) { darabok[emberek[i].getAzon()]++; } try { RandomAccessFile ki = new RandomAccessFile("athaladas.txt","rw"); for( int i = 1; i < darabok.length; i++ ) { if( darabok[i] != 0 ) { ki.writeBytes(i+" "+darabok[i]+"\n"); } } ki.close(); } catch( IOException e ) { System.out.println("HIBA"); } // 4. feladat System.out.println("4. feladat"); int[] bent = new int[max+1]; for( int i = 0; i < emberek.length; i++ ) { if( emberek[i].isBe() ) { bent[emberek[i].getAzon()]++; } else { bent[emberek[i].getAzon()]--; } } System.out.print("A vegen a tarsalgoban voltak: "); for( int i = 1; i < bent.length; i++ ) { if( bent[i] > 0 ) { System.out.print(i+" "); } } System.out.println(); // 5. feladat System.out.println("5. feladat"); int[] bentvannak = new int[emberek.length]; int elozo = 0; for( int i = 0; i < emberek.length; i++ ) { if( emberek[i].isBe() ) { bentvannak[i] = elozo + 1; } else { bentvannak[i] = elozo - 1; } elozo = bentvannak[i]; } max = 0; for( int i = 1; i < bentvannak.length; i++ ) { if( bentvannak[i] > bentvannak[max] ) { max = i; } } System.out.println("Peldaul: "+emberek[max].getOra()+":"+ emberek[max].getPerc()+"-kor voltak a legtobben a tarsalgoban."); // 6. feladat System.out.println("6. feladat"); System.out.print("Adja meg egy szemely azonositojat: "); Scanner sc = new Scanner(System.in); int azon = Integer.parseInt(sc.nextLine()); // 7. feladat System.out.println("7. feladat"); for( int i = 0; i < emberek.length; i++ ) { if( emberek[i].getAzon() == azon ) { if( emberek[i].isBe() ) { System.out.print(emberek[i].getOra()+":"+ emberek[i].getPerc()+"-"); } else { System.out.println(emberek[i].getOra()+":"+ emberek[i].getPerc()); } } } System.out.println(); // 8. feladat System.out.println("8. feladat"); int osszeg = 0; int be = 0; int ki = 0; boolean bentvan = false; for( int i = 0; i < emberek.length; i++ ) { if( emberek[i].getAzon() == azon ) { if( emberek[i].isBe() ) { be = emberek[i].getOra()*60+emberek[i].getPerc(); bentvan = true; } else { osszeg += (emberek[i].getOra()*60+emberek[i].getPerc()) - be; bentvan = false; } } } // ha a legvegen nem jott ki, akkor az utolso bemenetel // es a 15:00 kozotti idot hozzaadjuk az ossz idejehez if( bentvan ) { osszeg += (15*60)-be; } System.out.print("A(z) "+azon+". szemely osszesen "+osszeg+ " percet volt bent"); if( bentvan ) { System.out.println(", a megfigyeles vegen a tarsalgoban volt."); } else { System.out.println("."); } } }
Ha hibát találsz benne, kérlek jelezd!
Kedves Csaba!
Lenne kedved esetleg az informatika ismeretek programozási feladatokat is megoldani? 🙂 Ott már van objektumorientált java is, az emelt szintű feladatban.
Köszi, üdv,
Lili
Alapvetően nem kedv kérdése a dolog, inkább időszűkében vagyok 🙂 Lenne valami konkrét kérdésed?
Nagyon szépen köszönöm az összefoglalót,rendkívül nagy segítség nekem ez a topic és úgy az egész oldal,most hogy próbálok felkészülni az emelt szintű informatikai érettségire(előrehozott). Viszont miközben gyakoroltam támadt bennem pár kérdés. Ezek az alábbiak:
1,
A 2. feladat B részénél nem jobb megoldás simán az alábbi..?
for (int i = 0; i < adatbazis.length; i++) {
if (!adatbazis[i].Isbe()) {
max=i;
}
}
2,
A 3. feladatnál a feladat azt írja hogy létező azonosítókhoz kell darabszám,viszont a megadott módszerrel olyan azonosítókhoz is kiír darabszámot,ami a fájlban nem létezik. Én ezt az alábbi módon oldottam meg (Pl.: Nincs kilences azonosító)
if (darabok[i] != 0) {
ki.writeBytes(i+" "+darabok[i]+"\n");
}
3,
A hatodik feladatnál,a feltételezheti hogy olyan azonosítót adnak meg ami szerepelnél pont jár,ha az érettségiző nem feltételezi hogy tudják hogy mi szerepel és mi nem 😀
Én az alábbi módszerrel oldottam meg 😀
boolean match=false;
for (int i = 0; i < emberek.length; i++) {
if (azonosito==emberek[i].getAzon()) {
match=true;
}
}
if (!match) {
System.out.println("Kérem válasszon egy olyan azonosítót,amely szerepel a listán!");
azonosito=0;
System.out.print("Adja meg a személy azonosítóját!");
azonosito=Integer.valueOf(sc.nextLine());
}
Kidolgoztam teljesen a témát,nagyon sokat jelentene ha tudna vetni rá egy pillantást hogy valóban jól-e oldottam meg a dolgokat az érettségi feladatokhoz hívően.
Még egyszer nagyon szépen köszönöm a cikkeket a programozásról JAVA környezetben,rendkívül sokat segítettek és magabiztosabban fogok neki kezdeni az érettséginek májusban! 😀
Köszönettel,
Márk
Részenként válaszolnék, mert most erre van időm 🙂
Az én megoldásomból hibás, mert hiányzik az, hogy a végéről indulva ha megvan az első kilépő (aki az utolsó), akkor meg kellene állni, mert felesleges tovább keresni. (valamiért elfelejtettem)
A Te megoldásod ilyenformán egyszerűbb, mert nem mindenkinek egyértelmű, hogyan kell a ciklussal a vége felől bejárni egy tömböt. Ott viszont nem szabad megállni találatkor, mert az utolsóra van szükség.
Ez a megoldás viszont pazarló, mert minek menjünk végig az egész tömbön az utolsót keresve, ha a végéről indulva az első találat egyben az utolsó (feltételezve, hogy akkor meg is állunk).
Végszóként mindkét megoldás helyes, nézőpont kérdése, hogy melyiket tekintjük jobbnak. Kezdőknek a tied egyszerűbb, hatékonyság szerint az enyém jobb.
A 3. feladattal kapcsolatban igazad van, elnéztem, javítom 🙂 A 8-as azonosító pl hiányzik, és a feladatból következik, hogy csak olyan emberrel kell foglalkozni, aki vagy bement, vagy kijött. Akinek nincs mozgása, az nem létezik.
6. A feladatban ahogy én látom, nem jár pont azért, ha megoldja a nem létező azonosító megadását és ellenőrzését.
A megadott megoldással az a gond, hogy csak egy hibásan megadott azonosítót kezel. És ha kétszer adja meg rosszul? Írja meg ennek megfelelően, addig nem adnám meg itt a megoldást a problémára 🙂