Základy algoritmizace a programování Přednáška 1 Olga Majlingová Katedra matematiky, ČVUT v Praze 19. září 2011
Obsah Úvodní informace 1 Úvodní informace 2 3 4
Doporučená literatura web: http://marian.fsik.cvut.cz/zapg Resumé přednášek, informace k předmětu, aktuální informace... Herout, P.:Učebnice jazyka C Kernighan, B.W., Ritchie, D.M. Programovací jazyk C web: http://olga.majling.eu tyto prezentace, příklady a jiné
Cíle předmětu být schopen číst a psát jednoduché programy v C rozumět základním konstrukcím jayzka C a umět je použít
Klasifikovaný zápočet Podmínky udělení zápočtu: Bodované odevzdané příklady : maximální zisk Z bodů, student získal Q bodů. 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
Organizace předmětu 1. 3. Základní konstrukce C 4. Numerické algoritmy 5. 6. Zápočtové příklady.
Algoritmus Úvodní informace Úloha Algoritmus chápeme jako přesný postup, kterým lze vyřešit daný typ úlohy.
Algoritmus Úvodní informace Vstupní data Úloha Výsledek Algoritmus chápeme jako přesný postup, kterým lze vyřešit daný typ úlohy.
Algoritmus Úvodní informace Vstupní data Úloha Výsledek Algoritmus chápeme jako přesný postup, kterým lze vyřešit daný typ úlohy. jednoznačnost
Algoritmus Úvodní informace Vstupní data Úloha Výsledek Algoritmus chápeme jako přesný postup, kterým lze vyřešit daný typ úlohy. jednoznačnost konečnost
Algoritmizace a programování Přípravu programu obvykle dělíme na dvě etapy: Algoritmizace V průběhu analýzy úlohy nebo po jejím ukončení sestavíme algoritmus řešení, který můžeme znázornit např. graficky, např. ve formě vývojového diagramu. Programování Podle zápisu algoritmu sestavíme program v programovacím jazyku.
algoritmus
algoritmus editor
algoritmus editor překladač
algoritmus editor překladač gramatika
algoritmus editor překladač linker gramatika
algoritmus editor překladač linker gramatika funkce
algoritmus editor překladač linker OS gramatika funkce
algoritmus myšlenka editor překladač linker OS gramatika funkce
Úvodní informace Zápis programu: prostý textový soubor (ASCII)
Úvodní informace Zápis programu: prostý textový soubor (ASCII) mezery, tabulátory,... překladač ignoruje mezery a tabulátory slouží ke zvýšení čitelnosti nešetřit mezerami!
Úvodní informace Zápis programu: prostý textový soubor (ASCII) mezery, tabulátory,... překladač ignoruje mezery a tabulátory slouží ke zvýšení čitelnosti nešetřit mezerami! příkazy se ukončují středníkem
Úvodní informace Zápis programu: prostý textový soubor (ASCII) mezery, tabulátory,... překladač ignoruje mezery a tabulátory slouží ke zvýšení čitelnosti nešetřit mezerami! příkazy se ukončují středníkem IDENTIFIKÁTORY (jména) : pouze aa..zz, _, číslice 0..9 nesmí začínat číslicí
Úvodní informace Zápis programu: prostý textový soubor (ASCII) mezery, tabulátory,... překladač ignoruje mezery a tabulátory slouží ke zvýšení čitelnosti nešetřit mezerami! příkazy se ukončují středníkem IDENTIFIKÁTORY (jména) : pouze aa..zz, _, číslice 0..9 nesmí začínat číslicí rozlišují se velká a malá písmena!!! (id, Id, ID jsou 3 různé identifikátory)
Úvodní informace Zápis programu: prostý textový soubor (ASCII) mezery, tabulátory,... překladač ignoruje mezery a tabulátory slouží ke zvýšení čitelnosti nešetřit mezerami! příkazy se ukončují středníkem IDENTIFIKÁTORY (jména) : pouze aa..zz, _, číslice 0..9 nesmí začínat číslicí rozlišují se velká a malá písmena!!! (id, Id, ID jsou 3 různé identifikátory) všechna klíčová slova a názvy funkcí ze standardní knihovny jsou malými písmeny
Nejjednodušší program main() {}
Nejjednodušší program main() {} o trochu větší: int main() { return 0 ;}
Program, který umí psát #include<stdio.h> main() { printf("hello world!"); }
Program, který umí psát #include<stdio.h> main() { printf("hello world!"); } knihovna funkcí
Program, který umí psát #include<stdio.h> knihovna funkcí main() hlavička funkce main { začátek funkce main printf("hello world!"); } konec funkce main
Program, který umí psát #include<stdio.h> knihovna funkcí main() hlavička funkce main { začátek funkce main printf("hello world!"); tisk } konec funkce main
Program, který umí psát #include<stdio.h> knihovna funkcí main() hlavička funkce main { začátek funkce main printf("hello world!"); tisk } konec funkce main #include<stdio.h> main() { fprintf(stdout, "Hello world!"); }
Program, který umí psát #include<stdio.h> knihovna funkcí main() hlavička funkce main { začátek funkce main printf("hello world!"); tisk } konec funkce main #include<stdio.h> main() { fprintf(stdout, "Hello world!"); } tisk
Data: konstanty Konstanty: hodnoty, které se v průběhu výpočtu nemění. Např. čísla... 1, 1.2, 2.718281828 nebo pojmenované konstanty (π)
Data: konstanty Konstanty: hodnoty, které se v průběhu výpočtu nemění. Např. čísla... 1, 1.2, 2.718281828 nebo pojmenované konstanty (π) v programu : pojmenované konstanty: na začátku: #define jméno hodnota #define mojepi 3.14159256
Data: konstanty Konstanty: hodnoty, které se v průběhu výpočtu nemění. Např. čísla... 1, 1.2, 2.718281828 nebo pojmenované konstanty (π) v programu : pojmenované konstanty: na začátku: #define jméno hodnota #define mojepi 3.14159256 čísla : celá (BEZ desetinné části): 10, -21,... reálná (s desetinnou tečkou): 3.12, 2E-1, -0.45,...
Data: proměnné Proměnné:pamět ová místa, označená jménem proměnné (identifikátorem)
Data: proměnné Proměnné:pamět ová místa, označená jménem proměnné (identifikátorem) jednoduché: kam se vejde jedna hodnota. v:
Data: proměnné Proměnné:pamět ová místa, označená jménem proměnné (identifikátorem) jednoduché: kam se vejde jedna hodnota. v: složené: kam se vejde několik hodnot. p:
Data: proměnné Proměnné:pamět ová místa, označená jménem proměnné (identifikátorem) jednoduché: kam se vejde jedna hodnota. v: složené: kam se vejde několik hodnot. p: V programu proměnné musíme deklarovat: TYP jméno1, jméno2; TYP proměnné určuje množinu přípustných hodnot a operací. typy jednoduchých proměnných (např).: int, float, double, char int a, b; float c;
Data: proměnné Proměnné:pamět ová místa, označená jménem proměnné (identifikátorem) jednoduché: kam se vejde jedna hodnota. v: složené: kam se vejde několik hodnot. p: V programu proměnné musíme deklarovat: TYP jméno1, jméno2; TYP proměnné určuje množinu přípustných hodnot a operací. typy jednoduchých proměnných (např).: int, float, double, char int a, b; float c; složené: (např. pole): TYP jméno [počet] int a[2]; float c [10];
Zápis aritmetických výrazů Aritmetické výrazy: sčítání + odčítání - násobení dělení / POZOR: celočíselné nebo reálné zbytek po dělení % POZOR: pouze pro celočíselné umocňování... NENÍ! ZLKY! a/b*c nebo a/(b*c)! a=5*3-12%4; b = 1/3*3; c=1/3*3;
Použtí matematických funkcí ve výrazech MATEMATICKÁ KNIHOVNA: #include<math.h> mocnina: odmocnina: goniometrické: inverzní: logaritmy: e x : 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);
Přiřazení Úvodní informace PRĚNNÁ = VÝRAZ ; Do proměnné se uloží hodnota výrazu. Předcházející hodnota se novou hodnotou přepíš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 ; a = b ; c = a ; b = c ; c = a ;
Načítání a výpis hodnot ČTENÍ: 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 ČTENÍ: kam: & jméno VÝPIS: kam: jméno
Program, který umí číst a psát # include<stdio.h> main() { }
Program, který umí číst a psát # include<stdio.h> main() { int a; float x; }
Program, který umí číst a psát # include<stdio.h> main() { int a; float x; printf("zadejte celé číslo!"); scanf("%d",&a); }
Program, který umí číst a psát # include<stdio.h> main() { int a; float x; printf("zadejte celé číslo!"); scanf("%d",&a); printf("zadejte reálné číslo!"); scanf("%f",&x); }
Program, který umí číst a psát # include<stdio.h> main() { int a; float x; printf("zadejte celé číslo!"); scanf("%d",&a); printf("zadejte reálné číslo!"); scanf("%f",&x); printf("zadali jste %d a %f", a, f); }
Program, který umí číst a psát # include<stdio.h> main() { int a; float x; printf("zadejte celé číslo!"); scanf("%d",&a); printf("zadejte reálné číslo!"); scanf("%f",&x); printf("zadali jste %d a %f", a, f); printf("zadejte 1 celé a 1 reálné číslo!"); scanf("%d%f",&a,&x); printf("zadali jste %d a %5.3f", a, f); }
Prográmek pro výpočet obsahů a obvodů # 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); }
Úloha trojúhelník Jsou dána 3 čísla, která mají význam: délek 3 stran trojúhelníka (sss) délek 2 stran a velikosti úhlu jimi sevřeného (sus) délky strany a velikosti přilehlých 2 úhlů (usu) Napište program, ve kterém budou určeny zbývající strany a úhly, výšky, obvod, obsah, poloměr kružnice opsané a poloměr kružnice vepsané.
Potřebujeme vzorečky Vzorce pro obecný trojúhelník obvod o = a + b + c obsah S = a va 2 S = 1 2ab sin γ o S = 2 ( o 2 a)( o 2 b)( o 2 c) poloměr kružnice opsané r = abc 4S r = a 2 sin α poloměr kružnice vepsané ρ = 2S o kosinová věta a 2 = b 2 + c 2 2bc cos α a sinová věta sin α = b sin β = c sin γ = 2r Převod stupňů na radiány a naopak:(π radiánů = 180 stupňů) a stupňů = a 180 π radiánů b radiánů = x π 180 stupňů.
Etapy řešení: Úvodní informace 1 Program pracuje pouze s údaji, ze kterých lze trojúhelník sestrojit. 2 Program provádí kontrolu vstupních dat. 3 Program nabízí výběr úlohy. 4 Program opakovaně nabízí výběr úlohy.
Etapy řešení: Úvodní informace 1 Program pracuje pouze s údaji, ze kterých lze trojúhelník sestrojit. Postup řešení: Deklarujeme proměnné (a,b,c,alpha, beta, gamma, v_a,v_b,v_c, S,o,r, rho) Zadáme vstupní data Vypočteme Vytiskneme výsledky 2 Program provádí kontrolu vstupních dat. 3 Program nabízí výběr úlohy. 4 Program opakovaně nabízí výběr úlohy.
Etapa 1: Výpočet podle vzorců sss 1 přečteme hodnoty a,b,c 2 z kosinové věty vyjádříme úhly ( b 2 + c 2 a 2 ) ( a 2 + c 2 b 2 ) α = arccos β = arccos 2bc 2ac ( a 2 + b 2 c 2 ) γ = arccos 2ab 3 vypočteme obvod o = a + b + c a obsah o S = 2 ( o 2 a)( o 2 b)( o 2 c) 4 vypočteme výšky v a = 2S a, v b = 2S b, v c = 2S c 5 vypočteme polomě ry kružnic : opsané: r = abc 4S a vepsané: ρ = 2S o
sus 1 přečteme hodnoty a,b,gamma 2 z kosinové věty vyjádříme stranu c a úhly α, β. usu c = a 2 + b 2 2ab cos γ ( b 2 + c 2 a 2 ) ( a 2 + c 2 b 2 ) α = arccos β = arccos 2bc 2ac 3 Ostatní vypočteme stejně jako pro úlohu sss. 1 přečteme hodnoty a,beta,gamma 2 dopočítáme úhel α = π β γ 3 ze sinové věty vyjádříme strany b a c. b = a sin β sin α c = a sin γ sin α 4 Ostatní vypočteme stejně jako pro úlohu sss.
Dále... Úvodní informace Na příští přednášce: Logické výrazy Větvení (příkazy if - else, switch) Cykly