Uppgift 1 (grundläggande konstruktioner)

Uppgift 1 (grundläggande konstruktioner)
a) Skriv ett program som låter användaren mata in 7 heltal och som gör utskrifter enligt
nedanstående körexempel.
Körexempel 1:
Mata in 7 heltal: 1 0 0 3 1 1 1
Tal nr 2 var en nolla.
Tal nr 3 var en nolla.
Körexempel 2:
Mata in 7 heltal: 1 0 2 2 2 0 0
Tal nr 2 var en nolla.
Tal nr 6 var en nolla.
Tal nr 7 var en nolla.
Körexempel 3:
Mata in 7 heltal: 1 1 1 1 1 1 1
Det var inga nollor!
b) Modifiera ditt program så att programmet läser in tal tills man matar in -1.
Körexempel 1:
Mata in ett antal heltal: 1 3 0 3 1 ­1
Tal nr 3 var en nolla.
Körexempel 2:
Mata in ett antal heltal: 1 3 1 0 0 2 5 ­1
Tal nr 4 var en nolla.
Tal nr 5 var en nolla.
Körexempel 3:
Mata in ett antal heltal: 1 ­1
Det var inga nollor!
c) Modifiera ditt program igen så att bara tal i intervallet [0, 9] skall räknas. Alla andra tal
skall ignoreras. Programmet skall fortfarande sluta läsa in heltal när man matar in -1.
Körexempel 1:
Mata in ett antal heltal: 12 0 15 3 99 16 0 ­1 0 14
Tal nr 1 var en nolla.
Tal nr 3 var en nolla.
Uppgift 2 (grundläggande konstruktioner)
a) Skriv ett program som låter användaren mata in leksaker (antal och namn) tills
användaren matar in 0. Programmet skall summera antalet leksaker och skriva ut summan.
Körexempel 1:
Mata in ditt namn : Svea
Mata in leksaker (på egna rader, avsluta med 0):
3 Bilar
5 Hopprep
12 Brädspel
4 Kulor 0
Du har 24 leksaker!
Körexempel 2:
Mata in ditt namn : Karin
Mata in leksaker (på egna rader, avsluta med 0):
0
Du har 0 leksaker!
b) Skapa en kopia av ditt program och modifiera det så att det också använder sig av ditt
namn. Du kan utgå ifrån att man inte har ett namn som är längre än 16 tecken. Om man har
ett längre namn så får man skylla sig själv!
Körexempel 1:
Mata in ditt namn (max 16 tecken): Ingvar
Mata in leksaker (på egna rader, avsluta med 0):
23 Legobitar
10 Bollar
20 Kritor
0
Ingvar har 53 leksaker!
Körexempel 2:
Mata in ditt namn (max 16 tecken): Guy Manuel De Homen Christo
Mata in leksaker (på egna rader, avsluta med 0):
23 Legobitar
5 Flöjtar
2 Trummor
0
Guy Manuel De Ho har 30 leksaker!
c) Skapa en kopia av ditt program och modifiera nu det så att programmet även skriver ut
vilken sorts leksak man har flest av. I del (a), körexempel 1, hade detta varit "brädspel" och i
del (b) så hade det varit "legobitar".
Uppgift 3
(underprogram)
a) Tag din lösning från uppgift 1 (c) och skapa ett underprogram som sköter inmatning och
felhantering av ett heltal. Anropa sedan detta underprogram från huvudprogrammet istället
för att göra felhanteringen där.
Uppgift 4
(underprogram)
a) Tag din lösning från 2 (b) och låt inmatningen av namnet (inklusive ledtexten) ligga i ett
underprogram.
b) Flytta nu inmatning för (alla) leksakerna, (inklusive ledtext) till ett underprogram, detta
skall vara en procedur.
c) Skapa nu en kopia av ditt program från förra deluppgiften. Gör nu om proceduren från (b)
till en funktion.
d) Modifiera nu dina lösningar till de två föregående deluppgifterna så att de nu löser
problemet som står i uppgift 2 (c). Här kan du råka ut för problem. Diskutera detta med din
assistent om du kör fast!
Uppgift 5
(underprogram)
a) Skriv ett underprogram som byter värden i två variabler. Blir detta en procedur eller en
funktion, eller går det att lösa med båda?
b) Gör ett underprogram som tar emot fyra parametrar (A, B, C och D), värdena skall
roteras, d.v.s A skall få Bs värde, B skall få Cs värde, C skall få Ds värde och D skall få As
värde.
Körexempel 1:
Mata in A, B, C och D: 10 20 30 45
A blev 20
B blev 30
C blev 45
D blev 10
c) Modifiera programmet så att man vid anropet kan bestämma åt vilket "håll" värdena skall
roteras.
Uppgift 6
(underprogram)
a) Skriv ett underprogram som tar en temperatur i Celcius och omvandlar detta till
motsvarande temperatur i Kelvin. Låt underprogrammet heta To_Kelvin. Blir detta en
procedur eller en funktion, eller går det att lösa med båda?
b) Antag att man vill kunna anropa underprogrammet på detta sätt:
if To_Kelvin(C) < 0.0 then
Put_Line("Inte helt ok...");
end if;
Är underprogrammet i koden ovan en procedur eller en funktion, eller kan det vara vilket
som?
c) Skriv ett underprogram som tar en temperatur i Celcius (ett heltal) och omvandlar detta
till Farenheit.
Uppgift 7
(underprogram)
a) Skriv ett underprogram som tar ett heltal N som parameter och tar fram det N:te
Fibonaccitalet. Fibonaccitalen ser ut så här:
1, 1, 2, 3, 5, 8, 13, 21, 34, ...
D.v.s varje tal i serien är summan av de två föregående talen, förutom de två första talen,
vilka båda är 1. Du skall inte lösa denna uppgift rekursivt.
Fundera över om ditt underprogram skall vara en procedur eller en funktion, vad är
lämpligast?
b) Skriv ett underprogram som tar ett heltal N som parameter och kontrollerar huruvida talet
är rikt, fattigt eller perfekt. Ett perfekt tal är ett tal som är lika med summan av sina delare.
Ett tal där summan av delarna är mindre än talet är fattigt. Ett tal där summan av delarna är
större än talet är rikt. Talet 1 är definitionsmässigt inte ett perfekt tal.
c) Skriv ett underprogram som räknar ut hur många fattiga, rika och perfekta tal som finns i
intervallet [2, 100].
Uppgift 8
(underprogram och fält)
a) Skriv en funktion (och ett huvudprogram som anropar den) som letar igenom en sträng
efter ett visst tecken. Funktionen skall returnera vilket index som tecknet fanns på. Du kan
utgå ifrån att tecknet finns någonstans i strängen. Om tecknet finns på flera platser så skall
funktioner returnera det lägsta indexet som tecknet finns på.
Körexempel 1:
Mata in en sträng (max 16 tecken): sommartider
Mata in ett tecken: t
Tecknet fanns på index 7.
Körexempel 2:
Mata in en sträng (max 16 tecken): superskoj
Mata in ett tecken: s
Tecknet fanns på index 1.
b) Modifiera din funktion så att den returnerar -1 om tecknet inte finns i strängen.
Körexempel 1:
Mata in en sträng (max 16 tecken): dunderhonung
Mata in ett tecken: a
Tecknet fanns på index ­1.
c) Modifiera din funktion så att man nu kan leta efter en delsträng i strängen. Funktionen
skall nu returnera logiskt sant om delsträngen finns, falskt annars.
Körexempel 1:
Mata in en sträng (max 16 tecken): dunderhonung
Mata in en delsträng: hon
Delsträngen fanns i strängen.
Körexempel 2:
Mata in en sträng (max 16 tecken): dunderhonung
Mata in en delsträng: gott
Delsträngen fanns INTE i strängen.
Uppgift 9
(underprogram och fält)
Skriv ett program som låter användaren mata in fem heltal och som skriver ut dessa heltal i
omvänd ordning. Inget program eller underprogram i din kod får ha mer än 5 satser mellan
begin och end.
Körexempel 1:
Mata in en fem tal: 1 2 3 4 5
Du matade in talen: 5 4 3 2 1
Körexempel 2:
Mata in fem tal: 36 125 0 0 1
Du matade in talen: 1 0 0 125 36
Uppgift 10
(underprogram och fält)
a) Skriv ett program som låter användaren mata in sju heltal som skall lagras i ett fält.
Användaren skall sedan mata in ett heltal N. Därefter skall programmet skriva ut alla heltal
som var större än N. Inget program eller underprogram i din kod får ha mer än 5 satser
mellan begin och end.
Körexempel 1:
Mata in en sju tal: 1 2 3 4 5 6 7
Mata in N: 3
Dessa tal är större än 3: 4 5 6 7 Körexempel 2:
Mata in fem tal: 36 125 95 24 44 100 8
Mata in N: 44
Dessa tal är större än 44: 125 95 100
Körexempel 3:
Mata in fem tal: 16 22 1 15 49 ­3 ­90000
Mata in N: 50
Dessa tal är större än 50:
b) Skapa en kopia av ditt program. Du skall nu modifiera kopian så att det bara skriver ut
det största talen bland de som matades in. Inget program eller underprogram i din kod får ha
mer än 5 satser mellan begin och end.
Körexempel:
Mata in fem tal: 16 22 1 15 49 ­3 ­90000
Det största talet var: 49
Uppgift 11
(underprogram och fält)
Skriv ett program som låter användaren mata in sju heltal som skall lagras i ett fält V.
Användaren skall sedan mata in ytterligare sju heltal som skall lagras ett annat fält W.
Därefter skall programmet skriva ut summan av V och W (se körexempel). Inget program
eller underprogram i din kod får ha mer än 5 satser mellan begin och end.
Körexempel 1:
Mata in en talen i V (7 st): 1 2 3 4 5 6 7
Mata in en talen i W (7 st): 3 0 3 0 3 0 3
Summan av V och W: 4 2 6 4 8 6 10
Körexempel 2:
Mata in en talen i V (7 st): 12 22 32 42 5 6 72
Mata in en talen i W (7 st): 31 10 3 20 3 10 3
Summan av V och W: 43 32 35 62 8 16 75
Uppgift 12
(underprogram och fält)
Skriv ett program som låter användaren mata in sträng med maximalt 100 tecken.
Programmet skall sedan skriva ut strängen, tecken för tecken, med en liten fördröjning
mellan varje. Du kan använda kommandot delay för att pausa programmet. Inget program
eller underprogram i din kod får ha mer än 5 satser mellan begin och end.
Körexempel:
Mata in en sträng: Superdupermegaskurken Turbo Torbjörn J
Du skrev: Superdupermegaskurken Turbo Torbjörn J
Uppgift 13
(underprogram och fält)
Skriv ett program som låter användaren mata in ett ord med maximalt 16 tecken.
Programmet skall sedan kontrollera huruvida detta ord är ett palindrom. Ett palindrom är ett
ord som blir sig självt när det läses baklänges. Du kan utgå ifrån att användaren endast
matar in gemener (små bokstäver). Inget program eller underprogram i din kod får ha mer
än 5 satser mellan begin och end.
Körexempel 1:
Mata in ett ord: kanadakanot
Ordet 'kanadakanot' är inte ett palindrom.
Körexempel 2:
Mata in ett ord: naturrutan
Ordet 'naturrutan' är ju ett palindrom!
Uppgift 14
(underprogram och fält)
Skriv ett program som låter användaren mata in två sorterade sekvenser med fem heltal.
Programmet skall merga dessa så att de bildar en sorterad sekvens.
Körexempel 1:
Mata in första sekvensen: 3 5 5 7 10
Mata in andra sekvensen: 2 4 6 8 9
Den mergade sekvensen är: 2 3 4 5 5 6 7 8 9 10
Körexempel 2:
Mata in första sekvensen: 3 4 5 7 10
Mata in andra sekvensen: 1 2 10 11 12
Den mergade sekvensen är: 1 2 3 4 5 7 10 10 11 12
Uppgift 15
(underprogram och fält)
Skriv ett program som låter användaren mata in siffror i en 3x3-uppställning. Programmet
skall sedan kontrollera huruvida denna uppställning är en magisk kvadrat. En magisk
kvadrat är en kvadrat där varje kolumn och rad har samma summa.
Körexempel 1:
Mata in 3x3 siffror: 4 2 9
3 7 5
8 6 1
Detta är en magisk kvadrat!
Körexempel 2:
Mata in 3x3 siffror: 1 2 3
4 5 6
7 8 9
Detta är bara en vanlig matris.