En sammansatt sats eller block är en sekvens av satser, sammanslagna till en enhet med hjälp av ett matchande par av klamrar, { }.

Storlek: px
Starta visningen från sidan:

Download "En sammansatt sats eller block är en sekvens av satser, sammanslagna till en enhet med hjälp av ett matchande par av klamrar, { }."

Transkript

1 Innehåll Förord 1 Kapitel Sammansatt sats Mer om if-satsen for-satsen Maximum och minimum Att programmera Programutveckling Övningsuppgifter Lösningsförslag Eftersnack

2 Kapitel Sammansatt sats En sammansatt sats eller block är en sekvens av satser, sammanslagna till en enhet med hjälp av ett matchande par av klamrar, { }. Syntaktiskt är en sammansatt sats ekvivalent med en ensam sats, något du ska komma ihåg då du studerar senare definitioner av satser i C. Exempel 1. Ett exempel på en sammansatt sats 1 { 2 a=a+10; 3 b=2 a+20; 4 printf("%d %d\n",a,b); 5 } 3.2 Mer om if-satsen Vi har hittills lärt oss hantera den if-sats, som endast har en gren (se figur 3.1).

3 Kapitel 3 Figur 3.1: Ett flödesschema över den enkla varianten av if-satsen den som saknar else-gren Ofta uppstår dock situationen: Om villkoret är sant ska det här göras annars ska det där göras. Figur 3.2 ger en bild över if-else-satsen. Figur 3.2: Ett flödesschema över if-else-satsen. Om villkoret är sant utförs satsblocket till vänster annars det till höger Exempel 2. En if-else-sats i sin enklaste form 1 if (a>10) 2 a=a 2; 3 else 4 a=a+2; Om variabeln a har ett värde som överskrider 10 så subtraheras 2 från a. I annat fall ökas a med 2. 4

4 3.2 Mer om if-satsen if-satsen kan kapslas på olika sätt: Exempel 3. En if-else-sats kapslad i en annan. 1 if (a==3) 2 if(b==1) 3 c=1; 4 else 5 c=2; 6 else 7 c=3; Om a är lika med 3, så vet man inte omedelbart vad som ska ske. Det hela beror på b, och om b är lika med 1 så får c värdet 1. c får värdet 2 om a=3 och dessutom b inte är 1. Slutligen får c värdet 3 i de fall då a är något annat än 3. Figur 3.3: I exempel 4, vill man tilldela både variablerna a och b nya värden om c har värdet 0. Eftersom det efter villkoret i if-satsen endast får finnas en enda sats, löser man detta problem, genom att av de två satserna skapa en sammansatt sats. I kod ser det ut så här: 5

5 Kapitel 3 Exempel 4. En enkel if-sats som styr en sammansatt sats 1 if (c==0) { 2 a=3; 3 b=4; 4 } Med hjälp av ett par klamrar, kan man ju bunta ihop hur många satser som helst till en enda. Hur kommer if-satsen i figur 3.2 då att se ut? Figur 3.4: Sammansatta satser är mycket vanliga, snarare regel än undantag. Likväl händer det då och då, att även vana programmerar glömmer de viktiga klamrarna,{ }. Definition: if-else-satsen har i C följande utseende: 1 if (villkor) 2 ssats 3 [else 4 fsats] Delen av satsen som står innanför hakparenteser är ej nödvändig ssats och fsats är enkla eller sammansatta satser. if-sats kallar vi den enklare varianten. Om värdet hos villkor är sant ( 0) exekveras ssats. Är värdet däremot falskt (0), hoppas satsen över. 6

6 3.3 for-satsen För den andra konstruktionen, för if-else-satsen, då både ssats och fsats finns med gäller förstås, att då villkor är sant exekveras ssats och då villkor är falskt så exekveras fsats Till skillnad från, bland annat Pascal, saknar C en boolsk datatyp. Vid beräkning av villkor, till exempel x<y, blir resultatet 1 om villkoret är sant och 0 om villkoret är falskt. 3.3 for-satsen En viktig sats är for-satsen, som är en av tre möjligheter att åstadkomma en loop eller snurra i C. Utan möjligheten att låta samma satser utföras flera gånger skulle programmering vara ett tungt jobb (en del anser att det är det ändå). Exempel 5. Ett första exempel: 1 for(k=1;k<=10;k=k+1) 2 printf("d%",k); Variabeln k kallas loopvariabel. Det är den som håller reda på hur många varv snurran har snurrat. I detta exempel startar k med värdet 1 och så länge k är mindre än eller lika med 10 så kommer underlydande satser att utföras. I detta fall har vi bara en sådan sats en printf-sats. När den satsen har utförts exekveras tredje raketsteget i for-satsen k=k+1, som innebär att k ökas med 1, till 2. Därefter kontrolleras om avbrottsvillkoret, k<=10, fortfarande är uppfyllt. Om så är fallet utförs printf-satsen igen. Programmet tuffar vidare och datorn skriver efter hand ut: När talet 10 skrivits ut går programmet som vanligt upp och ökar k med 1 denna gång till 11 och nu, när avbrottsvillkoret testas, visar det sig att det inte längre är sant vilket betyder att for-satsen avbryts och exekveringen fortsätter med de satser som kommer längre ner i programmet. 7

7 Kapitel 3 Figur 3.5: Ett flödesschema över for-satsen. Siffrorna förklaras av definitionen nedan Definition: for-satsen i C har följande utseende: 1 for ([init];[test];[increment]) 2 [statement] (Delarna av satsen som står innanför hakparenteser är ej nödvändiga) 1 Loopvariabeln initieras, init exekveras. Normalt finns här ett uttryck liknande i=1, men C s syntax tillåter att det här kan finnas ett godtyckligt komplext uttryck. 2 Uttrycket test beräknas. Normalt finns här ett uttryck liknade i<=10. Om resultatet är falskt avbryts loopen. 3 Loopsatsen statement exekveras. 4 for-satsens tredje del, increment, exekveras. Normalt stegas loopvariabeln upp eller ned, som till exempel genom i++. Kontrollen lämnas över till 2. Exempel 6. Ett exempel där loopvariabeln minskas för varje varv 1 for(k=10; k>=0; k=k 1) 2 printf("%d ",k); 8

8 3.3 for-satsen Vad händer här? Jo k får denna gång startvärdet 10 som skrivs ut. Därefter minskas k till 9. Eftersom villkoret är sant kommer också talet 9 att skrivas ut, liksom 8,7,6,5,4,3,2,1. Vilket kommer då att bli det sista talet som skrivs ut? Efter att 1 har skrivits ut minskas k till 0. Eftersom villkoret fortfarande är sant kommer också talet 0 att skrivas ut. Men sedan är det stopp. Exempel 7. Det är inte indenteringen som avgör vilka satser som hör till loopen! 1 for(p=0; p<3; p=p+0.5) 2 printf("%.2f ",p); 3 printf("hej"); I det här exemplet kan inte p vara deklarerad int eftersom p ska ökas med 0.5 i varje varv. Vilka tal kommer att skrivas ut och hur många gånger kommer HEJ att skrivas ut? Talen på skärmen kommer att bli 0.0, 0.5, 1.0, 1.5, 2.0, 2.5 Talet 3.0 kommer inte att skrivas ut eftersom 3.0 < 3.0 inte är sant! Observera att vi denna gång skrev p<3 och inte p<=3. Ordet HEJ kommer att skrivas ut precis en gång, efter att talen har skrivits ut. Att skriva koden med ett indrag för vissa satser, kallas att indentera. I början kan denna teknik te sig obegriplig eller i varje fall onödig, men efter hand, när programmen blir mer komplicerade visar det sig att indentering är till utmärkt eller rentav nödvändig hjälp. Dock ska man inte, som i exempel 7, låta lura sig av indenteringen och tro att de två sista satserna utgör ett block. Till detta krävs förstås ett par klamrar. Exempel 8. En for-sats som styr en sammansatt sats. 1 sum=0; 2 for(m=1; m<=13; m=m+2){ 3 sum=sum+m; 4 printf("%d ",m); 5 } 9

9 Kapitel 3 Skriver man så här kommer båda satserna att exekveras i varje varv. Genom klamrarna utgör de två satserna ett block, som i sin helhet styrs av for-satsen. Vilket värde får förresten sum? Loopvariabeln m kommer att anta värdena 1, 3, 5, 7, 9, 11, 13, som alla kommer att skrivas ut. Variabeln sum, som nollställs före loopen, ökas sedan med loopvariabelns värde för varje varv och får till sist värdet 49. Ett viktigt begrepp, som kommer flitigt till användning redan i kapitlets uppgifter, är dubbelloop och trippelloop. Exempel 9. En dubbelloop 1 for(k=1; k<=3; k++) 2 for(l=1; l<=2; l++) 3 printf("%d %d - ",k,l); Först observerar vi uttrycken k++ och l++, som är så typiska för C och som i detta sammanhang är liktydiga med k=k+1 och l=l+1. Över till exekveringen. Under den första loopen med variabeln k finns en sats en for-loop och under den finns en sats printf-sats. Denna konstruktion är vanlig. Observera att det inte ska (behöver) finnas några klamrar här. Trots att koden består tre satser är det inte fråga om någon sammansatt sats. Den yttersta for-loopen styr en sats, den inre for-loopen, som i sin tur styr printf-satsen. Vad händer då när satserna exekveras? Det kan vara lättare att förstå funktionen om man får reda på att utskriften blir: printf-satsen utförs alltså sex gånger. Den yttre loopen tre gånger och för varje gång den inre två gånger 2 3 = 6. Det kan ta en liten stund att smälta detta. Ta dig därför en funderare på följande två exempel innan du går vidare. Vilket värde får sum efter följande satser? 10

10 3.3 for-satsen Exempel 10. Vilket värde har sum efter denna rutin? 1 sum=0; 2 for(k=1; k<=4; k++) 3 for(l=1; l<=5; l++) 4 sum=sum+1; Variabeln sum ökas med 1 varje gång loopsatsen exekveras (vi kunde lika väl ha skrivit sum++), men hur många gånger utförs den? Den yttre loopen snurrar fyra varv och för varje sådant varv snurrar den inre fem, vilket skulle betyda att sum kommer att ökas 20 gånger och till sist få värdet 20. Vi skulle kunna kalla sum för en varvräknare. Exempel 11. Vilket värde får sum här då? Observera skillnaden mellan de inre for-satserna i detta och förra exemplet. 1 sum=0; 2 for(k=1; k<=4; k++) 3 for(l=k; l<=5; l++) 4 sum++; Den yttre loopen snurrar ju fyra varv, men den inre exekveras olika många gånger, eftersom loopvariabeln l får olika startvärden varje gång. Första gången när l startar på 1 (k har värdet 1) utförs loopen 5 gånger, men nästa gång får l startvärdet 2 och då blir det bara 4 varv. När k till sist har värdet 4 och l startar på 4 kommer den inre loopen att göra 2 två varv. Totalt blir det = 14. Variabeln sum får till slut värdet 14. En trippelloop är i och för sig inget speciellt, bara det att den innehåller tre for-satser. Exempel 12. En trippelloop 1 for(x1=1; x1<=10; x1++) 2 for(x2=1; x2<=10; x2++) 3 for(x3=1; x3<=10; x3++) 4 printf("oj VAD DET SNURRAR\n"); Texten i printf-satsen kommer att skrivas ut 1000 gånger! Tänk på hur 11

11 Kapitel 3 snabbt antalet varv växer, när du konstruerar loopar inuti loopar. Exempel 13. Avgör vilket värde SUMMA kommer att få 1 SUMMA=0; 2 for(k=3; k<=6; k++){ 3 for(l=1; l<=3; l++) 4 SUMMA=SUMMA+l; 5 for(l=1; l<=4; l++) 6 SUMMA=SUMMA+1; 7 } Detta är ingen trippelloop. Den yttre loopen innehåller två inre loopar. När den första har gått färdigt exekveras den andra. Den yttre loopen exekveras sex gånger. Den första inre loopen exekveras tre gånger. I tur och ordning läggs talen 1,2 och 3 till SUMMA. Varje gång den loopen utförs ökar alltså SUMMA med 6. Den andra inre loopen snurrar fyra varv och för varje varv adderas 1 till SUMMA, som alltså totalt ökas med 4. Tillsammans ökar de inre looparna på SUMMA med 10. Eftersom den yttre loopen genomlöps fyra gånger får SUMMA till slut värdet 40. Observera förresten det olämpliga i att använda l som identifierare. l är allt för lik 1. Exempel 14. Eftersom det från for-satsens definition framkom att allt utom semikolonen kunde utelämnas mellan parenteserna, så kan man undra vad man åstadkommer genom 1 for(;;) 2 i++; Konstruktionen är en evighetsloop meningslös men ändå möjlig. Evighetsloopar behöver man inte konstruera med vilje de dyker ändå upp som olycksfall i arbetet. 12

12 3.4 Maximum och minimum Exempel 15. Vilket värde får sum efter denna rutin? 1 sum=0; 2 for(i=1;i<=5;i++); 3 for(j=1;j<=6;j++); 4 sum++; Det rätta svaret är 1 och det beror på att det här inte alls är frågan om en dubbelloop! Semikolon direkt efter högerparentesen i for-satsen gör den till en tom loop. På sin höjd stegas i upp från 1 till 5. En sådan här konstruktion skulle möjligen kunna tjäna som en "vänteloop", men det är inte säkert, eftersom en smart kompilator kan optimera bort den. I början av karriären glömmer man ofta att avsluta satserna med semikolon. Snart lär man sig det och kommer istället in i en fas då man avslutar alla rader med semikolon, vilket kan ge oönskade effekter liknande de i exempel 15. Observera att eftersom skrivsättet är tillåtet kan datorn inte påpeka misstaget, utan det är du själv som måste upptäcka felet. 3.4 Maximum och minimum Eftersom vi i kommande uppgifter ska söka maximum eller minimum kan det vara bra att ha sett en sådan konstruktion. Programsekvensen nedan tar emot 10 heltal från tangentbordet och håller reda på det största respektive det minsta av dessa. Exempel 16. Vilket är det största respektive minsta talet, av de som kommer att matas in? 1 max=0; min=1000; 2 for(k=1;k<=10;k++){ 3 printf("tal nr %d :",k); 4 scanf("%d",&tal); 5 if (tal<min) min=tal; 6 if (tal>max) max=tal; 7 } Varje gång ett nytt tal matas in jämförs det med två andra tal max och 13

13 Kapitel 3 min. Om talet är mindre än min, har ett rekord slagits och min får ett nytt värde det värde som tal har. På samma sätt kontrolleras om tal är större än max. Ett problem i sammanhanget är startvärdena för max och min. Normalt kan man väl säga att om max ges ett litet värde från början så kommer troligtvis ett större att dyka upp under inmatningen och detta blir åtminstone tillfälligt max. I exempel 16 är det dock möjligt att alla tio talen, som matas in, är negativa och då kommer aldrig (tal>max) att bli sant vilket betyder att max kommer att behålla det felaktiga värdet 0. Om man inte genom problemets natur kan bestämma vilket startvärde max ska ha, kan följande konstruktion vara nödvändig: Exempel 17. En bättre lösning, som alltid fungerar 1 printf("tal nr 1 :"); 2 scanf("%d",&max); 3 min=max; 4 for(k=2;k<=10;k++){ 5 printf("tal nr %d :",k); 6 scanf("%d",&tal); 7 if (tal<min) min=tal; 8 if (tal>max) max=tal; 9 } Det först inmatade talet kommer att ge sitt värde både till max och min. Därefter kommer loopen, som nu bara frågar efter talen 2 till 10. Denna konstruktion ger alltid korrekta värden på max och min. Om max var deklarerad som int, kunde vi ha ändrat i första exemplet till max= ; eftersom alla inmatade tal måste vara större än eller lika med detta tal. Om vi i exemplet ovan också vill komma ihåg ordningsnumret på det tal som var det största respektive det minsta utvidgar vi if-satserna till 14

14 3.5 Att programmera Exempel 18. För att minnas vilket tal i ordningen som gav maximum och minimum tvingas man införa ytterligare två variabler 1 if (tal<min) { 2 min=tal 3 mink=k; 4 } 5 if (tal>max) { 6 max=tal; 7 maxk=k; 8 } Variablerna maxk och mink innehåller, efter att loopen exekverats, ordningsnumren, tal mellan 1 och 10, då det största respektive det minsta talet matades in. Det är klamrarna som binder ihop de två satserna och ser till att de endast utförs då villkoret är sant. 3.5 Att programmera I kapitel 1 startade vi en diskussion om problemlösning. När man läst och förstått en uppgift (uppdrag, kravspecifikation) kan man befinna sig i en av följande tre situationer: Jag klarar inte av att lösa problemet för hand, inte ens för givna indata Jag kan beräkna resultatet för hand för givna indata, men har ingen idé om hur programmet ska skrivas Jag vet hur programmet ska konstrueras för att lösa uppgiften I det första fallet är det definitivt ingen idé att sätta sig vid datorn. Det man inte kan uttrycka på sitt eget modersmål, kan man förstås inte uttrycka i C. Hur man beter sig i denna situation ligger utanför kursen. Bäst är säkert att söka upp lämplig litteratur, ta hjälp av en arbetskamrat, gå en kurs i ämnet eller att helt enkelt själv försöka knäcka problemet. Som tur är, finns det inga uppgifter av den kalibern i denna kurs. Möjligtvis kan det hända, att man någon gång behöver uppsöka en matematikbok. 15

15 Kapitel 3 Det andra fallet är vanligast för den som just håller på att lära sig programmera. Ofta är det trivialt att utföra arbetet för hand, men man vet inte hur programmet ska konstrueras och struktureras. Den här situationen kommer du troligtvis ofta att hamna i. Men genom den hjälp du får genom att studera lösta uppgifter och exempel och framför allt genom den träning du får genom att lösa många uppgifter kommer du allt oftare att klara av ditt uppdrag. Det tredje fallet. Även om man tror att man direkt skulle kunna sätta sig ner vid datorn och skriva in koden till programmet, så är det oftast bäst att tänka igenom arbetet först upprätta en plan. Det underlättar att använda penna och papper. Så länge uppgiften är relativt liten och du inte måste dokumentera ditt arbete, är det onödigt att ställa krav på hur figurer och text ser ut på ditt kladdpapper, men lova att du alltid har ett kollegieblock vid din sida när du sitter vid datorn och programmerar. Är ni flera som tillsammans ska lösa en uppgift ökar dock kraven på begripliga figurer och text. De är ju med detta som underlag du ska kommunicera. 3.6 Programutveckling Vi utgår ifrån att du förstått uppgiften och att du skulle kunna genomföra arbetet för hand, för givna indata, om du hade tid och tålamod. Det här med att förstå problemet ska dock inte underskattas Visst åstadkoms ett fungerande program, men det löste fel problem. Här följer en lista över saker att tänka på när man lägger upp en plan för programmeringsarbetet: Gör klart för dig vilka indata programmet behöver för att kunna lösa uppgiften. Namnge de variabler som ska ta hand om dessa indata och avgör vilka datatyper de ska tillhöra. Ge dessa variabler, som ju är någon form av huvudvariabler, slagkraftiga namn som ger rätt associationer. Så här långt i kursen handlar det bara om enkla variabler, men längre fram kommer du att stöta på mer eller mindre sammansatta variabler. Det är normalt att tänka sig att indata läses in i början av programmet. Men inte alltid så enkelt som hittills, genom ett par scanfsatser. Kanske läses data bäst in genom en loop, som hämtar data 16

16 3.6 Programutveckling från fil eller tangentbord. Vi kommer att se många exempel, där inläsning av data och beräkning vävts samman i en loop. När indata väl är på plats kan beräkningarna utföras. Dessa kan variera stort i komplexitet. I ett uppdrag kanske det gäller att bestämma medelåldern av Sveriges befolkning. Även om det är en mängd indata (runt ), så är beräkningarna enkla summera alla åldrar och dividera med antalet invånare. I ett annat uppdrag gäller det istället, att bestämma rötterna till en ekvation. Indata är då kanske bara fyra koefficienter, men beräkningarna, att finna rötterna, kan vara mycket omfattande. När du bestämmer beräkningsdelens innehåll, uppstår behov av nya variabler. En del är så kallade hjälpvariabler, andra är de variabler, som till sist kommer att innehålla själva resultatet. Hjälpvariabler, som till exempel loopvariabler, kan ha korta, ej signifikanta namn, medan resultatvariablerna ska ges beskrivande namn. Det är normalt att tänka sig att utdata skrivs ut i slutet av programexekveringen, men det är inte säkert. Om till exempel beräkningen består av ett antal delresultat, beräknade i en loop, kanske det är smidigast att skriva ut ett delresultat för varje varv i beräkningsloopen. Bestäm hur resultatet ska presenteras (eller det kanske någon annan redan gjort). Normalt handlar det just nu bara om enkla printfsatser, men framöver kommer det att handla om grafiska bilder, filer, komplicerade tabeller och printerutskrifter. Om Du håller dig till dessa tankar när du designar ett program kommer du åtminstone en bit på vägen: Bestäm variabler för indata till namn och typ Bestäm hur indatadialogen ska se ut Bestäm variabler för beräkningar och resultat Bestäm hur beräkningarna ska utföras Bestäm vad som ska skrivas ut och dess layout 17

17 Kapitel Övningsuppgifter Till kapitlet hör åtta uppgifter. Självklart ska du lösa dem allihop. Med hjälp av for- och if-satsen kan vi nu lösa problem och skriva program som är aningen mer innehållsrika än i tidigare kapitel. Uppgift 3-1. Loopar med for Skriv ett program, som innehåller fyra for-loopar och som var och en skriver ut en av de fyra talföljderna nedan: a) b) c) d) Uppgift 3-2. Statistik Skriv ett program som tar emot ett önskat antal positiva heltal från tangentbordet. När talen matats in ska programmet skriva ut: talens summa, det minsta inmatade talet, det största inmatade talet och medelvärdet av talen. Dialogen ska se ut som i exemplet nedan: ANTAL TAL: 3 TAL 1 : 10 TAL 2 : 13 TAL 3 : 4 TALENS SUMMA : 27 STÖRSTA TALET : 13 MINSTA TALET : 4 MEDELVÄRDET : 9 18

18 3.7 Övningsuppgifter Uppgift 3-3. Domare i konståkning En tävling i konståkning döms av åtta domare. Varje domare ger en poäng mellan 0 och 5, med en decimal. Slutpoäng beräknas genom att först ta bort den högsta respektive den lägsta av domarpoängen. Summera de återstående och ta medelvärdet av denna summa. Resultatet presenteras med två decimaler. Skriv ett program som tar emot domarpoängen och beräknar slutpoängen enligt ovan och som ger följande dialog: DOMARE 1 : 4.3 DOMARE 2 : 4.7 DOMARE 3 : 4.7 DOMARE 4 : 4.7 DOMARE 5 : 4.7 DOMARE 6 : 4.7 DOMARE 7 : 4.3 DOMARE 8 : 4.4 SLUTPOÄNGEN BLIR 4.58 Uppgift 3-4. Temperaturtabell I denna uppgift önskas ett program som skapar en tabell över temperaturer i dels Fahrenheit- och dels Celsiusskalan. Med hjälp av denna formel kan en temperatur i Fahrenheit översättas till Celsius Så här ska dialogen se ut: c = 5 9 (f 32) TABELLSTART : 10 TABELLSTLUT : 13 FAHRENHEIT CELSIUS Det är viktigt att tabellen ser snygg och prydlig ut. 19

19 Kapitel 3 Uppgift 3-5. Brevporto Skriv ett program som tar emot uppgift hur mycket ett brev väger och som med hjälp av denna uppgift och tabellen nedan beräknar portokostnaden. Dialogen ska se ut som följer: Brevets vikt (gram): 43 Portot kostar 2.50 kr Då jag saknar en aktuell portotabell använder vi den som gällde 1980! Vikt (g) Kostnad (kr) som paket Uppgift 3-6. Hönsgården Denna uppgift kan enkelt lösas, med hjälp av ren matematik. Nu bortser vi från det och låter i stället datorn med sin enorma snabbhet prova sig fram till ett approximativt svar. Figur 3.6: En bonde inhandlade m meter hönsnät för att göra en hönsgård. Han skapade sedan en rektangulär inhägnad, med maximal area, där en av sidorna var ladugårdens vägg, se figur

20 3.7 Övningsuppgifter Skriv ett program som tar emot uppgift om hur många meter rullen innehöll och med hjälp av detta bestämmer den maximala arean och sidornas längder. Dialogen kan komma att se ut som nedan: Meter hönsnät: 100 Den största arean 1250 kvm Kortsidan=25 m Långsidan=50 m Alla variabler i programmet ska vara av typen float och sidorna ska bestämmas på 1 cm när. Fyll i tabellen nedan med hjälp av ditt program: Meter hönsnät Area kvm Långsida Kortsida Figur 3.7: En skiss över badbryggan. Du befinner dig vid A och sjöjungfrun vid B Uppgift 3-7. Sjöjungfrun Du befinner dig vid början av en badbrygga, se figur 3.7, som sträcker sig rakt ut i böljan den blå, i punkten A. Du upptäcker plötsligt en sjöjungfru 21

21 Kapitel 3 i sjönöd, i punkten B. För att nå den nödställda så fort som möjligt bör du först springa en bit på bryggan och sedan oförfärat kasta dig i vattnet och simma mot målet. Hur ska du snabbast nå målet om du kan springa på den våta bryggan med en hastighet av 3.0 m/s och simma med hastigheten 1.2 m/s Skriv ett program som beräknar tiden för olika värden på s, där s börjar med 0 och stegas fram med 1 cm för varje beräkning. Det bästa valet på s tillsammans med den totala tiden ska presenteras. Uppgift 3-8. Bestäm slutlönen Slutlönen bestäms av timlönen (kr/tim) och av eventuella tillägg efter följande tabell: Tid Påslag 0:00-5:00 100% 5:00-8:00 50% 17:00-20:00 50% 20:00-24:00 100% Skriv ett program som beräknar den totala lönen. Vi antar för enkelhet skull att arbetspasset ligger inom samma dygn och att klockslagen är i hela timmar. Här en dialog: Arbetspassets start (kl)? 7 Arbetspassets slut (kl)? 12 Lön (kr/tim)? 20 Förtjänsten blir 110 kr 22

22 3.8 Lösningsförslag 3.8 Lösningsförslag Uppgift 3-1. Loopar med for Diskussion: Skriv ett program, som innehåller samtliga for-loopar. 1 #include <stdio.h> 2 int main(void){ 3 int i; 4 float j; 5 for(i=1;i<=20;i++) 6 printf("%3d",i); 7 printf("\n"); 8 for(i=1;i<=31;i=i+2) 9 printf("%3d",i); 10 printf("\n"); 11 for(i=30;i>=0;i=i 2) 12 printf("%3d",i); 13 printf("\n"); 14 for(j=2;j<=9.5;j=j+0.5) 15 printf("%4.1f",j); 16 } Kommentarer: 18 Observera att loopvariabeln j måste vara deklarerad float. Normalt bör man undvika detta, speciellt om steget är ett icke heltal. Nu är steget 0.5 ett snällt steg eftersom det kan lagras exakt i binär form. Uppgift 3-2. Statistik Diskussion: Indata består, dels av ett tal n, som anger hur många tal, som ska läsas in och dels av talen t i,i = 1...n. Eftersom n kan variera från körning till körning måste de n talen läsas in genom en for-loop. Dels efterfrågas summan av de n talen och medelvärdet m, som vi kan få fram genom att dividera summan med n. Dessutom ska vi för varje 23

23 Kapitel 3 tal hålla reda på om det just aktuella talet är större än det hittills största respektive mindre än det hittills minsta. Om vi först läser in alla tal för att därefter beräkna efterfrågade storheter får vi problem. Vi har ännu inte infört några möjligheter i kursen att lagra undan flera tal, ett varierat antal, som vi sedan kan plocka fram efter behov. Även om vi kände till den tekniken, så skulle det vara en dålig lösning. Lösningen ligger i att väva samman indata och delar av beräkningarna, så att vi aldrig behöver återvända till ett enskilt tal. Vi konstruerar en loop som exekveras i n varv. För varje varv i loopen läser vi in ett tal, adderar det till en subtotal samt kontrollerar om talet är nytt maximum eller minimum. När denna loop har exekverats återstår endast att beräkna medelvärdet och skriva ut de fem storheterna. 1 #include <stdio.h> 2 #include <limits.h> 3 int main(void) { 4 int summa=0,antal,max= 0,min=INT MAX; 5 int tal,k; 6 float medel; 7 printf("antal TAL: "); 8 scanf("%d",&antal); 9 for (k=1;k<=antal;k++) { 10 printf("tal %d ",k); 11 scanf("%d",&tal); 12 if (tal>max) max=tal; 13 if (tal<min) min=tal; 14 summa=summa+tal; 15 } 16 medel=(float)summa/antal; 17 printf("talens SUMMA : %d\n",summa); 18 printf("största TALET: %d\n",max); 19 printf("minsta TALET : %d\n",min); 20 printf("medelvärdet : %6.3f\n",medel); 21 } Kommentarer: 4 I samband med deklarationen tilldelar vi en del variabler startvärden, initierar. min får värdet INT_MAX och max värdet 0, eftersom 24

24 3.8 Lösningsförslag det enligt förutsättningarna endast skulle matas in positiva heltal. INT_MAX är det största heltal systemet kan anta, konstanten nås via limits.h 7-8 Antalet varv i for-loopen beror förstås på värdet hos antal Satserna i blocket som styrs av for-satsen följer vårt lösningsförslag ovan. För övrigt är det inte aktuellt med några tester av indata. Att de inmatade talen inte är negativa skulle vi kunna testa, men det fel som uppstår, om vi försöker skriva in ett heltal som 3.45 eller femton, har vi ännu ingen möjlighet att kontrollera. 16 Vi önskar medelvärdet uttryckt med 3 decimaler och måste därför se till att det utförs en flyttalsdivision, vilket kommer att ske då vi omvandlar heltalet i summa till flyttal. Uppgift 3-3. Domare i konståkning Diskussion: Uppgiften påminner till sitt väsen mycket om förra uppgiften. Antalet värden som ska skrivas in är dock förutbestämt och den sista beräkningen är möjligtvis något svårare. Idén bygger på att summera alla domarpoäng och samtidigt hålla reda på den största respektive minsta domarpoängen. När alla data lästs in och adderats, kan från den totala domarpoängen, subtraheras minimum och maximum, för att till sist dividera med 6. 1 #include <stdio.h> 2 int main(void) { 3 float summa=0.0,min,max,slutp,poang; 4 int k; 5 min=5; max=0; 6 for(k=1;k<=8;k++){ 7 printf("domare nr %d : ",k); 8 scanf("%f",&poang); 9 if(poang<min) min=poang; 10 if(poang>max) max=poang; 11 summa=summa+poang; 12 } 13 slutp=(summa min max)/6; 14 printf("slutpoängen blir %.2f\n",slutp); 15 } 25

25 Kapitel 3 Kommentarer: 5 Den här gången vet vi att poängen inte kan vara större än 5, så därför kan vi lugnt sätta min=5. 13 slutp beräknas på ovan angivet sätt. 14 Resultatet skrivs ut med önskade två decimaler. Uppgift 3-4. Temperaturtabell Diskussioner: En tabell ska åstadkommas. Tabellens storlek bestäms av operatören, genom att ange övre och undre gräns. När indata är mottagna kan beräkningarna, som denna gång är sammanvävda med utdata, påbörjas. Det handlar förstås om en loop där loopvariabeln f, som i Fahrenheit, initieras till den undre gränsen och där avbrottsvillkoret utformas med hjälp av den övre. Själva beräkningarna ges genom formeln. Utskriften kan det bli en del pyssel med trail and error rekommenderas. Men vänta nu! Var i programmet ska rubriken placeras? Inte inne i loopen i alla fall (skäms inte, det är ett mycket vanligt fel). Detta betyder att vi ska skriva ut rubriken innan loopen. När beräkningsloopen är utförd är också hela programmet exekverat. 1 #include <stdio.h> 2 int main(void) { 3 int start,stopp; 4 float f,c; 5 printf("tabellstart: "); 6 scanf("%d",&start); 7 printf("tabellstopp: "); 8 scanf("%d",&stopp); 9 printf("\nfarenheit Celsius\n"); 10 printf(" \n\n"); 11 for (f=start;f<=stopp;f++){ 12 c=5.0/9.0 (f 32); 13 printf("%9.2f %7.2f\n",f,c); 14 } 15 } 26

26 3.8 Lösningsförslag Kommentarer: 9-10 I stället för en tom printf-sats, för att få önskade tomma rader, kan man i strängen använda flera \n som var och en ger ett radbyte. 13 På varje plats i strängen där man vill ha ett resultat inlagt skriver man som bekant en formatkod. Antalet mellanslag får man prova sig fram till. Formatkoderna fylls i med värden från listan av variabler efter strängen. Uppgift 3-5. Brevporto Diskussion: Först presenterar vi här en lösning, som endast innehåller enkla if-satser, något vi klarat av redan efter förra kapitlet. Ett sätt att klara sig utan else. Lösningen blir kanske aningen mindre effektiv. Listan består av sex olika portosatser, som leder till lika många if-satser. Det finns endast ett indata, brevets vikt. En vikt som genom olika intervall bestämmer portokostnaden. 1 #include <stdio.h> 2 int main(void) { 3 int vikt; 4 float porto; 5 printf("brevets vikt (gram):"); 6 scanf("%d",&vikt); 7 if(vikt>0 && vikt<=20) porto=1.30; 8 if(vikt>20 && vikt<=100) porto=2.50; 9 if(vikt>100 && vikt<=250) porto=4.50; 10 if(vikt>250 && vikt<=500) porto=6.50; 11 if(vikt>500 && vikt<=1000) porto=8.80; 12 if(vikt>1000) porto=0; 13 if(porto>0) 14 printf("portot kostar %.2f kr",porto); 15 if (porto==0) 16 printf("skickas som paket"); 17 } 27

27 Kapitel 3 Kommentarer: H Under förutsättning att den inmatade vikten är ett positivt heltal kommer någon av villkoren i if-satserna att bli sant. Detta betyder att porto kommer att tilldelas ett värde. 12 Om vikt är > 1000 kommer porto att få värdet 0. Något vi med framgång kan använda senare i programmet Värdet hos porto kan vi använda för att avgöra om försändelsen ska skickas som paket eller brev. Genom två printf-satser kan vi skriva ut önskat resultat. Här följer en alternativ lösning där den centrala delen består av ett batteri av if - else-satser. 1 #include <stdio.h> 2 int main(void) { 3 int vikt; 4 float porto; 5 printf("brevets vikt (gram):"); 6 scanf("%d",&vikt); 7 if(vikt<=20) porto=1.30; else 8 if(vikt<=100) porto=2.50; else 9 if(vikt<=250) porto=4.50; else 10 if(vikt<=500) porto=6.50; else 11 if(vikt<=1000) porto=8.80; else 12 porto=0; 13 if(porto>0) 14 printf("portot kostar %.2f kr",porto); 15 else 16 printf("skickas som paket"); 17 } Kommentarer: 7-12 Ett if-else-komplex på inte mindre än sex rader. När ett villkor blir sant utförs motsvarande tilldelningssats. Därefter hoppar programmet ut ur strukturen och fortsätter på rad 13. Man behöver därför inte kontrollera den undre gränsen i nästa villkor de fall som inte är större än undre gränsen är ju redan avklarade. 28

28 3.8 Lösningsförslag Det betyder att när vi når fram till vikt> 1000, så behöver vi inte testa över huvud taget, utan kan direkt tilldela portot det artificiella värdet 0. Uppgift 3-6. Hönsgården Diskussion: Programmet behöver uppgift om nätets längd nl, givet i meter. Genom att variera inhägnadens längd l (parallell med väggen), varieras bredden (vinkelrät mot väggen) indirekt. Figur 3.8: I figur 3.8 ser vi åtta olika konstruktioner av inhägnaden. Två av dem har arean 0, dels den då man spikar upp nätet på ladugårdsväggen och dels den där man sätter en pinne halva nätets längd från väggen. Däremellan finns bland andra den vi söker, den med största arean. Eftersom datorn är snabb kan vi testa alla fall då inhägnadens längd l varieras från 0 till hela nätets längd nl, med steg om en centimeter. För till exempel nl = 100 meter kommer vi då att behöva testa olika fall. Allt detta ordnar vi med hjälp av en for-loop, som varierar l. Inuti loopen beräknar vi sedan inhägnadens bredd b genom formeln b = nl l 2 Därefter kan vi beräkna aktuell area och jämföra den med tidigare beräknade areor. Visar det sig att aktuell area är den hittills största uppdaterar 29

29 Kapitel 3 vi rekordet och passar samtidigt på att spara undan aktuella värden på l och b. När loopen exekverats klart, kan vi skriva ut det sökta resultatet. Observera att detta inte måste överensstämma med matematiskt maximum. Eftersom vi här stegat oss fram finns förstås möjligheten att vi stegat förbi det matematiskt korrekta värdet på l och därmed också b. 1 #include <stdio.h> 2 int main(void){ 3 float langsida,langd,kortsida,area; 4 float maxlangsida,maxkortsida,maxarea=0.0; 5 printf("meter hönsnät: "); 6 scanf("%f",&langd); 7 for(langsida=0;langsida<=langd 100;langsida++){ 8 kortsida=(langd langsida)/2; 9 area=kortsida langsida; 10 if (area>maxarea) { 11 maxarea=area; 12 maxkortsida=kortsida; 13 maxlangsida=langsida; 14 } 15 } 16 printf("den största arean %.2f kvm\n",maxarea); 17 printf("kortsidan=%.2f m Långsidan=%.2f m\n", 18 maxkortsida,maxlangsida); 19 } Kommentarer: H När vi skriver program har vi helt andra traditioner att välja variabelnamn, än man har inom matematiken (se texten ovan). 4 Det är viktigt att ge maxarea ett startvärde, där 0 passar bra eftersom vi tror oss veta att det finns minst en konstruktion med positiv area Loopen som kommer att snurra 100 langd+1 varv. 8 Först beräknar vi aktuell bredd hos inhägnaden. 9 Sedan arean Den just beräknade arean jämförs med rekordet, maxarea. Om vi funnit ett nytt rekord uppdaterar vi max-variablerna. 30

30 3.8 Lösningsförslag Resultatet kan skrivas ut Vill vi lösa detta problem matematiskt för låt säga nl = 100, ska vi först finna en funktion f(l), som för givet värde l på inhägnadens längd, beräknar arean. Så här ser den funktionen ut: f(l) = l(100 l) 2 En vanlig andragradsfunktion. Om vi deriverar den, sätter derivatan f (l) = 0 och löser den uppkomna ekvationen får vi f (l) = 50 l f (l) = 0 ger l = 50 b = 25 Ur detta får vi att den största arean är 1250 m 2. Uppgift 3-7. Sjöjungfrun Diskussioner: Nu är det dags för matematik. Vad behöver vi? c 2 = a 2 +b 2 t = s v Pythagoras sats och formeln för att beräkna tiden, när hastighet och sträcka är givna. En figur skadar aldrig. Den har du väl på ditt block också? Figur 3.9: Den vägen du ska springa respektive simma är markerad med ett tjockt streck Vi räknar om sträckor och hastigheter till cm respektive cm/s. s, den väg du ska springa på bryggan, kommer i programmet att stegas upp från 31

31 Kapitel 3 0 cm till 3000 cm med steget 1 cm. För var och en av de 3001 stegen kommer aktuell tid att beräknas. Tiden på bryggan bestäms av formeln t = s/300. Tiden i vattnet bestäms av den simmade sträckans längd dividerat med 120. Hela formeln för tiden ser ut så här t = s (3000 s) Observera att programmet saknar indata. Det betyder att detta program, varje gång det körs, kommer att ge samma resultat. Alltså kör man det bara en gång, efter det att man vet att det är korrekt. För att veta att det är korrekt måste man kanske göra en uträkning för hand. Ingen orkar beräkna formeln ovan 3001 gånger för hand, vilket skulle kunna betyda att man aldrig kommer att få veta om resultatet är korrekt eller inte. Resultatet kommer förresten aldrig att bli korrekt, i matematisk mening, eftersom vi använder en approximativ metod. Visserligen skulle man kunna minska stegen till mm och kanske ännu mindre. Man får då bättre resultat, men det är alltid approximativt. Kan du bestämma det korrekta värdet på matematisk väg, med Mathematica eller för hand? 1 #include <stdio.h> 2 #include <math.h> 3 int main(void){ 4 float t,s,min=1e6,smin; 5 printf("s tid\n \n"); 6 for(s=0;s<=3000;s++){ 7 t=s/300+sqrt( ( s) ( s))/120; 9 if (t<min){ 10 min=t; 11 smin=s; 12 } 13 printf("%3.0f %6.3f\n",s,t); 14 } 15 printf("minimum (%.4f sek) vid s=%3.0f cm", 16 min,smin); 17 } Kommentarer: H Förutom det slutliga resultatet kommer detta program, som överkurs, att producera en tabell. 32

32 3.8 Lösningsförslag 4 Lite slarvigt antar vi att den sökta tiden är kortare än , min=1e När t har beräknats jämförs den med min. Om ett nytt rekord upptäcks kommer min (minimitiden) och smin (sträckan att springa på bryggan) att uppdateras. Vi genomför nu den ovan efterlysta matematiska analysen. Vi har f(s) = s (3000 s) Då vi tittar på grafen, ser vi det minimum vi är på jakt efter Figur 3.10: Direkt från grafen kan vi avläsa ett värde på ungefär 19 m Vi tar fram f (s) och löser ekvationen f (s) = 0 f (s) = s (3000 s) 2 Vi får då s 1 = vilket stämmer bra med resultatet som programmet producerar. f(s 1 ) ger den aktuella tiden s. 33

33 Kapitel 3 Uppgift 3-8. Bestäm Slutlönen Diskussion: Vi har här tre indata: starttid, sluttid och timlön. Dessutom finns det ett antal konstanter som beskriver tabellen. Utdata är den totala förtjänsten under arbetspasset. Efter att data har lästs in konstruerar vi en loop, som beräknar lönen för en timme i taget och adderar detta belopp till det som till sist ska bli det totala beloppet. Hur många timmar har den, som börjar 9 : 00 och slutar 14 : 00 arbetat? Hur många varv kommer for(t=9;t<=14;t++) att snurra? Varje varv i loopen ska minst ge ett tillskott till det totala beloppet, som är lika med grundtimpenningen. Om det sedan tillkommer övertidsersättning, avgörs med hjälp av fyra if-satser, som var och en tar hand om en rad i tabellen. Är villkoret sant beräknas den extra ersättningen för den timmen. 1 #include <stdio.h> 2 int main(void) { 3 int start,slut,timme; 4 float lon,summa=0.0; 5 printf("arbetspassets start: "); 6 scanf("%d",&start); 7 printf("arbetspassets slut: "); 8 scanf("%d",&slut); 9 printf("lon (kr/tim) : "); 10 scanf("%f",&lon); 11 for(timme=start;timme<=slut 1;timme++) { 12 if (timme>=0 && timme<5) summa=summa+lon; 13 if (timme>=20 && timme<24) summa=summa+lon; 14 if (timme>=5 && timme<8) summa=summa+0.5 lon; 15 if (timme>=17 && timme<20) summa=summa+0.5 lon; 16 summa=summa+lon; 17 } 18 printf("fortjansten blir %.2f kr\n",summa); 19 } Kommentarer: 3-4 start och slut är heltal, medan lon och summa är flyttal. 34

34 3.9 Eftersnack 11 För att få rätt antal varv i loopen måste avbrottsvillkoret skrivas timme<=slut-1 eller timme<slut. Allmänt kan sägas att for(i=a;i<=b;i++) genererar b a + 1 varv (a och b heltal). 16 Är inget villkor i loopen sant så kommer endast denna sats att utföras. Man får sin grundlön. 12 Ligger arbetstimmen mellan 0 : 00 och 5 : 00 får man 100% övertidsersättning De fyra if-satserna kan krympas ned till två, men då med mer komplicerade villkor. Bra träning! 3.9 Eftersnack Fråga 1. En kapslad if-sats har följande utseende, här återgiven utan indentering för att göra det hela lite knepigare. Hur tolkar du den? if(a==3) if(b==1) c=1; else c=2; Om du nu bestämt dig för den ena tolkningen, hur ska du då uttrycka den andra? Fråga 2. Man vill med hjälp av en if-konstruktion avgöra vilket betyg en viss uppnådd poäng motsvarar. Vilka av följande konstruktioner är korrekta om tabellen ser ut så här? Poäng Betyg a) b) c) if(p>=13 && p<=16)b=3; if(p>=21)b=5; if(p>=13) b=3; if(p>=17 && p<=20)b=4; if(p>=17)b=4; if(p>=17) b=4; if(p>=21 && p<=24)b=5; if(p>=13)b=3; if(p>=21) b=5; 35

35 Kapitel 3 Fråga 3. Är det en nybörjare som har skrivit den här if-satsen? if(a!=1); else b=3; Fråga 4. Hur ofta får variabeln b värdet 10? if(a==1); b=10; Fråga 5. Tror du att man kan skriva en for-sats på det här sättet? for(;;){ printf("ett tal:"); scanf("%d",&tal); sum=sum+tal; } Fråga 6. Konstruera en fungerande for-loop som skriver ut talen och där själva for-satsen har följande utseende: for(;i<=10;). i är tidigare deklarerad int i=1. Fråga 7. Vi vill ha en rutin som upprepat tar emot tal från tangentbordet och summerar dem tills talet 0 skrivs in. För en sådan rutin tar man helst till en while-loop, men den har vi inte studerat ännu. Kan vi klara det hela med en for-loop? Fråga 8. Vi har två variabler a och b och ska tilldela c det största av dessa tal. Vi får dock, av någon anledning, inte använda en if-sats. Hur kan man med hjälp av en tilldelningssats och med funktionen abs (absolutbeloppet) klara problemet? Fråga 9. Två variabler a och b ska byta värden. Är då detta skrivsätt korrekt? a=b; b=a; Om det inte är korrekt, kan man ändå klara problemet med endast två variabler? 36

36 3.9 Eftersnack Fråga 10. Så avslutar vi med några logiska uttryck. Skriv om dem utan att använda operatorn ICKE (!). a)!(a>b) b)!(a<=b+3) c)!(a+1==b+1) d)!(a>2 b<5) e)!(a<c && c<d) Svar till eftersnack Svar 1. En else-gren hör till den senaste if-satsen. Vi uttrycker det hela, till vänster, genom indentering. if(a==3) if(b==1) c=1; else c=2; if(a==3){ if(b==1) c=1; }else c=2; Den andra tolkningen den då c ska få värdet 2 då a 3, åstadkommer vi med hjälp av ett extra par klamrar. Svar 2. Konstruktionen i mitten (b) är felaktig. Betyder det att även dessa är fel? if(p>=21) b=5; else if(p>=17) b=4; else if(p>=13) b=3; if(p>=21) b=5; else if(p>=17) b=4; else if(p>=13) b=3; Båda konstruktionerna är likvärdiga (de skiljer sig åt endast i layouten) och dessutom korrekta! Finns det ytterligare variationer? if(p>=13 && p<=24) b=(p-1)/4; Eftersom intervallen för de olika betygen är lika stora fungerar denna konstruktion. 37

37 Kapitel 3 Svar 3. Javisst! Enklast skrivs det hela: if(a==1) b=3; Visserligen är det inget fel på konstruktionen vare sig syntaktiskt eller logiskt, men varför använda dubbla negeringar? Svar 4. Variabeln b kommer alltid att få värdet 10, oavsett vilket värde a har. if-satsen avslutas i och med semikolonet. if-satsen styr en så kallad tom sats. Svar 5. Ja, det är möjligt. Detta är första konstruktionen av en evighetsloop vi ser. Sådana loopar kommer oftast till av misstag. Här verkar det som om programmeraren vet vad han gör. Likväl är just denna konstruktion här meningslös. Vi kommer senare i kursen att se hur man kan ta sig ur en loop som denna med hjälp av break Svar 6. Detta skrivsätt är möjligt, men klumpigt. Dels måste man på något ställe utanför for-satsen initiera loopvariabeln i och dels måste varvräkningen ske inne i loopen. i=1; for(;i<=10;){ printf("%d ",i); i++; } Svar 7. Ja det går, men som sagt bör man använda en while-loop istället. Hur som helst, så här kan den komma att se ut. tal=1; sum=0; for(;tal>0;){ printf("ett tal: "); scanf("%d",&tal); sum=sum+tal; } Först och främst är det viktigt att tal är 0 innan exekvering av loopen påbörjas. För det andra, när avbrottet sker talet 0 skrivs in så måste man vara medveten om att additionen utförs. Nu gör inte det så mycket eftersom talet för avbrott är 0. Annat hade det varit om detta tal varit -1. Då bör sista satsen i loopen skrivas om till if(tal!=-1) sum=sum+tal Svar 8. Genom följande sats: c=(a+b+abs(a-b))/2; 38

38 3.9 Eftersnack Svar 9. Nej denna konstruktion är inte korrekt. När man tilldelar a=b, så försvinner förstås det värde a hade innan. Normalt löser man problemet med en hjälpvariabel. c=a; a=b; b=c; Men det går faktiskt att klara sig utan extra variabel! a=a+b; b=a-b; a=a-b; Så ont om minne har man dock sällan. Svar 10. Så här kan det komma att se ut: a) a<=b b) a>b+3 c) a!=b d) a<=2 && b>=5 e) a>=c c>=d I ämnet diskret matematik ingår som en del logik, där man till exempel kan läsa mer om De Morgan s lag, som vi använt oss av i de två sista delproblemen. 39

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Föreläsning 3

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Föreläsning 3 Föreläsning 3 3.3 for-satsen I programmering talar man om tre sätt på vilket ett programflöde kan vara beskaffat: 1. Saker kan hända efter varandra, i sekvens. 2. Flödet kan innebära att ett val görs,

Läs mer

Moment Viktiga exempel Övningsuppgifter

Moment Viktiga exempel Övningsuppgifter Moment Viktiga exempel Övningsuppgifter Inga Inga Inga Fler exempel på optimering Exempel 1. Utifrån en rektangulär pappskiva med bredden 7 dm och längden 11 dm, vill man åstadkomma en kartong utan lock,

Läs mer

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

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera Föreläsning 2 Variabler, tilldelning och kodblock if-satsen Logiska operatorer Andra operatorer Att programmera Variabler Det är i variabler som all data (information) lagras. Genom att ändra värde på

Läs mer

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

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Programmering i C, 7,5 hp

Programmering i C, 7,5 hp Programmering i C, 7,5 hp Föreläsning 4 VÄLKOMNA! 31 switch-satsen Antag att vi har en heltalsvariabel a som skall styra programflödet Antag vidare att a kan anta tex 5 olika värden 1,2,3,4,5 printf( Mata

Läs mer

Loopar och datatyper. Föreläsning 3

Loopar och datatyper. Föreläsning 3 Loopar och datatyper Föreläsning 3 Dagens kluringar int x; printf("ange x:"); scanf("%d",&x); if(/*fyll i kod*/) printf("du angav x mellan 7 och 14"); int i=0; if(i++) i++; printf("%d",i++); //vad skrivs

Läs mer

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

2.1 Variabler. 2.2 Regler för namngivning i C. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 2 Föreläsning 2 2.1 Variabler Vi studerar exempel 1 från boken: int main(void) int a,b,c=7; float antal,pris=3.70,laengd; a=34; b=32767; antal=-123.978; pris=89.00; laengd=56; c=-38; laengd=laengd+1; Sex

Läs mer

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera Föreläsning 2 Operatorer Tilldelning Kodblock if satsen Logiska uttryck Att programmera En operator tar ett eller två data och producerar ett svar. Typexemplet är +. Den tar t.ex två heltal och producerar

Läs mer

Fråga 11. Vad skrivs ut? Fråga 12. Vad skrivs ut? Fråga 13. Vad skrivs ut? x=x+y; y=x-y; x=x-y;

Fråga 11. Vad skrivs ut? Fråga 12. Vad skrivs ut? Fråga 13. Vad skrivs ut? x=x+y; y=x-y; x=x-y; Håkan Strömberg KTH STH 1 Fråga 1. Vilka värden har c, e och f efter att de tre tilldelningssatserna har exekverats? int a=3, b=10; float c,d=2.0,e,f; c=b/a; e=b/a+d; f=d*b/a; Fråga 2. Skriv ett logiskt

Läs mer

Följande, ur problemsynpunkt enkla uppgifter, är till för att nöta in dagens teori.

Följande, ur problemsynpunkt enkla uppgifter, är till för att nöta in dagens teori. Problem Nivå 1 Följande, ur problemsynpunkt enkla uppgifter, är till för att nöta in dagens teori. Problem 1 Skriv ett program som tar reda på hur många termer man måste ta med i serien för att summa ska

Läs mer

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

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

Uppgifter att lösa 1,1,2,3,5,8,13,21...

Uppgifter att lösa 1,1,2,3,5,8,13,21... Detta arbetspass innehåller loopar, for, while och do. Du kan läsa mer om det på sidorna 61 69 och 102 105 Läs också avsnitt 4.7 på sidan 106 och 4.10 på sidan 109 Uppgifter att lösa Uppgift 1. Fibonacci

Läs mer

Funktioner. Räta linjen

Funktioner. Räta linjen Sidor i boken 14-143, 145-147 Funktioner. Räta linjen Här följer en dialog mellan studenten Tor-Björn (hädanefter kallad TB) och hans lärare i matematik Karl-Ture Hansson (nedan kallad KTH). När vi möter

Läs mer

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga

Läs mer

a = a a a a a a ± ± ± ±500

a = a a a a a a ± ± ± ±500 4.1 Felanalys Vill man hårddra det hela, kan man påstå att det inte finns några tal i den tillämpade matematiken, bara intervall. Man anger till exempel inte ett uppmätt värde till 134.78 meter utan att

Läs mer

Loopar och datatyper. Föreläsning 3

Loopar och datatyper. Föreläsning 3 Loopar och datatyper Föreläsning 3 Dagens kluringar int x; printf("ange x:"); scanf("%d",&x); if(/*fyll i kod*/) printf("du angav x mellan 7 och 14"); int i=0; if(i++) i++; printf("%d",i++); //vad skrivs

Läs mer

Den räta linjens ekvation

Den räta linjens ekvation Den räta linjens ekvation Här följer en dialog mellan studenten Tor-Björn (hädanefter kallad TB) och hans lärare i matematik Karl-Ture Hansson (nedan kallad KTH). När vi möter dem för första gången är

Läs mer

Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen

Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen Håkan Strömberg KTH STH 1 Fråga 1. Vilken är den största respektive minsta värde variabeln SUM kan erhålla genom följande rutin? srand(time(0)); for(k=1;k

Läs mer

Sidor i boken f(x) = a x 2 +b x+c

Sidor i boken f(x) = a x 2 +b x+c Sidor i boken 18-151 Andragradsfunktioner Här ska vi studera andragradsfunktionen som skrivs f(x) = ax +bx+c där a, b, c är konstanter (reella tal) och där a 0. Grafen (kurvan) till f(x), y = ax + bx +

Läs mer

Gamla tentemensuppgifter

Gamla tentemensuppgifter Inte heller idag någon ny teori! Gamla tentemensuppgifter 1 Bestäm det andragradspolynom vars kurva skär x-axeln i x = 3 och x = 1 och y-axeln i y = 3 f(x) = (x 3)(x + 1) = x x 3 är en bra start, men vi

Läs mer

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x Mathematica Första kapitlet kommer att handla om Mathematica det matematiska verktyg, som vi ska lära oss hantera under denna kurs. Indata När du arbetar med Mathematica ger du indata i form av kommandon

Läs mer

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011 1 of 7 Örebro universitet Akademin för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

Den räta linjens ekvation

Den räta linjens ekvation Den räta linjens ekvation Här följer en dialog mellan studenten Tor-Björn (hädanefter kallad TB) och hans lärare i matematik Karl-Ture Hansson (nedan kallad KTH). När vi möter dem för första gången är

Läs mer

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

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter Inledande matematik för I1 MVE011 läsperiod 1 010 Matlab vecka övningsuppgifter Linjära ekvationssystem Matlab har många kraftfulla redskap för att hantera matriser och därmed också linjära ekvationssystem.

Läs mer

Lösningar och kommentarer till uppgifter i 1.1

Lösningar och kommentarer till uppgifter i 1.1 Lösningar och kommentarer till uppgifter i 1.1 1106 d) 1107 d) 5t(t t 1) t (t 3) + t 3 5t 3 10t 5t (t 3 3t ) + t 3 5t 3 10t 5t t 3 + 3t + t 3 6t 3 7t 5t Kommentarer: Starta med att multiplicera in faktorerna

Läs mer

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik för ingenjörer, VT06 2 Repetition Repetition -

Läs mer

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

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling

Läs mer

JavaScript del 3 If, Operatorer och Confirm

JavaScript del 3 If, Operatorer och Confirm JavaScript del 3 If, Operatorer och Confirm Under förra uppgiften så kollade vi på hur användaren kan ge oss information via promt(), vi använde den informationen både för att skriva ut den och för att

Läs mer

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

Inledande programmering med C# (1DV402) Summera med while-satsen Summera med while"-satsen Upphovsrätt för detta verk Inledande programmering med C# (1DV402) Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får

Läs mer

UPPGIFT 1 V75 FIGUR 1.

UPPGIFT 1 V75 FIGUR 1. UPPGIFT 1 V75 FIGUR 1. Varje lördag året om spelar tusentals svenskar på travspelet V75. Spelet går ut på att finna sju vinnande hästar i lika många lopp. Lopp 1: 5 7 Lopp 2: 1 3 5 7 8 11 Lopp 3: 2 9 Lopp

Läs mer

Objektorienterad programmering Föreläsning 2

Objektorienterad programmering Föreläsning 2 Objektorienterad programmering Föreläsning 2 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Inläsning av data via dialogrutor Repetitioner (While-satsen och For-satsen) Nästlade

Läs mer

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011, Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman

Läs mer

Uttryck och villkor. Föreläsning 2

Uttryck och villkor. Föreläsning 2 Uttryck och villkor Föreläsning 2 Dagens kluring Finn fem fel! #include int main(void) printf("resistans hos R1 (ohm) : ") scanf("%d",r1); printf("resistans hos R2 (ohm) : "); scanf("%d",r2);

Läs mer

STYRANDE SATSER. 1) Skriv ett program som räknar ut hur många år du har till pensionen. Vi räknar här med att man pensioneras det år man fyller 65 år.

STYRANDE SATSER. 1) Skriv ett program som räknar ut hur många år du har till pensionen. Vi räknar här med att man pensioneras det år man fyller 65 år. STYRANDE SATSER 1) Skriv ett program som räknar ut hur många år du har till pensionen. Vi räknar här med att man pensioneras det år man fyller 65 år. Vilket år är du född? 1971 Då har du bara 35 år kvar

Läs mer

Del I: Digitala verktyg är inte tillåtna. Endast svar krävs. Skriv dina svar direkt i provhäftet.

Del I: Digitala verktyg är inte tillåtna. Endast svar krävs. Skriv dina svar direkt i provhäftet. Del I: Digitala verktyg är inte tillåtna. Endast svar krävs. Skriv dina svar direkt i provhäftet. 1) a) Bestäm ekvationen för den räta linjen i figuren. (1/0/0) b) Rita i koordinatsystemet en rät linje

Läs mer

Uttryck och villkor. Föreläsning 2

Uttryck och villkor. Föreläsning 2 Uttryck och villkor Föreläsning 2 Dagens kluring Finn fem fel! #include int main(void) printf("resistans hos R1 (ohm) : ") scanf("%d",r1); printf("resistans hos R2 (ohm) : "); scanf("%d",r2);

Läs mer

Problemlösning Lösningar

Problemlösning Lösningar Problemlösning Lösningar Lösning Problemlösning 1. Dela bröd och pengar (0) Luffarna åt 8/3 bröd var. Luffare A gav bort 3 8/3 = 1/3 bröd till C och luffare B gav bort 5 8/3 = 7/3 bröd till C. Alltså ska

Läs mer

6 Derivata och grafer

6 Derivata och grafer 6 Derivata och grafer 6.1 Dagens Teori När vi plottar funktionen f(x) = x + 1x 99x 8 med hjälp av dosan kan man få olika resultat beroende på vilka intervall man valt. 00000 100000-00 -100 100 00-100000

Läs mer

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

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION Föreläsning 1 & 2 INTRODUKTION Denna föreläsning Vad händer under kursen? praktisk information Kursens mål vad är programmering? Skriva små program i programspråket Java Skriva program som använder färdiga

Läs mer

Kompletterande lösningsförslag och ledningar, Matematik 3000 kurs A, kapitel 4. b) = 3 1 = 2

Kompletterande lösningsförslag och ledningar, Matematik 3000 kurs A, kapitel 4. b) = 3 1 = 2 Kapitel.1 101, 102 Exempel som löses i boken 10 a) x= 1 11+ x= 11+ 1 = 2 c) x= 11 7 x= 7 11 = 77 b) x= 5 x 29 = 5 29 = 6 d) x= 2 26 x= 26 2= 1 10 a) x= 6 5+ 9 x= 5+ 9 6= 5+ 5= 59 b) a = 8a 6= 8 6= 2 6=

Läs mer

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

System.out.println(Jaså du har + antalhusdjur+  husdjur); if ( antalhusdjur > 5 ) System.out.println(Oj det var många); 1 Villkor och styrsatser I de program vi sett tidigare har programkörning inneburit att sats efter sats utförts i den ordning de skrivits i källkoden. Vi har inte kunna ändra programmets uppförande beroende

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Grundläggande satser och uttryck Eric Elfving Institutionen för datavetenskap 5 augusti 2014 Översikt Uttryck Litteraler Operatorer Satser Villkor Upprepning Teckenhantering

Läs mer

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010 Föreläsning 6 Kapitel 5 5.1 switch-satsen Vi ser på ett par exempel ur boken: int a; srand(time(0)); a=rand()%6+1; if(a==1) printf("hej Du glade\n"); else if(a==2) printf("god dag\n"); else if(a==3) printf("är

Läs mer

Uttryck, satser och strömhantering

Uttryck, satser och strömhantering Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2018-09-06 Mål Uttryck, satser och strömhantering I denna laboration ska du lära dig Formaterad inläsning och utskrift Vanliga repetitions-

Läs mer

C++ Slumptalsfunktioner + switch-satsen

C++ Slumptalsfunktioner + switch-satsen C++ Slumptalsfunktioner + switch-satsen Veckans avsnitt består av ett antal lite udda funktioner man kan ha nytta av när man skriver program. Det är en slumptalsgenerator och lite annat smått och gott.

Läs mer

Föreläsning 3.1: Datastrukturer, en översikt

Föreläsning 3.1: Datastrukturer, en översikt Föreläsning.: Datastrukturer, en översikt Hittills har vi i kursen lagt mycket fokus på algoritmiskt tänkande. Vi har inte egentligen ägna så mycket uppmärksamhet åt det andra som datorprogram också består,

Läs mer

i LabVIEW. Några programmeringstekniska grundbegrepp

i LabVIEW. Några programmeringstekniska grundbegrepp Institutionen för elektroteknik Några programmeringstekniska grundbegrepp 1999-02-16 Inledning Inom datorprogrammering förekommer ett antal grundbegrepp som är i stort sett likadana oberoende om vi talar

Läs mer

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

Föreläsning 4. Val, boolska värden, läsbarhet, osv Föreläsning 4 Val, boolska värden, läsbarhet, osv Exempel /* Programmeringsteknik med C och Matlab Programmering i C HT13 Exempel Fil: plus_one.c Författare: Jonny Pettersson Användare: jonny Datum: 7

Läs mer

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php Introlektion PHP är ett av de enklare språken att lära sig just pga. dess dynamiska struktur. Det används för att bygga upp båda stora och mindre system. Några vanliga system som använder sig av PHP är

Läs mer

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1 Kattis Lektion 1 I kursen används onlinedomaren Kattis (från http://kattis.com) för att automatiskt rätta programmeringsproblem. För att få ett konto på Kattis anmäler du dig på Programmeringsolympiadens

Läs mer

For-sats/slinga. Notis

For-sats/slinga. Notis Notis I koden för exemplen förekommer kommentarer. Kommentarer i Matlabkoden identieras med prexet %. Kommentarer är text/kod som Matlab bortse från. Alltså all text/kod som ligger till höger och på samma

Läs mer

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

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)

Läs mer

Datorteknik 2 (AVR 2)

Datorteknik 2 (AVR 2) Namn: Laborationen godkänd: Digitala system 15 hp Datorteknik 2 (AVR 2) LTH Ingenjörshögskolan vid Campus Helsingborg Enkel in- och utmatning. Drivrutiner. Bithantering. I denna laboration ska vi förbättra

Läs mer

Prov 1 2. Ellips 12 Numeriska och algebraiska metoder lösningar till övningsproven uppdaterad 20.5.2010. a) i) Nollställen för polynomet 2x 2 3x 1:

Prov 1 2. Ellips 12 Numeriska och algebraiska metoder lösningar till övningsproven uppdaterad 20.5.2010. a) i) Nollställen för polynomet 2x 2 3x 1: Ellips Numeriska och algebraiska metoder lösningar till övningsproven uppdaterad.. Prov a) i) ii) iii) =,, = st 9,876 =,9876,99 = 9,9,66,66 =,7 =,7 Anmärkning. Nollor i början av decimaltal har ingen betydelse

Läs mer

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner

Läs mer

Grunderna i stegkodsprogrammering

Grunderna i stegkodsprogrammering Kapitel 1 Grunderna i stegkodsprogrammering Följande bilaga innehåller grunderna i stegkodsprogrammering i den form som används under kursen. Vi kommer att kort diskutera olika datatyper, villkor, operationer

Läs mer

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

Övningsuppgifter till föreläsning 2 Variabler och uttryck Sid 1 (5) Övningsuppgifter till föreläsning 2 Variabler och uttryck Syfte Syftet med övningsuppgifterna är att träna på: Aritmetik, variabler, tilldelning, scanf och printf Generellt Diskutera gärna uppgifterna

Läs mer

Vi ska titta närmare på några potensfunktioner och skaffa oss en idé om hur deras kurvor ser ut. Vi har tidigare sett grafen till f(x) = 1 x.

Vi ska titta närmare på några potensfunktioner och skaffa oss en idé om hur deras kurvor ser ut. Vi har tidigare sett grafen till f(x) = 1 x. Vi ska titta närmare på några potensfunktioner och skaffa oss en idé om hur deras kurvor ser ut. Vi har tidigare sett grafen till f(x) = x 8 6 4 2-3 -2-2 3-2 -4-6 -8 Figur : Vi konstaterar följande: Då

Läs mer

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

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 1 Villkor och styrsatser I de program vi sett tidigare har programkörning inneburit att sats efter sats utförts i den ordning de skrivits i källkoden. Vi har inte kunna ändra programmets uppförande beroende

Läs mer

1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta denna följd av tal, där varje tal är dubbelt så stort som närmast föregående

1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta denna följd av tal, där varje tal är dubbelt så stort som närmast föregående MATEMATISKA INSTITUTIONEN STOCKHOLMS UNIVERSITET Christian Gottlieb Gymnasieskolans matematik med akademiska ögon Induktion Dag 1 1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta

Läs mer

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf Föreläsning1 Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf scanf Ni behöver läsa boken både för att

Läs mer

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion Introduktion till programmering D0009E Föreläsning 6: Iteration Multipel tilldelning Helt ok att tilldela en variabel flera gånger: bruce = bruce, bruce = 7 bruce Output: 7 Som tillståndsdiagram: bruce

Läs mer

Logik och kontrollstrukturer

Logik och kontrollstrukturer 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

Läs mer

Pseudokod. Arbetets gång

Pseudokod. Arbetets gång I detta första arbetspass ska vi bara syssla med raka program, det vill säga varken loopar (uppgift 10 innehåller dock en for-loop) eller funktioner. Det blir in- och utmatning och tilldelningssatser.

Läs mer

Planering av ett större program, del 2 - for och listor. Linda Mannila

Planering av ett större program, del 2 - for och listor. Linda Mannila Planering av ett större program, del 2 - for och listor Linda Mannila 9.10.2007 Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Utskrift Indata Felhantering Funktioner och moduler (grunder)

Läs mer

Belopp Belopp > procent

Belopp Belopp > procent Dagens problem Försäljarprovision Lönen för en försäljare är helt grundad på provision, direkt kopplad till den omsättning han lyckas skapa under en månad. Tabellen nedan anger procentsatser för olika

Läs mer

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

Språket Python - Del 1 Grundkurs i programmering med Python Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR

Läs mer

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

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är

Läs mer

MMA132: Laboration 2 Matriser i MATLAB

MMA132: Laboration 2 Matriser i MATLAB MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen

Läs mer

Kompletterande lösningsförslag och ledningar, Matematik 3000 kurs B, kapitel 2

Kompletterande lösningsförslag och ledningar, Matematik 3000 kurs B, kapitel 2 Kapitel.1 101, 10 Exempel som löses i boken. 103 Testa genom att lägga linjalen lodrätt och föra den över grafen. Om den på något ställe skär grafen i mer än en punkt så visar grafen inte en funktion.

Läs mer

y y 1 = k(x x 1 ) f(x) = 3 x

y y 1 = k(x x 1 ) f(x) = 3 x Räta linjen på olika former Här ska vi bara påpeka att förutom k-form, den som vi är mest vana vid y = k y + m finns också allmän form: ax + by + c = 0 där a och b är konstanter, som inte någon står för

Läs mer

4 Fler deriveringsregler

4 Fler deriveringsregler 4 Fler deriveringsregler 4. Dagens Teori Derivatan av potensfunktioner. Potensfunktioner med heltalsexponenter, som du redan kan derivera, kallas polynomfunktioner, som till exempel: f(x) = 2x4 x3 + 2x

Läs mer

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011, KTH STH TENTAMEN HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011, 8.15-13.15 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny

Läs mer

Moment Viktiga exempel Övningsuppgifter I

Moment Viktiga exempel Övningsuppgifter I Moment Viktiga eempel Övningsuppgifter I Inga Inga Inga Grafritning Vi använder en sjustegsprocess Funktionens definitionsmängd 2 Funktionens skärningspunkter med alarna Asymptoter 4 Stationära punkter

Läs mer

Programmering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012

Programmering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012 Programmering, grundkurs, 8.0 hp HI1024, TEN1 Fredagen den 2 mars 2012 Tentamen består av två delar, del A och del B. Del A innehåller 4 kryssfrågor på olika teman inom C programmering. Varje fråga är

Läs mer

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

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn. Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0

Läs mer

Programmering Grundkurs (HI1900) Teoridel

Programmering Grundkurs (HI1900) Teoridel Tentamen Programmering Grundkurs, 11 januari 2010, STH KTH, Håkan Strömberg 1 Programmering Grundkurs (HI1900) Teoridel Skrivtid: 8:15-12:15 Datum: Onsdagen 2010-10-20 Tentamen består av 4 sidor Hjälpmedel:

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316

Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C Datatyp Aritmetiska operatorer Omvandling av typer Reserverade ord Mikael Djurfeldt Logiska operatorer

Läs mer

Programmering i C. Christer Sandberg, Gunilla Eken, Stefan Bygde Olof Andersson Linus Källberg Caroline Uppsäll Johan Hägg

Programmering i C. Christer Sandberg, Gunilla Eken, Stefan Bygde Olof Andersson Linus Källberg Caroline Uppsäll Johan Hägg Programmering i C En tuff kurs på halvfart för nybörjare i programmering Christer Sandberg, Gunilla Eken, Stefan Bygde Olof Andersson Linus Källberg Caroline Uppsäll Johan Hägg 1 Idag Kursupplägg Satser

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

Sidor i boken V.L = 8 H.L. 2+6 = 8 V.L. = H.L.

Sidor i boken V.L = 8 H.L. 2+6 = 8 V.L. = H.L. Sidor i boken 119-11 Andragradsekvationer Dagens tema är ekvationer, speciellt andragradsekvationer. Men först några ord om ekvationer i allmänhet. En ekvation är en likhet som innehåller ett (möjligen

Läs mer

Programmeringsuppgifter 1

Programmeringsuppgifter 1 Programmeringsuppgifter 1 Redovisning: Ni demo-kör och förklarar för handledaren några av de program ni gjort. Ni behöver inte hinna allt, redovisa så långt ni kommit. Om ni hinner mer kan ni alltid redovisa

Läs mer

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.

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. Lektion C2 Villkor 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. Du gör ofta val i livet, och valet du gör får olika konsekvenser och följder.

Läs mer

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Laboration 1. kompilera-ikonen exekvera-ikonen Programmerade system I1 Syfte Laboration 1. Syftet med denna laboration är dels att göra dej bekant med de verktyg som kan vara aktuella i programmeringsarbetet, dels ge en första inblick i att skriva

Läs mer

Laboration 1 Introduktion till Visual Basic 6.0

Laboration 1 Introduktion till Visual Basic 6.0 Laboration 1 Introduktion till Visual Basic 6.0 Förberedelse Förbered dig genom att läsa föreläsningsanteckningar och de kapitel som gåtts igenom på föreläsningarna. Läs även igenom laborationen i förväg.

Läs mer

1 Iteration. 1.1 for-satsen

1 Iteration. 1.1 for-satsen 1 Iteration Iteration innebär en upprepning, repetition av satser. Vi har nu sett hur en villkorssats kan välja att utföra ett satsblock beroende på om ett villkor är uppfyllt, selektion. För selektion

Läs mer

Repetitionsprov på algebra, p-q-formeln samt andragradsfunktioner

Repetitionsprov på algebra, p-q-formeln samt andragradsfunktioner Repetitionsprov på algebra, p-q-formeln samt andragradsfunktioner Del B Utan miniräknare Endast svar krävs! 1. Lös ekvationen (x + 3)(x 2) = 0 Svar: (1/0/0) 2. Förenkla uttrycket 4(x 3)(x + 3) så långt

Läs mer

Introduktion till Matlab

Introduktion till Matlab Introduktion till Matlab Inledande matematik, I1, ht10 1 Inledning Detta är en koncis beskrivning av de viktigaste delarna av Matlab. Till en början är det enkla beräkningar och grafik som intresserar

Läs mer

3 Deriveringsregler. Vi ska nu bestämma derivatan för dessa fyra funktioner med hjälp av derivatans definition

3 Deriveringsregler. Vi ska nu bestämma derivatan för dessa fyra funktioner med hjälp av derivatans definition 3 Deriveringsregler 3.1 Dagens Teori Vi ar lärt oss derivera en funktion, främst polynom, med jälp av derivatans definition. Vi ar funnit denna teknik ganska krävande. 3.1.1 Vi är på jakt efter ett mönster

Läs mer

Lutande torn och kluriga konster!

Lutande torn och kluriga konster! Lutande torn och kluriga konster! Aktiviteter för barn under Vetenskapsfestivalens skolprogram 2001 Innehåll 1 Bygga lutande torn som inte faller 2 2 Om konsten att vinna betingat godis i spel 5 3 Den

Läs mer

Data, typ, selektion, iteration

Data, typ, selektion, iteration Data, typ, selektion, iteration En programmeringkurs på halvfart IDT, MDH ttp://www.negative-g.com/nolimits/no%20limits%20defunct%20coasters.htm 1 Dagens agenda Talrepresentation Typkonvertering Sekvens

Läs mer

Malmö högskola 2007/2008 Teknik och samhälle

Malmö högskola 2007/2008 Teknik och samhälle Laboration 6 Avsikten med denna laboration är att du ska träna på att använda iterationer i dina program. I vanlig ordning placerar du dina lösningar i paketet laboration6. Uppgifterna är lätt matematiska

Läs mer

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Tentamen i Programmering C, Fri, Kväll, 041211.

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Tentamen i Programmering C, Fri, Kväll, 041211. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Denna tenta kommer att vara färdigrättad Ti 14/12 och kan då hämtas på mitt tjänsterum,

Läs mer

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?

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? Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?

Läs mer

SMD 134 Objektorienterad programmering

SMD 134 Objektorienterad programmering SMD 134 Objektorienterad programmering Dagens agenda: Typer i Java: primitiva datatyperna, referenstyper Variabler och variabeltilldelningar med primitiva typer Konstanter av de olika typerna. Heltalsräkning

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java bild 1 Objektorienterad programmering i Java Föreläsning 1 Kapitel 1-3 i kursboken Java Software Solutions bild 2 Läsanvisningar Kapitel 1 är en repetition av det ni förväntas kunna sedan tidigare. Det

Läs mer