26.07.2013 Views

Operativsystem: .............................................................

Operativsystem: .............................................................

Operativsystem: .............................................................

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Som det ses arbejder modificer() nu kun med en kopi af strengen!<br />

De indbyggede C# typer som int, byte, char og string er implicit value parametre. Det er altså<br />

nødvendigt at brug ref hvis en metode skal arbejde med selve variablen (referencen). Hvis ref<br />

bruges arbejder metoden med den samme adresse i RAM (i heap’en hvor alle ref objekter<br />

gemmes) som variablen ligger på. Parameteren er en ’pointer’.<br />

Som vi siden skal se er klasser implicit ref parametre. Hvis vi har skrveet en klasse Hus og en<br />

metode som tager et hus som parameter – opfattes parameteren som en ref parameter automatisk.<br />

Metoden ændrer altså i selve objektet hus. Årsagen er at klassen Hus er en reference type, mens int<br />

er en value type!<br />

Rekursive funktioner/metoder:<br />

Der er skrevet tykke bøger om ’rekursive’ funktioner dvs funktioner der kalder sig selv. Rekursive<br />

funktioner bliver brugt i mange forskellige sammenhænge fx til søgning i store data mængder.<br />

Rekursive funktioner kan løse problemer som er meget vanskelige at løse på en ikke-rekursiv måde<br />

fx problemet om Hanois tårne hvor fx 111 ringe på en pind skal flyttes til en anden pind via en<br />

tredje pind - uden at en større ring på noget tidspunkt kommer til at ligge oven på en mindre ring.<br />

Rekursive funktioner bygger på det princip at hvis problemet gøres mindre er det lettere at løse.<br />

Fx er 2 i 9. potens det samme som 2 gange 2 i 8. potens og det er igen lig med 2 gange 2 i 7. osv!!<br />

På samme måde er Hanois tårne ulige nemmere at løse hvis der er 2 ringe end hvis der er 112 ringe!<br />

Følgende viser to eksempler på rekursive funktioner. Den første funktion potens() kunne have været<br />

beregnet på en ikke rekursiv måde men funktionen hanoi() kan - næsten - kun løses på en rekursiv<br />

måde:<br />

// Eksempel paa rekursive funktioner:<br />

//potens() og Hanois taarne:<br />

using System;<br />

class app<br />

{<br />

public static void Main(string[] args)<br />

{<br />

Console.Write("Indtast heltal nr1 til potens(): ");<br />

int tal1=int.Parse(Console.ReadLine());<br />

Console.Write("Indtast heltal nr2 (eksponenten) til potens(): ");<br />

int tal2=int.Parse(Console.ReadLine());<br />

Console.WriteLine("Funktionen potens() af {0} og {1} giver<br />

{2}",tal1,tal2,potens(tal1,tal2));<br />

Console.Write("Indtast antal ringe til funktionen Hanois Taarne: ");

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!