Érettségi feladat
SMS
2008-05-19 - emelt szintű érettségi

Esemes Ernő szenvedélyes SMS-küldő, ezért a MaMobil nevű cég tesztelésre kérte fel. Ehhez egy új, kézreálló telefont adnak, melynek tesztüzemben egyetlen hátránya, hogy legfeljebb az először érkező 10 darab, egyenként legfeljebb 100 karakteres üzenetet tud eltárolni. Ha ettől több üzenet van, akkor azokat korlátlan számban a szolgáltató őrzi meg a hangpostához hasonlóan, tehát azokhoz csak bizonyos díj fejében juthat hozzá.

Feladat: https://www.oktatas.hu/pub_bin/dload/kozoktatas/erettsegi/feladatok2008tavasz/e_info_08maj_fl.pdf 
Az üzenetek nem tartalmazhatnak ékezetes karaktereket. Az sms.txt állomány első sorában az a k szám olvasható, amely megadja, hogy hány üzenet érkezett a készülékre a mai napon. Az érkező üzenetek száma legalább egy, de nem haladja meg a 100 darabot. Minden üzenethez 2 sor tartozik. Az első sor szerkezete a következő: először az érkezés órája (szám), érkezés perce (szám), telefonszám (pontosan 9 jegyű szám), a másodikban pedig az üzenet (legfeljebb 100 karakternyi szöveg) található. Az állományban az üzenetek számát követően k×2 sor szerepel. Az üzenetek érkezési idő szerint növekvően rendezettek.
  
Például:
 
 Készítsen programot sms néven, amely az alábbi kérdésekre válaszol! Ügyeljen arra, hogy a program forráskódját a megadott helyre mentse! A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát! (Például 3. feladat: )

1. feladat
Olvassa be az sms.txt állományban talált adatokat, s annak felhasználásával oldja meg a következő feladatokat! Ha az állományt nem tudja beolvasni, akkor a benne található adatok közül az első tíz üzenet adatait jegyezze be a programba, s úgy oldja meg a feladatokat. Ez egy az eddigiektől eltérő fájl beolvasást kíván, mert egy ciklusban két sort is illene beolvasni. Természetesen másként is meg lehet oldani, de így legalább a readline() függvényt is be tudom mutatni.
Magyarázat:
Az állományokat, csak szekvenciálisan tudjuk olvasni. Ehhez minden programozási nyel egy rekord léptetőt alkalmaz, amely ha egy sort beolvasunk automatikusan a következő sorra lép. Így minden olvasás után a következő sor olvasása következik. smsSzam = int(smses.readline().strip()) az első sort vagyis a 30-at olvassa be az sms.txt-ből. Az ezt követő for ciklus első readline() utasítása, már az állomány következő sorát adja eredményül. Ezt a split("" "") függvénnyel szétszedem egy listába (óra, perc, telefonszám). Ezek után a listához hozzáadom még az sms.txt következő sorát, ami az üzenet. Az így kapott listát teszem az smsList listába. Így ennek minden egyes sora egy listát (óra, perc, telefonszám)  és az üzenetet fogja tartalmazni, az összes számomra fontos adatot. A ciklusmag utolsó sora egy nem túl elegáns megoldás, mert az egySms lista objektumot kiürítem, de ez így nem módosítja az smsList listában lévő objektumokat

2. feladat
A fájlban tárolt utolsó üzenet érkezésekor melyik üzenet a legfrissebb a telefon memóriájában? Írja az üzenet szövegét a képernyőre!
Mivel az smsList egy sora egy listát és egy üzenetet tartalmaz ezért a 2. elem (index = 1) az üzenet az utolsó sorban. Az utolsoSMS a lista hossza, de a lista utolsó indexű tagja eggyel kevesebb.

3. feladat
Adja meg a leghosszabb és a legrövidebb üzenetek adatait! Ha több azonos hosszúságú üzenet van, akkor elegendő csak egyet-egyet megadnia! A képernyőn óra, perc, telefonszám, üzenet formában jelenítse meg az adatokat! Ez egy kiváló példa a maximum kiválasztás tételére, amely pontosan ugyan olyan mint a minimum kiválasztás tétele csak egy relációs jel a pici különbség. Tegyük fel, hogy a lista legelső eleme a legnagyobb adat. Meg kell vizsgálni az összes többi elemet a listában, össze kell hasonlítani az elsővel. Amennyiben találunk nála nagyobbat, az lesz az újabb feltételezett maximumértékünk. Az összehasonlítást a lista utolsó eleméig el kell végezni.
MAXIMUMKIVÁLASZTÁS tétele
Adott egy N elemű A sorozat. Adjuk meg a sorozat legnagyobb elemét.
Eljárás:
	INDEX:=0
	Ciklus I=1-től N-ig
		Ha A(INDEX) < A(I) akkor INDEX:=I
	Ciklus vége
        Ki(INDEX)
Eljárás vége.
A megoldás fele:
Szerintem menni fog a legrövidebb egyedül is! :) Folytatása következik....