View
53
Download
5
Category
Preview:
DESCRIPTION
Algoritmi zace. Cíl předmětu - nau čit se sestavovat algoritmy řešení jednoduchých problémů a zapisovat je (v jazyku Java) Poznámka : Složení studentů heterogenní – nudící se * nestíhající studenti Algoritmizace je to „p rerekvizita “ letních předmětů !! - PowerPoint PPT Presentation
Citation preview
Alg1
Algoritmizace• Cíl předmětu - naučit se sestavovat algoritmy řešení jednoduchých problémů a
zapisovat je (v jazyku Java)• Poznámka: Složení studentů heterogenní – nudící se * nestíhající studenti Algoritmizace je to „prerekvizita“ letních předmětů!! • Organizace předmětu (rytmus 2005 – čtvrtek … středa)
– přednášky (účast nepovinná, ale doporučená)– zakončení: klasifikovaný zápočet (*)
• písemný test na přednáškách 30 b• test u počítače na cvičeních 30 b• aktivita na cvičeních 20 b• semestrální práce 20 b
– hodnocenípočet bodů klasifikace• 85 - 100 1• 70 - 84 2• 50 - 69 3• < 50 4
Alg1
Algoritmizace - Témata přednášek
1. Algoritmy, programy, programovací jazyky (alg1)
2. Proměnné a výrazy (alg2)
3. Řídicí struktury (alg3)
4. Funkce (alg4)
5. Rozklad problému na podproblémy (alg5)
6. Pole (alg6)
7. Třídy a objekty I (alg7)
8. Soubory (alg8)
9. Textové soubory (alg9)
10. Složitost algoritmů (alg10)
11. Třídy a objekty II (alg11)
12. Spojové struktury (alg12)
13. Datové abstrakce (alg13)
14. Rezerva
Alg1
Témata cvičení a harmonogram testů
1. Seznámení s počítačovou učebnou
2. Sezn8meni s prostředím NetBeans
3. Proměnné, výrazy, přiřazení, vstup a výstup
4. Větvení
5. Cykly
6. Funkce + zadání semestrální práce
7. Pole
8. Objekty
9. Rekurze
10. Soubory
11. Složitost algoritmů + TEST „na cvičení“
12. Třídy + TEST „na cvičení“
13. Datové struktury
14. Zápočet
Alg1
Zdroje pro studium
1. Vývojové prostředky: NetBeans – viz cvičení- http://www.netbeans.org/
• Stáhnout přímo či přes USB (>=128)
2. Podklady k přednáškám a cvičení:
a) Slides předmětu Algoritmizacehttp://service.felk.cvut.cz/courses/X36ALG
b) Slides naší paralelky (současná aktualizovaná podoba) http://service.felk.cvut.cz/courses/X36ALG/
Slajdy_ppt_paralelka_Jelinek
3. Základní příručky: Virius, M.: Java pro zelenáče, Neocortex, 2001Herout, P.: Učebnice jazyka JAVA, Kopp, 2000
Alg1
Další zdroje
• Jakákoliv učebnice jazyka Java - publikace v češtině:
Eckel, B.: Myslíme v jazyku Java, Grada, 2000, I + IIChapman, S., J.: Začínáme programovat v jazyce JAVA, Computer Press, 2001Pitner,T.: Java, začínáme programovat, Grada, 2002Hawlitzek, JAVA2, příručka programátora, Grada, 2000Shildt, H.: Java 2, Příručka programátora, Softpress, 2001Herout, P.: JAVA, grafické uživatelské prostředí a čeština, Kopp, 2001
Alg1
Algoritmy
• Úloha: najděte největšího společného dělitele čísel 6 a 15
Řešení:
• Popišme postup tak, aby byl použitelný pro dvě libovolná přirozená čísla, nejen pro 6 a 15:
– označme zadaná čísla x a y a menší z nich d
– není-li d společným dělitelem x a y, pak zmenšíme d o 1, test opakujeme a skončíme, až d bude společným dělitelem x a y
Poznámka:
• Význam symbolů x, y a d použitých v algoritmu:
– jsou to proměnné (paměťová místa), ve kterých je uložena nějaká hodnota, která se může v průběhu výpočtu měnit
Alg1
Algoritmy - příkladÚloha: najděte největšího společného dělitele čísel 6 a 15
krok x y d poznámka6 15 ? zadání vstupních dat
1 6 15 6
2 6 15 6 d není dělitelem y, proveď krok 3
3 6 15 5
2 6 15 5 d není dělitelem x, proveď krok 3
3 6 15 4
2 6 15 4 d není dělitelem x ani y, proveď krok 3
3 6 15 3
2 6 15 3 d je dělitelem x i y, proveď krok 4
4 6 15 3 výsledek je hodnota 3
Alg1
Algoritmy - zobecnění
• Úloha: najděte největšího společného dělitele
• Přesnější popis:
Vstup: přirozená čísla x a y
Výstup: nsd(x,y)
Postup:
1. Je-li x<y, pak d má hodnotu x, jinak d má hodnotu y
2. Opakuj krok 3, pokud d není dělitelem x nebo d není dělitelem y
3. Zmenši d o 1
4. Výsledkem je hodnota d
• Sestavili jsme algoritmus pro výpočet největšího společného dělitele dvou přirozených čísel
Alg1
Algoritmy
• Algoritmus
– postup při řešení určité třídy úloh, který je tvořen seznamem jednoznačně definovaných příkazů a zaručuje, že pro každou přípustnou kombinaci vstupních dat se po provedení konečného počtu kroků dospěje k požadovaným výsledkům
• Vlastnosti algoritmu:
– hromadnostměnitelná vstupní data
– determinovanostkaždý krok je jednoznačně definován
– konečnost a resultativnostpro přípustná vstupní data se po provedení konečného počtu kroků dojde k požadovaným výsledkům
• Algoritmus – syntetický model postupu řešení obecných úloh
• Prostředky pro zápis algoritmu
– přirozený jazyk, vývojové diagramy, struktogramy, pseudojazyk, programovací jazyk
Alg1
Algoritmy
• Vývojový diagram
nsd(x, y)
x < y
d := x d := y
d není dělitelem x nebo d není dělitelem y
d := d - 1
ano ne
ne
nsd := d
ano
Alg1
Algoritmy
• Struktogram
nsd(x, y)
x < yano ne
d := x d := y
pokud d není dělitelem x nebo d není dělitelem y opakuj
d := d - 1
nsd :=d
Alg1
Algoritmy
• Zápis algoritmu v pseudojazykunsd(x,y):if x<y then d:=x else d:=y;while d „není dělitelem“ x or d „není dělitelem“ y do d:=d-1;nsd:=d;
• Zápis algoritmu v programovacím jazykuint nsd(int x, int y){ int d; if (x<y) d=x; else d=y; while (x%d!=0 | y%d!=0) d--; return d;}
Alg1
Programy a programovací jazyky
• Program je předpis (zápis algoritmu) pro provedení určitých akcí počítačem zapsaný v programovacím jazyku
• Programovací jazyky
– strojově orientované
• strojový jazyk = jazyk fyzického procesoru
• asembler (jazyk symbolických adres)
– vyšší jazyky
• imperativní (příkazové, procedurální)
• neimperativní (např. funkcionální)
• Hlavní rysy imperativních jazyků (např. C, C++, Java, Pascal, Basic, ...)
– zpracovávané údaje mají formu datových objektů různých typů, které jsou v programu reprezentovány pomocí proměnných resp. konstant
– program obsahuje deklarace a příkazy
– deklarace definují význam jmen (identifikátorů)
– příkazy předepisují akce s datovými objekty nebo způsob řízení výpočtu
Alg1
Vlastnosti programovacích jazyků
• Syntaxe
– souhrn pravidel udávajících přípustné tvary dílčích konstrukcí a celého programu
• Sémantika
– udává význam jednotlivých konstrukcí
• Prostředky pro popis syntaxe
– syntaktické diagramy
– různé formy Backus-Naurovy formy
• Sémantika je obvykle popsána slovně
Alg1
Syntaktické diagramy
• Příklad: identifikátor je posloupnost písmen a číslic začínající písmenem
Alg1
Rozšířená BNF
• Rozšířená Backus-Naurova forma – EBNF
• Příklad: identifikátor
identifikátor = písmeno {písmeno | číslice}
písmeno = 'A' | 'B' | 'C' | 'D' | ... | 'X' | 'Y' | 'Z'
číslice = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '9'
• Neterminály:
identifikátor, písmeno, číslice
• Terminály:
‘A’, ‘B’, ...
• Význam metasymbolů:
{x} žádný nebo několik výskytů x
x | y x nebo y
[x] žádný nebo jeden výskyt x
pro zájemce
Alg1
Implementace programovacích jazyků
• Dvě základní metody:
– interpretační
– kompilační
• Interpretační metoda:
Alg1
Kompilační metoda - jazyk C
Zdrojový kód
v jazyku CPřeklad v GNU Linuxu
Překlad v Solarisu
Překlad v MS Windows
Program pro
MS Windows
Program pro
Solaris
Program pro
GNU Linux
OS MS
Windows
OS GNU
Linux
OS
Solaris
Alg1
Interpretační metoda - jazyk Java
Zdrojový kód
v jazyku Java
soubor .java
Překlad
(javac)
Bytecode
soubor .class
OS MS
Windows
OS GNU
Linux
OS
Solaris
JRE
JRE
JRE
Alg1
Implementace programovacích jazyků
• Kompilační metoda:
Alg1
Úvod do jazyka Java
• Pro prezentaci, návrh a ověřování algoritmů použijeme jazyk Java
• Proč?
– jde o vyšší, obecně použitelný programovací jazyk s vysokým stupněm zabezpečení
– je objektově orientovaný, umožňuje však i klasické procedurální programování
– vytvořené programy jsou zcela portabilní (program vytvořený pod Windows bez problémů funguje pod Unixem a naopak)
– syntaxe výrazů a příkazů vychází z jazyka C; přechod z Javy na C nebo C++ je tedy jednodušší, než přechod z Pascalu
– základní implementaci (JDK – Java Development Kit) firmy Sun lze pro prostředí Windows i Unix stáhnout ze stránek firmy Sun: http://java.sun.com
– interaktivní grafické vývojové prostředí JBuilder firmy Borland lze pro prostředí Windows i Unix stáhnout ze stránek firmy Borland: http://www.borland.cz
Alg1
Úvod do jazyka Java
• Jazyk Java je implementován interpretačním způsobem
– program je tvořen jedním nebo několika zdrojovými soubory s příponou .java:
Program.java
– zdrojové soubory se přeloží překladačem(*) javac do vnitřní formy
(byte code, bajt-kód) s příponou .class:
Program.java > javac > Program.class
– interpretaci vnitřní formy provede program java (v prostředí JVM – Java Virtual Machine) a provede výpočet:
Program.class > java > „výpočet“
Poznámky:
(*) v terminologii firmy Sun to je kompilátor
• program obvykle využívá řadu knihoven, které je třeba mít k dispozici jak při překladu, tak při interpretaci!!!
Alg1
Zpracování programu v jazyku JAVA
Program.java
public class Program {
public static void main(String[] args) {
System.out.println(“Nazdar, toto je prvni program”);
}
}
Spuštění překladače do byte-code:
javac Program.java
vznikne:
Program.class
spuštění interpretru:
java Program
Nazdar, toto je prvni program
Alg1
Úvod do jazyka Java, vývojový systém
• Programy v jazyku Java budeme vytvářet pomocí vývojového systému NetBeans-BlueJ, který přípravu programu, jeho překlad a provedení zjednodušuje
• Se systémem NetBeans se seznámíte na 1. cvičení v počítačové učebně
Alg1
První program v jazyku Java• Příklad programu, který vypíše daný text na obrazovku:
public class PrvniProgram { public static void main(String[] args) { System.out.println("Nazdar, toto je prvni program"); }}
• Po překladu a spuštění se na obrazovku vypíšeNazdar, toto je prvni program
• Nejjednodušší zdrojový program - jeden soubor
– deklarace veřejné třídy (public class),
– hlavní funkce main (veřejná statická metoda, public static method)
• Soubor musí mít jméno shodné se jménem veřejné třídy a příponu .java
• Hlavička funkce funkce main ():
– klíčová slova public static void (void - procedura)– (String[] args) specifikace parametrů
• Konvence: jména tříd se píší s prvním velkým písmenem
Alg1
Příklady k přednáškám
• První program a všechny další, které budou prezentovány na přednáškách, jsou v adresáři alg_p
• Struktura adresáře:
alg_p src alg1 zdrojové programy k tématu alg1 alg2 zdrojové programy k tématu alg2 ... classes ...
• Podadresáře alg1, alg2 atd. představují tzv. balíky (packages)
• Každý zdrojový soubor umístěný v balíku začíná specifikací balíkupackage alg1;public class PrvniProgram { public static void main(String[] args) { System.out.println("Nazdar, toto je prvni program"); }}
Recommended