Fortsättningskurs i programmering F 2 Algoritmer i Programutveckling Hugo Quisbert 20130122 1 Exempel 1 Problemexempel 1 En souvenirbutik behöver ett datorprogram som omvandlar ett pris i svenska kronor (SEK) till euro. Programmet skall vara lättanvänt och användaren skall endast behöva mata totalsumman i SEK och få besked på skärmen om priset i euro. Det skall finnas en funktion för att mata in den dagsaktuella valutakursen. Användaren skall kunna välja när den funktionen skall aktiveras, valutakursen kanske är stabil i flera dagar 2 1
Exempel 1 visar ett problem som kan lösas med hjälp av ett datorprogram. Vid programutveckling är det viktigt att arbetet är väl strukturerat och följer vissa steg. Följande moment bör finnas med i någon form: 3 Problemspecifikation Sätta sig in i och noggrant formulera problemet. Det är viktigt att utgå från specifikationen och att ha en dialog med kunden. Bestämma utdata, d.v.s. vilket resultat skall datorn producera Bestämma vilka indata som behövs för att kunna producera rätt utdata Strukturering av problemet Dela upp problemet i delproblem Beskriva problemen och dess samband 4 2
Algoritmkonstruktion Att för varje delproblem definiera utdata och indata Identifiera kontrollstrukturer, d.v.s. strukturprimitiverna Identifiera operationer och förfina/bryt ner dessa så att de uppfyller villkoren för en algoritm Använda flödesplaner eller pseudokod för att beskriva algoritmen Verifikation Kontrollera att algoritmen uppfyller specifikationen 5 Kodning - Programskrivning Välja lämpligt programspråk Omforma algoritmerna till ett datorprogram i det aktuella programspråket Felsökning och testning Att med datorns hjälp lokalisera och rätta fel i programmet Kontrollera att programmet löser uppgiften Visa att programmet fungerar som avsett och ger korrekta resultat 6 3
Dokumentation Löper parallellt med de andra momenten Upprätta en beskrivning avsedd för dem som skall använda programmet Upprätta dokument som underlättar framtida ändringar i programmet Underhåll Pågår hela programmets livslängd 7 Algoritmkonstruktion Algoritmkonstruktion omfattar följande moment: Att för varje delproblem definiera utdata och indata Identifiera kontrollstrukturer, d.v.s. strukturprimitiverna Identifiera operationer och förfina/bryt ner dessa så att de uppfyller villkoren för en algoritm Använda flödesplaner eller pseudokod för att beskriva algoritmen 8 4
Från exempel 1 Algoritmkostruktion Första steget är att definiera output/utdata. Vi måste alltid utgå från målet för programmet för att kunna bestämma indata och operationer. Vad skall programmet göra? Läser vi exempel 1 så ser vi att de utdata som beställaren önskar är priset i euro. 9 Algoritmkostruktion Steg två blir då att bestämma input/indata. Vilka indata behövs för att få önskad utdata? Behövs det indata? Enl. en algoritms kännetecken, se 2.1.2, kan en algoritm ha noll indata. Det är också viktigt att inte låta användaren mata in data som redan finns lagrad eller som kan beräknas. Indata skall begränsas till ett minimum då inmatning tar tid och risken för fel ökar ju fler uppgifter som skall skrivas in. I detta exempel blir indata den dagsaktuella valutakursen för euro samt priset i SEK. 10 5
Algoritmkonstruktion I nästa steg skall vi identifiera kontrollstrukturer. Skall alla instruktioner utföras i en följd eller behövs alternativa vägar eller repetition? Kontrollstrukturen sekvensär en grund i alla algoritmer. Frågan är om kontrollstrukturerna selektionoch iterationbehövs. Om användaren skall få välja om dagskursen behöver matas in, ingår även kontrollstrukturen selektion. Kontrollstrukturerna i detta exempel blir då sekvens och selektion. 11 Algoritmkonstruktion Därefter skall vi utforma de operationer som behövs för att erhålla önskad utdata utifrån fastställda indata. Vilka operationer behövs i vårt exempel? Vi tittar på uppgiften och kommer fram till följande operationer: Mata in priset i SEK. Kunna välja om dagskursen skall skrivas in och om svaret är Ja kunna skriva in den. (selektion) Omvandla det inmatade priset till euro. Skriva ut priset i euro. 12 6
Algoritmkostruktion Men observera att operationen Omvandla det inmatade priset till euromåste förklaras ytterligare. Vilken operation omvandlar ett pris i kr till valutan euro? Priset i svenska kronor (SEK) dividerat med kursen ger priset i euro ( ). 13 Algoritmkostruktion Även operationen Kunna välja om dagskursen skall skrivas in och om svaret är J kunna skriva in den måste brytas ner i fler operationer: Visa texten Ange ny dagskurs? (J/N) på skärmen Låt användaren mata in ett svar Om svaret är Ja så utför följande operationer: Visa texten Mata in aktuell kurs Låt användaren mata in kursen. 14 7
Algoritmkostruktion Vi sammanfattar nu de olika stegen i algoritmkonstruktionen för exempel 1. Definiera utdata: Priset i euro Fastställa indata: Valutakursen för euro Priset i SEK. Identifiera kontrollstrukturer: Sekvens och selektion Utforma operationerna: Visa texten Ange ny kurs för euro? (J/N). Mata in ett svar. Omsvaret är J så utför följande operationer: Visa texten Mata in aktuell kurs. Mata in kursen. Visa texten Pris i SEK. Mata in priset.priset i SEK / kurs -> priset i euro. Visa Priset i euro priset i euro 15 Klassövning Tillsammans med en klasskamrat rita ett flödesdiagram för Exempel 1 16 8
Lösningsförslag exempel 1 17 Kodning - Programskrivning Kodning innebär att Välja lämpligt programspråk Omforma algoritmerna till ett datorprogram i det aktuella programspråket 18 9
Kodning exempel 1 System.out.println( Ange ny kurs för euro?[j/n]) ; svar = br.readline(); if (svar == J ) { } System.out.println ( Mata in aktuell kurs ); kurs = br.readline(); System.out.println ( Pris i SEK ); pris_sek = br.readline(); pris_euro = pris_sek /kurs; System.out.println( Priset i euro: + pris_euro); 19 Problemspecifikation Exempel 2 En bilägare vill veta vad hans bil kostar per månad. Kalkylprogrammet skall vara lättanvänt, överskådligt och ta hänsyn till stort sett alla kostnader, t ex försäkringar, reparationer, räntekostnad, värdeminskning och driftskostnader. 20 10
Här behövs ett bra samarbete mellan beställaren och den som skall lösa uppgiften. Hur får vi med alla kostnader? Vad innebär olika kostnader? Skall de delas upp i fasta och rörliga kostnader? Hur skall gränssnittet utformas för att vara överskådligt och lättanvänt? Menysystem? Vilka kontroller behövs? Vilken utrustning, både hård-och mjukvara, har beställaren? Finns befintliga program att ta hänsyn till? Vilka kunskaper har beställaren? Vilka skall använda programmet? Framtida önskemål? osv. Vi skall inte lösa uppgiften här, men fundera över problemet och hur det kan lösas 21 Algoritmkonstruktion Exempel 3 En mattaffär har specialiserat sig på att tillverka mattor helt efter kundens önskemål. De klipper till mattan i önskad storlek och sedan fållas mattan runt om. Kunden får välja kvalité, färg, längd och bredd på mattan. I dagsläget kan affären endast leverera mattor som är fyrkantiga eller rektangulära. Mattaffären behöver hjälp med att snabbt och enkelt kunna beräkna vad kunden skall betala för sin nya matta. Priset för mattan beror på mattans storlek (area), kvadratmeterpriset samt fållningen som alltid kostar 50 kr per meter kant. 22 11
Algoritmkonstruktion Definiera output, input, kontrollstrukturer och operationer Output? Priset för mattan Input? Pris/m 2, mattans längd och mattans bredd I vilken enhet (cm eller m) skall bredd och längd anges? Kontrollstrukturer? Sekvens 23 Övning 2 Tillsammans med en klasskamrat lös problemet först i pseudokod och sedan rita ett flödesdiagram för Exempel 3 24 12
Operationer exempel 3 25 Lösningsförslag exempel 3 26 13