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

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.

F2: Styrstrukturer, programmeringsteknik (kap. 3 4)

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

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

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

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

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

Variabler och konstanter

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

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

Sanningar om programmering

F3: Funktioner (kap. 5)

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

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

Skapa egna funktioner

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

Repetera snabbt vad du lärde dig förra veckan. Du är nu redo att kasta dig in i nästa fas, teorin om villkor.

MMA132: Laboration 2 Matriser i MATLAB

Iteration while-satsen

Introduktion till MATLAB

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

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

Föreläsning 3. Iteration while-satsen

2 februari 2016 Sida 1 / 23

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

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

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

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

Övningsuppgifter kapitel 8

Föreläsning 3-4 Innehåll

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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?

Objektorienterad programmering

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

Sanningar om programmering

DD1314 Programmeringsteknik

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen. save

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

TANA17 Matematiska beräkningar med Matlab

4.3. Programmering i MATLAB

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Föreläsning 3: Booleans, if, switch

Programmeringsteknik med C och Matlab

Beräkningsvetenskap föreläsning 2

Föreläsning 4 Programmeringsteknik och Matlab DD1312. Logiska operatorer. Listor. Listor, tupler, strängar och forslingor

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

For-sats/slinga. Notis

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

Inledande programmering med C# (1DV402) Summera med while"-satsen

Motivering för programmering. F1: Introduktion, Matlabrepetition (kap. 1 2) Att kunna programmera. Interpreterat/kompilerat

Klassdeklaration. Metoddeklaration. Parameteröverföring

Kort om programmering i Matlab

TDDC77 Objektorienterad Programmering

Föreläsning 3 Programmeringsteknik och Matlab DD1315. Importering av moduler. randrange

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

F4. programmeringsteknik och Matlab

2.4. Teckensträngar och logiska uttryck

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

TAIU07 Matematiska beräkningar med Matlab

Föreläsning 2 Programmeringsteknik och C DD1316

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 4 december 2015 Sida 1 / 26

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

Kort om programmering i Python

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

DOM (Document Object Model) är modellen efter vilken en webbläsaren är uppbyggd. Alla objekt/element i webbläsaren finns hierarkiskt ordnade i DOM.

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

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

Visual Basic, en snabbgenomgång

TANA17 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med Matlab

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

TANA81: Simuleringar med Matlab

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

Beräkningsverktyg HT07

Programmering i C, 7,5 hp

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

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Objektorienterad Programmering (TDDC77)

TANA17 Matematiska beräkningar med Matlab

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Testning av program. Verklig modell för programutveckling

TDIU01 - Programmering i C++, grundkurs

Enkla datatyper minne

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

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

Felhantering TDDD78, TDDE30, 729A

Data, typ, selektion, iteration

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

Svensk Matlab-terminologi

i LabVIEW. Några programmeringstekniska grundbegrepp

729G04 Programmering och diskret matematik. Föreläsning 7

Planering Programmering grundkurs HI1024 HT TIDAA

Transkript:

F2: Styrstrukturer, programmeringsteknik (kap. 3 4) Villkors, if, switch Villkor, logiska värden, relationsoperatorer, logiska operatorer Skottårsexempel Triangelanalysexempel, strängar Switch, tärningsexempel Felhantering, try-catch, error Repetitionskommando, slinga, for, while, break, continue Kuggväxelexempel, blandad utskrift med disp Datorpecision, eps Programmeringsstrategi från problem till program, programskiss (pseudokod! p-kod), algoritm Filläsning- och skrivning, fopen, fscanf, fprintf Villkor if, switch Man vill att vissa ska exekveras ast om ett visst villkor är sant. if villkor Man kan vilja exekvera olika om villkoret är sant resp. falskt if villkor If-kommando forts. Ett if-kommando kan innehålla ett annat. if villkor2 if villkor3 3 4 5 If-kommando forts. Det finns precis ett till varje if. När några villkor ska undersökas i följd kan man använda if if villkor2 if villkor2 3 3

If-kommando forts. Det finns inget till ett if. Man kan utelämna -delen: if villkor2 Villkor Ett godtyckligt uttryck kan användas som villkor. 0 är falskt. Skilt från 0 är sant. 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 Villkor forts. Värdet av k ligger mellan 5 och 17 skulle man skriva 5<k<17 i matematiken. 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 if ~a c = 0 c = b % c = a b if a c = 1 c = b Skottår Enligt den julianska (romerska) kalern är ett årtal skottår om det ä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. leapjul = rem(y,4)==0; leapgreg = leapjul & ~(rem(y,100)==0 &... rem(y,400)~=0); % alternativt kommando leapgreg = leapjul & (rem(y,100)~=0... rem(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' if a>=b+c b>=c+a c>=a+b 'ickeexisterande' if a==b & b==c & c==a 'liksidig' if a==b b==c c==a 'likbent' 'oliksidig' En text/sträng är en radvektor med element av typ tecken/char. Det som lagras är teckenkoderna enligt ISO 8859-1, Latin1. uint16('aåäöaåäö -') ans = [97 229 228 246 65 197 196 214 32 45] Triangelanalys forts. Om vi lägger a i filen tri.m så kan vi använda den som kommandofil. a = 0; b = 1; c = 2; tri % 0 1 2 ans = ickeexisterande a = 3; tri % 3 1 2 ans = ickeexisterande a = 1.5; tri % 1.5 1 2 ans = oliksidig a = 2; tri % 2 1 2 ans = likbent b = 2; tri % 2 2 2 ans = liksidig Switch-kommando När man vill exekvera olika för olika värden på ett uttryck kan man använda switch i.s.f. if. switch uttryck case värde1 case värde2 otherwise Värdena är uttryck eller följder av värden inom»{}» (klammerparenteser) dvs. en celltabell. Om uttryckets värde inte finns med bland värdena utförs a efter otherwise. Delen otherwise får utelämnas. Switch-kommando forts. Låt t vara resultatet av ett tärningskast: switch t case {1,3,5} 'Udda antal prickar' case {2,4,6} 'Jämnt antal prickar' otherwise 'Tärningen verkar onormal!'

Felhantering, try-kommandot Vissa typer av fel får Matlab att skriva felmeddelande. a = [1]; a(3)??? Index exceeds matrix dimensions. Man kan fånga upp felet och skriva ett eget felmeddelande eller försöka rätta felet. a = [1]; try a(3) catch '??? Indexfel'??? Indexfel Felhantering forts. Man kan själv rapportera fel med error(felmeddelande). Då skriver Matlab var felet inträffade och felmeddelandet. Om ett sådant fel rapporteras i en m-fil som anropas mellan try och catch skrivs inte felmeddelandet, utan a mellan catch och utförs. Vissa beräkningar ger inte felmeddelande men möjligen varningsmeddelande och ett speciellt felvärde som resultat. 3/0 och 2*realmax ger båda resultatet Inf (!) och 0/0 ger NaN (not a number). När man konverterar ett värde till någon datatyp som inte innehåller värdet lagras det närmaste möjliga värdet. int8(1000) ans = 127 Repetitionskommando, slinga, for Att utföra samma många gånger är vanligt. När man upprepar för en följd i förväg kända värden använder man for och när man upprepar så länge ett villkor är sant använder man while. for variabel = uttryck Variabeln kallas slingans styrande variabel. Den sätts i tur och ordning till kolumnerna i den tabell 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. 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. Läs min, max och gear. 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/n-gear). Skriv ut bästa värdena.

min = input('minsta kuggantal: ') max = input('största kuggantal: ') gear = input('önskad utväxling: ') 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; ; tol = abs(m/n-gear); if tol<besttol besttol = tol; bestm = m; bestn = n; % if % for n % for m disp(['bästa m, n och m/n är ' int2str(bestm)... ', ' int2str(bestn)' och '... num2str(bestm/bestn)]); % if Kuggväxel forts. Antag att a finns i kommandofilen vaxel.m. vaxel Minsta kuggantal: 5 Största kuggantal: 50 Önskad utväxling: 3.14159 Bästa m, n och m/n är 22, 7 och 3.1429 Funktionen disp(sträng) skriver ut sin parameter utan omgivande strängparenteser ('). I kommandofilen kan vi med samma resultat skriva: ['Bästa m, n och m/n är ' int2str(bestm)... ', ' int2str(bestn) ' och '... num2str(bestm/bestn)] While while villkor Villkoret beräknas när exekveringen av while-slingan börjar och efter varje varv. Exekveringen avbryts när villkoret är falskt. Slingor och villkors kan innehålla andra slingor och villkors. Kommandot break innebär att närmast omgivande slinga avbryts och exekveringen fortsätter efter slingans avslutande. Kommandot continue innebär att pågåe varv i närmast omgivande slinga avbryts och nästa varv, om något återstår, exekveras. eps Ett mått på en datatyps precision får man med det minsta tal, systeps, för vilket 1+systeps!1. systeps = 1; for i = 1:1000 systeps = systeps/2; if systeps+1==1 break systeps = systeps* systeps = 2.2204e-16 I Matlab finns en inbyggd variabel eps med motsvarande betyd. Matlabs eps kan ändras och påverkar den relativa feltoleransen för vissa. eps = 2.2204e-16

Testning är ett program är korrekt? Att ta reda på om ett program är korrekt är svårt. Hur beskriver (specificerar) man vad programmet ska göra? Hur tolkar man uppdragsgivarens eller framtida kunders önskemål? Man kan systematiskt testa olika fall/indata. Det är sällan möjligt att pröva alla fall/indatakombinationer. När man hittar ett fel kan man försöka rätta detta. Man kan systematiskt resonera om ett program och jämföra resonemangets resultat med programmets specifikation. En algoritm (av Abu Ja far Mohammaed ibn Mûsâ al-khowârizmî som 825 gav ut en algebrabok Kitab al jabr w al-muqabala) är en detaljerad beskrivning av hur man i ett ändligt antal steg löser ett problem. 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). Filläsning- och skrivning forts. [var,läst_antal] = fscanf(filreferens,formatsträng,önskat_antal) returnerar en variabel med värden från filen i var och antalet lästa element i läst_antal (läst_antal får utelämnas), formatsträng beskriver hur data i filen ska tolkas (%d betyder heltal) och önskat_antal anger hur många värden som önskas. fprintf(filreferens,formatsträng,val1, ) skriver värdena val1, på filen enligt formatsträng (%d\n betyder som heltal med radbyte efter varje tal). Filläsning- och skrivning forts. frin = fopen('in.dat'); frout = fopen('out.dat','w'); [x,count] = fscanf(frin,'%d',1); if count>0 while x~=0 if x>0 fprintf(frut,'%d\n'); [x,count] = fscanf(frin,'%d',1); if count==0 break, % while % if fclose(frin); fclose(frout);

Filläsning och skrivning forts. Vi lägger koden i kommandofilen io.m och testar. type in.dat Och med ändrad infil. 2 3 5-7 11 type in.dat 13-17 0 19-23 29 2 3 5-7 11 io 13-17 19-23 29 type out.dat io 2 type out.dat 3 2 5 3 11 5 13 11 13 19 29