Logik och kontrollstrukturer

Relevanta dokument
Utsagor (Propositioner) sammansatta utsagor sanningstabeller logisk ekvivalens predikat (öppna utsagor) kvantifierare Section

MATEMATIKENS SPRÅK. Syftet med denna övning är att med hjälp av logik lära oss att uttrycka matematik mer exakt,

Sanningsvärdet av ett sammansatt påstående (sats, utsaga) beror av bindeord och sanningsvärden för ingående påståenden.

MATEMATIKENS SPRÅK. Syftet med denna övning är att med hjälp av logik lära oss att uttrycka matematik mer exakt, lära oss

MATEMATIKENS SPRÅK. Avsnitt 1

Övningshäfte 1: Logik och matematikens språk

JavaScript del 3 If, Operatorer och Confirm

MA2047 Algebra och diskret matematik

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Logik. Dr. Johan Hagelbäck.

TATM79: Föreläsning 1 Notation, ekvationer, polynom och olikheter

TDIU01 - Programmering i C++, grundkurs

Föreläsning 4. Val, boolska värden, läsbarhet, osv

D. x 2 + y 2 ; E. Stockholm ligger i Sverige; F. Månen är en gul ost; G. 3 2 = 6; H. x 2 + y 2 = r 2.

Logik. Boolesk algebra. Logik. Operationer. Boolesk algebra

7, Diskreta strukturer

TDIU01 - Programmering i C++, grundkurs

Uttryck och villkor. Föreläsning 2

Logisk semantik I. 1 Lite om satslogik. 1.1 Konjunktioner i grammatisk bemärkelse. 1.2 Sant och falskt. 1.3 Satssymboler. 1.

Vad är det? Översikt. Innehåll. Vi behöver modeller!!! Kontinuerlig/diskret. Varför modeller??? Exempel. Statiska system

7, Diskreta strukturer

2.4. Teckensträngar och logiska uttryck

ANDREAS REJBRAND NV3ANV Matematik Matematiskt språk

Semantik och pragmatik

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Uttryck och villkor. Föreläsning 2

Föreläsningsanteckningar och övningar till logik mängdlära

TATM79: Föreläsning 1 Notation, ekvationer, polynom och summor

Översikt över Visual Basic

p /\ q r DD1350 Logik för dataloger Kort repetition Fö 3 Satslogikens semantik

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

Booleska variabler och översättning mellan programuttryck och booleska variabler

Visual Basic, en snabbgenomgång

Kap. 7 Logik och boolesk algebra

Data, typ, selektion, iteration

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

Övning2. Variabler. Data typer

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

Programmering A. Johan Eliasson

Formell logik Kapitel 3 och 4. Robin Stenwall Lunds universitet

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

Extramaterial till Matematik Y

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

LMA033/LMA515. Fredrik Lindgren. 4 september 2013

A B A B A B S S S S S F F S F S F S F F F F

Beräkningsvetenskap föreläsning 2

Semantik och pragmatik

Tommy Färnqvist, IDA, Linköpings universitet. 1 Kursadministration 1. 2 Introduktion Varför logik? Satslogik... 2

Finns det tillräckligt med information för att bestämma hur många av eleverna som fick 1 poäng? Vad tycker du?

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

DD1350 Logik för dataloger. Fö 2 Satslogik och Naturlig deduktion

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

Övningshäfte 6: 2. Alla formler är inte oberoende av varandra. Försök att härleda ett par av de formler du fann ur några av de övriga.

En villkorssats är den konstruktion som finns i C++ för att göra en selektion av två alternativa sekvenser. Formen för if satsen är

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

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

Variabler och konstanter

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

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

Språket Python - Del 1 Grundkurs i programmering med Python

Formell logik Kapitel 7 och 8. Robin Stenwall Lunds universitet

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

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

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?

Användarhandledning Version 1.2

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.

Parameteröverföring. Exempel. Exempel. Metodkropp

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

En introduktion till logik

Datorlingvistisk grammatik I Institutionen för lingvistik och filologi Oktober 2007 Mats Dahllöf

Hur implementera algoritmerna på maskinnivå - datorns byggstenar

Grunderna i stegkodsprogrammering

Övningsuppgifter till föreläsning 2 Variabler och uttryck

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

MA 11. Hur starkt de binder. 2 Reella tal 3 Slutledning 4 Logik 5 Mängdlära 6-7 Talteori 8 Diofantiska ekvationer 9 Fördjupning och kryptografi

Innehållsförteckning

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

LÖSNINGSFÖRSLAG TENTAMEN

Föreläsning 6. pseudokod problemlösning logik algoritmer

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

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

Övningar i ekvationer

2.1 Variabler. 2.2 Regler för namngivning i C. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 2

Introduktion C-programmering

Extramaterial till Matematik Y

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

Introduktion till logik

F4. programmeringsteknik och Matlab

Koda ett mattetest 5 av 5. Lektionen handlar om att göra ett mattetest som fungerar för alla multiplikationstabeller. Koda ett mattetest 5 av 5

Objektorienterad programmering i Java

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

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

TDDC77 Objektorienterad Programmering

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

Repetition av matematik inför kurs i statistik 1-10 p.

Systemutvecklare SU13, Malmö

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

Kort om programmering i Python

Transkript:

Logik och kontrollstrukturer Flödet av instruktioner i ett programmeringsspråk bygger vi upp med hjälp av dess kontrollstrukturer. I C har vi exemplen if, if else, while, do while. Dessutom finns switch och?-operatorn som är kompakta former av if else och for-satsen som är en kompakt form av while. Samtliga kontrollstrukturer bygger på att skapa logiska uttryck. Programmering och logik är därför nära kopplade. Veckans övning går ut på att träna i logik. Logiska utsagor och uttryck En utsaga kan vara sann eller falsk, t.ex. Sara kör en bil, värdet på variabeln x är 4. Inom logiken anges en utsaga vanligen med någon av bokstäverna p, q eller r. Utsagorna kan i sin tur kombineras med logiska operatorer för att bilda logiska uttryck som även det kan vara sant eller falskt. De tre vanligaste logiska operatorerna är och (konjunktion), eller (disjunktion) och icke (negation). Ett exempel på ett uttryck är Sara kör en bil och Sara svänger höger Utsagorna är Sara kör en bil (låt oss kalla utsagan för p) och Sara svänger höger (q). Den logiska operatorn är och. Frågan är nu om uttrycket är sant eller falskt. Givetvis beror det dels på om de två utsagorna i sig är sanna eller falska och vad som händer i kombination med operatorn. I detta exempel har vi fyra fall vi måste betrakta. Om Sara kör en bil så är utsagan sann, annars falsk. Samma med Sara svänger höger. Det blir fyra fall då det finns fyra möjliga kombinationer. För att uttrycket ska vara sant krävs att båda utsagorna är sanna, annars blir utsagan falsk och detta beror på operatorn och. Blir det alltid så? Ja faktiskt. Vad händer om vi ändrar operatorn till eller? Vi reder strax ut detta. Operator och betecknas i logiken med och inom programmering i C med &&. Eller betecknas med respektive och icke med ~(eller respektive!. Låt oss nu ta några exempel på uttryck och hur de representeras. uttryck Sara kör en bil och Sara svänger höger Sara svänger inte höger Sara svänger höger men kör inte bil logik p q q q p För att avgöra om uttrycken blir sanna eller falska behöver vi först reda ut hur operatorerna fungerar. Vi bygger en sanningstabell. Vi skriver T för true (sann) och F för false (falskt). p q ~p (icke p) p q (p och q) p q (p eller q) T T F T T T F F (q är irrelevant) F T F T T F T F F T (q är irrelevant) F F

Av tabellen ovan ser vi svaret på frågan vi ställde tidigare. Uttrycket Sara kör bil eller Sara svänger höger blir sant om minst en av utsagorna är sann. Enda gången det är falskt är om båda utsagorna är falska. Sara kanske inte svänger alls och hon sitter på en cykel. Däremot blir det sant om Sara sitter på en cykel och svänger höger. Av exemplen ovan har vi rett ut de två första, men vad händer i sista exemplet. Sara svänger höger men kör inte bil. Återigen tar vi en sanningstabell. p q p q p T T F F T F F F F T T T F F T F Föga förvånande så ser vi av tabellen att enda gången uttrycket är sant är när p är falskt (Sara kör inte bil) och när q är sant, dvs att Sara svänger höger. Prioritetsordning Prioritet är viktigt inom såväl matematik som programmering. Vad blir uttrycket 1 + 6 2? 14 eller 13? Vad görs först, addition eller multiplikation? Från matematiken vet vi att vi alltid ska utföra multiplikation före addition. Uttrycket blir alltså 13. Inom programmering kallas detta för prioritetsordning för operatorer. Även i C utförs alltså multiplikation före addition. Hur är det då i logiken? ~ före och före Behövs en annan prioritet behöver vi använda parenteser (1+6) 2 (p q) r Uppgift 1 Bestäm två utsagor som du kan använda i samtliga fall nedan. Formulera sedan logiska uttryck för de sju fallen. Skriv en sanningstabell för 3 och 6. 1. Det brinner inte. 2. Det brinner och ryker. 3. Det ryker, men brinner inte. 4. Det varken ryker eller brinner. 5. Det brinner inte och det ryker inte heller. 6. Det brinner inte fast det ryker. 7. Det brinner!

Uppgift 2 Två variabler p och q är deklarerade som heltal men lagrar ett logiskt värde (1 eller 0) där variabeln antas vara sann om värdet är 1 och falsk om värdet är 0. Variabeln p ska ha värdet 1 om det brinner, annars värdet 0. Variabeln q ska ha värdet 1 om det ryker annars värdet 0. Skriv de satser i C som krävs så att variablerna har ett korrekt värde om tillstånden i de sju meningarna ovan råder. Implikation En logisk sats som är intressant är implikation, som på begriplig svenska kan uttryckas som om-så. Inom logiken uttrycks det med operatorn. Om vi har uttrycket p q, så betyder det att om p är sant så ska q vara sant. Ett exempel. Om det regnar så blir det blött. Kolla in sanningstabellen för detta uttryck och se om du håller med. p q p q T T T T F F F T T F F T Observera att uttrycket blir sant i båda fallen där p är falskt. I vårt fall innebär det att uttrycket om det regnar så blir det blött blir sant i de fall det inte regnar, vilket först kan verka konstigt, men det är rätt logiskt. Det kan faktiskt både vara torrt och blött om det inte regnar, men av andra orsaker. Om det regnar kan uttrycket däremot bara bli sant om det också blir blött. På engelska blir översättningen av om-så (alltså implikation), if-else. Tada! Uppgift 3 Formulera logiska uttryck för de fem fallen nedan. Skriv en sanningstabell för 8 och 10. 8. Om det ryker, så brinner det. 9. Det brinner om det ryker. 10. Det ryker inte, om det inte brinner. 11. Det brinner endast om det ryker (svår fundera på sanningstabell). 12. Om det brinner brinner det. Uppgift 4 Fortsätt nu från uppgift 2 och skriv de satser i C som krävs så att variablerna har ett korrekt värde om tillstånden i de fem meningarna ovan råder. Observera alltså att du kan använda if-else. Uppgift 5 Låt oss ha följande utsagor p = "Solen skiner", q = "Det regnar" och r = "Det är rötmånad". Nu har vi representerat dem som tre logiska uttryck i C. Översätt dem till svenska så gott det går och försök formulera det så som vi skulle göra i vardagligt tal. 1. (q && p) r 2. p q && r

3. p &&!q r Uppgift 6 Appropå prioritetsordning, avskaffa så många parentespar som det går i följande uttryck. 1. ((p (!q)) && r) 2. ((!((p && q) && (p)) (!(p)) && r)) 3.!(p ((q && p) ((p) (p q)))) Ekvivalens Det är enkelt. Om två uttryck ger samma sanningstabell, så är de ekvivalenta. Det innebär att de är utbytbara. Att finna enklare men logiskt ekvivalenta uttryck är mycket viktigt i programmering. Många fel i mjukvara uppstår pga av logiska misstag av den som programmerar. Det beror ofta på att man har alltför komplicerade uttryck. Att förenkla logiska uttryck underlättar därför både programmering och felsökning av program. Tre vanliga ekvivalenta uttryck som ofta används vid förenkling är följande p q) ~p q p q) ~p q p q p ~q Uppgift 7 Detta är en mer avancerad uppgift. Förenkla följande satser och verifiera ditt svar med en sanningstabell. 1. p p && q 2. (p q) (p && q) 3. ((p q) (r!r)) Uppgift 8 Vad skrivs ut? int i = i + 1; for (i=0; i<5; i=i+1)