# „LR NŠA Python“ testavimo planas
## Įdiegimas
1. Eikite į https://www.nsa.smm.lt/stebesenos-ir-vertinimo-departamentas/pasiekimu-patikrinimai/brandos-egzaminai/mokomieji-dalykai/
2. Išskleidus „Informacinės technologijos“, turėtų būti matomos dvi nuorodos skirtos atsisiųsti 32 ir 64 bitų versijas:

3. Atsisiųskite versiją atitinkankčią Jūsų Windows versiją.
4. Paleiskite diegimo programą. Windows turėtų paprašyti patvirtinti, kad pasitikite programa:

Pasirinkite „Yes“ („Taip“).
5. Turėtų pasileisti diegimo programa:

6. Įdiekite nekeisdami nustatymų.

7. Įdiegimo programai baigus darbą, uždarykite ją paspausdami „Finish“.

8. Ant darbastalio turėtų būti šaukinys „LR NŠA Python“ skirtas paleisti programavimo aplinką ir šaukinys „Python Documentation“ skirtas atverti Python dokumentaciją.

## Pirmas paleidimas
1. Paleiskite „LR NŠA Python“ pasinaudodami darbastalio šaukiniu. Pirmojo paleidimo metu turėtumėte matyti tokį langą:

2. Patartina pakeisti spalvų temą į „Light“, nes su ja egzamino stebėtojams bus lengviau matyti ką mokinys rašo iš didesnio atstumo.

3. Sukurkite naują failą pasinaudodami kontekstiniu meniu „File“ → „New File“.

4. Turėtų atsidaryti nauja kortelė. Išsaugokite failą su `.py` plėtiniu, pavyzdžiui, `testas1.py`.


5. Išsaugojus, apatiniame kairiajame kampe turėtų būti rodoma programavimo kalbos versija `Python 3.8.10`:

7. Nukopijuokite šią programą į redaktorių:
```python
print("Sveikas pasauli!")
```
6. Įsitikinkite, kad prieš paleisdami programą ją išsaugojote. Jei failas neišsaugotas, vietoj kortelės uždarymo kryžiuko yra rodomas rutuliukas:

Kai failas išsaugotas, kortelė atrodo taip:

7. Paleiskite programą paspausdami ant žalios rodiklytės simbolio esančio dešiniąjame viršutiniame lango kampe.

8. Pirmą kartą paleidžiant programą, gali iššokti Windows ugniasienės langas klausiantis ar leisti programavimo aplinkai prieiti prie tinklo. Programavimo aplinka naudoja prieigą prie (kompiuterio vidinio) tinklo programų derinimo funkcijai. Paspauskite „Allow access“.

9. Sėkmingai įvykdžius programą, apačioje esančiame polangyje, terminalo kortelėje turėtų būti matomas `Sveikas pasauli!` pranešimas.

**Svarbu**: Ištrinkite sukurtas programas prieš egzaminą.
## Statinis tipų tikrinimas
1. Egzamino metu yra prašoma mokinių nurodyti statinius tipus. Norėdami patikrinti ar programavimo aplinka informuoja naudotoją apie statinius tipus, sukurkite naują Python failą su tokia programa:
```python
def klaida() -> None:
eilutė: str = 4
return eilutė
```
**Svarbu:** `-> None` yra būtinas. Be jo programavimo aplinka tipų netikrins.
2. Išsaugojus failą, `4` ir `return` turėtų būti pabraukti vingiuota raudona linija, o „Problems“ kortelėje turėtų būti nurodytos dvi tipų klaidos.

3. Užvedus pele ant pabraukto `4`, turėtų būti parodomas toks pranešimas:

4. Užvedus pele ant pabraukto `return`, turėtų būti parodomas toks pranešimas:

## Priverstinis programos sustabdymas
1. Sukurkite naują Python failą su tokia programa:
```python
counter = 1
while True:
counter += 1
print(counter)
```
2. Paleiskite ją paspausdami ant žalio vykdymo mygtuko. Terminale turėtų matytis greitai bėgantys skaičiai:

3. Sustabdykite programą paspausdami ant raudono kvadrato lango viršuje, per vidurį:

4. Paspaudus ant mygtuko, jis turėtų pranykti ir terminale skaičiai nebeturėti bėgti:

## Programos derinimas
1. Sukurkite Python failą pavadinimu `egzaminas.py` su tokia programa (2021 metų informatikos VBE užduoties sprendimas):
```python
from typing import List, TextIO
class Pamoka:
def __init__(self, pavadinimas: str):
self.pavadinimas = pavadinimas
self.mokiniai: List[str] = []
def __repr__(self):
return '{} {}'.format(self.pavadinimas, len(self.mokiniai))
def vidurkis(pažymiai: List[int]) -> float:
suma = 0
for pažymys in pažymiai:
suma += pažymys
return suma / len(pažymiai)
def rasti_arba_įdėti_pamoką(pamokos: List[Pamoka], pavadinimas: str) -> int:
for (indeksas, pamoka) in enumerate(pamokos):
if pamoka.pavadinimas == pavadinimas:
return indeksas
else:
pamokos.append(Pamoka(pavadinimas))
return len(pamokos) - 1
def skaityti(duomenų_failas: TextIO, pamokos: List[Pamoka]) -> None:
for eilutė in duomenų_failas.readlines():
(vardas, pavadinimas, pažymių_skaičius, *pažymiai_simb) = eilutė.split()
pažymiai = list(map(int, pažymiai_simb))
assert int(pažymių_skaičius) == len(pažymiai), \
"Nuskaitytų pažymių kiekis nesutampa su nurodytu."
if vidurkis(pažymiai) >= 9:
indeksas = rasti_arba_įdėti_pamoką(pamokos, pavadinimas)
pamokos[indeksas].mokiniai.append(vardas)
def mažiau(pamoka1: Pamoka, pamoka2: Pamoka) -> bool:
return (
len(pamoka1.mokiniai) > len(pamoka2.mokiniai) or
(len(pamoka1.mokiniai) == len(pamoka2.mokiniai) and
pamoka1.pavadinimas < pamoka2.pavadinimas)
)
def rikiuoti(pamokos: List[Pamoka]) -> None:
i = 0
while i < len(pamokos)-1:
mažiausias = i
j = i + 1
while j < len(pamokos):
if mažiau(pamokos[j], pamokos[mažiausias]):
mažiausias = j
j += 1
tarpinis = pamokos[mažiausias]
pamokos[mažiausias] = pamokos[i]
pamokos[i] = tarpinis
i += 1
def spausdinti(rezultatų_failas: TextIO, pamokos: List[Pamoka]) -> None:
if len(pamokos) == 0:
print("Neatitinka vidurkis", file=rezultatų_failas)
for pam in pamokos:
print(pam.pavadinimas, len(pam.mokiniai), file=rezultatų_failas)
for mok in pam.mokiniai:
print(mok, file=rezultatų_failas)
def vykdyti(duomenų_failo_vardas: str, rezultatų_failo_vardas: str) -> None:
pamokos: List[Pamoka] = []
with open(duomenų_failo_vardas) as duomenų_failas:
skaityti(duomenų_failas, pamokos)
rikiuoti(pamokos)
with open(rezultatų_failo_vardas, 'w') as rezultatų_failas:
spausdinti(rezultatų_failas, pamokos)
vykdyti('U2_a.txt', 'U2rez_a.txt')
```
2. Paleiskite programą derinimo rėžimu paspausdami ant rodyklytės su vabalo simboliu esančios šalia žalios rodyklytės.

3. Programa turėtų pasileisti ir eilutėje `with open(duomenų_failo_vardas) as duomenų_failas:` turėtų atsirasti pranešimas:

4. Sukurkite tekstinį failą `U2_a.txt` tame pačiame aplanke su tokiu turiniu:
```plain
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
```
5. Vėl paleiskite programą derinimo rėžimu. Eilutėje `(vardas, pavadinimas, pažymių_skaičius, *pažymiai_simb) = eilutė.split()` turėtų atsirasti pranešimas:

6. Paspauskite ant nurodytos eilutės laikydami CTRL klavišą. Žymeklis turėtų nušokti į eilutę, kurioje įvyko klaida.

7. Sukurkite stabdos tašką paspaudami kairiau eilutės numerio:

8. Vėl paleiskite programą derinimo rėžimu. Programos vykdymas turėtų sustoti eilutėje su stabdos tašku.

9. Kairėje ekrano pusėje esančioje `RUN AND DEBUG` skiltyje, kortelėje `WATCH` pridėkite `eilutė`. Turėtų atsirasti toks užrašas: `eilutė: '8\n'`.

10. Paspauskite ant raudono tuščio kvadrato esančio lango viršuje tam, kad nutrauktumėte programos derinimą.

11. Paspauskite ant stabdos taško, kad jį pašalintumėte.
12. Pakeiskite funkciją `skaityti` į tokią:
```python
def skaityti(duomenų_failas: TextIO, pamokos: List[Pamoka]) -> None:
pirma_eilutė = True
for eilutė in duomenų_failas.readlines():
if pirma_eilutė:
pirma_eilutė = False
continue
(vardas, pavadinimas, pažymių_skaičius, *pažymiai_simb) = eilutė.split()
pažymiai = list(map(int, pažymiai_simb))
assert int(pažymių_skaičius) == len(pažymiai), \
"Nuskaitytų pažymių kiekis nesutampa su nurodytu."
if vidurkis(pažymiai) >= 9:
indeksas = rasti_arba_įdėti_pamoką(pamokos, pavadinimas)
pamokos[indeksas].mokiniai.append(vardas)
```
13. Vėl paleiskite programą derinimo rėžimu.
14. Programa turėtų sėkmingai užbaigti darbą.
15. Po įvykdymo, programos aplanke turėtų būti failas `U2rez_a.txt` su tokiu turiniu:
```plain
Informatika 2
Asta
Rima
Matematika 2
Povilas
Milda
Istorija 1
Jonas
```
**Svarbu**: Ištrinkite sukurtas programas prieš egzaminą.