1. Úvod Petr Kropík
[email protected] 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
soubory.h
nazev.c
Preprocesor (#include)
soubor.lis (přípona bývá různá) popis chyb může být v okně prostředí, kde programuji
Překladač (compiler) 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 2 Analýza: S= πr Sestavení algoritmu: Slovní popis: Je poloměr r >0? ANO S= pi*r*r Vypiš: obsah S Konec
NE Vypiš:Poloměr r musí být kladný
Vývojový diagram: Z r>0
-
+ S=π*r*r Piš: S K
Piš: r musí být kladný
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); // r2 lze také pow(r,2) return 0; } 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); } return 0;
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) { return 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)); return 0; }
Funkce: např. fakt() Viz CodeBlocks