Datakurser
Aktuell vecka: 48

Tillbaka till toppen

C# Villkor

Inledning

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…else-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 (villkor)
{
    en eller flera satser
}
else
{
    en eller flera satser
}

Ett litet exempel

Villkoret ska göra en test och ge svaret sant eller falskt, t.ex. kolla om en variabel är större än 25. Om villkoret är sant utförs de programrader som står mellan de båda första klamrarna, om villkoret är falskt körs programraderna som står mellan de båda sista (efter else). 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:

// C# Villkor Ex1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
     class Program
     {
          static void Main(string[] args)
          {
               int a; //deklaration av en variabel för heltal
               Console.WriteLine( " Ange ett tal: ");
               a = Convert.ToInt32(Console.ReadLine());
               if (a>25)
               {
                    Console.WriteLine( "Större än 25");
               }
               else
               {
                   Console.WriteLine( "Mindre än eller lika med 25");
               }
               Console.ReadKey();
          }
     }
}

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 else), kan man utelämna klamrarna, men i det första fallet är satserna två rader, och klamrarna måste stå runt koden.

Man kan också skriva if-satser i if-satser, s.k. nästlade if-satser:

if (villkor1)
{
    en eller flera satser
}
else if (villkor2)
{
    en eller flera satser
}
else
{
    en eller flera satser
}

Jämförelseoperatorer

Villkoren kan jämföra uttryck på olika sätt med hjälp av de olika jämförelseoperatorerna, som följer nedan:

OperatorBetyderExempel
< 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 ett enkelt likhetstecken används när man tilldelar en variabel ett värde,
t.ex. a=20;

.

Ett exempel till

// C# Villkor Ex2
/*Programmet ska dra av rabatter, 5 % rabatt om summan överstiger 1000 kr och 10 % om summan överstiger 2000 kr. */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
     class Program
     {
          static void Main(string[] args)
          {
               int a;
               double p, k, rabatt=0;
               Console.WriteLine( "Mata in antal böcker : ");
               a = Convert.ToInt32(Console.ReadLine());
               Console.WriteLine( "Mata in bokpriset : ");
               p = Convert.ToDouble(Console.ReadLine());

               k=50 + a*p;
               if (k>=2000) {
                   rabatt=k*0.1;
               } else if (k>=1000) {
                   rabatt=k*0.05;
               }

               Console.WriteLine( "Kostnaden blir "+(k-rabatt)+" kronor");
               if (k>=1000) Console.WriteLine( "Du har fått "+rabatt+" kr i rabatt.");
               Console.ReadKey();
          }
     }
}

Logiska operatorer

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.

OperatorBetyderExempel
&& och if ((a>20) && (a<30))
|| eller if ((a==0) || (b<0))
! inte if (!(a>0))

En annan lösning på tidigare exempel

// C# Villkor Ex3
/*Programmet ska dra av rabatter, 5 % rabatt om summan överstiger 1000 kr och 10 % om summan överstiger 2000 kr. */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
     class Program
     {
          static void Main(string[] args)
          {
               int a;
               double p, k, rabatt=0;
               Console.WriteLine( "Mata in antal böcker : ");
               a = Convert.ToInt32(Console.ReadLine());
               Console.WriteLine( "Mata in bokpriset : ");
               p =Convert.ToDouble(Console.ReadLine());

               k = 50 + a*p;
               if (k<1000) {
                   rabatt=0;
               } else if (k>=1000 && k<2000) {
                    rabatt=k*0.05;
               } else {
                    rabatt=k*0.1;
               }

              Console.WriteLine( "Kostnaden blir "+(k-rabatt)+" kronor");
              if (k>=1000) Console.WriteLine( "Du har fått "+rabatt+" kr i rabatt.");
              Console.ReadKey();
          }
     }
}

Skillnad mellan if-if och if-else if

En, if - else if, gör att bara en del körs. Om något villkor blivit sant så kommer resten av if - else if satsen att hoppas över. Vid upprepade if-satser så kommer varje if-sats att testas och om de är sanna så kan fler komma att köras.

// C# Villkor Ex4

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
     class Program
     {
          static void Main(string[] args)
          {
               int x=1;
               if (x==1) {
                    x=x+1;
               }
               if (x==2) {
                    x=x+10;
               }
              Console.WriteLine( x); //12

               int y=1;
               if (y==1) {
                    y=y+1;
               }
               else if (y==2) {
                    y=y+10;
               }
              Console.WriteLine( y); //2

          }
     }
}

if - med och utan måsklamrar

Om det saknas måsklamrar { } eftyer en if, else if, else uttryck så innebär det att endast första satsen (instruktionen) efter hör till själva if, else if, else uttrycket.

Visst kan det ibland vara bra att spara plats men ta för vana nu i början att ALLTID skriva ut måsklamrar, även om det bara gäller en instruktion efter.

// C# Villkor Ex5

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
     class Program
     {
          static void Main(string[] args)
          {
               int x=0;
               if (x==1) {
               x=x+10;
               x=x+20;

               }
               x=x+30;
              Console.WriteLine( x); //30

               int y=0;
               if (y==1)
               y=y+10;
               y=y+20;
               y=y+30;
              Console.WriteLine( y); //50

          }
     }
}

Källor


Filmer

C# Svenska - 11 - Kommentarer (Mr1Buying - 5 min)

C# Svenska - 10 - Snabbtilldelningsoperatorer (Mr1Buying - 9 min)
C# Svenska - 6 - Jämförelseoperatorer (Mr1Buying - 9 min)
C# Svenska - 7 - Villkorssatser (Mr1Buying - 14 min)
C# Svenska - 8 - Else if (Mr1Buying - 8 min)
C# Svenska - 9 - Logiska operatorer (Mr1Buying - 15 min)