POJAM ALGORITMA
Komunikacija - razmjena činjenica ili ideja između ljudi, temelji se na zajedničkom dogovoru o značenju fizičkih simbola (podataka) koji opisuju pojmove, činjenice ili ideje
I nformacije = značenja pridružena podacima (oplemenjeni podatak, podataka koji za nas nešto znači)
upotreba podataka:
· prenos informacija
· pohrana informacija za buduću upotrebu
· obrada informacija (izvođenje novih informacija na temelju postojećih podataka prema određenim pravilima)
pravila za rad s podacima nazivamo operacijama
podaci i operacije su osnovne komponente računanja
Računanje (postupak rješavanja) čini konačan skup operacija primijenjen na konačan skup podataka s ciljem rješavanja postavljenog zadatka
Algoritam je računanje koje rješava postavljeni zadatak
Obilježja algoritma
· popis operacija (uputa) koje opisuju izvršavanje nekog postupka izražen na jasan i logičan način
· operacije iz popisa (koraci algoritma) moraju biti neposredno izvedive
· nedvosmislen
· završava u konačnom broju koraka
dobro oblikovani strukturirani olakšava čitljivost i razumljivost postupka računanja
Osnovne strukture pri konstrukciji algoritma
slijedna: koraci se izvršavaju u slijedu jedan iza drugoga, a pojedini korak se izvršava samo jedanput
izborna: izabire se i izvršava samo jedna od ponuđenih mogućnosti
ponavljanja: izvođenje jednog ili više koraka se ponavlja
Primjeri jednostavnih algoritama
1) zamjena točka na automobilu
1. podigni automobil
2. skini točak
3. ako rezervni točak nije pripremljen, onda ga pripremi
4. namjesti rezervni točak
5. spusti automobil
· podjela na jednostavne, lako razumljive i dobro poznate korake ovisi o izvođaču algoritma
· postupak se izvršava propisanim redoslijedom, jedan iza drugoga
· nakon konačnog broja koraka slijedi željeni rezultat
2) obračun telefonskih troškova
Sastavite algoritam za izračunavanje telefonskih troškova na kraju mjeseca, ako su poznati broj potrošenih telefonskih impulsa, cijena jednog impulsa te iznos telefonske pretplate. U iznos telefonske pretplate uračunato je 100 impulsa.
početno poznati podaci:
· broj potrošenih telefonskih impulsa (impulsi)
· cijena jednog impulsa (cijena)
· iznos telefonske pretplate (pretplata)
· broj impulsa uračunan u pretplatu (100)
željeni rezultantni podatak:
· iznos ukupnih telefonskih troškova (trošak) impulsi, cijena, pretplata, iznos su varijable
varijabla je veličina koja poprima vrijednosti iz skupa dopuštenih vrijednosti koje u toku izvršavanja odredi algoritam.
100 je konstanta
konstanta je veličina stalne vrijednosti
zakonitost za izračunavanje troška:
višak = impulsi - 100
trošak = pretplata + višak * cijena
algoritam
1. unesi podatke: impulsi, cijena, pretplata
2. ako impulsi > 100 onda višak <- impulsi - 10
inače višak <- 0
3. trošak <- pretplata + višak * cijena
4. ispiši rezultat: trošak
1. pridruživanje vrijednosti varijablama
2. pravilo zaključivanja:
ako je uvjet zadovoljen (da/ne)
onda izračunaj (da)
inače izračunaj (ne)
operacija pridruživanja <- varijabli s lijeve strane znaka pridruživanja pridružuje se vrijednost izraza s desne strane znaka pridruživanja.
3. izračunavanje zakonitosti
4. ispis vrijednosti varijable
Dijagram toka
dijagram toka pruža pregledniji prikaz algoritma korištenjem standardnih grafičkih simbola
Pojam programa
program - algoritam prilagođen za izvođenje na računalu
programiranje - pisanje programa
programski jezik - sredstvo izražavanja programa
- služi za:
opis zadatka
opis postupka rješavanja
opis zadatka - "što?": opis polaznih podataka, rezultata i njihovih međusobnih zakonitosti, relacija
opis postupka rješavanja - "kako?": redoslijed primjene zakonitosti, relacija
Strukturirano programiranje
- sistemski pristup programiranju:
1. deklaracija podataka - popis varijabli i njihovih tipova. tip podatka utvrđuje skup dopuštenih vrijednosti varijable
2. izvedbeni dio - redoslijed izvođenja koraka algoritma
- struktura programa izražena programskim jezikom pascal
program ..... - zaglavlje programa
.....
..... - deklaracija podatak
.....
begin (početak)
....
..... - izvedbeni dio
.....
end. (svršetak)
- algoritam za obračun telefonskih troškova zapisan u programskom jeziku pasca
program telefon;
var impulsi, visak: integer;
pretplata, cijena, trosak: real;
begin
readln(impulsi, cijena, pretplata);
if impulsi > 100 then visak := impulsi - 100
else visak := 0;
trosak := pretplata + visak * cijena;
writeln(' trosak iznosi ', trosak:6:2, ' KM')
end.
komentar:
- iskazi, naredbe se završavaju znakom tačka zarez
var naziv: tip;
integer - varijable impulsi i visak poprimaju vrijednosti iz skupa cijelih brojeva (integer)
real - varijable pretplata, cijena i trosak poprimaju vrijednosti iz skupa decimalnih, realnih brojeva (real)
readln( ....... ) - pročitaj red vrijednosti s ulazne jedinice računara (tastatura, datoteka) i pridruži ih varijablama navedenima unutar zagrada
if ... then ... else - struktura uslova
ako ... onda ... inače
:= - operacija pridruživanja
+, - , *, / - aritmetički operatori
writeln( ....... ) - ispiši tekst komentara i vrijednosti varijabli na standardnu izlaznu jedinicu računara (zaslon, datoteka, printer)
' ........ ' - zapis teksta koji će biti neposredno ispisan
varijabla:n:m - format ispisa varijable:
n = ukupni broj mjesta za ispi
m = broj decimalnih mjesta
Priprema programa za izvođenje
1. unos izvornog programa u računar
2. prevođenje i kreiranje izvršnog oblika
3. izvođenje programa
Unos izvornog programa u računar
- prenos teksta, izvornog oblika, programa s papirnatog medija u memoriju računala te njegova pohrana na magnetski medij (disk) pomoću programa za uređivanje tekst
datoteka skup povezanih podataka koji čine logičnu cjelinu (program, mjerni podaci, dokument, slika, zvučni zapis, video zapis)
Prevođenje i kreiranje izvršnog oblika
- program izražen programskim jezikom u izvornom obliku čitljivom čovjeku, program jezičnog prevodioca prevodi u ciljni, računaru čitljivi - čovjeku nečitljivi, izvedbeni oblik
- izbor programa za prevođenje ovisi o programskom jeziku u kojem je zapisan izvorni program
Izvođenje programa
- punjenje programa u memoriju i pokretanje programa pomoću upravljačkih naredbi operativnog sistema računara
- operativni sistem - program za upravljanje radom računara, nadzor programsko-sklopovskih sredstava računara i komunikaciju s čovjekom
- nakon pokretanja programa, zapisuju se, putem ulazne jedinice, traženi polazni podaci, a računar na temelju programa izračunava rezultantnu vrijednost koju ispisuje na izlaznoj jedinici računara
- algoritam za obračun telefonskih troškova zapisan u programskom jeziku c
main()
int impulsi, visak;
float pretplata, cijena, trosak;
scanf("%f %d %f", &pretplata, &impulsi, &cijena);
if (impulsi > 100)
visak = impulsi - 100;
else visak = 0;
trosak = pretplata + visak*cijena;
printf("Trosak iznosi %f KM", trosak);
If else izjava u C++
Znamo kako se putem if izjave može kontrolisati da li će se jedna ili više izjava izvršiti ili neće. Nekad postoje situacije gdje želimo da se neka izjava izvrši ako je ispunjen neki uvjet, dok u suprotnom želimo izvršiti neku drugu izjavu. Vratimo se primjeru prijave nekog korisnika na OS. Ako korisnik unese ispravnu lozinku za svoj korisnički račun, onda štampamo poruku Dobrodosli korisnice, a ako pak pogriješi onda štampamo Unijeli ste pogresnu lozinku.
cin>>lozinka;
if (lozinka=="gimnazija")
cout<<"Dobrodosli korisnice.";
else
cout<<"Unijeli ste pogresnu lozinku.";
U ovom primjeru provjeravamo da li je korisnik unio lozinku gimnazija. U slučaju da jeste štampamo poruku dobrodoslice, a u suprotnom obavjestavamo korisnika o pogrešci.Dakle if else izjava bira između dvije alternativne akcije, a na osnovu logičkog izraza unutar zagrade.Ako je logički izraz tačan izvršava se if dio, a ako je netačan onda se izvršava else dio.
Važno: Ne stavljajte iza if i else izjava tačku zarez.
Ako ovakvu grešku napravite u if dijelu, kompajler neće kompajlirati izvorni kod, što je dobro, jer će vas natjerati da razmislite i ispravite grešku! Ako ovo uradite u else dijelu onda se dešava potpuno neželjen efekat. Naime kako kompajler zna da iza else izjave ne ide tačkazarez, on misli da taj tačka zarez u stvari pripada izjavi koja se izvršava u else dijelu. Kako između else izjave i tog tačka zareza nema ništa, kompajler u else dijelu izvršava praznu izjavu tj. ne čini ništa!
Šta ako u if ili else dijelu želimo izvršiti više od jedne izjave? Recept je isti kao i ranije za if izjavu, dakle stavimo sve te izjave unutar vitičastih zagrada, tj. napravimo blok izjavu. Evo kako:
cin>>lozinka;
if (lozinka=="gimnazija"){
cout<<"Dobrodosli korisnice.\n";
cout<<"Kako ste?";
}
else{
cout<<"Unijeli ste pogresnu lozinku.\n";
cout<<"Ne mozete raditi sa racunarom.";
}
I u ovom primjeru provjeravamo da li je korisnik unio lozinku gimnazija. U slučaju dajeste štampamo poruke dobrodoslice, a u suprotnom obavještavamo korisnika o pogrešci i saopštavamo mu da ne može raditi.Ovdje i u if i else dijelu izvršavamo 2 izjave.
Šta će izbaciti sledeći dio koda?
if(0)
cout<<“0 je tacno”;
else
cout<<“0 je netacno”;
Šta će se desiti kada vrijednost 0 u prethodnom primjeru, zamijenimo sa:
a) 1
b) -1
c) 2
Kod if else izjave možemo birati između dvije alternative, i izvršavamo samo jednu od njih, ovisno o istinitosti logičkog izraza koji kontroliše ifelse izjavu. Šta ako trebamo birati između tri, četiri ili više opcija? U tom slučaju imamo višestruke if else if
izjave. Ovi else if izrazi se evaluiraju dok jedan od njih ne bude tačan, a nakon toga evaluacija logičkih izraza prestaje. Recimo da provjeravamo kolika je temperatura zraka i želimo ispisati neki komentar vezan uz temperaturu zraka. Imati samo dva komentara u stilu Napolju je toplo i Napolju je hladno i nije baš najbolje rješenje, pa obična if else izjava nije za ovo prikladna. Višestruki izbor je puno, puno bolja opcija...
temp=14;
if (temp<=-10)
cout<<"Napolju je uzasno hladno!";
else if (temp <=0)
cout<<"Napolju je jako hladno!";
else if (temp <=15)
cout<<"Napolju je hladno!";
else if (temp <=28)
cout<<"Napolju je prijatno!";
else if (temp <=35)
cout<<"Napolju je jako toplo!";
else
cout<<"Napolju je uzasno toplo!";
Program provjerava da li je temp ≤ 10, a kako nije,prva izjava se neće izvršiti. Dalje provjerava da li je temp ≤ 0, a kako je 14>0 ni druga izjava se neće izvršiti. Sada program dolazi do dijela koji provjerava da li je temp ≤15, i kako je ovaj izraz istinit doći će do izvršavanja izjave koja ispisuje Napolju je hladno. Poslije toga program napušta ovu strukturu, tj. ne provjerava naredne else if izjave. Kada bi program i dalje provjeravao, ispisao bi sve preostale izjave, što bi dovelo do ispisa izjava koje su suprotne, kao npr. Napolju je hladno i Napolju je užasno toplo. .
Treba primjetiti da u else dijelu nema nikakve provjere, to je zbog toga što se ovaj dio izvršava samo kada svi testovi prije ovog dijela padnu, kao npr. za temperaturu 39o.
Napišite program koji rješava opštu kvadratnu jednačinu. Opšta kvadratna jednačina ima oblik:
ax2+ bx + c = 0 i ima dva rješenja
x1,2 = (− b ± Vb2− 4ac ) / 2a
#include <iostream>
using namespace std;
int main(){
double a,b,c,D;
cout<<"Unesi koef. kvadratne jednacine a,b i c: ";
cout>>a>>b>>c;
D=b*b-4*a*c;
if (a==0)
cout<<"Data jednacina je linearna";
else if (D<0)
cout<<"Jednacina nema rjesenja";
else if (D==0)
cout<<"Rjesenje je: "<<-b/(2*a);
else{
cout<<"Prvo rjesenje je: "<<(-b+sqrt(b*b-4*a*c))/(2*a);
cout<<endl;
cout<<"Drugo rjesenje je: "<<(-b-sqrt(b*b-4*a*c))/(2*a);
}
system("PAUSE");
return(0);
}
Ovdje je višestruka if else if izjava odličan izbor. Ako bi korisnik unio 0 za koeficijent a, onda u formuli za rješenje imamo problem jer dijelimo sa 0. Kako takva jednačina i nije kvadratna, nego linearna, program to i ispisuje. Ako je a≠0 onda je podkorjena veličina b24ac,koja se često zove diskriminanta(D), ta koja odlučuje koliko rješenja jednačina ima. Ako je D<0, onda se korjen ne može izvaditi, pa nema rješenja.Ako je D=0 ima samo jedno rješenje, a za D>0, što radi else dio,ima dva rješenja.
1 .Napiši program koji će oduzimati dva broja u skupu prirodnih brojeva..
Primjer1:
Unesi prvi broj: 5
Unesi drugi broj: 2
Razlika 5-2 je 3.
Primjer2:
Unesi prvi broj: 6
Unesi drugi broj: 10
Razlika 6-10 ne postoji u skupu N.
Primjer3:
Unesi prvi broj: 1000
Unesi drugi broj: 1
Razlika 1000-1 je 999
2. Napiši program koji će za različite starosne dobi ispisivati sljedeće komentare:
01
beba
212
dijete
1318
adolescent
1925
blago vama
2060
zrela osoba
60i
više stara osoba
Primjer 1:
Unesi godine: 7
Dijete
Primjer 2:
Unesi godine: 17
adolescent