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. När klockan är tolv är det egentligen lunchtid, och du kan känna efter om du är hungrig. Beroende på resultatet handlar du på olika sätt. Är du hungrig går du självklart och äter, men om du inte är hungrig väntar du någon timme tills aptiten kommer. Vårt hungrighetsproblem skulle i pseudokod kunna se ut som följer: Om hungrig gå och ät Annars vänta någon timme I C++ beskrivs sådana här villkor t.ex. av s.k. if -satser. Man ställer upp ett villkorsuttryck, och anger sen vad som ska hända om villkoret är uppfyllt, och vad som ska hända om det inte är uppfyllt: if (uttryck) Uttryck ska göra en test och ge svaret sant eller falskt, t.ex. kolla om en variabel är större än 25. Om uttryck är sant utförs de programrader som står mellan de båda första klamrarna, om uttryck är falskt körs programraderna som står mellan de båda sista (efter ). Else-delen behöver inte finnas med utan kan utelämnas. För att lättare kunna läsa koden flyttas, raderna mellan ihophörande startklammer och slutklammer in en bit. Detta kallas indentering. När man skriver längre och större program så underlättar det avsevärt läsbarheten. Exempel på en programsnutt: //C2 Ex1 int main() //huvudfunktionen, endast ett per program //deklaration av en variabel för heltal cout << Ange ett tal : ; if (a>25) cout << Större än 25 ; cout << endl; cout << Mindre än eller lika med 25 ; Om variabeln a är större än 25 kommer den första texten skrivas ut, annars den andra. Om resultatsatserna bara är en rad långa (som efter ), kan man utelämna klamrarna, men i det första fallet är satserna två rader, och klamrarna måste stå runt koden. Sida 1 (5)
Man kan också skriva if-satser i if-satser, s.k. nästlade if-satser: if (villkor1 ) if (villkor2) Villkoren kan jämföra uttryck på olika sätt med hjälp av de olika jämföroperatorerna, som följer nedan: Operator Betyder Exempel < Mindre än if (a<20) > Större än if (b>100) == Lika med if (produkt==500)!= Skiljt från (inte lika med) if (x!=28) <= Mindre än eller lika med if (a<=2000) >= Större än eller lika med if (b>=12) Observera här att när man jämför om variabeln är lika med något använder man dubbla likhetstecken, eftersom enkelt likhetstecken används när man tilldelar en variabel ett värde, t.ex. a=20; //C2 Ex2 /*Nu ska programmet som vi skapade i Lektion Grunder även dra av rabatter, 5 % rabatt om summan överstiger 1000 kr och 10 % om summan överstiger 2000 kr. */ int main() double p, k, rabatt=0; cout << Mata in antal böcker : ; cout << Mata in bokpriset : ; cin >> p; k=a*p+50; if (k>=2000) rabatt=k*0.1; if (k>=1000) rabatt=k*0.05; cout << Kostnaden blir << k-rabatt << kronor << endl; if (k>=1000) cout << Du har fått << rabatt << kr i rabatt. <<endl; Sida 2 (5)
Man kan också kräva att flera villkor ska vara uppfyllda samtidigt, genom att i if-satsen förbinda flera villkor med s.k. logiska operatorer. Operator Betyder Exempel && och if (a>20) && (a<30) eller if (a==0) (b<0)! inte if (!(a>0)) //C2 Ex3 //En annat lösningsförslag på det senaste programmet. /*Nu ska programmet även dra av rabatter, 5 % rabatt om summan överstiger 1000 kr och 10 % om summan överstiger 2000 kr. */ main() double p, k, rabatt=0; cout << Mata in antal böcker : ; cout << Mata in bokpriset : ; cin >> p; k=a*p+50; if (k<1000) rabatt=0; if (k>=1000 && k<2000) rabatt=k*0.05; rabatt=k*0.1; cout << Kostnaden blir << k-rabatt << kronor << endl; if (k>=1000) cout << Du har fått << rabatt << kr i rabatt. <<endl; Sida 3 (5)
Övningar Övning C2.1 Skriv ett program som läser in två tal och skriver ut det största av dessa två. Övning C2.2 Skriv ett program som läser in två tal och skriver ut något av alternativen, det första är störst, de är lika stora eller det sista talet är störst. Övning C2.3 Skriv ett program som läser in tre tal och skriver ut det största av dessa tre. Övning C2.4 I ett skattesystem gäller att grundavdraget beräknas enligt följande princip: Taxerad inkomst (kr) Grundavdrag (kr) 0-10000 = inkomsten 10001-58000 10000 58001-90000 10000 + 25% av inkomst över 58000 90001-95000 18000 95001-175000 18000 + 10% av inkomst över 95000 175000-10000 Skriv ett program som läser in inkomst och sedan beräknar och skriver ut grundavdraget enligt reglerna ovan. Övning C2.5 I den gregorianska kalendern infaller skottår då årtalet är delbart med 4. Dock är jämna sekler, d.v.s. år som är delbara med 100, skottår endast om årtalet också är delbart med 400. Skriv ett program som tar reda på om ett givet årtal är skottår eller inte. Övning C2.6 Läs in längden på de tre sidorna a, b och c i en triangel. Beräkna och skriv ut arean enligt Herons formel: där A = p( p a)( p b)( p c) p = a + b + c 2 Sida 4 (5)
Minitest G-nivå: 1. Vad är indentering? 2. Ange 6 jämföroperatorer. 3. Skriv ett program som läser in två tal och skriver ut det största av dessa två. 4. Skriv ett program som läser in tre tal och skriver ut det största av dessa tre. VG-nivå: 1. Vad är nästlade if-satser? Ge ett exempel! 2. Ange de två logiska operatorerna och(and) och eller(or)? 3. Skriv ett program som läser in ett heltal x och testar om det är större än noll och mindre än 100 med en enda if-sats. 4. I den gregorianska kalendern infaller skottår då årtalet är delbart med 4. Dock är jämna sekler, d.v.s. år som är delbara med 100, skottår endast om årtalet också är delbart med 400. Skriv ett program som tar reda på om ett givet årtal är skottår eller inte. Läxa Läs detta häfte och gör minitestet. Öva, försök hinna med så att du har gjort de flesta övningarna. Sida 5 (5)