PDF

Štruktúra pole, reťazce a práca s textom

Formát
PDF
Veľkosť
59 kB
Pridané
Stiahnutí
3 129
Hodnotenie
5,0/5
Stiahnuť PDF · 59 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

č. 6

1

Štruktúra pole, reťazce a práca

s textom

1. Štruktúra pole

•

štruktúry pole a jej reprezentácia

•

príklady použitia

2. Reťazce

•

čo je reťazec a reprezentácia reťazca

•

základné operácie s reťazcami

•

štandardné funkcie v jazyku C pre prácu s
reťazcami

3. Práca s textom

•

použitie štandardného vstupu a výstupu

•

programové schémy pre čítanie a zápis textu

•

štandardné funkcie v jazyku C pre prácu s textom

Programovanie - prednáška

č. 6

2

Štruktúra pole

• Pole je homogénna štruktúra, ktorá pozostáva z prvkov

jediného typu, ktorý nazývame základný typ

• Štruktúra s náhodným prístupom, kde všetky prvky môžu

byť vybraté náhodne a sú rovnako sprístupniteľné

• Na každý prvok poľa musíme pristupovať individuálne
• Referencia individuálneho prvku poľa je prístupná cez

meno poľa a index, určujúci vybratý prvok

• Index nadobúda hodnoty typu, definovaného ako typ

indexu poľa

– v jazyku C sa môže použiť ako index iba celé nezáporné číslo (0,

1, 2, 3, ...)

Programovanie - prednáška

č. 6

3

Štruktúra pole

•

Definícia poľa

typ identifikátor[po

čet];

int a[10]; // pole 10 celých

čísel

•

Inicializácia prvkov poľa

typ identifikátor[po

čet] = {p

0, p1, p2, ..., ppo

čet - 1};

int a[10] = {2, 5, 23, 4, 3};

// pole 10 celých

čísel s prvými piatimi

// prvkami inicializovanými

int b[] = {3, 5, 2}; // pole 3 celých

čísel s inicializovanými prvkami

•

Výraz pre výber prvku z poľa (selektor)

identifikátor[index]

int x = a[3]; // výber 4. prvku z po

ľa a a jeho použitie v

// prira

ďovacom príkaze

a[i + 3] = 1; // uloženie hodnoty do prvku po

ľa s výpočtom jeho indexu

Programovanie - prednáška

č. 6

4

Viacrozmerné pole

•

Polia, ktorých prvkami sú polia nazývame viacrozmerné polia

•

Definícia viacrozmerného poľa

typ identifikátor[po

čet

1][počet2]...[početn];

int matica[3][5]; // dvojrozmerné pole

•

Inicializácia viacrozmerného poľa

typ identifikátok[po

čet

1][počet2]...[početn] = {...};

int matica[2][3] = {{1, 3, 5}, {2, 3, 1}};

•

Selektor pre viacrozmerné pole (zreťazenie indexov)

identifikátor[index

1][index2]...[indexn]

matica[i][j] = 3; //priradenie

čísla do prvku poľa

Programovanie - prednáška

č. 6

5

Reprezentácia poľa

•

Reprezentácia poľa je zobrazenie poľa do pamäti počítača

•

Výpočet adresy a prvku poľa s indexom i

a = a

0 + i ⋅ s

•

Označenie a

0 predstavuje adresu prvého prvku po

ľa a s je počet slov, ktoré

zaberá jeden prvok poľa

–

v jazyku C budeme pri výpo

čte adresy prvkov poľa uvažovať vždy s = 1

•

Príklad:

int p[4];

(v jazyku C pre adresu prvého prvku poľa
použijeme výraz &p[0] alebo tiež iba p)

p[0]

p[1]

p[3]

p[2]

&p[0] + 0

&p[0] + 1

&p[0] + 2

&p[0] + 3

hodnota v

pamäti

adresa

Programovanie - prednáška

č. 6

6

Reprezentácia viacrozmerného

poľa

•

Viacrozmerné polia si môžeme predstaviť ako polia polí a s každým prvkom
poľa môžeme pracovať ako s poľom

•

Pre n-rozmerné pole a určíme adresu prvku s indexmi i

1, i2, ..., in nasledovne

a = a

0 + ((...(i1⋅ r2 + i2) ⋅ r3 + ... + in – 1) ⋅ rn + in) ⋅ s

•

Platí to isté ako v predošlom prípade, pričom r

2, ..., rn sú rozmery po

ľa

•

Príklad dvojrozmerného poľa:

int p[2][3];

(adresa prvého prvku je daná
výrazom &p[0][0])

p[0][0]

p[0][1]

p[0][2]

p[1][0]

p[1][1]

p[1][2]

hodnota v

pamäti

adresa

&p[0][0] + 0 * 3 + 0

&p[0][0] + 0 * 3 + 1

&p[0][0] + 0 * 3 + 2

&p[0][0] + 1 * 3 + 0

&p[0][0] + 1 * 3 + 1

&p[0][0] + 1 * 3 + 2

Programovanie - prednáška

č. 6

7

Príklad: Nájdenie prvočísiel

•

Formulácia úlohy

– Na štandardný výstup vypíšte všetky prvočísla po zadanú hornú hranicu.

•

Návrh riešenia

– Jedna z možností je použitie Erathostenovho sita. Základnou myšlienkou

je fakt, že násobky prvočísiel nie sú prvočísla. Takže na pomyselnom
výpise celého intervalu začíname od najmenšieho prvočísla a škrtáme jeho
násobky. Potom sa posunieme na najbližšie nepreškrtnuté číslo, ktoré
musí byť prvočíslo a ďalej vyradzujeme jeho násobky na celom intervale.
Takto postupujeme, až nedosiahneme hornú hranicu intervalu. Maximálna
horná hranica bude obmedzená konštantou MAX.

•

Návrh údajových štruktúr

– Pre hornú hranicu použijeme premennú typu celé číslo n. Pre zobrazenie

výpisu všetkých čísel intervalu, na ktorom hľadáme prvočísla, použijeme
pole krátkych celých čísel s názvom sito, pričom prípustné hodnoty budú
1 a 0 v zmysle nepreškrtnutého a preškrtnutého čísla.

Programovanie - prednáška

č. 6

8

Reťazce

• Reťazcom nazývame postupnosť znakov (prvkov typu

char) reprezentujúcu textový údaj

• Reťazce reprezentujeme v jazyku C ako jednorozmerné

polia znakov

• Posledný znak ukončujúci postupnosť znakov v reťazci je

vždy nulový znak (znak '\0')

• Pri definícii poľa znakov musíme preto vždy uvažovať o

jednom (koncovom) znaku naviac

'T'

'\0'

'E'

'X'

'T'

Programovanie - prednáška

č. 6

9

Reťazce

•

Definícia reťazca

char identifikátor[po

čet + 1];

char a[10]; // pole pre uloženie re

ťazca dĺžky 9

•

Inicializácia reťazca

char identifikátor[] = re

ťazcová_konštanta;

char a[] = {'p', 'r', 'o', 'g', 'r', 'a', 'm', '\0'}; // vymenovaním znakov

char b[] = "program"; // re

ťazcovou konštantou

pri inicializácii po

ľa reťazcovou konštantou sa vyhradí miesto pre zadaný počet znakov a

jeden koncový znak automaticky

•

Na reťazec sa často odkazujeme ako na celok tzn. adresou prvého prvku poľa
(používame samotný identifikátor poľa), čo vyžaduje prácu so smerníkmi

•

Pre prístup k jednotlivým znakom používame selektor ako pri poliach s iným
základným typom

Programovanie - prednáška

č. 6

10

Základné operácie s reťazcami

• Niektoré základné operácie s reťazcami:

– zistenie dĺžky reťazca – strlen()
– kopírovanie reťazca – strcpy(), strncpy()
– konkatenácia (spojenie) reťazcov – strcat(), strncat()
– porovnanie reťazcov – strcmp(), strncmp()

– nájdenie prvého/posledného výskytu znaku v reťazci –

strchr()

, strrchr()

– prevod znakv na veľké/malé písmená – strlwr(), strupr()

• Uvedené operácie s reťazcami sú implementované

funkciami v štandardnej knižnici prekladača jazyka C

– k zdrojovému textu je potrebné pripojiť hlavičkový súbor

string.h

Programovanie - prednáška

č. 6

11

Príklad: Nájdenie reťazca v texte

• Formulácia úlohy

– Pre zadaný text a reťazec nájdite pozíciu prvého výskytu reťazca

v texte.

• Návrh riešenia

– Vezmeme prvý znak reťazca a nájdeme jeho výskyt v texte. Potom

od tohto miesta skúsime porovnať aj zvyšok reťazca s textom. Ak
sa zhodujú, skončili sme, ak nie hľadáme ďalší výskyt prvého
znaku reťazca v texte. Maximálna dĺžka textu a reťazca bude
obmedzená konštantou MAX.

• Návrh údajových štruktúr

– Pre implementáciu textu aj hľadaného reťazca použijeme polia

znakov text a ret.

Programovanie - prednáška

č. 6

12

Práca s textom

•

Súbory s prvkami typu znak (char) sú dôležité pri výpočtoch a
spracovaní údajov, pretože predstavujú prepojenie medzi počítačom
a používate
ľom

•

Čitateľný vstup resp. výstup programu predstavuje znakovú
postupnosť

•

Komunikácia medzi výpočtovým procesom a používateľom je
realizovaná dvoma súbormi (vstupný a výstupný)

•

Tieto dva súbory označujeme ako štandardný vstup a štandardný
výstup

•

Tieto súbory reprezentujú štandardné vstupné a výstupné médium
počítačového systému (klávesnica, displej a pod.)

•

Štandardné knižnice prekladača jazyka C obsahujú realizácie týchto
súborov ako aj operácie so vstupom a výstupom vo forme funkcií

– k zdrojovému textu je potrebné pripojiť hlavičkový súbor stdio.h

Programovanie - prednáška

č. 6

13

Práca s textom

•

Text predstavuje postupnosť znakov, ktorá je ukončená znakom konca
súboru EOF

•

Text môžeme deliť na podštruktúry, napr. kapitoly, články, odseky,
riadky, slová a pod.

•

Jednotlivé podštruktúry textu sú oddelené rôznymi oddeľovacími
znakmi (tiež nazývané biele znaky)

•

Najčastejšie uvažujeme text ako postupnosť riadkov, pričom riadok je
postupnosť znakov ukončená znakom konca riadku '\n'

•

Uvažujme najjednoduchšie operácie pre prácu s textom

– čítanie znaku zo vstupného súboru
– zápis znaku do výstupného súboru
– test konca súboru
– test konca riadku

Programovanie - prednáška

č. 6

14

Zápis do textového súboru

•

Základná programová schéma pre zápis do textového súboru môže vyzerať
nasledovne

...

while (!poslednyZnakSuboru()) {

while (!poslednyZnakRiadku()) {

znak = dajZnak();

putchar(znak);

}

putchar('\n');

}

...

¬ posledný

znak

súboru

¬ posledný

znak riadku

výstup:

znak

výstup:

koniec riadku

áno

áno

nie

nie

daj znak

...

...

Programovanie - prednáška

č. 6

15

Čítanie textového súboru

•

Základná programová schéma pre čítanie textového súboru môže vyzerať
nasledovne

...

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

if (znak == '\n')

koniecRiadku();

else

spracujZnak(znak);

}

...

¬ koniec

súboru

koniec

riadku

vstup:

znak

áno

áno

nie

nie

koniec riadku

...

...

spracuj znak

Programovanie - prednáška

č. 6

16

Čítanie textového súboru

•

Niekedy nie je riadková štruktúra textu podstatná

•

Zjednodušená programová schéma pre čítanie textového súboru potom vyzerá
nasledovne

...

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

spracujZnak(znak);

}

...

¬ koniec

súboru

vstup:

znak

áno

nie

...

...

spracuj znak

Programovanie - prednáška

č. 6

17

Štandardné vstupno-výstupné

funkcie

• Väčšina programovacích jazykov dovoľuje v operáciách s

textom pracovať aj s inými typmi údajov ako znakmi (int,
float a pod.)

• Vstupno-výstupné operácie preto zvyčajne obsahujú

konverziu textu (postupnosti znakov) na tieto typy údajov

• V jazyku C môžeme využívať nasledovné funkcie pre

prácu so štandardným vstupom a výstupom:

– načítanie znaku zo vstupu – getchar()
– zápis znaku na výstup – putchar()
– formátovaný vstup – scanf()
– formátovaný výstup – printf()
– načítanie riadku zo vstupu – gets()
– zápis riadku na výstup – puts()

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