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