programmering i java -...

15
1 (14) 1DV433 – Strukturerad programmering med C++ © 2012 Mats Loock Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer

Upload: vandieu

Post on 13-Sep-2018

224 views

Category:

Documents


0 download

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)