Teoritenta 2019 Flashcards
Vad returnerar metoden nedan om man anropar den med: Print(“Hello world!”); ?
static void Print(string s)
{
Console.WriteLine(s);
}
● Hello world!
● Ingenting
● s
● Metodanropet fungerar inte eftersom att s inte är detsamma som “Hello world!”
Ingenting - metoden är void
Hur vet man vad en metod ska returnera?
● Metodsignaturen innehåller informationen om vad som ska returneras.
● Metodens parametrar anger typen för vilken datatyp som returneras.
● Returtypen anges framför metodsignaturen.
● En metod returnerar den datatyp som anges i metodens return-statement.
Returtypen anges framför metodsignaturen.
När kan man använda implicit typomvandling?
● När datatyperna är likadana.
● När det inte föreligger risk för informationsförlust.
● Detta görs automatiskt i samband med att en metod returnerar ett värde.
● Detta kan alltid göras vid behov när man behöver konvertera från en datatyp till en annan.
När det inte föreligger risk för informationsförlust.
Vad skriver följande metod ut?
static void P1() { char c = 'l'; string s = c.ToString(); string s1 = "Programmering är kul" + c; Console.WriteLine(s1); }
● Programmering är kul
● Programmering är kulc
● Programmering är kull
● Programmering är kuls
Programmering är kull
Vilka tal skriver följande metod ut?
static void P2() { int i = 1, j = 5; do { Console.WriteLine(i *= j); } while (i <= 10); }
● 5 30
● 5 11 16 21 26 31 36 41 46 51
● 5 25
● 5 10 15 20 25 30 35 40 45 50
5 25
Vad blir utskriften när följande metod körs?
static void P3() { int i, s = 0; for (i = 1; i <= 10; s = s + i, i++) { } Console.WriteLine(s); }
● 55
● Det blir en oändlig loop så programmet kraschar.
● 0 1 3 6 10 15 21 28 36 45
● Koden genererar ett felmeddelande.
55
Givet metoden nedan, vilket metodanrop kommer att returnera true?
static bool P4(int a, int b, int c) { if (a > b || b != c && a + b > c + b) { return true; } return false; }
● P4(1, 2, 1)
● P4(1, 3, 2)
● P4(3, 4, 1)
● P4(4, 5, 6)
P4(3, 4, 1)
Vilken av följande är en logisk operator i C#?
● == ● >= ● = ● ! ● !=
!
Vad skrivs ut när metoden nedan anropas med:
Console.WriteLine(P1(new char[] {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’ }));
static string P5(char[] arr) { int i = 0; string s = ""; foreach (char c in arr) { i++; string t = new string(arr); s = t; } return s; }
● 7
● ‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘f’ ‘g’
● abcdefg
● Det skrivs ut en tom sträng
abcdefg
När man itererar över en array händer det att man får ett s.k. IndexOutOfRangeException.
Vad beror det på?
● Arrayen tar upp för mycket av datorns minne så den kan inte längre läsa in nya tal.
● Det är datorns sätt att indikera att man försöker använda flera arrayer.
● Man försöker läsa från en indexposition som inte finns representerad i arrayen.
● Detta fel genereras om det högsta indexet i arrayen inte är det samma som längden av arrayen minus 1.
Man försöker läsa från en indexposition som inte finns representerad i arrayen.
Fråga 11
1/3
Beskriv övergripande vad resp. metod (A1, A2) nedan gör. Dvs. funktionen som resp. metod
förväntas utföra.
static int[] A1(int[] x) { for (int i = 0; i < x.Length; i++) { if (x[i] == 0) A2(x, i); } return x; }
static void A2(int[] x, int index) { for (int i = index; i < x.Length - 1; i++) { int temp = x[i]; x[i] = x[i + 1]; x[i + 1] = temp; } }
Fråga 11
1/3
A1: Tar emot en int[]. For-loopen loopar så många gånger som int-arrayen x är lång med i som temporär variabel som ökar med 1 varje gång, från 0 till längen av x -1. I forloopen kollas värdet på indexpositionen ‘i’ i arrayen x om det är == 0 (jämför om det har värdet 0). Om detta stämmer och if-satsen blir sann kallas metoden A2 som skickar in variablerna x och i. Efter loopen returneras x. Kort sagt, kollar om värdet är 0 på varje indexposition i arrayen och om ett tal är 0 skickas indexposition och arrayen till A2- metoden.
A2: Tar emot int[] x och int index(tidigare i i föregående metod). Alltså en int array och en int (som ska representera en indexposition där x[index] == 0). For-loopen som skrivs börjar på värdet i = index , och körs så länge i är mindre än längden av strängen -1. Notera att loopen slutar när i är på näst sista indexpositionen i arrayen. I forloopen sparas värdet på x[i] i en temporär variabel som kallas temp. x[i] får värdet x[i+1], alltså platsen framför det första talet. Till sist sätts x[i+1] till värdet av temp. De byter alltså plats. När sedan i ökar med 1 kommer samma sak ske . Det som händer till sist är att nollan (som vi vet att det är på x[i] under första loopen) kommer förflyttas till höger, till högsta indexpositionen.
Exempel: loop 1: 1,5,0,7,8,9 loop 2: 1,5,7,0,8,9 loop 3: 1,5,7,8,0,9 loop 4: 1,5,7,8,9,0
Metoderna kommer alltså tillsammans hitta indexpositioner där x[i] == 0 och förflytta de nollorna som hittas till slutet av arrayen, alltså x[x.Length-1].
Fråga 11
2/3
Vad kommer arr att innehålla om metoden anropas enligt följande metodanrop:
int[] arr = A1(new int[] { 4, 5, 6, 7, 8, 0 });
static int[] A1(int[] x) { for (int i = 0; i < x.Length; i++) { if (x[i] == 0) A2(x, i); } return x; }
static void A2(int[] x, int index) { for (int i = index; i < x.Length - 1; i++) { int temp = x[i]; x[i] = x[i + 1]; x[i + 1] = temp; } }
Fråga 11
2/3
arr = {4,5,6,7,8,0) sista värdet som itereras över är den näst sista indexpositionen, inget kommer hända (index out of range).
Fråga 11
3/3
Vad kommer arr att innehålla om metoden anropas enligt följande metodanrop:
int[] arr = A1(new int[] { 0, 4, 5, 0, 6, 7, 8, 3, 1 });
static int[] A1(int[] x) { for (int i = 0; i < x.Length; i++) { if (x[i] == 0) A2(x, i); } return x; }
static void A2(int[] x, int index) { for (int i = index; i < x.Length - 1; i++) { int temp = x[i]; x[i] = x[i + 1]; x[i + 1] = temp; } }
Fråga 11
3/3
arr = { 4, 5, 6, 7, 8, 3, 1, 0, 0}
Fråga 13
1/2
Beskriv kortfattat och övergripande hur metoden Sub fungerar. Dvs. dels vad som sker i metoden och dels den övergripande funktionen som Sub förväntas utföra.
static void M6(string value)
{
for (int i = 1; i < value.Length; i++)
{
for (int j = 0; j <= value.Length - i; j++)
{
string partOf = Sub(value, j, i);
Console.Write(partOf + “ “);
}
}
}
static string Sub(string input, int start, int length) { string result = ""; if (input.Length >= start + length) { for (int i = start; i < length + start; i++) { result += input[i]; } } return result; }
Fråga 13
1/2
Teknisk funktionalitet = Sub är en metod som tar emot en string och två heltal (start och length). I metoden skapas sedan en tom string (result), därefter formuleras en if-sats som säger att om längden av strängen “input” är större, eller lika med, heltalet start adderat med heltalet length så ska en for-loop initieras som itererar över samtliga värden mellan start och samtliga heltal mindre än length+start (ökar med ett 1 för varje iteration).
För varje värde på i adderas sedan i for-loopen det som återfinns i stringen input på indexpositionen i till strängen result. Efter att funktionen har loopat över samtliga värden returneras sedan den nya strängen result.
Övergripande syfte = Metoden Sub är avsedd att ta emot en sträng samt två värden som representerar den första indexplatsen som ska itereras över och hur många iterationer som
ska utföras. Sedan adderar den innehållet från den givna strängen från och med den angivna indexpositionen till den nya strängen result, tills dess att antalet avsedda iterationer har utförts.
Den skapar alltså en ny sträng från och med en viss indexposition från den tidigare strängen, fram till en viss indexposition i den gamla strängen.
Fråga 13
2/2
Vad kommer att skrivas ut, och hur kommer utskriften att se ut, om metoden M6 anropas enligt nedan metodanrop?
M6(“abcd”);
static void M6(string value)
{
for (int i = 1; i < value.Length; i++)
{
for (int j = 0; j <= value.Length - i; j++)
{
string partOf = Sub(value, j, i);
Console.Write(partOf + “ “);
}
}
}
static string Sub(string input, int start, int length) { string result = ""; if (input.Length >= start + length) { for (int i = start; i < length + start; i++) { result += input[i]; } } return result; }
Fråga 13
2/2
“a b c d ab bc cd abc bcd”