IT Egzaminai/2021: Skirtumas tarp puslapio versijų
| 166 eilutė: | 166 eilutė: | ||
|- | |- | ||
| | | | ||
8 | 8 | ||
Povilas Matematika 5 9 9 9 9 10 | Povilas Matematika 5 9 9 9 9 10 | ||
Jonas Istorija 4 10 9 10 10 | Jonas Istorija 4 10 9 10 10 | ||
Milda Matematika 6 10 8 9 9 9 9 | Milda Matematika 6 10 8 9 9 9 9 | ||
Asta Informatika 3 10 10 10 | Asta Informatika 3 10 10 10 | ||
Ieva Matematika 3 9 9 8 | Ieva Matematika 3 9 9 8 | ||
Rima Informatika 3 10 10 7 | Rima Informatika 3 10 10 7 | ||
Juozas Fizika 2 8 9 | Juozas Fizika 2 8 9 | ||
Laura Fizika 1 8 | Laura Fizika 1 8 | ||
|| | || | ||
* Apklaustų mokinių skaičius. | * Apklaustų mokinių skaičius. | ||
* Mokinio vardas; jo mėgstamiausias dalykas; to | * Mokinio vardas; jo mėgstamiausias dalykas; to | ||
dalyko pažymių skaičius; pažymiai. | |||
|- | |- | ||
! Rezultatų failo pavyzdys !! Paaiškinimai | ! Rezultatų failo pavyzdys !! Paaiškinimai | ||
|- | |- | ||
| | | | ||
Informatika 2 | Informatika 2 | ||
Asta | Asta | ||
Rima | Rima | ||
Matematika 2 | Matematika 2 | ||
Povilas | Povilas | ||
Milda | Milda | ||
Istorija 1 | Istorija 1 | ||
Jonas | Jonas | ||
|| | || | ||
* Dalykai, kuriuos pasirinkusių mokinių pažymių<br>vidurkis ne mažesnis kaip 9, ir juos pasirinkusių | * Dalykai, kuriuos pasirinkusių mokinių pažymių<br>vidurkis ne mažesnis kaip 9, ir juos pasirinkusių | ||
* Tą dalyką pasirinkusių mokinių vardai. | mokinių skaičius. | ||
* Tą dalyką pasirinkusių mokinių vardai. | |||
|} | |} | ||
| 201 eilutė: | 203 eilutė: | ||
|- | |- | ||
| | | | ||
4 | 4 | ||
Linas Informatika 4 10 8 8 9 | Linas Informatika 4 10 8 8 9 | ||
Ieva Matematika 3 9 9 8 | Ieva Matematika 3 9 9 8 | ||
Juozas Fizika 2 8 9 | Juozas Fizika 2 8 9 | ||
Rokas Chemija 4 9 9 10 7 | Rokas Chemija 4 9 9 10 7 | ||
|| | || | ||
* Apklaustų mokinių skaičius. | * Apklaustų mokinių skaičius. | ||
* Mokinio vardas; jo mėgstamiausias dalykas; to | * Mokinio vardas; jo mėgstamiausias dalykas; to | ||
dalyko pažymių skaičius; pažymiai. | |||
|- | |- | ||
! Rezultatų failo pavyzdys !! Paaiškinimai | ! Rezultatų failo pavyzdys !! Paaiškinimai | ||
|- | |- | ||
| | | | ||
Neatitinka vidurkis | Neatitinka vidurkis | ||
|| | || | ||
Nėra nė vieno dalyko, kurį pasirinkusių mokinių | Nėra nė vieno dalyko, kurį pasirinkusių mokinių | ||
pažymių vidurkis ne mažesnis kaip 9. | pažymių vidurkis ne mažesnis kaip 9. | ||
|} | |} | ||
16:22, 26 gegužės 2023 versija
1 užduotis. Bėgimas
Laurynas nusprendė liepos mėnesį ryte ir vakare bėgti miške tą pačią 5 km trasą. Tokį atstumą jis įprastai įveikia per 15–20 minučių. Savo bėgimo laiko rezultatus Laurynas pasižymėdavo užrašuose, įrašydamas dieną ir kiekvieno bėgimo pradžios bei pabaigos laiką valandomis ir minutėmis. Jeigu dėl kokios nors priežasties (pvz., prasto oro) bėgimą praleisdavo, tuomet vietoj to bėgimo pradžios ir pabaigos laiko valandomis ir minutėmis jis įrašydavo nulius.
Parašykite programą, skirtą rasti dieną, kai Laurynas, bėgdamas ir ryte, ir vakare, sugaišo mažiausiai laiko. Jeigu yra kelios tokios dienos, turi būti pateikiamos jos visos
Pradiniai duomenys
Duomenys pateikiami tekstiniame faile U1.txt
- Pirmoje eilutėje užrašyta, kiek dienų d (1 ≤ d ≤ 31) Laurynas bėgo bent vieną kartą.
- Tolesnėse eilutėse užrašyti bėgimo duomenys: liepos mėnesio diena; bėgimo ryte pradžios ir pabaigos laikas, nurodytas valandomis ir minutėmis; bėgimo vakare pradžios ir pabaigos laikas, nurodytas valandomis ir minutėmis. Duomenys atskirti bent vienu tarpo simboliu. Buvo bent viena diena, kai Laurynas bėgo ir ryte, ir vakare.
Rezultatai
Rezultatus pateikite tekstiniame faile U1rez.txt.
- Pirmoje eilutėje parašykite tekstą „Minimalus laikas“.
- Antroje eilutėje užrašykite mažiausią bėgimo ryte ir vakare laiką minutėmis.
- Trečioje eilutėje parašykite tekstą „Dienos“.
- Ketvirtoje eilutėje užrašykite dieną, kai Laurynas, bėgdamas ir ryte, ir vakare, sugaišo mažiausiai laiko. Jeigu yra kelios tokios dienos, jos turi būti pateikiamos tokia eilės tvarka, kokia jas surašė Laurynas. Dienos turi būti atskiriamos vienu tarpo simboliu.
Nurodymai
- Sukurkite ir parašykite funkciją, kuri apskaičiuoja, kiek laiko (minutėmis) Laurynas sugaišo bėgimui.
- Programoje nenaudokite sakinių, skirtų darbui su ekranu.
| Duomenų failo pavyzdys | Paaiškinimai |
|---|---|
6 3 09 25 09 40 19 45 20 00 6 08 30 08 48 0 0 0 0 7 09 18 09 38 18 52 19 11 10 08 48 09 03 18 45 19 00 15 08 52 09 11 17 58 18 18 30 0 0 0 0 19 02 19 20 |
* Skaičius dienų, kai Laurynas bėgo bent vieną kartą. * Liepos mėnesio diena; bėgimo ryte pradžios ir pabaigos |
| Rezultatų failo pavyzdys | Paaiškinimai |
Minimalus laikas 30 Dienos 3 10 |
* Mažiausias bėgimo ryte ir vakare laikas minutėmis. * Liepos mėnesio dienos, kai Laurynas, bėgdamas ir ryte, |
1 užduotis. Sprendimas
ĮVESTIS = "U1.txt"
IŠVESTIS = "U1rez.txt"
# skaitymo funkcija
def skaityk_failą():
# čia saugosime grąžinomus parametrus
parametrai = []
with open(ĮVESTIS, "rt") as skaitomas_failas:
# pirma eilutė - kiek dienų bėgta
dienų_bėgta = int( skaitomas_failas.readline() )
# skaitome, tiek eilučių, kiek dienų buvo bėgta
for _ in range(1, dienų_bėgta):
# skaitoma eilutė
d = skaitomas_failas.readline().split()
# paskaičiuojame ryto bėgimo laiką
rytas = kiek_sugaiso(d[1], d[2], d[3], d[4])
# paskaičiuojame vakaro bėgimo laiką
vakaras = kiek_sugaiso(d[5], d[6], d[7], d[8])
# jeigu ryte arba vakare nebuvo bėgta, tęsiame skaitymą
if rytas == 0 or vakaras == 0: continue
# pridedame rezultatą prie grąžinamų parametrų
parametrai.append({
'diena': d[0],
'sugaista': rytas + vakaras
})
return parametrai
# funkcija, suskaičiuoti, kiek užtruko bėgimas
# sh - starto valanda, sm - starto minutės, gh - galo valanda, gm - galo minutės
# verčiame viską į skaičius, tada minutes, tada atimame ir gauname tiką laiką
def kiek_sugaiso(sh, sm, gh, gm):
return (int(gh) * 60 + int(gm)) - (int(sh) * 60 + int(sm))
# funkcija, skirta atrinkti atsakymą
def atrink(parametrai):
# kintamieji. t_laikas - trumpiausias laikas. Priskiriame didelį skaičių, kaip pradinį
t_laikas = 99999
atsakymas = {'sugaista': 0, 'dienos': []}
# atrandame trumpiausia laiką
for p in parametrai:
if (t_laikas > p['sugaista']): t_laikas = p['sugaista']
# užsirašome trumpiausią laiką, kaip tekstinę eilutę (spausdinimui į failą)
atsakymas['sugaista'] = str(t_laikas)
for p in parametrai:
# jeigu truko ilgiau, praleidžiame
if (t_laikas != p['sugaista']): continue
# pridedame prie tinkamų dienų rezultate, kaip tekstinė eilutė
atsakymas['dienos'].append(str(p['diena']))
return atsakymas
def rašyk_į_failą(atsakymas):
# atidarome failą
with open(IŠVESTIS, 'wt') as rasomas_failas:
# spausdiname rezultatą
rasomas_failas.writelines([
'Minimalus laikas',
'\n',
atsakymas['sugaista'],
'\n',
'Dienos',
'\n',
# sujungiame dienas per tarpą
' '.join(atsakymas['dienos'])
])
# pagrindinė programa
if (__name__ == "__main__"):
# skaitome failą
rezultatai = skaityk_failą()
# atrenkame tik sąlygą atitinkamus rezultatus
atsakymas = atrink(rezultatai)
# surašome viską į failą
rašyk_į_failą(atsakymas)
2 užduotis. Apklausa
Monika projektinio darbo metu atliko apklausą, siekdama išsiaiškinti, kurie mokomieji dalykai jos draugams patinka labiausiai. Atlikdama apklausą, ji kaskart pasižymėdavo draugo vardą, jo mėgstamiausią dalyką ir to dalyko pažymius.
Parašykite programą, kuri sudarytų mokinių nurodytų populiariausių dalykų sąrašą ir pateiktų šiuos dalykus pasirinkusių mokinių vardus. Sąraše turi būti pateikiami tik tie dalykai, kuriuos pasirinkusių mokinių pažymių vidurkis yra ne mažesnis kaip 9.
Pradiniai duomenys Duomenys pateikiami tekstiniame faile U2.txt.
- Pirmoje eilutėje užrašytas apklaustų mokinių skaičius m (1 ≤ m ≤ 50).
- Tolesnėse eilutėse užrašyti draugų duomenys: vardas (vienas žodis); jo mėgstamiausias dalykas (vienas žodis); to dalyko pažymių skaičius; pažymiai. Duomenys atskirti vienu tarpo simboliu.
Rezultatai Rezultatus pateikite tekstiniame faile U2rez.txt.
- Įrašykite dalykus, kuriuos pasirinkusių mokinių pažymių vidurkis ne mažesnis kaip 9, ir juos pasirinkusių mokinių skaičių. Dalykus rašykite pagal jų populiarumą mažėjančiai. Jei yra keli dalykai, kurių populiarumas vienodas, tai juos pateikite abėcėliškai.
- Po kiekvieno dalyko atskirose eilutėse pateikite jį pasirinkusių mokinių, kurių to dalyko pažymių vidurkis yra ne mažesnis kaip 9, vardus tokia eilės tvarka, kokia jie buvo užrašyti pradinių duomenų faile.
- Jeigu tarp dalykų nėra tokių, kuriuos pasirinkusių mokinių pažymių vidurkis ne mažesnis kaip 9, tuomet turi būti pateiktas tekstinis pranešimas „Neatitinka vidurkis“.
Nurodymai
- Programoje naudokite struktūros duomenų tipo masyvą apklaustų mokinių duomenims saugoti.
- Sukurkite ir parašykite funkciją, kuri surikiuoja populiariausių dalykų sąrašą.
- Programoje nenaudokite globalių kintamųjų.
- Programoje nenaudokite sakinių, skirtų darbui su ekranu
Duomenų ir rezultatų pavyzdžiai
| Duomenų failo pavyzdys | Paaiškinimai |
|---|---|
8 Povilas Matematika 5 9 9 9 9 10 Jonas Istorija 4 10 9 10 10 Milda Matematika 6 10 8 9 9 9 9 Asta Informatika 3 10 10 10 Ieva Matematika 3 9 9 8 Rima Informatika 3 10 10 7 Juozas Fizika 2 8 9 Laura Fizika 1 8 |
* Apklaustų mokinių skaičius. * Mokinio vardas; jo mėgstamiausias dalykas; to dalyko pažymių skaičius; pažymiai. |
| Rezultatų failo pavyzdys | Paaiškinimai |
Informatika 2 Asta Rima Matematika 2 Povilas Milda Istorija 1 Jonas |
* Dalykai, kuriuos pasirinkusių mokinių pažymių |
| Duomenų failo pavyzdys | Paaiškinimai |
|---|---|
4 Linas Informatika 4 10 8 8 9 Ieva Matematika 3 9 9 8 Juozas Fizika 2 8 9 Rokas Chemija 4 9 9 10 7 |
* Apklaustų mokinių skaičius. * Mokinio vardas; jo mėgstamiausias dalykas; to dalyko pažymių skaičius; pažymiai. |
| Rezultatų failo pavyzdys | Paaiškinimai |
Neatitinka vidurkis |
Nėra nė vieno dalyko, kurį pasirinkusių mokinių pažymių vidurkis ne mažesnis kaip 9. |
2 užduotis. Sprendimas
class Dalykas:
def __init__(self, pavadinimas):
self.pavadinimas = pavadinimas
self.mokiniai = []
def rikiuoti_dalykus(dalykai):
return sorted(
dalykai, key=lambda dalykas: (-len(dalykas.mokiniai), dalykas.pavadinimas)
)
def vidurkis(pažymiai):
return sum(pažymiai) / len(pažymiai)
with open("U2.txt", "r") as failas:
mokiniu_skaicius = int(failas.readline())
dalykai = {}
for _ in range(mokiniu_skaicius):
vardas, pavadinimas, pazymiu_skaicius, *pazymiai = failas.readline().split()
pazymiai = list(map(int, pazymiai))
if vidurkis(pazymiai) >= 9:
if pavadinimas not in dalykai:
dalykai[pavadinimas] = Dalykas(pavadinimas)
dalykai[pavadinimas].mokiniai.append(vardas)
with open("U2rez.txt", "w") as failas:
rikiuoti = rikiuoti_dalykus(list(dalykai.values()))
if not rikiuoti:
failas.write("Neatitinka vidurkis\n")
else:
for dalykas in rikiuoti:
failas.write(f"{dalykas.pavadinimas} {len(dalykas.mokiniai)}\n")
for mokinys in dalykas.mokiniai:
failas.write(f"{mokinys}\n")