PPT

pr1j_08_polia.ppt

Formát
PPT
Veľkosť
775 kB
Pridané
Stiahnutí
1 050
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.