Sanningar om programmering

Relevanta dokument
Sanningar om programmering

Exempel att testa. Stora problem och m-filer. Grundläggande programmering 4. Informationsteknologi. Informationsteknologi.

Sanningar om programmering. Sanningar om programmering. Programmeringsprocessen. Att skriva program i Matlab. Programmeringsprocessen

Sanningar om programmering. Ett vardagsexempel. Ett vardagsexempel (forts.) Grundläggande byggstenar i algoritmer/program. Programmet som recept

Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while

Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while

Sanningar om programmering. Sanningar om programmering. Programmeringsprocessen. Att skriva program i Matlab. Programmeringsprocessen

Sanningar om programmering. Sanningar om programmering. Programmeringsprocessen. Att skriva program i Matlab. Programmeringsprocessen

Sanningar om programmering. Programmeringsprocessen. Sanningar om programmering. Att skriva program i Matlab. Programmeringsprocessen

Introduktion till MATLAB

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

Stora problem och m-filer

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Variabler och konstanter

Vad är MATLAB? Användningsområden. Var kan man köra MATLAB? MATLAB-miljön: avsluta. MATLAB-miljön: Start. Informationsteknologi. Grunderna i MATLAB

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Beräkningsverktyg HT07

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Matlabövning 1 Funktioner och grafer i Matlab

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

Matlabövning 1 Funktioner och grafer i Matlab

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

MMA132: Laboration 2 Matriser i MATLAB

Beräkningsvetenskap föreläsning 2

Kort om programmering i Python

Instruktion för laboration 1

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab

Matriser och Inbyggda funktioner i Matlab

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

MATLAB Matrix laboratory

TSBB14 Laboration: Intro till Matlab 1D

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Logik och kontrollstrukturer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Hjälpmedel: MATLAB

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

TANA17 Matematiska beräkningar med Matlab

Laboration: Grunderna i MATLAB

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

FÖRSÄTTSBLAD TILL TENTAMEN. ELLER (fyll bara i om du saknar tentamenskod): Datum: 16 januari Bordsnummer:

Matematisk Modellering

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Villkor if, switch. F2: Styrstrukturer, programmeringsteknik (kap. 3 4) If-kommando forts. If-kommando forts.

Kort om programmering i Matlab

Instruktion för laboration 1

Laboration 3. Funktioner, vektorer, integraler och felskattning

Introduktion till MATLAB Föreläsning 1

Funktioner forts. F3: Funktioner (kap. 5) Parametrar. findgear.m forts

Matriser och Inbyggda funktioner i Matlab

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Börja programmera. Kapitel 4 i kompendiet Jämförande uttryck Villkorssatser Loopar (slingor) Funktioner. Läs inte avsnitt 4.2.3

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 13:e januari klockan

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

HI1024 Programmering, grundkurs TEN

Fortsättningskurs i programmering F 2. Algoritmer i Programutveckling Hugo Quisbert Problemexempel 1

Föreläsning 3-4 Innehåll

2 februari 2016 Sida 1 / 23

Introduktion till MATLAB, med utgångspunkt från Ada

Matlabföreläsningen. Lite mer och lite mindre!

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Matriser och vektorer i Matlab

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Beräkningsvetenskap och Matlab. Vad är MATLAB? Vad är MATLAB? Användningsområden. Vad är MATLAB? Grunderna i Matlab. Beräkningsvetenskap == Matlab?

MMA132: Laboration 1 Introduktion till MATLAB

TAIU07 Matematiska beräkningar med Matlab

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Matematisk Modellering

TAIU07 Matematiska beräkningar med Matlab

Laboration 3. Funktioner, vektorer, integraler och felskattning

Uttryck och villkor. Föreläsning 2

Exempel på ett litet Ada-program

C++ Slumptalsfunktioner + switch-satsen

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Linjära ekvationssystem i Matlab

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

MATLAB. Vad är MATLAB? En kalkylator för linlär algebra. Ett programspråk liknande t.ex Java. Ett grafiskt verktyg.

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Uppgifter teknik HT17 (uppdaterad v. 40)

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

7 Programmeringsteknik

Programmering i C, 7,5 hp

Introduktion till Matlab Föreläsning 1. Ingenjörsvetenskap

Ickelinjära ekvationer

(a) Skriv en matlabsekvens som genererar en liknande figur som den ovan.

Transkript:

Grundläggande programmering stefan@it.uu.se Sanningar om programmering Ett MATLAB-program är ett antal MATLABkommandon samlade i en m-fil. Att utveckla och skriva program kallas att programmera. Att skriva ett större program som löser ett större problem är oftast en ganska omfattande uppgift Kräver förarbete med t ex papper och penna innan man sätter sig vid datorn Programmeringsprocessen innehåller egentligen många moment, inte bara kodning Programmeringsprocessen 1. Formulering av problemet 2. Strukturering av problemet 3. Val av lösningsmetod 4. Kodning 5. Felsökning och testning 6. Dokumentering 1

Programmeringsprocessen Formulering av problemet. Kravspecifikation. Vad ska lösas? Strukturering av problemet. Dela upp i mindre delproblem. Vissa löser man själv (egna funktioner), andra kräver expertkunskaper (MATLAB-funktioner). Val av lösningsmetod. Bestäm lösningsmetod och formulera algoritm, dvs steg-för-steg metod för att lösa de olika delproblemen Programmeringsprocessen Kodning eller implementering algoritmen omformas till programmeringsspråk, dvs i denna kurs till MATLAB-kod. Många vill gärna hoppa direkt till detta moment, eftersom det är roligt att snabbt se resultat. För mindre problem går det oftast bra, men men för större problem är brist på förarbete ofta förödande. Felsökning och testning Ovanligt att program fungerar korrekt från början :-) Måste testköra för olika indata. Försöka hitta felen, för att sedan rätta till dem och köra igen. Programmeringsprocessen Dokumentering För att ett program skall kunna vara användbart för andra, så måste det dokumenteras och kommenteras. Beskriver sina tankegångar i struktureringsmomentet i ett separat dokument och även se till att koden innehåller "lagom med kommentarer på vettiga ställen (dvs %-rader). 2

Programmeringsprocessen I den här kursen ska vi mest titta på själva kodningen, dvs MATLAB-koden De övriga delarna ingår (mer eller mindre) i olika programmeringskurser Det är ändå en god idé att skissa på lösningen innan man skriver själva koden, fundera över hur problemet ska delas upp i mindre delproblem etc Rita och skissa med papper o penna hur vektorer ser ut och vilka tal som lagras var etc Programmeringskomponenter Programmeringsspråk innehåller några viktiga komponenter som används när man skriver kod. Komponenter för selektion, t ex if-satser iteration, s k loopar, t ex for-satsen MATLAB: Selektion (if) Selektion (val) Formulering av typen: om... så... om... så... annars... om... så... annars om... så Använd if-satsen i MATLAB x = input('give a number x: '); if x > 0 disp('x is greater than zero!') 3

MATLAB: Selektion (if) Varianter med else-gren x = input('give a number x: '); if x > 0 disp('x is greater than zero!') else disp('x is less than or equal to zero!') MATLAB: Selektion (if) Varianter med else-gren x = input('give a number x: '); if x > 0 disp('x is greater than zero!') elseif x < 0 disp('x is less than zero!') else disp('x is equal to zero!') MATLAB: Selektion (switch) Kan även använda switch % Kasta tärning. % result har ett tärningsvärde innan switch result case {1,3,5} disp('odd number of eyes') case {2,4,6} disp('even number of eyes') otherwise disp('what kind of dice do you have?') 4

MATLAB: Iteration (for) Iteration Iteration med for innebär att något blir exekverat (utfört) ett förutbestämt antal gånger. % Bygg upp en vektor med for-loop. x = []; % Starta med tom vektor for k = 1:5 x(k) = input('give element in x:'); k = 1:5 betyder att k i tur och ordning antar värdena 1, 2, 3, 4, 5 MATLAB: Iteration (for) Körning ger: Give element in x:2 Give element in x:3 Give element in x:5 Give element in x:7 Give element in x:8 >> x x = 2 3 5 7 8 MATLAB: Iteration (for) % Bygg vektor på annat sätt r = []; s = []; for x = -2.0:0.25:-0.75 y = 1 + 1/x; r = [r x]; s = [s y]; [r; s]' k = -2.0:0.25:-0.75 betyder att x i tur och ordning antar värdena 2, -1.75,...,-0.50,-0.75 5

MATLAB: Iteration (for) Resultatet blir en tabell för funktionen f(x)=1+1/x i intervallet [-2,-0.75]: ans = -2.0000 0.5000-1.7500 0.4286-1.5000 0.3333-1.2500 0.2000-1.0000 0-0.7500-0.3333 MATLAB: Iteration (while) Iteration (while) Iteration med while innebär att något blir exekverat (utfört) tills ett visst villkor är uppfyllt x = []; % Tom vektor vid start a = 1; while a > 0 % utför så länge som x = [x a]; % a större än 0 a = input('enter value: '); Observera att i while finns ingen räknare motsvarande k och x i for-exemplen MATLAB: Iteration (while) Resultat vid körning: Enter value: 1 Enter value: 2 Enter value: 6 Enter value: 5 Enter value: -2 >> x x = 1 1 2 6 5 6

MATLAB: Relationsoperatorer I while-satsen används logiska uttryck MATLAB har flera relationsoperatorer (Booleska operatorer) för jämförelser < Mindre än <= Mindre än eller lika med > Större än >= Större än eller lika med == Lika med ~= Skilt från I MATLAB gäller att om något är sant så har det värdet 1 (ett) och om något är falskt så har det värdet 0 (noll). MATLAB: Logiska operatorer Följande logiska operatorer finns i MATLAB: & Och ~ Negation (inte) Eller Xor Exklusivt eller A & B A och B: sant om både A och B är sanna A B A eller B: sant om antingen A, B, eller båda är sanna ~A inte A: sant om A är falskt och falskt om A är sant xor(a,b) Exkl eller: sant om A är sant eller om B är sant (ej sant om A och B är sanna) Programmeringsexempel 1 Skriv ett program som läser in två tal, beräknar medelvärdet av dessa och skriver ut resultatet. Analys av problemet a. Vilka indata är nödvändiga? Svar: Två tal b. Av vilken typ är indata? Vektor eller matris? Svar: I detta fall ett tal (skalär) c. Uppkommer det några specialfall? Svar: Inte i det här exemplet. d. Vad är utdata? Vilken datatyp? Svar: Resutatet också ett tal 7

Programmeringsexempel 1 Algoritmformulering Med hjälp av naturligt språk 1. Läs in två tal. 2. Beräkna medelvärdet. 3. Skriv ut medelvärdet. Programmeringsexempel 1 MATLAB-kod % Program som beräknar medelvärdet av % två tal. disp('ge två tal, så beräknas medelvärdet:'); tal1 = input('tal1: '); % inläsning tal2 = input('tal2: '); medel = mean( [tal1, tal2] ); %beräkning texten = ['Medelvärdet av talen är ', num2str(medel) ]; %utskrift disp( texten ); Programmeringsexempel 1 Exekvering körning av programmet ger följande: >> prog_1 Ge två tal, så beräknas medelvärdet: Tal1: 3 Tal2: 6 Medelvärdet av talen är 4.5 8

Programmeringsexempel 2 Skriv ett program som läser in två tal och beräkna sedan kvoten och skriv ut denna. Analys av problemet a. Vilka indata är nödvändiga? Svar: Två tal b. Av vilken typ är indata? Svar: Skalärer c. Uppkommer det några specialfall eller komplikationer? Svar: Ja, om nämnaren är lika med noll. d. Vad är utdata? Svar: Kvoten, också en skalär Programmeringsexempel 2 Algoritmformulering 1. Ge ledtext: Ge två tal,... 2. Läs in värden till variablerna taljare och namnare. 3. Om namnare = 0 så skriv ut ett felmeddelande annars sätt kvot = taljare/namnare 4. Skriv ut resultatet, dvs värdet av kvot, på lämpligt sätt. Programmeringsexempel 2 MATLAB-kod (sparat i m-filen prog2.m) % Program som dividerar två tal disp('ge två tal så beräknas kvoten.'); taljare = input('ge täljare: '); namnare = input('ge nämnare: '); if abs(namnare) < eps %ungefär: == 0 disp('division med noll!'); else kvot = taljare/namnare; disp(['kvoten blir: ',num2str(kvot)]); 9

Programmeringsexempel 2 Exekvering >> prog_2 Ge två tal så beräknas kvoten. Ge täljare: 1 Ge nämnare: 2 Kvoten blir: 0.5 >> prog_2 Ge två tal, så beräknas kvoten. Ge täljare: 2 Ge nämnare: 0 Division med noll! Programmeringsexempel 3 Skriv ett program som läser in heltal, ett i taget, och sedan beräknar summan samt medel av dessa. Resultaten skall skrivas ut. Programmeringsexempel 3 Analys av problemet a. Vilka indata är nödvändiga? Svar: Ett antal heltal. b. Av vilken typ är indata? Svar: skalärer som kan lagras i vektor c. Specialfall eller komplikationer? Svar: Ja, hur ska man veta när man matat in sista talet, dvs stoppvillkor? Dessutom, om antalet tal är 0, ska man då beräkna medel och summa? d. Vad är utdata? Av vilken datatyp? Svar: Summan är ett heltal, men medel är ett reellt tal. 10

Programmeringsexempel 3 Hur löser vi komplikationerna? a. Stoppvillkor? I MATLAB ger return-tangenten tomma matrisen [] när man använder input. Använd detta som stoppvillkor: så länge som tal skild från [] b. Om inga tal matas in? Vektorn talvect blir då tom och ingen beräkning bör ske. Lös detta med if-sats: om talvect skild från [] så beräkna summa och medelvärde annars gör utskrift Programmeringsexempel 3 Algoritm 1. Läs in första talet, tal, med input 2. Initiera vektor talvect: talvect = [] 3. Loop: så länge som tal skilt från [], dvs tomma matrisen (return) Placera tal i vektor talvect: talvect = [talvect; tal] Läs in ett nytt tal, lagra i tal 4. Om talvect skild från tomma mängden, beräkna medelvärdet och summan. I MATLAB med inbyggda funktioner sum och mean Programmeringsexempel 3 disp( Ge ett antal tal och medelvärde och summa beräknas. Avsluta inmatningen med talet return); tal = input('ge tal 1: '); talvect = []; i = 1; while tal ~= [] i = i+1 tal = input(['ge tal nr ', num2str(i), ': ']); talvect = [talvect; tal]; if talvect ~= [] medel = mean(talvect); summa=sum(talvect); disp(['summa = ', num2str(summa),... ' och medel = ', num2str(medel)]); else disp('inga tal har bearbetats.'); 11

Exempel 1.3: Körning >> whiletest Ge tal nr 1: 5 Ge tal nr 2: 4 Ge tal nr 3: 6 Ge tal nr 4: 7 Ge tal nr 5: 1 Ge tal nr 6: 3 Ge tal nr 7: här ges ett return Summa = 21 och medel = 4.2 Egna funktioner Var lagrar man sin kod? Hittills i m-filer i form av kommandofiler Finns även en annan form av m-filer: funktioner Egna funktioner Funktion kan ses som en en svart låda. Man stoppar in indata och får som resultat utdata. I den svarat lådan utförs beräkningar och liknande Den svarta lådan har egna variabler, för mellanlagring av data, som vi utanför ej behöver bry oss om Enda kommunikation med omvärlden via in- och utdata (in- och utparametrar) indata utdata 12

Egna funktioner Första raden i funktionsfil inleds med function, därefter utparameterlista, funktionsnamn och inparameterlista. function [y1,y2,,yn]=funknamn(x1,x2,,xm) % Kommentarer Satser En funktion kan ha noll, en, eller flera in- och utparametrar. Kan t o m ha variabelt antal parametrar Funktioner lagras i m-filer. Filnamnet måste stämma överens med funktionsnamnet, funknamn.m Jämför med inbyggda funktioner Det finns många inbyggda funktioner i MATLAB, t ex för elementär matematik och linjär algebra grafik i 2D och 3D integraler och differentialekvationer statistik kurvanpassning Exempel: if abs(sum(x)) > 10, plot(x,y), Egentligen: abs.m, sum.m, plot.m Egna funktioner Funktioner körs genom att anropas [b1,b2,,bn]=filnamn(a1,a2,,am) Efter anropet behåller inparametrarna sina värden. De påverkas ej av funktionen. I en funktion kan finnas anrop till andra funktioner 13

Egna funktioner: exempel 1 Matematiska funktionen f(x) = sin(x)cos(x) blir så här som MATLAB-funktion function f = sincos(x) % Beräknar sin(x)*cos(x) f = sin(x)*cos(x); Anrop: >> x = 0.5; y = sincos(x) y = 0.4207 OBS. Funktionen lagras i m-filen sincos.m Egna funktioner: exempel 2 Funktion som beräknar medelvärdet av två tal. function z = medelfunk( x, y ) % Beräknar medelvärdet av två tal % Filnamn: medelfunk.m z = ( x + y )/2; Anrop: a=22; b=6; c=medelfunk(a,b); disp(['medel=', num2str(c)]); Ger vid körning resultatet: medel=4 Egna funktioner: exempel 3 function rita_graf % Funktion som plottar x*sin(x) x = linspace(0,1); y = x.*sin(x); plot(x,y); Anrop: >> rita_graf OBS! Inga in- och utparametrar 14

Stora problem och m-filer Hittills haft en m-fil (kommandofil) för varje program när vi löst ett problem. Större problem måste delas upp i delproblem, var och en med egen algoritm Större program blir uppdelade i fler delprogram, dvs flera m-filer per problem vanligen funktionsfiler En m-fil, vanligen kommandofil utgör själva huvudprogrammet detta styr problemlösningen och anropar funktionerna. Olika sorters fel Det finns tre typer av fel, s.k. buggar som kan inträffa i program: 1. Syntaxfel. Ett grammatiskt fel. Kan ej översätta MATLABkoden till "datorkod". Felmeddelanden från inte alltid så lätta att tolka. 2. Exekveringsfel. Fel som uppkommer under körningen och medför att programmet "kraschar", dvs slutar exekvera, kallas exekveringsfel eller runtimefel. 3. Logiska fel. Programmeraren har tänkt fel, men programmet kör. Svårupptäckt. Vanliga syntaxfel i MATLAB Skrivfel, t ex plott(x,y); Utelämnade tecken, t ex multiplikationstecknet, *: 3(x+5) Felstavad identifierare, t ex skyldigmig = 50; if SkyldigMig > 100 Oidentifierade variabler, t ex glömt nollställa sum for i=1:5 sum=sum+i; 15

Vanliga syntaxfel Glömd punkt vid elementvisa operationer. Ger??? Error using ==> ^ Matrix must be square. Slarv med kolon, komma, seminkolon Goda råd vid programmering 1. Ha enbart en sats per rad. 2. Indentera på vettigt sätt. 3. Använd blanka rader för att dela upp koden i segment, t ex före/efter block. 4. Använd vettiga variabelnamn o funktionsnamn 5. Kommentera och förklara variabler 6. Kommentera delar av koden. 7. Ha alltid ett kommentarhuvud" i början av filen. Fel kan undvikas om koden är vettig 16