Programmeerimise alused - utkodu.ut.ee/~eno/progral13/Progralused2013loeng5.pdf · 2. suurem...
Transcript of Programmeerimise alused - utkodu.ut.ee/~eno/progral13/Progralused2013loeng5.pdf · 2. suurem...
1
Programmeerimise alused
5. loeng
Eno Tõnisson
13. märts
Eelmisel nädalal
• Naistepäev
• Kodune tunnikontroll
– õpivideod
– tsükliülesanne
2
Umbes mitu tundi tegelesite alates eelmise
loengu algusest selle ainega
(loeng+praktikum+iseseisvalt)?
1. paariline
3 1. 2. 3. 4. 5. 6. 7. 8.
0% 0% 0% 0%0%0%0%0%
1. 0-2 tundi
2. 2-4 tundi
3. 4-6 tundi
4. 6-8 tundi
5. 8-10 tundi
6. 10-12 tundi
7. 12-14 tundi
8. üle 14 tunni
Kuivõrd olete selle ainega
graafikus?
1. paariline
4 1. 2. 3. 4. 5.
0% 0% 0%0%0%
1. Isegi ees
2. Täiesti graafikus
3. Veidi maas, aga saan
ise hakkama
4. Kõvasti maas, vajan abi
5. Ei oska öelda
Umbes mitu tundi tegelesite alates eelmise
loengu algusest selle ainega
(loeng+praktikum+iseseisvalt)?
2. paariline
5 1. 2. 3. 4. 5. 6. 7. 8.
0% 0% 0% 0%0%0%0%0%
1. 0-2 tundi
2. 2-4 tundi
3. 4-6 tundi
4. 6-8 tundi
5. 8-10 tundi
6. 10-12 tundi
7. 12-14 tundi
8. üle 14 tunni
Kuivõrd olete selle ainega
graafikus?
2. paariline
6 1. 2. 3. 4. 5.
0% 0% 0%0%0%
1. Isegi ees
2. Täiesti graafikus
3. Veidi maas, aga saan
ise hakkama
4. Kõvasti maas, vajan abi
5. Ei oska öelda
7
Täna
• Test
• Tsüklist veel
• Järjendid
8
Eelkontrolliga tsükkel:
while B:
S
B - loogiline avaldis
(jätkamistingimus) S - sisu
B?
S
+
–
while True:
print(8)
>>> import random
>>> random.randint(0,3)
3
>>> random.randint(0,3)
3
>>> random.randint(0,3)
3
>>> random.randint(0,3)
0
>>> random.randint(0,3)
0
>>> random.randint(0,3)
2
>>> random.randint(0,3)
1
9
10
Tunnikontrolli ülesanne
• Koostada plokkskeem ja Pythoni
programmilõik järgmise ülesande
lahendamiseks.
• Visatakse kulli ja kirja (1 ja 0). Igal viskel
väljastatakse visketulemus (1 või 0). Kui
tuleb kiri, siis visatakse uuesti. Kui kull, siis
visked lõpetatakse.
Organisatsioonilised küsimused
• Vaadake aeg-ajalt seda e-postkasti, mille
aadress ÕIS-is kirjas!!! Või suunake kirjad
aktiivses kasutuses olevasse postkasti
• Kontrolltööd
• Suuremad kodutööd
– 1. esitamine 5. praktikumis
– 2. esitamine 7. praktikum
• Programmeerimise alused II
– 10.-16. nädal
– ajad veel täpsustamata
11
12
Arvestuseks on vaja
• teha 1. kodutöö (ülesande püstituse tähtaeg 4. praktikum, lahenduse tähtaeg 5. praktikum)
• teha 2. kodutöö (eksamiülesannete kogust, tähtaeg 7. praktikum)
• sooritada arvutipraktikumi kontrolltöö (7. praktikum)
• sooritada loengu kontrolltöö (8. nädal)
13
Tunnikontrollide roll • Igakordsete arvutipraktikumide tunnikontrollide sooritamine
kokku vähemalt 90-protsendilise edukusega vabastab arvutipraktikumi kontrolltööst.
• Igakordsete arvutipraktikumide tunnikontrollide sooritamine kokku vähemalt 70-90-protsendilise edukusega annab võimaluse arvutipraktikumi kontrolltööl valida lihtsam ülesanne.
• Igakordsete loengute tunnikontrollide sooritamine kokku vähemalt 90-protsendilise edukusega vabastab vastavast kontrolltööst.
• Igakordsete loengute tunnikontrollide tulemus vähendab loengu kontrolltöö arvestuseks vajalikku lävendit kuni 9 protsendipunkti võrra.
14
1. suurem kodutöö
• Ülesanne peab olema originaalne – teie enda välja
mõeldud.
• Ülesande temaatika peab teile endale huvi pakkuma.
• Ülesande lahendus peab sisaldama vähemalt kahte
endakirjutatud funktsiooni ja nende rakendamist.
• Ülesandes peab olema vähemalt 2 tingimuslauset,
kusjuures vähemalt üks peab sisaldama else-osa.
• Nii ülesande püstitus kui ka lahendus vaadatakse koos
õppejõuga praktikumis läbi.
• Tähtajad
– Püstitus 4. praktikum
– Lahendus 5. praktikum
2. suurem kodutöö
• Ülesande tekst valida eksamiülesannete kogust H. Hein,
J. Kiho, R. Palm, E. Tõnisson. Programmeerimise
eksamiülesannete kogu. Tartu, 2007.
(Hulk eksemplare on arvutiklassi 203 riiulis – seal võib
vaadata, aga arvutiklassidest välja ei tohi viia).
• Lahendada ülesanne Pythoniga. Vajadusel kohendage
ülesande teksti, kuna ülesanded olid mõeldud Javaga
lahendamiseks.
• Lahenduse failis peab alguses kommentaarina
sisalduma programmi autori nimi ja ülesande tekst.
• Lahendus peab olema mõistlikult kommenteeritud.
• Ülesande lahendus vaadatakse koos õppejõuga
praktikumis läbi.
• Tähtaeg 7. praktikum
15
Kontrolltööd
• Kontrolltööd
– loengu, 8. nädalal
– praktikumi, 7. praktikum
• Järeltööd (registr. ÕISis)
– loengu, 9. nädalal (aeg täpsustub)
– praktikumi, 9. nädalal (aeg täpsustub)
• Järeltööd (enne kodutööd esitada!!!,
(registr. ÕISis) )
– loengu, mais??? (aeg täpsustub)
– praktikumi, mais??? (aeg täpsustub)
16
17
Määratud tsükkel:
for muutuja in jada
S
S - sisu
S
Kas veel
elemente?
S
ei
jah
for i in range(6):
print(i)
range
• list(range(6))[0, 1, 2, 3, 4, 5]
• list(range(5,8))[5, 6, 7]
• aritmeetiline jada
[start, start + step, start + 2 * step, ...]
• list(range(5,17,3))[5, 8, 11, 14]
• list(range(5,0,-1)) [5, 4, 3, 2, 1]
• for i in range(6):
18
Milline arv ilmub viimasena ekraanile?
19 1. 2. 3. 4. 5. 6.
17% 17% 17%17%17%17%
for i in range(3,-5,-2):
print(i)
1. 3
2. -3
3. -5
4. mingi muu arv
5. mitte midagi
6. veateade
Milline arv ilmub viimasena ekraanile?
20 1. 2. 3. 4. 5. 6.
17% 17% 17%17%17%17%
for i in range(3,-5, 2):
print(i)
1. 3
2. -3
3. -5
4. mingi muu arv
5. mitte midagi
6. veateade
Milline arv ilmub viimasena ekraanile?
21 1. 2. 3. 4. 5. 6.
17% 17% 17%17%17%17%
for i in range(3):
print(i)
1. 3
2. -3
3. -5
4. mingi muu arv
5. mitte midagi
6. veateade
Mis ilmub ekraanile?
22 1. 2. 3. 4. 5. 6.
17% 17% 17%17%17%17%
def fun(n):
fu = 0
for i in range(1,n+1):
fu *= i
return fu
fun(3)
1. 0
2. 3
3. 6
4. mingi muu arv
5. mitte midagi
6. veateade
Mis ilmub ekraanile?
23 1. 2. 3. 4. 5. 6.
17% 17% 17%17%17%17%
def fun(n):
fu = 1
for i in range(1,n+1):
fu *= i
return fu
fun(3)
1. 0
2. 3
3. 6
4. mingi muu arv
5. mitte midagi
6. veateade
Mis ilmub ekraanile?
24 1. 2. 3. 4. 5. 6.
17% 17% 17%17%17%17%
def fun(n):
fu = 1
for i in range(1,n+1):
fu *= i
return fu
fun(5)
1. 0
2. 3
3. 6
4. mingi muu arv
5. mitte midagi
6. veateade
Tsükkel funktsioonis
def faktoriaal (n):
fakt = 1
for i in range(1,n+1):
fakt *= i
return fakt
25
Funktsioon tsüklis
def ruutu (arv):
return arv*arv
for i in range(10):
print(ruutu(i))
26
27
Järjend
• Jada – lineaarselt järjestatud hulk
• Järjend – lõplik jada
• Paljudes keeltes: massiiv – ühte ja sama
tüüpi muutujate hulk
• Pythonis: list
– listi elemendid võivad olla erinevat tüüpi
– saab lisada uusi elemente või olemasolevaid
eemaldada
28
Listide konstrueerimine
a = [1, 7, 3, 5]
b = [2, 8, 0, 2]
c = [a, b, [0, 1, 8, 3]]
# 3*4 maatriks
d = ["Hello", 1, c]
# erinevat tüüpi elementidega
e = [ ] # tühi list
Mis ilmub ekraanile?
29 1. 2. 3. 4. 5. 6.
17% 17% 17%17%17%17%
a = [1632, 1802, 1918]
a[1]
1. 1632
2. 1802
3. 1918
4. mingi muu arv
5. mitte midagi
6. veateade
Mis ilmub ekraanile?
30 1. 2. 3. 4. 5. 6.
17% 17% 17%17%17%17%
a = [1632, 1802, 1918]
a[-1]
1. 1632
2. 1802
3. 1918
4. mingi muu arv
5. mitte midagi
6. veateade
Mis ilmub ekraanile?
31 1. 2. 3. 4. 5. 6.
17% 17% 17%17%17%17%
a = [1632, 1802, 1918]
a[3]
1. 1632
2. 1802
3. 1918
4. mingi muu arv
5. mitte midagi
6. veateade
32
Indeksid
a = [1, 7, 3, 5]
b = a[0] # b = 1
c = a[1] # c = 7
d = a[-1] # d = 5
e = a[-4] # e = 1
a[7]??
len(a)
33
Ümberpööramine
a = [3, 6, 8, 9]
for i in range(len(a)//2):
tmp = a[i]
a[ i ] = a[-i-1]
a[-i-1] = tmp
print (a)
34
Tükeldamine
a[3:7]
a[:6]
a[8:]
a[:-4]
35
Veel tehteid
järjend.append(x) – lisab x järjendi lõppu
järjend.pop(i) – väärtuseks on element
indeksiga i (st selle, millele vastab
järjend[i]), eemaldab selle elemendi
järjendist
Mis ilmub ekraanile?
36 1. 2. 3. 4. 5. 6.
17% 17% 17%17%17%17%
b = [1, 2, 3, 4]
b.pop(2)
1. 1
2. 2
3. 3
4. mingi muu arv
5. mitte midagi
6. veateade
37
Mõned olulised klassikalised
tegevused
• Kõigi elementide eraldi väljastamine
a = [1, 4, 2, -5]
for elem in a:
print(elem)
• Maksimum
– olemas on max(a), aga teeme ise
def maksimaalne(list1):
kandidaat = list1[0]
for k in list1: #0. element ka
if k > kandidaat:
kandidaat = k
return kandidaat
a = [1, 4, 2, -5]
print(maksimaalne(a))
38
Loengu tempo oli
(1. paariline)
39 1. 2. 3.
0% 0%0%
1. liiga kiire
2. paras
3. liiga aeglane
Materjal tundus
(1. paariline)
40 1. 2. 3.
0% 0%0%
1. liiga lihtne
2. parajalt jõukohane
3. liiga keeruline
Loengu tempo oli
(2. paariline)
41 1. 2. 3.
0% 0%0%
1. liiga kiire
2. paras
3. liiga aeglane
Materjal tundus
(2. paariline)
42 1. 2. 3.
0% 0%0%
1. liiga lihtne
2. parajalt jõukohane
3. liiga keeruline
Suur tänu osalemise eest!
Kohtumiseni!
43