IT Egzaminai/2023
Informacinių technologijų valstybinio brandos egzamino užduotis
Čia rasi 2023 m. informacinių technologijų valstybinio brandos egzamino programavimo praktines užduotis ir jų sprendimus python programavimo kalba.
1 užduotis. Žingsniai
Mokykla, minėdama Pasaulinę sveikatos dieną, surengė savaitės trukmės akciją „Judėk!“ Kiekvienas akcijos dalyvis turėjo užsiregistruoti internetu, nurodydamas savo klasės kategoriją ir žingsnio ilgį, o paskui kiekvieną savaitės dieną įvesti nueitų žingsnių skaičių.
Parašykite programą, kuri pateiktų kiekvienos klasės kategorijos visų akcijoje dalyvavusių mokinių nueito atstumo sąrašą.
Pradiniai duomenys
Duomenys pateikti tekstiniame faile U1.txt.
- Pirmoje eilutėje užrašytas akcijoje dalyvavusių mokinių skaičius
m (10 ≤ m ≤ 50). - Tolesnėse eilutėse užrašyti akcijoje dalyvavusių mokinių duomenys: klasės kategorija (skaičius nuo 1 iki 12); žingsnio ilgis centimetrais; kiekvieną akcijos savaitės dieną nueitų žingsnių skaičius. Jeigu mokinys tam tikrą savaitės dieną neįvedė nueitų žingsnių skaičiaus, pateikiama reikšmė 0. Duomenys atskirti vienu tarpo simboliu. Buvo bent vienas mokinys, kuris įvedė nueitų žingsnių skaičių kiekvieną akcijos savaitės dieną.
Rezultatai
Rezultatus pateikite tekstiniame faile U1rez.txt.
- Spausdinamas kiekvienos klasės kategorijos mokinių viso nueito atstumo sąrašas: klasės kategorija; kiek buvo mokinių, kurie įvedė nueitų žingsnių skaičių kiekvieną akcijos savaitės dieną; visas nurodytos klasės kategorijos nueitas atstumas kilometrais, suapvalintas iki šimtųjų. Jeigu dalyvis bent vieną dieną neįvedė nueitų žingsnių skaičiaus, jo duomenys nėra naudojami skaičiavimams. Duomenys atskirti vienu tarpo simboliu.
- Vienoje eilutėje pateikiami vienos klasės kategorijos duomenys. Jeigu kurioje nors klasės kategorijoje nebuvo nė vieno mokinio, kuris įvedė nueitų žingsnių skaičių kiekvieną akcijos savaitės dieną, tai duomenų apie šią klasės kategoriją pateikti nereikia. Sąrašas pagal klasių kategorijas pateikiamas tokia eilės tvarka, kokia jos buvo nurodytos pradinių duomenų faile.
Nurodymai
- Sukurkite ir parašykite vieną funkciją, kuri apskaičiuoja kiekvienos klasės kategorijos visą nueitą atstumą kilometrais ir suskaičiuoja, kiek tos klasės kategorijos mokinių įvedė nueitų žingsnių skaičių kiekvieną akcijos savaitės dieną.
Duomenų ir rezultatų pavyzdžiai
| Duomenų failo pavyzdys | Paaiškinimai |
|---|---|
10 7 76 4353 8738 4946 6484 8946 6336 6284 11 74 4352 4578 7239 3157 7856 4648 5850 6 70 5731 9017 7641 6785 8865 3184 6800 5 68 9147 9702 8671 0 5398 9555 7141 8 71 7550 0 9089 8446 4390 0 7901 7 68 4227 7160 9565 3297 4401 5740 6908 7 73 6362 6705 0 9017 5971 3154 3585 6 73 7053 8752 7606 4079 5204 3819 3310 5 73 4263 5836 3336 5401 4719 0 0 8 71 8588 5617 6903 9565 6445 6786 4522 |
• Akcijoje dalyvavusių mokinių skaičius. • Mokinių duomenys: klasės kategorija; žingsnio ilgis centimetrais; kiekvieną akcijos savaitės dieną nueitų žingsnių skaičius. • Reikšmė 0 rodo, kad mokinys neįvedė tos dienos duomenų |
| Rezultatų failo pavyzdys | Paaiškinimai |
7 2 63.11 11 1 27.88 6 2 62.69 8 1 34.38 |
• Klasių kategorijų duomenys: klasės kategorija; kiek buvo mokinių, kurie įvedė nueitų žingsnių skaičių kiekvieną akcijos savaitės dieną; visas tos klasės kategorijos mokinių nueitas atstumas kilometrais, suapvalintas iki šimtųjų. • Sąrašas pagal klasių kategorijas pateikiamas tokia eilės tvarka, kokia jos buvo nurodytos pradinių duomenų faile. |
1 užduotis. Sprendimas
ĮVESTIS = 'U1.txt'
IŠVESTIS = 'U1rez.txt'
def skaičiuoti(žingsnio_ilgis, žingsniai_sąrašas):
viso = 0
for žingsniai in žingsniai_sąrašas:
viso = viso + (žingsniai * žingsnio_ilgis)
return viso
def skaityti():
with open(ĮVESTIS, 'r', encoding='utf-8') as failas:
dalyvių_sąrašas = {}
dalyvių_skaičius = int(failas.readline())
for _ in range(dalyvių_skaičius):
reikšmės = list(map(int, failas.readline().split()))
klasė = str(reikšmės[0])
žingsnio_ilgis = reikšmės[1]
žingsniai_sąrašas = reikšmės[2:]
if 0 in žingsniai_sąrašas:
continue
if not dalyvių_sąrašas.get(klasė):
dalyvių_sąrašas[klasė] = { 'kiekis': 1, 'atstumas': 0 }
else:
dalyvių_sąrašas[klasė]['kiekis'] += 1
dalyvių_sąrašas[klasė]['atstumas'] += skaičiuoti(žingsnio_ilgis, žingsniai_sąrašas)
return dalyvių_sąrašas
def rašyti(duomenys):
with open(IŠVESTIS, 'w', encoding='utf-8') as f:
for klasė, reikšmės in duomenys.items():
kilometrai = round((reikšmės["atstumas"] / (1000 * 100)), 2)
f.write(f'{klasė} {reikšmės["kiekis"]} {kilometrai}\n')
if __name__ == '__main__':
duomenys = skaityti()
rašyti(duomenys)
2 užduotis. Slaptažodžiai
Vaida, atlikdama informatikos projektinį darbą apie slaptažodžius, sukūrė mobiliąją programėlę. Programėlė palygina naudotojo įvesto slaptažodžio duomenis su Vaidos iš anksto į programėlę įrašytų įvairaus stiprumo slaptažodžių duomenimis ir įvertina naudotojo įvesto slaptažodžio stiprumą – silpnas, vidutinis ar stiprus.
Parašykite programą, kuri įvertintų mobiliosios programėlės naudotojo įvestų slaptažodžių stiprumą. Norint įvertinti naudotojo įvesto slaptažodžio stiprumą, reikia rasti į jį panašiausią slaptažodį Vaidos įrašytų slaptažodžių sąraše. Panašumo reikšmė nustatoma, apskaičiuojant naudotojo įvesto ir kiekvieno Vaidos į programėlę įrašyto slaptažodžio parametrų skirtumų absoliučiųjų didumų sumą. Kuo mažesnė apskaičiuota slaptažodžių panašumo reikšmė, tuo panašesni slaptažodžiai.
Pradiniai duomenys
Duomenys pateikiami tekstiniame faile U2.txt.
- Pirmoje eilutėje užrašyta naudotojo įvestų slaptažodžių skaičius
n (1 ≤ n ≤ 5)ir Vaidos iš anksto į programėlę įrašytų įvairaus stiprumo slaptažodžių skaičiuss (5 ≤ s ≤ 25). - Tolesnėse eilutėse užrašyti:
- mobiliosios programėlės naudotojo įvestų slaptažodžių duomenys: slaptažodis (15 simbolių); slaptažodžio ilgis; didžiųjų raidžių kiekis; mažųjų raidžių kiekis; skaitmenų kiekis; specialiųjų simbolių kiekis;
- Vaidos iš anksto į programėlę įrašytų slaptažodžių duomenys: slaptažodis (15 simbolių); slaptažodžio ilgis; didžiųjų raidžių kiekis; mažųjų raidžių kiekis; skaitmenų kiekis; specialiųjų simbolių kiekis; slaptažodžio stiprumą nusakanti žymė (Silpnas, Vidutinis, Stiprus; 9 simboliai). Duomenys atskirti vienu tarpo simboliu.
Rezultatai
Rezultatus pateikite tekstiniame faile U2rez.txt.
- Nuo eilutės pradžios įrašykite mobiliosios programėlės naudotojo įvesto slaptažodžio duomenis: slaptažodis, nustatyta slaptažodžio stiprumo žymė ir apskaičiuota slaptažodžių panašumo mažiausia reikšmė. Yra žinoma, kad naudotojo įvestų slaptažodžių nustatyta stiprumo žymė sutapo tik su viena kuria nors Vaidos įrašytų slaptažodžių žyme. Duomenis eilutėje atskirkite vienu tarpo simboliu.
- Po naudotojo kiekvieno įvesto slaptažodžio atskirose eilutėse pateikite Vaidos įrašytų slaptažodžių, kurie panašiausi į naudotojo įvestą slaptažodį, sąrašą. Sąrašą surikiuokite pagal slaptažodžių ilgį mažėjančiai. Jeigu yra keli vienodo ilgio slaptažodžiai, jie turi būti pateikiami tokia eilės tvarka, kokia juos surašė Vaida.
Nurodymai
- Programoje naudokite struktūros duomenų tipo masyvus mobiliosios programėlės naudotojo įvestų ir Vaidos iš anksto į programėlę įrašytų slaptažodžių duomenims saugoti. Python programavimo kalboje naudokite žodyno duomenų struktūrą arba struktūrą sudarykite, naudodami klases.
- Sukurkite ir parašykite funkciją2, kuri apskaičiuotų mobiliosios programėlės naudotojo įvesto slaptažodžio ir Vaidos iš anksto į programėlę įrašyto slaptažodžio panašumo reikšmę.
Duomenų ir rezultatų pavyzdžiai
| Duomenų failo pavyzdys | Paaiškinimai |
|---|---|
2 7 Katinas.33#? 12 1 6 2 3 kasa11 6 0 4 2 0 slaptas135 10 0 7 3 0 Vidutinis admin 5 0 5 0 0 Silpnas Pyragaitis12! 13 1 9 2 1 Stiprus 11Auto11 8 1 3 4 0 Vidutinis abcdef1 7 0 6 1 0 Silpnas <EgZaMiNaS> 11 5 4 0 2 Stiprus saitas1 7 0 6 1 0 Silpnas |
● Naudotojo įvestų slaptažodžių skaičius; Vaidos iš anksto į programėlę įrašytų slaptažodžių skaičius. ● Naudotojo įvestų slaptažodžių duomenys: slaptažodis; slaptažodžio ilgis; didžiųjų raidžių kiekis; mažųjų raidžių kiekis; skaitmenų kiekis; specialiųjų simbolių kiekis. ● Vaidos iš anksto į programėlę įrašytų slaptažodžių duomenys: slaptažodis; slaptažodžio ilgis; didžiųjų raidžių kiekis; mažųjų raidžių kiekis; skaitmenų kiekis; specialiųjų simbolių kiekis; stiprumą nusakanti žymė. |
| Rezultatų failo pavyzdys | Paaiškinimai |
Katinas.33#? Stiprus 6 Pyragaitis12! kasa11 Silpnas 4 abcdef1 saitas1 admin |
● Naudotojo įvesto slaptažodžio duomenys: slaptažodis; nustatyta slaptažodžio stiprumo žymė; apskaičiuota slaptažodžių panašumo mažiausia reikšmė. ● Vaidos įrašytų slaptažodžių, kurie panašiausi į naudotojo įvestą slaptažodį, sąrašas. Sąrašas surikiuotas pagal slaptažodžių ilgį mažėjančiai. |
2 užduotis. Sprendimas
def apskaičiuoti_panašumą(slaptažodis, įrašyti_slaptažodžiai):
skirtumų_suma = abs(slaptažodis['ilgis'] - įrašyti_slaptažodžiai['ilgis'])
skirtumų_suma += abs(slaptažodis['didžiosios_raides'] -
įrašyti_slaptažodžiai['didžiosios_raides'])
skirtumų_suma += abs(slaptažodis['mažosios_raides'] -
įrašyti_slaptažodžiai['mažosios_raides'])
skirtumų_suma += abs(slaptažodis['skaitmenys'] -
įrašyti_slaptažodžiai['skaitmenys'])
skirtumų_suma += abs(slaptažodis['specialūs_simboliai'] -
įrašyti_slaptažodžiai['specialūs_simboliai'])
return skirtumų_suma
def įvertinti_slaptažodžio_stiprumą(naudotojo_slaptažodis, įrašyti_slaptažodžiai):
mažiausias_panašumo_reikšmė = float('inf')
slaptažodžio_stiprumas = ''
panašūs_slaptažodžiai = []
# Ieškome panašiausio slaptažodžio
for įrašytas_slaptažodis in įrašyti_slaptažodžiai:
panašumas = apskaičiuoti_panašumą(
naudotojo_slaptažodis, įrašytas_slaptažodis)
if panašumas == mažiausias_panašumo_reikšmė:
panašūs_slaptažodžiai.append(įrašytas_slaptažodis)
if panašumas < mažiausias_panašumo_reikšmė:
panašūs_slaptažodžiai = [įrašytas_slaptažodis]
mažiausias_panašumo_reikšmė = panašumas
slaptažodžio_stiprumas = įrašytas_slaptažodis['stiprumas']
panašūs_slaptažodžiai = sorted(
panašūs_slaptažodžiai, key=lambda x: x['ilgis'])
return slaptažodžio_stiprumas, mažiausias_panašumo_reikšmė, panašūs_slaptažodžiai
def pagrindinis():
# Nuskaitome duomenis iš failo
with open('U2.txt', 'r') as failas:
naudotojo_slaptažodžių_skaičius, įrašytų_slaptažodžių_skaičius = map(
int, failas.readline().split())
naudotojo_slaptažodžiai = []
įrašyti_slaptažodžiai = []
# Išskiriame naudotojo ir įrašytus slaptažodžius
for i in range(1, naudotojo_slaptažodžių_skaičius + 1):
duomenys = failas.readline()
slaptažodis = duomenys[:15]
slaptažodžio_duomenys = duomenys[16:].split()
naudotojo_slaptažodžiai.append({
'slaptažodis': slaptažodis,
'ilgis': int(slaptažodžio_duomenys[0]),
'didžiosios_raides': int(slaptažodžio_duomenys[1]),
'mažosios_raides': int(slaptažodžio_duomenys[2]),
'skaitmenys': int(slaptažodžio_duomenys[3]),
'specialūs_simboliai': int(slaptažodžio_duomenys[4])
})
# Išskiriame naudotojo ir įrašytus slaptažodžius
for i in range(naudotojo_slaptažodžių_skaičius + 1, naudotojo_slaptažodžių_skaičius + įrašytų_slaptažodžių_skaičius + 1):
duomenys = failas.readline()
slaptažodis = duomenys[:15]
slaptažodžio_duomenys = duomenys[16:].split()
įrašyti_slaptažodžiai.append({
'slaptažodis': slaptažodis,
'ilgis': int(slaptažodžio_duomenys[0]),
'didžiosios_raides': int(slaptažodžio_duomenys[1]),
'mažosios_raides': int(slaptažodžio_duomenys[2]),
'skaitmenys': int(slaptažodžio_duomenys[3]),
'specialūs_simboliai': int(slaptažodžio_duomenys[4]),
'stiprumas': slaptažodžio_duomenys[5]
})
# Vertiname slaptažodžio stiprumą ir randame panašiausius slaptažodžius
rezultatai = []
for naudotojo_slaptažodis in naudotojo_slaptažodžiai:
slaptažodžio_stiprumas, mažiausias_panašumo_reikšmė, panašūs_slaptažodžiai = įvertinti_slaptažodžio_stiprumą(
naudotojo_slaptažodis, įrašyti_slaptažodžiai)
rezultatai.append(
(naudotojo_slaptažodis['slaptažodis'], slaptažodžio_stiprumas, mažiausias_panašumo_reikšmė, panašūs_slaptažodžiai))
# Rezultatų rašymas į failą
with open('U2rez.txt', 'w') as failas:
for rezultatas in rezultatai:
failas.write(f"{rezultatas[0]} {rezultatas[1]} {rezultatas[2]}\n")
for panašus_slaptažodis in rezultatas[3]:
failas.write(f"{panašus_slaptažodis['slaptažodis']}\n")
if __name__ == '__main__':
pagrindinis()