Uvod u računarstvo - rc5.gaf.ni.ac.rsrc5.gaf.ni.ac.rs/dec/mgocic/InformatikaII/materijal/Uvod...
-
Upload
trinhtuyen -
Category
Documents
-
view
216 -
download
1
Transcript of Uvod u računarstvo - rc5.gaf.ni.ac.rsrc5.gaf.ni.ac.rs/dec/mgocic/InformatikaII/materijal/Uvod...
1
Uvod u programiranje i
softverski paketi
Univerzitet u Nišu
Građevinsko-arhitektonski fakultet
V čas
Milan Gocić
septembar, 2013.
- Algoritam: pojam, dizajn i analiza -
2
Algoritam Postupak transformacije ulazne informacije u izlaznu informaciju naziva
se algoritam.
Osnovne osobine koje treba da poseduje svaki algoritam su: diskretnost,
determinisanost,
rezultativnost i
masovnost.
Diskretnost znači da svakom algoritamskom koraku odgovara diskretni vremenski period.
Determinisanost znači da je rezultat operacije pojedinog algoritamskog koraka jednoznačan.
Rezultativnost obezbeđuje dobijanje željenog rezultata posle konačnog broja algoritamskih koraka.
Masovnost je osobina kojom se obezbeđuje rešavanje šire klase problema jednim algoritmom.
2
3
Elementi algoritma
Konektor (izlaz u drugi deo algoritma ili
ulaz iz drugog dela algoritma)
Strelica za povezivanje elemenata i označavanje
smera toka algoritma
Elementarne algoritamske
strukture
Pod algoritamskom (programskom) strukturom
podrazumeva se više koraka (komandi programskog
jezika) koji čine jednu celinu.
Postoje tri elementarne algoritamske strukture:
linijska,
razgranata i
ciklična.
4
3
Linijska struktura
Naredbe koje se pri izvršavanju programa uvek izvršavaju u
navedenom redosledu (sekvencijalno) čine linijsku strukturu.
Linijski programi su programi u kojima se javljaju naredbe ulaza,
obrade i izlaza. Ovi programi imaju smisla u slučajevima kada za
razne vrednosti ulaznih veličina treba izvršiti složena
izračunavanja.
5
6
Primer
Sastaviti algoritam i napisati program kojim se izračunava vrednost
funkcije
na osnovu unetih vrednosti za x, y i z. Na izlazu štampati vrednost
funkcije.
yz3x
x
x2
yz3xf
4
4
7
package informatika;
import java.io.*;
public class LinijskaStruktura {
public static void main(String[] args) throws Exception {
double x, y, z, f;
// Unos podataka
BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Unesite vrednost za x: ");
x = Double.parseDouble(ulaz.readLine());
System.out.print("Unesite vrednost za y: ");
y = Double.parseDouble(ulaz.readLine());
System.out.print("Unesite vrednost za z: ");
z = Double.parseDouble(ulaz.readLine());
// Izračunavanje vrednosti funkcije f
f = Math.pow((x + 3 * z + y) / (2 * x), 4) - x / (x + 3 * z - y);
// Štampanje rezultata
System.out.println("Vrednost funkcije f je " + f);
}
}
8
Izlazni rezultati programa
Unesite vrednost za x: 2.6
Unesite vrednost za y: 3.5
Unesite vrednost za z: 4.8
Vrednost funkcije f je 241.35464197224226
5
Razgranata struktura
Naredbe koje omogućuju promenu redosleda izvršavanja naredbi
programa zovu se naredbe prelaska. Prema načinu na koji se
obrazuje prelazak u programu, ove naredbe se dele na:
Naredbe bezuslovnog prelaska omogućuju prelazak iz jednog
dela programa na bilo koju izvršnu naredbu u istoj programskoj
jedinici.
Naredbe uslovnog prelaska omogućuju grananja u programu,
tako da se pri izvršavanju programa prolazi samo kroz jednu od
mogućih grana. Ovakva programska struktura zove se
razgranata struktura. Broj grana u razgranatoj strukturi može
biti različit (dve, tri ili više), što zavisi od naredbe prelaska
kojom se ostvaruje grananje u programu.
9
If iskaz
Sintaksa if-else strukture ima oblik
if (uslov) {
B1
}
else {
B2
}
10
6
Primer
Napisati program kojim se izračunava vrednost
funkcije
Na izlazu štampati rezultat oblika
Za uneto X = xxx.xxx dobija se Y = xxx.xxx.
0. xx,
0, xx,xy
11
12
7
package informatika;
import java.io.*;
public class IfElseStruktura {
public static void main(String[] args) throws Exception{
double x, y;
BufferedReader ulaz = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Unesite vrednost za x: ");
x = Double.parseDouble(ulaz.readLine());
if (x >= 0)
y = x;
else
y = -x;
System.out.println("Za uneto X = " + x + " dobija se Y = " + y);
}
}
13
Izlazni rezultati programa
Unesite vrednost za x: -26.3
Za uneto X = -26.3 dobija se Y = 26.3
14
8
Logičko if
if (uslov) {
B1
}
15
Primer
Napisati program za izračunavanje vrednosti funkcije sa
vrednostima x, y, p i q
)))q,pmin(,ymax(,xmin()q,p,y,x(f
16
9
17
package informatika;
import java.io.*;
public class IfStruktura {
public static void main(String[] args) throws Exception {
BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Unesite vrednost za x: ");
int x = Integer.parseInt(ulaz.readLine());
System.out.print("Unesite vrednost za y: ");
int y = Integer.parseInt(ulaz.readLine());
System.out.print("Unesite vrednost za p: ");
int p = Integer.parseInt(ulaz.readLine());
System.out.print("Unesite vrednost za q: ");
int q = Integer.parseInt(ulaz.readLine());
int f = (p < q) ? p : q;
if (y > f)
f = y;
if (x < f)
f = x;
System.out.println("Vrednost funkcije f je " + f);
}
}
18
10
Izlazni rezultati programa
Unesite vrednost za x: 10
Unesite vrednost za y: 8
Unesite vrednost za p: 6
Unesite vrednost za q: 5
Vrednost funkcije f je 8
19
If-else-if struktura
Sintaksa if-else-if strukture ima oblik
if (uslov1) {
B1
}
else if (uslov2) {
B2
}
else {
B3
}
20
11
Primer
Napisati program kojim se izračunava vrednost funkcije
Za unetu vrednost argumenta x štampati vrednost argumenta i
vrednost funkcije.
3.x
3,x2
2,x
1,x
2,
x,
y
21
22
12
package informatika;
import java.io.*;
public class UgnjezdenoIf {
public static void main(String[] args) throws Exception{
double x, y;
BufferedReader ulaz = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Unesite vrednost za x: ");
x = Double.parseDouble(ulaz.readLine());
if (x < 2)
y = x;
else if (x < 3)
y = 2.0;
else
y = x - 1;
System.out.println("Za uneto X = " + x + " dobija se Y = " + y);
}
}
23
Izlazni rezultati programa
Unesite vrednost za x: 2.5
Za uneto X = 2.5 dobija se Y = 2.0
24
13
Switch iskaz
Sintaksa switch strukture ima oblik
switch(izraz) {
case konstanta1:
blok iskaza
break;
case konstanta2:
blok iskaza
break;
…
default:
blok iskaza
}
25
Primer
Napisati program kojim se štampaju dani u nedelji na osnovu
unete celobrojne vrednosti.
26
14
package informatika;
import java.io.*;
public class SwitchIskaz {
public static void main(String[] args) throws Exception {
BufferedReader ulaz = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Unesite vrednost za dan: ");
int dan = Integer.parseInt(ulaz.readLine());
switch (dan) {
case 1:
System.out.println("Ponedeljak");
break;
case 2:
System.out.println("Utorak");
break;
case 3:
System.out.println("Sreda");
break;
27
case 4:
System.out.println("Cetvrtak");
break;
case 5:
System.out.println("Petak");
break;
case 6:
System.out.println("Subota");
break;
case 7:
System.out.println("Nedelja");
break;
default:
System.out.println("Ne postoji takav dan");
}
}
}
28
15
Izlazni rezultati programa
Unesite vrednost za dan: 5
Petak
Unesite vrednost za dan: 18
Ne postoji takav dan
29
Ciklična struktura
Ako se niz naredbi u programu može izvršiti više puta u toku
izvršavanja programa, tada se kaže da ove naredbe
obrazuju cikličnu strukturu.
Među naredbama koje čine cikličnu strukturu mora postojati
bar jedna naredba takva da omogućava izlazak iz ciklusa.
Uslov pod kojim se izlazi iz ciklusa zove se izlazni kriterijum
ciklusa. Ako je izlazni kriterijum broj ponavljanja ciklusa,
tada se ciklus zove brojački ciklus. Ako je izlazni
kriterijum dostignuta tačnost u procesu računanja, tada se
ciklus zove iterativni ciklus.
30
16
Iterativni ciklusi
Kod ove vrste ciklusa kriterijum za izlazak iz ciklusa je
dostignuta tačnost u procesu računanja.
Iterativni ciklusi se najčešće koriste pri programiranju
iterativnih numeričkih postupaka.
Za realizaciju iterativnih ciklusa koristi se while i do-
while struktura sa osnovnom razlikom u broju
prolaza kroz petlju.
31
While petlja
Sintaksa while petlje ima oblik
while (uslov) {
B
}
32
17
Do-while petlja
Sintaksa do-while petlje ima oblik
do {
B
} while (uslov);
33
Primer Napisati program za iterativno rešavanje sistema jednačina
koristeći sledeće formule:
Iterativni proces prekinuti kada se ispune uslovi
i .
Na ulazu je data vrednost za i početne vrednosti za i . Na izlazu štampati
rešenja sistema jednačina.
Zadatak rešiti koristeći:
while petlju,
do-while petlju.
03y2x
01x2xy3x4
2
2
.2
3xy,1)1y3(x
2
1x n
1nnn1n
n1n xx
n1n yy
0x
0y
34
18
35
package informatika;
import java.io.*;
public class WhilePetlja {
public static void main(String[] args) throws Exception {
BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Unesite vrednost za epsilon: ");
double eps = Double.parseDouble(ulaz.readLine());
System.out.print("Unesite vrednost za x0: ");
double x0 = Double.parseDouble(ulaz.readLine());
System.out.print("Unesite vrednost za y0: ");
double y0 = Double.parseDouble(ulaz.readLine());
double x1 = 0.5 * Math.sqrt(x0 * (3 * y0 - 1) + 1);
double y1 = Math.sqrt((x0 + 3) / 2);
while (Math.abs(x1 - x0) > eps || Math.abs(y1 - y0) > eps) {
x0 = x1;
x1 = 0.5 * Math.sqrt(x0 * (3 * y0 - 1) + 1);
y0 = y1;
y1 = Math.sqrt((x0 + 3) / 2);
}
System.out.println("Resenja sistema jednacina su x = " + x1 + " i y = " + y1);
}
}
36
19
Izlazni rezultati programa
Unesite vrednost za epsilon: 1.0E-6
Unesite vrednost za x0: 1.2
Unesite vrednost za y0: 3.4
Resenja sistema jednacina su x = 1.0549039785010301 i
y = 1.423886333014488
37
38
20
package informatika;
import java.io.*;
public class DoWhilePetlja {
public static void main(String[] args) throws Exception {
BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Unesite vrednost za epsilon: ");
double eps = Double.parseDouble(ulaz.readLine());
System.out.print("Unesite vrednost za x0: ");
double x0 = Double.parseDouble(ulaz.readLine());
System.out.print("Unesite vrednost za y0: ");
double y0 = Double.parseDouble(ulaz.readLine());
double x1 = 0.5 * Math.sqrt(x0 * (3 * y0 - 1) + 1);
double y1 = Math.sqrt((x0 + 3) / 2);
do {
x0 = x1;
x1 = 0.5 * Math.sqrt(x0 * (3 * y0 - 1) + 1);
y0 = y1;
y1 = Math.sqrt((x0 + 3) / 2);
} while (Math.abs(x1 - x0) > eps || Math.abs(y1 - y0) > eps);
System.out.println("Resenja sistema jednacina su x = " + x1 + " i y = " + y1);
}
}
39
Izlazni rezultati programa
Unesite vrednost za epsilon: 1.0E-6
Unesite vrednost za x0: 1.2
Unesite vrednost za y0: 3.4
Resenja sistema jednacina su x = 1.0549039785010301 i
y = 1.423886333014488
40
21
Brojački ciklusi
Kod brojačkih ciklusa kriterijum za izlazak iz ciklusa je
broj ponavljanja ciklusa.
Vrlo česta greška pri programiranju ovih ciklusa je da
se programski ciklus ponavlja jedanput manje nego
što je to potrebno.
Za realizaciju brojačkog ciklusa koristi se for petlja.
41
For petlja
Sintaksa for petlje ima oblik
for (inicijalizacija; uslov; iteracija) {
telo ciklusa
}
pri čemu je I brojač (kontrolna ili ciklusna promenljiva),
m1 početak brojanja, m2 kraj brojanja, a m3 korak
brojanja.
42
22
For petlja
U zavisnosti od parametra m3 postoji:
brojanje unapred (primenjuje se inkrement brojača)
for (i = 1; i < 10; i += 2)
System.out.println(i);
i brojanje unazad (primenjuje se dekrement brojača)
for (i = 10; i > 1; i -= 2)
System.out.println(i);
43
Brojački u iterativni ciklus
44
23
Primer
Izračunati vrednost funkcije
Za x = 1,00(0,2)2,00. Izlazna lista neka izgleda
X F(X)
x.xx xxx.xx
Program napisati:
a) pomoću while ciklusa,
b) pomoću for ciklusa.
3 3( ) 41,926 1 xf x x xe
45
46
24
package informatika;
import java.text.DecimalFormat;
public class IterativniCiklus {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("###,##0.00");
System.out.println("\tX\tF(X)");
double f, x = 1.0;
while (x <= 2.0) {
f = 41.926 * Math.sqrt(1 + Math.pow(x, 3))
+ Math.pow(x, 1.0 / 3.0) * Math.exp(x);
System.out.println("\t" + df.format(x) + "\t" + df.format(f));
x += 0.2;
}
}
}
47
package informatika;
import java.text.DecimalFormat;
public class BrojackiCiklus {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("###,##0.00");
System.out.println("\tX\tF(X)");
double f, x;
for (x = 1.0; x <= 2.0; x += 0.2) {
f = 41.926 * Math.sqrt(1 + Math.pow(x, 3))
+ Math.pow(x, 1.0 / 3.0) * Math.exp(x);
System.out.println("\t" + df.format(x) + "\t" + df.format(f));
}
}
}
48
25
Izlazni rezultati programa
X F(X)
1.00 62.01
1.20 72.78
1.40 85.66
1.60 100.44
1.80 116.95
2.00 135.09
49
Dozvoljene i nedozvoljene kombinacije
brojačkog ciklusa
50
26
Primer
Napisati program za izračunavanje vrednosti sume
1 13
3,5.
3
n n
i jj
jS
j
51
52
27
package informatika;
import java.io.*;
public class UgnjezdenoFor {
public static void main(String[] args) throws Exception {
double s = 0, s1;
BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Unesite vrednost za n: ");
int n = Integer.parseInt(ulaz.readLine());
for (int i = 1; i <= n; i++) {
s1 = 0;
for (int j = 1; j <= n; j++) {
if (j != 3)
s1 += (j + 3.5) / (j - 3.0);
}
s += s1;
}
System.out.println("Dobijena vrednost sume je " + s);
}
}
53
Izlazni rezultati programa
Unesite vrednost za n: 50
Dobijena vrednost sume je 3404.838248562508
54
28
Naredbe skoka
naredba break:
break; // prekida tekuću prog. strukturu
break <labela>; // prekida strukturu obeleženu labelom
naredba continue:
continue; // prekida tekuću iteraciju aktuelne petlje
continue <labela>; // isto, samo za petlju obel. labelom
naredba return:
return; // kraj metoda tipa void
return (<izraz>); // kraj metoda koji nešto vraća
naredba throw:
throw (<izraz>); // baca izuzetak
55