1 / 18

Tabele, zanka for, konstante, ...

Tabele, zanka for, konstante,. Zgled. Janko Vremenar si že vrsto let skrbno beleži količino mesečnih padavin. Tako je zbral podatke o padavinah za vsak mesec od leta 1999 do 2005. Radi bi: Našli mesec, ko je bilo nasploh največ padavin Našli leto, v katerem je bilo najmanj padavin

aitana
Download Presentation

Tabele, zanka for, konstante, ...

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. Tabele, zanka for, konstante, ...

  2. Zgled • Janko Vremenar si že vrsto let skrbno beleži količino mesečnih padavin. Tako je zbral podatke o padavinah za vsak mesec od leta 1999 do 2005. • Radi bi: • Našli mesec, ko je bilo nasploh največ padavin • Našli leto, v katerem je bilo najmanj padavin • Našli vsa leta, v katerih je količina padavin v marcu bila podpovprečna • ... • Kje hraniti podatke: • Dvodimenzionalna tabela • V stolpcih leta • V vrsticah meseci • Imena stolpcev (leta) in imena mesecev bomo hranili v posebnih tabelah

  3. Dvo (in več) dimenzionalne tabele • int[][] razpredelnica; • razpredelnica = new int[10][6]; • Tabela velikosti 10 x 6 • razpredelnica[2][3] • tretji (no ja, dejansko četrti ;-) ) element druge (beri: z indeksom 2) vrstice • Spremenljivka za hranjenje celega števila • razpredelnica[2] • kaj je to? • Tabela celih števil!

  4. Dvo (in več) dimenzionalne tabele • Kako določiti dimenzijo – 2. način • Dva koraka • razpredelnica = new int[10]; • S tem smo določili, da imamo 10 vrstic (0, .., 9) • razpredelnica[0], razpredelnica[1], ..., razpredelnica[9] • To so tabele • Zaenkrat še neznane velikosti • Drugi korak • Vsaki od tabel določimo velikost • Vsaka vrstica ima lahko svoje število stolpcev, če je potrebno! • kje = 0;while (kje < 10) { razpredelnica[kje] = new int[6]; kje = kje + 1;}

  5. Naš zgled • 12 mesecev, 7 let, torej: • int[][] padavine = new int[12][7]; • Leta • int[] leta = new int[7];leta[0] = 1999;leta[1] = 2000;...leta[6] = 2005; • Gre hitreje • int[] leta = {1999, 2000, 2001, 2002, 2003, 2004, 2005}; • Povsem isto kot zgoraj, le drug zapis! • Na ta način lahko "polnimo" tabelo le ob deklaraciji! Kasneje ne!

  6. Velikost tabele • tabela.length nam pove velikost tabele • Če torej • double[] x = new double[23]; • nam • x.length • vrne 23!

  7. Konstante - final • Načeloma teorija pravi, da v programu ne smemo imeti konstant (vrednosti, ki se ne spreminjajo) "prosto tavajočih okrog" • S tem bo bolj jasno, kaj so. Namesto • cena = 215 * l + (7500 - 1.5 * l); • je bolje • int cenaPrevoza = 7500; • double popustnaLiter = 1.5; • int cenaOlja = 215; • cena = cenaOlja * l + (cenaPrevoza - popust * l); • Lahko pa tudi (še bolje) • final int cenaPrevoza = 7500; • final double popustnaLiter = 1.5; • final int cenaOlja = 215; • Določilofinal • Gre za konstanto (vrednost v tej spremenljivki se ne spreminja)

  8. Zakaj imena in ne kar npr. 100 • V programu imamo dele kode • int[] tabela = new tabela[100]; • if (x < 100) • while (stevec < 100) • (x + 100) / 2 • ... • Ali imajo te vrednosti 100 kaj skupnega? Načeloma lahko le ugibamo! • Popraviti je potrebno velikost tabele (npr. na 200). Katere vrednosti 100 je potrebno spremniti v 200?

  9. Zakaj imena in ne kar npr. 100 - II • Zato raje • int velTabele = 100; • int zgMeja = 100; • Oziroma (če vemo, da je stvar nespremenljiva) • final int velTabele = 100; • final int zgMeja = 100; • In potem • int[] tabela = new tabela[velTabele]; • if (x < zgMeja) • while (stevec < velTabele) • (x + velTabele) / 2 • ... • Sedaj ni problema, če se npr. velikost tabele spremeni. Edina sprememba v kodi: • final int velTabele = 100;

  10. Naš zgled • final int steviloLet = 7; • final int steviloMesecev = 12; • String[] meseci = {"januar", "februar", "marec", "april", "maj", "junij", "julij", "avgust", "september", "oktober", "november", "december"}; • int[] leta = {1999, 2000, 2001, 2002, 2003, 2004, 2005}; • int[][] kolicinaPadavin = new int[steviloMesecev][steviloLet];

  11. Naš zgled - branje • Preberemo podatke • Janko jih ima urejene po letih • indeksLeta = 0;while (indeksLeta < steviloLet) { JOptionPane.showMessageDialog(null, "Vnesi podatke za leto " + leta[indeksLeta]); indeksMeseca = 0; // po vseh mesecih, vedno od 0 dalje while (indeksMeseca < steviloMesecev) { beri = JOptionPane.showInputDialog(meseci[indeksMeseca]+": "); padavine[indeksMeseca][indeksLeta] = Integer.parseInt(beri); indeksMeseca = indeksMeseca + 1; } indeksLeta = indeksLeta + 1; // naslednje leto} • Da bomo ob testiranju hitrejši • Branje nadomestimo z naključnimi števili • maxPadavin = 100; • padavine[indeksMeseca][indeksLeta] = (int)(Math.random() * maxPadavin);

  12. Naš zgled - izpis • Lepo izpišemo podatke • Izpis po mesecih • Zgornja vrstica z leti // izpis imen let indeksLeta = 0; System.out.print("\t\t"); // preskočimo stolpec z imeni mesecev while (indeksLeta < steviloLet) { System.out.print(leta[indeksLeta] + "\t"); indeksLeta = indeksLeta + 1; // naslednje leto } System.out.println(); // nova vrsta // izpis podatkov indeksMeseca = 0; // po vseh mesecih while (indeksMeseca < steviloMesecev) { // izpis padavin za tekoči mesec za vsa leta // ime meseca System.out.print(meseci[indeksMeseca] + "\t"); // vsa leta indeksLeta = 0; System.out.print("\t"); // preskočimo stolpec z imeni mesecev while (indeksLeta < steviloLet) { System.out.print(padavine[indeksMeseca][indeksLeta] + "\t"); indeksLeta = indeksLeta + 1; // naslednje leto } System.out.println(); indeksMeseca = indeksMeseca + 1; // naslednji mesec }

  13. Naš zgled – mesec z najmanj padavin • Radi bi poiskali mesec v katerem je bilo najmanj padavin • Pregledati vse podatke • Dvojna zanka • "Okostje" indeksLeta = 0; while (indeksLeta < steviloLet) { indeksMeseca = 0; // po vseh mesecih, vedno od 0 dalje while (indeksMeseca < steviloMesecev) { // iščemo min *** indeksMeseca = indeksMeseca + 1; } indeksLeta = indeksLeta + 1; // naslednje leto } • Kaj je ***: • Če najdemo boljšega (z manj padavin) od trenutnega, si zapomnimo • Količino padavin • Leto (indeks) • Mesec (indeks)

  14. Iskanje minimuma • Pred zanko // kandidat je kar prvi podatek int minPadavinKolicina = padavine[0][0]; // indeksa - kje dosežemo minimum int minPadavinLeto = 0; int minPadavinMesec = 0; • V zanki if (padavine[indeksMeseca][indeksLeta] < minPadavinKolicina) { minPadavinKolicina = padavine[indeksMeseca][indeksLeta]; minPadavinLeto = indeksLeta; minPadavinMesec = indeksMeseca; } AnalizaPadavin.java

  15. Mimogrede Zanke

  16. Poleg zanke while obstajajo tudi druge • Zelo pogosto: • for for(int i = kam - 1; i >= 0; i--) { System.out.print(tab[i] + " ");} System.out.println();

  17. Zanke - for • for (<akcija pred zanko>; pogoj; <akcija za zanko>) stavek; • Izvedi <akcija pred zanko>. Preveri pogoj. Če je izpolnjen, izvedi stavek. Izvedi <akcija za zanko>. Ponovnopreveri pogoj, … • Načeloma ne potrebujemo – vse lahko naredimo z zanko while (in obratno)

  18. while <-> for • for (int i = 1; i < n; i++) { bla = bla + i;} • lahko zapišemo kot { int i = 1; while (i < n) { bla = bla + i; i++; } } • Zunanji oklepaji – zaradi lokalnosti spremenljivke i

More Related