Föreläsning 2 Styrstrukturer, program. Dagens föreläsning. Villkor

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

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

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

F2: Styrstrukturer, programmeringsteknik (kap. 3 4)

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

Laboration 1. I. Matlabs fönster, hjälp, variabler och enkla beräkningar. Introduktion

Programmera en NXT Robot

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

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

Handledning för digitala verktyg Talsyntes och rättstavningsprogram. Vital, StavaRex och SpellRight

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

Algebra, polynom & andragradsekvationer en pampig rubrik på ett annars relativt obetydligt dokument

Datorövning 2 Statistik med Excel (Office 2007, svenska)

TAIU07 Matematiska beräkningar med Matlab

Föreläsning 5: Rekursion

Handbok Blinken. Danny Allen Översättare: Stefan Asserhäll

Tentamen i Programmering grundkurs och Programmering C

Instruktioner för beställning och kontoadministration för abonnenter av inlästa läromedel

konstanterna a och b så att ekvationssystemet x 2y = 1 2x + ay = b 2 a b

Variabler och konstanter

Jo, Den Talande Boken har så många möjligheter inbyggda, att den kan användas från förskoleklassen och ända upp på högstadiet.

Tillämpad UNIX. Laborations-PM Christian von Schultz, Programpaket och processhantering

Lathund, procent med bråk, åk 8

ANVÄND NAVIGATIONEN I CAPITEX SÄLJSTÖD

( ostream ) << ( annan datatyp ) : ostream

DATASAMORDNING NYHETERNA I CHAOS Utbildning Chaos/Handledning - Nyheterna i Chaos 3/

Att koda en magnetremsa i plastkortskrivare med inbyggd magnetkodare.

Föreläsning 8: Räkning. Duvhålsprincipen. Kombinatorik

Du ska nu skapa ett litet program som skriver ut Hello World.

Planering av ett större program - Funktioner, moduler, if och Boolean. Linda Mannila

Ha det kul med att förmedla och utveckla ett knepigt område!

FRÅN A TILL Ö LäraMera Ab / och Allemansdata Ab / FRÅN A TILL Ö

ATT KUNNA TILL. MA1050 Matte Grund Vuxenutbildningen Dennis Jonsson

Utveckla arbetsmiljö och verksamhet genom samverkan

4-6 Trianglar Namn:..

Exempel på tentamensuppgifter i LMA100, del 1

ELEV- HANDLEDNING (Ansökan via webben)

Vi skall skriva uppsats

Programexempel: tärningsspel

Hur du arbetar med VFU-portfölj i Mondo. en lathund för student

Boken om Teknik. Boken om Teknik är en grundbok i Teknik för åk 4 6.

SA33 - Val av kurser inom program m terminsreg

Arbeta bäst där du är Dialect Unified Mi

Kängurutävlingen Matematikens hopp 2009 Cadet för elever i åk 8 och 9

TIMREDOVISNINGSSYSTEM

Individuellt Mjukvaruutvecklingsprojekt

Syftet med en personlig handlingsplan

Skapa en rapport med snygg formatering, rubriker, sidnummer och innehållsförteckning

Menys webbaserade kurser manual för kursdeltagare. Utbildningsplattform: Fronter

Kom-igång VictorReader Stratus 4 H som taltidningsspelare Ver

Kapitel 6. f(x) = sin x. Figur 6.1: Funktionen sin x. 1 Oinas-Kukkonen m.fl. Kurs 6 kapitel 1

TIMREDOVISNINGSSYSTEM

Riktlinjer - Rekryteringsprocesser inom Föreningen Ekonomerna skall vara genomtänkta och välplanerade i syfte att säkerhetsställa professionalism.

Textsträngar från/till skärm eller fil

Efter att du har installerat ExyPlus Office med tillhörande kartpaket börjar du med att göra följande inställningar:

Administrera utskick på utbildningstillfälle

DOP-matematik Copyright Tord Persson. Bråktal Läs av vilka tal på tallinjen, som pilarna pekar på. Uppgift nr

På och avmastning. 1. Ensam är inte stark

Enkätresultat för elever i åk 9 i Borås Kristna Skola i Borås hösten Antal elever: 20 Antal svarande: 19 Svarsfrekvens: 95% Klasser: Klass 9

Det flippade klassrummet hur uppfattas det av eleverna?

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

Monteringsanvisning Garageport

Pesach Laksman är lärarutbildare i matematik och matematikdidaktik vid Malmö högskola.

Vad är en webbläsare?

Box 79 Hantverksvägen 15 Tel. +46 (0) Web Väddö, Sverige Fax +46 (0)

Guide till Wordpress text- och bildredskap

Datorövning 2 Statistik med Excel (Office 2003, engelska)

4-3 Vinklar Namn: Inledning. Vad är en vinkel?

Avsikt På ett lekfullt sätt färdighetsträna, utveckla elevers känsla för hur vårt talsystem är uppbyggt samt hitta mönster som uppkommer.

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

Kängurutävlingen Matematikens hopp 2009 Cadet för gymnasiet för elever på kurs A

Hävarmen. Peter Kock

Snabbslumpade uppgifter från flera moment.

Erfarenheter från ett pilotprojekt med barn i åldrarna 1 5 år och deras lärare

a n = A2 n + B4 n. { 2 = A + B 6 = 2A + 4B, S(5, 2) = S(4, 1) + 2S(4, 2) = 1 + 2(S(3, 1) + 2S(3, 2)) = 3 + 4(S(2, 1) + 2S(2, 2)) = = 15.

Manual för BPSD registret. Version 6 /

SF1625 Envariabelanalys

Laganmälan & Laghantering

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

Gissa det hemliga talet

Föräldrar i Skola24. Schema

Din Guide till Second Life

ANVÄNDARHANDLEDNING FÖR

Ekvationssystem, Matriser och Eliminationsmetoden

Föreläsning 1 & 2 INTRODUKTION

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

Sammanfattning av kursdag 2, i Stra ngna s och Eskilstuna

Sektionen för Beteendemedicinsk smärtbehandling

Manual för Min sida 1/ rev

Modul 6: Integraler och tillämpningar

BÅGSKYTTEFÖRBUNDET MEMBER OF SVERIGES RIKSIDROTTSFÖRBUND AND FÉDERATION INTERNATIONALE DE TIR A L ARC

Anva ndarhja lp IMYR -Myndighetsrapportering

Kapitel 10 Rumsdefinition... 3

Skapa interaktiva vidoquizzar i LnuPlay/Mymoodle

Webb-bidrag. Sök bidrag på webben Gäller från

Bra att veta samt tips och trix i SiteVision 3

Design by. Manual Jossan.exe. Manual. till programmet. Jossan.exe. E-post:

Systematiskt kvalitetsarbete

ÖSS jolles Seglarsaga

Administration Excelimport

Transkript:

DN1212 för P1 Föreläsning 2 Styrstrukturer, program Ett program är uppbyggt av satser som skrivs i en följd. Om satserna alltid skulle utföras en i taget uppifrån och ned skulle programmering vara tämligen ointressant. Intressant är olika möjligheter att styra programflödet. Man talar om tre grundläggande styrstrukturer: 1 sekvens: satserna utförs i ordning som de står 2 villkor: man testar om ett villkor är uppfyllt; om det är det gör man en sak och annars gör man en annan sak 3 repetition: ett antal satser repeteras om och om igen antingen ett visst antal gånger eller tills eller så länge som ett visst villkor är uppfyllt För att öka läsbarheten och möjliggöra återanvändning av kod brukar man dela upp program i funktioner en typ av moduler. Dagens föreläsning Handlar om dessa styrstrukturer i Matlab Hur man får in värden till programmet och hur man styr utskrifterna Att läsa värden från fil och att skriva värden till en fil Vad är ett korrekt program, algoritmer Hur man hittar fel i sitt program 1 2 Villkor Man vill att vissa satser ska utföras bara om ett visst villkor är sant. % Gör a till den största och b till den minsta av a och b if b>a temp = a; a = b; b = temp; Generellt if villkor Man kan vilja exekvera olika kommandon om villkoret är sant resp. falskt if villkor 1 else 2 En if-sats kan innehålla en annan if-sats. if villkor1 if villkor2 1 else 2 Om flera villkor ska undersökas i följd kan man använda elseif if villkor1 1 elseif villkor2 2 else 3 3 4

Skrivregler Villkor Det finns exakt ett till varje if Det finns inget till elseif Man kan utelämna else-delen Matlabs editor hjälper dig att se vilka Matlab-ord som hör ihop. Matlabs editor hjälper dig att göra indentering (indrag) så att strukturen blir tydlig. Matlab klarar en mycket komplicerad villkorsstruktur det är programmerarens tankeförmåga som begränsar Villkor uttrycks vanligen med logiska uttryck som resulterar i värdet sant eller falskt I princip kan ett godtyckligt uttryck användas som villkor. Skilt från 0 är sant, 0 är falskt. Sant lagras som 1. Ett uttrycks anses sant när realdelen av alla element är nollskilda. Relationsoperatorerna <, <=, >, >=, == och ~= ger logiskt värde som resultat. Logiska värden kan kombineras med de logiska operatorerna ~, &,, && och samt den logiska funktionen xor. Det finns många inbyggda funktioner som ger ett logiskt värde som resultat. ~a a&b a b xor(a,b) a a b 0 1 a b 0 1 a b 0 1 0 1 0 0 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 1 1 0 5 6 I matematik kan man skriva 5<k<17 om värdet av k ligger mellan 5 och 17 I Matlab skriver man det som 5<k & k<17 dvs. k är större än 5 och k är mindre än 17. I Matlab har 5<k<17 annan tolkning: k = 1; 5<k<17 ans = 1 Först beräknas 5<k dvs. 5<1 som ju är falskt dvs. 0. Därefter beräknas 0<17 som ju är sant dvs. 1. Det är lätt att skriva fel och förväxla = (tilldelningsoperatorn) och == (likhetsoperatorn). Operander beräknas före operatorn. Genvägsoperatorerna && och fungerar annorlunda: c = a && b %bra om b bara kan evalueras om a är sann if ~a c = 0 else c = b c = a b %bra om b bara kan evalueras om a är falsk if a c = 1 else c = b Skottårsexemplet Enligt den julianska (romerska) kalern är ett år skottår om årtalet är delbart med 4. Enligt den gregorianska, i Sverige sedan 1753 använda, kalern är ast de jämna århundraden som är jämnt delbara med 400 skottår. Låt y vara ett årtal. Sätt leapjul till sant om y är skottår enligt den julianska och leapgreg om y är skottår enligt den gregorianska kalern. Året är ung. 365,2422 dagar och den gregorianska kalern ger 365,2425 dagar dvs. en dag fel på 3236 år. leapjul = mod(y,4)==0; y: 1996 2000 2001 2004 2096 2100 2200 2300 2400 2500 leapjul(y): 1 1 0 1 1 1 1 1 1 1 7 8

Vi vill ha: y: 1996 2000 2001 2004 2096 2100 2200 2300 2400 2500 leapgreg(y): 1 1 0 1 1 0 0 0 1 0 Delbart med 4 men inte jämnt århundrade som inte är jämt delbart med 400. Dvs. delbart med 4 och inte (delbart med 100 och inte delbart med 400). leapgreg = leapjul & ~(mod(y,100)==0 & mod(y,400)~=0); % alternativt leapgreg = leapjul & mod(y,100)~=0 mod(y,400)==0; Triangelanalys Avgör om en triangel med sidorna a, b och c är liksidig, likbent, oliksidig, eller ickeexisterande. % Analyserar triangeln med sidorna a, b och c. if a<=0 b<=0 c<=0 'ickeexisterande' elseif a>=b+c b>=c+a c>=a+b 'ickeexisterande' elseif a==b & b==c & c==a 'liksidig' elseif a==b b==c c==a 'likbent' else 'oliksidig' 9 10 Switch för många alternativ Repetition Om man skulle få många elseif kan man ibland använda switch switch uttryck case värde1, 1 case värde2, 2 otherwise Värdena är uttryck eller följder av värden inom {} (klammerparenteser) Om uttryckets värde inte finns med bland värdena utförs kommandona efter otherwise. Delen otherwise får utelämnas. Ofta vill man att samma satser ska uföras många gånger. Då använder man repetitionssatser. Och satserna som upprepas utgör en slinga. Om man i förväg vet hur hur många gånger slingan ska köras använder man en For-slinga. När slingan ska upprepas så länge ett villkor är uppfyllt använder man en while-slinga. Känt antal varv: for variabel = uttryck Variabeln kallas slingans styrande variabel. Den sätts i tur och ordning till de värden som är resultatet av uttrycket. Uttrycket beräknas bara när exekveringen av for-slingan börjar. Uttrycket är ofta en linjär talföljd, b:s:e. 11 12

Exempel for-slingor %for-sats enklaste exemplet: läs 5 element till en vektor for k=1:5 x(k)=input('nästa element: '); x Exekveras: Nästa element: 6 Nästa element: 5 Nästa element: 4 Nästa element: 3 Nästa element: 2 Slinga i slinga Man kan lägga en slinga inuti en annan slinga. Det är vanligt när man jobbar med matriser. for variabel1=uttryck1 1 for variabel2=uttryck2 2 Man kan nästla så många for-satser man vill inuti varandra x = 6 5 4 3 2 13 14 Exempel slinga i slinga %for-sats slinga i slinga; %läs värden till 3*4-matris for k=1:3 fprintf('rad: %d \n', k) for l=1:4 a(k,l)=input('nästa : '); a Kuggväxel Man vill konstruera en kuggväxel där utväxlingen kommer så nära ett givet värde, gear, som möjligt. Man har tillgång till kugghjul med minst min och högst max kuggar. Läs in gear, min och max. Kontrollera att min, max och gear är större än noll. Låt m gå från min till max. Testa de två n som ligger på var sin sida om m/gear. Håll reda på de bästa m och n hittills dvs. de som givit det minsta värdet på abs(m/ngear). Skriv ut bästa värdena. 15 16

%beräkna kuggväxel med önskad utväxling min = input('minsta kuggantal: '); max = input('största kuggantal: '); gear = input( Önskad utväxling: '); bestdiff = realmax; if gear>0 & max>0 & min>0 for m = min:max nprel = floor(m/gear); for n = nprel:nprel+1 if n<min n=min; ; if n>max n=max; ; diff = abs(m/n-gear); if diff<bestdiff bestdiff = diff; bestm = m; bestn = n; % if % for n % for m fprintf('bästa utväxling %f fås med m= %d och n= %d \n', bestm/bestn, bestm, bestn); % if 17 18 While-sats While-exempel while villkor Villkoret beräknas varje gång exekveringen av while-slingan börjar. Exekveringen avbryts när villkoret är falskt. Precis som vid for-slingor kan en while-slinga innehålla ytterligare en slinga. Kommandot break innebär att närmast omgivande slinga avbryts och exekveringen fortsätter efter slingans avslutande Satsen continue innebär att pågåe varv i närmast omgivande slinga avbryts och nästa varv, om något återstår, exekveras. Många break och continue gör ett program svårläst %exempel på while disp('läs tal till en vektor; avsluta med negativt tal') x=[]; a=input('nästa värde: '); while a>=0 x=[x a]; a=input('nästa värde: '); fprintf('vektorn är: %f n', x) läs tal till en vektor; avsluta med negativt tal Nästa värde: 9 Nästa värde: 4 Nästa värde: 0 Nästa värde: -3 x = 9 4 0 19 20

Inmatning från tangentbord In=input(ut) skriver ut strängen ut på skärmen och väntar sen på att användaren ska mata in något. Notera att strängen ska omges av enkelblippar. Avsluta med semikolon om du inte vill få variabeln utskriven igen. Skriv i kommandofönstret: x=input( Ge ett tal: ); Så får du >> x=input('ge ett tal: '); Ge ett tal: 5 Det går bra att läsa in textsträngar också >> namn=input('vad heter du? ','s'); Vad heter du? Kerstin >> Utskrift på skärmen Oformaterad utskrift görs med disp disp(a) skriver ut värdet av variabeln a där a kan vara en sträng >> a=[1 2; 3 4]; >> disp(a) 1 2 3 4 >> a='kerstin'; >> disp(a) 21 22 Formaterad utskrift görs med fprintf fprintf(format, variabellista); Formatet är en sträng av text som ska skrivas ut och formatkoder. Exempel på formatkoder: %e tal på exponentform %d tal med decimalpunkt %f tal med fixpunkt %6.2f tal som tar upp 6 positioner och har 2 decimaler %s sträng %c tecken \n ny rad Exempel >> kurs='dn1212'; >> studenter=92; >> medelbetyg=4.32; >> fprintf('kursen %s hade %d studenter och medelbetyg %4.2f \n', kurs, studenter, medelbetyg) Kursen DN1212 hade 92 studenter och medelbetyg 4.32 >> Filläsning- och skrivning Läs tal från filen in.dat tills talet 0 hittas eller filen är slut och skriv de positiva talen på filen out.dat. Man läser alla värden från en fil till en variabel med load. Vi vill läsa ett värde i taget. Vi öppnar filen med fopen och om det går bra får vi en filreferens. Om det inte går bra returneras 1. Därefter kan vi läsa med fscanf och skriva med fprintf. filreferens = fopen(filnamn,behörighet) returnerar en filreferens, behörigheten utelämnas eller skrivs 'r' för läsning, skrivs 'w' för skrivning från början och skrivs 'a' för skrivning efter tidigare filslut (app). [a,c]=fscanf(fp, format, storl) läser data från filen fp till matrisen a. storl är antal värden som ska läsas. Strängen format anger formatet på de data som läses in. I c returneras antalet inlästa element. 23 24

Exempel på filer %test av läsning från och skrivning till fil frin = fopen('in.dat'); frout = fopen('out.dat','w'); if frin>0 [x,count] = fscanf(frin,'%d',1); if count>0 while x~=0 if x>0 fprintf(frout,'%d n',x); [x,count] = fscanf(frin,'%d',1); if count==0 break, % while % if fclose(frin); fclose(frout); >> type in.dat 2 3 5-7 11 13-17 0 19-23 29 >> type out.dat 2 3 5 11 13 25 26 Vad är ett korrekt program? Felsökning, avlusning Ett som går att exekvera? Ett som ger de utdata som programmeraren förväntar? Ett som ger du utdata som användaren förväntar? Ett som beter sig som passar användaren? Man kan systematiskt testa olika fall/indata. När man hittar fel försöker man rätta. Man kan systematiskt resonera om program. En algoritm av Abu Ja far Mohammaed ibn Mûsa al- Kowârizmî som år 825 gav ut en bok) är en detaljerad beskrivning av hur man i ett ändligt antal steg löser ett problem. Hur beskriver man (specificerar) vad programmet ska göra? Hur tolkar man uppdragsgivarens och användarnas önskemål? Framtida önskemål? Börja med att noga läsa koden. Ofta hittar man fel redan då. Näst enklaste varianten av felsökning är att lägga in utskrifter av variabelvärden (eller enbart text för att bekräfta att satsen exekverats) kommentera bort delar av programmet med % (tyvärr måste varje kommentarrad förses med %-tecknet) 27 28

Avlusningsverktyg Matlabs editor innehåller funktioner för att sätta och ta bort brytpunkter - även villkorliga stega sig framåt en rad i taget (eller antal rader) fortsätta exekveringen till nästa brytpunkt eller slutet på funktionen hoppa mellan olika funktioner funktionerna nås med knapparna i editorn. Låt muspekaren vila över en knapp för att få en förklaring av vad den gör. Du sätter dit en brytpunkt genom att klicka på ikonen med en röd punkt. Brytpunkten hamnar då på den rad där du står. Klickar du på det lilla strecket till höger om radnumret får du en brytpunkt på den raden. Starta sen exekveringen, så exekverar programmet fram till brytpunkten. dbcont i kommandofönstret fortsätter exekveringen till nästa brytpunkt eller till funktionens slut dbstep i kommandofönstret exekverar en rad till dbstep antal i kommandofönstret exekverar antal rader till dbquit i kommandofönstret avbryter exekveringen När exekveringen stoppat kan du skriva ut variabelvärden i kommandofönstret genom att skriva variabelns namn på vanligt sätt Du kan plocka bort brytpunkten på rad r genom att skriva dbclear at r eller dbclear at r in fnamn och ange filens namn om du jobbar med flera filer Det är normalt väsentligt enklare att hitta fel genom systematisk sökning än genom trial and error. Hittar man fel genom trial and error förstår man ofta inte varför det blev fel. 29 30 31