Lektion 3 (29 aug)

Iteration (loopar)

Läsanvisningar

Instruktioner

För att lättare kontrollera värdet på långa strängar, använd funktionen text visualizer i Visual Studio:

Utöver detta gäller samma instruktioner som för lektion 2.

Övningar

Lösningsförslag

  1. Skriv ett program som tar ett heltal som indata, beräknar summan av alla heltal upp till denna gräns och sparar resultatet i variabeln sum. Om indatan är 10 ska programmet alltså beräkna 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10, vilket är 55.
    • Skriv en variant av programmet som bara summerar de jämna talen i sekvensen.
    • Skriv en variant av det första programmet (och eventuellt det andra) som inte använder sig av loopar. Ledtråd: Gauss.
  2. Skriv ett program som tar ett heltal som indata och "räknar ned" från detta tal genom att skapa en sträng på formen "10, 9, 8, ..., 2, 1, go!" och spara denna i variabeln countdown. Om indatan är 3 ska strängen alltså bli "3, 2, 1, go!"
  3. Lös den klassiska intervjufrågan FizzBuzz! Skriv ett program som räknar upp från 1 till 100 och sparar samtliga siffror som en sträng i variabeln result, med följande undantag:

    • Tal som är jämnt delbara med 3 ska ersättas med "Fizz".
    • Tal som är jämnt delbara med 5 ska ersättas med "Buzz".
    • Tal som är jämnt delbara med både 3 och 5 ska ersättas med "FizzBuzz".

    Strängen result ska alltså börja så här: "1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, ...".

    • För att räkna ut om ett heltal är jämnt delbart med ett annat heltal, använd modulus-operatorn % (och sök på nätet kring detta om du är osäker på exakt hur).
  4. Skriv ett program som hjälper tärningsspelare att räkna ut de möjliga resultaten när man slår två tärningar. Programmet ska gå igenom samtliga resultat och spara dessa i strängen rolls. Strängen ska alltså börja så här: "(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), ...".
    • Har strängen i ditt program ett kommatecken i slutet? Vad kan du göra för att få bort det?
    • Skriv en variant av programmet som tar ett heltal som indata och bara tar med de kombinationer där summan av tärningarna når denna gräns eller högre. Om indatan exempelvis är 10 ska programmet bara spara följande kombinationer: "(4, 6), (5, 5), (5, 6), (6, 4), (6, 5), (6, 6)".
    • Skriv en variant av det första programmet som kan användas av en bordsrollspelare med ett flaming longsword. Med andra ord ska den ena tärningen ha åtta sidor (och den andra tärningen fortfarande sex sidor). Kan du tänka dig två olika men likartade sätt att göra detta?
    • Vad behöver du ändra för att programmet ska slå tre tärningar istället för två? Gäller samma princip för fyra, fem och ännu fler tärningar?
  5. Skriv ett program som använder loopar för att lösa det klassiska problemet med riskornen på schackbrädet, fast för ett bräde med 24 rutor istället för 64. Med andra ord ska programmet räkna ut hur många riskorn som finns på ett 24-rutigt schackbrädet efter att samtliga riskorn har placerats ut enligt reglerna i Wikipedia-artikeln.
    • Överkurs: Varför har jag begränsat schackbrädets storlek till 24 rutor? Ledtråd: datatyper.