Data v číslicových počítačích I.

Slides:



Advertisements
Podobné prezentace
Kuchařka na práci s mnohočleny Matematika pro ZŠ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je David Salač. Dostupné z Metodického portálu.
Advertisements

:-) Asymptotická složitost algoritmů Autor: Antonín DANĚK Semestrální projekt 1 – Y14TED.
Vypracováno kolektivem autorů České společnosti pro technickou normalizaci Úřad pro technickou normalizaci, metrologii a státní zkušebnictví
Název školy: ZŠ A MŠ ÚDOLÍ DESNÉ, DRUŽSTEVNÍ 125, RAPOTÍN Název projektu: Ve svazkové škole aktivně - interaktivně Číslo projektu: CZ.1.07/1.4.00/
ALGORITMIZACE Mgr. Milan Pastyřík IUVENTAS, s. r. o.
Informatika pro 5. ročník Úvod do světa počítačů - Hardware.
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
Inf Tabulkový procesor - funkce. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
Výukový materiál zpracovaný v rámci projektu EU peníze školám Registrační číslo projektu:CZ.1.07/1.4.00/ Šablona:III/2 Inovace a zkvalitnění výuky.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Mocniny, odmocniny, úpravy algebraických výrazů
Technické vybavení počítače - Počítač PC
Tvorba jednoduché tabulky - rozvrh
ŠKOLA: Městská střední odborná škola, Klobouky u Brna,
Matematika 3 – Statistika Kapitola 4: Diskrétní náhodná veličina
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Lineární funkce - příklady
ČÍSLO PROJEKTU CZ.1.07/1.5.00/ ČÍSLO MATERIÁLU 1 – Množiny – teorie
Teoretické pojmy z výpočetní techniky
Algoritmizace - opakování
Základní logické funkce
Číslo projektu CZ.1.07/1.4.00/ Název sady materiálů
Financováno z ESF a státního rozpočtu ČR.
Digitální učební materiál zpracovaný v rámci projektu
Jedno-indexový model a určení podílů cenných papírů v portfoliu
MATEMATIKA Dělitel a násobek přirozeného čísla.
8.1.2 Podprostory.
Poměr Co je poměr. Změna v daném poměru..
ADT zásobník - příklad Prakticky aplikovatelný příklad využití ADT zásobník je vyhodnocování aritmetických výrazů v Postfixové notaci: Pro zápis aritmetických.
Výukový materiál zpracován v rámci projektu
Inf Tabulkový procesor - formátování
Databáze MS ACCESS 2010.
Uložení dat v PC -Binární (dvojkový) systém-
Programovací jazyky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Název: Word pokračování DUM:VY_32_INOVACE_VII_3_04
Maďarská metoda Kirill Šustov Michal Bednář Stanislav Běloch
Poměr v základním tvaru.
DIGITÁLNÍ UČEBNÍ MATERIÁL
Inf Vývojový diagram.
4.1 – 4.3 Lineární nerovnice i jednoduchý podílový tvar
SÁRA ŠPAČKOVÁ MARKÉTA KOČÍBOVÁ MARCELA CHROMČÁKOVÁ LUKÁŠ BARTOŠ B3E1
Kvadratické nerovnice
Stavební fakulta ČVUT, B407
CYKLUS S PODMÍNKOU NA KONCI (s výstupní podmínkou)
BIBS Informatika pro ekonomy přednáška 2
Informatika pro ekonomy přednáška 8
Rovnice základní pojmy.
Programovatelné automaty (Programmable logic controllers – PLC)
Algoritmizace a datové struktury (14ASD)
Početní výkony s celými čísly: sčítání a odčítání
Konstrukce trojúhelníku
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Algoritmizace a datové struktury (14ASD)
Teorie chyb a vyrovnávací počet 1
* Násobení celých čísel Matematika – 7. ročník *
Algoritmizace a datové struktury (14ASD)
Algoritmizace a datové struktury (14ASD)
Početní výkony s celými čísly: násobení
Poměr v základním tvaru.
Název projektu: Moderní výuka s využitím ICT
Matematika + opakování a upevňování učiva
Lineární funkce a její vlastnosti
Informatika – Základní operace s buňkami
Početní výkony s celými čísly: dělení
Dělitelnost přirozených čísel
Grafy kvadratických funkcí
Teorie chyb a vyrovnávací počet 2
Algoritmizace a datové struktury (14ASD)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Data v číslicových počítačích I. nejčastěji počítače pracují s údaji vyjádřenými ve dvojkové soustavě, tedy pomocí číslic 0 a 1 důvod dvojkové soustavy byl ten, že první počítače byly reléové, tedy šlo rozlišit pouze 2 stavy (0 – rozepnuto, 1 – sepnuto) nejmenší jednotkou informace je 1 bit (1b) z anglického binary digit

Data v číslicových počítačích II. nejmenší objem dat, se kterými obvykle počítač může pracovat je 1 Byte (1 bajt, 1B) 1 Byte = 8 bit pomocí 1B lze vyjádřit 28=256 různých hodnot

Předpony soustavy SI kilobyte kB 10001 B 103 bajtů megabyte MB 10002 B gigabyte GB 10003 B 109 bajtů terabyte TB 10004 B 1012 bajtů petabyte PB 10005 B 1015 bajtů exabyte EB 10006 B 1018 bajtů

Násobky bajtů Historicky (z technologických důvodů) vzniklo označování 1kB (malé „k“)= 103 B = 1000 B 1KB (velké „k“)= 210 B = 1024 B Problém, jak to rozlišit u dalších předpon (mega, giga,….) velikostí písmene není možné (mB není zkratkou pro megabajt) - řešení viz IEC

International Electrotechnical Commission (IEC) v roce 1998 kibibyte KiB 10241 B 210 bajtů mebibyte MiB 10242 B 220 bajtů gibibyte GiB 10243 B 230 bajtů tebibyte TiB 10244 B 240 bajtů pebibyte PiB 10245 B 250 bajtů exbibyte EiB 10246 B 260 bajtů v ČR převzato jako ČSN IEC 60027-2

Obvyklé uvádění velikostí polovodičové paměti, velikost souborů ~ 2x 1GB = 1 GiB = 230 B např. 2GB (prodejní velikost) → reálná velikost = 2*230/220= 2048MiB norma IEC 60027-2 není moc používána (výjimka např. WinSCP) pevné disky ~ 10x 1GB = 109 B (prodejní velikost) např. 1,5TB HDD → reálná velikost = 1.5*1012/240=1.364TiB

Kódování češtiny Historie - každý znak uložen v počítači jako 1 Byte, tzn. 8 bitů => 1B …. 256 různých znaků A … 65, B … 66, C … 67 Od 0 do 32 jsou systémové znaky, od 33 do 127 jsou znaky anglické abecedy (plus znaky typu závorek, zavináč apod.) a čísla od 128 do 255 jsou různé národní znaky. Přiřazení znaků k číslům se označuje jako kódování. iso-8859-2 (Unix), windows-1250 (Windows) š … 185 (iso-8859-2), 154 (window-1250) UNICODE pro uložení znaku používá 1 a více Byte

ASCII nejstarší standardizovaná znaková sada (1967) http://www.gjszlin.cz/ivt/esf/ostatni-sin/kodovani-textu.php

WINDOWS-1250 kódování pro středoevropské jazyky (MS Windows) http://www.gjszlin.cz/ivt/esf/ostatni-sin/kodovani-textu.php

ISO 8859-2 ISO standard kódování (Unix/Linux) http://www.gjszlin.cz/ivt/esf/ostatni-sin/kodovani-textu.php

ISO 8859-2 vs. Windows-1250

UNICODE UTF-8 znak se ukládá pomocí 1 až 6*) Byte (pro české znaky s diakritikou 2 Byte, asijské znaky 3 Byte) zpětná kompatibilita s ASCII UTF-16 znak se ukládá pomoci 16 nebo 32 bitů UTF-32 znak se ukládá pomocí 4 Byte *) v roce 2003 omezeno jen na 4 Byte

UTF-8 vs. ISO 8859-2

Algoritmus Definice Jedná se o posloupnost elementárních kroků Návod jak provést určitou činnost Přesný návod či postup, kterým lze vyřešit daný typ úlohy … Transformace vstupních dat na výstupní data Vstupy mají definované množiny hodnot, jichž mohou nabývat Algoritmus je procedura proveditelná Turingovým strojem teoretický model počítače popsaný matematikem Alanem Turingem Jedná se o posloupnost elementárních kroků

Algoritmus Jak si jej jednoduše představit: postup pro výpočet obvodu kruhu kuchařka: recepty postup jak převést číslo ze z-adické soustavy do jiné návod pro sestavení nábytku

Vlastnosti algoritmů Elementární Deterministický Konečný Resultativní Skládá se z konečného počtu jednoduchých činností (kroky) Deterministický Po každém kroku můžeme určit zda skončil nebo v jakém kroku budeme pokračovat Konečný Musí skončit po konečném počtu kroků Resultativní Vede k výsledku Hromadný (obecný) Můžeme použít k řešení celé skupiny podobných úloh Efektivní Vede k řešení v optimálním čase - rychlost

Metody řešení algoritmů Shora dolů Postup řešení rozkládáme na jednodušší operace, až dospějeme k elementárním krokům Příkladem je kvadratická rovnice Vypočti diskriminant Podle něj rozhodneme, zda-li máme Jedno řešení Dvě řešení Dvě komplexní řešení Zdola nahoru Skupiny elementárních operací chápeme jako nové elementární kroky Postupně z elementárních kroků vytváříme prostředky, které nakonec umožní zvládnout požadovaný problém

Časová a paměťová náročnost Samotné vyřešení úlohy ještě neznamená spokojenost Často se dá úloha řešit jednodušeji (efektivněji) Musíme použít optimalizaci? Náročnost pro počítač Při komplikovanější úloze můžeme dlouho čekat na výsledek (procesor má příliš mnoho instrukcí) Časová náročnost tedy zjednodušeně může být úměrná počtu elementů, které umístíme do algoritmu Potom co nemůžeme ovlivnit: počet vstupních dat (ale…) Příklad Výpočet absolutní hodnoty zabere 3takty procesoru sin(x) nám zabere 291taktů Není to moc, ale pokud budeme kombinovat mnoho funkcí…

Druhy algoritmů Rekurzivní algoritmy Hladové algoritmy které využívají (volají) samy sebe výpočet faktoriálu Hladové algoritmy k řešení se propracovávají po jednotlivých rozhodnutích, která jakmile jsou jednou učiněna, už nejsou dále revidována Rozděl a panuj algoritmy dělí problém na menší podproblémy (shora-dolů), na něž se rekurzivně aplikují (až po triviální podproblémy, které lze vyřešit přímo), posléze se dílčí řešení vhodným způsobem sloučí Algoritmy dynamického programování postupně se řeší části problému od nejjednodušších po složitější s tím, že využívají výsledky již vyřešených jednodušších podproblémů

Druhy algoritmů Pravděpodobnostní algoritmy (probabilistické) provádějí některá rozhodnutí náhodně či pseudonáhodně Paralelní algoritmy Rozdělení výpočtů mezi více počítačů (jader procesorů) pro rychlejší výpočty Genetické algoritmy Pracují na základě napodobování biologických evolučních procesů, postupným „pěstováním“ nejlepších řešení pomocí mutací a křížení Heuristické algoritmy Za cíl si nekladou nalézt přesné řešení, ale pouze nějaké vhodné přiblížení (nedostatek času nebo neexistence exaktního řešení)

Zápis algoritmu Slovním popisem Vývojovými diagramy (grafický zápis) Vychází se slovního popisu algoritmu v přirozeném jazyce. Zachycuje postupný rozklad algoritmu na jemnější kroky při návrhu metodou shora dolů. Vývojovými diagramy (grafický zápis) Jednotlivé kroky jsou vyjádřeny grafickými symboly dle typu operace Posloupnost vykonávání kroků je vyjádřena orientovanou hranou

Základní komponenty algoritmů Začátek/konec Posloupnost (sekvence) příkazů kroky v daném pořadí AKCE Větvení (podmínky) výběr dalších prováděných kroků závisí na splnění/nesplnění nějaké podmínky Cyklus opakované provádění kroků s pevným počtem opakování s podmínkou (na konci/na počátku) - provádění kroků se opakuje, dokud je/není splněna podmínka

Základní symboly vývojového diagramu

Základní použití symbolů

Základní použití symbolů ANO ANO NE NE

Základní použití symbolů NE ANO

Cyklus s podmínkou s podmínkou na začátku s podmínkou na konci tělo cyklu se provede minimálně jednou

Základní použití symbolů

Proměnná „úložiště“ informace (tedy vyhrazené místo v paměti). Proměnná nebo (v beztypových jazycích) její hodnota má typ. Mezi nejčastější typy patří: číslo celé číslo "reálné" číslo - číslo s pohyblivou řádovou čárkou znak řetězec (znaků) pole (pole polí je matice) struktura nebo objekt ukazatel - obvykle může ukazovat na kterýkoliv z ostatních typů nebo na funkci

Algoritmus pro výpočet obvodu kruhu zápis strukturovaným přirozeným jazykem Krok 1. - Tiskni: Zadej poloměr Krok 2. - Čti: r Krok 3. - o = 2*3.14*r Krok 4. - Tiskni: Obvod je o Krok 5. - Konec

Algoritmus pro výpočet obvodu kruhu zápis vývojovým diagramem

Odolnost vůči špatným vstupům (aneb blbovzdornost) není možné se spoléhat, že na vstupu se načtou údaje, se kterými má smysl dále pracovat v algoritmu pro výpočet obvodu kruhu – co když uživatel zadá záporné číslo? Výsledek by byl nesmyslný!

Algoritmus pro výpočet obvodu kruhu zápis strukturovaným přirozeným jazykem Krok 1. - Tiskni: Zadej poloměr Krok 2. - Čti: r Krok 3. - Jestliže je r < 0, pak Krok 7. Krok 4. - o = 2*3.14*r Krok 5. - Tiskni: Obvod je o Krok 6. - Konec Krok 7. - Tisk: Chyba: Poloměr je záporný Krok 8. - Konec

Algoritmus pro výpočet obvodu kruhu

Jak bude vypadat algoritmus zapsaný v jazyce C? printf("Zadej poloměr: "); scanf("%f",&r); if (r<0) printf("Chyba: Poloměr je záporný"); else { o = 2*3.14*r; printf("Obvod je %f",o); }

Název proměnné v názvu „nesmí“ být mezery (použijte raději podtržítko) nedoporučují se znaky s diakritikou název proměnné by měl mít vypovídací hodnotu, k čemu proměnná slouží u víceslovného názvu proměnné první písmeno každého dalšího slova velké (různé zvyklosti u různých jazyků) objemKruhu některé programovací jazyky nerozlišují velikost písma promA, Proma, PROMa apod.

Vysvětlení významu Ze vstupu (např. z klávesnice) se načte hodnota do proměnné pojmenované A. Do proměnné B se uloží výsledek součinu hodnoty proměnné A a čísla 2. Do proměnné C se uloží číslo 5. Pokud je hodnota v proměnné B číslo 10, podmínka platí a na výstup se vypíše: "Zadal jste číslo 5" Do proměnné C se uloží číslo 5+10.

Aritmetické výrazy + sčítání - odčítání * násobení / dělení % binární operátory + sčítání - odčítání * násobení / dělení % mod dělení modulo – zbytek po celočíselném dělení 5 % 3 = 2 3 % 5 = 3

Relační operátory = == rovná se > je větší < je menší >= je větší nebo rovno <= je menší nebo rovno <> != nerovná se

Algoritmus výměny hodnot dvou proměnných

Algoritmus výměny hodnot dvou proměnných

Algoritmus výměny hodnot dvou proměnných – bez pomocné proměnné

NA POŘADÍ ZÁLEŽÍ!!!!!

Algoritmus pro vyhodnocení, zda zadané číslo je sude nebo liché

Cyklus s pevným počtem opakováni tělo cyklu se provede 3krát proměnná i bude nabývat postupně hodnot: 1, 2, 3

Cyklus s pevným počtem opakováni tělo cyklu se provede 7krát proměnná i bude nabývat postupně hodnot: 1, 0, -1, -2, -3, -4, -5

Cyklus s pevným počtem opakováni

Algoritmus, který ověří, že ze zadaných 3 délek stran lze sestrojit trojúhelník. Nekontroluje se nezápornost vložených čísel!!!

Booleova algebra I. logický součet OR, logický součin AND, negace NOT

Booleova algebra II. při vyhodnocování složené podmínky má přednost logický součin (AND), pořadí vyhodnocování lze ovlivnit pomocí závorek Vyhodnoťte následující 2 podmínky: P1: (a>1) AND (b>1) OR (c>1) P2: (a>1) AND ((b>1) OR (c>1)) a b c P1 P2 4 2 1 5

Booleova algebra III. Vyhodnoťte následující 2 podmínky: P1: (a>1) AND (b>1) OR (c>1) P2: (a>1) AND ((b>1) OR (c>1))

Booleova algebra IV. – mnemotechnická pomůcka PRAVDA => 1, NEPRAVDA => 0, AND => *, OR => + př.: pravda AND nepravda OR pravda AND pravda = 1 * 0 + 1 * 1 = 1, tedy výsledek je větší než 0 => výsledek podmínky je PRAVDA

Algoritmus, který ověří, že ze zadaných 3 délek stran lze sestrojit trojúhelník. je si však třeba uvědomit, že se vždy vyhodnotí všechny 3 podmínky, což nemusí být časově zanedbatelné.....

Algoritmus ze vstupu načte 3 čísla a určí, které číslo je největší, a to vypíše. pozn. pokud jsou zadána 3 stejná čísla, číslo se vypíše

Násobení dvou celých čísel (A Násobení dvou celých čísel (A*B) bez operace násobení – procesor neumí násobit A*B = A+A+………+A=0+A+A+………+A Bé-krát se přičte A

Nutno myslet „strojově“ stroj neumí provést celou operaci A+A+………+A najednou je nutné postupně přičítat hodnotu proměnné A číslo cyklu 1 2 3 4 5 6 7 ….. B 0+A +A ..…

Násobení dvou celých čísel (A Násobení dvou celých čísel (A*B) bez operace násobení – procesor neumí násobit

Násobení dvou celých čísel (A*B) bez operace násobení chyba: co když bude B=0? Cyklus se provede dvakrát (i=1, i=0) => V=0+A+A chyba: nefunguje pro B<0

Násobení dvou celých čísel (A*B) bez operace násobení, B>0 efektivnější algoritmus o 1 opakování chyba: co když bude B=1? Cyklus se provede dvakrát (i=1, i=0) => V=A+A+A

Násobení dvou celých čísel (A*B) bez operace násobení, B>1 efektivnější algoritmus o 1 opakování optimálnější by však bylo počítat 5*3, než 3*5 = úspora 2 opakování těla cyklu

Násobení dvou celých čísel (A*B) bez operace násobení, B>1, A>1 optimálnější by však bylo počítat 5*3, než 3*5 = úspora 2 opakování těla cyklu vyplatilo by se při 2*3?

Násobení dvou celých čísel (A Násobení dvou celých čísel (A*B) bez operace násobení, (pro libovolné A, B)

Vytvořte algoritmus, který vypíše ciferný součet zadaného celého čísla např. pro číslo 5426 bude výsledek 17 (5+4+2+6) můžete použít pouze základní aritmetické operace +, -, *, /, % a funkci abs() pro výpočet absolutní hodnoty

Vytvořte algoritmus, který vypočítá n-tou mocninu čísla X (Xn) můžete použít pouze základní aritmetické operace +, -, *, /, % a funkci abs() pro výpočet absolutní hodnoty Xn = X*X*X*…..*X (n-krát násobení X pro n>0) Xn = 1 𝑋∗𝑋∗𝑋∗…….∗𝑋 (pro n<0) Xn = 1(pro n=0)

Vytvořte algoritmus, který bude počítat faktoriál ze zadaného celého čísla R >= 0 R!=R*(R-1)! R!=R*(R-1)*….*2*1 R!=1*2*….*(R-1)*R 0!=1

Mohl by cyklus hned začít s i=2? (tzn. i=2..R)

Algoritmus zapsaný pomocí cyklu s podmínkou na začátku

Vykreslete obdélník pomocí. , výšku a šířku načtěte ze vstupu Vykreslete obdélník pomocí *, výšku a šířku načtěte ze vstupu. (V>0, S>0) příklad pro 4*14: ************** pro tisk znaků můžete použít funkci CHAR, které dejte do parametru číslo znaku z ASCII tabulky: CHAR(42) je znak *, CHAR(13) CHAR(10) je konec řádku

vnitřní (vnořený) cyklus tělo vnějšího cyklu

Vylepšete algoritmus, aby se vykresloval jen obrys obdélníku Vylepšete algoritmus, aby se vykresloval jen obrys obdélníku. (zjednoduš.V>2,S>2) příklad pro 4*14: ************** * * CHAR(32) je znak mezery

Násobení tří celých čísel (A. B Násobení tří celých čísel (A*B*C) bez násobení – A>0, B>0, C>0 A*B*C = A*B+A*B+A*B+.....A*B (počet A*B je C) =A+A+A+....A + A+A+A+....A + ....+ A+A+A+....A

Násobení tří celých čísel (A. B Násobení tří celých čísel (A*B*C) bez násobení – A>0, B>0, C>0 zkouška pro 5*3*2=30

Vytvořte algoritmus, kterým ověříte, že zadané přirozené číslo (>1) je prvočíslo. prvočíslo – beze zbytku dělitelné pouze číslem 1 a sebou samým 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, …….

Vytvořte algoritmus, který vypíše všechna prvočísla až do zadaného čísla

Pole (vektor) Označuje datovou strukturu, která uchovává konečný počet prvků (čísel, textových řetězců, … ) stejného datového typu. K jednotlivým prvkům pole se přistupuje pomocí jejich indexu (celého čísla, označujícího pořadí prvku). 1 5 6 10 3 2 7 8 a i= 1 2 3 4 5 6 7 8

Pole / pokračování i= 1 2 3 4 5 6 7 8 1 5 6 10 3 2 7 8 a[2] = 5 … a[i] Pokud chceme projít celé pole musíme: projít postupně všechny prvky pomocí indexu i, který postupně nabývá hodnot i=1..m (kde m značí velikost pole)

vytvoří se pole a a hodnoty jeho prvků se načtou ze vstupu, rozměr pole (počet prvků pole) je m na výstup se vypíše hodnota druhého prvku pole; CHYBA, pokud má pole pouze 1 prvek pokud první prvek (a[1]) má hodnotu >3, na výstup se vypíše počet prvků pole vytvoří se pole p, rozměr pole je 5 prvků - hodnoty prvků pole nejsou definovány prvek s indexem 1 pole p se nastaví na hodnotu 25

Načtení pole budeme používat zjednodušení v praxi však nutno načítat hodnoty prvků jednotlivě budeme používat zjednodušení

Algoritmus, který načte pole ze vstupu a poté vytiskne postupně hodnoty všech prvků pole.

Vytvořte algoritmus, který načte pole ze vstupu a sečte hodnoty všech prvků v poli

Vytvořte algoritmus, který načte pole ze vstupu a sečte všechny hodnoty prvků v poli větší než 3

Vytvořte algoritmus, který načte pole ze vstupu a vymění hodnoty prvků tímto způsobem: a[1] <=> a[8] a[2] <=> a[7] a[3] <=> a[6] a[4] <=> a[5] první s posledním druhý s předposledním atd. 1 5 6 10 3 2 7 8  8 7 2 3 10 6 5 1

Algoritmus funkční pro sudý počet prvků

Plně funkční algoritmus

Plně funkční algoritmus

Vytvořte algoritmus, který načte pole čísel, vytvoří nové pole a zkopíruje do něj hodnoty prvků načteného pole zvětšené o číslo indexu prvku. 1 5 6 10 3 2 7 8 a i= 1 2 3 4 5 6 7 8 2 7 9 14 8 16 b

algoritmy řazení čísel

Bubble sort – řazení zaměňováním Vzestupné řazení: porovnává hodnoty dvou sousedních prvků, a pokud je nižší číslo napravo od vyššího, tak je prohodí a se stejnou logikou se pokračuje na dalším indexu. Pokud jsou čísla ve správném pořadí, tak je neprohodí – pouze postoupí na další index. prochází se pole a porovnávají se dva sousední prvky (index j a j+1). Pokud platí, že prvek s indexem j > prvek s indexem j+1, pak oba prvky zaměníme. na konci prvního provedení postupu se tímto způsobem na konec pole vždy dostane to největší číslo. po n-1 opakováních algoritmu je pole seřazeno (n je počet prvků v poli) http://www.algoritmy.net/article/3/Bubble-sort

Vzestupné setřídění čísel pomocí Bubble sort I. 1 2 3 4 5 6 7 5 8 4 9 7 2 1  5 4 8 9 7 2 1  5 4 8 7 9 2 1  5 4 8 7 2 9 1  5 4 8 7 2 1 9

Vytvořte algoritmus na postup, kterým se jednou projde pole, porovnávají se hodnoty sousedních prvků a pokud prvek s menším indexem má větší hodnotu než prvek s větším indexem, hodnoty obou prvků se vymění.

Vzestupné setřídění čísel pomocí Bubble sort II. na začátku: 5 8 4 9 7 2 1 po prvním zopakování postupu: 5 4 8 7 2 1 9 po druhém zopakování postupu: 4 5 7 2 1 8 9 po šestém zopakování postupu: 1 2 4 5 7 8 9

Efektivnější algoritmus Bubble sort všimněte si 5 8 4 9 7 2 1 1. 5 4 8 7 2 1 9 2. 4 5 7 2 1 8 9 3. 4 5 2 1 7 8 9 4. 4 2 1 5 7 8 9 5. 2 1 4 5 7 8 9 6. 1 2 4 5 7 8 9

Bubble sort Algoritmus (pro vzestupné seřazení): 1. prochází se pole a porovnávají se dva sousední prvky (index j a j+1). Pokud platí, že prvek s indexem j > prvek s indexem j+1, pak oba prvky zaměníme. 2. krok 1 se opakuje pro pole délky n, n-1, ....,2

Efektivnější algoritmus Bubble sort při prvním a každém dalším provádění postupu se kontroluje, zda se vůbec vyměnily hodnoty dvou prvků pokud ano – postup se znovu zopakuje pokud ne – čísla jsou již seřazena, není třeba postup opakovat 1 2 3 4 5 6 7 1 3 4 6 7 9 12

Select sort - řazení výběrem maximálního prvku Vzestupné řazení: 1. nalezení prvku s maximální hodnotou 2. záměna maximálního prvku s posledním prvkem pole (pro vzestupné řazení) Algoritmus spočívá v aplikování základních kroků postupně na pole délky n, n-1, n-2,....,2; tato pole vzniknou z původního pole zkráceného o maximální prvky (postupně o 1, 2, 3,……. n-2 prvků) http://www.algoritmy.net/article/4/Selection-sort

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

Vytvořte algoritmus na postup, kterým se projde pole načtených hodnot a nalezne se index prvku s maximální hodnotou v celém poli.

Select Sort cyklus délka prohledávaného pole změněné pole prvků 1 6 základní pole prvků: 10, 5, 9, 3, 1, 4 cyklus délka prohledávaného pole změněné pole prvků 1 6 4, 5, 9, 3, 1, 10 2 5 4, 5, 1, 3, 9, 10 3 4 4, 3, 1, 5, 9, 10 1, 3, 4, 5, 9, 10

algoritmy vyhledávání čísel

Sekvenční vyhledávání Algoritmus spočívá v procházení prvků pole a v jejich porovnávání s hledanou hodnotou, dokud se prvek nenajde, nebo dokud se nedojde na konec pole. http://www.algoritmy.net/article/19/Linearni-vyhledavani

Vyhledávání binárním půlením Algoritmus je aplikovatelný pouze na neklesající posloupnost prvků (pole), případně po modifikaci na nerostoucí posloupnost prvků. Rekurzivně se opakuje porovnání hledaného prvku X s prvkem uprostřed pole a[i] (i=n/2 nebo i=(n+1)/2). Pokud se hodnota obou prvků shoduje pak je prvek nalezen. Pokud X<a[i], algoritmus se aplikuje na polovinu menších prvků, jinak na polovinu větších prvků. http://www.algoritmy.net/article/21/Binarni-vyhledavani

Hledá se číslo 3 1 2 3 4 5 6 7 1 2 3 4 5 9 10 1 2 3 4 5 9 10 1 2 3 4 5 9 10

Hledané číslo nenalezeno. Hledá se číslo 40 1 2 3 4 5 6 7 8 9 10 11 12 1 5 7 13 14 22 23 24 35 49 55 99 1 5 7 13 14 22 23 24 35 49 55 99 1 5 7 13 14 22 23 24 35 49 55 99 Hledané číslo nenalezeno.

Vyhledávání – binárním půlením (příklad) základní pole prvků: 1, 2, 3, 4, 5, 9, 10 hledaný prvek: 3 cyklus prohledávané pole 1 1, 2, 3, 4, 5, 9, 10 2 1, 2, 3 3

Matice =dvojrozměrné pole, prvky matice se nacházejí v řádcích a sloupcích a[1][1] a[i][k] i – řádek k – sloupec a[3][2] a[3][4] číslování řádků a sloupců od 1 a[5][1] a[5][4]

vytvoří se matice a a hodnoty jejích prvků se načtou ze vstupu, rozměr matice je m řádků a n sloupců na výstup se vypíše hodnota prvku ve 2. řádku a 3. sloupci matice; CHYBA, pokud matice má 1 řádek nebo 2 sloupce pokud hodnota prvku a[1][2] >3, na výstup se vypíše počet prvků v matici

vytvoří se matice a a hodnoty jejích prvků se načtou ze vstupu, rozměr matice je m řádků a n sloupců vytvoří se matice b, rozměr matice je 1 řádek a 3 sloupce – hodnoty prvků matice nejsou definovány vytvoří se matice c, rozměr matice je m řádků a n sloupců - hodnoty prvků matice nejsou definovány vytvoří se pole p, rozměr pole je 5 prvků - hodnoty prvků pole nejsou definovány

Načtení matice budeme používat zjednodušení v praxi však nutno načítat hodnoty prvků jednotlivě budeme používat zjednodušení

Algoritmus, který načte matici ze vstupu a poté vytiskne postupně hodnoty všech prvků matice po řádcích.

Algoritmus, který načte matici ze vstupu a poté vytiskne postupně hodnoty všech prvků matice po sloupcích.

Algoritmus načte matici ze vstupu a vypíše součet všech prvků v matici. součet se provádí po řádcích

Algoritmus načte matici ze vstupu a vypíše součet všech prvků v matici. součet se provádí po sloupcích

Algoritmus, který načte čtvercovou matici a vymění prvky na hlavní a vedlejší diagonále po řádcích.

Algoritmus, který vymění prvky na hlavní a vedlejší diagonále čtvercové matice po řádcích.

Algoritmus, který vymění prvky na hlavní a vedlejší diagonále čtvercové matice po řádcích.

Algoritmus, který vymění prvky na hlavní a vedlejší diagonále čtvercové matice po řádcích.

Algoritmus, který načte matici A, vytvoří novou matici B stejných rozměrů a vloží do ní hodnoty prvků z načtené matice A, ale k hodnotám prvků v prvním sloupci se přičte číslo řádku, ve kterém se nacházejí. matice A matice B =5+1 =4+2 =5+3 =7+4 =5+5

Algoritmus, který načte matici a vrátí součet hodnot prvků na hlavní diagonále.

Algoritmus, který načte matici a vrátí součin hodnot prvků na hlavní diagonále. jak se změní předchozí algoritmus?

Vytvořte algoritmus, který načte pole čísel, vypíše největší z nich a index prvku, ve kterém se nachází

pokud by byla jistota, že pole je minimálně dvouprvkové, cyklus by mohl být „i=2..m“

Vytvořte algoritmus, který načte matici a vytvoří novou matici, transponovanou z načtené

Pomocí vývojového diagramu zapište algoritmus na sečtení všech prvků v matici, které jsou zároveň v lichých sloupcích a lichých řádcích. Tyto prvky navíc nastavte na hodnotu 0 (nula).

Vytvořte obecný algoritmus, který načte dvě matice stejného rozměru a do třetí vytvořené matice vloží jejich součet. konkrétní příklad 6 4 1 7 5 4 2 5 1 6 8 3 12 1 + =

Vytvořte obecný algoritmus, který načte dvě matice a do třetí vytvořené matice vloží jejich součin. konkrétní příklad 6 4 1 7 5 8 44 10 14 39 20 5 4 1 2 5 * = c[1][1]=a [1][1]*b [1][1]+a [1][2]*b [2][1] c[1][2]=a [1][1]*b [1][2]+a [1][2]*b [2][2] c[1][3]=a [1][1]*b [1][3]+a [1][2]*b [2][3] c[2][1]=a [2][1]*b [1][1]+a [2][2]*b [2][1] c[2][2]=a [2][1]*b [1][1]+a [2][2]*b [2][2] c[2][3]=a [2][1]*b [1][1]+a [2][2]*b [2][3] …. c[3][3]=a [3][1]*b [1][3]+a [3][2]*b [2][1]

Čtení algoritmu Máte k dispozici vývojový diagram algoritmu. Když se na vstupu načte níže uvedené pole, jaké hodnoty bude mít načtené pole na konci algoritmu a jakých hodnot budou postupně nabývat uvedené proměnné (i, j, P) v označeném místě algoritmu?

1 2 5 3 -1 1 5

Máte k dispozici vývojový diagram algoritmu Máte k dispozici vývojový diagram algoritmu. Jaký bude výsledek algoritmu (výstup), když se na vstupu načte níže uvedená matice, jaké hodnoty bude mít načtená matice na konci algoritmu a jakých hodnot budou postupně nabývat uvedené proměnné (i, k, V) v označeném místě algoritmu?

1 2 6 3 8 13 18 19 17 výpis algoritmu: Součet je 19