programmering i java -...
TRANSCRIPT
1 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
Inledning
Vad är ett datorprogram, egentligen?
Olika språk
Problemlösning och algoritmer
2 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
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.
• En dator är en generell maskin som med hjälp av program kan fås att utföra olika uppgifter.
Skillnad mellan data och information?Data är koder/signaler av olika slag som i ett sammanhang är bärare av information
Data: 12.50; ab22czInformation: "Priset är 12,50"; "konto på LNU
på person med initialerna ab"
3 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
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 programsatserbeskriver 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
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.
indata
4 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
Vad är ett datorprogram…
• 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), somtillsammans representerar programsatser som ska utföras och det data som ska behandlas. Varje byte har en adress.
…ur datorns perspektiv?
0000101110111000011010101001100000010000111010011001111111011011101010010010100110101100010111001011010101100110
minne
adress
20562057205820592060206120622063206420652066206720682069
program
data
5 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
Vad är ett datorprogram…
• 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.
…ur programmerarens perspektiv?
#include <iostream>using std::cout;using std::endl;
int main(){
int sum;sum = 37 + 15;cout << "Summan är :" << sum << endl;return 0;
}
Summan är: 52
Det första datorprogrammet (C++)
Utskrift
Datorprogrammet summerar talen 37 och
15, och skriver ut summan.
6 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
Olika språkMaskinkod– 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.
MOV #5, R1ADD R1, R2STR @R0
:
1001100011000011010000000000001111111100
:
int sum;sum = 37 + 15;
:
maskinberoende
maskinberoende
INTE maskinberoende
7 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
InterpretatorInstruktionerna ö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 numbers20 input "enter first number"; a30 input "enter second number"; b
50 print "sum is " ; s
interpretator
11100101001000100…
maskinkod(genererad
& exekverad,lagras inte)
40 s = a + b
8 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
KompilatorAll 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 numbers20 input "enter first number"; a30 input "enter second number"; b40 s = a + b50 print "sum is " ; s
kompilator
maskinkod(genereras en gång
& lagras i en fil)001100010101000010011100101001000100…
Lagrad maskinkod exekveras av
operativsystemet så många gånger
som önskas!
9 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
C++ – kompilera och länkaC++-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.
#include <iostream>using std::cout;using std::endl;
int main(){int sum;sum = 37 + 15;cout << "Summan är :" <<
}
källkod(lagrad i en fil)
MyApp.obj
MyApp.cpp
MyApp.exeLänkare(link)
001100010101000010011100101001000100…
maskinkod(genereras en gång
& lagras i en fil)
11000111000100010000011110011100010101010001…
systembibliotek(lagrad i fil)
11000111000100010000011110011100010101010001…
C++-kompilator
(cl)
objektkod(lagrad i en fil)
headerfiler
#ifndef __IOSTREAM_H
#define __IOSTREAM_H
#pragma option push -b
// -*- C++ -*-
#ifndef __STD_IOSTREAM__
#define __STD_IOSTREAM__
#ifndef __IOSTREAM_H
#define __IOSTREAM_H
#pragma option push -b
// -*- C++ -*-
#ifndef __STD_IOSTREAM
#define __STD_IOSTREAM
10 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
Problem-analys-kodning-exekveringSyftet med att skriva ett program är att lösa ett problem.
De generella stegen vid problemlösning är:
– Förstå problemet.
– Dela upp problemet i mer hanterbara mindre problem.
– Skapa en lösning.
– Fundera över alternativa lösningar.
– Implementera lösningen.
– Testa lösningen och åtgärda eventuella problem som finns.
Problem
Analys (vad?)
Design (hur?) algoritmer
Kodning
Kompilera
Exekvera
Resultat
Fel
Fel
utandator
meddator
Viktigaste steget!
Fel
11 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
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.
slut
start
Läs inchange
change change 100
note500 change / 50000
change change % 50000
…
"ren svenska"
flödesdiagram
Omvandla växeln från kroBerä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.
Konstruera alltid en algoritm innan du börjar koda!
12 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
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.
13 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
Resulterande algoritm1. Omvandla växeln från kronor till ören.
2. Beräkna antal 500-lappar.
3. Beräkna återstående växel.
4. Beräkna antal 100-lappar.
5. Beräkna återstående växel.
6. Beräkna antal 50-lappar.
7. Beräkna återstående växel.
8. Beräkna antal 20-lappar.
9. Beräkna återstående växel.
10. Beräkna antal 10-kronor.
11. Beräkna återstående växel.
12. Beräkna antal 5-kronor.
13. Beräkna återstående växel.
14. Beräkna antal 1-kronor.
15. Beräkna återstående växel.
16. Beräkna antal 50-öringar.
slut
start
Läs inchange
change change 100
note500 change / 50000
change change % 50000
…
givet 628,50 kr
62850 ören
1 st 500-lapp
resten är 12850 ören
…
→ 1 st 500-lapp
→ 62850 ören
→ 12850 ören
→ 1 st 100-lapp
→ 2850 ören
→ 0 st 50-lapp
→ 2850 ören
→ 1 st 20-lapp
→ 850 ören
→ 0 st 10-kronor
→ 850 ören
→ 1 st 5-krona
→ 350 ören
→ 3 st 1-kronor
→ 50 öre
→ 1 st 50-öring
På ren svenska
Flödes-diagram
En steg för steg instruktion – en
sekvens!
14 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
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.
15 (14)
1DV433 – Strukturerad programmering med C++
© 2012 Mats Loock
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ärdig-
kompilerad bibliotekskod till ett komplett körbart programProgramutvecklingsprocessen består av flera steg
- Analys (vad ska göras), - Design (hur ska det göras)- Implementering (kodning och test)