Úvod Petr Kropík pkropik@kte.zcu.cz 1. viz: http://home.zcu.cz/~pkropik/zpe Základy programování pro elektrotechniku (KTE/ZPE) http://portal.zcu.cz - potřebné informace o předmětu > Portál ZČU > Courseware > Předměty po fakultách > Fakulta elektrotechnická > Katedra teoretické elektrotechniky > ZPE http://home.zcu.cz/~pkropik/zpe http://home.zcu.cz/~basl/ WinSCP (eryx.zcu.cz, jméno a heslo jako do Orion) přístup na H http://moodle.zcu.cz - testy Pavel Herout: Učebnice jazyka C Další viz stránka předmětu na Courseware. Kurz jazyka C na webu: http://www.sallyx.org/sally/c/ http://fsinet.fsid.cvut.cz/cz/u201/skrcpp.html
Jazyk C jazyk nízké úrovně lze v něm programovat věci, které se programují v assembleru (většinou) => pracuje pouze se základními standardními datovými typy, složitější se dají doprogramovat díky jednoduchosti jazyka jej lze "snadno" implementovat na většinu platforem C je imperativní jazyk (jsou zde deklarativní prvky) Z historie: první překladač K&R verze autorů Brian W. Kerninghan a Dennis M. Ritchie (1978) novější verze normy jazyka C tzv. ANSI C rok_vydání programy v C mají slušnou přenositelnost při dodržení využití základní a standardních funkcí Jak pracuje překladač: Editor nazev.c soubory.h Preprocesor (#include) Překladač (compiler) soubor.lis (přípona bývá různá) popis chyb může být v okně prostředí, kde programuji Knihovny.lib Linker nazev.o Spustitelný program (.exe) Ladění programu Debugger Spuštění programu
Základy algoritmizace Algoritmizace http://www.algoritmy.net/ postup při tvorbě programu, kterým lze prostřednictvím algoritmu řešit určitý problém. etapy: Formulace problému (požadavky, výchozí hodnoty, požadované výsledky, přesnost řešení) Analýza úlohy (je úloha řešitelná, má úloha více řešení?) Vytvoření algoritmu Sestavení programu (zdrojový text v konkrétním programovacím jazyce) Odladění programu (syntaktické chyby, logické chyby) Algoritmus přesný návod k vykonání dané činnosti, vyřešení jisté úlohy. sekvence jednoduchých kroků postup, který je: konečný (finitní) po určitém počtu kroků skončí (počet kroků může být libovolně velký (podle rozsahu a hodnot vstupních údajů). obecný (hromadný, univerzální) nemá řešit pouze jediný případ, ale skupinu obdobných problémů. jednoznačný (deterministický, podmíněný) v každém kroku je zcela jasně řečeno, co bude následovat. opakovatelný protože je v každém kroku udáno, co bude následovat, je možné opakovat postup a výsledek bude vždy stejný. elementární skládá se z konečného počtu jednoduchých (elementárních) kroků resultativní má alespoň jeden výstup, veličinu, která je v požadovaném vztahu k zadaným vstupům, a tím tvoří odpověď na problém, který algoritmus řeší správný (korektní) pro všechna přístupná data vede postup ke správnému cíli. Vyjádřením algoritmu slovní popis vývojový diagram grafické znázornění
Např: Algoritmus pro výpočet obsahu kruhu Formulace problému: vstupní údaj: poloměr r, výstupní údaj: obsah kruhu S Analýza: S= πr 2 Sestavení algoritmu: Slovní popis: Je poloměr r >0? ANO NE S= pi*r*r Vypiš:Poloměr r musí být kladný Vypiš: obsah S Konec Vývojový diagram: Z S r > 0 + - = π * r * r Piš: r musí být kladný Piš: S K
Kód v jazyce C: #include <stdio.h> #include <stdlib.h> #include <math.h> int main() double r; printf("zadej polomer kruhu:\n"); scanf("%lf",&r); if(r > 0.0) printf("\nobsah kruhu je: %f\n", M_PI * r * r); // r 2 lze také pow(r,2) else printf("\npolomer kruhu musí byt kladny.\n"); return -1; Proměnné - deklarujeme předem - C je case sensitive - celá čísla int další příště - desetinná double další příště // komentář /* komentář */ scanf()- formátovaný vstup printf() - formátovaný výstup %d - celé číslo se znaménkem v desítkové soustavě, celočíselný dekadický formát výpisu %x - číslo v šestnáctkové soustavě, písmena abcdef se budou tisknout jako malá %X - číslo v šestnáctkové soustavě, písmena ABCDEF se budou tisknout jako velká
%f - racionální číslo bez exponentu např. printf( %6.3f,12.456) reálné čislo bude vytištěno minimálně na 6 znaku, z nich 3 znaky jsou za desetinnou tečkou, jeden je desetinná tečka, tj. na celky zbývají nejméně 2 znaky %c - jeden znak \n - nová řádka \t - tabelátor další o vstupu a výstupu příště ASCII tabulka znaková sada Program: ASCII int main() int i; printf("ascii tabulka:\n"); for (i=0; i<255; i++) if (((i)>= 32 && (i)< 255)) printf("%3d %3X %c\t", i, i, i); else printf("%3d %3X -\t", i, i); Program: Faktoriál V matematice je faktoriál čísla n (značeno pomocí vykřičníku: n!) číslo, rovné součinu všech kladných celých čísel menších nebo rovných n, pokud je n kladné a 1 pokud n = 0. Například: 0! = 1 1! = 1 2! = 2 1 = 2 3! = 3 2 1 = 6 4! = 4 3 2 1 = 24 5! = 5 4 3 2 1 = 120
#include <stdio.h> #include <stdlib.h> int fakt(int cislo) if (cislo < 0) int i, vysledek = 1; for (i = cislo; i > 1; i--) vysledek *= i; // vysledek = vysledek * i; return vysledek; int main() printf("\nfaktorial cisla %d je %d\n", 7, fakt(7)); Funkce: např. fakt() Viz CodeBlocks