Úvod do jazyka c

45
Úvod do jazyka C

Upload: winda

Post on 14-Jan-2016

59 views

Category:

Documents


3 download

DESCRIPTION

Úvod do jazyka C. Algoritmizácia úloh. Štruktúry. Štruktúra je zápis viacerých položiek v jednom logickom prvku. Využíva sa najmä pre zápis rozmanitých druhov údajov. Štruktúry - základné pojmy. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Úvod do jazyka C

Úvod do jazyka C

Page 2: Úvod do jazyka C

Štruktúra je zápis viacerých položiek v jednom logickom prvku.

Využíva sa najmä pre zápis rozmanitých druhov údajov

Štruktúry

Page 3: Úvod do jazyka C

3

Štruktúry - základné pojmy

Štruktúra je súhrn jednej alebo viacerých premenných aj rôznych typov (vrátane ďalších štruktúr), ktoré sú združené pod jedným názvom.

Umožňuje pracovať so súvisiacimi dátami ako s celkom. Prístup k položkám štruktúry sa zadáva názvom štruktúry a názvom položky, oddelených bodkou.

Page 4: Úvod do jazyka C

4

Základná definícia štruktúry

Obecná definícia

struct {

položky;

} meno;

Existuje päť spôsobov definície štruktúry.

Page 5: Úvod do jazyka C

5

Definícia štruktúry 3

Oddelenie definície štruktúry od definícií premenných

struct udaje {

int vykon_motora;

int maximalna_rychlost;

float spotreba;

};

struct udaje Octavia;

struct udaje Fabia, Roomster;

Definícia štruktúry

Definícia premenných

Page 6: Úvod do jazyka C

6

Definícia štruktúry 1

Triviálny spôsob.

Vytvorená štruktúra nie je pomenovaná, z toho vyplýva obmedzená možnosť použitia premenných

struct {

int vykon_motora;

int maximalna_rychlost;

float spotreba;

} Octavia, Fabia, Roomster;

Page 7: Úvod do jazyka C

7

Definícia štruktúry 2

Modifikácia základného spôsobu.

Štruktúra je pomenovaná a je ju možné použiť v programe.

struct udaje {

int vykon_motora;

int maximalna_rychlost;

float spotreba;

} Octavia, Fabia, Roomster;

Page 8: Úvod do jazyka C

8

Definícia štruktúry 4

Definícia pomocou príkazu typedef.

Štruktúra pomenovaná nie je, ale nový typ áno.

typedef struct {

int vykon_motora;

int maximalna_rychlost;

float spotreba;

} UDAJE;

UDAJE Octavia, Fabia, Roomster;

Definícia typu štruktúry

Definícia premenných

Page 9: Úvod do jazyka C

9

Definícia štruktúry 5

Pomenovanie štruktúry aj nového typu struktúry.

typedef struct udaje {

int vykon_motora;

int maximalna_rychlost;

float spotreba;

} UDAJE;

UDAJE Octavia, Fabia, Roomster;

Definícia premenných

Definícia typu štruktúry

Page 10: Úvod do jazyka C

10

Odporúčania

Prax ukazuje, že výhodnejšie je používať dva prvé dva typy. Kľúčové slovo struct používame len raz a ďalej sa pracuje už s novým typom.

Štruktúry sa často používajú v kombinácii s poľom. Väčšinou sa používa pole štruktúr.

Na rozdiel od poľa, je možné pracovať s celou štruktúrou naraz, napríklad skopírovať obsah jednej štruktúry do druhej len jedným priraďovacím príkazom.

Page 11: Úvod do jazyka C

11

Prístup k prvkom štruktúry

K jednotlivým prvkom štruktúry sa pristupuje pomocou bodkovej notácie.

Príklad:

Octavia.rychlost = 188;

Fabia.rychlost = 168;

Roomster = Octavia;

Práca s celou štruktúrou

Prístup k poľu štruktúr

Page 12: Úvod do jazyka C

12

#include <stdio.h>

typedef struct { int vykon, rychlost; float spotreba;} UDAJE;

Prvky štruktúry - príklad

Zadanie

Vytvoriť štruktúru, pomocou ktorej bude možné evidovať údaje o type automobilu, jeho výkone, maximálnej rýchlosti a spotrebe paliva

Definovanie typu

Page 13: Úvod do jazyka C

13

Prvky štruktúrypríklad

typedef struct { int vykon, rychlost; float spotreba; } UDAJE;

int main() { UDAJE Octavia,Fabia,Roomster; Octavia.rychlost = 188; Octavia.spotreba = 5.5; Fabia.rychlost = 168; Fabia.spotreba = 6.1; Roomster = Octavia; printf(" Octavia ma rychlost: %d a spotrebu: %.1f \n", Octavia.rychlost, Octavia.spotreba); printf(" Fabia ma rychlost: %d a spotrebu: %.1f \n", Fabia.rychlost, Fabia.spotreba); printf(" Roomster ma rychlost: %d a spotrebu: %.1f \n", Roomster.rychlost, Roomster.spotreba); system("PAUSE"); return 0;}

Page 14: Úvod do jazyka C

14

Štruktúra v inej štruktúre

V praktických príkladoch je častý prípad, keď potrebujeme mať ako prvok štruktúry inú štruktúru.

Napríklad v jednej štruktúre budú údaje o bydlisku osoby a v nasledujúcej štruktúre budú údaje o jeho mene, priezvisku, plate,...

Štruktúra, ktorá je prvkom inej štruktúry sa označuje ako vnorená štruktúra.

Page 15: Úvod do jazyka C

15

Štruktúra v inej štruktúre príklad (deklarácie)

#include <stdio.h>

typedef struct { char ulica[30]; char cislo[10]; } ADRESA;

typedef struct { char meno[30]; ADRESA bydlisko; float priemer;} OSOBA;

OSOBA student, studenti[10];

Zadanie

Vytvoriť štruktúru, pomocou ktorej bude možné evidovať údaje o mene študenta, jeho bydlisku a výsledku štúdia.

Page 16: Úvod do jazyka C

16

Štruktúra v inej štruktúre príklad (hlavný program)

int main(int argc, char *argv[]){ printf("Zadaj meno studenta: "); scanf("%s", &student.meno);

printf("Zadaj nazov ulice: "); scanf("%s", &student.bydlisko.ulica);

printf("Zadaj cislo domu: "); scanf("%s", &student.bydlisko.cislo);

printf("Zadaj priemer "); scanf("%f", &student.priemer);

printf("Student %s", student.meno); printf(" byva na ulici %s %s \n", student.bydlisko.ulica, student.bydlisko.cislo); printf(" ma priemer znamok %.2f \n", student.priemer);}

Page 17: Úvod do jazyka C

17

Štruktúra v inej štruktúre príklad (hlavný program)

int main(int argc, char *argv[]){

int i;for(i=0; i<2; i++){

printf("Zadaj meno studenta c.%d: ",i);scanf("%s", &studenti[i].meno);

printf("Zadaj nazov ulice: ");scanf("%s", &studenti[i].bydlisko.ulica);

printf("Zadaj cislo domu: ");scanf("%s", &studenti[i].bydlisko.cislo);

printf("Zadaj priemer ");scanf("%f", &studenti[i].priemer);

}

for(i=0; i<2; i++){

printf("\n\r Student[i] %s", studenti[i].meno);printf(" byva na ulici %s %s \n", studenti[i].bydlisko.ulica, studenti[i].bydlisko.cislo);printf(" ma priemer znamok %.2f \n", studenti[i].priemer);

}}

Page 18: Úvod do jazyka C

18

Doplnenie grafiky do Dev-C++

Štandardná inštalácia Dev-C++ neobsahuje knižnice pre prácu s grafikou. Tieto knižnice sa musia dodatočne nainštalovať.

Inštalácia grafického systému Allegro

Page 19: Úvod do jazyka C

19

Výber komponentov pre Update Dev-C++

Page 20: Úvod do jazyka C

20

Vytvorenie nového grafického projektu

Page 21: Úvod do jazyka C

21

Uloženie projektu

Každý projekt musí mať vytvorený vlastný adresárvlastný adresár do ktorého sa ukladajú pomocné súbory.

Page 22: Úvod do jazyka C

22

Inicializácia grafického módu

#include <allegro.h>

void init();void deinit();

int main() {init();

while (!key[KEY_ESC]) {/* put your code here */

}

deinit();return 0;

}END_OF_MAIN()

Pôvodné odstránime

doplníme readkey();

Page 23: Úvod do jazyka C

23

Inicializácia grafického módu

void init() {int depth, res;allegro_init();depth = desktop_color_depth();if (depth == 0) depth = 32;set_color_depth(depth);

res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);if (res != 0) {allegro_message(allegro_error);exit(-1); }

install_timer();install_keyboard();install_mouse();/* add other initializations here */

}

Nastavenie farebnej hĺbky (počet zobrazovaných farieb)

Funkcia, ktorá štartuje grafiku

Overenie správnosti spustenia grafiky (res=0)

Hlásenie chyby pri štarte grafiky (res0) a ukončenie programu

Inicializácia ďalších zariadení (časovača, klávesnice, myši)

Page 24: Úvod do jazyka C

24

Ukončenie grafického módu

void deinit() {clear_keybuf();/* add other deinitializations here */

}

Page 25: Úvod do jazyka C

25

Funkcie grafického módu

set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

Nastavuje veľkosť grafického oknaGFX_AUTODETECT_WINDOWED – windows oknoGFX_AUTODETECT_FULLSCREEN – celá obrazovka

Rozlíšenie (640x480)

Page 26: Úvod do jazyka C

26

Vloženie textu do grafického okna

int main() {init();

clear_to_color(screen, makecol(255, 255, 255)); text_mode(-1); textout_centre(screen, font, „Vitajte na palube!", SCREEN_W/2, SCREEN_H/2, makecol(0,0,0)); readkey();

deinit();return 0;

}END_OF_MAIN()

Page 27: Úvod do jazyka C

27

Funkcia pre vyfarbenie obrázku

clear_to_color(screen, makecol(255, 255, 255));

Názov obrázku (v tomto prípade celá obrazovka)

Farby (0 – 255)red, green, blueFunkcia pre tvorbu

farieb

Page 28: Úvod do jazyka C

28

Funkcia pre nastavenie textového módu

text_mode(-1);

Nastavenie textového módu(-1 priesvitné pozadie textu)

Page 29: Úvod do jazyka C

29

Funkcia pre výpis textu do zadaného obrázku

textout_centre(screen, font, „Vitajte na palube", SCREEN_W/2, SCREEN_H/2, makecol(0,0,0));

Názov obrázku (v tomto prípade celá obrazovka)

Typ fontu(štandardný systémový font)

Text

Umiestnenie textu (x a y súradnice v okne)

Funkcia pre tvorbu farieb

Farby (0, 0, 0) čierna farba

Funkcia SCREEN_W určí veľkosť okna v osi x

SCREEN_H určí veľkosť okna v osi y

Page 30: Úvod do jazyka C

30

Kreslenie úsečky

Súradnice obrazovky0,0

0,479 639,479

639,0

Príkaz pre kreslenie úsečkyline(screen, 10, 40, 70, 20, makecol(0, 255,

0));Súradnice

počiatku úsečky (x,y)

Súradnice konca úsečky (x,y)

Page 31: Úvod do jazyka C

31

Príklad na kreslenie úsečok

clear_to_color(screen, makecol(255, 255, 255));line(screen, 10, 40, 10, 140, makecol(0, 255, 0)); line(screen, 10, 140, 210, 140, makecol(255, 0, 0));line(screen, 210, 140, 210, 40, makecol(0, 0, 255));line(screen, 210, 40, 10, 40, makecol(0, 255, 255));

Page 32: Úvod do jazyka C

32

Vytvorenie obrazca a jeho vyplnenie farbou

Vytvorenie obdĺžnika, kde 30, 70 je jeden vrchol, 160, 140 je protiľahlý vrchol a jeho vyplnenie farbourectfill(screen, 30, 70, 160, 140, makecol(255, 198, 198));

Vytvorenie trojuholníka a jeho vyplnenie farboutriangle(screen, 130, 30, 420, 70, 270, 342, makecol(255, 90, 198));

Vytvorenie viacuholníka. Definovanie jeho vrcholov v poliint bodiky[10] = { 320, 20, 420, 460, 100, 140, 540, 140, 220, 460};polygon(screen, 5, bodiky, makecol(255, 0, 0));

Definovanie bodu v obrazci a jeho vyplnenie farboufloodfill(screen, 320, 200, makecol(200, 200, 200));

Page 33: Úvod do jazyka C

33

Výsledok programu

Page 34: Úvod do jazyka C

34

Práca s obrázkami

Doteraz sme pracovali s jediným obrázkom -- s obrazovkou. Odvolávali sme sa na ňu s pomocou systémovej premennej screen. Táto premenná mala typ BITMAP* čiže pointer na bitmapu . Práca s pamäťou je rýchlejšia ako práca s obrazovkou. Preto sa obrázok napred vytvorí v pamäti a potom zobrazí. V pamäti sa musí vytvoriť miesto pre uložení obrázku. Tento spôsob práce je vhodný aj pre prácu z obrázky zo súboru. Ten napred načítame zo súboru do pamäte a potom zobrazíme.

Page 35: Úvod do jazyka C

35

Vykreslenie obrázku

BITMAP* obrazok;obrazok = load_bitmap("xicht.tga",NULL);blit(obrazok,screen, 0,0, 270,190, 100,100);readkey();destroy_bitmap(obrazok);

Načítanie obrázku z disku(vo formátu bitmapy)

Kopírovanie jedného obrázku do druhého

Uvolnenie pamäte

blit(obrazok,screen, 0,0, 270,190, 100,100);

Prvý obrázok

Druhý obrázok (obrazovka)

Súradnice bodu od ktorého sa

začne kopírovať

Súradnice ľavého horného bodu

cieľového obrázku

Šírka a výška obrázku

Page 36: Úvod do jazyka C

36

Podpora práce smyšou

Po inicializácii myši máme k dispozícii premenné mouse_x a mouse_y, v ktorých je uložená aktuálnu pozícia myši.

Okrem toho je tu ešte premenná mouse_b v ktorej je ako v bitovom poli uložené, ktoré tlačidlo na myši je stlačené:

ak je mouse_b = 1, je stlačené ľavé tlačidlo, ak je mouse_b = 2, je stlačené pravé tlačidlo, ak je mouse_b = 4, je stlačené stredné tlačidlo (ak ho

myš má).

Page 37: Úvod do jazyka C

37

Kreslenie myšou

Program vykreslí bod, keď je stlačené ľavé tlačidlo myši na aktuálnu pozíciu myši.

while( ! keypressed()){ if (mouse_b & 1) putpixel(screen,mouse_x,mouse_y,makecol(255,255,0));}

Page 38: Úvod do jazyka C

38

Zobrazenie súradníc myši

Ak chceme, aby myš bolo vidieť, musíme urobiť dve veci. Za prvé musíme nainštalovať modul timer. install_timer();

Druhá vec ktorú musíme dodržať je, že vždy predtým, než na obrazovku budeme niečo kresliť, musíme myš zhasnúť, pretože inak nám bude robiť na obrazovku šmuhy. Hneď ako dokresíme samozrejme myši povieme, aby sa opäť objavila. Myš sa na obrazovke príkazom:

objavuje show_mouse(screen); zhasína show_mouse(NULL);

Page 39: Úvod do jazyka C

39

Vloženie obrázku na pozíciu myši

BITMAP* obrazok;

obrazok = load_bitmap("sln1.tga",NULL); show_mouse(screen); while( ! keypressed()) { if (mouse_b & 1) { show_mouse(NULL); draw_sprite(screen,obrazok,mouse_x-50,mouse_y-50); show_mouse(screen); } }

Funkciou draw_sprite vložíme obrázok na pozíciu myši

Page 40: Úvod do jazyka C

40

Kreslenie kružníc

circle(screen, 100, 100, 100, makecol(255,255,255));

Súradnice stredu kružnice x, y

Polomer kružnice

clear_to_color(screen, makecol(255,255,255));circle(screen, 100, 100, 100, makecol(0,0,0));circle(screen, 170, 170, 50, makecol(0,0,255)); floodfill(screen, 165, 165, makecol(0,255,0));

Page 41: Úvod do jazyka C

41

Vymenovaný typVymenovaný typ má podobnú konštrukciu ako štruktúra.

typedef enum{ pondelok,utorok,streda,stvrtok,piatok,sobota,nedela }DNI; int main(){ DNI c, d; c = pondelok; d = utorok; printf("%d %d", c, d);}

Page 42: Úvod do jazyka C

42

#include <stdio.h>#include "moje.h"typedef enum{ MODRA, CIERVENA, ZELENA, ZLTA }FARBY; int main(){ FARBY farba; farba = ZELENA; switch (farba) { case MODRA : printf(" Zvolena modra farba"); break; case CIERVENA : printf(" Zvolena ciervena farba"); break; case ZELENA : printf(" Zvolena zelena farba"); break; case ZLTA : printf(" Zvolena zlta farba"); break;} cakaj();}

Príklad – výber jednej z definovaných farieb

Page 43: Úvod do jazyka C

43

Opakujemedefinícia a naplnenie poľa

#include <stdio.h>#include "moje.h"

int main(){ int i,j; int cislo[]={ 1,2,3,4,5,6,7,8,9,0}; for (i = 0; i < MAX; i++){ printf("%3d %8d\n", i, cislo[i]);} cakaj(); return 0;}

Page 44: Úvod do jazyka C

44

Opakujemedefinícia a naplnenie poľa

#include <stdio.h>#include "moje.h"

int main(){ int i,j; int cislo[3][3] = { 1,2,3, 4,5,6, 7,8,9}; printf("\n"); for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++) printf(" %2d %2d %3d\n", i,j, cislo[i][j]);} cakaj(); return 0;}

Page 45: Úvod do jazyka C

45

Kontrolné cvičenie

Zadanie:

Vytvorte program, ktorý bude evidovať značky a typy aut, objem valcov a ich maximálnu rýchlosť.

Údaje zadajte z klávesnice a uložte ich do súboru.

Vytvorte ďalší samostatný program, ktorý údaje zo súboru načíta a zobrazí na obrazovke.

Program odovzdajte formou protokolu cvičiacemu. Súčasťou protokolu musí byť aj vývojový diagram.