1 / 31

Zoznamy

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

fiona
Download Presentation

Zoznamy

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Zoznamy • polia • základné operácie • celočíselné pole • pole reťazcov • konštanty • náhodné čísla • usporiadanie údajov v poli • viacrozmerné polia

  2. 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

  3. Ú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ď.

  4. 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

  5. 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čujekapacitu pre 100 premenných typu int.

  6. Š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á indexpocetPrvkov – 1 informáciu o počte prvkov poskytuje zápis pocetPrvkov = mojePole.length; počet prvkov v poli nemožno meniť

  7. 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

  8. Príklad • Pre zadané pole čísel nájdite maximum.

  9. 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); }

  10. 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ť

  11. Príklad Zistite, koľkokrát sa v poli s definovanými textovými hodnotami nachádza zadané meno.

  12. 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); }

  13. Príklad • Pre číslo zadané ako string zistite počet výskytov jednotlivých cifier a vypíšte ich.

  14. 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]); }

  15. 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ť

  16. 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

  17. 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]); } }

  18. 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

  19. 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.

  20. 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....

  21. 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

  22. 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)

  23. 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]); } }

  24. 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

  25. Bubble-sort porovnáva susedné prvky ak je pravý menší ako ľavý vymení ich po prvom prechode bude na konci zoznamu najväčšie číslo

  26. Bubble-sort prechod po druhom prechode bude zaradený predposledný atď.

  27. 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

  28. 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; } } }

  29. 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...

  30. Viacrozmerné polia - práca prístup k položkám: moje2DPole[1][3] = 48; a nie moje2DPole[1,3] = 48;

  31. 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.

More Related