Príklad ponuky: Riešenie: vrch. hodnota 3 hodnota 2 hodnota 1

Podobné dokumenty
NÁVRH UČEBNÝCH OSNOV PRE 1

Aktion.NEXT Novinky vo verzii 1.9

Paralelné algoritmy, cast c. 2

Microsoft Word - prirucka_katedry_nova

Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

Republika Srbsko MINISTERSTVO OSVETY, VEDY A TECHNOLOGICKÉHO ROZVOJA ÚSTAV PRE HODNOTENIE KVALITY VZDELÁVANIA A VÝCHOVY VOJVODINSKÝ PEDAGOGICKÝ ÚSTAV

Prezentácia programu PowerPoint

Import absencí z ASC

Paralelné algoritmy, cast c. 3

PowerPoint Presentation

Privátna zóna pre prevádzku Obsah Privátna zóna pre prevádzku 1 Obsah 1 Webová stránka 2 Úvodná stránka 2 Registrácia prevádzka/penzión

2

Pracovný postup pre vypĺňanie údajov elektronického formulára IŠIS pre spravodajskú jednotku 1

fm 2012 a predajňa.doc

Prevádzka

Úroveň strojového kódu procesor Intel Pentium Pamäťový operand Adresovanie pamäte Priama nepriama a indexovaná adresa Práca s jednorozmerným poľom Pra

Spustenie založenej VM mimo vmware ESX

Objektovo orientované programovanie

INTERNET BANKING Ako zrealizovať hromadný prevod VŠETKO, ČO JE MOŽNÉ with.vub.sk, Bank of

PL_2_2_vplyv_objemu

Manuál uchádzača ezakazky Manuál uchádzača Dátum vytvorenia dokumentu: Verzia: Autori slovenský Matej Marcin, Stanislava Marošiová Te

Uchádzač o štúdium potvrdenie el. návratky. Prihlasovacie údaje do el. návratky na stránke vidíte na stránke

PAGER V3.0

Január 2012 (verzie ) Popis zmien v systéme PROLUC

Algoritmizácia a programovanie - Príkazy

Inteligentné rozhodovacie systémy Heuristické prehľadávanie SP Október, 2018 Katedra kybernetiky

03_ControlFlow.dvi

História

DediĊnosť

Centrum vedecko-technických informácií, Odbor pre hodnotenie vedy, Oddelenie pre hodnotenie publikačnej činnosti Vyhľadávanie a práca so záznamami - C

Microsoft Word - 06b976f06a0Matice - Uzivatelska Dokumentacia

Loan Processing System pre VÚB banku Ako sme jednej z najväčších bánk na Slovensku zvýšili kvalitu a rýchlosť obsluhy firemných klientov nasadením sys

GEODETICKÝ A KARTOGRAFICKÝ ÚSTAV BRATISLAVA Chlumeckého 4, Bratislava II Obsah 1. Export údajov ZBGIS do CAD formá

Objednávky Využívanie objednávkových listov je viazané na doplnkový modul Kalkulácie, otvorené účty. Pre vybavovanie objednávok v móde dotykovej obraz

Podvojné účtovníctvo, fakturácia a sklad ekasa: štandardný predaj priamo z programu Pri predaji s priamym napojením na softvér je potrebné mať online

Navigácia po úvodnej stránke elektronickej schránky Dátum zverejnenia: Verzia: 10 Dátum aktualizácie: Navigácia po úvodnej st

Operačná analýza 2

Žiadosť o licenčnú zmluvu na podujatie Na adrese v sekcii hlavného menu kliknete na položku Používatelia. Zobrazí sa blokové menu,

Katalóg cieľových požiadaviek k maturitnej skúške

Súkromné gymnázium, Česká 10, Bratislava INFORMATIKA

Vysokokapacitné riešenie pre Vašu toaletu v štyroch úrovniach kvality. inteligentné riešenie teraz ešte dokonalejšie Tork kompaktné kotúče

(Microsoft Word - Tuzemsk\341 a zahrani\350n\341 jazda \232tandardn\341 jazda.docx)

Návod na obsluhu ekasy FiskalPRO VX520 (ETH/GPRS/GPRS s batériou)

Ministerstvo dopravy a výstavby Slovenskej republiky Sekcia cestnej dopravy a pozemných komunikácií Štátny dopravný úrad Metodický pokyn č.19/2019, kt

Rollei DF-S 310 SE Užívateľský manuál

Manuál pre nastavenie tlače z VRP tlačiarní bluetooth Bluetooth Manuál pre nastavenie tlače z VRP tlačiarní -1-

Prihlásenie sa do systému AIS2 Pomôcka pre študentov Odoslanie záverečnej práce cez AiS2 Spustite si internetový prehliadač a do riadku s adresou napí

Modem a lokálna sieť LAN Používateľská príručka

Informačné technológie

aplikácia do mobilého telefónu na stiahnutie digitálneho tachografu

Užívateľský manuál

Používateľská príručka POUŽÍVATEĽSKÁ PRÍRUČKA Generátor XML dávok pre Informačný systém kontrolných známok z MS Excel šablóny Dátum: Verzia

Sprievodný list SofComs.r.o., Priemyselná 1, Liptovský Mikuláš Program basic.sk Verzia ( ) Dátum Autor Ing. J. Malíček

VSDC Free Video Editor stručný návod na používanie Link na sťahovanie softvéru: K prog

Poradensky koncept - mlade prasnice

Sprievodný list SofCom s.r.o., Priemyselná 1, Liptovský Mikuláš Program basic.sk Verzia ( ) Dátum Autor Ing. J. Malíče

Hardwarové prerušenie Nasledujúci kód ukazuje inštaláciu obsluhy časovača vrátane jeho inicializácie // inicializace časovače, přerušení každou milise

2

Photo Album

2.5. Dotyčnica krivky, dotykový kužeľ. Nech f je krivka a nech P V (f) (t.j. m P (f) 1). Ak m P (f) = r a l je taká priamka, že I P (f, l) > r, potom

Teória pravdepodobnosti Zákony velkých císel

Paralelné algoritmy, cast c. 3

MERANIE U a I.doc

Technický list commotherm hybrid tower LW-A Split deluxe 6-10 Verzia 08/2016 Vonkajšia jednotka Vnútorná jednotka Kompletné zariadenie

Agenda záverečnej práce pedagóg Celá agenda týkajúca sa záverečnej práce je dostupná v obrazovke Záverečná práca (menu Agenda pedagóga -> Záverečné pr

Komplexné služby výpočtovej a kancelárskej techniky Vývoj a distribúcia podnikového a ekonomického software Otvorenie nového roku a prechod medzi rokm

Finančné riaditeľstvo Slovenskej republiky 15/ORP/2019/IM Práca s dostupnými reportami - rola Administrátor/Účtovník Informácia je určená pre podnikat

Podpora metód operačného výskumu pri navrhovaní systému liniek doc. RNDr. Štefan PEŠKO, CSc. Katedra matematických metód, Fa

Slovenská technická univerzita v Bratislave Fakulta informatiky a informačných technológií Ilkovičova 2, , Bratislava 4 Internet vecí v našich ž

Microsoft Word - prechod_euro_prolca.doc

STRUČNÝ NÁVOD KU IP-COACHU

Snímka 1

Microsoft Word - Algoritmy a informatika-priesvitky02.doc

IT NEWS

MESTO TRNAVA MESTSKÝ ÚRAD V TRNAVE NÁVRH VŠEOBECNE ZÁVÄZNÉHO NARIADENIA predkladaný na rokovanie mestského zastupiteľstva ktorým sa mení a dopĺňa VZN

Manuál pre nastavenie tlače z VRP Bluetooth, USB tlačiarne Bluetooth, USB tlačiarne Manuál pre nastavenie tlače -1-

Microsoft Word - Návod na obsluhu - klub _1_

Microsoft Word - MAT_2018_1 kolo.docx

Microsoft Word - Zaver.pisomka_januar2010.doc

ZB_Daikin_SETUP_HPSU_compact_V52_ _00_0417_SK.book

PoĊítaĊová sieť

Príloha č. 1 k USM_UGKK SR_6/2019

eKasa

Finančné riaditeľstvo Slovenskej republiky 9/ORP/2019/IM Stiahnutie identifikačných a autentifikačných údajov pri ORP - rola Administrátor/Technik Inf

enum

Evidencia elektronickej prihlky

ECDL Syllabus V50 SK-V01

PowerPoint Presentation

Finančné riaditeľstvo Slovenskej republiky 10/ORP/2019/IM Stiahnutie identifikačných a autentifikačných údajov pri ORP - rola Administrátor Informácia

SRPkapitola06_v1.docx

Matematický model činnosti sekvenčného obvodu 7 MATEMATICKÝ MODEL ČINNOSTI SEKVENČNÉHO OBVODU Konečný automat predstavuje matematický model sekvenčnéh

Snímka 1

Novinky programu MSklad

DJ 1T ID ver 1.2 Návod na použitie Návod na použitie Dverná jednotka DJ 1T ID Strana 1

MediatelYext

PowerPoint Presentation

cennik_Layout 1

E/ECE/324 E/ECE/TRANS/ február 2010 Rev.1/Add.52/Rev.2/Amend.2 DOHODA O PRIJATÍ JEDNOTNÝCH TECHNICKÝCH PREDPISOV PRE KOLESOVÉ VOZIDLÁ, VYBAVENI

bakalarska prezentacia.key

VZOR

Prepis:

Zásobník je abstraktný dátový typ, na ktorom sú dovolené len operácie: vytvoriť prázdny zásobník pridať prvok na vrch zásobníka odobrať prvok z vrchu zásobníka zistiť, či je zásobník prázdny Nie je možné (dovolené) prechádzať zásobníkom! hodnota 3 hodnota 2 hodnota 1 Zásobník nám umožňuje dočasne uložiť údaje a spracovať ich až neskôr - v opačnom poradí, ako boli vložené. Zásobník sa označuje aj ako štruktúra LIFO (Last In - First Out, posledný dnu prvý von). Zásobník, ako typ pamäte, sa používa na odkladanie návratových adries pred odchodom do podprogramov, na odkladanie hodnôt lokálnych premenných, na odkladanie vonkajších častí vyhodnocovaných aritmetických výrazov pri vnáraní do nich, pri metóde rozdeľ a panuj, pri prehľadávaní do hĺbky a pod. Pomocou metód zoznamu append() a pop() možno simulovať operácie zásobníka. >>> zas = [] # vytvorenie prázdneho zásobníka >>> zas # vypísanie obsahu zásobníka [] >>> zas.append(1) # pridanie hodnoty 1 do zásobníka >>> zas [1] >>> zas.append(2) # pridatie hodnoty 2 do zásobníka >>> zas [1, 2] >>> zas.pop() # odobratie hodnoty zo zásobníka 2 >>> zas [1] >>> zas.pop() # odobratie hodnoty zo zásobníka 1 >>> zas [] >>> zas.pop() # pokus o odobratie hodnoty z prázdneho zásobníka Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> zas.pop() IndexError: pop from empty list >>> Príklad Z.1 Vytvorte program na simulovanie práce zásobníka. Program vytvorí prázdny zásobník a umožní vkladať hodnoty na vrch zásobníka, odoberať hodnoty z vrchu zásobníka a pozrieť sa, aká hodnota je na vrchu zásobníka. Príklad ponuky: Z Á S O B N Í K Vložiť na vrch... 1 Odobrať z vrchu... 2 Hodnota na vrchu... 3 Koniec...? Tvoja voľba? vrch Riešenie: def ponuka(): print(12*" ","Z Á S O B N Í K") print("vložiť na vrch... 1") print("odobrať z vrchu... 2") print("hodnota na vrchu... 3") print("koniec...?") 1

odpoved = input("tvoja voľba? ") vlozit() vybrat() elif odpoved == "3": hodnotanavrchu() def vlozit(): hodnota = input("vložiť hodnotu: ") zas.append(hodnota) print("vložil som hodnotu:", hodnota) def vybrat(): if len(zas) > 0: hodnota = zas.pop() print("odobral som hodnotu:", hodnota) def hodnotanavrchu(): if len(zas) > 0: print("hodnota na vrchu:", zas[-1]) # ================== HLAVNÝ PROGRAM ================== zas = [] # po spustení programu sa vytvorí prázdny zásobník! print("vytvoril som prázdny zásobník!") ponuka() Príklad Z.1 doplňte o funkciu na zistenie a vypísanie, či je zásobník prázdny. Ozrejmite si vzťah medzi hodnotou len(zásobník) a vrch zásobníka. Príklad Z.2 Funkcie z príkladu Z.1 zovšeobecnite použitím parametrov a predpokladajte, že zásobník má konečnú veľkosť - kapacitu. Ponuku doplňte voľbou: Je zásobník prázdny?. def vlozit(zas): if len(zas) < KAPACITA_ZASOBNIKA: hodnota = input("vložiť hodnotu: ") zas.append(hodnota) print("vložil som hodnotu:", hodnota) print("zásobník je plný!") # test, či nie je zásobník plný! def vybrat(zas): if len(zas) > 0: # hodnota len(zas) napovedá o pozícii vrchu zásobníka hodnota = zas.pop() print("odobral som hodnotu:", hodnota) 2

def hodnotanavrchu(zas): if len(zas) > 0: print("hodnota na vrchu:", zas[-1]) def jeprazdny(zas): if len(zas) == 0: print("zásobník nie je prázdny!") # ================= HLAVNÝ PROGRAM ================== KAPACITA_ZASOBNIKA = 5 # maximálne päť hodnôt z1 = [] print("vytvoril som prázdny zásobník!") print(12*" ","Z Á S O B N Í K") print("vložiť na vrch... 1") print("odobrať z vrchu... 2") print("hodnota na vrchu... 3") print("je prázdny?... 4") print("koniec...?") odpoved = input("tvoja voľba? ") vlozit(z1) vybrat(z1) elif odpoved == "3": hodnotanavrchu(z1) elif odpoved == "4": jeprazdny(z1) Príklad Z.3 Vytvorte program, ktorý umožní pomocou voľby vložiť hodnotu do zásobníka 1 alebo vložiť hodnotu do zásobníka 2 a na voľbu odobrať odoberie hodnotu z toho zásobníka, v ktorom je väčšia hodnota na vrchu. Ak sú v oboch zásobníkoch na vrchoch rovnaké hodnoty, odoberie obe. Ak je jeden zo zásobníkov prázdny, ďalej odoberá hodnoty z neprázdneho zásobníka, až kým nie sú oba zásobníky prázdne. Pri riešení vytvorte a použite funkcie zlozit(zas), odobrat(zas), jeprazdny(zas) a hodnotanavrchu(zas). Príklad ponuky: Z Á S O B N Í K Y Vložiť do zásobníka 1... 1 Vložiť do zásobníka 2... 2 Odobrať zo zásobníka s väčšou hodnotou... 3 Koniec...? Tvoja voľba? 3

def vlozit(zas): hodnota = input("vložiť hodnotu: ") zas.append(hodnota) print("\nvložil som hodnotu:", hodnota) def odobrat(zas): hodnota = zas.pop() print("odobral som hodnotu:", hodnota) def jeprazdny(zas): return len(zas) == 0 def hodnotanavrchu(zas): return zas[-1] # netestuje, či nie je zásobník prázdny! def odobratvacsiuhodnotu(zas1, zas2): if jeprazdny(zas1) and jeprazdny(zas2): print("zásobníky sú prázdne!") if jeprazdny(zas1): odobrat(zas2) elif jeprazdny(zas2): odobrat(zas1) if hodnotanavrchu(zas1) > hodnotanavrchu(zas2): odobrat(zas1) elif hodnotanavrchu(zas1) < hodnotanavrchu(zas2): odobrat(zas2) odobrat(zas1) odobrat(zas2) # ================= HLAVNÝ PROGRAM ================== z1 = [] z2 = [] print("vytvoril som prázdne zásobníky z1 a z2!") print(10*" ","Z Á S O B N Í K Y") print("vložiť do zásobníka 1... 1") print("vložiť do zásobníka 2... 2") print("odobrať zo zásobníka s väčšou hodnotou... 3") print("koniec...?") odpoved = input("tvoja voľba? ") vlozit(z1) vlozit(z2) elif odpoved == "3": odobratvacsiuhodnotu(z1,z2) 4

Rad je abstraktný dátový typ, na ktorom sú dovolené len operácie: vytvoriť prázdny rad pridať prvok na koniec radu odobrať prvok zo začiatku radu zistiť, či je rad prázdny začiatok h1 h2 h3 h4 koniec Rad nám umožňuje dočasne uložiť údaje a spracovať ich neskôr v poradí, ako boli vložené. Označuje sa aj ako štruktúra FIFO (First In - First Out, prvý dnu prvý von). Rad, ako typ pamäte, sa používa na radenie úloh prichádzajúcich s požiadavkou na tlač (s rovnakou prioritou), pri prehľadávaní do šírky a pod. Český názov pre rad je fronta. Príklad R.1 Vytvorte program na simulovanie práce radu. Program vytvorí prázdny rad a umožní vkladať hodnoty na koniec radu, odoberať hodnoty zo začiatku radu a zistiť, či je rad prázdny. def ponuka(): print(15*" ","R A D") print("vložiť na koniec... 1") print("odobrať zo začiatku... 2") print("hodnota na začiatku... 3") print("je prázdny?... 4") print("koniec...?") odpoved = input("tvoja voľba? ") vlozit() vybrat() elif odpoved == "3": hodnotanazaciatku() elif odpoved == "4": jeprazdny() def vlozit(): hodnota = input("vložiť hodnotu: ") rad.append(hodnota) print("vložil som hodnotu:", hodnota) def vybrat(): if len(rad) > 0: hodnota = rad.pop(0) print("odobral som hodnotu:", hodnota) print("rad je prázdny!") def hodnotanazaciatku(): if len(rad) > 0: print("hodnota na zaciatku:", rad[0]) print("rad je prázdny!") 5

def jeprazdny(): if len(rad) == 0: print("je prázdny!") print("nie JE prázdny!") # ================= HLAVNÝ PROGRAM ================== rad = [] print("vytvoril som prázdny rad!") ponuka() Príklad R.2 Použitie funkcií z príkladu R.1 zovšeobecnite doplnením o parametre a použite v situácii, keď sú dané dva rady a prednostne sa odoberá a) z radu 1, a až keď je prázdny, z radu 2 b) z radu, v ktorom je na začiatku väčšia (menšia) hodnota Príklad R.3 Zákazník príde do čakárne a klikne na tlačidlo Príchod. Vytvorte program, ktorý umožní 1. evidovať čas príchodu zákazníka do čakárne, 2. odstránenie z radu po voľbe Odchod a vypísanie času stráveného v zariadení, 3. vypísanie počtu čakajúcich zákazníkov. Ukážka: Príchod... 1 Odchod... 2 Počet čakajúcich... 0 Koniec...? Vlož voľbu: 1 Príchod 11:24:33 Príchod... 1 Odchod... 2 Počet čakajúcich... 0 Koniec...? Vlož voľbu: 2 Odchod 11:24:49 Dĺžka obsluhy 0:00:15 Využite funkciu datetime.now() modulu datetime (pozri študijný text Použitie štandardných funkcií na prácu s reťazcami - úloha 7). import datetime def vloz(): rad.append(datetime.datetime.now()) print("príchod", str(rad[-1])[11:19]) def odober(): if len(rad) > 0: prisiel = rad.pop(0) odisiel = datetime.datetime.now() print("odchod", str(odisiel)[11:19]) print("dĺžka obsluhy", str(odisiel-prisiel)[:7]) print("musíš najprv zaznamenať príchod!\n") 6

def pocetcakajucich(): print("počet čakajúcich:", len(rad)) # ======================= HLAVNÝ PROGRAM ======================= rad = [] print("príchod... 1") print("odchod... 2") print("počet čakajúcich... 0") print("koniec...?") odpoved = input("vlož voľbu: ") vloz() odober() elif odpoved == "0": pocetcakajucich() Príklad R.3 doplňte o poznatok: Obsluha zariadenia je schopná denne obslúžiť najviac 5 zákazníkov. Príklad R.4 Klienti prichádzajú k výťahu a stavajú sa do radu (nech program po voľbe Prišiel klient vygeneruje náhodné celé číslo od 15 do 130 kg a zaradí ho do radu čakajúcich). Po príchode výťahu (voľba Prišiel výťah) nastupujú klienti do výťahu. Vo výťahu je tlaková váha, ktorá automaticky určí súčet hmotností ľudí vo výťahu. Ak súčet ich hmotností prekročí nosnosť výťahu, klient, ktorý nastúpil posledný, musí vystúpiť. Vytvorte program simulujúci opísaný dej. import random def ponuka(): print("prišiel klient... 1") print("prišiel výťah... 0") print("koniec...?") odpoved = input("nastala udalosť: ") prisielklient() elif odpoved == "0": prisielvytah() def prisielklient(): hmotnost_klienta = random.randint(15,130) # hmotnosť klienta je náhodné celé číslo od 15 do 130 kg rad.append(hmotnost_klienta) print("hmotnosť {} kg\n".format(rad[-1])) 7

def prisielvytah(): if len(rad) == 0: print("nik nečaká!\n") sucet_hmotnosti = rad[0] # nastúpil do výťahu na test - z radu neodstráni! nastupia = 0 while sucet_hmotnosti <= NOSNOST_VYTAHU: rad.pop(0) # môže zostať vo výťahu:) - až teraz odstráni z radu! nastupia += 1 # ďalší sa môže odviezť výťahom if len(rad) > 0: # ak ešte niekto čaká sucet_hmotnosti += rad[0] # nastúpi do výťahu na test súčtu hmotností print("nastúpia: {}\n".format(nastupia)) # ================== HLAVNÝ PROGRAM ================ NOSNOST_VYTAHU = 150 #kg rad = [] ponuka() Program R.4 doplňte o situáciu: ak je v rade viac ako 10 osôb, nech program oznámi: Použite schodište. Program R.4 doplňte o hlásenie: ak je hmotnosť klienta nad 100 kg, nech program vypíše: Odporúčam použiť schodište! Poznámka Modelovanie odobratia prvku zo začiatku radu pri použití pop() typu list nie je časovo efektívne, pretože sa musia všetky prvky zoznamu posunúť (preindexovať) o jednu pozíciu doľava. Preto knižnica collections obsahuje špecializovaný typ deque s rýchlymi funkciami append() a popleft(). V deque možno nastaviť aj hodnotu maxlen. Ukážka: >>> from collections import deque = deque([]) >>> print(rad) deque([]).append("peter") deque(['peter']) = deque(['peter', 'Roman', 'Filip']) deque(['peter', 'Roman', 'Filip']).append("Karol") deque(['peter', 'Roman', 'Filip', 'Karol']) >>> print(rad.popleft()) Peter deque(['roman', 'Filip', 'Karol']) >>> meno = rad.popleft() >>> meno 'Roman' deque(['filip', 'Karol']) 8