PDF

Metódy programovania

Formát
PDF
Veľkosť
73 kB
Pridané
Stiahnutí
2 292
Hodnotenie
5,0/5
Stiahnuť PDF · 73 kB

Preber si túto poznámku so svojou AI

Skopíruj pripravený podklad a vlož ho do ChatGPT, Claude alebo inej AI — bude ťa učiť alebo skúšať len z tejto poznámky.

Otvoriť AI: ChatGPT · Claude · Gemini

Náhľad poznámky

Programovanie - prednáška

č. 4

1

Metódy programovania:

jazykové konštrukcie pre riadenie

1. Programovací jazyk C

•

charakteristika a vlastnosti

•

podporované metódy programovania

2. Príkazy jazyka C

•

deklaračné a definičné

•

riadiace príkazy
•

jednoduché
•

štrukturované (vetvenia, cykly, funkčné a
procedurálne volania)

•

neštrukturované (skoky)

•

zložené

3. Podprogramy v jazyku C - funkcie

•

definícia, deklarácia, použitie

Programovanie - prednáška

č. 4

2

Programovací jazyk C

charakteristika a vlastnosti

Zdrojový text
…;
Poc=I*max;
...

Preklad

Spájanie

Vykonate

ľný

program

00100101
11100101
…

Vedecko-technické výpo

čty

Databázové aplikácie
Systémové programy
Ovláda

če zariadení

Programové vybavenie

v špecializovaných
zariadenieach (embeded
systems)

...

Procedúry a funkcie

...nutnos

ť

definovania krokov –
postupu –
algoritmu...

univerzálny

procedurálny

kompilačný

jazyk vyššej úrovne

jazyk strojovej úrovne

vysoká prenositeľnosť

kompilátora

aplikácií

Programovanie - prednáška

č. 4

3

Programovací jazyk C

charakteristika a vlastnosti

#define PORT1 0x2A

struct port_str {

unsignet int hlava:1;
unsignet int sektor:4;
unsignet int pozicia:3;

} pom;

void setPort (void) {

pom.hlava = 1;
pom.sektor = 12;
pom.pozicia = 4;
outportb (PORT1, pom);
pom.pozicia = 3;
outportb (PORT1, pom);

}

Premenné
Typy

Preddefinované
Definovate

ľné

Jednoduché
Štruktúrované

Výrazy

Aritmetické
Logické
Rela

čné

Príkazy
Podprogramy

Jazyk bez príkazov pre:

V/V, prácu so súbormi
dynamické pride

ľovanie OP

vytváranie a synchronizáciu procesov

Strojovo závislé prvky a väzba na
opera

čný systém sú realizované
........ knižnicami

univerzálny

procedurálny

kompilačný

jazyk vyššej úrovne

jazyk strojovej úrovne

vysoká prenositeľnosť

kompilátora

aplikácií

Programovanie - prednáška

č. 4

4

C-program

Triviálny C-program

main() { }

Preklad:

cc pr0.c

Odštartovanie:

a.out

Príklad 0

main() {

printf (“hello, world\n“);

}

pr0.c

funkčné

hlavná funkcia (vykonáva sa vždy ako prvá)

volanie knižni

čnej funkcie

vloženie hlavi

čkového súboru

Príklad 1

#include <stdio.h>

main() {

printf (“hello, world\n“);

}

funkčné a

koncepčne lepšie...

Programovanie - prednáška

č. 4

5

Podporované metódy programovania

• štruktúrované programovanie

riadiace štruktúry

sekvencie

vetvenia

cykly

polia

záznamy

súbory

údajové štruktúry

štandardné

neštandardné

zoznamy

spojkové

sekven

čné

definície a volania podprogramov

p

p

Programovanie - prednáška

č. 4

6

• modulárne programovanie

• samostatne kompilovateľné

moduly

• export a import dát a funkcií

app

mod1.o

mod2.o

mod1.h

mod1.c

mod2.c

mod3.o

mod3.c

mod1.h

mod1.h

make

file

make

app

Podporované metódy programovania

•

vývoj a ladenie aplikácie po moduloch
(inkrementálne)

•

zakrývanie implementácie

•

sprístupňovanie rozhraní

Programovanie - prednáška

č. 4

7

PRÍKAZY JAZYKA C

• deklaračné

• deklarácia premenných

extern int a;

• deklarácia typov

typedef char BYTE;

• deklarácia funkcií

float skalar_sucin(float [], int);

• definičné

• definícia premenných

int a, v[10];

• definícia funkcií

void prompt(void) { printf(“\n>“); }

• (definícia konštánt a makier - príkazy predprocesora

)

• riadiace - definícia toku riadenia

• stavebné kamene pre definovanie algoritmu

Programovanie - prednáška

č. 4

8

Riadiace príkazy

• jednoduché (....syntax, ukončovací znak)

• štruktúrované

• vetvenia

if, if-else, if-else if-else, switch

• cykly

while, do-while, for

• funkčné a procedurálne volania

• neštruktúrované

• výrazové príkazy

• skoky

break, continue, goto

• zložené - blok

{p1,…,pn}

• podmienky radenia a vnárania blokov

Programovanie - prednáška

č. 4

9

Príkaz vetvenia IF

•

if (vyraz)

prikaz

•

if (vyraz)

prikaz1 dvojcestné

else vetvenie

prikaz2

•

if (vyraz1)

prikaz1

else if (vyraz2)

prikaz2 viaccestné

…. vetvenie
else

prikaz

VNÁRANIE PRÍKAZOV IF

ELSE sa viaže k najbližšiemu

predošlému IF !!!

//načítanie hodnoty do
//premennej x - <0,99>
if (x >= 0)

if ( x > 99 ) {

x = 99;

}

else

x=0;

Vizuálne odsadenie:

„

čo chcel programátor“

Čo sa vykoná.

Programovanie - prednáška

č. 4

10

Príkaz vetvenia IF

•

if (vyraz)

prikaz

•

if (vyraz)

prikaz1 dvojcestné

else vetvenie

prikaz2

•

if (vyraz1)

prikaz1

else if (vyraz2)

prikaz2 viaccestné

…. vetvenie
else

prikaz

VNÁRANIE PRÍKAZOV IF

ELSE sa viaže k najbližšiemu

predošlému IF !!!

//načítanie hodnoty do
//premennej x - <0,99>
if (x >= 0)

if ( x > 99 ) {

x = 99;

}

else

x = 0;

{

}

Programovanie - prednáška

č. 4

11

Príkaz SWITCH - prepínač

switch (celocíselny_vyraz) {

case CHOD1: prikaz1

case CHOD2: prikaz2

…

case CHODn: prikazN

default: prikaz

}

• Rozdiel v použití IF a

SWITCH

• univerzálnosť IF

• rýchlosť SWITCH

• Význam vetvy

DEFAULT

• Prepadávanie cez

alternatívy

• Použitie príkazu

BREAK

Programovanie - prednáška

č. 4

12

Príklad použitia príkazu SWITCH

/* počítanie bielych a iných znakov */
#include <stdio.h>
main( ) {

int znak, biele, ine;
biele = ine = 0;

prepadávanie

POTREBNÉ

NEPOTREBNÉ

ale VHODNÉ

while (( znak=getchar( )) != EOF) {

switch ( znak ) {

case ‘ ‘ :

case ‘\t’ :

case ‘\n’ : biele++; break;

default : ine++; break;

}

}

printf(“\nbiele=%d, ine=%d\n”, biele, ine);

}

Programovanie - prednáška

č. 4

13

Príkaz cyklu WHILE

while (vyraz)

prikaz

• výraz sa vyhodnotí vždy

• príkaz sa nemusí vykonať

ani raz

• vykonávanie cyklu

pokračuje, pokiaľ hodnota
výrazu je NENULOVÁ

Programovanie - prednáška

č. 4

14

Príklad na použitie cyklu WHILE

/* preskoč biele znaky */

while ( ( c=getchar( ) ) == ‘ ‘ ||

c == ‘\n’ ||

c == ‘\t’

) ;

PRÁZDNE TELO

CYKLU

/* čítanie zo stdin */

while ( EOF != (c=getchar( ) ) )

{

…….

}

SPRÁVNY ALGORITMUS

AJ VTEDY, KEĎ

VSTUPI EOF

Cyklus do while

do príkaz

while (výraz);

•

Cyklus vykonáva telo - príkaz, kým je výraz
nenulový (to zodpovedá logickej hodnote
true), najmenej však jedenkrát!

Programovanie - prednáška

č. 4

16

Príklad na použitie príkazov

IF a DO WHILE

/* binar. vyhľadávanie */

int binschr(x,v,n)

int x, /*hľadané číslo */

v[ ], /*prehl.vektor */

n; /*počet prvkov */

do {

k = (i + j)/2;
if (x > a[k]) {

i = k + 1;

} else {

j = k – 1;

}

} while (a[k]!=x && i<=j);
if (a[k]==x)

return k;

else

return –1;

}

{

int i, j, k;

i = 0;

j = n-1;

Programovanie - prednáška

č. 4

17

Príkaz cyklu FOR

for ( [V1]; [V2]; [V3] )

príkaz

význam

V1 - inicializácia

V2 - test konca

V3 - príprava

ďalšieho kroku
cyklu

• univerzálnosť FOR

• možné bočné efekty

výrazov V1,V2,V3

1. ak existuje V1, vyhodnotí sa
2. ak existuje V2, vyhodnotí sa
3. ak V2 je nulové, koniec cyklu
4. ak V2 je nenulové.

• vykoná sa

príkaz

• ak existuje V3, vyhodnotí sa
• pokračuje sa krokom 2

Programovanie - prednáška

č. 4

18

/* konverzia reťazca na cele číslo */

char s[ ] = “12345“; //pole znakov
int i, n;
n=0;
for ( i=0;

s[i]>=‘0’ && s[i]<=‘9’ ;

i++)

n = 10*n + s[i] - ‘0’;

Príklad použitia cyklu FOR

INICIALIZÁCIA

PRÍPRAVA ĎALŠIEHO KROKU

TELO CYKLU

TEST

Programovanie - prednáška

č. 4

19

Príkazy skoku

• break

• continue

• return

• goto

Programovanie - prednáška

č. 4

20

Break, continue

• Príkaz break ukončuje najvnútornejšiu

neukončenú slučku cyklu a opúšťa telo cyklu

– spôsobuje skok z príkazu cyklu na ďalší príkaz

• Príkaz continue preruší vykonávanie najbližšej

nadradenej štruktúrovanej konštrukcie cyklu
(najvnútornejšiu neukončenú slučku cyklu)

– spôsobí prechod na ďalší krok cyklu bez toho, aby sa

predchádzajúci krok cyklu ukončil

– nespôsobuje skok z tela cyklu von

Programovanie - prednáška

č. 4

21

Skokový príkaz CONTINUE

/* vynulovanie záporných

čísel v poli */

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

if(a[i] > 0) {

continue;

}

a[i] = 0;

}

• začatie ďalšej iterácie

najvnútornejšieho
cyklu(…skok v rámci
štruktúry…)

• ak sa má vykonať

inicializačný výraz cyklu a
opakovať cyklus od
1.iterácie, nedá sa použiť
continue

Programovanie - prednáška

č. 4

22

Return

• Príkaz return ukončí vykonávanie funkcie a môže

vrátiť hodnotu

• Môže sa vyskytovať v jednom z tvarov

•

return výraz;

• return (výraz);

• return;

Programovanie - prednáška

č. 4

23

Goto

• Príkaz goto umožňuje vykonať skok v rámci jednej

funkcie

• Je možné vykonať skok z bloku do bloku a von

z cyklu.

• Všeobecne sa doporučuje používať príkaz goto čo

najmenej a skutočne len vo výnimočných
prípadoch.

• POUŽITIE: ukončenie sústavy vnorených cyklov.

Programovanie - prednáška

č. 4

24

Podprogramy v jazyku C - funkcie

• základ C-programu
• Definícia funkcie

- popisuje funkciu z hľadiska jej vstupov, výstupov (t.j.

rozhrania – interface), algoritmov a použitých
údajových štruktúr

- v danom programe práve jedna

• Syntax definície funkcie:

[<typ_návratovej hodnoty>] <meno_funkcie>

(<zoznam_formálnych_parametrov>)

<deklarácia_formálnych_parametrov>
{

<telo_funkcie>

}

Programovanie - prednáška

č. 4

25

• implicitný typ návratovej hodnoty je int

sucet_cisel (a,b)

int a,b;

//deklarácia formálnych parametrov

{return a+b;} //funkcia implicitne vracia hodnotu

//typu int

• funkcia bez návratovej hodnoty je typu void

void vypis ()

{ printf ("Bola zavolana funkcia vypis!\n"); }

• ak funkcia nemá žiadne formálne parametre norma ANSI

C odporúča na ich mieste použiť kľúčové slovo void

void vypis (void)

{ printf ("Bola zavolana funkcia vypis!\n"); }

Typ funkcie a argumentov

Programovanie - prednáška

č. 4

26

• Deklarácia funkcie

- popisuje funkciu len z hľadiska jej rozhrania (meno funkcie a typ

návratovej hodnoty)

Syntax deklarácie funkcie:
<typ_návratovej hodnoty> <meno_funkcie> ();

int sucet_cisel();

//deklarácia funkcie

• Prototyp funkcie

-norma ANSI C doporučuje používať deklaráciu funkcie v tvare tzv.

prototypu (meno, typ návratovej hodnoty a typy parametrov)

• Syntax prototypu funkcie:

<typ_návratovej hodnoty> <meno_funkcie>

(<typ_param1>[,<typ_param2>]. . .);

int max3 (int, int, int);

//prototyp funkcie

Deklarácia a prototyp funkcie

Programovanie - prednáška

č. 4

27

main()

{. . .

vypis(); //funkcia vypis je

. . .} // void funkcia

•

Syntax volania funkcie:

<meno_funkcie> (<zoznam_skuto

čných_parametrov>)

-

volanie funkcie je rozdielne pre funkcie s a bez návratovej hodnoty

- s návratovou hodnotou – volanie funkcie môže byť použité vo

výraze ako operand

- bez návratovej hodnoty (void funkcia) – volanie funkcie nesmie

byť použité ako operand

main()

{. . .

a = vypis();//CHYBA!!!

. . .}

Volanie funkcie

main()

{int x, y, z;

// deklarácia lokálnych

premenných

. . .

printf („Sucet cisel %d a %d = %d\n", x, y,

sucet_cisel(x,y));

. . .

z = sucet_cisel(x,y);

. . .}

Automaticky vygenerovaný textový náhľad. Pre plné formátovanie si stiahnite súbor.