C# Loopar
Inledning
När man skriver program kommer man ofta till lägen där man vill att programmet ska utföra samma
instruktion flera gånger efter varandra. Istället för att skriva in samma instruktion flera gånger, kan man
ange att en eller flera programrader ska upprepas ett visst antal gånger, s.k. repetitioner. Vi skapar en loop. I C# finns två
huvudsakliga sätt att loopa, nämligen while- och for-satser. Vi koncentrerar oss på while som räcker i alla sammanhang (men det kan vara praktiskt i vissa fall med for-sats). Vi återkommer senare i kursen till for-sats.
while
{
en eller flera satser;
}
Om uttrycket är sant utförs satserna mellan klamrarna annars (falskt) görs inget mer programmet hoppar
till satsen efter slutklammern. Uttrycket är oftast ett villkor som är sant eller falskt, t.ex. a > 3 (a är större
än 3). Uttrycket skrivet som villkor bör skrivas så att det bryter antalet repetitioner på ett bra sätt. Det
finns ytterligare ett sätt att bryta repetitionerna, med en s.k. break-sats. I repetitionsslingan placeras en ifsats med ett villkor och satsen break. Om villkoret är sant avbryts repetitionssatsen och programmet
hoppar till första satsen efter repetitionssatsen slutklammer.
while ( villkor )
{
en eller flera satser;
if ( ettAnnatVillkor ) break;
}
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# Loopar Ex1
// program som skriver ut talen 0-19 på skärmen
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int a=0;
while (a<20) //kör raderna mellan klamrarna så länge a är högst 19
{
Console.WriteLine( a);
a++;
}
Console.ReadKey();
}
}
}
Ett praktiskt exempel
/*Köra ett program flera gånger utan att behöva starta om*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int a,b,svar=1;
while (svar==1)
{
Console.WriteLine( "Mata in två heltal: ");
a = Convert.ToInt32(Console.ReadLine());
b =Convert.ToInt32(Console.ReadLine());
Console.WriteLine( "Summan = "+(a+b));
Console.WriteLine( "Vill du köra igen 1=Ja/0=Nej?");
svar = Convert.ToInt32(Console.ReadLine());
}
}
}
}
do - while
Det finns en annan variant som fungerar som while men testen körs efter loopen innan ett eventuellt nytt varv. Fördelen här är att koden körs alltid minst en gång.
{
en eller flera satser;
} while ( villkor som ska vara sant om det innanför klamrarna ska utföras)
Utökar även exemplet med variabeltypen string som står för textsträng.
/*Köra ett program flera gånger utan att behöva starta om*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int a,b;
string svar;
do
{
Console.WriteLine( "Mata in två heltal: ");
a = Convert.ToInt32(Console.ReadLine());
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine( "Summan = "+(a+b));
Console.WriteLine( "Vill du köra igen [J]a/0=[N]ej?");
svar = Console.ReadLine();
} while (svar=="J" || svar=="j" || svar=="Ja" || svar=="ja" || svar=="JA");
}
}
}
Ett annat exempel: Miljonären
/*Hur många dagar tar det att tjäna ihop en miljon OM du får ett öre första dagen, två öre nästa dag, fyra nästa, åtta nästa och så vidare?*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int antalDagar = 1 ;
double dagslon = 0.01, totaltBelopp = 0.01;
double onskat = 1000000.0;
while (totaltBelopp < onskat)
{
antalDagar++; //antalDagar=antalDagar+1;
dagslon *= 2; //dagslon=dagslon*2;
totaltBelopp += dagslon; //totaltBelopp=totaltBelopp+dagslon;
Console.WriteLine( " Dag "+antalDagar+" Dagslön = "+dagslon);
}
Console.WriteLine("Du blir miljonär efter "+antalDagar +" dagar");
Console.ReadKey();
}
}
}
Källor
Filmer
C# Svenska - 10 - Snabbtilldelningsoperatorer (Mr1Buying - 9 min)
C# Svenska - 14 - While loop (Mr1Buying - 5 min)
C# Svenska - 18 - Do While loop (Mr1Buying - 3 min)
C# Svenska - 21 - Miljonären (Mr1Buying - 8 min)