Välkomna till Programmeringsmetodik DV1 Programkonstruktion I+II http://www.csd.uu.se/kurs/pm1/ht02/www/ Lars-Henrik Eriksson lhe@csd.uu.se, http://user.it.uu.se/~lhe
Undervisningstillfällen Föreläsningar: I allmänhet tisdagar och onsdagar i Aulan. Laborationer: I allmänhet på torsdagar (första lab. 3/10) Stoppdatum: I allmänhet på tisdagar kl. 08:00. Lektioner: I allmänhet på fredagar (första lektion 11/10) Tenta: Onsdagen den 11/9. Kontrollera på webbplatsen i början av nästa vecka vilken grupp du tillhör och vilket labb/lektionsschema du skall ha.
Supplemental Instruction (SI) Ett sätt att bedriva sina självstudier i diskussionsgrupper. (Schema inte klart än kommer på webbplatsen.)
Algoritm Effektiv procedur för beräkning 1) Mekanisk 2) Ändliga resurser 3) Deterministisk 4) Aritmetiserbart problem
Euklides från Alexandria (325 265 f.kr.)
Euklides algoritm Precondition: m och n är naturliga tal Postcondition: n är största gemensamma delare till de ursprungliga m och n. Start. Ja. Är m=0? Stopp. Nej. Låt r vara resten när n delas med m. Låt n vara m. Låt m vara r.
Euklides algoritm stannar Största gemensamma delaren till 64 och 30 m n r 64 30 30 30 64 4 4 30 2 2 4 0 0 2 64 = 2*32 = 2*2*2*2*2*2 30 = 2*15 = 2*3*5
Eratostenes från Kyrene (276 194 f.kr.)
Eratostenes såll 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 2 --- --- --- --- --- --- --- 3 --- --- --- --- 4 --- --- --- 5 --- --- 6 --- 7 --- 8 --- De tal som faller igenom sållet är primtal.
Program Program är mekaniska beskrivningar för hur datorn skall arbeta. Alla program är inte algoritmer ofta vill man inte att program skall avslutas (t.ex. styrprogram av olika slag), serverprogram. Algoritmerna är fundamentala konstruktionsmönster vid programmering.
Mohammad Ibn Musa al-khwarizmi (c:a 780 c:a 850)
Två böcker av al-khwarizmi Om beräkning genom al-jabr och al-muqabala al-khwarizmi om de indiska talen ( Algoritmi de numero Indorum )
Gottfried Wilhelm von Leibniz (1646 1716) calculemus
Leibniz kalkylator Leibniz kalylator förverkligar algoritmer för de fyra räknesätten.
Charles Babbage (1791 1871)
Differenskalkylen x 2x 2-3x+4 1:a diff. 2:a diff 3:e diff. 0 4-1 1 3 4 3 0 2 6 4 7 0 3 13 4 11?? 4 24???? 5?? Polynom kan användas för approximation av matematiska funktioner (Taylorutvecklingar).
Babbages differensmaskin (del) Differensmaskinen förverkligar en algoritm för differenskalkyl.
Augusta Ada Byron grevinna av Lovelace (1815 1852)
Babbages analytiska maskin Den analytiska maskinen kunde programmeras att utföra godtycklig algoritm. Beståndsdelarna i princip samma som i en modern dator. Ada Lovelace skrev det första programmet för beräkning av Bernoullital. Den analytiska maskinen kunde aldrig byggas finmekaniken räckte inte.
Ada Lovelace om den analytiska maskinen "Again, [the Analytical Engine] might act upon other things besides number, were objects found whose mutual fundamental relations could be expressed by those of the abstract science of operations, and which should be also susceptible of adaptations to the action of the operating notation and mechanism of the engine... Supposing, for instance, that the fundamental relations of pitched sounds in the science of harmony and of musical composition were susceptible of such expression and adaptations, the engine might compose elaborate and scientific pieces of music of any degree of complexity or extent."
Alonzo Church Alan Mathison Turing (1903 1995) (1912 1954)
Vad är mekaniskt? Church: uttryckbart i l-kalkylen Turing: uttryckbart som turingmaskin. Church-Turings tes: Detta är allt som är mekaniserbart. I praktiken: uttryckbart som program i en dator. Alla beräkningar kan inte mekaniseras enligt Church/Turing. Kan de då utföras alls? l-kalkylen har blivit ett viktigt verktyg inom datavetenskapen.
Grace Murray Hopper (1906 1992)
Kompilatorer Maskiner är inte lätta att tas med speciellt inte när man programmerar. Program som styr datorn uttrycks i termer av datorns inre uppbyggnad och funktion numeriska koder. Människor vill ha mer lättanvända programspråk. Kompilatorn är en program som realiserar en algoritm som översätter program från ett användarorienterat språk till maskinspråk. Hopper skrev den första kompilatorn.
Standard ML Lämpligt för undervisning. Enkla, tydliga beståndsdelar. Funktionellt programspråk. God matematisk grund. Ursprung i l- kalkylen. Väldefinierad semantik. Semantik: Vad ett program betyder Jämför syntax: Hur ett program får se ut. ML arbetar genom funktionsberäkningar. OBS att funktion har annan betydelse än i matematiken. fun gcd(0,n) = n gcd(m,n) = gcd(n mod m,m) Detta är en rekursiv definition av funktionen gcd en kodning av algoritmen för största gemensamma delare i SML.
Beräkning av gcd(64,30) i ML fun gcd(0,n) = n gcd(m,n) = gcd(n mod m,m) gcd(64,30) fi gcd(30 mod 64,64) fi gcd(30,64) fi gcd(64 mod 30,30) fi gcd(4,30) fi gcd(30 mod 4,4) fi gcd(2,4) fi gcd(4 mod 2,2) fi gcd(0,2) fi 2
Funktioner i matematik och programmering Funktioner avbildar ( översätter ) argument till entydiga värden. Om funktionen avbildar alla möjliga argument i en given domän är den total, annars partiell. Matematiska funktioner är i princip en tabell (graf) av argument och värden. Programfunktioner är en beskrivning av hur värdet skall beräknas. (5,10) 5 (20,35) Del av grafen för gcd: 2 (2,4) (64,30)
Programmeringsmetodik Betydelsen av specifikationer (vad?) motivering (varför?) dokumentation i övrigt elegans, precision, klarhet Första introduktion till: algoritmer och datastrukturer algoritmkomplexitet