9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Podobné dokumenty
6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Operační systémy. Cvičení 4: Programování v C pod Unixem

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Úvod do programování. Lekce 5

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Př. další použití pointerů

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Struktury a dynamické proměnné

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

Funkce, intuitivní chápání složitosti

ZÁPOČTOVÝ TEST. Zpracoval Vilém Závodný, #include "stdafx.h" #include "stdio.h"

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

- jak udělat konstantu long int: L long velka = 78L;

IUJCE 07/08 Přednáška č. 1

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Základy C++ I. Jan Hnilica Počítačové modelování 18

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Algoritmizace a programování

Více o konstruktorech a destruktorech

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Programování v C++ 1, 1. cvičení

Algoritmizace a programování

Řídící struktury, if, while, switch

Algoritmizace a programování

Jazyk C++, některá rozšíření oproti C

IUJCE 07/08 Přednáška č. 6

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Pointery II. Jan Hnilica Počítačové modelování 17

Algoritmizace a programování

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Rozklad problému na podproblémy, rekurze

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Základy programování (IZP)

Dílčí příklady použití jazykových konstrukcí v projektu. Jazyk C Příklady. Pravidla překladu v gmake. Zadání

Mělká a hluboká kopie

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

2 Datové typy v jazyce C

Algoritmizace a programování

Zápis programu v jazyce C#

Basic256 - úvod do programování Příklady. ing. petr polách

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Základy programování (IZP)

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Základy programování (IZP)

Operační systémy. Cvičení 3: Programování v C pod Unixem

Programování v C++, 2. cvičení

Větvení a cykly. Úvod do programování 1 Tomáš Kühr

3 KTE / ZPE Informační technologie

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

Algoritmizace a programování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Rozklad problému na podproblémy, rekurze

dostat zdroják Petr Zemek Fakulta informačních technologií VUT v Brně izemek

Funkce, procedury, složitost

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Rozsáhlé programy = projekty

Iterační výpočty Projekt č. 2

Základy programování (IZP)

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Řídící struktury, if, while, switch

Lekce 19 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Struktura programu v době běhu

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Základy programování (IZP)

Programování v C++ 1, 14. cvičení

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

C# konzole Podíl dvou čísel, podmínka IF

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

10 Práce s řetězci - pokračování

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Programovanie v jazyku C - to chce dynamiku

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Příkazy if, while, do-while, for, switch

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Programování v jazyce C pro chemiky (C2160) 10. Grafická knihovna g2

Rozklad na prvočinitele. 3. prosince 2010

KTE / ZPE Informační technologie

Programovanie v jazyku C - ti to zratam...

Abstraktní třídy, polymorfní struktury

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Základy programování (IZP)

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

1. Téma 03 - Rozhodování

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Úvod do programovacích jazyků (Java)

Lineární spojový seznam (úvod do dynamických datových struktur)

Základní stavební prvky algoritmu

8 Třídy, objekty, metody, předávání argumentů metod

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 23, 2016

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Transkript:

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek 1/24

Editační prostření Kód programu lze editovat v jakémkoli textovém editoru. 2/24

Editační prostření Kód programu lze editovat v jakémkoli textovém editoru. Postačí poznámkový blok. 3/24

Editační prostření Kód programu lze editovat v jakémkoli textovém editoru. Postačí poznámkový blok. Na FIT je používaný editor Gedit. 4/24

Editační prostření Kód programu lze editovat v jakémkoli textovém editoru. Postačí poznámkový blok. Na FIT je používaný editor Gedit. Soubory s kódem programu se ukládají s koncovkou.c 5/24

Kompilace programu Nejprve je třeba nainstalovat kompilátor gcc. http://tdm-gcc.tdragon.net/download - dawnload kompilátoru gcc 6/24

Kompilace programu Nejprve je třeba nainstalovat kompilátor gcc. http://tdm-gcc.tdragon.net/download - dawnload kompilátoru gcc Vytvořený zdrojový kód (soubor) musíme před spuštěním zkompilovat! 7/24

Kompilace programu Nejprve je třeba nainstalovat kompilátor gcc. http://tdm-gcc.tdragon.net/download - dawnload kompilátoru gcc Vytvořený zdrojový kód (soubor) musíme před spuštěním zkompilovat! Kompilace: otevřeme příkazový řádek ve složce, kde máme zdrojový soubor 8/24

Kompilace programu Nejprve je třeba nainstalovat kompilátor gcc. http://tdm-gcc.tdragon.net/download - dawnload kompilátoru gcc Vytvořený zdrojový kód (soubor) musíme před spuštěním zkompilovat! Kompilace: otevřeme příkazový řádek ve složce, kde máme zdrojový soubor spustíme příkaz: gcc jménosouboru.c 9/24

Kompilace programu Nejprve je třeba nainstalovat kompilátor gcc. http://tdm-gcc.tdragon.net/download - dawnload kompilátoru gcc Vytvořený zdrojový kód (soubor) musíme před spuštěním zkompilovat! Kompilace: otevřeme příkazový řádek ve složce, kde máme zdrojový soubor spustíme příkaz: gcc jménosouboru.c vygenerovaný soubor se vždy jmenuje a.exe (windows) nebo a.out (linux) 10/24

Kompilace programu Nejprve je třeba nainstalovat kompilátor gcc. http://tdm-gcc.tdragon.net/download - dawnload kompilátoru gcc Vytvořený zdrojový kód (soubor) musíme před spuštěním zkompilovat! Kompilace: otevřeme příkazový řádek ve složce, kde máme zdrojový soubor spustíme příkaz: gcc jménosouboru.c vygenerovaný soubor se vždy jmenuje a.exe (windows) nebo a.out (linux) Příkaz lze také spustit s parametry, např.: gcc -Wall -pedantic jménosouboru.c 11/24

Kompilace programu Nejprve je třeba nainstalovat kompilátor gcc. http://tdm-gcc.tdragon.net/download - dawnload kompilátoru gcc Vytvořený zdrojový kód (soubor) musíme před spuštěním zkompilovat! Kompilace: otevřeme příkazový řádek ve složce, kde máme zdrojový soubor spustíme příkaz: gcc jménosouboru.c vygenerovaný soubor se vždy jmenuje a.exe (windows) nebo a.out (linux) Příkaz lze také spustit s parametry, např.: gcc -Wall -pedantic jménosouboru.c Tento způsob kompilace vypíše, kromě chyb, také varování (neinicializovaná proměnná, podmínka, která je vždy true, přiřazení proměnné jiného datového typu do proměnné s jiným datovým typem.). 12/24

Spuštění programu Soubor s programem se spouští v příkazovém řádku otevřeného v příslušné složce příkazem: jménosouboru.exe (windows)./jmenosouboru.out (linux) 13/24

Funkce samostatná část programu, ve které se zpracovávají data při deklaraci funkce definujeme datový typ výstupu, název funkce a typy a názvy parametrů po exekuci funkce se běh (run) aplikace vrací na místo, ze kterého byla funkce volána (call) funkce může volat další funkci nebo sama sebe (rekurze) Příklady: Funkce maximum : int maximum (int e, int f) if (e>f) return e; else return f; int main (void) int a, b=1, c=2; a=maximum(b, c); 14/24

Rekurze (výpis mocnin prvních deseti přirozených čísel) void mocniny (int C) C++; printf("%d, ",C*C); if (C==10) return; mocniny(c); int main (void) mocniny(0); return 0; 15/24

Rekurze (výpočet faktoriálu): int faktorial (int e) if (e<2) return 1; return e * faktorial(e-1); int main (void) int a; a=faktorial(a); // test: a>=0 Princip: n! = n*(n-1)! Pro a=4 bude level 1: return faktorial(3)*4; level 2: return faktorial(2)*3; level 3: return faktorial(1)*2; level 4: return 1; Výsledek: 4*3*2*1 16/24

Příkaz return z procedury vrací hodnotu vrací jednu konstantní hodnotu nebo hodnotu jedné proměnné Pokud potřebujeme z procedury vracet více hodnot, pak máme dvě možnosti v proceduře měníme hodnoty proměnných typu pointer tím změna hodnoty těchto proměnných (hodnot, na které proměnné typu pointer ukazují) v proceduře bude také v mainu v returnu použijete proměnnou typu struct 17/24

#include <stdio.h> #include <stdlib.h> typedef struct BALIKDAT int Hodnota1; int Hodnota2; Balikdat; Balikdat MojeFunkce (int Vstup) Balikdat Data; Data.Hodnota1=3*Vstup; Data.Hodnota2=3+Vstup; return Data; int main (void) int C=10; Balikdat NovaData; NovaData=MojeFunkce(C); printf("hodnnota1 je %d, Hodnota2 je %d.\n",novadata.hodnota1, NovaData.Hodnota2); return 0; 18/24

Ukázka vstupu dat Vstup do statické proměnné: if (scanf("%d",&i)!= 1) printf("nespravny vstup\n"); return 1; 19/24

Vstup do statické proměnné, vstup se opakuje, dokud není zadaná správná hodnota printf("zadej vstupni hodnotu:"); while(scanf( %d, &C)!=1) printf("nespravny vstup zadej znovu!\n"); fflush(stdin); //vyčistí vstupní proud znaky z klávesnice, které jsou v bufferu 20/24

Vstup do statického pole: #include <stdio.h> int main (void) int pole[10], i; for (i = 0; i < 10; i++) if (scanf("%d", pole + i)!= 1) printf("nespravny vstup\n"); return 1; for (i = 0; i < 10; i++) printf("%d, ", pole[i]); return 0; // pole + i <=> &(pole[i]) 21/24

Vstup do dynamického pole: (konec zadávání: Enter za posledním číslem, Ctrl+Z) #include <stdio.h> #include <stdlib.h> int main (void) int i=0, j=10; int * Pole=(int*)malloc(j*sizeof(int)); //ukazatel na integer lze take : int * Pole; Pole=(int*)malloc(j*sizeof(int)); printf("zadej radu cisel, konec zadavani je CTRL+Z: "); while (!feof(stdin)) if ((scanf("%d", & (Pole[i++]))!= 1) &&!feof(stdin)) //lze take: Pole + i printf("nespravny vstup\n"); return 1; if (i==j) j*=2; Pole = realloc(pole, j*sizeof(int)); for (j = 0; j < i-1; j++) printf("%d, ", Pole[j]); return 0; 22/24

Vstup do dynamického pole charů: #include <stdio.h> #include <stdlib.h> int main (void) int i=0, j=10; char * Pole=(char*)malloc(j*sizeof(char)); printf("zadej radu znaku: "); while (Pole[i-1]!='\n') scanf("%c", & (Pole[i++])); if (i==10) j*=2; Pole = realloc(pole, j*sizeof(char)); for (j = 0; j < i-1; j++) printf("%c, ", Pole[j]); return 0; //konce zadavani je Enter 23/24

Vstup z datového souboru: Program: #include <stdio.h> int main (void) int a, b; printf("zadej dve cisla oddelena mezerou: "); if (scanf("%d %d",&a,&b)!=2) printf("chyba na vstupu!\n"); return 1; printf("soucet cisel je %d.\n",a+b); return 0; Datový soubor: Konsole: 24/24