Programski jezik Java
Transcription
Programski jezik Java
Programski jezik Java Interno gradivo za predmet Algoritmi in programski jeziki (3. letnik) (neprečiščeno besedilo) bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka za izpis absolutne vrednosti števila, ki ga vpišete preko tipkovnice. a) s pomočjo funkcije abs(x) b) brez funkcije abs(x) bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka ki, prebere tekst in število in izpiše tekst tolikokrat kot je bilo vneseno število. bostjan.vouk@tsc.si 1 Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka ki, prebere in izpiše vsa cela števila med prebranima celoštevilčnima vrednostima. Predpostavimo, da je prvo prebrano število manjše od drugega. a) v padajočem vrstnem redu b) v naraščajočem vrstnem redu bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki prebere dve celi števili, zamenja njuni vrednosti med seboj, izračuna vsoto, izpiše vrednosti števil in njuno vsoto. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki izpiše število vstavljenih števil vstavljamo števila dokler ne vstavimo 0. bostjan.vouk@tsc.si 2 Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka za izračun vsote števil od 1 do X (X vstavimo). bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki prešteje število vnesenih števil, ki so večja od 33. Števila vnašamo dokler ne vnesemo števila 0. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki izpiše tabelo kvadratov naravnih števil od 1 do 15. bostjan.vouk@tsc.si 3 Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki prebere dve števili. Prvo število izpiše tolikokrat, kot je vrednost drugega števila. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Napiši diagram poteka, ki izpiše vsa števila od 1-10 razen tistih, ki so deljiva z 2. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki prebere 5 poljubnih celih števil. Za vsako število naj izpiše ali je pozitivno ali je negativno. bostjan.vouk@tsc.si 4 Ponavljanje Navodilo: • Rešitev: Izdelaj diagram poteka, ki izpiše vsa števila med 1 in 300, ki so deljiva z 2 in 7. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Izdelaj diagram poteka, ki izpiše vsa števila med 1 in 200, ki so deljiva s 3 ali 7. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Izdelaj diagram poteka, ki izpiše vsa števila med 1 in 500, ki so deljiva s 4 in niso deljiva z 10. bostjan.vouk@tsc.si 5 Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka ki, bere število eno po eno in izpiše ali je sodo ali liho. Vnos števil naj se konča, ko je pritisnjena črka d (Ali želite končati? d). bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki izpiše vsa liha števila iz intervala [10,30]. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki razcepi vneseno pozitivno celo število na posamezne števke in jih izpiše. bostjan.vouk@tsc.si 6 Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki izpiše največjo števko prebranega števila. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki izpiše najmanjšo števko prebranega števila. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki izpiše vsoto števk prebranega števila. bostjan.vouk@tsc.si 7 Ponavljanje Navodilo: Rešitev: • Dano je zaporedje podatkov, celih števil. Sestavi diagram poteka, ki prebere zaporedje podatkov in izpiše njihovo vsoto. • Primer zaporedja: 15…30 bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Sestavi diagram poteka, ki prebere število. Če je to število liho, izpiše 10 njegovih večkratnikov, v nasprotnem primeru naj izpiše, da je vneseno število sodo. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki izpiše vsoto vnesenih števil, največje število in zaporedno številko največjega števila. Števila vnašamo dokler ne vnesemo števila 0. bostjan.vouk@tsc.si 8 Ponavljanje Navodilo: Rešitev: Sestavi diagram poteka, ki bere števila in jih sešteva, dokler vsota ne preseže vrednosti 100. Na koncu izpiše, za koliko je vsota presegla vrednost 100. • bostjan.vouk@tsc.si Ponavljanje Navodilo: Rešitev: Nariši diagram poteka, ki pri danem podatku X izračuna vrednost funkcije Y. Vrednost funkcije določimo po pravilu: • • če je X manjši od 1, naj bo Y=X*10, • če je X večji ali enak 1, naj bo Y=X. bostjan.vouk@tsc.si Ponavljanje Navodilo: Rešitev: Nariši diagram poteka, ki izračuna vrednost funkcije Y za vse X od 0 do 10, X naj se povečuje za 1. Vrednost funkcije Y določite po naslednjem pravilu: • • če je X manjši od 5, naj bo Y=X*10, • če je X večji ali enak 5, naj bo Y=X. bostjan.vouk@tsc.si 9 Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki s tipkovnice prebere znak. Če je vneseni znak velika tiskana črka, jo izpiše na zaslon, sicer pa izpiše njegovo zaporedno številko (ASCII kodo). Upoštevaj angleško abecedo. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka, ki s tipkovnice bere znake, dokler ni prebran znak &. Če je tekoči znak mala tiskana črka, jo izpiše na zaslon, sicer pa izpiše na zaslon zaporedno številko (ASCII kodo) znaka. Znaka & naj ne izpiše. Pomoč: ord('&')=38. bostjan.vouk@tsc.si Ponavljanje Navodilo: • Rešitev: Nariši diagram poteka ki preveri, če vnesena celoštevilčna vrednost lahko predstavlja petiško število (petiško število lahko vsebuje le števke od 0 do 4). bostjan.vouk@tsc.si 10 Ponavljanje Kakšno vrednost imajo spremenljivke, ko se izvede zaporedje stavkov: a) int x = (int)(( 1/2 + 2.5) * 3.0) b) int y = 7 % (6 - 3 / 5); x y c) int z = 7 / (6 - 3 % 5); z d) double d = 6.0 / (6 - 3 % 5); d e) double e = (double) (20 / 9 % 5); e f) double f = (double)14 / 5 + (int)(14 / 3); f g) double g = (double)(14 / 5) + (int)(14.0 / 3); g h) boolean bo = (2 > 3 - 1) || (4 % 2 == 0); bo i) boolean dem = !(!(2 > 3 - 1) && !(4 % 2 == 0)); dem j) boolean s = (4 / 2 != 0)? !bo : dem; s k) int [] t = {1-2, 3%4, 4%3-1, 5%4%3 }; t l) int [][] t2 = {t, {x, y, z} }; t2 bostjan.vouk@tsc.si Ponavljanje Kakšno vrednost imajo spremenljivke niz1, niz2, niz3 in niz4 (tipa String) potem, ko se izvede zaporedje stavkov: • String niz1 = "" + "bla".charAt(1) + "ble".charAt(2); • String niz2 = "n" + niz1.length() + "M"; • • String niz3 = "bbblo\" + \"bb"; String niz4 = 1 + 2 + "niz1"; • String niz5 = niz4.endsWith("niz1") ? “Tone" : “Marone"; niz1 niz2 niz3 niz4 niz5 bostjan.vouk@tsc.si Ponavljanje Katera od naslednjih imen so sintaktično pravilna imena spremenljivk? Obkroži jih. a) jAnez b) for c) janez slovenski č) super d) 9bit e) negative f) to_e_dolgo_ime d) do bostjan.vouk@tsc.si 11 Ponavljanje Za vsako od deklaracij napiši ali je sintaktično pravilna ali napačna in zraven pripiši pravilno obliko (oz. kar popravi). Kot nepravilna označi tudi imena, ki se ne držijo ustaljenih konvencij o poimenovanju v Javi. a) DOUBLE D; b) String posojilo = true; c) boolean b == true; d) boolean value = false, e) string start = "34", end="99"; f) int st = (int)3.4; g) String Moje_ime = "Lucka"; bostjan.vouk@tsc.si Ponavljanje Na črto napiši pogoj tako, da naslednji del programa izpiše (samo) 0 3 8 15 24 • int stej = 0; while (__________) { stej = stej + 1; System.out.print( stej * stej - 1 + " " ); } System.out.println(); Rešitev: bostjan.vouk@tsc.si Ponavljanje Kaj izpiše naslednji del programa? • Rešitev: int korak = 13; String niz = "Zaporedje:"; while ( korak >= 9 ) { System.out.println(niz + "#"); niz = "" + korak; korak = korak - 2; } bostjan.vouk@tsc.si 12 Ponavljanje Kakšno vrednost ima spremenljivka korak po izvajanju spodnjega dela programa? Rešitev: • int korak = 13; String niz = "Zaporedje:"; while ( korak >= 9 ) { System.out.println(niz + "#"); niz = "" + korak; korak = korak - 2; } bostjan.vouk@tsc.si Ponavljanje Kakšno vrednost ima spremenljivka niz po izvajanju spodnjega dela programa? • Rešitev: int korak = 13; String niz = "Zaporedje:"; while ( korak >= 9 ) { System.out.println(niz + "#"); niz = "" + korak; korak = korak - 2; } bostjan.vouk@tsc.si Ponavljanje Napiši program, ki bo izpisal prvih deset členov geometrijske vrste s količnikom 2 in začetnim členom 10. • Členi zaporedja: 10, 20, 40, 80, 160, … • Rešitev: bostjan.vouk@tsc.si 13 Ponavljanje Kakšna je vrednost spremenljivke izpis potem, ko izvedemo naslednje vrstice? • Rešitev: int izpis = 1; for(int zunanji=0; zunanji<100; zunanji=zunanji+5) { for(int notranji = 9; notranji >=2; notranji--) { izpis = izpis*2; if(izpis >10) break; } izpis = izpis + 2; if(izpis > 20) break; } bostjan.vouk@tsc.si Ponavljanje A. Napiši prireditveni stavek s katerim boš v spremenljivko cif_n (tipa int) shranil naključno število med 10 in 39! B. Kakšno vrednost bo imela spremenljivka stevilo (tipa int) • • • potem, ko se izvedejo stavki: stevilo = 7 / 3 – 4 % 5; stevilo = 2 + 2 * 2 - 1; stevilo = 5 / stevilo + 2; C. Kakšno vrednost ima spremenljivka tip_b (tipa boolean) • potem, ko se izvede stavek: tip_b = true || ((1 < 4) && (2 > 6)); • tip_b =(!(7 > 3)) || (4 > 9) ; bostjan.vouk@tsc.si Ponavljanje A. Napiši logični izraz, ki ima vrednost true takrat, ko celo število leži na intervalu med -20 in -5 ali na intervalu med 5 in 35 (robna števila štejemo k intervalu) . B. Napiši logični izraz, ki ima vrednost true takrat, ko decimalno število leži na intervalu med 17 in 35 ali na intervalu med 45 in 50 (robna števila štejemo k intervalu) in false sicer. C. Napiši prireditveni stavek s katerim boš v spremenljivko n (tipa int) shranil naključno število med -10 in 10 (torej bodisi –10, -9, -8, ..., -1, 0, 1, ..., 9, 10)! bostjan.vouk@tsc.si 14 Ponavljanje Kaj izpiše naslednji del programa? • Rešitev: int n = 70, f = 2, i = 0; String odg = ""; while (f <= n) { if (n % f == 0) { i = i + 1; odg = odg + i + ". = " + f + "\n"; } f = f + 1; } System.out.print(odg); bostjan.vouk@tsc.si Ponavljanje Imamo naslednji del kode • Kaj izpiše ta del kode? k = 0; while (k < 22) { A. B. if (k % 3 == 0) System.out.print(k , " "); k = k + 2; } C. D. E. F. 4 16 4 10 16 0 6 12 18 1 4 7 10 13 16 19 0 2 4 6 8 10 12 14 16 18 1 nič od tega bostjan.vouk@tsc.si Ponavljanje • Dan je del programa, ki naj bi izračunal, koliko deliteljev ima dano število. Napiši pogoj(namesto MANJKA)! • int stevilo = 20, deli = 0; int narascam = 1; while (__ MANJKA __) { if (stevilo % narascam == 0) { deli = deli + 1;} narascam = narascam + 1; } System.out.println( "Stevilo " + stevilo + " ima " + deli + " deliteljev." ); Rešitev: bostjan.vouk@tsc.si 15 Ponavljanje Kaj izpiše ta del programa? • Rešitev: int j = 1, k; while (j <= 5) { k = 1; while (k <= 5) { System.out.println(j + "/"); k = k + 1; } System.out.print("“); j = j + 2; } bostjan.vouk@tsc.si Ponavljanje Dan je del programa: • Realiziraj z while zanko! System.out.print("1/1/1/1/1"); System.out.print("2/2/2/2"); System.out.print("3/3/3"); System.out.print("4/4"); System.out.println("5"); • Kaj izpiše ta del programa? • Rešitev: bostjan.vouk@tsc.si Ponavljanje Imamo naslednji del kode: • Rešitev: k = 0; while (k < 20) { if (k % 3 == 1) System.out.print(k + " "); k = k + 2; } A. Kaj izpiše ta del? B. Popravi ta del programa tako, da bo izpisal 1 3 5 7 9 11 13 15 17 19 bostjan.vouk@tsc.si 16 Ponavljanje • S spodnjim delom programa smo želeli čas, ki ga hranimo v spremenljivkah ure in minute ustrezno povečati. Dopolni spodnji del programa tako, da bo zagotovo veljalo: 0 <= ure < 24 in 0 <= minute < 60. • int ure = 14; int minute = 24; ure = ure + (int)(Math.random() * 100); minute = minute + (int)(Math.random() * 60); // manjka // • Rešitev: bostjan.vouk@tsc.si Ponavljanje Napiši program, ki prebere celo število in izpiše obratno vrednost tega števila (Za prebrani podatek 2 torej izpiše 0.5,…). Pazi na 0! Rešitev: bostjan.vouk@tsc.si Ponavljanje • Denimo, da smo dobili naslednji izpis. Kateri del kode ustreza zapisu? • 11111 2222 333 44 A. 5 int j = 1; while (j <= 5) { int k = 1; while (k <= 5) { System.out.print(j + " "); k = k + 1; } System.out.println(); j = j + 1; } B. int j = 1; while (j < 5) { int k = 1; while (k <= 5) { System.out.print(j + " "); k = k + 1; } System.out.println(); j = j + 1; } C. int j = 1; while (j <= 5) { int k = 1; while (k <= j) { System.out.print(j + " "); k = k + 1; } System.out.println(); j = j + 1; } bostjan.vouk@tsc.si 17 Ponavljanje • Denimo, da smo dobili naslednji izpis. Kateri del kode ustreza zapisu? • 11111 2222 333 44 A. 5 int j = 1; while (j <= 5) { int k = 1; while (k <= j) { System.out.print(j + ""); k = k + 1; } System.out.println(); j = j + 1; } B. int j = 1; while (j <= 5) { int k = 5; while (k >= 1) { System.out.print(j + " "); k = k - 1; } System.out.println(); j = j + 1; } C. int j = 1; while (j <= 5) { int k = 5; while (k >= j) { System.out.print(j + " "); k = k - 1; } System.out.println(); j = j + 1; } bostjan.vouk@tsc.si Ponavljanje Kaj naredi naslednji program? Pregledno označi morebitne presledke! • Rešitev: public class Diagram { public static void main(String[] kaj) { int i, j, k; // Pomozni stevci. String[] args = {"1", "3", "0", "2", "3", "4", "2"}; int max = Integer.parseInt(args[0]); i = 1; while (i < args.length) { j = Integer.parseInt(args[i]); if (j > max) max = Integer.parseInt(args[i]); i = i + 1; } k = 0; while (k < max) { i = 0; while (i < args.length) { j = Integer.parseInt(args[i]); if (max - k > j) { System.out.print(" "); } else { System.out.print("*"); } i = i + 1; } System.out.println(); k = k + 1; }}} bostjan.vouk@tsc.si Ponavljanje Navodilo: Rešitev: • Napiši program Vzorec.java, ki iz ukazne vrstice dobi parameter n (1 <= n <= 9) in izpiše n vrstic po n števil. Ob klicu Vzorec 8 dobimo: • 00000000 01010101 01201201 01230123 01234012 01234501 01234560 01234567 • Namig: Z metodo Integer.parseInt(arg[0]) pretvori argument iz ukazne vrstice v n. Nato v zanki izpiši n vrstic. V vsaki vrstici izpiši ostanke pri deljenju vrstice z vsakim stolpcem – 1. bostjan.vouk@tsc.si 18 Ponavljanje Navodilo: Rešitev: • Spodnjo for zanko nadomesti z while zanko • for (int i = 1; i < n; i++) { bla = bla + i; } bostjan.vouk@tsc.si Ponavljanje Navodilo: • • Rešitev: Napiši program ki generira naključna števila iz intervala [0,8] v 2D tabeli. Tabela naj po diagonali vsebuje števila 0 ostala števila pa naj bodo po diagonali simetrična. Primer: 08604 80376 63082 07800 46200 bostjan.vouk@tsc.si Ponavljanje Navodilo: • • Rešitev: Napiši program, ki na podlagi 60000 metov kocke šteje število vrženih šestic, petic, ..., in enk. Za hranjenje statistike uporabi celoštevilčno tabelo dolžine 6. bostjan.vouk@tsc.si 19 Ponavljanje Navodilo: Rešitev: Napiši program, ki bere znake toliko časa dokler ni vneseno število 0. Program naj šteje število vnosov velikih tiskanih črk. Na koncu naj program izpiše statistiko prebranih velikih tiskanih črk. Za statistiko uporabi celoštevilčno tabelo dolžine 26. • • • bostjan.vouk@tsc.si Ponavljanje Kaj izpiše spodnji program? Rešitev: public class NalogaTab { public static void main(String[] args) { int[][] matrika = {{1,2,3,5,6}, {7,9,0,4,3}, {8,3,5,1,8}, {4,1,9,7,5}, {0,6,8,4,5}}; int[] vsoti = new int[2]; int vsota = 0; • for(int i = 0; i < matrika.length; i++) vsota += matrika[i][i]; for(int i = 0; i < matrika.length; i++) { for(int j = 0; j < matrika[i].length; j++) { if(i < j) { vsoti[0] += matrika[i][j]; } else if(i > j) { vsoti[1] += matrika[i][j]; }}} System.out.println("Prva vsota je "+vsoti[0]+"\n"+"Druga vsota je "+vsoti[1]); } } bostjan.vouk@tsc.si Ponavljanje Kaj izpiše spodnji program? • Rešitev: public class NalogaTab { public static void main(String[] args) { int[] tab = new int[20]; for(int i = 1; i <= 10; i++) { tab[i - 1] = i; } for(int i = 10; i < tab.length; i++) { tab[i] = tab[i - 10] + tab[i - 9]; } for(int i = 0; i < tab.length; i++) { System.out.print(tab[i] + ", "); } } } 20