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.