Metódy programovania
Stiahnuť PDF · 73 kBPreber 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.
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.
nechodím na prednášky