kontrolne strukture, liste - university of belgrade · 2020. 1. 24. · koji proverava da li zadati...

32
Programiranje 1 Kontrolne strukture, Liste Univerzitet u Beogradu Elektrotehnički fakultet

Upload: others

Post on 23-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Programiranje 1

Kontrolne strukture,Liste

Univerzitet u Beogradu

Elektrotehnički fakultet

Page 2: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Sadržaj

Logički tip podataka

⚫ Logički operatori

⚫ Relacioni operatori

Uslovno grananje

Liste

Petlje

Opseg brojeva

Ispis i sortiranje liste

ETF Beograd::Programiranje 1 2/32

Page 3: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Logički tip podataka

Dve moguće vrednosti: True i False

Funkcija bool() vraća logički tip:

⚫ False (0, "", False, [], (), {}, None) ili True (ostalo)

Relacioni operatori vraćaju logički tip:

⚫ ==, !=, >, <, >=, <=

Logički operatori rade sa operandima logičkog tipa:

⚫ and, or, not

a = True # True

b = bool(0) # False

c = (17 >= 2) or a and b # True

d = not (42 or not c) # False

ETF Beograd::Programiranje 1 3/32

Page 4: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Uslovno grananje (1)

Rezervisane reči if, elif, else

broj = int(input("Unesi ceo broj: "))

if broj >= 0 and broj <= 9:

print("Broj {} je jednocifren.".format(broj))

godina = int(input("Unesi godinu:"))

if (godina % 4 == 0) and (godina % 100 != 0 or godina % 400 == 0):

print("Godina {}. je prestupna.".format(godina))

else:

print("Godina {}. nije prestupna.".format(godina))

a = int(input("A: "))

b = int(input("B: "))

if a > b:

print("A > B")

elif a < b:

print("B > A")

else:

print("A = B")

ETF Beograd::Programiranje 1 4/32

Page 5: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Uslovno grananje (2)

Više naredbi unutar jedne grane:

⚫ Indentacija – beli znakovi na početku naredbe

⚫ Susedne naredbe sa istom indentacijom pripadaju istom bloku naredbi (istoj grani)

Ugnježdavanje je dozvoljeno:

if input() == "":

print("Prva naredba unutar if grane.")

print("Druga naredba unutar if grane.")

print("Naredba nakon if grane.")

if input() == "D":

if input() == "A":

print("Uneo si celo DA")

else:

print("Uneo si samo D")

ETF Beograd::Programiranje 1 5/32

Page 6: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Na programskom jeziku Python sastaviti programkoji proverava da li zadati trocifreni broj imasvojstvo: 𝐴𝐵𝐶 = 𝐴𝐵2 − 𝐶2. Primer je broj 147.

1. zadatak

abc = int(input("Unesite pozitivan trocifreni broj ABC: "))

if not (100 <= abc < 1000):

print("Broj {} nije u opsegu [100, 1000).".format(abc))

else:

ab = abc // 10

c = abc % 10

if abc == ab**2 - c**2:

print("{0} = {1}*{1} - {2}*{2}".format(abc, ab, c))

else:

print("Broj {} nema navedeno svojstvo.".format(abc))

ETF Beograd::Programiranje 1 6/32

Page 7: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Stringovi – Indeksiranje

Delu stringa može se pristupati korišćenjem []:

⚫ Može se pristupati jednom znaku ili opsegu

⚫ Može se pristupati u odnosu na početak i u odnosu na kraj stringa

a = "Stringovi."

print(a[0]) # S

print(a[-1]) # .

print(a[1:4]) # tri

print(a[-4:-1]) # ovi

S t r i n g o v i .

0 1 2 3 4 5 6 7 8 9

-10 -9 -8 -7 -6 -5 -4 -3 -2 -1

ETF Beograd::Programiranje 1 7/32

Page 8: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Na programskom jeziku Python sastaviti programkoji ispisuje vrednost broja zadatog u drugomkomplementu na zadatom broju bita.

2. zadatak

n = int(input("Sa koliko se bita predstavlja broj: "))

pr = input("Koja je binarna predstava broja: ")

if len(pr) == n and int(pr[0]) == 1:

vr = -(2 ** n - int(pr, 2))

print("U pitanju je negativan broj {}.".format(vr))

elif len(pr) <= n:

vr = int(pr, 2)

print("U pitanju je pozitivan broj {}.".format(vr))

else:

print("Broj se ne može predstaviti sa {} bita.".format(n))

ETF Beograd::Programiranje 1 8/32

Page 9: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Na programskom jeziku Python sastaviti programkoji vrši konverziju temperature. Temperatura sezadaje sa standardnog ulaza u jednoj od trijedinice: farenhajt (°F), kelvin (K) ili rankin (°R).Zadata temperatura se konvertuje u temperaturuizraženu u celzijusima (°C). Formule za konverzijusu sledeće:

⚫ ℃ = ℉ − 32 ∙5

9

⚫ ℃ = 𝐾 − 273,15

⚫ ℃ = °𝑅 − 491,67 ∙5

9

3. zadatak (1/2)

ETF Beograd::Programiranje 1 9/32

Page 10: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

3. zadatak (2/2)

temperatura = input(

"""Konverzija temperature (°F->°C, K->°C ili °R->°C)

Unesite temperaturu (npr. 10 F, 130 K, 37 R, ...): """

)

jedinica = temperatura[-1]

vrednost = float(temperatura[0:-1])

if jedinica == "F":

celzijus = (vrednost - 32) * 5/9

elif jedinica == "K":

celzijus = vrednost - 273.15

elif jedinica == "R":

celzijus = (vrednost - 491.67) * 5/9

print("{0}°{1} -> {2:.2f}°C".format(

vrednost, jedinica, celzijus

))

ETF Beograd::Programiranje 1 10/32

Page 11: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Liste

Kolekcije drugih objekata (elementi liste)

Promenljiv tip podataka

Elementi mogu biti različitih tipova

Elementi su uređeni:

⚫ Može im se pristupati preko indeksa

⚫ Može se iterirati kroz listu

Dozvoljeni su duplikati (isti elementi)

lista = [1, "tekst", 1, False] # [1, 'tekst', 1, False]

lista[0] += 7 # [8, 'tekst', 1, False]

lista[3] = True # [8, 'tekst', 1, True]

ETF Beograd::Programiranje 1 11/32

Page 12: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Na programskom jeziku Python sastaviti programkoji izračunava skalarni i vektorski proizvod dvavektora. Vektori se učitavaju sa standardnog ulazapri čemu su parametri odvojeni zarezom. Formuleza proizvode su:

⚫ 𝑃 ∙ 𝑄 = σ𝑖=1𝑛 𝑃𝑖 ∙ 𝑄𝑖

4. zadatak (1/2)

p: 1, 2, 3

q: 4, 5, 6

[1.0, 2.0, 3.0] * [4.0, 5.0, 6.0] = 32.0

[1.0, 2.0, 3.0] x [4.0, 5.0, 6.0] = [-3.0, 6.0, -3.0]

𝑃 × 𝑄 = 𝑃𝑦 ∙ 𝑄𝑧 − 𝑃𝑧 ∙ 𝑄𝑦 , 𝑃𝑧 ∙ 𝑄𝑥 − 𝑃𝑥 ∙ 𝑄𝑧, 𝑃𝑥 ∙ 𝑄𝑦 − 𝑃𝑦 ∙ 𝑄𝑥

ETF Beograd::Programiranje 1 12/32

Page 13: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

4. zadatak (2/2)

p = input("p: ").split(", ")

q = input("q: ").split(", ")

p[0] = float(p[0])

p[1] = float(p[1])

p[2] = float(p[2])

q[0] = float(q[0])

q[1] = float(q[1])

q[2] = float(q[2])

skalarni = p[0]*q[0] + p[1]*q[1] + p[2]*q[2]

vektorski = []

vektorski.append(p[1]*q[2]-p[2]*q[1])

vektorski.append(p[2]*q[0]-p[0]*q[2])

vektorski.append(p[0]*q[1]-p[1]*q[0])

print("{} * {} = {}".format(p, q, skalarni))

print("{} x {} = {}".format(p, q, vektorski))

Da li može kraće?

ETF Beograd::Programiranje 1 13/32

Page 14: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Petlje

Naredbe unutar while petlje se izvršavaju sve dok je ispunjen uslov petlje

Naredbe unutar for petlje se izvršavaju za svaki element neke strukture (liste, stringa, opsega, …)

brojac = 0

while brojac < 5:

print(brojac, end=" ") # 0 1 2 3 4

brojac += 1

lista = [0, 1, 2, 3, 4]

for element in lista:

print(element, end=" ") # 0 1 2 3 4

rec = "petlja"

for slovo in rec:

print(slovo, end=" ") # p e t l j a

ETF Beograd::Programiranje 1 14/32

Page 15: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Opseg brojeva

Za iteriranje kroz petlju određen broj puta koristi se funkcija range() kojoj se zadaje:

⚫ Početna vrednost

⚫ Vrednost do koje se iterira

⚫ Korak iteracije

for i in range(5): # range(0, 5, 1)

print(i, end=" ") # 0 1 2 3 4

for i in range(2, 7): # range(2, 7, 1)

print(i, end=" ") # 2 3 4 5 6

for i in range(1, 10, 2):

print(i, end=" ") # 1 3 5 7 9

for i in range(4, -1, -1):

print(i, end=" ") # 4 3 2 1 0

ETF Beograd::Programiranje 1 15/32

Page 16: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Na programskom jeziku Python sastaviti programkoji računa skalarni proizvod dva vektora. Iskoristitipetlje.

5. zadatak

p = input("p: ").split(", ")

q = input("q: ").split(", ")

for i in range(3):

p[i] = float(p[i])

q[i] = float(q[i])

skalarni = 0

for i in range(len(p)):

skalarni += p[i]*q[i]

print("{} * {} = {}".format(p, q, skalarni))

Da li može kraće?

ETF Beograd::Programiranje 1 16/32

Page 17: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Na programskom jeziku Python sastaviti programkoji ciklično proverava da li je uneti broj deljiv sa 3.Unos nule ili negativnog broja prekida izvršavanje.

6. zadatak

while True:

broj = input("Broj: ")

if int(broj) <= 0: break

zbir = 0

for cifra in broj:

zbir += int(cifra)

print("Deljiv") if zbir % 3 == 0 else print("Nije deljiv")

Obratiti pažnju na izgled if i if-else naredbe!

ETF Beograd::Programiranje 1 17/32

Page 18: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Na programskom jeziku Python sastaviti programkoji iz liste celih brojeva izdvaja najdužu podlistukoja je uređena strogo rastuće. Pretpostaviti dalista sadrži bar jedan element.

7. zadatak (1/2)

Lista: 1 1 2 1 2 3 1 2 3 4

Podlista: [1, 2, 3, 4]

lista = input("Lista: ").split()

for i in range(len(lista)):

lista[i] = int(lista[i])

tr_duz = max_duz = 1

tr_ind = max_ind = 0

ETF Beograd::Programiranje 1 18/32

Page 19: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

7. zadatak (2/2)

for i in range(1, len(lista)):

if lista[i] > lista[i - 1]:

tr_duz += 1

else:

if tr_duz > max_duz:

max_duz = tr_duz

max_ind = tr_ind

tr_duz = 1

tr_ind = i

if tr_duz > max_duz:

max_duz = tr_duz

max_ind = tr_ind

podlista = []

for i in range(max_ind, max_ind + max_duz):

podlista.append(lista[i])

print("Podlista: {}".format(podlista))

ETF Beograd::Programiranje 1 19/32

Page 20: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Na programskom jeziku Python sastaviti programkoji tabelira polinom.

Primer: 𝑃 𝑥 = 3𝑥2 + 𝑥 + 4

8. zadatak

Stepen polinoma: 2

Koeficijenti polinoma: 3 1 4

xmin, xmax, dx: 1, 10, 1.5

x = 1.0 -> P(x) = 8.0

x = 2.5 -> P(x) = 25.25

x = 4.0 -> P(x) = 56.0

x = 5.5 -> P(x) = 100.25

x = 7.0 -> P(x) = 158.0

x = 8.5 -> P(x) = 229.25

x = 10.0 -> P(x) = 314.0

ETF Beograd::Programiranje 1 20/32

Page 21: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

8. zadatak

stepen = int(input("Stepen polinoma: "))

koeficijenti = input("Koeficijenti polinoma: ").split()

xmin, xmax, dx = input("xmin, xmax, dx: ").split(", ")

xmin = float(xmin)

xmax = float(xmax)

dx = float(dx)

x = xmin

while x <= xmax:

p = 0

s = stepen

for k in koeficijenti:

p += float(k) * x**s

s -= 1

print("x = {} -> P(x) = {}".format(x, p))

x += dx

ETF Beograd::Programiranje 1 21/32

Page 22: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Na programskom jeziku Python sastaviti programkoji iz učitane liste izbacuje:

⚫ a) sve elemente sa najvećom vrednošću

⚫ b) prvi element sa najmanjom vrednošću

⚫ c) poslednji element sa najmanjom vrednošću

Prilikom izbacivanja svakog elementa, ispisuje senjegova prvobitna pozicija u listi.

Pri učitavanju se prvo unosi broj elemenata liste, azatim i sami elementi liste počevši od poslednjegelementa liste.

9. zadatak (1/4)

ETF Beograd::Programiranje 1 22/32

Page 23: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Dva načina za učitavanje liste:

9. zadatak (2/4)

n = int(input("n: "))

a = []

for i in range(n):

elem = int(input("A[{}]: ".format(n - i - 1)))

a.insert(0, elem)

n = int(input("n: "))

a = []

for i in range(n - 1, -1, -1):

elem = int(input("A[{}]: ".format(i)))

a.append(elem)

a.reverse()

ETF Beograd::Programiranje 1 23/32

Page 24: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

a):

9. zadatak (3/4)

maksimum = max(a)

for i in range(a.count(maksimum)):

print("Izbačen sa {}.".format(a.index(maksimum) + i))

a.remove(maksimum)

print(a)

b):

minimum = min(a)

print("Izbačen sa {}.".format(a.index(minimum)))

a.remove(minimum)

print(a)

ETF Beograd::Programiranje 1 24/32

Page 25: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

c):

9. zadatak (4/4)

minimum = min(a)

a.reverse()

pozicija = len(a) - a.index(minimum) - 1

print("Izbačen sa {}.".format(pozicija))

a.reverse()

a.pop(pozicija)

print(a)

ETF Beograd::Programiranje 1 25/32

Page 26: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Pregled

ETF Beograd::Programiranje 1 26/32

Page 27: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Pregled – Funkcije i metode

Ugrađene funkcije:

⚫ bool()

⚫ int()

⚫ len()

Metode za rad sa stringovima:

⚫ split()

Metode za rad sa listama:

⚫ append()

⚫ insert()

⚫ reverse()

⚫ count()

⚫ index()

⚫ remove()

⚫ range()

⚫ max()

⚫ min()

⚫ pop()

ETF Beograd::Programiranje 1 27/32

Page 28: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Pregled – Ključne reči

Za rad sa logičkim tipom podataka:

⚫ True, False

⚫ and, or, not

Za rad sa uslovnim grananjem:

⚫ if, elif, else

Za rad sa petljama:

⚫ while, for, in, break, continue, pass

Za definisanje null vrednosti promenljivoj:

⚫ None

ETF Beograd::Programiranje 1 28/32

Page 29: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Pregled – Operatori

Aritmetički operatori

Bitski operatori

Operatori dodele

Relacioni operatori:

⚫ ==, !=, >, <, >=, <=

Logički operatori:

⚫ and, or, not

ETF Beograd::Programiranje 1 29/32

Page 30: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Pregled – Tipovi podataka

Int

Float

Complex

Boolean

String

List

Tuple

Set

Dict

Numerički tipovi

Logički tip

Kolekcije

ETF Beograd::Programiranje 1 30/32

Page 31: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Literatura – Knjige

M. Kovačević, Osnove programiranja u Pajtonu, Akademska misao, Beograd, 2017.

M. Lutz, Learning python: Powerful object-oriented programming, 5th edition, O'Reilly Media, Inc., 2013.

J. Zelle, Python Programming: An Introduction to Computer Science, 3rd Ed., Franklin, Beedle & Associates, 2016.

D. Beazley, B. K. Jones, Python Cookbook, 3rd edition, O'Reilly Media, 2013.

A. Downey, J. Elkner, C. Meyers, How To Think Like A Computer Scientist: Learning With Python, free e-book

ETF Beograd::Programiranje 1 31/32

Page 32: Kontrolne strukture, Liste - University of Belgrade · 2020. 1. 24. · koji proverava da li zadati trocifreni broj ima svojstvo: = 2

Literatura – Online izvori

Python 3 documentation, https://docs.python.org/3/index.html

Learn Python, Basic tutorial, https://www.learnpython.org/

TutorialsPoint, Python tutorial https://www.tutorialspoint.com/python/index.htm

W3Schools, Python tutorial https://www.w3schools.com/python/

GeeksforGeeks, Python programming language https://www.geeksforgeeks.org/python-programming-language/

ETF Beograd::Programiranje 1 32/32