1 / 45

Úvod do jazyka C

Ú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.

winda
Download Presentation

Úvod do jazyka C

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Úvod do jazyka C Algoritmizácia úloh

  2. Š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

  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.

  4. Základná definícia štruktúry Obecná definícia struct { položky; } meno; Existuje päť spôsobov definície štruktúry.

  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 udajeOctavia; struct udaje Fabia,Roomster; Definícia štruktúry Definícia premenných

  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;

  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;

  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; UDAJEOctavia, Fabia,Roomster; Definícia typu štruktúry Definícia premenných

  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; UDAJEOctavia, Fabia,Roomster; Definícia typu štruktúry Definícia premenných

  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.

  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ístup k poľu štruktúr Práca s celou štruktúrou

  12. 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 #include <stdio.h> typedef struct { int vykon, rychlost; float spotreba; } UDAJE;

  13. 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; } Prvky štruktúrypríklad

  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.

  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.

  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); }

  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); } } 17

  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

  19. Výber komponentov pre Update Dev-C++

  20. Vytvorenie nového grafického projektu

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

  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();

  23. Inicializácia grafického módu Nastavenie farebnej hĺbky (počet zobrazovaných farieb) 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 */ } Funkcia, ktorá štartuje grafiku Overenie správnosti spustenia grafiky (res=0) Hlásenie chyby pri štarte grafiky (res0) a ukončenie programu Inicializácia ďalších zariadení (časovača, klávesnice, myši)

  24. Ukončenie grafického módu void deinit() { clear_keybuf(); /* add other deinitializations here */ }

  25. Funkcie grafického módu Nastavuje veľkosť grafického okna GFX_AUTODETECT_WINDOWED – windows okno GFX_AUTODETECT_FULLSCREEN – celá obrazovka set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); Rozlíšenie (640x480)

  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()

  27. Funkcia pre vyfarbenie obrázku Názov obrázku (v tomto prípade celá obrazovka) clear_to_color(screen, makecol(255, 255, 255)); Farby (0 – 255) red, green, blue Funkcia pre tvorbu farieb

  28. Funkcia pre nastavenie textového módu Nastavenie textového módu (-1 priesvitné pozadie textu) text_mode(-1);

  29. Funkcia pre výpis textu do zadaného obrázku Typ fontu (štandardný systémový font) Názov obrázku (v tomto prípade celá obrazovka) Text Funkcia pre tvorbu farieb textout_centre(screen, font, „Vitajte na palube", SCREEN_W/2, SCREEN_H/2, makecol(0,0,0)); Farby (0, 0, 0) čierna farba Umiestnenie textu (x a y súradnice v okne) Funkcia SCREEN_W určí veľkosť okna v osi x SCREEN_H určí veľkosť okna v osi y

  30. Kreslenie úsečky Súradnice obrazovky 0,0 639,0 0,479 639,479 Príkaz pre kreslenie úsečky line(screen, 10, 40, 70, 20, makecol(0, 255, 0)); Súradnice konca úsečky (x,y) Súradnice počiatku úsečky (x,y)

  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));

  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 farbou rectfill(screen, 30, 70, 160, 140, makecol(255, 198, 198)); Vytvorenie trojuholníka a jeho vyplnenie farbou triangle(screen, 130, 30, 420, 70, 270, 342, makecol(255, 90, 198)); Vytvorenie viacuholníka. Definovanie jeho vrcholov v poli int 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 farbou floodfill(screen, 320, 200, makecol(200, 200, 200));

  33. Výsledok programu

  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.

  35. Vykreslenie obrázku Načítanie obrázku z disku (vo formátu bitmapy) BITMAP* obrazok; obrazok = load_bitmap("xicht.tga",NULL); blit(obrazok,screen, 0,0, 270,190, 100,100); readkey(); destroy_bitmap(obrazok); Kopírovanie jedného obrázku do druhého Uvolnenie pamäte blit(obrazok,screen, 0,0, 270,190, 100,100); Prvý obrázok Šírka a výška obrázku Súradnice bodu od ktorého sa začne kopírovať Súradnice ľavého horného bodu cieľového obrázku Druhý obrázok (obrazovka)

  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á).

  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)); }

  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ínashow_mouse(NULL);

  39. Vloženie obrázku na pozíciu myši Funkciou draw_sprite vložíme obrázok 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); } }

  40. Kreslenie kružníc Súradnice stredu kružnice x, y circle(screen, 100, 100, 100, makecol(255,255,255)); 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));

  41. Vymenovaný typ Vymenovaný 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); }

  42. Príklad – výber jednej z definovaných farieb #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(); }

  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; }

  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; }

  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.

More Related