PPT

pr1j_08_polia.ppt

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

Zoznamy

 polia

– základné operácie
– celočíselné pole
– pole reťazcov

 konštanty
 náhodné čísla
 usporiadanie údajov v poli
 viacrozmerné polia

Uchovanie údajov

doposiaľ sme sa stretli s úlohami typu:

–

vyhľadať v zozname maximálnu/minimálnu hodnotu

–

zistiť priemer zadaného zoznamu

–

zistiť počet žien v zadanom zozname a pod.

úlohy sme riešili tak, že:

–

hodnotu sme prečítali, spracovali...

–

... a zabudli => viac sme sa k nej nedokázali vrátiť

v praxi sa často stretávame s postupom:

–

načítať údaje

–

spracovať údaje po 1. raz, po 2. raz atď. – údaje

máme k dispozícii prakticky neustále

Údaje rovnakého typu v pamäti

 pokiaľ by sme chceli v pamäti uchovávať údaje

rovnakého typu (pre jednoduchosť uvažujme len

integer), potrebovali by sme nasledovnú konštrukciu:

int prvaPremenna;
int druhaPremenna;
...
int x-taPremenna;

 čo by bol náročné ako na písanie zdrojového kódu, tak

i na samotné programovanie

– každú operáciu by bolo nutné naprogramovať pre každú

premennú osobitne,

– napr. prvapremenna++; druhapremenna++ atď.

Pole - array

našťastie, rovnako ako vieme indexovať znaky v

stringu, dokážeme vytvoriť aj zoznam celých
čísel

údajový typ umožňujúci takúto prácu s údajmi

sa označuje ako pole – array

vo všeobecnosti pole predstavuje zoznam

hodnôt rovnakého typu

Vytvorenie

pokiaľ chceme pole používať, potrebujeme túto informáciu
oznámiť:

– pole deklaruje prostredníctvom []:

int[] mojePole; // alebo
int tvojePole[];

–

mojePole a tvojePole sú odkazy na celočíselné polia, ale ešte im
nie je priradená žiadna pamäť.

mojePole = new int[100]; // pole 100 cisel

– kľúčové slovo new vyhradzuje pamäť mojePole a int[100] určuje

kapacitu pre 100 premenných typu int.

Štandardný zápis

pre zjednodušenie a zvýšenie prehľadnosti môžeme zápis
realizovať ako:

int[] mojePole = new int[2];

pole sa začína od nulového indexu a posledný prvok má
index pocetPrvkov – 1

informáciu o počte prvkov poskytuje zápis

pocetPrvkov = mojePole.length;

počet prvkov v poli nemožno meniť

Inicializácia poľa

 po vytvorení sú v poli typu int uložené hodnoty 0.
 počas behu programu možno hodnotu vložiť nasledovne:

mojePole[3] = 7;

 pole sa možno už pri deklarácii inicializovať na požadované

hodnoty (a takýmto zápisom zároveň určiť, koľko prvkov pole bude

mať:

int[] mojePole={2,8,15,22,34};// pole s 5 prvkami

 veľkosť poľa je určená počtom počiatočných hodnôt, a tým pádom

pre definíciu pola nie je potrebná žiadna ďalšia informácia.

–

pokiaľ sa zadajú inicializačné hodnoty pre pole, tak musia byť uvedené

hodnoty všetkých prvkov

–

pre nastavenie iba niektorých prvkov pola na určitú hodnotu je nutné použiť

priraďovacie príkazy

Príklad

Pre zadané pole čísel nájdite maximum.

Riešenie

public static void main(String[] args) {
int[] pole={2,8,15,22,34,12,15,87,98,54};
int max = pole[0];

for(int i=0;i<pole.length;i++) {
if (pole[i]>max) max = pole[i];

}
System.out.println(max);
}

Pole typu string

pole typu int je po vzniku inicializované na

hodnoty 0

pole typu string NEMÁ DEFINOVANÉ

hodnoty, preto je ho pred použitím potrebné

naplniť

Príklad

Zistite, koľkokrát sa v poli s definovanými

textovými hodnotami nachádza zadané meno.

Riešenie

public static void main(String[] args) {
String[] pole={"Eva","Anna","Jan","Eva",

"Jan","Eva"};

int pocet = 0;

String meno = JOptionPane.showID("meno");
for(int i=0;i<pole.length;i++) {
if (meno.compareTo(pole[i])==0) pocet++;

}
System.out.println(pocet);
}

Príklad

Pre číslo zadané ako string zistite počet

výskytov jednotlivých cifier a vypíšte ich.

Riešenie

public static void main(String[] args) {
int[] pole= new int[10];
int cifra;

String ret = JOptionPane.showID("cislo");
for(int i=0;i<ret.length();i++) {
cifra=Integer.parseInt(ret.substring(i, i+1));
pole[cifra]++;
}
for(int i=0;i<10;i++)
System.out.println(i+"-"+pole[i]);
}

Premenné

doposiaľ sme sa stretávali s premennými, ktoré

počas behu programu menili svoju hodnotu

– výnimkou bol v určitom zmysle len string

sú situácie, keď je žiaduce, aby hodnotu

premennej nebolo možné počas behu programu
zmeniť

Premenné nemenné

ak napr. vyhradíme pamäťový priestor pre pole:

– je vhodné pamätať si počet vyhradených

pamäťových miest, aby sme ho mohli v prípade
potreby zväčšiť/zmenšiť na jednom mieste

– je nevhodné dovoliť zmeniť počas behu programu

hodnotu premennej obsahujúcu informáciu o počte
prvkov v poli

možno samozrejme namietnuť, že táto informácia je
uložená v informácii pole.length

Príklad

public static void main(String[] args) {

int pocet=10;

int[] pole=new int[pocet];

for(int i=0;i<pocet;i++) {

pole[i]=i;

}

// tu by sme nebodaj pocet zmenili

pocet=15;

for(int i=0;i<pocet;i++) {

System.out.println(pole[i]);

}

}

Konštanty – konštantné premenné

 premenná označená ako konštantná zabraňuje

akejkoľvek zmene jej hodnoty.

– ak raz inicializujeme premennú na nejakú hodnotu a

označíme ju ako konštantnú pomocou kľúčového slova final,
tak jej hodnota je nemenná

– akýkoľvek pokus o zmenu hodnoty konštantnej premennej je

považovaný za chybu už v prostredí, a teda nemožný

final int pocet = 10;

– môžeme ju aj najprv deklarovať a až potom jej priradiť

hodnotu – avšak len RAZ

Náhodné číslo

 zadávanie hodnôt do poľa

– manuálnym zápisom v kóde: pole[1]=5; pole[2]=7; atď
– vkladaním v deklarácii
– vkladaním do poľa prostredníctvom používateľského dialógu

(JOptionPane)

 rýchlejší spôsob predstavuje vloženie náhodných

hodnôt

 vrátenie náhodného čísla zabezpečí funkcia

Math.random(),

ktorá vráti reálnu hodnotu z intervalu <0,1) - rozsah

zahŕňa aj hodnotu 0.0 hodnotu 1.0 však nie.

– inými slovami: 0.0 <= Math.random() < 1.0.

Náhodné čísla >1

 pokiaľ chceme získať väčšie hodnoty, je potrebné

vynásobiť získanú hodnotu maximálnou hodnotou

našej požiadavky,

 pokiaľ chceme vygenerovať celé číslo, je potrebné

pretypovanie:

int cislo = (int)(Math.random() * 9);

– ak do celočíselnej premennej vložíme

Math.random()*9, získame náhodnú hodnotu 0-8

– ak do reálnej premennej vložíme hodnotu

Math.random()*5, získame hodnotu 0-4.99999999999....

Náhodné hodnoty z intervalu

Math.random()*i vráti hodnotu 0-i, okrem i
 ak chceme hodnoty napr. od 5 do 10, potrebujeme

výpočet upraviť

–

interval, v ktorom požadujeme náhodnosť, má rozsah 5

–

získanú hodnotu treba zvýšiť o 5

int x = (int) (5 + Math.random()*5)

–

minimálna hodnota bude 5+0, t.j. 5

–

maximálna hodnota bude 5+4, resp. 5+4.999999999, t.j. skoro

10

Náhodné hodnoty z intervalu

 ak chceme hodnoty napr. od -5 do 5, postupujeme

nasledovne:

– rozsah intervalu je 10, minimálna hodnota –5 =>

int x = (int) (-5 + Math.random()*10)

– resp. ak požadujeme aj hodnotu 5

int x = (int) (-5 + Math.random()*11)

Vloženie náhodných hodnôt do poľa

 vezmime interval <-50,50)

public static void main(String[] args) {
int[] pole= new int[10];

for(int i=0;i<pole.length;i++) {
pole[i] = (int) (-50+Math.random()*100);
System.out.println(pole[i]);
}
}

Usporiadanie údajov v poli

 kritérium pre usporiadanie

–

číselné (0,1,2,10,11,20...)

–

textové (0,1,10,11,2,20...)

 usporiadanie = triedenie
 triediace algoritmy

–

usporiadajú údaje rôznymi algoritmami

–

najjednoduchší (ale aj jeden z najpomalších) =

BUBBLE-SORT

Bubble-sort

porovnáva susedné prvky

–

ak je pravý menší ako ľavý vymení ich

po prvom prechode bude na konci zoznamu najväčšie číslo

Bubble-sort prechod

 po druhom prechode bude zaradený

predposledný atď.

Bubble-sort analýza

 počet prechodov bude n-1, pretože:

–

pri prvom prechode je na svojom mieste 1. prvok

–

pri druhom prechode 2. prvok

–

atď. až pri n-1 prechode n-1. prvok a tým pádom aj

posledný

 pri prechodoch sa porovnávajú susedné prvky,

nemusíme však ísť až do konca, vždy je pri

ďalšom prechode potrebné skúmať o jeden

prvok menej

Bubble-sort program

for(int i=0;i<pole.length-1;i++) {
for(int j=0;j<pole.length-i-1;j++) {
if (pole[j]>pole[j+1]) {
pom = pole[j];
pole[j] = pole[j+1];
pole[j+1] = pom;
}
}
}

Viacrozmerné polia

 doposiaľ sme sa stretávali s jednorozmernými poľami
 okrem nich existujú i dvoj- a viacrozmerné

–

dvojrozmerné pole sa často označuje ako matica a možno si

ho predstaviť ako tabuľku so stĺpcami a riadkami

–

jeho vytvorenie môže mať podobu:

int[][] moje2DPole = new int[3][3];

–

možno vytvárať aj viacrozmerné polia, ktorých deklarácia
pozostáva z troch a viac indexov v hranatých zátvorkách...

Viacrozmerné polia - práca

 prístup k položkám:

moje2DPole[1][3] = 48;

–

a nie

moje2DPole[1,3] = 48;

Príklady na riešenie

Napíšte program na určenie počtu výskytov daného prvku v poli a výpis indexov

jeho výskytu.

Zostavte program na určenie prvého a posledného výskytu daného prvku v poli.

Napíšte program na určenie počtu kladných, nulových a záporných čísel v

jednorozmernom poli.

Napíšte program na presun prvkov jednorozmerného poľa tak, aby na začiatku

boli záporné, potom nulové a nakoniec kladné čísla.

Napíšte program na výpis žiakov z poľa podľa začiatočného písmena

priezviska.

Napíšte program na výpis žiakov z poľa podľa dĺžky priezviska.

Napíšte program na výpis žiakov z poľa podľa abecedy.

Napíšte program na porovnanie dvoch polí (nech vypíše v koľkých prvkoch sa

polia zhodujú – zhodné sú prvky s rovnakou hodnotou na rovnakej pozícii).

Vymažte v poli všetky prvky obsahujúce zadanú hodnotu tak, že prvky poľa

nachádzajúce sa za mazanou hodnotou „posuniete doľava“.

Pre zadaný reťazec zistite počet výskytov jednotlivých znakov (‘a’ – ‘z’) vypíšte

ich.

Napíšte program na zistenie výskytu zadanej hodnoty v dvojrozmernom poli.

Napíšte program, ktorý v matici nepárne čísla vynásobí dvoma a párne prepíše

na 1. Pri výpise dbajte na vzhľad matice.

Napíšte program na sčítavanie dvoch matíc.

Document Outline


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