====== Den 3 ======
===== Opakování for-cyklu =====
==== Úkol 1 ====
# Vasek
a = int(input("Zadejte diferenci: "))
b = int(input("Zadejte prvni clen: "))
for i in range(b,a*20+b,a):
print(i)
----
==== Úkol 2 ====
# riskoana
n = int(input("Zadejte hodnost: "))
for i in range(n-1): #jen do předposlední řady
for j in range(n-1): #poslední sloupec budeme řešit odděleně
if i == j:
print("1", end=", ")
else:
print("0", end=", ")
print("0") #poslední sloupec dá vždycky 0
for i in range(n-1): #poslední řádka
print("0", end=", ")
print("1")
=== Úkol 2 alternativní řešení ===
jiné, elegantnější řešení:
# riskoana
n = int(input("Zadejte hodnost: "))
for i in range(n):
for j in range(n):
#které číslo vytisknu
if i == j:
print("1", end="")
else:
print("0", end="")
#zakončení řádku
if j < n - 1:
print(", ", end="")
else:
print()
----
==== Úkol 3 ====
# kubikji2, riskoana
size = int(input("Zadejte hodnost matice: "))
for i in range(size):
for j in range(size):
# pro sudý řádek jedničky, jinak 0
if(i % 2 == 0):
print("1 ", end="")
else:
print("0 ", end="")
# zalomení řádku
print()
----
==== Úkol 4 ====
# kubikji2, riskoana
size = int(input("Zadejte hodnost matice: "))
for i in range(0, size):
for j in range(0, size):
# když je součet indexů sudý, vypiš 1
if( (i+j) % 2 == 0):
print("1 ", end="")
else:
print("0 ", end="")
# zalomení
print()
----
==== Úkol 5 ====
# riskoana
for i in range(1, 11):
for j in range(1, 11):
print("%2d" %(i * j), end=" ")
print(" ")
----
/*
==== Úkol 2 ====
# kubikji2
suma = 0 # vnitrek zavorky z rovnice
# 10000 iteraci cyklu dava pomerne hezke reseni
# s vetsim poctem opakovani je hodnota pi presnejsi
for i in range(0,1000):
clen = 1/(2*i+1) # aktualni clen posloupnosti v zavorce
# rozhodovani o znamenku
if(i%2 == 0):
suma = suma + clen
else:
suma = suma - clen
pi = 4*suma
print(pi)
----
===== Opakování vnořeného for-cyklu =====
==== Úkol 2 ====
# Lukas Halaska
for i in range(1, 11):
for j in range(1, 11):
x = i*j
if j==1:
if (len(str(x))==2):
print(end=str(x))
else:
print(" ", end=str(x))
elif j==10:
if (len(str(x))==3):
print(" ", x, sep="")
elif (len(str(x))==2):
print(" ", x, sep="")
else:
print(" ", x, sep="")
else:
if (len(str(x))==2):
print(" ", end=str(x))
else:
print(" ", end=str(x))
#Vojta J.
for k in range (1,10):
for l in range (1,10):
print("%2d" % (k*l), end=" ")
print(" ")
----
==== Úkol 3 ====
# Cvicici (Jirka)
size = 5 # VOLITELNE, velikost matice
# prvni obrazec
for i in range(0, size):
# vypis tolik "X", kolikaty mam radek
# (nejhornejsi radek je prvni)
# |
# V
for j in range(0, i+1):
print("X ", end="")
# VOLITELNE, zbytek radku vypln mezerami
for j in range(0,size-i):
print(" ", end="")
# zalomeni radku
print("")
# volny radek mezi obrazci
print("")
# druhy obrazec
for i in range(0, size):
# vypis tolik mezer, kolikaty mame radek
# (nejhornejsi radek je nulty)
for j in range(0, i):
print(" ", end="")
# zbytek radku vypln "X"
for j in range(0,size-i):
print("X ", end="")
print("")
# volny radek mezi obrazci
print("")
# treti obrazec
for i in range(0, size):
for j in range(0, size):
# "X" jsou v prvnim a poslednim radku a take v prvnim a poslednim sloupci
# plati-li alespon jedno, vypis "X"
if(i==0) or (i==size-1) or (j==0) or (j==size-1):
print("X ", end="")
else:
print(" ", end="")
print("")
----
*/
===== While cyklus =====
==== Úkol 1 ====
# author kubikji2
cur_num = float(input("Zadej dalsi cislo: "))
# pocet cisel
n_nums = 0
# pocet sudych cisel
n_even = 0
# suma cisel
num_sum = 0
# nejvetsi cislo, na zacatku stejne jako prvni zadane cislo
num_largest = cur_num
# nejmensi cislo, na zacatku stejne jako prvni zadane cislo
num_smallest = cur_num
while True:
num_sum += cur_num
n_nums += 1
# je-li cislo sude ...
if cur_num % 2 == 0:
# ... zvys pocet sudych cisel
n_even += 1
# kdyz je nove cislo vetsi dosud nejvetsimu ...
if cur_num > num_largest:
# ... aktualizuj nejvetsi cislo
num_largest = cur_num
if cur_num < num_smallest:
# ... aktualizuj nejmensi cislo
num_smallest = cur_num
# nacitani dalsiho vstupu
cur_num = float(input("Zadej dalsi cislo: "))
if cur_num == 0:
break
n_odd = n_nums - n_even
num_avg = num_sum / n_nums
print("Celkem zadano cisel: " + str(n_nums))
print("Pocet lichych cisel: " + str(n_odd))
print("Pocet sudych cisel: " + str(n_even))
print("Nejvetsi cislo: " + str(num_largest) + ", nejmensi cislo: " + str(num_smallest))
print("Prumerna hodnota: " + str(num_avg))
==== Úkol 2 ====
# riskoana
a = int(input("zadejte prvni cislo: "))
b = int(input("zadejte prvni cislo: "))
if a > b:
res = b
while(res <= a):
res+=b
print(res)
else:
print("podminky")
----
==== Úkol 3 ====
# author kubikji2
dec = int(input("Zadej cislo v desitkove soustave: "))
# 1. nejprve urcime delku binarniho cisla, tedy maximalni exponent ...
num = dec
max_exp = 0
# ... postupne zkousime delit celociselne dvemi, dokud je cislo vetsi nez 1
while num > 1:
num //= 2
max_exp += 1
# 2. zacneme od maximalniho exponentu ...
cur_exp = 2**max_exp
while cur_exp > 0:
# a postupne zkousime celociselne delit cislo dvema
cur_bit = dec // cur_exp
# ... vysledky odpovidaji bitu, ktery vypiseme
print(str(cur_bit), end="")
# ... aktualizujeme hodnotu cisla
dec -= cur_bit*cur_exp
# ... zmensime exponent
cur_exp //= 2
# zalomeni radku
print()
----
==== Úkol 4 ====
# kubikji2, riskoana
import math
x = int(input("Zadejte cele cislo: "))
while True:
x += + 1
je_prvocislo = True
for i in range(2, int(math.sqrt(x) + 1)):
if x % i == 0:
je_prvocislo = False
break
if je_prvocislo:
print("Hledane cislo je", x)
break
----
==== Úkol 5 ====
# author kubikji2 et al.
# nastaveni limitu
lower = 1
upper = 100
# dokud neni horni limit stejny jako dolni limit ...
while upper != lower:
# ... spocitej hodnotu stredu ...
middle = (upper+lower)//2
# ... a zeptej se na ni
c = input("Je tvoje cislo vetsi nez " + str(middle) + "? (y/n)")
# pokud si uzivatel mysli vyssi cislo nez je polovina...
if c == "y":
# ... uprav dolni mez na hodnotu poloviny a jednicku navrch
lower = middle + 1
else:
# ... jinak uprav horni mez na hodnotu poloviny
upper = middle
print("Tvoje cislo je: " + str(upper))
----
===== Úkoly na seznamy a N-tice =====
==== Úkol 0 ====
# author kubikji2
N = 5
# 1. nacist a ulozit sekvenci
nums = []
for i in range(N):
# nacteni cisla ...
cur_num = float(input("Zadej cislo: "))
# ... ulozeni cislo
nums.append(cur_num)
# 2. vypsat sekvenci
for i in range(N):
print(nums[i], end=" ")
# zalomeni na konci
print()
----
==== Úkol 1 ====
# author kubikji2
N = 5
# 1. nacist a ulozit
nums = []
for i in range(N):
cur_num = float(input("Zadej cislo: "))
nums.append(cur_num)
# 2. setridit
nums.sort()
# 3. vypsat
for i in range(N):
print(nums[i], end=" ")
print()
----
==== Úkol 2 ====
# author kubikji2
N = 5
# 1. nacist a ulozit
nums = []
for i in range(N):
cur_num = float(input("Zadej cislo: "))
nums.append(cur_num)
# 2. setridit
nums.sort()
nums.reverse()
# 3. vypsat
for i in range(N):
print(nums[i], end=" ")
print()
\\
=== Alternativní řešení úkolu 2 ===
# author kubikji2
N = 5
# 1. nacist a ulozit
nums = []
for i in range(N):
cur_num = float(input("Zadej cislo: "))
nums.append(cur_num)
# 2. setridit
nums.sort(reverse=True)
# 3. vypsat
for i in range(N):
print(nums[i], end=" ")
print()
----
==== Úkol 3 ====
# author kubikji2
N = 5
# 1. nacist a ulozit
nums = []
for i in range(N):
cur_num = float(input("Zadej cislo: "))
nums.append(cur_num)
# 2. setridit
nums.sort()
# 3. minimum je prvni a maximum posledni cislo
print("minimum je: " + str(nums[0]))
print("maximum je: " + str(nums[-1]))
\\
=== Alternativní řešení úkolu 3 ===
# author kubikji2
N = 5
# 1. nacist a ulozit
cur_num = float(input("Zadej cislo: "))
# aktualni minimum je jedine nactene cislo
num_min = cur_num
# aktualni maximum je jedine nactene cislo
num_max = cur_num
# akutalni list obsahuje jedine nactene cislo
nums = [cur_num]
# nacitame zbyla cisla (N-1)
for i in range(N-1):
# nacteme cislo
cur_num = float(input("Zadej cislo: "))
# porovname aktualni cislo s minimem ...
if cur_num < num_min:
# ... aktualizujeme minimum, je-li treba
num_min = cur_num
# porovname aktualni cislo s maximem ...
if cur_num > num_max:
# ... aktualizujeme maximum, je-li treba
num_max = cur_num
nums.append(cur_num)
# 3. vypsani minim a maxima
print("minimum je: " + str(num_min))
print("maximum je: " + str(num_max))
----
==== Úkol 4 ====
# author kubikji2
N = 5
# 1. nacist a ulozit
nums = []
for i in range(N):
cur_num = float(input("Zadej cislo: "))
nums.append(cur_num)
# 2. setridit
nums.sort()
# 3. maximalni rozdil je mezi prvnim a poslednim cislem
print("maximalni rozdil je: " + str(nums[-1]-nums[0]))
\\
=== Alternativní řešení úkolu 4 ===
# author kubikji2
N = 5
# 1. nacist a ulozit
cur_num = float(input("Zadej cislo: "))
# aktualni minimum je jedine nactene cislo
num_min = cur_num
# aktualni maximum je jedine nactene cislo
num_max = cur_num
# akutalni list obsahuje jedine nactene cislo
nums = [cur_num]
# nacitame zbyla cisla (N-1)
for i in range(N-1):
# nacteme cislo
cur_num = float(input("Zadej cislo: "))
# porovname aktualni cislo s minimem ...
if cur_num < num_min:
# ... aktualizujeme minimum, je-li treba
num_min = cur_num
# porovname aktualni cislo s maximem ...
if cur_num > num_max:
# ... aktualizujeme maximum, je-li treba
num_max = cur_num
nums.append(cur_num)
# 3. maximalni rozdil je mezi minimem a maximem
print("maximalni rozdil je: " + str(num_max-num_min))
----
==== Úkol 5 ====
# author kubikji2
# 0. klicova myslenka, nejmensi rozdil je mezi dvema cisly, ktera lezi vedle sebe v setrizenem seznamu
N = 5
# 1. nacist a ulozit
nums = []
for i in range(N):
cur_num = float(input("Zadej cislo: "))
nums.append(cur_num)
# 2. setridit
nums.sort()
# 3. projit list a najit nejmensi rozdil
# inicializijeme rozdil na rozdil prvnich dvou cisel ...
min_diff = nums[1]-nums[0]
min_num1 = nums[0]
min_num2 = nums[1]
# ... a iterujeme az od druhe dvojice
for i in range(N-1):
# aktualni rozdil je nasledujici cislo, minus aktualni
cur_diff = nums[i+1] - nums[i]
if cur_diff < min_diff:
min_diff = cur_diff
min_num1 = nums[i]
min_num2 = nums[i+1]
# 4. vypis vysledku
print("Nejmensi rozdil je: " + str(min_diff) + " a to mezi cisli " + str(min_num1) + " a " + str(min_num2))
----
==== Úkol 6 ====
# author kubikji2
N = 5
# 1. nacist a ulozit
nums = []
for i in range(N):
cur_num = float(input("Zadej cislo: "))
nums.append(cur_num)
# 2. setridit
nums.sort()
# 3. nalezeni medianu uprostred seznamu ...
med = nums[N//2]
# ... pokud je N sude cislo, je median uprostred mezi dvema prostrednimi cisli
if N % 2 == 0:
med = (nums[N//2-1]+nums[N//2])/2
print("Median je " + str(med))
----
==== Úkol 7 ====
# author kubikji2
N = 6
# 1. nacist a ulozit
nums = []
for i in range(N):
cur_num = float(input("Zadej cislo: "))
nums.append(cur_num)
# 2. prohodit poradi
for i in range(N//2):
tmp = nums[i]
nums[i] = nums[N-i-1]
nums[N-i-1] = tmp
# 3. vypsat
for i in range(N):
print(nums[i], end=" ")
print()
\\
=== Alternativní řešení úkolu 7 ===
# author kubikji2
N = 6
# 1. nacist a ulozit
nums = []
for i in range(N):
cur_num = float(input("Zadej cislo: "))
nums.append(cur_num)
# 2. prohodit poradi
for i in range(N//2):
nums[i], nums[N-i-1] = nums[N-i-1], nums[i]
# 3. vypsat
for i in range(N):
print(nums[i], end=" ")
print()
----
==== Úkol 8 ====
# author kubikji2
N = 6
# 1. nacist a ulozit
nums = []
for i in range(N):
cur_num = float(input("Zadej cislo: "))
nums.append(cur_num)
# 2. seradit
# Pro každou pozici v listu ...
for i in range(N):
# ... projdi nesetrizenou cast seznamu ...
for j in range(N-i-1):
# ... a pokud jsou dve sousedni cisla neserazena ...
if nums[j] > nums[j+1]:
# ... tak je prohod.
nums[j], nums[j+1] = nums[j+1], nums[j]
# POZNAMKA: s kazdym pruchodem vnejsiho cyklu, roste od konce i pocet setrizenych cisel
# 3. vypsat
for i in range(N):
print(nums[i], end=" ")
print()
----
==== Úkol 9 ====
# riskoana
hodnoty = [50, 20, 10, 5, 2, 1]
mince = []
minceCelkem = 0
utrata = int(input("Zadejte, jakou castku chcete zaplatit: "))
if utrata < 0:
print("Tak co tohle ma byt, zas Ti nekdo dluzi?")
else:
for i in range(len(hodnoty)):
mince.append(int(utrata // hodnoty[i]))
minceCelkem += (utrata // hodnoty[i])
utrata = utrata % hodnoty[i]
print("Celkem je potreba " + str(minceCelkem) + " minci.")
for i in range(len(hodnoty)):
print("Pocet minci v hodnote ", hodnoty[i], " je: ", mince[i])
----
===== Úkoly využívající modul random =====
==== Úkol 0 ====
# author kubikji2
import random
N = 10
# pocet sudych cisel
n_even = 0
# suma cisel
num_sum = 0
# nejvetsi cislo
num_largest = 0
# druhe nejvetsi cislo
num_second_largest = 0
for i in range(N):
# vyber nahodne cislo
num = random.randint(1,100)
num_sum += num
# je-li cislo sude ...
if num % 2 == 0:
# ... zvys pocet sudych cisel
n_even += 1
# kdyz je nove cislo vetsi nebo rovne, dosud nejvetsimu ...
if num >= num_largest:
# ... dosud nejvetsi cislo je druhe nejvetsi ...
num_second_largest = num_largest
# ... a aktualni cislo je nejvetsi
num_largest = num
# ... jinak zkontroluj druhe nejvetsi cislo
elif num > num_second_largest:
# ... pokud je vetsi, aktualizuj jeho hodnotu
num_second_largest = num
n_odd = N - n_even
num_avg = num_sum / N
print("Pocet sudych cisel: " + str(n_even))
print("Pocet lichych cisel: " + str(n_odd))
print("Prumerna hodnota: " + str(num_avg))
print("Nejvetsi cislo: " + str(num_largest) + ", druhe nejvetsi cislo: " + str(num_second_largest))
----
==== Úkol 1 ====
# author kubikji2
import math
ref_pi = math.pi
# pocet desetinnych mist
N = 4
# pozadovana presnost jako 10^(-N)
prec = 10 ** -N
# pocet iteraci
n_iter = 0
# ctvrtina naseho pi (tedy vnitrek zavorky)
my_pi_4 = 0
while abs(4*my_pi_4-ref_pi) > prec:
# znamenko v rade je -1 ...
sign = -1
# ... pokud neni poradi iterace delitelne dvema ...
if n_iter % 2 == 0:
# ... pak je 1
sign = 1
# zvetseni ctvrtiny pi o prilusny clen posloupnosti
my_pi_4 += sign/(2*n_iter+1)
# zvyseni iterace
n_iter += 1
print("Bylo treba " + str(n_iter) + " iteraci.")
----
==== Úkol 2 ====
# proposed by LaSer
# adapted by kubikji2
import math, random
digits = int(input("Zadej presnost vypoctu (pocet desetinnych mist): "))
total_count = 0
in_circle_count = 0
my_pi = 0
accuracy = 10**(-digits)
approximations = []
while abs(my_pi - math.pi) > accuracy:
x = random.random()
y = random.random()
total_count += 1
if math.sqrt(x * x + y * y) <= 1:
in_circle_count += 1
my_pi = 4 * in_circle_count / total_count
#print(my_pi)
if (total_count % 100 == 0) and len(approximations) < 100:
approximations.append(my_pi)
for i in approximations:
approximation = approximations[i]
print("Hodnota pi po", 100*i, "iteracich je", approximation)
print("Konecna hodnota pi: ", my_pi)
----
==== Úkol 3 ====
# author kubikji2
import random
# vyber cislo, co si program "mysli"
to_be_guessed = random.randint(0,100)
# vstup uzivatele
user_guess = -1
# dokud uzivatel neuhodne...
while user_guess != to_be_guessed:
# ... ptej se ho na tip
user_guess = int(input("Tvuj tip: "))
# ... a vypis prislusnou hlasku
if user_guess > to_be_guessed:
print("Moje cislo je mensi.")
elif user_guess < to_be_guessed:
print("Moje cislo je vetsi.")
else:
print("Uhodl jsi!")
----
==== Úkol 4 ====
# author kubikji2
import random
N = 100
# simulace hazeni kostkou
rolls = []
for i in range(N):
roll1 = random.randint(1,6)
roll2 = random.randint(1,6)
rolls.append(roll1+roll2)
# pro kazdou moznost ...
for i in range(2,13):
# ... napis jeji hodnotu ...
print(str(i)+": ", end="")
# ... a projdi vsechny hody ...
for i_roll in range(N):
# ... pokud je hodnota hodu stejna jako aktualni soucet kostek ...
if rolls[i_roll] == i:
# ... pridej hvezdicku
print("*",end="")
# po kazdem moznem souctu, zalom radek
print()
----