Algoritmi i programiranje Osnovne programiranja i nizovi znakova Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
Algoritmi i programiranje
Osnovne programiranja i nizovi znakova
Prof. dr. sc. Tonči Carić
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Sadržaj
– Osnovni pojmovi
– Algoritam
– Program
– Programski jezici
– Pogreške kod programiranja
– Znakovi i nizovi znakova
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Računalno sklopovlje su uređaji
od kojih se sastoji računalo
– Središnja jedinica za obradu • CPU (engl. “Central Processing Unit”)
– Glavna i pričuvna memorija
– Ulazne i izlazne jedinice • Tipkovnica, miš, DVD pogon, pisač
– Pod pojmom hardver (engl. “hardware”) podrazumijeva se računalno sklopovlje
Osnovni pojmovi
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Pohrana podataka
– U računalu isključivo pretvorbom podataka u bitove koji mogu poprimiti vrijednost 1 ili 0
– Grupu od 8 bitova nazivamo “BAJT” (engl. “byte”)
– 1 [B] je dostatan za pohranjivanje jednog slovno-brojčanog znaka u ASCII kôdu
• ASCII kôd je do nedavno bio najčešći način pohranjivanja znakova
– Skup od standardnih 128 znakova
– Npr. slovo A je 65, ili binarno 01000001
• Za kodiranje znakova se danas u svim jezicima, pa i u našem jeziku, koristi Unicode standard
Osnovni pojmovi
Pohrana broja 77 u 1 bajt Pohrana slova A u 1 bajt
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Strojni jezik
– Jedini jezik koji može razumjeti mikroprocesor
– Proces izvršavanja jedne naredbe strojnog jezika • Dohvat (engl. “fetch”), faza dohvaćanja naredbe iz glavne
memorije u među-memoriju mikroprocesora
• Dekodiranje (engl. “decode”), faza dekodiranja naredbe u kojoj se priprema izvršenje mikro kôda za dohvaćenu naredbu
• Izvršavanje (engl. “execute”), faza izvršavanja dohvaćene naredbe strojnog jezika
– Naredbe duljine 8, 16, 32, 64 bita • Ovisi o operativnom sustavu i mikroprocesoru računala
Osnovni pojmovi
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Jezični prevoditelji – Prevođenje programa zapisanih u višim programskim jezicima u
program izražen strojnim programskim jezikom
• Ključne riječi viših programskih jezika -> mnemonici strojnog jezika
– Postoje dvije izvedbe jezičnih prevoditelja:
• Tumači naredbi (engl. “interpreter”) koji prevode i istovremeno izvršavaju naredbe (Python)
• Prevoditelji programa (engl. “compiler”) koji prevođenje vrše u više faza i generiraju izvršni kôd u strojnom jeziku
– Npr. u obliku (EXE) datoteke u programskom jeziku (C#)
Osnovni pojmovi
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Izvorni i ciljni kôd – Izvorni kôd predstavlja niz naredbi čiji slijed
programer osmišljava kako bi računalo obavilo određenu zadaću
– Ciljni kôd dobiva se nakon prevođenja izvornog kôda prevodiocem
• Kategorije programske podrške – Sistemska programska podrška predstavlja skupinu
programa koja se brine za izvedbu osnovnih funkcionalnosti računala kao npr. operativni sustav
– Aplikacijska programska podrška predstavlja skupinu programa koji omogućavaju vršenje pojedinog skupa zadataka kao npr. Microsoft Word
Osnovni pojmovi
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Integrirano razvojno okruženje IDE (engl. “Integrated Development Environment”)
– Specijalizirani programski paket
• Uređivač teksta prilagođen pisanju programa
• Prevoditelj programa (engl. “compiler”)
• Alate za testiranje programa i lociranje pogrešaka – Izvješće o pogrešci
– Kratke upute za ispravak pogreške
– Često namijenjeni za više programskih jezika
• MS Visual Studio -> C#, Visual Basic, Cpp
Osnovni pojmovi
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Algoritam je skup precizno i jednoznačno definiranih logičkih koraka, koji u konačnom vremenu rješavaju programski zadatak
• Moraju biti definirani početni objekti koji pripadaju nekoj klasi objekata na kojima se obavljaju operacije – Kao ishod algoritma pojave se završni objekti ili rezultati
– Konačni broj koraka i svaki korak opisan instrukcijom
– Obavljanje je algoritamski proces
• Uporabiv, ako se dobije rezultat u konačnom vremenu
• Primjeri nedopuštenih instrukcija – Izračunaj 5/0
– Uvećaj x za 6 ili 7
Algoritam
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Naziv algoritam potječe od Abu Ja'far Mohammed ibn
Musa al Khowarizmi
– أبو جعفر محمد بن موسى الخوارزمي
– Muhamed, otac Jafarov, sin Muse iz Khwarizma
– Rođen u Khwarizmu, danas Khiva, Uzbekistan, oko 780. g.
– Umro u Bagdadu, oko 850. g.
– Jedan od 10 najcjenjenijih matematičara svih vremena
Algoritam Povijest razvoja
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Khowarizmi vjerovao da se bilo koji matematički problem može raščlaniti na korake, tj. niz pravila
• U latinskom prijevodu knjige (12. stoljeće) ispred svakog pravila piše – Dixit Algorizmi - rekao je Al Kowarzimi
– Algoritam glasi
• U početku algoritmom se nazivaju samo pravila računanja s brojevima, kasnije i pravila obavljanja ostalih zadataka u matematici
• U XX stoljeću, pojavom računala, pojam se proširuje na računarstvo, a zatim i na druga područja
• Pravila za postizanje željenog rezultata
Algoritam Povijest razvoja
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Algoritam mora biti djelotvoran – U konačnom vremenu može se dobiti rezultat koristeći olovku i
papir – Primjeri
• Zbrajanje cijelih brojeva je djelotvorno • Zbrajanje realnih brojeva nije jer se može pojaviti broj s beskonačno
mnogo znamenki
• Sa znanjem programiranja i uz razumijevanje problema koji se rješava, moguće napisati djelotvoran (engl. “effective”) algoritam
• Djelotvoran i učinkovit su u hrvatskom jeziku gotovo sinonimi – “effective” -> onaj koji daje rezultat, djelotvoran – “efficient” -> uspješan, učinkovit (s obzirom na utrošene resurse -
vrijeme, procesor, disk, memoriju) • Množenje se može svesti na ponavljanje zbrajanja – djelotvorno, ali nije
učinkovito! • Rješavanje velikog skupa linearnih jednadžbi Kramerovim pravilom -
djelotvorno, ali nije učinkovito!
• Za sažeti opis složenijih algoritama se koristi pseudokôd
Algoritam Značajke
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Program je opis algoritma koji u nekom programskom jeziku jednoznačno određuje što računalo treba napraviti
• Računalni program predstavlja skup naredbi koje računalo slijedi kako bi izvršilo neku zadaću – Programe uvijek koristimo kada koristimo i računalo
– Pod pojmom programska podrška ili softver (engl. “software”) podrazumijeva se program
• Zadaci, rješavanje, izračunavanje – Numerički – sustav linearnih algebarskih jednadžbi,
korijeni polinoma, integracija funkcije
– Simbolički (nenumerički) – uređivanje podataka, traženje i zamjena riječi u tekstu, izračunavanje najkraćeg puta, prevođenje programa
Program
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Programiranje je – Postupak raščlanjivanja postavljenog zadatka u
jednostavnije podzadatke • Koji se na kraju postupka pojednostavljenja mogu izraziti
– Osnovnim operacijama naredbi programskog jezika
• LOGIČKE POGREŠKE ne sprječavaju program da se
pokrene i izvodi, ali su najčešći uzrok neispravnih rezultata programa
• Pseudokôd je neformalni jezik bez pravila sintakse, koji se ne prevodi niti izvodi
• Dijagram toka grafički prikazuje i opisuje korake koje izvodi program
Program Programiranje
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Programski zadatak je jednoznačno
određena funkcionalnost koju program mora
obaviti
– Jasno zadani zadatak je preduvjet upotrebljivog rješenja i raščlambe zadatka na manje cjeline
– Bitno razraditi što je poznato, što se traži i koja je veza između poznatih i traženih varijabli
– Poznate vrijednosti su ulazni podaci
• Dolaze preko ulaznih jedinica računala
– Tražene vrijednosti se računaju tijekom izvršavanja programa
• Prikazuju se na izlaznim jedinicama računala
Program Programski zadatak
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• VARIJABLE programa su “varijabilni” podaci u glavnoj memoriji računala i nalaze se u ispisno/upisnoj memoriji (RAM)
• Svim podacima unutar programa se pristupa preko varijabli
• VARIJABLA sadrži vrijednosti ulaznih ili izlaznih veličina / podataka ili međurezultate
• Program tijekom izvršavanja može u bilo kojem koraku izmijeniti vrijednost VARIJABLE
Program Varijable
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Programski jezik je jezik za pisanje programa koje računalo zna i može izvršiti
• Osnovna podjela
– Niži programski jezici
• Orijentirani sklopovlju
• Naredbe binarni kôd ili kratki menomonici
• Za programiranje potrebno znanje o sklopovlju
– Viši programski jezici
• Orijentirani programeru (ljudima)
• Naredbe ključne riječi – Mijenjaju složenije procedure za obradu
• Za programiranje nije potrebno znanje o sklopovlju
Programski jezici
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Podjela viših programskih jezika
– Sekvencijalni
• BASIC, Fortran
– Proceduralni
• Pascal, C
– Funkcijski
• Lisp, Erlang, ML
– Objektno orijentirani
• Java, C++, C#
Programski jezici
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Glavne kategorije naredbi
– Obrada ulaznih podataka
• Unos podataka u računalo
– Obrada izlaznih podataka
• Ispis podataka na zaslonu ili drugoj izlaznoj jedinici
– Matematička obrada podataka
• Aritmetičke, trigonometrijske i logičke funkcije
– Naredbe grananja
• Upravljanje tijekom izvršavanja programa
– Petlje/iteracije
• Ponavljanje istih naredbi za istovjetnu obradu veće količine podataka
Programski jezici
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Kod programiranja i izvođenja programa javljaju se pogreške (engl. “bugs”)
– Pogreške kod prevođenja programa
– Pogreške kod izvođenja programa
– Logičke ili semantičke pogreške
• Traženje i ispravljanje pogrešaka (engl. “debugging”)
– Otkrivanje pogrešaka pokusima
• Testni skup ulaznih podataka
• Usporedba točnog rezultata i rezultata izvršavanja programa
Pogreške kod programiranja
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Pogreške se pojavljuju tek kod izvođenja programa
• Kod programskih jezika koji prevode i tumače program pogreške se javljaju tek kod tumačenja
• Pogreške kod izvođenja programa se nazivaju iznimkama (engl. “exceptions”) i objavljuju se unutar dijaloškog okvira preko kojeg kazuju što se dogodilo i kako se u tom slučaju program ponaša
Pogreške kod programiranja
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Logičke ili semantičke pogreške
• Pogreška u programu koja proizlazi iz krivog ili višeznačnog logičkog slijeda programa
• Semantičku grešku unosi programer pogrešnim ili nedovoljno jednoznačnim algoritmom i nije je moguće strojno otkloniti
• Uz postojanje logičke pogreške, program se prevodi i izvodi bez pogreške, ali se dobije netočni rezultat
• Na izvođenje predani program nije program koji se je želio napisati
Pogreške kod programiranja
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Nakon pojave pogreške
– Predvidi se uzrok pogreške
– Izvedu se izmjene u programu
– Program se ponovo predaje na prevođenje i izvođenje
• Uz ispravnu pretpostavku može se predvidjeti rezultat izmjene i ispraviti pogreška
• Uvijek postoji mogućnost pogreške pa se programiranje može promatrati kao postupak postepene izmjene programa radi ispravljanja pogrešaka dok se ne postigne traženi rezultat
Pogreške kod programiranja Otklanjanje pogrešaka
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Pohrana jednog znaka
– Tip podatka “char”
– Zauzima 16 bita ili 2 byte
– Prikaz jednog znaka UNICODE tablice
• Svaki znak kodiran pripadnim cijelim brojem
– Moguća konverzija formata znaka u broj
• char -> int, char -> long, char -> double, …
– Konverzija formata broja u znak nije moguća
– Primjer deklaracije/inicijalizacije char varijable
char znak;
znak = ‘Z’;
• Vrijednost se upisuje unutar jednostrukih navodnika
Znakovi i nizovi znakova
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Pohrana niza znakova
– Riječi, rečenice, poruke
– Ključna riječ “string”
static string nizZnakova;
– Veličina ovisi o broju pohranjenih znakova
– UNICODE -> 2 byte po jednom znaku
– Posebna skupina metoda za obradu varijabli ovog tipa
• Pretprocesorska direktiva: “using System.Text;”
– Primjer deklaracije/inicijalizacije string varijable
string znakovi;
znakovi = “Niz znakova!”;
Znakovi i nizovi znakova
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Znakovi su indeksirani prema rednom mjestu spremanja u memoriju
– Prvi znak je na poziciji 0
• Dohvaćanje pojedinog znaka
Znakovi i nizovi znakova
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Metode koje olakšavaju rad sa varijablama tipa string
Znakovi i nizovi znakova
Contains
StartsWith
EndsWith
Trim
Remove
Replace
ToLower
ToUpper
IndexOf
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
– Metoda “Contains” • Vraća logičku vrijednost “true” ukoliko znakovni niz
sadrži zadani podniz
• C# razlikuje znakove velikih i malih slova
Znakovi i nizovi znakova
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Metode “StartsWith” i “EndsWith”
– Vraćaju logičku vrijednost ”true” ukoliko znakovni niz počinje / završava sa zadanim podnizom
Znakovi i nizovi znakova
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Metoda “Trim“
– Uklanja razmake (bjeline) s početka i kraja znakovnog niza ukoliko oni postoje
Znakovi i nizovi znakova
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Metoda “Remove”
– Uklanja određen broj znakova počevši od zadane pozicije
– Prvi argument označava poziciju od koje se znakovi uklanjaju, a drugi argument broj znakova koje treba ukloniti
– Metodu je moguće pozvati bez drugog argumenta čime se od zadane pozicije uklanjaju svi znakovi do kraja stringa
Znakovi i nizovi znakova
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Metoda “Replace”
– Zamjenjuje sve znakove ili podnizove u string-u sa zadanim znakom ili podnizom
Znakovi i nizovi znakova
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Metoda “ToLower”
– Pretvara velika u mala slova
• Metoda “ToUpper“
– Pretvara mala u velika slova
Znakovi i nizovi znakova
ZITS :: Algoritmi i programiranje :: Osnovne programiranja i nizovi znakova © 2013 Carić, Ivanjko
• Metoda “IndexOf”
– Vraća poziciju prvog pojavljivanja zadanog znaka ili podniza u znakovnom nizu
– Postoji više varijanti pozivanja, npr.
Znakovi i nizovi znakova