Professional Documents
Culture Documents
Algoritam
Precizno opisan nain rjeenja nekog problema Jednoznano odreuje to treba napraviti Moraju biti definirani poetni objekti koji pripadaju nekoj klasi objekata na kojima se obavljaju operacije Kao ishod algoritma pojavi se zavrni objekt(i) ili rezultat(i). Konani broj koraka; svaki korak opisan instrukcijom Obavljanje je algoritamski proces
Krastavce i kopar oprati i posloiti u iste staklenke U 2 l vode dodati ocat, eer, sol i papar Zakuhati uz mijeanje Vruu otopinu uliti u staklenke Staklenke zatvoriti celofanom i gumicom Sloiti staklenke u iroki lonac napunjen vodom do grla staklenki Zagrijati vodu do 80 stupnjeva. Ako toplomjer nije raspoloiv, zagrijavati dok se s dna ne ponu dizati mjehurii zraka Staklenke izvaditi, obrisati i sloiti na police u smonicu Prije kuanja priekati bar 24 sata Zavrni objekti:
kiseli krastavci
Napisati dekadske brojeva tako da znamenke jedinica budu potpisane jedna ispod druge, znamenke desetica i sve ostale znamenke takoer. Ako u manjem broju ne postoji znamenka koje u veem ima, zamisliti da na tom mjestu pie 0. Zamisliti broj koji emo nazvati prijenos, i postaviti ga na vrijednost 0 Za svako teinsko mjesto, krenuvi s desna na lijevo, uiniti
Zbrojiti dvije odgovarajue znamenke i prijenos Na odgovarajue teinsko mjesto rezultata upisati znamenku jedinica tako dobivene sume Broju prijenos dodijeliti vrijednost znamenke desetica tako dobivene sume
Algoritam
Instrukcije moraju biti izvedive i jednoznane Primjeri za nedoputene instrukcije:
izraunaj 5/0 uveaj x za 6 ili 7
Uinkovitost:
U konanom vremenu moe se dobiti rezultat koristei olovku i papir.
Primjeri:
Zbrajanje cijelih brojeva je uinkovito Dijeljenje realnih brojeva nije jer se moe pojaviti broj s beskonano mnogo znamenki, npr. 10/3 = 3.3333333... Algoritam postaje uinkovit tek ako se broj znamenki unaprijed ogranii
Algoritam
Algoritam je uporabljiv ako se dobije rezultat u konanom vremenu Vrijeme izvoenja mora biti "razumno"
igraa aha tako da ispita sve mogue posljedice poteza, zahtijevao bi milijarde godina na najbrem zamislivom raunalu. Zato? 20 moguih prvih poteza bijelog 20 moguih prvih poteza crnog > 20 moguih drugih poteza bijelog > 20 moguih drugih poteza crnog itd... Za 10 poteza svakog igraa, barem 2020 kombinacija ~ 1026 Kad bi se 1 kombinacija analizirala 1 s, to je 3170979198376 godina!
Procedura
Procedura Algoritam
Postupak koji ima sva svojstva kao i algoritam, ali ne mora zavriti u konanom broju koraka jest raunalna procedura. Primjeri za proceduru:
Operacijski sustav raunala Ureiva teksta
Algoritmi i programi
Program - opis algoritma koji u nekom programskom jeziku jednoznano odreuje to raunalo treba napraviti. Programiranje proces opisivanja algoritma nekim od programskih jezika Algoritmi + strukture podataka = PROGRAMI (Wirth) kako osmisliti algoritme kako strukturirati podatke kako formulirati algoritme kako verificirati korektnost algoritama kako analizirati algoritme kako provjeriti (testirati) program Postupci izrade algoritama nisu jednoznani te zahtijevaju i kreativnost. Inae bi ve postojali generatori algoritama. Znai da se (za sada?) gradivo ovog predmeta ne moe u potpunosti algoritmizirati. Koristit e se programski jezik C. Za saeti opis sloenijih algoritama moe se koristiti pseudokod.
Kodiranje
Kodne liste Translatori pseudokoda u kod Pretprocesori Generatori kda
PRIMJER
proitaj tri realna broja ispii proitane brojeve odredi najvei broj ispii naeni broj
PRIMJER - nastavak
Pseudokod koji koristi uobiajene simbole
proitaj (x,y,z) ispii (x,y,z) {odredi najvei broj} ako je x > y tada ako je x > z tada rez := x inae rez := z inae ako je y > z tada rez := y inae rez := z ispii (rez) kraj
PRIMJER - nastavak
Unapreenje prethodnog rjeenja proitaj (x,y,z) ispii (x,y,z) {odredi najvei broj} rez := z ako je x > y tada ako je x > z rez := inae ako je y > z rez := ispii (rez) kraj
tada x tada y
Tablica traga
x 1 4
y -2 1
z 4 -2
rez 4 -2 4
-2
-2 4
PRIMJER - nastavak
Struktogram
po etak pro itaj x,y,z ispii x, y, z rez := z ne y > z da rez := y ne da rez := x x > y x > z ne da
ispii rez
kraj
PRIMJER - nastavak
Kd u programskom jeziku C
#include <stdio.h> void main() { float x, y, z, rez; scanf("%f %f %f", &x, &y, &z); printf("%f %f %f \n", x, y, z); /* odredi najvei broj */ rez = z; if ( x > y ) { if ( x > z) rez = x; } else { if ( y > z) rez = y; } printf("%f \n", rez); }
C je jezik slobodnog formata (nema pravila koja propisuju stil pisanja) mjesto poetka naredbe u retku je proizvoljno mogue i poeljno umetanje praznina i praznih redova svaka izvrna naredba mora zavravati znakom ; doputeno je stavljanje vie naredbi u istom retku. Npr: int i,n; printf("Unesite n: "); scanf("%d", &n);
Kljune rijei
kljune rijei se piu malim slovima. Npr: do for while C razlikuje velika i mala slova. Npr: sum Sum SUM
ili
int main() { programski blok return 0; }
Struktura C programa
/* Racunanje sume el. polja */ #include <stdio.h> #define MAX 5 float suma (int n); float dat[MAX]={2.5,2.3,0.,1.,5.}; void main() { int n; float sum; printf("Unesi broj elemenata"); scanf("%d", &n); sum = suma(n); printf("%9.2f\n", sum); }
komentar direktive pretprocesoru deklaracija glob.varijabli poetak glavne funkcije po. bloka main funkcije deklar. lokalnih varijabli
tijelo programa
Struktura C potprograma
float suma(int n) { int i; float s = 0; for(i=0; i<n; i++) s += dat[i]; return s; }
poetak bloka funkcije suma poetak bloka suma dekl. lokalnih varijabli
Komentari
izbjegavati komentar oblika: printf("Unesi n: ");/* Ispis na zaslonu */ zato to program postaje neitkiji
nije doputeno koristiti komentar unutar komentara: /* definicija /* funkcije */ sume */
Kljune rijei
Pretprocesorske naredbe
#include <stdio.h> ukljuuje u program prije prevoenja standardno zaglavlje <stdio.h> koje sadri definicije tipova i funkcijskih prototipova (na primjer printf, scanf i druge).
#define MAX 5 definira simboliku konstantu MAX i pridjeljuje joj vrijednost (npr. 5) to je veoma pogodno kod parametrizacije programa
Varijable
Openito: promjenljiv podatak (lat.variabilis-promjenljiv) U programiranju: podatak smjeten u memoriji raunala, poznate veliine, koji se moe mijenjati i kojemu je dodijeljeno ime Simboliki se prikazuje pravokutnikom uz koji stoji ime
...
...
Varijable
x1
pripremni_dio_studija
x1.1 maticni broj
novi+datum
velika i mala slova se razlikuju (imena varijabli i funkcija se obino piu malim slovom, imena simbolikih varijabli velikim) duljina moe biti proizvoljna (znaajno prvih 31 znakova) kljune rijei se ne smiju koristiti za imena varijabli ili funkcija
- smanuje raspon cjelobrojnih vrijednosti koje varijabla moe sadravati - poveava raspon cjelobrojnihvrijednosti koje varijabla moe sadravati - dozvoljava pridruivanje pozitivnih i negativnih vrijednosti - dozvoljava pridruivanje samo pozitivnih vrijednosti
Cjelobrojne konstante
Konstante pisane u dekadskoj notaciji:
0xFFFFFFFF
Konstante bez predznaka piu se s U ili u na kraju 5645U 3978u 0x7EBU 0xFFFFFFFFU
Realne konstante
1. 2f 1.L 2.34 9e-8 8.345e+25 2.34F -1.34e5f 2.34L -2.5e-37L double float long double
Operatori i izrazi
Pridruivanje vrijednosti: u pseudokodu simbol := postaje u C-u simbol = npr. a := 7 a = 7; to znai naredba ? k = k + 1;
1
Primjer pridruivanja: Zadano je X=14.5 i Y= -9.9 . U programu treba ispisati vrijednosti X i Y, a zatim u X staviti vrijednost od Y, a u Y staviti vrijednost od X. Ispisati ponovo X i Y.
ZamjenaVarijabli
x y p void main () { ??? ??? ??? float x, y, p; 14.5 ??? ??? x=14.5; 14.5 -9.9 ??? y= -9.9; printf ("x=%f, y=%f\n", x, y); /* zamijeniti vrijednosti x i y */ 14.5 -9.9 14.5 p=x; -9.9 -9.9 14.5 x=y; -9.9 14.5 14.5 y=p; printf ("Nakon zamjene: x=%f, y=%f\n", x, y); }
Ispis na zaslonu
Operator
+ * / %
Znaenje
zbrajanje oduzimanje mnoenje dijeljenje cjelobrojni ostatak (modulus)
Izraz
a a a a a + * / % b b b b b
Rezultat
13 7 30 3 1
Izraz
a a a a a + * / % b b b b b
Rezultat
14.5 10.5 25.0 6.25 pogreka
Izraz
r k k r r = = = = = f f f i g + + + + + i; g; i; j; j;
Kako to da ima 10 tonih znamenaka?
Rezultat
32001.5 32001 32001 -2147483648.0 2147483648.0
Kada su operandi razliitog tipa, vri se automatska pretvorba u vei (vaniji) tip:
16-bitno raunalo:
short int unsigned short int long int unsigned long int float
double long double
32-bitno raunalo:
short int unsigned short int long int unsigned long int float double long double
1. * / % 2. + Ako u izrazu ima vie operatora jednakog prioriteta, izraunavaju se slijeva nadesno. Na primjer:
2 + 3 / 2 * 4 - 5 * 6 % 8
2 + 2 + 6 0 1 * 4 4 30 % 8 6 6
Struktogram
poetak deklariraj cijeli broj i, j, k deklariraj realni broj sredin proitaj brojeve i, j i k izraunaj (i + j + k) / 3
svretak
#include <stdio.h> Nain prekida znakovnog void main () { niza i nastavak u novom int i, j, k; retku float sredin; scanf ("%d %d %d", &i, &j, &k); sredin = (i + j + k) / 3.; printf ("Aritmetika sredina brojeva %d, %d i" " %d iznosi %f", i, j, k, sredin); }
1 2 4
Ispis na zaslonu:
Poetak
cijeli broj x, y, rez x=8 y = 15 rez =10 + y / x rez Kraj
#include <stdio.h> /* primjer zadavanja cjelobrojnih konstanti*/ void main ( ) { int x, y, rez; /*oktalno zadan cijeli broj*/ x = 010; /*heksadecimalno zadan cijeli broj*/ y = 0xF; rez = 10 + y / x; printf("Rezultat = %d\n", rez);
}
unsigned int 32 (16) unsigned short int 16 long long int signed long int unsigned long int 32 32 32 32
Meunarodni standard: ASCII kod (American Standard Code for Information Interchange)
Znakovne konstante
'A' '\x41' '\101' '\a' znak iz ASCII tablice heksadecimalni zapis slova A oktalni zapis slova A simboliki zapis za znakove koji se ne mogu tiskati (Escape-sekvenca) znak \ ("backslash") jednostruki navodnik dvostruki navodnik
Primjer: Ispisati neke znakove ASCII tablice kao broj i kao znak
IspisAsciiZnakova
#include <stdio.h> void main( ) { char x, y, p, q; x = 'A'; y = x + 32; p = '\n'; q = ' '; printf("%d %c %d %c %d %c\n", x, x, y, y, '0', '0'+1); printf("%d %c %d %c\n", p, p, q, q); }
65 A 97 a 48 1 10 32
Matematika logika
Osnovni pojam: logiki sud Moe biti istinit ili laan Primjeri:
1 < 2 je istinit 3 = 4 je laan
Osnovni ili atomni sud (atom): istinitost ili lanost utvruje se neposrednim zakljuivanjem Sloeniji sud tvori se formulama koje se sastoje od:
atoma logikih operatora zagrada
Konjunkcija
A 0 1 0 1 B 0 0 1 1 A B 0 0 0 1
S tri varijable
A(BC) A(BC) A(BC) A(BC) = = = = (AB)C (AB)C (AB)(AC) (AB)(AC) asocijativnost konjunkcije asocijativnost disjunkcije distributivnost konjunkcije distributivnost disjunkcije
Logika vrijednost
Odgovara vrijednosti logikog suda
DA ISTINITO TONO TRUE ili ili ili ili NE LANO POGRENO FALSE
U C-u ne postoji kljuna rije dok u nekim jezicima postoji poseban tip podataka tipa LOGICAL. U C-u se svaki tip podatka moe koristiti kao logiki.
TRUE FALSE <> = 0 0
Operator
== != > >= < <=
Znaenje
jednako razliito vee vee ili jednako manje manje ili jednako
Logiki izraz
1 2 5 6 7 7 == 1 != 2 + 2 > 6 >= 6 < 10 <= 6
Rezultat
1 1 0 1 1 0 (Istina) (Istina) (La) (Istina) (Istina) (La)
Logiki operatori
Operator
&& || !
Znaenje
(AND, I) (OR, ILI) (NOT, NE)
Logiki izraz
1 > 3 && 2 < 4 0 1 > 3 || 2 < 4 1 !(1 > 3) 1
Rezultat
(La) (Istina) (Istina)
Koja je vrijednost logikog izraza ako cjelobrojne varijable imaju slijedee vrijednosti x=5, y=5, z=100: !( x>y && x<z )||( z<1000 && z%10==0 )
0 0 1 1 1 1 1 0 1
Primjer: Napisati program koji e utvrditi jeli neki zadani cijeli broj djeljiv s 3 ili 7
Rjeenje u C-u
IspitivanjeDjeljivosti
#include <stdio.h> void main() { int x, t1, t2, test; scanf("%d", &x); t1 = (x - x/3*3) == 0; t2 = (x % 7) == 0; test = t1 || t2; printf("x = %d test = %d\n", x ,test); }
naredba_3 ...
Primjer
Programski zadatak: Pronai najvei od tri zadana broja Pseudokod koji koristi iskljuivo termine govornog jezika
proitaj tri realna broja ispii proitane brojeve odredi najvei broj ispii naeni broj
z tada := x z tada := y
Struktogram
poetak proitaj x,y,z ispii x, y, z rez := z ne y > z da rez := y ne da rez := x x > y x > z ne da
Kd u programskom jeziku C
NajveciOdTriBroja
#include <stdio.h> void main() { float x, y, z, rez; scanf("%f %f %f", &x, &y, &z); printf("%f %f %f \n", x, y, z); /* odredi najvei broj */ rez = z; if ( x > y ) { if ( x > z) rez = x; } else { if ( y > z) rez = y; } printf("%f \n", rez); }
#include <stdio.h> void main() { /* deklaracija varijabli */ int a1, a2, a3, b1, b2, b3; /* postavljanje poetnih vrijednosti */ a1 = 5; a2 = 2; a3 = 8;
if (a1 <= a2) { b1 = a1; b2 = a2; } else { b1 = a2; b2 = a1; } if (a3 < b1) { b3 = b2; b2 = b1; b1 = a3; } else { if (a3 < b2) { b3 = b2; b2 = a3; } else b3 = a3; } printf ("%d %d %d\n", b1, b2, b3);
b3
a1 2
a2 5
a3 8
b1 2
b2 5
b3
Rjeenje u pseudokodu
uitaj (a1,b1,a2,b2) ispii (a1,b1,a2,b2) izraunaj nazivnik izraza ako su pravci paralelni onda ispii poruku inae izraunaj x,y ispii (x,y) kraj
#include <stdio.h> void main () { float a1, a2, b1, b2, x, y, anaz; scanf ("%f %f %f %f", &a1, &b1, &a2, &b2); printf("a1=%f b1=%f a2=%f b2=%f\n", a1, b1, a2, b2);
/* izraunaj nazivnik izraza */ anaz = a1 - a2;
Ispis na zaslonu 1:
a1=1.000000 b1=2.000000 a2=3.000000 b2=4.000000 Nazivnik izraza: -2.000000 Koordinate sjecita su (-1.000000, 1.000000)
Ulazni podaci 2:
1 2 1.000001 3
Ispis na zaslonu 2:
a1=1.000000 b1=2.000000 a2=1.000001 b2=3.000000 Nazivnik izraza: -0.000001 Koordinate sjecista su (-1048576.000000, -1048574.000000)
Pravi rezultat: (-1000000, -999998)
uitani broj troznamenkast treba pronai srednju znamenku i ispisati proitani broj i naenu znamenku, a ako nije treba uz odgovarajuu poruku zavriti program.
proitaj cijeli broj x (x<100) (x>999) da ne
kraj programa
Realizacija u C-u
SrednjaZnamenka #include <stdio.h> void main ( ) { int x, rez; printf("Unesite troznamenkasti cijeli broj > "); scanf("%d",&x);
N logiki_izraz D niz_naredbi
U C-u
while(logiki_izraz) naredba ili while(logiki_izraz) { niz_naredbi }
PovrsinaKruga
#include <stdio.h> void main ( ) { float g, r=1.0f, pi=3.14159f; printf ("Unesite gornju granicu za r > "); scanf ("%f", &g); while ( (r <= g) && (r <= 20.0f)) { printf("%2.0f %10.7f\n", r, r*r*pi); r = r + 1; } }
niz_naredbi
logiki_izraz
N
Primjer: Izraunaj aritmetiku sredinu brojeva koji se redom itaju s tipkovnice sve dok njihova suma ne premai neku zadanu gornju granicu. uitaj gornju broja n := 0 s := 0 ponavljaj uitaj i s := s + n := n+1 dok ne bude s as := s / n tiskaj( s, n, granicu gg
> gg
as )
U C-u
for(i = poc; i <= kraj; i = i + k) naredba; ili for (i = poc; i <= kraj; i = i + k) { niz_naredbi }
PotencijeBroja2
#include <stdio.h> void main ( ) { short int i, x = 1; double y = 1.0; printf ( "%2d %12d %.16lf\n", 0, x, y); for( i = 1; i <= 16; i = i+1) { x = x*2; y = y/2; printf ( "%2d %12d %.16lf\n", i, x, y); } }
#include <stdio.h> void main () { int n, i; double fakt; scanf ("%d", &n); fakt = 1.; i = 1; while (i <= n) { fakt = fakt * i; i = i + 1; } printf ("%d! = %g\n", n, fakt); }
#include <stdio.h> void main () { int n, i; double fakt; scanf ("%d", &n); fakt = 1.; i = 1; do { fakt = fakt * i; i = i + 1; } while (i <= n); printf ("%d! = %g\n", n, fakt); }
ispii (n,fakt)
#include <stdio.h> void main () { int n, i; double fakt; scanf ("%d", &n); fakt = 1.; for (i = 1; i <= n; i = i + 1){ fakt = fakt * i; } printf ("%d! = %g\n", n, fakt); }
Rezultati testiranja
Ulaz: 0 1 5 10 100 150 170 171 Rezultat 0! = 1 1! = 1 5! = 120 10! = 3628800 100! = 9.33262e+157 150! = 5.71338e+262 170! = 7.25742e+306 Floating point error: Overflow.
Unarni operatori
Operator
+ sizeof (tip) ++ -~ ! * &
Znaenje
unarni plus unarni minus zauzee memorije pretvorba tipa uveavanje za 1 umanjenje za 1 inverzija bitova logiko ne indirekcija adresni operator
Primjer
+4 / 2 -5 * 3 sizeof( int ) (cast) (double) i ++i ili k++ --j ili k-int x = ~0xFFFF; !( 5 > 2 ) *p scanf(%d,&n);
Prefix oblik:
... i = 2; j = ++i;
i 2 3
j ? 3
... i = 2; j = --i;
i 2 1
j ? 1
Postfix oblik:
... i = 2; j = i++; i 2 3 j ? 2
... i = 2; j = i--;
i 2 1
j ? 2
Binarni operatori
Operator
* / % + << >> < > <= >= == != & ^ | && ||
Znaenje
mnoenje, dijeljenje zbrajanje, oduzimanje pomak bitova u lijevo pomak bitova u desno relacijski operatori operatori jednakosti binarno AND binarno iskljuivi ili binarno ukljuivo ili logiki AND i OR
Primjer
n = n << 2; n = n >> 1;
Binarni operatori
Primjer: IzdvajanjeBitova
#include <stdio.h> void main () { int a, i; do { scanf ("%d", &a); for (i = 31; i >= 0; i--) { printf ("%u", (((unsigned)a & (1 << i)) >> i)); } printf ("\n"); } while (a != 0); }
Skraeno pridruivanje
i j a b d a a a a a
= = = = = = = = = =
i j a b d a a a a a
+ * / % &
i j a b d a a a a a
Uvjetno pridruivanje
Primjer: U znak r pohraniti vrijednost 'Z' ako je znak c znamenka, a 'N' inae.