· matematika - základní pojem, nedefinuje se
· jednoznačně stanovená posloupnost operací, které řeší daný problém
· obecná pravidla určující postupnou transformaci vstupních údajů na výstupní
Vstupní údaje - informace, ze kterých při řešení úlohy vycházíme, musí splňovat vstupní podmínku
Výstupní údaje - nově získané informace, které jsou výsledkem realizace algoritmu, musí splňovat výstupní podmínku
· DETERMINOVANOST - v každém kroku musí být jednoznačně určeno, co se má provést (přesnost, srozumitelnost)
· HROMADNOST - algoritmus řeší skupinu úloh pro různé vstupní údaje
· REZULTATIVNOST - proces je konečný a vede k získání správného výsledku
Algoritmus je správný tehdy, když pro všechny údaje splňující vstupní podmínku se proces zastaví a výstupní údaje splňují výstupní podmínku.
· důkazové metody
· testování - testovací tabulky - ručně, trasování na počítači
· praxe u komerčních programů - souběžný ruční a strojový provoz po určitou dobu, beta verze programů
zachycují transformaci hodnot proměnných v průběhu realizace algoritmu, nejedná se o důkaz algoritmu
řeší tutéž úlohu, vybíráme efektivnější, nelze stanovit jednoznačně jeden nejlepší
časová - spotřeba času, důležitější
paměťová - spotřeba paměti
přehlednost a srozumitelnost
· slovní
· grafický (VD, struktogram, kopenogram, ...)
· program

spojka
spojnice, šipky
odlišnost pro malé a velké programy, začátečníky a profesionály
specifikace
vstupy - identifikátor, popis, typ proměnné, vstupní podmínky
výstupy - identifikátor, popis, typ proměnné
(další proměnné)
výv. diagram
chyby syntaktické a logické
efektivita - paměťová a časová, přehlednost
uživatelská úprava - testování vstupů, vzhled programu
programátorská a uživatelská (manuály, ref. příručky, učebnice - tištěné a elektronické, helpy, ...)
Sestavte program pro výpočet obvodu a obsahu čtverce o straně a.
A velikost strany čtverce real, A>0
OBVOD obvod čtverce real
OBSAH obsah čtverce real
připravený příklad (příklady)
3®12,9

přepis do programovacího jazyka - ano
Sestavte program pro výpočet obsahu obdélníka o stranách a, b.
1. hlavička
2. deklarační část
3. příkazová část
program identifikátor;
nemusí být uvedeno, je vhodné uvádět
standardní Pascal vyžaduje navíc za identifikátorem ještě seznam vstupních a výstupních souborů, se kterými program pracuje, např. program BLBOST (input, output);
- patří sem i uses (jednotky)
- pokud definujeme jednotku - místo program unit, musí být uvedeno
popisuje (deklaruje) objekty, se kterými bude program pracovat (významy identifikátorů)
každý objekt musí být nejprve deklarován a potom teprve použit!!!
Deklarace
1. návěští
2. konstanty
3. typy
4. proměnné
5. procedury a funkce
lze v libovolném pořadí a vícekrát, standard - v daném pořadí a jen jednou
popisuje vlastní výpočetní proces
co se s deklarovanými objekty bude dělat
začíná begin a je ukončen tečkou (.)
obsahuje příkazy oddělené středníkem
volný, využití odsazení
komentáře
mezery
nedělitelnost některých objektů (klíč. slova, literály, identifikátory, speciální víceznakové symboly, návěští)
ruční zápis - velká, malá písmena, podtržení
posloupnost libovolných znaků v {}nebo (* *)
lze zapsat kdekoliv, kde je povolena mezera
objekt, jehož hodnota se může měnit
· jméno (identifikátor)
· typ
· hodnota
Představa proměnné v paměti (alokace + jméno + pam. prostor, vstupy a výstupy).
posloupnost písmen a číslic začínající písmenem
· velká x malá písmena
· délka identifikátoru (rozlišení) - Pascal = 63 zanků
· další znaky - velmi často podtržítko _
· rezervovaná slova - zakázané identifikátory - nesmí se shodovat s klíčovým slovem
· standardní identifikátory (předdefinované) - nedefinují se, definované jazykem - integer, real, boolean, write, sqrt, ...
· nelze použít 2 proměnné se stejným identifikátorem
identifikátory - konstanty, proměnné, návěští, funkce, procedury, typu, programu, ...
mnemotechnika identifikátorů
základní datové typy v Pascalu - integer, real, boolean, char, string (strukturované, ukazatel, objekt)
· množina přípustných hodnot
· množina operací a funkcí
· paměťové nároky
var
N : integer;
A,B,C : real;
R,S : string;
P,Q : boolean;
Každá proměnná musí být vždy nejprve deklarována a teprve potom použita.
definice hodnoty:
· příkaz vstupu - přečtené hodnoty (klávesnice, soubor,...)
· přiřazovací příkaz - „vypočítané“ hodnoty
Každá proměnná musí mít vždy definovánu hodnotu.
jedndoduché
- přiřazovací
- procedury
- skoku
- prázdný
strukturované
- složený
- podmíněný (if-then-else, if-then, case)
- cyklu (while, repeat, for)
- with
syntaxe a sémantika jazyka
definuje hodnotu proměnné
proměnná := výraz
proměnná - identifikátor proměnné, jejíž hodnota se mění
výraz - výraz stejného (resp. kompatibilního) typu jako proměnná na pravé straně
Výraz na pravé straně se vyhodnotí a jeho hodnota se přiřadí proměnné na levé straně.
1. proměnná a výraz stejného typu
2. proměnná..real, výraz..integer (lze definovat šířeji)
read(seznam proměnných)
seznam proměnných - identifikátory proměnných, do kterých se mají načíst hodnoty z klávesnice, oddělené čárkou
Z vstupního zařízení (klávesnice) se načítají hodnoty a přiřazují se proměnným v seznamu.
write(seznam výrazů)
seznam výrazů - výrazy oddělené čárkou
Výrazy se postupně vyhodnocují a jejich hodnoty se zobrazují na obrazovce.
GOTO návěští
nepoužíváme
nic - má syntaktický význam
editor + nástroje pro překlad, ladění, a spuštění programu
spuštění, okna, nonamexx.pas
File - New
- Open F3
- Save F2
- Save as...
- Save all
- Exit Alt+X
Compile - Compile Alt+F9
- Destination (Memory/Disk)
Run - Run Ctrl+F9
Debug - User Screen Alt+F5
(příklad Čtverec)
mazání obrazovky
ukončení bez potvrzení
málo informací na obrazovce
úprava na obrazovce
semilogaritmický tvar čísel real
program Ctverec;
var
A,Obvod,Obsah: real;
begin
read(A);
Obvod:=4*A;
Obsah:=A*A;
write(Obvod,Obsah)
end.
(čistá obrazovka)
Obvod a obsah ctverce
---------------------
Zadej velikost strany: 5
Obvod ctverce o strane 5 je 20.
Obsah ctverce o strane 5 je 25.
(čekání na stisk)
mazání obrazovky clrscr
čekání na stisk klávesy repeat until keypressed
Jednotka crt uses crt
pozice kurzoru, rozměry obrazovky v textovém režimu
write(seznam výrazů) - kurzor za posledním znakem
writeln(seznam výrazů) - kurzor na další řádek
writeln(vynech řádek)
na pozici kurzoru
read(seznam proměnných)
zadávání proměnných - odděleny mezerou (nebo Enter)
málo hodnot - ptá se dál; více hodnot - přebytečné si zapamatuje
read(seznam proměnných) - přečte kolik potřebuje a zbytek si zapamatuje
readln(seznam proměnných) - přečte kolik potřebuje a zbytek ignoruje (zahodí)
readln - čekání na Enter
doporučení: pro každou hodnotu zvláštní příkaz vstupu (a s výzvou) a raději readln
char:
1 znak, konec řádku (Enter)=mezera
string:
čte všechny znaky až po následující znak konce řádky (Enter), který však již není do proměnné zahrnut
pokud je výsledný řetězec delší, než maximální délka dané řetězcové proměnné, uloží se pouze znaky v rozsahu délky proměnné, zbytek se ztrácí
následující Read začne čtení znakem konce řádky, který ukončil čtení řetězce
ke čtení po sobě jsoucích řetězců používat readln
integer, real:
přeskočí všechny mezery, tabelátory a znaky konce řádky, které numerický řetězec předcházejí
jestliže číselný řetězec nevyhovuje, nastane chyba; jinak je hodnota přiřazena do proměnné
následující Read začíná na mezeře, tabelátoru nebo znaku konce řádky, který ukončil předchozí číselný řetězec
real výraz:10 10 znaků, semilog. tvar, doplnění mezer zleva nebo potlačení formátu
integer výraz:10 10 znaků, doplnění mezer zleva nebo potlačení formátu
string výraz:10 zarovnání textu na 10 znaků, doplnění mezer nebo oříznutí zprava
real výraz:10:3 10 pozic, z toho 3 des. místa, desetinný tvar, doplnění mezer zleva nebo potlačení formátu
program Ctverec;
uses crt;
var
A, Obvod, Obsah: real;
begin
clrscr;
writeln(‘Obvod a obsah ctverce’);
writeln(‘---------------------’);
write(‘Zadej velikost strany ctverce: ‘);
read(A);
writeln;
Obvod:=4*A;
Obsah:=A*A;
writeln(‘Obvod ctverce o strane ’,A:10:2,’ je ‘,Obvod,’.’);
writeln(‘Obsah ctverce o strane ’,A:10:2,’ je ‘,Obsah,’.’);
repeat until keypressed
end.
smazání obrazovky na začátku, čekání na stisk na konci
zadávání hodnot po 1 a s výzvou
nadpis
komentované výstupy
odstraňovat semilogaritmický tvar čísel
žádné zbytečnosti
oddělovat vstupy a výstupy od vlastního algoritmu (pokud nejsou součástí algoritmu)
používat komentáře
Sestavte posloupnost přiřazovacích příkazů pro záměnu hodnot A, B.

Vstupy:
A
B zadané hodnoty integer
Výstupy:
A
B zaměněné hodnoty
================================================================================
A:=B
B:=A
|
A |
5 |
7 |
|
B |
7 |
7 |
chybné řešení
P:=A
A:=B
B:=P
|
A |
5 |
7 |
|
B |
7 |
5 |
|
P |
- |
5 |
použití pomocné proměnné
nešetří paměť, ale je rychlejší, přehlednější a univerzální
A:=A+B
B:=A-B
A:=A-B
|
A |
5 |
12 |
7 |
|
B |
7 |
5 |
- |
šetří paměť
================================================================================
ověření správnosti algoritmu - sledování změn proměnných
význam : ověření správnosti (nikoli důkaz), odhalení chyby, pochopení algoritmu
volba vstupních hodnot (nutno znát výsledky) - „normální hodnoty“, mezní hodnoty, hodnoty nesplňující vstupní podmínku
Sestavte posloupnost přiřazovacích příkazů pro přesun hodnot mezi třemi proměnnými A, B, C, a to z A do B, z B do C a z C do A.
= objekty, který se nemění
· přímý (literál)
· symbolický (identifikátorem)
identifikátor jako u proměnných, ale nelze měnit
úsek deklarací konstant
const
MAX=100;
MIN=-MAX;
MEZERA=' ';
JMENO='PASCAL';
const
i1=h1;i2=h2;...;in=hn;
i1,...,in identifikátory
h1,...,hn hodnoty konstant
lze použít i konstanty už deklarované a operátor změny znaménka
TP - lze použít další jednoduché operace (omezeno)
· zvýšení srozumitelnosti (mnemotechnika)
· zjednodušení modifikace programu
const
DELKASTRANY=60;
CELKPOCET=100;
PI=3.14159;
KONCOVYZNAK='$';
while RADEK<60 do TISKRADEK while RADEK<DELKASTRANY do TISKRADEK
for POCET:=1 to 100 do VYPOCET for POCET:=1 to CELKPOCET do VYPOCET
OBVOD:=3.141549*PRUMER OBVOD:=PI*PRUMER
repeat read(ZN) until ZN='$' repeat read(ZN) until ZN=KONCOVYZNAK
každá konstanta je určitého typu
ve výrazech musí být kompatibilita
1. co lze napsat do programu (jak rozliší počítač typ konstanty)
2. co lze zadat z klávesnice
3. co a jak tiskne počítač
integer obsahuje pouze +,-,číslice
obsahuje . nebo E
desetinné číslo s tečkou, může být i jako celé nebo semilog. tvar
semilogaritmický tvar zápisu čísla xEn ...x.10n x-mantisa,
n-exponent - význam ![]()
Př.:
2.5468000E+03 2546,8
3.6621500E-02 0,0366215
Př.:
23000 23E3, 2.3E4 2.300000E+04
0,006 6E-3 6.000000E-03
-200 -2E2 -2.000000E+02
počítač při výpisu převádí na normalizovaný tvar a vždy píše semilogaritmický, neřekneme-li jinak
zadávat lze různě (des. číslo, semilogaritmické v lib. tvaru)
je vhodné psát 3.0 místo 3
řetězec - libovolné znaky v apostrofech - ‘AHOJ’, ‘§sdf))asdf’, ‘’
apostrofy se zapisují v programu, při zadávání z klávesnice nebo výpisu ne
v některých jazycích se místo apostrofů používají uvozovky
právě 1 znak (mezi apostrofy a viz řetězec)
apostrof '"'
true, false
nelze zadat z klávesnice
probereme později
(i historicky)
1. strojový kód - hardwarově závislý, nutná znalost „vnitřku počítače“, vzhled: čísla, jediný jazyk, kterému rozumí počítač - program musí být do strojového kódu vždy přeložen
2. jazyk symbolických adres (assembler) - viz předchozí, ale symbolické zápisy instrukcí (místo čísel zkratkové příkazy) - používá se v kritických místech programů
3. vyšší programovací jazyky (problémově orientované jazyky místo strojově orientovaných jazyků 1. a 2.) - jednoduchý zápis (formalizovaná angličtina), přenositelnost, velké množství jazyků - každý je vhodný k něčemu jinému
COBOL - hromadné zpracování dat
FORTRAN - vědeckotechnické výpočty
Algol - předchůdce Pascalu
Pascal - výuka, tvorba aplikací (Delphi)
C,C++ - profesionální jazyk, blízko HW (operační systém)
BASIC - pro začátečníky a laiky (rychlé zvládnutí, rychle běží program) - má nevýhody, ale dnes také renesance (Visual BASIC)
Java - programování pro WWW, ale je to plnohodnotný jazyk založený na C
Ada, Lisp, Prolog, SmallTalk, ...
překládají program do strojového kódu
překlad celého programu (exe soubor), běh ve strojovém kódu
výhody: rychlost, běh nevyžaduje zdrojový soubor a vývojové prostředí ani runtime moduly
Př.: Pascal, C++,...
překlad po příkazech (překlad - vykonání příkazu)
nevýhoda: rychlost, nutnost šíření zdrojového kódu a vývojového prostředí resp. runtime modulu
výhoda: při ladění programu je rychlejší (nepřekládá před spuštěním celý program)
Př.: BASIC, databázové jazyky
editace zdrojového textu
kontrola syntaxe
překlad a spouštění programu
prostředky pro ladění programu (sledování hodnot proměnných, krokování,...)