CS - Computer science Datateknik Informationsbehandling Datalogi Datavetenskap (ÅA 2008) Vad datateknik INTE är: Att studera datorer Att studera hur man skriver datorprogram Att studera hur man använder datorer och datorprogram Programmering, GK /C 1
Vad datateknik ÄR... Studiet av algoritmer, inklusive deras formella och matematiska egenskaper implementering på maskinnivå implementering på programnivå tillämpningar Vad är en algoritm? Def.: En algoritm är en procedur för att lösa ett matematiskt problem i ett ändligt antal steg, vilket ofta innebär upprepning av en operation; allmänt: en steg-för-steg-metod för att genomföra någon uppgift. Def.: En algoritm är en välordnad följd av entydiga och beräkningsbara (computable) operationer vilka när de exekveras producerar ett resultat och stannar inom en ändlig tidsrymd. Programmering, GK /C 2
Tre huvudkategorier av operationer: 1) Sekventiella (primitiva operationer efter varann) 2) Villkorliga (val, selektion) 3) Iterativa (upprepning, repetition) Abu Ja far Muhammad ibn-musa Al-Khowarizmi (780-850) Algorismus Lärare vid matematiska institutionen i Baghdad Kitab al jabr w al muqabala, Rules of Restoration and Reduction (algebra) algoritmer Programmering, GK /C 3
Exempel: att addera två m-siffriga tal En grov algoritm (en idé om vad som ska göras): 1. Skriv talen under varandra 2. Börja från höger, arbeta mot vänster 3. Så länge det finns sifferpar, gör följande: 3.1. Addera ihop sifferparet 3.2. Om summan < 10, skriv det under strecket, annars skriv där summa - 10 och addera 1 till följande par 3.3 Ta nästa par till vänster 4. Om det finns en 1 som väntar på att adderas till följande par, skriv det under strecket. 5. Slut 1 (1)1 1 ex. 321 321 321 + 437 + 193 + 999 --------- --------- -------- 758 514 1320 Programmering, GK /C 4
En detaljerad algoritm (hur man gör): Givet: m 1 och två positiva heltal bestående av m siffror, a1a2...am och b1b2...bm Önskat: c0c1c2...cm, där Algoritm: c0c1c2...cm = a1a2...am + b1b2...bm 1. Låt carry = 0 2. Låt i = m 3. Repetera tills i = 0: 3.1. Låt ci = ai + bi + carry 3.2. Om ci 10 så låt ci = ci - 10 och låt carry = 1 annars låt carry = 0 3.3. Låt i = i - 1 {vi går ett steg åt vänster} 4. Låt c0 = carry 5. Skriv ut svaret c0c1c2...cm 6. Slut Programmering, GK /C 5
Algoritmen i lite annat format: 1. carry 0 2. i m 3. Repetera tills i = 0: 3.1. ci ai + bi + carry 3.2. Om ci 10 så ci ci - 10 och carry 1 annars carry 0 3.3. i i - 1 {vi går ett steg åt vänster} 4. c0 carry 5. Skriv ut svaret c0c1c2...cm 6. Slut Man kan också använda löpande numrering av stegen i stället för undre indexering:... 3. Repetera stegen 4 till 6 tills i = 0 4. ci ai + bi + carry 5. Om ci 10 så ci ci - 10 och carry 1 annars carry 0 6. i i - 1 {vi går ett steg åt vänster}... Programmering, GK /C 6
a1 a2 a3 321 + 437 b1 b2 b3 --------- 0758 c0 c1 c2 c3 Carry är här genomgående 0; vi lämnar ju normalt den ute. 0 1 0 0 a1 a2 a3 ai bi carry 321 1 + 3 + 0 = 4, carry 0 + 193 2 + 9 + 0 = 11, 1 ned, carry 1 b1 b2 b3 3 + 1 + 1 = 5, carry 0 --------- 0514 c0 c1 c2 c3 Programmering, GK /C 7
Olika sätt att representera algoritmer: 1) Naturliga språk (engelska, svenska, finska, japanska,...): Initially, set the value of the variable carry to 0 and the value of the variable i to m. When these initializations have been completed, begin looping until the value of the variable i becomes exactly 0. First, add together the values of the two digits ai and bi and the current value of carry to get the result called ci. Now check the value of ci to see if it is greater than or equal to 10... Vad är problemet med en dylik beskrivning? 2) Olika programmeringsspråk (kod):... BEGIN ReadLn(m); FOR i := 1 TO m DO ReadLn(a[i], b[i]); carry := 0; i := m; WHILE i >0 DO BEGIN c[i] := a[i] + b[i] + carry; IF c[i] >= 10 THEN BEGIN c[i] := c[i] - 10; carry := 1 END ELSE carry := 0;... Vad är problemet med en dylik beskrivning? Programmering, GK /C 8
3) Pseudokod Våra exempelalgoritmer är skrivna på pseudokod Personliga variationer Kombinerar naturligt språk med matematisk standardnotation Rekommenderas varmt!!! Exempel på enkla algoritmer, med de olika grundkonstruktionerna sekvens, selektion, iteration: Hur många km/l i medeltal kör jag? * primitiva operationer i sekvens bensin.c 1. Läs in antalliter, kmstart, kmslut 2. färd kmslut - kmstart 3. kmperliter färd / antalliter 4. Skriv ut kmperliter 5. Slut Programmering, GK /C 9
* Samma med selektion/val: bensin2.c 1. Läs in antalliter, kmstart, kmslut 2. färd kmslut - kmstart 3. kmperliter färd / antalliter 4. Skriv ut kmperliter 5. Om kmperliter > 10 så skriv ut Bra... annars skriv ut Detta blir dyrt, dags för en ny bil? 6. Slut * Samma med iteration/repetition/upprepning: bensin3.c 1. Läs in svar 2. Repetera 3 till 9 tills svar = nej : 3. Läs in antalliter, kmstart, kmslut 4. färd kmslut - kmstart 5. kmperliter färd / antalliter 6. Skriv ut kmperliter 7. Om kmperliter > 10 så skriv ut Bra... annars skriv ut Detta blir dyrt, dags för en ny bil? 8. Skriv ut Ska vi ta detta om? ja eller nej? 9. Läs in svar 10. Slut Programmering, GK /C 10
Vad händer om du skriver in som svar ja jooo... nej Nej Nej! NEJ! STOP!!!! SLUTA!!! &%&%% %!!!! Fundera på följande alternativ - vilka två fungerar lika? ÅA vill skicka olika sorts informationsbrev till alla ÅA-människor. Idén är den att personal ska få personalbrev och de studerande studentbrev. Hans Hackare har tre olika förslag på selektionssatser: Programmering, GK /C 11
1) IF x tillhör personal THEN skicka personalbrev ELSE skicka studentbrev 2) IF x tillhör studentkåren THEN skicka studentbrev ELSE skicka personalbrev 3) IF x tillhör studentkåren THEN skicka studentbrev. IF x tillhör personal THEN skicka personalbrev Uteslutar villkoren varandra, eller överlappar fallen? Om de uteslutar varandra till 100% kan du använda IF-THEN-ELSE. Annars måste du ha flera IF-satser efter varandra. personal studerande eller Har man säkert beaktat alla fallen? VAD ÄR VERKLIGHETEN MAN VILL BESKRIVA? Den avgör valet av konstruktion. Programmering, GK /C 12
Olika repetitionssatser: 1) Bestämt antal repetitioner - Repetera 10 gånger - Repetera antal gånger (antal måste vara känt när man kommer till satsen) 2) Obestämt antal repetitioner - Repetera så länge ett villkor gäller - Repetera tills ett villkor blir sant - Repetera evigt (tills man hoppar ur loopen med något exit-kommando) Programmering, GK /C 13