Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Základy algoritmizace a programování Pˇrednáška 1 Olga Majlingová ˇ Katedra matematiky, CVUT v Praze
19. záˇrí 2011
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Obsah
1
Úvodní informace
2
Algoritmus a algoritmizace
3
Od algoritmu k programu
4
Jazyk C
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Doporuˇcená literatura
web: http://marian.fsik.cvut.cz/zapg ˇ Resumé pˇrednášek, informace k pˇredmetu, aktuální informace... Herout, P.:Uˇcebnice jazyka C Kernighan, B.W., Ritchie, D.M. Programovací jazyk C web: http://olga.majling.eu tyto prezentace, pˇríklady a jiné
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
ˇ Cíle pˇredmetu
být schopen cˇ íst a psát jednoduché programy v C ˇ základním konstrukcím jayzka C a umet ˇ je použít rozumet
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Klasifikovaný zápoˇcet
ˇ Podmínky udelení zápoˇctu: Bodované odevzdané pˇríklady : maximální zisk Z bodu, ˚ student získal Q bodu. ˚ hodnocení E : 50% Z≤ Q < 60 % Z hodnocení D : 60% Z≤ Q < 70 % Z hodnocení C : 70% Z ≤ Q < 80 % Z hodnocení B : 80% Z ≤ Q < 90 % Z hodnocení A : 90% Z ≤ Q < 100 % Z
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
ˇ Organizace pˇredmetu
1. – 3. Základní konstrukce C 4. Numerické algoritmy 5. – 6. Zápoˇctové pˇríklady.
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Algoritmus
Úloha Algoritmus chápeme jako pˇresný postup, kterým lze vyˇrešit daný typ úlohy.
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Algoritmus Vstupní data
-
Úloha
- Výsledek
Algoritmus chápeme jako pˇresný postup, kterým lze vyˇrešit daný typ úlohy.
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Algoritmus Vstupní data
-
Úloha
- Výsledek
Algoritmus chápeme jako pˇresný postup, kterým lze vyˇrešit daný typ úlohy. jednoznaˇcnost
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Algoritmus Vstupní data
-
Úloha
- Výsledek
Algoritmus chápeme jako pˇresný postup, kterým lze vyˇrešit daný typ úlohy. jednoznaˇcnost koneˇcnost
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Algoritmizace a programování
ˇ Pˇrípravu programu obvykle delíme na dveˇ etapy: Algoritmizace ˇ V prub ˚ ehu analýzy úlohy nebo po jejím ukonˇcení sestavíme algoritmus ˇrešení, který mužeme ˚ znázornit napˇr. graficky, napˇr. ve formeˇ vývojového diagramu. Programování Podle zápisu algoritmu sestavíme program v programovacím jazyku.
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Od algoritmu k programu
algoritmus
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Od algoritmu k programu
algoritmus
?
editor
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Od algoritmu k programu
algoritmus
?
editor
-
pˇrekladaˇc
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Od algoritmu k programu
algoritmus
?
editor 6
-
pˇrekladaˇc
gramatika
?
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Od algoritmu k programu
algoritmus
?
editor 6
-
pˇrekladaˇc
gramatika
-
?
OM
ZAPG
linker
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Od algoritmu k programu
algoritmus
?
editor 6
-
pˇrekladaˇc
gramatika
-
linker
funkce
?
?
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Od algoritmu k programu
algoritmus
?
editor 6
-
pˇrekladaˇc
gramatika
-
linker
funkce
?
?
OM
ZAPG
-
OS
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Od algoritmu k programu myšlenka
algoritmus
6 ?
editor 6
-
pˇrekladaˇc
gramatika
-
linker
funkce
?
?
OM
ZAPG
-
OS
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Jazyk C Zápis programu: prostý textový soubor (ASCII)
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Jazyk C Zápis programu: prostý textový soubor (ASCII) mezery, tabulátory,... pˇrekladaˇc ignoruje mezery a tabulátory slouží ke zvýšení cˇ itelnosti – nešetˇrit mezerami!
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Jazyk C Zápis programu: prostý textový soubor (ASCII) mezery, tabulátory,... pˇrekladaˇc ignoruje mezery a tabulátory slouží ke zvýšení cˇ itelnosti – nešetˇrit mezerami! pˇríkazy se ukonˇcují stˇredníkem
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Jazyk C Zápis programu: prostý textový soubor (ASCII) mezery, tabulátory,... pˇrekladaˇc ignoruje mezery a tabulátory slouží ke zvýšení cˇ itelnosti – nešetˇrit mezerami! pˇríkazy se ukonˇcují stˇredníkem IDENTIFIKÁTORY (jména) : pouze aA..zZ, _ , cˇ íslice 0..9 nesmí zaˇcínat cˇ íslicí
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Jazyk C Zápis programu: prostý textový soubor (ASCII) mezery, tabulátory,... pˇrekladaˇc ignoruje mezery a tabulátory slouží ke zvýšení cˇ itelnosti – nešetˇrit mezerami! pˇríkazy se ukonˇcují stˇredníkem IDENTIFIKÁTORY (jména) : pouze aA..zZ, _ , cˇ íslice 0..9 nesmí zaˇcínat cˇ íslicí rozlišují se velká a malá písmena !!! (id, Id, ID jsou 3 ruzné ˚ identifikátory)
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Jazyk C Zápis programu: prostý textový soubor (ASCII) mezery, tabulátory,... pˇrekladaˇc ignoruje mezery a tabulátory slouží ke zvýšení cˇ itelnosti – nešetˇrit mezerami! pˇríkazy se ukonˇcují stˇredníkem IDENTIFIKÁTORY (jména) : pouze aA..zZ, _ , cˇ íslice 0..9 nesmí zaˇcínat cˇ íslicí rozlišují se velká a malá písmena !!! (id, Id, ID jsou 3 ruzné ˚ identifikátory) všechna klíˇcová slova a názvy funkcí ze standardní knihovny jsou malými písmeny OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Nejjednodušší program
main() {}
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Nejjednodušší program
main() {} ˇ o trochu vetší: int main() { return 0 ; }
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí psát #include<stdio.h> main() { printf("Hello world!"); }
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí psát #include<stdio.h> knihovna funkcí main() { printf("Hello world!"); }
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí psát #include<stdio.h> knihovna funkcí hlaviˇcka funkce main main() zaˇcátek funkce main { printf("Hello world!"); } konec funkce main
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí psát #include<stdio.h> knihovna funkcí hlaviˇcka funkce main main() zaˇcátek funkce main { printf("Hello world!"); tisk } konec funkce main
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí psát #include<stdio.h> knihovna funkcí hlaviˇcka funkce main main() zaˇcátek funkce main { printf("Hello world!"); tisk } konec funkce main
#include<stdio.h> main() { fprintf(stdout, "Hello world!"); }
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí psát #include<stdio.h> knihovna funkcí hlaviˇcka funkce main main() zaˇcátek funkce main { printf("Hello world!"); tisk } konec funkce main
#include<stdio.h> main() { fprintf(stdout, "Hello world!"); }
OM
ZAPG
tisk
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Data: konstanty
ˇ ˇ Konstanty: hodnoty, které se v prub ˚ ehu výpoˇctu nemení. Napˇr. cˇ ísla ... 1, 1.2, 2.718281828 nebo pojmenované konstanty (π)
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Data: konstanty
ˇ ˇ Konstanty: hodnoty, které se v prub ˚ ehu výpoˇctu nemení. Napˇr. cˇ ísla ... 1, 1.2, 2.718281828 nebo pojmenované konstanty (π) v programu : pojmenované konstanty: na zaˇcátku: #define jméno hodnota #define mojePI 3.14159256
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Data: konstanty
ˇ ˇ Konstanty: hodnoty, které se v prub ˚ ehu výpoˇctu nemení. Napˇr. cˇ ísla ... 1, 1.2, 2.718281828 nebo pojmenované konstanty (π) v programu : pojmenované konstanty: na zaˇcátku: #define jméno hodnota #define mojePI 3.14159256 cˇ ísla : celá (BEZ desetinné cˇ ásti): 10 , -21, . . . reálná (s desetinnou teˇckou): 3.12, 2E-1, -0.45, . . .
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
ˇ Data: promenné ˇ ˇ ˇ Promenné:pam et’ová místa, oznaˇcená jménem promenné (identifikátorem)
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
ˇ Data: promenné ˇ ˇ ˇ Promenné:pam et’ová místa, oznaˇcená jménem promenné (identifikátorem) jednoduché: kam se vejde jedna hodnota. v:
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
ˇ Data: promenné ˇ ˇ ˇ Promenné:pam et’ová místa, oznaˇcená jménem promenné (identifikátorem) jednoduché: kam se vejde jedna hodnota. v: ˇ složené: kam se vejde nekolik hodnot. p:
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
ˇ Data: promenné ˇ ˇ ˇ Promenné:pam et’ová místa, oznaˇcená jménem promenné (identifikátorem) jednoduché: kam se vejde jedna hodnota. v: ˇ složené: kam se vejde nekolik hodnot. p: ˇ V programu promenné musíme deklarovat: TYP jméno1, jméno2; ˇ TYP promenné urˇcuje množinu pˇrípustných hodnot a operací. ˇ typy jednoduchých promenných (napˇr).: int, float, double, char int a, b; float c;
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
ˇ Data: promenné ˇ ˇ ˇ Promenné:pam et’ová místa, oznaˇcená jménem promenné (identifikátorem) jednoduché: kam se vejde jedna hodnota. v: ˇ složené: kam se vejde nekolik hodnot. p: ˇ V programu promenné musíme deklarovat: TYP jméno1, jméno2; ˇ TYP promenné urˇcuje množinu pˇrípustných hodnot a operací. ˇ typy jednoduchých promenných (napˇr).: int, float, double, char int a, b; float c; složené: (napˇr. pole): TYP jméno [poˇcet] int a[2]; float c [10]; OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Zápis aritmetických výrazu˚
Aritmetické výrazy: sˇcítání +
odˇcítání -
násobení ∗ ˇ delení /
POZOR: celoˇcíselné nebo reálné
ˇ zbytek po delení %
POZOR: pouze pro celoˇcíselné
ˇ umocnování ... NENÍ! ZLOMKY! a=5*3-12%4;
a/b*c nebo a/(b*c)! b = 1/3*3;
OM
c=1/3*3;
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Použtí matematických funkcí ve výrazech
MATEMATICKÁ KNIHOVNA: #include<math.h> mocnina: odmocnina: goniometrické: inverzní: logaritmy: ex :
pow(co, na_ kolikátou); sqrt(x); sin(x); cos(x); tan(x); asin(x); acos(x); atan(x); log(x); log10(x); exp(x);
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Pˇriˇrazení ˇ PROMENNÁ = VÝRAZ ; ˇ Do promenné se uloží hodnota výrazu. Pˇredcházející hodnota se novou hodnotou pˇrepíše. int a, b, c; a = 5; b = 2; c = 3; a = a + b ; b = a - b ; a = a - b ; c = c + 1; a = c ; c = a ;
a = b ; b = c ; c = a ; OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Naˇcítání a výpis hodnot
ˇ CTENÍ: scanf("formáty", kam); fscanf(stdin, "formát", kam);
VÝPIS: printf("formáty", co); fprintf(stdout, "formát", co);
formáty: int: %d, float: %f, double: %lf, char: %c ˇ CTENÍ: kam: & jméno
VÝPIS: kam: jméno
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí cˇ íst a psát # include<stdio.h> main() {
} OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí cˇ íst a psát # include<stdio.h> main() { int a; float x;
} OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí cˇ íst a psát # include<stdio.h> main() { int a; float x; printf("Zadejte celé ˇ císlo!"); scanf("%d",&a);
} OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí cˇ íst a psát # include<stdio.h> main() { int a; float x; printf("Zadejte celé ˇ císlo!"); scanf("%d",&a); printf("Zadejte reálné ˇ císlo!"); scanf("%f",&x);
} OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí cˇ íst a psát # include<stdio.h> main() { int a; float x; printf("Zadejte celé ˇ císlo!"); scanf("%d",&a); printf("Zadejte reálné ˇ císlo!"); scanf("%f",&x); printf("Zadali jste %d a %f", a, f);
} OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Program, který umí cˇ íst a psát # include<stdio.h> main() { int a; float x; printf("Zadejte celé ˇ císlo!"); scanf("%d",&a); printf("Zadejte reálné ˇ císlo!"); scanf("%f",&x); printf("Zadali jste %d a %f", a, f); printf("Zadejte 1 celé a 1 reálné ˇ císlo!"); scanf("%d%f",&a,&x); } printf("Zadali jste %d a %5.3f", a, f); OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Prográmek pro výpoˇcet obsahu˚ a obvodu˚ # include<stdio.h> # include<math.h> main() { float a,b,o_c,S, o; printf("Zadejte stranu ctverce"); scanf("%f",&a); o_c = 4∗ a; S=pow(a,2); printf("Ctverec:o=%5.3f, S=%6.4f",o_c,S); printf("Zadejte strany obdelnika"); scanf("%f%f",&a,&b); o = (a+b) ∗ 2 ; printf("Obdelnik o=%6.4f,S=%5.3f" o,a∗b); } OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Úloha trojúhelník
Jsou dána 3 cˇ ísla, která mají význam: délek 3 stran trojúhelníka (sss) délek 2 stran a velikosti úhlu jimi sevˇreného (sus) délky strany a velikosti pˇrilehlých 2 úhlu˚ (usu) Napište program, ve kterém budou urˇceny zbývající strany a ˇ kružnice opsané a polomer ˇ úhly, výšky, obvod, obsah, polomer kružnice vepsané.
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Potˇrebujeme vzoreˇcky Vzorce pro obecný trojúhelník obvod o =a+b+c a obsah S = a·v 2 1 q S = 2 ab sin γ S=
o o 2(2
− a)( o2 − b)( o2 − c)
r = abc 4S a r = 2 sin α ρ = 2S o a2 = b2 + c 2 − 2bc cos α a b c sin α = sin β = sin γ = 2r
ˇ kružnice opsané polomer ˇ kružnice vepsané polomer ˇ kosinová veta ˇ sinová veta
Pˇrevod stupnˇ u˚ na radiány a naopak:(π radiánu˚ = 180 stupnˇ u) ˚ a a stupnˇ u˚ = 180 · π radiánu˚ b radiánu˚ = πx · 180 stupnˇ u. ˚ OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Etapy ˇrešení: 1
Program pracuje pouze s údaji, ze kterých lze trojúhelník sestrojit.
2
Program provádí kontrolu vstupních dat.
3
ˇ úlohy. Program nabízí výber
4
ˇ úlohy. Program opakovaneˇ nabízí výber
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Etapy ˇrešení: 1
Program pracuje pouze s údaji, ze kterých lze trojúhelník sestrojit. Postup ˇrešení: ˇ Deklarujeme promenné (a,b,c,alpha, beta, gamma, v_a,v_b,v_c, S,o,r, rho) Zadáme vstupní data Vypoˇcteme Vytiskneme výsledky
2
Program provádí kontrolu vstupních dat.
3
ˇ úlohy. Program nabízí výber
4
ˇ úlohy. Program opakovaneˇ nabízí výber
OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Etapa 1: Výpoˇcet podle vzorcu˚ sss 1 2
pˇreˇcteme hodnoty a,b,c ˇ vyjádˇríme úhly z kosinové vety 2 2 a + c 2 − b2 b + c 2 − a2 β = arccos α = arccos 2bc 2ac 2 a + b2 − c 2 γ = arccos 2ab
3
vypoˇq cteme obvod o = a + b + c a obsah S = o2 ( o2 − a)( o2 − b)( o2 − c)
4
2S 2S vypoˇcteme výšky va = 2S a , vb = b , vc = c vypoˇcteme polomeˇ ry kružnic : opsané: r = ρ = 2S o
5
OM
ZAPG
abc 4S
a vepsané:
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
sus 1 2
3
pˇreˇcteme hodnoty a,b,gamma ˇ vyjádˇríme stranu c a úhly α, β. z kosinové vety p c = a2 + b2 − 2ab cos γ 2 2 b + c 2 − a2 a + c 2 − b2 α = arccos β = arccos 2bc 2ac Ostatní vypoˇcteme stejneˇ jako pro úlohu sss.
usu 1 2 3
pˇreˇcteme hodnoty a,beta,gamma dopoˇcítáme úhel α = π − β − γ ˇ vyjádˇríme strany b a c. ze sinové vety b =a·
4
sin β sin α
c =a·
sin γ sin α
Ostatní vypoˇcteme stejneˇ jako pro úlohu sss. OM
ZAPG
Úvodní informace Algoritmus a algoritmizace Od algoritmu k programu Jazyk C
Dále ...
Na pˇríští pˇrednášce: Logické výrazy ˇ Vetvení (pˇríkazy if - else, switch) Cykly
OM
ZAPG