1 / 42

PROGRAMIRANJE - ZAKAJ IN VSAJ KAJ

PROGRAMIRANJE - ZAKAJ IN VSAJ KAJ. Podrobneje: glej Programiranje_zakaj_in_kaj.pdf. Zakaj neki programirati?. Danes je učenje programiranja povsem odveč in potrata časa. Za vse, kar želimo narediti z računalnikom, so na voljo ustrezna orodja. Znanje programiranja je odveč.

payton
Download Presentation

PROGRAMIRANJE - ZAKAJ IN VSAJ KAJ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PROGRAMIRANJE - ZAKAJ IN VSAJ KAJ Podrobneje: glej Programiranje_zakaj_in_kaj.pdf

  2. Zakaj neki programirati? • Danes je učenje programiranja povsem odveč in potrata časa. • Za vse, kar želimo narediti z računalnikom, so na voljo ustrezna orodja. • Znanje programiranja je odveč. • Programiranje je potrebno le kot zelo specialistično znanje skupinice strokovnjakov, ki pišejo programe, ki jih potem običajni uporabniki uporabljamo.

  3. Zakaj vseeno učenje programiranja • privajanje na algoritmični način razmišljanja. • nujna sestavina sodobne funkcionalne pismenosti. • z učenjem programiranja najlažje osvojimo ta način razmišljanja • omogoča nam branje navodil, postopkov (pogosto so v obliki "kvazi" programov, diagramov poteka) • za umno naročanje programske opreme • da znaš pravilno predstaviti problem, ki ga potem sprogramira nekdo drug. • "napredni uporabnik" se slej kot prej sreča s programiranjem • Makro ukazi v uporabniških orodjih • Administracija – delo z več uporabniki • dinamične spletne strani • popravljanje "tujih" programov • … • Več jezikov znaš, več veljaš • Zakaj med "tujimi" jeziki ne bi bil tudi kak programski jezik? • Če bi se tolikokrat "pogovarjali" s Kitajcem, kot se z računalnikom, se ne bi naučili nekega skupnega jezika, ki bi ga "obvladala" oba?

  4. Izbira programskega jezika • Za cilje prejšnje prosojnice • Precej nepomembna • Stvar osebnega okusa, okolja, dostopnosti, mode, ... • Za "pravo" programiranje • Okolje • Razvojna orodja • Vrsta problema • Skupni gradniki, enostaven prehod iz enega v drugi jezik

  5. Osnovni gradniki • Konstante • števila, nizi, logične vrednosti • Spremenljivke • Prireditev, izrazi • Branje in izpisovanje • Vejitev – pogojni stavek • Zanke • Funkcije, metode, podprogrami, ... • Objekti in objektno programiranje • Sestavljene podatkovne strukture

  6. Programski jeziki Od problema do programa

  7. Od problema do programa • Problem • Algoritem (postopek reševanja problema) • Zapis v programskem jeziku – uporaba ukazov, ki jih znamo izvesti • Prevajanje v obliko, ki jo razume procesor (izvajalec ukazov) • Izvajanje • Ali rešitev ustreza problemu?

  8. Od problema do programa • opredelitev problema • določitev tega, kaj vemo - katere podatke poznamo, • in tega, kaj želimo dobiti - rezultat; • načrtovanje postopka rešitve - algoritem; • zapis postopka rešitve v programskem jeziku; • Prevajanje v obliko, ki jo razume procesor • izvršitev programa na računalniku; • preverjanje programa (preverjanje pravilnosti rešitve)

  9. Zakaj programski jeziki? • Oseba A govori LE jezik blable, oseba B pa LE jezik blublu. Kako naj se A sporazume z B? • Lahko se A nauči jezika blublu in se potem pogovarjata v blublujščini. • Procesor “govori” le strojni jezik: 0000110101 in ne kaže nobene želje, da bi se naučil “naš” jezik • Torej se moramo mi naučiti strojni jezik • Programiranje v strojnem jeziku: zapleteno, polno napak, specifično za vsak procesor • Zapleten jezik: pogovor omogoči posebej izučen stokovnjak – prevajalec • Ta jezik blable prevede v jezik blublu. • Torej A govori blablajščino. Njegov govor prevajalec prevede v blublujščino. S tem oseba B razume, kaj je povedala oseba A. • Mi napišemo program v "našem" jeziku. Prevajalec ta naš jezik predeve v strojni jezik, ki ga procesor izvede.

  10. Zakaj programski jeziki? • Strokovnjakov, ki bi znali strojni jezik, je (razmeroma) malo, želja po “ukazovanju” procesorju (pogovarjanju z njim) (zelo) veliko • Avtomatsko prevajanje – prevajanje iz “našega” jezika v strojni jezik naj opravi program • Kaj je naš jezik? • Posebni programski jezik • Govorjeni jeziki

  11. Zakaj programski jeziki? • Zakaj pa bi potrebovali poseben programski jezik? • Navodila napišimo v pogovornem jeziku – program pa naj jih prevede v strojni jezik • Sestaviti tak prevajalnik: Izjemno kompleksna (trenutno praktično nemogoča) naloga – naravni jeziki so “preveč ohlapni”, da bi bilo avtomatsko prevajanje mogoče. • Ste že videli dva slavista, ki bi se strinjala glede tega, kako kaj napisati?

  12. Zakaj programski jeziki? • Vse kar se dogaja v računalniku, opravi procesor tako, da bere in piše po pomnilniku ter izvaja preproste aritmetične operacije. • Ustrezni ukazi: zbirna koda (angl. assembly code). • Težavno pisanje • pravilna uporaba pomnilniških lokacij, • zapomniti kaj je shranjeno na posameznih lokacijah, • Preveč elementarne operacije • http://haka.fmf.uni-lj.si/pra-racunalnistvo-1/lekcija01/index.html • Vmesni člen: “višji” programski jeziki • Nam se je enostavneje izražati v njih (pisati programe – zapise algoritmov) • Dovolj “natančni” (stroga sintaksa), zato mogoče sestaviti avtomatske prevajalnike

  13. Programski jeziki • Služijo za zapis algoritma • Najrazličnejši • Morajo omogočati avtomatsko pretvorbo v strojni jezik (jezik, ki ga razume procesor)

  14. Programski jeziki • Ogromno jezikov: • pascal, basic, cobol, Smalltalk, C#, ada, ... • Različne zvrsti • Generacije jezikov • Objektni (predmetni) jeziki, funkcijski jeziki, ... • Programski jezik java • Prevajalniki • Avtomatska pretvorba iz zapisa v jezik procesorja • Programi • Podatki: izvorna koda • Rezultati: prevedena koda • Kot za pripravo besedil obstajajo različni urejevalniki, tudi tu obstajajo različni prevajalniki • JAVAC, JBUILDER, VisualCafe, IBM Visual Age for Java, ... • Vsi zapis v programskem jeziku Java prevedejo v obliko, ki jo razume procesor (ni čisto res, a ...)

  15. Primer • Preberi stranico kvadrata in ga nariši • Algoritem: • Preberi število in si ga zapomni kot celo število v spremenljivko a • Nariši pravokotnik s stranicama a in a • Včasih bo potrebno korake algoritma še razgraditi, če posameznega koraka ni moč neposredno zapisati v programskem jeziku, včasih pa to sploh ne bo mogoče • JAVA: 1.korak: • podatek preberemo kot niz • Pretvorimo niz v število • pascal: 2.korak • Sam jezik ne pozna ukazov za risanje!

  16. Program v jeziku java – različica 1 import java.awt.*; import java.applet.*; import javax.swing.JOptionPane; public class KvadratBeri extends Applet { /* Narisali bomo kvadrat s stranico a */ public void paint (Graphics g) { int a; // Stranica kvadrata String str; // stranica prebrana kot niz str = JOptionPane.showInputDialog("Vnesi stranico kvadrata"); // V str preberemo stranico kvadrata a = Integer.parseInt(str); // iz str naredimo celo število // in ga shranimo v a // Narisemo kvadrat g.drawRect(10, 10, a, a); } }

  17. Program v jeziku java - različica 2 import java.awt.*; import javax.swing.*; class Kvadrat_Okno extends JFrame { /* Narisali bomo kvadrat s stranico a */ public void paint (Graphics g) { int a; // Stranica kvadrata String str; // stranica prebrana kot niz str = JOptionPane.showInputDialog("Vnesi stranico kvadrata"); // V str preberemo stranico kvadrata a = Integer.parseInt(str); // iz str naredimo celo število // in ga shranimo v a // Narisemo kvadrat g.translate(getInsets().left, getInsets().top); // da se "znebimo" zg. vrstice g.setColor(Color.black); // risemo s crno barvo g.drawRect(10, 10, a, a); } } public class KvadratOkno { public static void main(String[] s){ Kvadrat_Okno o = new Kvadrat_Okno(); o.resize(200, 200); // velikost okna o.show(); // prikaz } }

  18. Kako? • PRVI PROGRAM • Priprava izvorne datoteke (source code) • TextPad, NotePad, ... – KvadratBeri.java • Prevajanje (compile) • V DOS oknu se postavimo v imenik, kjer je datoteka KvadratBeri.java • JAVAC KvadratBeri.java • Izvedemo program • Priprava ustrezne datoteke s HTML, kjer kličemo ta program(ček) • APPLETVIEWER kvadrat.htm • Odpremo datoteko kvadrat.htm v brskalniku, ki "pozna Javo". • DRUGI PROGRAM • Priprava izvorne datoteke (source code) • TextPad, NotePad, ... – KvadratOkno.java • Prevajanje (compile) • V DOS oknu se postavimo v imenik, kjer je datoteka KvadratOkno.java • JAVAC KvadratOkno.java • Izvedemo program • JAVA KvadratOkno

  19. Narišimo trikotnik • podatki: velikost trikotnika (število vrstic) • rezultat: narisan polni trikotnik, sestavljen iz zvezdic (za n=3) * *** *****

  20. Postopek • izpišemo prvo vrstico, • izpišemo drugo vrstico, … • izpisujemo i-to vrstico • izpišemo ustrezno presledkov • v 1. vrstici n - 1, v 2. vrstici n - 2, … • v i-ti vrstici n - i • izpišemo ustrezno število * • v 1. vrstici 1, v 2. vrstici 3, v 3. vrstici 5, … • v i-ti vrstici 2*i - 1

  21. Program v jeziku C /* trikot. c */ #include <stdio.h> int main(void) { int i, j, velikost; printf("\n\n Velikost trikotnika: "); scanf("%d",&velikost); printf("\n\n\n"); for (i = 1; i <= velikost; i = i + 1) { /* izpis i - te vrstice */ for (j = 1; j <= velikost - i; j = j + 1) printf(" "); /* presledki */ for (j = 1; j <= 2 * i - 1; j = j + 1) printf("*"); /* zvezdice */ printf("\n"); /* v novo vrsto */ } return 0; }

  22. Program v pascalu program trikot; var i, j, velikost: integer; begin writeln; writeln; write(“Velikost trikotnika: ”); read(velikost); writeln; writeln; writeln; for i := 1 to velikost do begin { izpis i - te vrstice } for j := 1 to velikost – i do write(" "); { presledki } for j := 1 to 2 * i – 1 do write("*"); { zvezdice } writeln{ v novo vrsto } end end.

  23. Program v jeziku Java import javax.swing.*; public class Trikot { public static void main(String[] args) { int i, j, velikost; String vel_s; // Preberimo velikost vel_s = JOptionPane.showInputDialog("Velikost trikotnika:"); velikost = Integer.parseInt(vel_s); System.out.print("\n\n\n"); for (i = 1; i <= velikost; i = i + 1) { // izpis i-te vrstice for (j = 1; j <= velikost - i; j = j + 1) System.out.print(" "); /* presledki */ for (j = 1; j <= 2 * i - 1; j = j + 1) System.out.print("*"); /* zvezdice */ System.out.println(""); /* v novo vrsto */ } } }

  24. Od problema do programa • Problem • Ideja • Rešitev

  25. Od problema do programa • Problem • Ideja  algoritem • Rešitev  program v programskem jeziku

  26. Kaj je algoritem? • Algoritem jepostopek, ki nam korak za korakom pove, kako rešiti dani problem • Za dani problem v splošnem obstaja veliko algoritmov, ki določijo postopek, s katerim rešimo problem • Npr. obstaja veliko algoritmov za izračun produkta dveh števil: • Tabela poštevanke (primerno le za majhna števila) • Pisno množenje • Množenje z uporabo logaritmov. • Uporaba računala. • Uporaba postopkov vgrajenih v računalnik. • ...

  27. Kaj je algoritem • navodilo, kako opraviti določen postopek • KAJ storiti, KAKO to storiti • Končno zaporedje ukazov, ki, če jih ubogamo, opravijo neko nalogo

  28. Značilnosti algoritma • ima podatke • vrne rezultat (število, risba na zaslonu, izdelan izdelek, ...) • je natančno določen • se vedno konča • mogoče ga je opraviti

  29. Značilnosti algoritma • Algoritem moramo izraziti z jezikom, ki ga izvajalec "razume" (A postopek ni odvisen od izbora konkretnega jezika.) • Postavljeni problem mora biti rešljiv – torej tak, da se ga da rešiti na način korak za korakom. (npr. sestavi postopek, ki bo povedal, kateri je najlepši človek med navzočimi)

  30. Značilnosti algoritma • Algoritemje postopek, ki ga izvajamo korak za korakom in s katerim rešimo daniproblem. • Algoritem izvedeizvajalec (ki je bodisi človek, stroj, elektronska naprava). • Algoritem mora biti izražen v korakih, ki jih je izvajalec sposoben izvesti. • Algoritem se mora končati.

  31. Primer 1: razpoloviti ravno palico (1) • Splošneje: Poiskati srednjo točko daljice AB. • Algoritem: Srednjo točko daljice AB poiščeš takole: • Nariši dva sekajoča se kroga z enakim polmerom. Prvi naj ima središče v točki A in drugi v točki B. • Naj bosta C in D točki, kjer se kroga sekata. • Nariši ravno črto skozi C in D. • Naj bo E točka, kjer CD seka AB. • Končaj z odgovorom E. • Algoritem lahko izvede človek, če ima na voljo ustrezna orodja za risanje (npr. šestilo, ravnilo in pisalo).

  32. A A A A D E C B B B B Primer 1 (2) • Nariši dva sekajoča se kroga z enakim polmerom. Prvi naj ima središče v točki A in drugi v točki B. • Naj bosta C in D točki, kjer se kroga sekata. • Nariši ravno črto skozi C in D. • Naj bo E točka, kjer CD seka AB. • Končaj z odgovorom E.

  33. Primer 2: NSD (1) • Največji skupni delitelj dveh pozitivnih celih števil je največje celo število, ki deli obe števili, npr. NSD 77 in 21 je 7. • Evklidov algoritm za izračun NSD: Da izračunaš NSD pozitivnih števil minn: 1. Naj bopenakmin qenakn.2. Dokler qne deli točno (brez ostanka)p, ponavljaj: 2.1. Naj bopenakqinqenakostanku pri deljenju p s q(p modulo q).3. Končaj z odgovorom q. • Algoritem lahko izvede vsak, ki pozna osnovne operacije deljenja.

  34. Primer 2 (2) • Implementacija v pascalu: functionnsd (m, n: integer): integer; var p, r, q: integer; begin p := m; q := n;while (p mod q <> 0) dobegin r := p mod q; p := q; q := rend;nsd := q end; • razume ga "izvajalec, ki razume pascal" – npr."pascalski stroj"

  35. Naj bopenakmin qenakn. Dokler qne deli točno (brez ostanka)p, ponavljaj:Naj bopenakqinqenakostanku pri deljenju p s q(p modulo q). Končaj z odgovorom q. functionnsd (m, n: integer): integer; var p, r, q: integer; begin p := m; q := n;while (p mod q <> 0) dobegin r := p mod q; p := q; q := rend; nsd := q end; Primer 2 (3) Dva zapisa istega algoritma

  36. Primer 2 (4) • Obstaja seveda tudi drugačen algoritem: npr: • Naj bo p manjše od obeh števil m in n • Dokler p ne deli m in p • Zmanjšaj p za 1 • Končaj z odgovorom p

  37. Vprašanja • Kako zasnovati algoritem metode, strategije • Kako preveriti algoritemdokaz pravilnosti • Kako analizirati algoritemprostorska in časovna zahtevnost • Kako izraziti algoritem enoličnost,komu je namenjen, kaj so osnovna navodila, komentarji

  38. Učenje programskih jezikov • Učenje izražanja določenega algoritma • Zasnova algoritma: enostavna, enostavni problemi, ... • Učenje zapisovanja algoritma v dan jezik • "Skriti namen" učenja progr. jezika v šoli • Navajanje na algoritmični način razmišljanja

  39. Jezik • Sintaksa • Kako je sestavljen jezik • stavek, imeti napak polno. • Naravni jeziki: dokaj ohlapna sintaksa, z leti spreminjajoča se • Semantika • Kaj sintaktično pravilen stavek pomeni • Sintaktično pravilni stavki lahko povejo nesmisel. • Vsota števil 2 in 3 je 7. • Danes je zelo vroče vreme. • Konj ima zeleno nabrušen rep.

  40. Sintaksa • Pravila, kako mora biti sestavljen program • stroga pravila omogočajo avtomatično prevajanje • prevajalnik odkrije sintaktične napake • Napake v sintaksi: • javi prevajalnik • zgled

  41. Semantika • Sintaktično pravilen, a drugače napačen program class Narobe_semantika { // Sintaktično pravilen, a semantično napačen program public static void Main(string[] g){ System.Console.WriteLine("Vsota stevil 2 + 3 = " + 2 * 3); } } class Narobe_semantika2 { // Sintaktično pravilen, a semantično napačen program public static void Main(string[] g) { System.Console.WriteLine("Vsota stevil 2 + 3 = " + 2 + 3); } }

  42. Semantika • Napake v semantiki: • razumevanje problema • Tehnike priprave programov • Strukturirano programiranje • Problem razgrajujemo na zaključene podprobleme, ki jih razgrajujemo naprej • Ekstremno programiranje • Najprej pripravimo testne primere in pričakovane odgovore • ... • Preverjanje, preverjanje, preverjanje • Ne moremo preveriti, ali program dela prav, lahko pa ugotovimo, da ne dela prav

More Related