Laboration 6 Till pseudokoduppgifterna och aktivitetsdiagrammen ges inga direkta lösningar då dessa går att göra på så väldigt många olika sätt. Pseudokod Skriv pseudokod för följande problem Åka tåg Du står på en perrong och väntar på ett tåg till Göteborg. När tåget till Göteborg kommer så går du på närmsta vagn. Om det är restaurangvagnen så tar du en kopp kaffe innan du letar upp din plats. Du har plats 33 i vagn 6. Tänk på vilka frågor som uppstår. Exempelvis börjar du leta efter din plats i ena änden av tåget eller ej och vad du gör om du kommit till änden av tåget utan att hitta din plats? Slå upp ett ord Du skall slå upp ordet logik i ett lexikon. Du får inte använda dig av metoden att läsa alla ord från början utan öppnar lexikonet på mitten och ser om du skall gå framåt eller bakåt och upprepar detta för den kvarvarande delen tills du är på rätt sida och då kan du läsa ord för ord. Vilka skillnader uppstår om vi förutsätter att ordet finns eller om vi inte förutsätter att det finns? Jämföra tre tal Du ska göra ett datorprogram som frågar användaren efter tre tal. Programmet ska sedan svara vilket av dessa tre tal som är störst. Skriv pseudokod för din algoritm för att hitta det största talet. Fungerar din strategi även för fyra tal? Aktivitetsdiagram Laga middag Gör ett aktivitetsdiagram över att laga köttbullar med kokt potatis. Vilka aktiviteter kan göras samtidigt? Vilka måste följa på varandra? Jämföra tre tal Du ska göra ett datorprogram som frågar användaren efter tre tal. Programmet ska sedan svara vilket av dessa tre tal som är störst. Rita ett aktivitetsdiagram över hur datorn skulle gå till väga för att hitta det största talet. (Fungerar din strategi även för fyra tal?) DA129A Programmering 1 1
Satslogik Använd bladet som sammanfattar satslogik som finns i it s learning, under Studiematerial 6, i filen Satslogik.pdf. Uppgift 1 Översätt följande meningar a-d till satslogik. Vissa meningar kan ha fler än en möjlig tolkning. Ex1 Om du sköter dig så får du bra betyg. p = Du sköter dig. q = Du får bra betyg. Översättning: p q Ex2 Om jag inte svarar i telefon så är jag antingen inte hemma eller så ligger jag i badet. p = Jag svarar i telefon. q = Jag är hemma. r = Jag ligger i badet. Översättning: p (( q v r)& ( q&r)) a) Det regnar och blåser varje dag. b) Programmering är ibland svårt men alltid roligt. c) Oavsett om mina föräldrar tillåter mig att gå på festen så går jag. d) Om du gör något fuffens åker du fast och hela din framtid är förstörd. Uppgift 2 Avgör vilka av följande satser som betyder det samma? a) Det är inte så att Per kommer och Eva inte stannar hemma. b) Per kommer inte, eller så stannar Eva hemma. c) Om Per inte kommer, så stannar Eva inte hemma. Uppgift 3 Avgör vilka slutledningar som är satslogiskt giltiga. En satslogiskt giltig slutledning betyder att om premisserna är sanna så måste också slutsatsen vara sann. En giltig slutsats följer någon av de reglerna som finns beskrivna på satslogikpappret. Ex3 Om Olle har varit snäll, så får han en karamell. Olle har inte varit snäll. Slutsats: Olle får ingen karamell. p = Olle är snäll. q = Olle får en karamell. p q p q är ingen giltig slutledning a) Om Alice älskar Rudolf, så gifter hon sig med honom. Alice gifter sig med Rudolf. Slutsats: Alice älskar Rudolf. DA129A Programmering 1 2
b) Hunden skäller om det kommer någon. Hunden skäller inte. Slutsats: Det kommer inte någon. c) Om inte Matilda har ärvt så har hon vunnit på lotteri. Hon har inte vunnit på lotteri. Slutsats: Hon har ärvt. d) Algot har stulit, eller också har han vunnit på tips. Han har vunnit på tips. Slutsats: Han har inte stulit. e) Om du inte har sovit mer än fyra timmar blir du trött. Om du blir trött blir du på dåligt humör. Slutsats: Om du inte blir på dåligt humör så har du alltså sovit mer än fyra timmar. f) Om du inte är galen kan du inte få marktjänst. Du kan inte få marktjänst om du inte anhåller om marktjänst. Om du anhåller om marktjänst så är du inte galen. Slutsats: Du kan inte få marktjänst ( Catch 22 ) g) Om industritjänstemännen går i strejk fungerar inte industrin. Antingen fungerar industrin eller så ökar inte exporten. Exporten ökar. Slutsats: Industritjänstemännen går inte i strejk. Uppgift 4 Bevisa följande satslogiska lagar med hjälp av sanningsvärdestabeller. a) De Morgans lagar: (p &q) p v q (p v q) p & q b) Disjunktiv utbytesregel: p v q p q Uppgift 5 I ett java program finns det fyra variabler av typen boolean: medlem, ärförst, nykund, betalträkningar. Variabler av typen boolean kan anta värdena true eller false Avgör för vilka värden på variablerna som utskriften Hej! sker. (Du kan använda en sanningsvärdestabell.) a) if (!medlem) b) if (medlem &&!nykund) c) if (!medlem!nykund) DA129A Programmering 1 3
d) if (medlem && (ärförst nykund) e) if ((!medlem && betalträkningar) (nykund &&!betalträkningar)) f) if ((ärförst!medlem) && ( betalträkningar medlem)) System.out.println( Hej då! ); else DA129A Programmering 1 4
Lösningsförslag Uppgift 1 a) Det regnar och blåser varje dag. p = Det regnar varje dag. q = Det blåser varje dag. Översättning: p& q b) Programmering är ibland svårt men alltid roligt. p = Programmering är svårt. q = Programmering är roligt. Översättning: q c) Oavsett om mina föräldrar tillåter mig att gå på festen så går jag. p = Mina föräldrar tillåter mig att gå på fest. q = Jag går på fest. Översättning: q d) Om du gör något fuffens åker du fast och hela din framtid är förstörd. p = Du gör något fuffens. q = Du åker fast. r = Hela din framtid är förstörd. Översättning: p (q & r) Uppgift 2 Avgör vilka av följande satser som betyder det samma. a) Det är inte så att Per kommer och Eva inte stannar hemma. b) Per kommer inte, eller så stannar Eva hemma. c) Om Per inte kommer, så stannar Eva inte hemma. p = Per kommer. q = Eva stannar hemma. Både a) och b) kan översättas till: p v q medan c) kan översättas till q p vilket inte är de samma som a) och b). Uppgift 3 a) Om Alice älskar Rudolf, så gifter hon sig med honom. Alice gifter sig med Rudolf. Slutsats: Alice älskar Rudolf. p = Alice älskar Rudolf. q = Alice gifter sig med Rudolf. p q q Ingen slutledning kan göras. DA129A Programmering 1 5
b) Hunden skäller om det kommer någon. Hunden skäller inte. Slutsats: Det kommer inte någon. p = Hunden skäller. q = Det kommer någon. q p p q c) Om inte Matilda har ärvt så har hon vunnit på lotteri. Hon har inte vunnit på lotteri. Slutsats: Hon har ärvt. p = Matilda har ärvt. q = Matilda har vunnit på lotteri. p q q p d) Algot har stulit, eller också har han vunnit på tips. Han har vunnit på tips. Slutsats: Han har inte stulit. p = Algot har stulit. q = Algot har vunnit på tips. (p v q)& ( (p&q)) q p e) Om du inte har sovit mer än fyra timmar blir du trött. Om du blir trött blir du på dåligt humör. Slutsats: Om du inte blir på dåligt humör så har du alltså sovit mer än fyra timmar. p = Du har sovit mer än fyra timmar. q = Du blir trött. r = Du blir på dåligt humör. p q q r r p DA129A Programmering 1 6
f) Om du inte är galen kan du inte få marktjänst. Du kan inte få marktjänst om du inte anhåller om marktjänst. Om du anhåller om marktjänst så är du inte galen. Slutsats: Du kan inte få marktjänst ( Catch 22 ) p = Du är galen. q = Du kan få marktjänst. r = Du anhåller om marktjänst. p q r q r p q g) Om industritjänstemännen går i strejk fungerar inte industrin. Antingen fungerar industrin eller så ökar inte exporten. Exporten ökar. Slutsats: Industritjänstemännen går inte i strejk. p = Industritjänstemännen går i strejk. q = Industrin fungerar. r = Exporten ökar. p q (q v r)& ( (q& r)) r p Uppgift 4 Bevisa följande satslogiskalagar med hjälp av sanningsvärdestabeller. s= sant och f=falskt a) De Morganslag 1: (p &q) _ p v q p q p q (p &q) (p &q) p v q (p &q) p v q s s f f s f f s s f f s f s s s f s s f f s s s f f s s f s s s De Morganslag 2: (p v q) p & q p q p q (p vq) (p vq) p & q (p vq) p v& q s s f f s f f s s f f s s f f s f s s f s f f s f f s s f s s s DA129A Programmering 1 7
b) Disjunktiv utbytesregel: p v q p q p q p p v q p q p v q p q s s F s s s s f F f f s f s S s s s f f S s s s Uppgift 5 I ett java program finns det fyra variabler av typen boolean: medlem, ärförst, nykund, betalträkningar. Variabler av typen boolean kan anta värdena true eller false Avgör för vilka värden på variablerna som utskriften Hej! sker. (Du kan använda en sanningsvärdestabell.) a) if (!medlem) Programmet skriver ut Hej! när medlem=false. b) if (medlem &&!nykund) Programmet skriver ut Hej! när medlem=true och nykund=false. c) if (!medlem!nykund) Programmet skriver alltid ut Hej! utom när både medlem=true och nykund=true. d) if (medlem && (ärförst nykund) Programmet skriver ut Hej! när både medlem=true och ärförst=true eller både medlem=true och nykund=true. e) if ((!medlem && betalträkningar) (nykund &&!betalträkningar)) Programmet skriver ut Hej! när både medlem=false och betalträkning=true eller både nykund=true och betalträkning=false. DA129A Programmering 1 8
f) if ((ärförst!medlem) && ( betalträkningar medlem)) System.out.println( Hej då! ); else Programmet skriver ut Hej! när både medlem=true och ärförst=false eller både betalträkning=false och medlem=false. DA129A Programmering 1 9