Python az iskolában Wiki
Advertisement

2008-as emelt szintű számtech érettségi 4.sz programozás feladata

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, amelynek 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á. 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. - 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!

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!,

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!

4. feladat - Készítsen karakterhossz szerinti statisztikát: 1-20, 21-40, 41-60, 61-80, 81-100! Az intervallumok mellé a hozzájuk tartozó üzenetek darabszámát írja, mint eredményt a képernyőre!

5. feladat - Ha Ernő minden óra 0. percében elolvasná a memóriában lévő üzeneteket (az éppen ekkor érkező üzeneteket nem látja), majd ki is törölné, akkor hány olyan üzenet lenne, amelynek elolvasásához fel kellene hívnia a szolgáltatót? Írja ezt a számot a képernyőre! (Az üzeneteket először 1, utoljára 24 órakor olvassa el.)

6. feladat - Ernő barátnője gyakran küld sms-t az 123456789-es számról. Mennyi volt a leghosszabb idő, amennyi eltelt két üzenete között? Ha legfeljebb 1 üzenet érkezett tőle, akkor írja ki, hogy „nincs elegendő üzenet”, egyébként pedig adja meg a leghosszabb időtartamot óra perc alakban!

7. feladat - Egy üzenet véletlenül késett. Olvassa be a billentyűzetről ennek az sms-nek az adatait, majd tárolja el a memóriában a többihez hasonlóan!

8. feladat - Az smski.txt állományban készítsen egy listát az üzenetekről telefonszám szerinti csoportosításban, telefonszám szerint növekvő sorrendben! Egy csoporthoz tartozó első sorban a feladó telefonszáma szerepeljen! Az alatta lévő sorokban a feladás ideje, majd a tőle újabb szóközzel elválasztva az üzenet szövege szerepeljen!

#!/usr/bin/python3
#-*-coding:utf-8-*-

print('\n1. feladat megoldása:')
smsek=[] 
telefon_memóriája=10
lista=open('/home/zfoxatis/Dokumentumok/sms.txt','r',).readlines() 
smsek_száma=int(lista[0]) 
for sorok in range(0,smsek_száma): 
    óra,perc,telefonszám=lista[sorok*2+1].split() 
    smsszöveg=lista[sorok*2+2][:-1]
    smsek+=[[sorok+1,int(óra),int(perc),telefonszám,smsszöveg]] 
print('Eltárolva: ',smsek)


print('\n2.feladat  megoldása:')
sms=[0,0,0,'','']
memória=0
for i in smsek:
    if sms[1]*60+sms[2]<i[1]*60+i[2]:
        sms=i
        memória+=1
        if memória==10:
            break
print('A telefonban a legfrissebb sms:\n {0}. {1:0>2}:{2:0>2} {3} {4}\n'.format(*sms))


print('\n3.feladat megoldása:')
leghosszabb_sms=smsek[0]
legrövidebb_sms=smsek[0]
for i in smsek:
    if len(leghosszabb_sms[4])<len(i[4]):
        leghosszabb_sms=i
    if len(legrövidebb_sms[4])>len(i[4]):
        legrövidebb_sms=i
print('Leghosszabb sms:\n {0}. {1:0>2}:{2:0>2} {3} {4}\n'.format(*leghosszabb_sms))
print('Legrövidebb sms:\n {0}. {1:0>2}:{2:0>2} {3} {4}\n'.format(*legrövidebb_sms))


print('\n4.feladat megoldása:')
for mettől,meddig in (1,20),(21,40),(41,60),(61,80),(81,100):
    számoló=0
    for i in smsek:
        if mettől-1<len(i[4]) and meddig+1>len(i[4]):
            számoló+=1
    print('{0:>3}-{1:>3} := {2:>3}'.format(mettől,meddig,számoló))


print('\n5.feladat megoldása:')
eredmény=0
for i in range(1,24):
    számoló=0
    for j in smsek:
        if (j[1]==i and j[2]!=0) or (j[1]==i-1 and j[2]==0):
            számoló+=1
    if számoló>telefon_memóriája:
        eredmény+=számoló-telefon_memóriája
print('\n{0} sms miatt kellene hívni a szolgáltatót \n'.format(eredmény))


print('\n6.feladat megoldása:')
leghosszabb_idő=0
érkező_smsek_ideje_percben=[]
telefonszám='123456789'
for i in smsek:
    if i[3]==telefonszám:
        érkező_smsek_ideje_percben.append(i[1]*60+i[2])
if len(érkező_smsek_ideje_percben)<2:
    print('\nNincs elegendő üzenet \n')
else:
    for i in range(1,len(érkező_smsek_ideje_percben)):
        aktuális_különbség=érkező_smsek_ideje_percben[i]-érkező_smsek_ideje_percben[i-1]
        if leghosszabb_idő<aktuális_különbség:
            leghosszabb_idő=aktuális_különbség                    
print('\n{0} óra {1} perc volt a leghosszabb idő két sms között ami a {2} telefonszámról jött \n'.
      format(int(leghosszabb_idő/60),leghosszabb_idő%60,telefonszám))


print('\n7.feladat megoldása:\n')
adatok=('óra: ','perc: ','telefonszám: ','sms szövege: ')
sms=[]
for i in adatok:
    sms.append(input(i))
elem=[len(smsek)+1,sms[0],sms[1],sms[2],sms[3]]
smsek.append(elem)
print('Eltárolva: {0}, '.format(elem))


print('\n8.feladat megoldása:\n')
kiírni=open('smski.txt','w')
telefonszámok=[]
for i in smsek:
    if telefonszámok.count(i[3])==0:
        telefonszámok.append(i[3])
telefonszámok=sorted(telefonszámok)
for i in telefonszámok:
    sor='{0}\n'.format(i)
    kiírni.write(sor)
    print(sor[:-1])
    for j in smsek:
        if j[3]==i:
            sor='  {0:0>2}:{1:0>2} {2}\n'.format(j[1],j[2],j[4])
            kiírni.write(sor)
            print(sor[:-1])
kiírni.close()

Advertisement