PROGRAMIRANJE Izrada programa – od definisanja problema do izvršnog koda ETŠ "Nikola Tesla" Niš, Milena Krstić PROGRAMIRANJE Program je skup naredbi nanizanih strogo utvrđenim redosledom, čijim se izvršenjem obavlja željeni posao. Čovek koji piše program naziva se programer, a postupak nastanka programa naziva se programiranje. ETŠ "Nikola Tesla" Niš, Milena Krstić Koraci programiranja: PROGRAMIRANJE podrazumeva NIZ aktivnosti pomoću kojih se pošavši od zadatog problema dolazi do željenog rezultata. PRIMEDBA: česta GREŠKA je poistovećivanje aktivnosti programiranja i kodiranja Kodiranje je samo jedan od koraka u procesu programiranja koji podrazumeva pevođenje rešenog problema u zapis na nekom od programskih jezika ETŠ "Nikola Tesla" Niš, Milena Krstić Koraci programiranja: Zadavanje i analiza problema – koje ulazne podatke koristimo i koje izlazne podatke trebamo dobiti (npr. učitati poluprečnik kruga i ispisati opseg i površinu – ulazni podatak je r, a izlazni O i P ) Skiciranje rešenja - rastavljanje problema na jednostavne celine (korake) (poluprečnik ne sme biti negativan, O=2r, P=r2, prikaži O i P) Sastavljanje algoritma – rečima ili grafički opisati rešenje problema Kodiranje – zapis u izabranom programskom jeziku (moramo znati sintaksu i semantiku) ETŠ "Nikola Tesla" Niš, Milena Krstić Koraci programiranja: Prevođenje – izvorni program prevodi se u mašinski jezik. Prevodilac pronalazi “pravopisne” – SINTAKSNE greške koje ispravljamo dok ne dobijemo ispravno napisan program. Testiranje – pronalaženje logičkih – SEMANTIČKIH grešaka zbog pogrešno napisanog algoritma. Izrada dokumentacije – uz sam program koji mora biti pregledno napisan prilaže se tehnička i korisnička dokumentacija Održavanje programa ETŠ "Nikola Tesla" Niš, Milena Krstić ALGORITAM Ime dolazi od arapskog matematičara Mohamed ibn Musa al Horezmi (Muhamed sin Muse iz Horezma) koji je živeo u IX veku. On je razradio i u knjizi opisao pravila za izvođenje aritmetičkih operacija sa brojevima u dekadnom obliku. Original je izgubljen, ali postoji prevod na latinski gde kod svakog pravila piše Dixit Algorizmi (Algorizmi je govorio), od čega je kasnije ostalo Algorithmus, Algoritam. Do sredine XX veka naziv algoritam koriste samo matematičari Sa pojavom računara taj pojam se širi i u druga područja ETŠ "Nikola Tesla" Niš, Milena Krstić ALGORITAM Algoritam je opis radnji (skup koraka) koje treba izvršiti u navedenom redosledu da bi se dobilo rešenje postavljenog zadatka. Mnoge radnje u svakodnevnom životu izvršavamo prema unapred naučenom algoritmu (npr. slanje SMS poruke mobilnim telefonom): 1. 2. 3. 4. 5. 6. Uključiti mobilni telefon Pritisnuti taster za otvaranje menija Na meniju izabrati slanje poruka Napisati poruku Upisati telefonski broj primaoca poruke Pritisnuti taster za slanje poruke ETŠ "Nikola Tesla" Niš, Milena Krstić ALGORITAM Algoritmi se mogu predstaviti rečima govornog (prirodnog) jezika tzv. PSEUDOKÔD ili grafički – DIJAGRAM TOKA Pseudokôd je tobožnji program (grč. pseudos ̶ laž) jer nije napisan u programskom jeziku, već se sastoji od kratkih izraza na govornom jeziku koji opisuju i ukratko objašnjavaju pojedine zadatke algoritma. Grafički prikaz (dijagram toka, eng. flowchart) pregledno prikazuje algoritam, omogućava analizu problema, lakšu proveru i traženje boljih postupaka rešavanja zadatka. ETŠ "Nikola Tesla" Niš, Milena Krstić ALGORITAM Prolaz kroz rasksnicu: Pseudokod: 1. 2. 3. 4. Dijagram toka: Stati ispred semafora Motriti na semafor Ako je upaljeno zeleno svetlo nastaviti vožnju Ako nije upaljeno zeleno svetlo i dalje stajati i motriti na semafor Početak Stajati u mestu i motriti semafor Zeleno svetlo? DA Nastaviti vožnju Kraj ETŠ "Nikola Tesla" Niš, Milena Krstić NE KODIRANJE Kodiranje je proces zapisivanja algoritamskih koraka na izabranom programskom jeziku. Kodiranjem se dobija izvorni kôd (engl. Source code) programa koji se čuva na disku, u datoteci sa odgovarajućom ekstenzijom - za kôdove pisane u C-u .c, na primer zadatak1.c Procesor razume samo binarni zapis, a ne i izvorni kôd zapisan na nekom od viših programskih jezika koji koriste komande uzete iz engleskog jezika. long fakt(int n) { long i,s=1; for(i=1;i<=n;i++)s*=i; return s; } ETŠ "Nikola Tesla" Niš, Milena Krstić PREVOĐENJE Izvorni kod se pomoću posebnih programa prevodi u nizove nula i jedinica – izvršni kôd. Prevodilac tokom prevođenja proverava postojanje SINTAKSNIH GREŠAKA u izvornom kôdu (engl. compile-time errors). Sintaksa jezika podrazumeva pravila pisanja tj. gramatiku jezika, a sintaksne greške su gramatičke greške ETŠ "Nikola Tesla" Niš, Milena Krstić PREVOĐENJE Nakon toga programer će pokušati ispraviti sve navedene greške i ponovo prevesti izvorni kôd – sve dok prevođenje koda ne bude bez grešaka. Prevođenjem izvornog dobija se datoteka objektnog kôda (engl. object code), koja se lako može prepoznata po tome što obično ima nastavak .o ili .obj (u našem primeru bi to bilo zadatak1.obj). Po načinu prevođenja postoje dve vrste programskih prevodioca: KOMPILATORI i INTERPRETATORI ETŠ "Nikola Tesla" Niš, Milena Krstić PREVOĐENJE Interpretator – naredbu po naredbu izvornog programa prevodi u trenutku izvršenja programa. Pri svakom izvršenju programa ponavlja se prevođenje što utiče na sporost (dBase, GWBASIC). Kompilator – prevodi viši jezik u mašinski samo jednom. Kasnije se pokreće samo prevedeni *.exe oblik programa (Turbo Pascal, C). Za razliku od interpretatora, kod kompilatora su izvorni i prevedeni program nezavisni - menjanje izvornog programa ne utiče na izvršnu (prevedenu) verziju programa. Kompajlirani programi mogu se izvršavati bez izvornog programa. Time što se korisniku daje samo prevedena verzija programa (.exe ili .com) zaštićen je trud programera od neovlaštenih prepravki ili krađe delova programa. ETŠ "Nikola Tesla" Niš, Milena Krstić PREVOĐENJE Kod prevođenja kompilacijom Proces prevođenja je vremenski nezavisan od procesa izvršenja Pri izvršenju programa, u radnoj memoriji se nalazi samo izvršni (.exe) kod programa Program se prevodi samo kada se napravi neka izmena u izvornom kodu Bolje karakteristike po pitanju brzine izvršavanja Bolje karakteristike po pitanju prenosivosti sa jedne na drugu mašinu ETŠ "Nikola Tesla" Niš, Milena Krstić Kod prevođenju interpretacijom POVEZIVANJE Nakon što su ispravljene sve greške uočene prilikom prevođenja i kôd ispravno preveden, pristupa se povezivanju objektnih kôdova u izvršni. U većini slučajeva objektni kôd dobijen prevođenjem izvornog kôda treba povezati sa postojećim bibliotekama (engl. libraries). Biblioteke su datoteke u kojima se nalaze već prevedene gotove funkcije ili podaci. Korišćenjem biblioteka se izbegava ponovno pisanje vrlo često korišćenih operacija (npr. biblioteka matematičkih funkcija poput trigonometrijskih, eksponencijalnih i slično) ETŠ "Nikola Tesla" Niš, Milena Krstić POVEZIVANJE Ukoliko povezivač tokom povezivanja uoči neku nepravilnost, ispisaće poruku o greški i onemogućiti generisanje izvršnog koda (engl. link-time errors). Nakon što se isprave sve greške, kôd treba ponovno prevesti i povezati. Uspešnim povezivanjem dobija se izvršni kôd sa ekstenzijom .exe (u našem primeru bi to bilo zadatak1.exe). ETŠ "Nikola Tesla" Niš, Milena Krstić TESTIRANJE Međutim, takav izvršni kôd još uvek ne garantuje da će program raditi ono što ste zamislili, tj. može se desiti da ima tzv. SEMANTIČKE (smislene) greške: Na primer, može se dogoditi da program radi pravilno za neke vrednosti podataka, ali da se za druge ponaša nepredvidivo. Ovo su greške pri izvođenju (engl. run-time errors) Ili, program funkcioniše, ne događaju se greške, ali se dobijaju pogrešni (neočekivani) rezultati. U ovom slučaju radi se o logičkim greškama (logical errors – bugs). Logičke greške je najteže pronaći. ETŠ "Nikola Tesla" Niš, Milena Krstić TESTIRANJE Da bi program bio potpuno korektan, programer mora da istestira program da bi uočio i ispravio te greške. U slučaju otkrivanja greške ponavlja se ceo postupak u lancu: ispravljanje izvornog koda prevođenje povezivanje testiranje ETŠ "Nikola Tesla" Niš, Milena Krstić TESTIRANJE Za ispravljanje grešaka pri izvođenju, programeru na raspolaganju stoje programi za otkrivanje grešaka (engl. debugger). Radi se o programima koji omogućavaju prekid izvođenja izvršnog koda programa koji testiramo na unapred zadatim naredbama, izvođenje programa naredbu po naredbu, ispis promena trenutnih vrednosti pojedinih promenljivih u programu. Debagovanje omogućava lagano lociranje i ispravljanje grešaka u programu. ETŠ "Nikola Tesla" Niš, Milena Krstić ETŠ "Nikola Tesla" Niš, Milena Krstić RAZVOJNO OKRUŽENJE Izvorni kôd se može pisati u bilo kom programu za uređivanje teksta (engl. text editor). Većina današnjih prevodilaca i povezivača se isporučuje kao celina zajedno s ugrađenim programom za upisivanje i ispravljanje izvornog kôda. Te programske celine poznatije su pod nazivom integrisano razvojno okruženje (engl. integrated development environment IDE). ETŠ "Nikola Tesla" Niš, Milena Krstić Pitanja: Šta je program? Da li je programiranje isto što i pisanje programskog koda i ako nije, u čemu je razlika? Navedi korake u izradi programskog projekta. Šta je algoritam? Kako se može predstaviti algoritam? Kako se zove programski alat za unos programskog koda u računar? Kako se zove datoteka u kojoj se pamti tako uneti kod? Zašto se programi pisani na nekom od programskih jezika moraju prevoditi pre izvršenja? Objasni razliku između kompilatora i interpretatora. Kako se zove kod dobijen prevođenjem programa? Koja je funkcija linkera? Šta se dobija posle linkovanja? Koja je funkcija punioca? U kojoj fazi izrade programa se pronalaze sintaksne, a u kojoj semantičke greške? Koje je greške nalakše otkloniti? Objasni razliku između runtime grešaka i logičkih grešaka? Možeš li da smisliš primer...??? Kako se zovu programski alati koji pomažu pronalaženje semantičkih grešaka? Šta označava skraćenica IDE? Da li znaš neki primer za IDE. ETŠ "Nikola Tesla" Niš, Milena Krstić