-
Deklarace
typ deklarßtor[konstantnφ_v²raz]
deklaruje pole slo╛enΘ z prvk∙ typu typ. Pole zaujφmß spojitou
oblast pam∞ti a mß p°esn∞ takovou velikost, aby obsßhlo v╣echny svΘ prvky.
V²sledkem konstantnφho v²razu musφ b²t celΘ kladnΘ Φφslo (urΦuje poΦet
prvk∙ pole). Prvky pole majφ indexy od 0 do "poΦet prvk∙ pole - 1".
Nap°. m∙╛eme deklarovat pole s prvky typu int, kterΘ bude obsahovat
p∞t celoΦφseln²ch hodnot. Deklarace tohoto pole m∙╛e vypadat takto:
int mojePole[5];
V tomto p°φpad∞ p°ekladaΦ alokuje pole podle nßsledujφcφho obrßzku
(ka╛d² prvek typu int vy╛aduje pro ulo╛enφ 4 slabiky; celΘ pole
zabφrß 20 slabik):
mojePole[0] |
mojePole[1] |
mojePole[2] |
mojePole[3] |
mojePole[4] |
adresaPoΦßtku |
adresaPoΦatku+4 |
adresaPoΦßtku+8 |
adresaPoΦßtku+12 |
adresaPoΦßtku+16 |
Nynφ, kdy╛ ji╛ mßme pole deklarovanΘ, m∙╛eme jej zaplnit hodnotami:
mojePole[0] = -200;
mojePole[1] = -100;
mojePole[2] = 0;
mojePole[3] = 100;
mojePole[4] = 200;
Jak vidφme v p°edchozφ ukßzce, jednotlivΘ prvky pole jsou zp°φstup≥ovßnΘ
operßtorem indexace. M∙╛eme tedy pou╛φt i tento p°φkaz:
int vysledek = mojePole[3]
+ mojePole[4]; // v²sledek bude
300
Inicializaci pole lze provßd∞t souΦasn∞ s deklaracφ. Provedeme to nap°.
p°φkazem:
int mojePole[5] =
{ -200, -100, 0, 100, 200};
Toto pou╛ijeme, pokud znßme poΦet prvk∙ pole. Velikost ale lze takΘ
vynechat. Kdy╛ pou╛ijeme p°φkaz:
int mojePole[] =
{ -200, -100, 0, 100, 200};
pak p°ekladaΦ spoΦφtß uvedenΘ prvky pole a informaci o velikosti si
doplnφ sßm.
Vφcerozm∞rnß pole se deklarujφ jako pole polφ, tedy nap°. dvourozm∞rnΘ
pole s p∞ti °ßdky a sedmi sloupci se jmΘnem alfa a typem int
deklarujeme takto:
int alfa[5][7]
Za jist²ch podmφnek nemusφ b²t uvnit° prvnφch hranat²ch zßvorek ╛ßdn²
v²raz. TakovΘto pole mß potom neurΦenou velikost a naz²vßme je otev°enΘ.
Jeho deklarace je mo╛nß tam, kde nenφ pot°eba znßt velikost pole pro rezervovßnφ
pam∞╗ovΘho prostoru (nap°. p°i deklaraci parametru funkce).
V²raz typu pole je p°eveden na konstantnφ ukazatel, kter² ukazuje na
nult² prvek tohoto pole.
Je zapot°ebφ dßvat pozor, abychom nep°ekroΦili konec pole (jazyk C++
nekontroluje p°ekroΦenφ hranic pole). Pokud pou╛ijeme nßsledujφcφ k≤d:
int pole[5];
pole[5] = 10;
pak to pravd∞podobn∞ zp∙sobφ zhroucenφ na╣eho programu. P°epφ╣eme toti╛
n∞jakou informaci, kterß je v pam∞ti ulo╛ena za koncem pole.
-
S pou╛φvßnφm polφ se seznßmφme v nßsledujφcφ konzolovΘ aplikaci. Mßme vytvo°it
program, kter² p°eΦte z klßvesnice hodnotu p°irozenΘho Φφsla N a
posloupnost reßln²ch hodnot a1, a2, ..., an
a
urΦφ, kter² prvek se nejvφce p°ibli╛uje pr∙m∞rnΘ hodnot∞ vstupnφ posloupnosti.
Je-li takov²ch prvk∙ vφce, zajφmß nßs ten, kter² mß nejni╛╣φ index. Bude
z°ejm∞ nutnΘ projφt celou posloupnost vstupnφch hodnot dvakrßt. P°i prvnφm
pr∙chodu budeme prvky sΦφtat, abychom mohli urΦit jejich pr∙m∞rnou hodnotu,
ve druhΘm pr∙chodu hledßme prvek nejbli╛╣φ zji╣t∞nΘmu pr∙m∞ru. Tento dvojφ
pr∙chod nelze zajistit p°φmo p°i Φtenφ ·daj∙ a je tedy t°eba ·daje ulo╛it
do pam∞ti (pou╛ijeme k tomu typ pole). Neznßme ale p°edem po╛adovan² poΦet
prvk∙ pole, a tak volφme jako hornφ mez indexu n∞jakou hodnotu o kterΘ
budeme p°edpoklßdat, ╛e ji p°i v²poΦtu nep°ekroΦφme. Hrub² popis °e╣enφ
mß tvar:
Φtenφ a uklßdßnφ
prvk∙ pole
seΦtenφ prvk∙ pole
a v²poΦet pr∙m∞rnΘ hodnoty
zji╣t∞nφ prvku s
minimßlnφ odchylkou od pr∙m∞ru
v²pis v²sledk∙
V²poΦet pr∙m∞rnΘ hodnoty a zji╣t∞nφ prvku s minimßlnφ odchylkou budeme
provßd∞t pomocφ funkcφ. V²sledn² program mß tvar:
float prumer(int
n, float x[]);
int minodch(int n,
float x[], float prum);
int i, n, im;
float pole[100],
prum;
int main(int argc,
char **argv)
{
cout <<
"Zadej poΦet prvk∙ pole: ";
cin >> n;
cout <<
"Zadßvej jednotlivΘ prvky pole: ";
for (i = 0;
i < n; i++) cin >> pole[i];
prum = prumer(n,
pole);
im = minodch(n,
pole, prum);
cout <<
"Index prvku " << im << " hodnota prvku " << pole[im];
return 0;
}
float prumer(int
n, float x[])
{
float s =
0;
int i;
for (i = 0;
i < n; i++) s += x[i];
return s/n;
}
int minodch(int n,
float x[], float prum)
{
float rozd,
min;
int i, index
= 0;
min = fabs(prum
- x[0]);
for (i = 0;
i < n; i++) {
rozd = fabs(prum - x[i]);
if (rozd < min) {
min = rozd;
index = i;
}
}
return index;
}
Pokuste se pochopit, jak uvedenß aplikace pou╛φvß pole. Vyzkou╣ejte.
Funkce fabs poΦφtß absolutnφ hodnotu z typu
float
(je v hlaviΦkovΘm souboru math.h).
-
Vytvo°te konzolovou aplikaci, kterß z klßvesnice p°eΦte N (kde N<=
100) reßln²ch Φφsel a ulo╛φ je do pole. Z t∞chto Φφsel dßle urΦete minimßlnφ
a maximßlnφ hodnotu, jejich souΦet a pr∙m∞rnou hodnotu.
-
Je dßna posloupnost N cel²ch Φφsel z intervalu <1, 5> (nap°.
znßmek). Vytvo°te konzolovou aplikaci zji╣╗ujφcφ Φetnosti v²skytu jednotliv²ch
Φφslic v tΘto posloupnosti. Vyu╛ijte toho, ╛e hodnoty prvk∙ jsou ze zmφn∞nΘho
intervalu (hodnota Φφsla m∙╛e tvo°it index v poli Φetnostφ jednotliv²ch
Φφsel).
-
Nßsledujφcφ konzolovß aplikace poΦφtß na zßklad∞ poΦt∙ jednotliv²ch druh∙
mincφ a bankovek celkovou Φßstku.
int main(int argc,
char **argv)
{
int i, p;
int s = 0,
h[15] = {10, 20, 50, 100, 200, 500, 1000,
2000, 5000,
10000, 20000, 50000, 100000, 200000, 500000};
for (i = 0;
i < 15; i++) {
if (h[i] < 100) cout << "Zadej poΦet " << h[i] <<
" halΘ°∙: ";
else cout << "Zadej poΦet " << h[i]/100 << " korun: ";
cin >> p;
s += (p * h[i]);
}
cout <<
"Celkovß Φßstka je " << s/100 << " a " << s%100 <<
" halΘ°∙." << endl;
}
V tΘto aplikaci je provedena inicializace prvk∙ pole (Φervenß Φßst
programu). Program vyzkou╣ejte a pokuste se pochopit jak pracuje.
-
Vytvo°te konzolovou aplikaci °e╣φcφ opaΦnou ·lohu: pro zadanou Φßstku (zadanou
v halΘ°φch, d∞litelnou 10) sestavte program, kter² urΦφ jejφ vyjßd°enφ
s pou╛itφm co nejmen╣φho poΦtu platidel.