Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Den 2

Opakování

Úkol 1

Na vstupu přečtěte celé číslo reprezentující útratu v hospodě v Kč. Vypiště kolik mincí je minimálně potřeba zaplacení účtu, pokud nemůžete platit bankovkami. Vypiště také, které mince to budou. Připomínáme, že české mince mají hodnoty: 1, 2, 5, 10, 20 a 50.

Vzorový vstup:

Zadejte vasi utratu:
79

Vzorový výstup:

Celkem je potreba 5 minci
Pocet minci o hodnote 50 Kc: 1
Pocet minci o hodnote 20 Kc: 1
Pocet minci o hodnote 10 Kc: 0
Pocet minci o hodnote 5 Kc: 1
Pocet minci o hodnote 2 Kc: 2
Pocet minci o hodnote 1 Kc: 0

Pokud je zákazník příliš dlouho v hospodě, pokusí se zadat záporné číslo. Všechny podobné situace musíte ve svých kódech ošetřovat a vypsat odpovídající chybovou hlášku.

Řešení

For cyklus

Pokud potřebujete opakovat určitou část kódu několikrát, můžete tento program napsat pouze jednou a vložit jej do cyklu. Pro začátek se seznámíme s for cyklem. Jeho fungování si předvedeme na jednoduchém příkladu, kdy chceme 10-krát vypsat nápis “Hello world!”, který nám je již dobře známý.

for i in range(0, 10):
    print("Hello world!")

Pro provedení příkazu print() 10-krát, je potřeba nastavit rozsah od 0 do 10.

Cyklus začíná první hodnotou a zvyšuje hodnotu i, dokud je menší než druhá hodnota rozsahu (10).

Vnořený cyklus

Pro některé úlohy nám nestačí jednoduchý cyklus. V takovém případě je možné vytvořit vnořený cyklus (vícenásobný). Jeho fungování si budeme demonstrovat na následujícím příkladu:

for i in range(1, 5):
    for j in range(1, i):
        print(j)
    print("---")

Výstup tohoto programu bude:

---
1
---
1
2
---
1
2
3
---

Uvnitř hlavního (vnějšího) cyklu mohou být nejenom další cykly, ale i podmínky a samostatné příkazy.

Modul random

Někdy je v programu užitečné generovat náhodná čísla. Právě k tomuto účelu slouží modul random. Jeho funkce randint(a, b) vrátí celé číslo v intervalu <a, b>. Její použití demonstruje následující příklad, který vygeneruje náhodné číslo z rozsahu 1 až 6, a tedy simuluje hrací kostku.

# Program hraci kostka
import random
x = random.randint(1, 6)
print(x)

Takto vygenerovaná čísla ve skutečnosti nejsou náhodná, ale pseudonáhodná. To znamená, že jsou počítána jasně definovaným algoritmem, který vytváří takovou posloupnost čísel, že se její prvky zdají být náhodné.

Pokud chcete vygenerovat desetinné číslo, použijte funkci random(). Ta vygeneruje číslo z intervalu <0, 1).

import random
x = random.random()
print(x)

Pseudonáhodná čísla můžeme použít například při odhadu hodnoty pi metodou Monte Carlo (bude vysvětleno na tabuli.)

Úkoly na for-cyklus

Rozcvička

Přečtěte číslo N ze standardního vstupu a poté:

  1. vypište N-krát nějaký text (třeba “Ahoj”).
  2. vypište čísla od 1 do N (včetně).
  3. vypište sestupně čísla od N (včetně) do 1.

Řešení


Úkol 1

Přečtěte celé číslo N ze standardního vstupu. Vypiště čísla 1 až N. Oddělte je vždy čárkou a mezerou. Pozor, za posledním číslem žádná čárka ani mezera být nemá.

Příkaz print v základním nastavení vždy zalomí řádek. Pokud chceme pokračovat na stejném řádku musíme přidat parametr: end=“”, který Pythonu říká, jak ukončit výpis (v tomto případě s “”, tj. prázdným textovým řetězcem).

print("abc",end="")

Vzorový výstup pro N=5:

1, 2, 3, 4, 5

Řešení


Úkol 2

Přečtěte celé číslo N ze standartního vstupu. Vypiště čísla od N do 1 sestupně se stejným formátováním.

Vzorový výstup pro N=5:

5, 4, 3, 2, 1

Řešení


Úkol 3

Napište program pro výpočet faktoriálu. Program načte jedno číslo (předpokládejte, že se jedná o přirozené číslo nebo nulu) a následně spočítá a vypíše faktoriál tohoto čísla. Připomeňmě, že faktoriál čísla n je definován takto:

  • pro přirozené číslo n platí n!=123…n,
  • pro n=0 platí n!=1.

Pro ověření správnosti vašeho programu si můžete výsledky zkontrolovat s následujícím seznamem:

  • 0! = 1
  • 1! = 1
  • 2! = 2
  • 3! = 6
  • 4! = 24
  • 5! = 120
  • 6! = 720
  • 7! = 5 040
  • 8! = 40 320
  • 9! = 362 880

Řešení


Úkol 4

Napište program, který načte jedno číslo (předpokládejte, že se jedná o přirozené číslo) a vypíše, zda se jedná o prvočíslo. Poznamenejme, že prvočíslo je takové přirozené číslo, které má právě dva dělitele: jedničku a samo sebe. Tedy číslo jedna není prvočíslo!

Je vhodné “odchytit” číslo jedna a řešit ho zvlášť. Prvočíselnost u ostatních čísel ověřujeme tak, že zkoušíme, jestli je dané číslo dělitelné některým z čísel mezi jedničkou a daným číslem. Pokud je dělitelné alespoň jedním z nich, tak se nejedná o prvočíslo. To, jestli je číslo A dělitelné číslem B, zjistíte tak, že vypočítáte zbytek po dělení (použijeme tedy operátor %). Pokud je A dělitelné číslem B, pak A%B == 0. V opačném případě není A dělitelné číslem B.
Při zjišťování, zda je číslo n prvočíslo nemusíme zkoušet, zda je dělitelné všemi čísly mezi 1 a n. Úplně stačí zjistit, zda je dělitelné některým z čísel mezi 1 a sqrt(n), protože pokud není dělitetlné žádným z těchto čísel, pak není dělitelné ani žádným z čísel mezi sqrt(n) a n. Dokážete zdůvodnit proč?

Řešení


Úkol 5

Přečtěte binární zápis čísla na vstupu a vypište jeho hodnotu v dekadickém zápise (normální číslo).

Binární zápis načtěte jako textový řetězec. Jeho délku zjistíte funkcí len(retezec)
text = input("Zadejte cislo ve dvojkove soustave: ")
delka = len(text)
i-tý znak textu můžete získat jako: text[i]
Poznámka: V Pythonu se indexuje od nuly. Tzn. první znak je text[0], druhý je text[1], … , poslední je text[delka-1]

Vzorový vstup

10101

Vzorový výstup

21

Řešení


Úkoly na vnořený for-cyklus

Úkol 1

Modifikujte program na testování prvočíselnosti tak, aby vypsal všechna prvočísla menší než zadané n.

Řešení


Úkol 2

Načtěte hodnotu N na vstupu a vypiště jednotkovou matici o velikosti N*N.

Jednotková matice je matice, která má diagonále (úhlopříčce) jedničky a všude jinde nuly. Rigoróznější definice

Vzorový výstup pro N=3

1, 0, 0
0, 1, 0
0, 0, 1

Řešení


Úkol 3

Načtěte na vstupu liché číslo N větší nebo rovno 5 a vypište na konzoli “baráček” o odpovídající velikosti. Pokud čílo není liché nebo je menší než 5. Vypiště nějakou chybovou hlášku.

Vzorový výstup pro N=5

  X  
 X X
XXXXX
X   X
X   X
x   X
XXXXX

Řešení


Volitelné úkoly

Úkol 1

Napište program, který načte přirozené číslo n. Pak tento program vypíše n-tý člen Fibonacciho posloupnosti.

Řešení


Úkol 2

Napište program, který načte dvě přirozená čísla a najde a vytiskne jejich největšího společného dělitele.

Řešení


Úkol 3

Napište program, který načte dvě celá čísla a vypíše součet všech celých čísel v uzavřeném intervalu mezi nimi.

Řešení


Úkol 4

Napište program který načte dvě přirozená čísla, základ a exponent, a vypočítá hodnotu základexponent. Nezapomeňte, že hodnota 00 není definovaná.

Např.:

 Zadejte zaklad: 5
 Zadejte exponent: 3
 5^3 = 125

Řešení


Úkol 5

Napište program, který vygeneruje 10 náhodných čísel v rozsahu 1 až 100. Program spočítá počet sudých a lichých čísel. Program dále spočítá průměrnou hodnotu všech čísel. Nakonec program nalezne největší a druhé největší číslo.

Řešení


courses/pri-bootcamp/02.txt · Last modified: 2020/09/15 11:27 by kubikji2