Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14)
Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter. En dator används för att bearbeta data. Dator kan inte "förstå" data utan kan bara bearbeta den och därigenom skapa ny data. Hur en dator bearbetar data styrs av ett program som vi ger till datorn. Skillnad mellan data och information? En dator är en generell maskin som med hjälp av program kan fås att utföra olika uppgifter. Data är koder/signaler av olika slag som i ett sammanhang är bärare av information Data: 12.50; ab22cz Information: "Priset är 12,50"; "konto på LNU på person med initialerna ab" 2 (14)
Vad är ett datorprogram? Ett datorprogram består av: en beskrivning av den data som ska bearbetas. en algoritm, där vi med hjälp av programsatser beskriver hur data ska matas in, bearbetas och beräknas samt matas ut. Data kan vara vad som helst: nummer, bokstav, ord, bild, musik, animation, En algoritm är ett antal instruktioner som anger hur ett problem ska lösas indata bearbetning utdata Ett datorprogram beskriver med hjälp av instruktioner och data exakt alla detaljer av det som ska utföras. Ett datorprogram instruerar datorn hur ett problem ska lösas. 3 (14)
Vad är ett datorprogram ur datorns perspektiv? adress 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 00001011 10111000 01101010 10011000 00010000 11101001 10011111 11011011 10101001 00101001 10101100 01011100 10110101 01100110 program data Datorn använder ett språk som är oerhört begränsat. Instruktionerna uttrycks med ettor och nollor, en binär siffra eller en bit (binary digit, 1 eller 0). Ur datorns perspektiv kan sägas att ett datorprogram är en samling ettor och nollor, som lagras i ett minne. Bitar hanteras i grupper om 8 (8 bitar = en byte), som tillsammans representerar programsatser som ska utföras och det data som ska behandlas. Varje byte har en adress. minne 4 (14)
Vad är ett datorprogram ur programmerarens perspektiv? Ett datorprogram är kod som skrivs i ett högnivåspråk, som vi människor förstår. Högnivåspråket översätts sedan till maskinkod, som består av ettor och nollor. En programmerare överför en algoritm till datorn genom att skriva kod i ett programspråk och skapa ett datorprogram. Koden översätts till maskinkod som instruerar dator hur ett problem ska lösas. Det första datorprogrammet (C++) #include <iostream> using std::cout; using std::endl; int main() { int sum; sum = 37 + 15; cout << "Summan är :" << sum << endl; return 0; } Utskrift Datorprogrammet summerar talen 37 och 15, och skriver ut summan. Summan är: 52 5 (14)
Olika språk 10011000 11000011 01000000 00000011 11111100 : MOV #5, R1 ADD R1, R2 STR @R0 : int sum; sum = 37 + 15; : Maskinkod Maskinkod, språket en dator använder, är mycket svårt för människor att förstå. Maskinkoden utgörs bara av ettor och nollor, och det är mycket enkelt att göra misstag. Assembler Lättare att förstå och komma ihåg. Svårt att göra även enkla saker. Ett program, assemblator, används för att översätta till maskinkod. Högnivåspråk (C++, Java, Basic, ) Mycket enklare att förstå och skriva. Språken är standardiserade. Översättning till maskinkod är mycket komplex varför ett program (interpretator eller kompilator) används till översättningen. maskinberoende maskinberoende INTE maskinberoende 6 (14)
Interpretator Instruktionerna översätts och exekveras i tur och ordning under exekveringen av programmet. Översättningen sparas inte! Måste utföras varje gång en sats körs. källkod (lagras i en fil) 10 rem Sum two numbers 20 input "enter first number"; a 30 input "enter second number"; b 40 s = a + b 50 print "sum is " ; s interpretator maskinkod (genererad & exekverad, lagras inte) 11100101001000100 7 (14)
Kompilator All programkod översätts till maskinkod och sparas vid ett tillfälle före exekveringen. Endast maskinkoden körs när programmet exekveras. källkod (lagras i en fil) 10 rem Sum two numbers 20 input "enter first number"; a 30 input "enter second number"; b 40 s = a + b 50 print "sum is " ; s kompilator maskinkod (genereras en gång & lagras i en fil) 0011000101010000100 11100101001000100 Lagrad maskinkod exekveras av operativsystemet så många gånger som önskas! 8 (14)
C++ kompilera och länka C++-källkod kompileras och den första versionen av maskinkod kompilatorn skapar kallas objektkod. Objektkoden är inte ett fullt körbart program. Objektfilen länkas med systembibliotek och maskinkod skapas och sparas i en fil som utgör ett fullt körbart program En exekveringsbar fil. MyApp.cpp #include <iostream> using std::cout; using std::endl; int main() { int sum; sum = 37 + 15; cout << "Summan är :" << } källkod (lagrad i en fil) C++kompilator (cl) objektkod (lagrad i en fil) 1100011100 0100010000 0111100111 0001010101 0001 MyApp.obj systembibliotek (lagrad i fil) 1100011100 0100010000 0111100111 0001010101 0001 #ifndef IOSTREAM_H #define #ifndef IOSTREAM_H IOSTREAM_H #pragma #define option IOSTREAM_H push -b // -*- #pragma C++ -*- option push -b #ifndef // -*- STD_IOSTREAM C++ -*- #define #ifndef STD_IOSTREAM STD_IOSTREAM #define STD_IOSTREAM headerfiler maskinkod (genereras en gång & lagras i en fil) Länkare (link) 0011000101010000100 11100101001000100 MyApp.exe 9 (14)
Problem-analys-kodning-exekvering Problem Viktigaste steget! Syftet med att skriva ett program är att lösa ett problem. utan dator Analys (vad?) De generella stegen vid problemlösning är: Design (hur?) algoritmer Förstå problemet. Kodning Dela upp problemet i mer hanterbara mindre problem. Skapa en lösning. med dator Kompilera Exekvera Fel Fel Fundera över alternativa lösningar. Implementera lösningen. Resultat Fel Testa lösningen och åtgärda eventuella problem som finns. 10 (14)
Omvandla växeln från kro Beräkna antal 500-lappar. Beräkna återstående växel. Beräkna antal 100-lappar. Beräkna återstående växel. Beräkna antal 50-lappar. Beräkna återstående växel. Beräkna antal 20-lappar. Beräkna återstående växel. Beräkna antal 10-kronor. Beräkna återstående växel. Beräkna antal 5-kronor. Beräkna återstående växel. Beräkna antal 1-kronor. Beräkna återstående växel. Beräkna antal 50-öringar. "ren svenska" start Läs in change Algoritmer En algoritm är en sekvens av intruktioner som görs för att utföra en sak eller lösa ett problem. Kan skrivas på ren svenska, flödesdiagram, pseudokod, Kan behöva justeras allt eftersom du arbetar. change change 100 note500 change / 50000 change change % 50000 Konstruera alltid en algoritm innan du börjar koda! slut flödesdiagram 11 (14)
Att förstå och analysera ett problem Problem Konvertera ett växelbelopp i kronor till antal 500-, 100-, 50- och 20-lappar, samt 10-, 5- och 1-kronor, och eventuell 50-öring. Exempel Givet 628,50 kr, d.v.s. 62850 ören. Antal 500-lappar: dividera 62850 med 50000 Kvoten är 1. Resten är 12850. Antal 100-lappar: dividera 12850 med 10000 Kvoten är 1. Resten är 2850 Resterande antal sedlar och mynt enligt samma princip. Resultat: 1 st 500-lapp, 1 st 100-lapp, 0 st 50- lappar, 1 st 20-lapp, 0 st 10-kronor, 1 st 5-krona, 3 st 1-kronor och 1 st 50-öring. 12 (14)
Resulterande algoritm 1. Omvandla växeln från kronor till ören. 2. Beräkna antal 500-lappar. 3. Beräkna återstående växel. 62850 ören 1 st 500-lapp 12850 ören start Flödesdiagram På ren svenska 4. Beräkna antal 100-lappar. 5. Beräkna återstående växel. 6. Beräkna antal 50-lappar. 1 st 100-lapp 2850 ören 0 st 50-lapp Läs in change givet 628,50 kr 7. Beräkna återstående växel. 8. Beräkna antal 20-lappar. 2850 ören 1 st 20-lapp change change 100 62850 ören 9. Beräkna återstående växel. 850 ören 10. Beräkna antal 10-kronor. 11. Beräkna återstående växel. 0 st 10-kronor 850 ören note500 change / 50000 1 st 500-lapp 12. Beräkna antal 5-kronor. 1 st 5-krona 13. Beräkna återstående växel. 14. Beräkna antal 1-kronor. 350 ören 3 st 1-kronor change change % 50000 resten är 12850 ören 15. Beräkna återstående växel. 50 öre 16. Beräkna antal 50-öringar. 1 st 50-öring En steg för steg instruktion en sekvens! slut 13 (14)
Implementation Den slutliga implementationen av algoritmen innebär att vi översätter vår framtagna algoritm till ett fungerande program i det programspråk som vi valt. Detta gör vi med hjälp av tillgänglig syntax, d.v.s. de instruktioner som programspråket C++ tillhandahåller för att utföra operationerna i resp. sekvenssteg. Efter kompilering och länkning enligt tidigare beskrivning, kan vi sedan åstadkomma ett fungerande program. Innan detta kan exekveras, d.v.s. köras, måste vi oftast felsöka eller debugga det, och alltid testa noga, innan vi är nöjda med det slutliga resultatet. 14 (14)
Sammanfattning Det viktigaste att ha med sig är: Datorn förstår inte data - Kan endast bearbeta data. För att datorn ska kunna göra något krävs ett program Processorn förstår endast sitt eget språk - Maskinkod Program skrivs vanligen i högnivåspråk, t ex C++ Högnivåspråk måste översättas till maskinkod före exekvering Kompilator (=översättare) översätter programmet i sin helhet före exekvering Interpretator (=tolk) tolkar till maskinkod under programmets körning Länkaren länkar ihop det egna programmet med färdigkompilerad bibliotekskod till ett komplett körbart program Programutvecklingsprocessen består av flera steg - Analys (vad ska göras), - Design (hur ska det göras) - Implementering (kodning och test) 15 (14)