Uppgift 1 ( Betyg 3 uppgift )

Relevanta dokument
Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 (vadå sortering?)

Uppgift 1 ( Betyg 3 uppgift )

TENTA: TDDD11 & TDDC68. Tillåtna hjälpmedel. Starta Emacs, terminal och tentakommunikationsfönster. Skicka in frågor och uppgifter

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

kl Tentaupplägg

Uppgift 1 (Sorterade heltal som är OK)

Uttryck, satser och strömhantering

Uppgift 1a (Aktiekurser utan poster)

Uppgift 1 (grundläggande konstruktioner)

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

5 Grundläggande in- och utmatning

Uppgift 1 ( Betyg 3 uppgift )

kl Examination - Ada

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

kl Tentaupplägg

Föreläsning 4: Poster

Föreläsning 3.1: Datastrukturer, en översikt

kl Tentaupplägg

kl Tentaupplägg

Uppgifter till praktiska tentan, del A. (7 / 27)

kl Tentaupplägg

Tentaupplägg denna gång

Talsystem Teori. Vad är talsystem? Av Johan Johansson

Tentaupplägg denna gång

Uppgift 1 ( Betyg 3 uppgift )

DUGGA Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg. TIPS 4: Du kan kompilera din kod med följande kommandon g++11, w++11 (för mer varningar)

UPPGIFT 1 TVÅPOTENSER. UPPGIFT 2 HISSEN I LUSTIGA HUSET.

Tentaupplägg denna gång

kl Tentaupplägg

kl Tentaupplägg

a = a a a a a a ± ± ± ±500

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Uppgift 1 ( Betyg 3 uppgift )

Tentaupplägg. Betygsgränser: 1 uppg 19:00 Betyg 3 2 uppg 18:00 Betyg 4 2 uppg 16:30 Betyg 5 3 uppg 18:00 Betyg 5

kl Tentaupplägg

kl Tentaupplägg

TDIU Regler

TDIU Regler

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

TDIU Regler

Tentaupplägg denna gång

TDP Regler

TDIU01 / 725G

kl Tentaupplägg

DUGGA Tentaupplägg

TDIU Regler

TDP Regler

Kursmaterial för laborationer i

Uppgift 1 ( Betyg 3 uppgift )

Föreläsning 6: Introduktion av listor

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Uppgift 1 (Oläsliga krypterade meddelanden)

Tentaupplägg denna gång

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

kl Tentaupplägg

kl Tentaupplägg

Programmering II (ID1019) :00-11:00

Programmeringsolympiaden 2012 Kvalificering

Tentaupplägg denna gång

TDP Regler

Tentamen i. för D1 m fl, även distanskursen. lördag 28 maj 2011

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Tema: Pythagoras sats. Linnéa Utterström & Malin Öberg

i LabVIEW. Några programmeringstekniska grundbegrepp

kl Tentaupplägg

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

Föreläsning 8: Aritmetik och stora heltal

Värmedistribution i plåt

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

HI1024 Programmering, grundkurs TEN

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

F2 Datarepresentation talbaser, dataformat och teckenkodning

Övningshäfte 2: Induktion och rekursion

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Extramaterial till Matematik Y

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Övningsuppgifter kapitel 8

TDP Regler

Uppgift 1 ( Betyg 3 uppgift )

Datalogi, grundkurs 1

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Microsoft Office Excel, Grundkurs 1. Introduktion

UPPGIFT 1 TVETYDIGA DATUM

Transkript:

2008-01-11.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Skriv ett program som ritar ut svenska flaggan i färg (tips: den är blå med ett gult kors :-) ). Till din hjälp finns det ett par procedurer som ställer om terminalen till olika färger. Dessa procedurer ligger i paketet Graphics_Handling. Proportionerna på flaggan ser ni i följande figur: För att rita ut det blå respektive det gula skriver man ut blanktecken med respektive bakgrundsfärg. För att proportionerna skall bli rätt måste man dock ta hänsyn till att ett tecken inte är kvadradiskt utan har proportionerna 5x9 (5 enheter i bredd och 9 enheter i höjd). Din uppgift är att skriva programmet så att man kan mata in vilket antal tecken man vill ha i höjdled och sen skall flaggan bli så bra som möjligt i dimensioner. Exempel 1: Antag att man matar in att det skall vara 10 tecken i höjdled. Detta innebär att den gula vågräta linjen skall vara 2 tecken hög och de två blå fälten ovanför/under blir 4 tecken höga. I bredd kommer detta att innebära att man vill ha 4*9/5*5/4 = 9 tecken i bredd på det första blå fältet. Dessutom vill man ha 2*9/5 = 3.6 => 4 gula tecken i bredd (vi avrundar till närmaste heltal). Den totala bredden på flaggan skall vara 10*9/5*16/10 = 28.8 => 29 tecken Detta ger att det högra blå fältet skall vara 29-4-9 = 16 tecken brett. Exempel 2: Antag att man matar in att det skall vara 9 tecken i höjdled. Detta innebär att den gula vågräta linjen skall vara 9/10*2 = 1.8 => 2 tecken hög. Vi väljer att räkna ut hur hög den övre blå delen skall vara först och får då 9*4/10 = 3.6 => 4 tecken högt vilket i sin tur ger att den nedre blå delen skall vara 9-4-2 = 3 tecken (flaggan blir lite ojämn, men det är det bästa vi kan göra i denna uppgift). I bredd kommer detta att innebära (om vi utgår från att den övre vänstra blå delen avgör i första hand) att man vill ha 4*9/5*5/4 = 9 tecken i bredd på det första blå fältet (vilket får gälla även den nedra vänstra blå delen). Dessutom vill man ha 2*9/5 = 3.6 => 4 gula tecken i bredd. Den totala bredden på flaggan skall vara 9*9/5*16/10 = 25.9 => 26 tecken Detta ger att det högra blå fältet skall vara 26-4-9 = 13 tecken brett. Tips: I Ada finns några specialare vad det gäller avrundning m.m. Här kommer några sådana: Float Rounding(x) avrundar flyttalet x till ett flyttal. Integer(x) omvandlar flyttalet x till ett heltal. Float(x) omvandlar heltalet x till ett flyttal.

2008-01-11.kl.08-13 Uppgift 2 Skriv ett program som ritar ut en vimpel med fransar enligt exemplen nedan. Användaren matar in dimensionen (som kan vara godtyckligt stor, d.v.s. inte begränsad av de få fall som finns i exemplen nedan). Körexempel 1: Mata in dimension: 1 --- Körexempel 2: Mata in dimension: 2 ----- ----- Körexempel 3: Mata in dimension: 3 --------- --------- --------- Körexempel 4: Mata in dimension: 5 --------------------------------- --------------------------------- --------------------------------- --------------------------------- ---------------------------------

2008-01-11.kl.08-13 Uppgift 3 Det finns en given textfil, MENINGAR.TXT, som innehåller en liten text. Denna text skall krypteras av dig. Själva krypteringen skall göras på så sätt att man stoppar in fyra tecken i ett heltal och därefter lagrar detta heltal på en binär fil som skall heta MENINGAR.BIN. Att man kan stoppa in fyra tecken i ett heltal visar sig vara möjligt då heltalet består av 32 bitar (nollor/ ettor) och ett tecken består av 8 bitar. Lagringen kan alltså göras enligt nedanstående figur. 01010101 01100011 00101011 00011110 Det som krävs när man krypterar tecknen i ett heltal är att man måste omvandla tecknet till ett motvarande heltal (görs med Character Pos(c) där c är tecknet) och sen multiplicera det med en lämplig faktor för att lägga in det på rätt plats i det slutgiltiga heltalet. Faktorerna för respektive position i heltalet är 2 0, 2 8, 2 16 samt 2 24. Ett specialfall är att radslutstecknen i textfilen skall omvandlas till talet 10. Specialfall eftersom man inte kan räkna med att man i Ada kan läsa in ett radslutstecken på samma sätt som de övriga tecknen. Det är givet att textfilen innehåller exakt en multipel av 4 antal tecken. TIPS: Läs in fyra tecken i taget och lägga in dem i heltalet innan du skriver ut heltalet på den binära filen. Självklart, men... KURIOSA: Krypteringsalgoritmen är uppfunnen av en norrman. Det ser man då originaltextfilen innehåller en norsk flagga.

2008-01-11.kl.08-13 Uppgift 4 Du skall skriva ett program som visar hur den Japanska flaggan såg ut i TV 1941 (OBS! Då var det bara svart-vit TV som fanns). Det som motsvarar den röda färgen i flaggan skriver du ut med tecknet #. Användaren skall mata in höjden på flaggan. Bredden skall vara ca 28.8 gånger större än höjden. Radien på den röda fyllda cirkeln skall vara ca en fjärdedel av höjden. Det är givet att användaren skall mata in udda heltal för höjden och bredden skall avrundas till det närmaste udda heltalet. Radien avrundas nedåt till närmaste heltal. Cirkeln, som ligger centrerad på flaggan och innehåller den röda färgen, ritas ut som en fylld ellips (för att kompensera för teckenproportioner m.m.) som beskrivs av följande formel: r 2 5x = ----- 2 + y 9 2 Ytterramen på flaggan skall också ritas ut. Se körexempel. Körexempel 1: Mata in höjd: 7 +-------------------+ ### ####### ### +-------------------+ Körexempel 2: Mata in höjd: 19 +-----------------------------------------------------+ ### ########### ############### ############### ################# ############### ############### ########### ### +-----------------------------------------------------+

2008-03-12.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som läser igenom en textfil som heter FIL.TXT och skriver ut alla rader där det står ett decimaltal först på raden. Decimaltal följer de format som finns uppräknade här (inga andra varianter är tillåtna): Enkelt decimaltal: Siffra/Siffror följt av en punkt följt av siffra/siffror. Teckenbaserat decimaltal: +/- följt av ett enkelt decimaltal. Ett exempel på indatafil skulle kunna vara: 123.456 Kalle springer fort. 123,456 Nisse springer långsamt. 123 456 Berit är bäst av alla. +12.234 Nisse Hult har otur. -123 Guran är namnet på en gitarr. Varför är denna rad med? -0.0 123456789012345678901234567890.1234567890123456789012345678 X Resultatet på skärmen skulle i detta fall bli: 123.456 Kalle springer fort. +12.234 Nisse Hult har otur. -0.0 123456789012345678901234567890.1234567890123456789012345678 X Det finns en given textfil som heter just FIL.TXT att kopiera. OBS! Det är givet att raderna i filen är maximalt 70 tecken långa. OBS! Det är tyvärr så att man inte kan räkna med att talen går att hantera med datatypen Float.

2008-03-12.kl.14-19 Uppgift 2 Du skall skriva ett program som läser in en sträng från tangentbordet och därefter skriver ut den på skärmen. OBS! du får inte läsa delar och skriva ut utan hela strängen skall skrivas ut efter det att den är inläst. KRAV: Det skall i princip kunna vara en hur lång sträng som helst. Detta innebär att du inte kan dimensionera en sträng i förväg. Minnesbegränsningar i datorn behöver du inte fundera på när du löser uppgiften. När du löser uppgiften skall du läsa in strängen i en funktion som skall heta Get_Line. Funktionen skall inte ha några parametrar. Funktionen skall returnera den inlästa strängen. TIPS: Rekursion är tillåten. TIPS: Felmeddelandet segmentation fault betyder att du gjort för många rekursionssteg. TIPS: Operatorn & är bra. KRAV: Du får inte använda dig av den inbyggda datatypen Unbounded_String.

2008-03-12.kl.14-19 Uppgift 3 Vägverket funderar på att införa så kallade återvändsgrändsavgifter i Stockholm. För att se om detta kommer att slå ut väl har de behov av ett paket som hanterar att bilar kör in i respektive ut ur en återvändsgränder. Detta paket skall heta Blind_Alley_Handling och innehållade två procedurerna Drive_Into respektive Drive_Out_Of. Båda procedurerna skall ha en återvändsgränd respektive en bil som parametrar. Paketet skall innehålla en datatyp som heter Blind_Alley_Type som är privat och som skall skapas som en länkad lista (med pekare). I listan skall data av typen Car_Type ligga. Car_Type finns given i paketet Car_Handling som finns att kopiera. Det finns ett givet testprogram som heter Test_Blind_Alley (som inte skall modifieras) som låter ett antal bilar köra in i respektive ut ur en återvändsgränd. Självklart är det så att man kan köra in flera bilar och den som kört in sist skall köras ut först. Om det sen kommer nya bilar innan alla tidigare är utkörda skall dessa nya förstås ut före de gamla. Tänk er en riktig återvändsgränd där det är för trångt att vända.

2008-03-12.kl.14-19 Uppgift 4 Vägverket har genom tiderna haft en förkärlek för lite annorlunda matematiska saker. Bland annat har de använt något som kallas för gon istället för grader eller radianer när de räknat med vinklar i sina mätutrustningar. Följande figurer visar hur gon fungerar gentemot grader. sin(x) x sin(x) x Grader : 0-360 Radianer: 0-2π Gon: 0-400 De tal som står i figuren anger mellan vilka värden vinklarna anges inom ett varv i den enheten. Din uppgift är att skriva ett program som skriver ut en tabell med två kolumner innehållande x respektive sin(x) där x skall anges i gon. Tabellens starvärde samt slutvärde skall anges av användaren. Körexempel: Mata in startvärde på x: 0 Mata in slutvärde på x : 200 Mata in steglängd : 25 x sin(x) ------------ 0 1.0000 25 0.9239 50 0.7071 75 0.3827 100-0.0000 125-0.3827 150-0.7071 175-0.9239 200-1.0000 Inmatningarna ovan skall ske i heltalsform för att slippa eventuella avrundningsfel i datorn. Vi kan dessutom anta att steglängden alltid gör att det går jämnt upp till slutvärdet. KRAV: Beräkningen av sin(x) (där x är gon) skall ske i en funktion som heter Sin_Gon som tar emot vinkeln (x) angiven i gon (heltal) och returnerar sinusvärdet för denna. Ingen inmatning eller utskrift skall ske i denna funktion. TIPS: Den normala sin(x) finns i paketet Ada.Numerics.Elementary_Functions och den räknar i radianer (d.v.s. med datatypen Float). Konstanten Pi finns i paketet Ada.Numerics.

2008-03-13.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som ritar ut en bild på skärmen. Bilden finns lagrad i en textfil som heter PICTURE.CRYPT och är där lagrad på ett format som beskrivs enligt följande: Alla rader i filen motsvarar en rad i figuren En rad i filen består av ett antal markeringar (två tecken långa). Första tecknet i en markering är en siffra som anger hur många blanktecken som skall skrivas ut före det andra tecknet i markeringen skrivs ut. Ett exempel på indatafil skulle kunna vara: 0+0-0-0+ 1\2\ 2+0-0-0+ Resultatet på skärmen skulle i detta fall bli: +--+ \ \ +--+ Det finns en given textfil som heter just PICTURE.CRYPT att kopiera.

2008-03-13.kl.08-13 Uppgift 2 I Ada har vi begränsningar på hur stora heltal man kan arbeta med inom typen Integer. Du skall nu skapa ett paket som heter Big_Numbers som innehåller en funktion som skall heta Succ. Denna funktion skall ta emot en godtyckligt lång sträng där innehållet är ett vanligt positivt decimalt heltal (inklusive talet noll). Inga konstiga tecken får finnas i strängen (den innehåller alltså endast siffror). Funktionen skall returnera talet efter det som kom in. Dv.s. i princip skall funktionen addera talet ett till det tal som kom in. Talet som returneras skall också vara lagrat i en sträng och strängen får endast innehålla siffror. Inga inledande nollor får förekomma vare sig i det inkommande eller returnerade värdet. Det finns ett givet testprogram som heter Test_Big_Numbers_Succ att kopiera. Du skall inte behöva ändra något i detta program utan det skall gå att kompilera och köra när du skapat ditt paket.

2008-03-13.kl.08-13 Uppgift 3 Vägverket funderar på att införa så kallade tunnelavgifter i Stockholm. För att se om detta kommer att slå ut väl har de behov av ett paket som hanterar att bilar kör in i respektive ut ur en tunnel. Detta paket skall heta Tunnel_Handling och innehållade två procedurerna Drive_Into respektive Drive_Out_Of. Båda procedurerna skall ha en tunnel respektive en bil som parametrar. Paketet skall innehålla en datatyp som heter Tunnel_Type som är privat och som skall skapas som en länkad lista (med pekare). I listan skall data av typen Car_Type ligga. Car_Type finns given i paketet Car_Handling som finns att kopiera. Det finns ett givet testprogram som heter Test_Tunnel (som inte skall modifieras) som låter ett antal bilar köra in i respektive ut ur en tunnel. Självklart är det så att man kan köra in flera bilar och den som kört in först skall köras ut först. Om det sen kommer nya bilar innan alla tidigare är utkörda skall dessa nya förstås ut efter de gamla. Tänk er en riktig tunnel där man inte kan köra om varandra.

2008-03-13.kl.08-13 Uppgift 4 Du skall skriva ut det diagram man får för funktionen y = roten ur x. Det som är lite udda är att användaren inte matar in värden på x utan istället matar in min- och maxvärde på y samt den steglängd i y-led som skall användas (steglängden skall alltid gå jämnt upp med y-max och y-min). Se i exemplen nedan hur utskrifterna skall se ut för olika indata. Körexempel 1: Mata in startvärde på y: 1 Mata in slutvärde på y : 5 Mata in steglängd : 2 5 * 3 * 1 * 01234567890123456789012345 Körexempel 2: Mata in startvärde på y: 0 Mata in slutvärde på y : 7 Mata in steglängd : 1 7 * 6 * 5 * 4 * 3 * 2 * 1 * 0* 01234567890123456789012345678901234567890123456789 Körexempel 3: Mata in startvärde på y: 3 Mata in slutvärde på y : 7 Mata in steglängd : 1 7 * 6 * 5 * 4 * 3 * 01234567890123456789012345678901234567890123456789 Tips: Den ordinarie funktionen för roten ur heter Sqrt och ligger i paketet Ada.Numerics.Elementary_Functions.

2008-03-13.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som ritar ut en bild på skärmen. Bilden finns lagrad i en textfil som heter PICTURE_BLANCS.CRYPT och är där lagrad på ett format som beskrivs enligt följande: Alla rader i filen motsvarar en rad i figuren En rad i filen består av ett antal markeringar (två tecken långa) samt eventuellt en extra halv markering. Första tecknet i en markering är en siffra som anger hur många blanktecken som skall skrivas ut före det andra tecknet i markeringen skrivs ut. En halv markering består endast av siffran som anger antalet blanktecken som finns i slutet av raden. Ett exempel på indatafil skulle kunna vara: 0+0-0-0+1 1\2\ 2+0-0-0+3 Resultatet på skärmen skulle i detta fall bli (OBS! Första och sista raden innehåller alltså blanktecken i slutet av raderna): +--+ \ \ +--+ Det finns en given textfil som heter just PICTURE_BLANCS.CRYPT att kopiera.

2008-03-13.kl.14-19 Uppgift 2 I Ada har vi begränsningar på hur stora heltal man kan arbeta med inom typen Integer. Du skall nu skapa ett paket som heter Big_Numbers som innehåller en funktion som skall heta Pred. Denna funktion skall ta emot en godtyckligt lång sträng där innehållet är ett vanligt positivt decimalt heltal (större än talet noll). Inga konstiga tecken får finnas i strängen (den innehåller alltså endast siffror). Funktionen skall returnera talet före det som kom in. Dv.s. i princip skall funktionen subtrahera talet ett från det tal som kom in. Talet som returneras skall också vara lagrat i en sträng och strängen får endast innehålla siffror. Inga inledande nollor får förekomma vare sig i det inkommande eller returnerade värdet (undantag är givetvis att talet noll skall vara talet noll). Det finns ett givet testprogram som heter Test_Big_Numbers_Pred att kopiera. Du skall inte behöva ändra något i detta program utan det skall gå att kompilera och köra när du skapat ditt paket.

2008-03-13.kl.14-19 Uppgift 3 Vägverket funderar på att införa så kallade tunnelavgifter i Stockholm. För att se om detta kommer att slå ut väl har de behov av ett paket som hanterar att bilar kör in i respektive ut ur en tunnel. Detta paket skall heta Tunnel_Handling och innehållade två procedurerna Drive_Into respektive Drive_Out_Of. Båda procedurerna skall ha en tunnel respektive en bil som parametrar. Paketet skall innehålla en datatyp som heter Tunnel_Type som är privat och som skall skapas med hjälp av två stycken återvändsgränder (datatyp och rutiner för att hantera sådana finns i paketet Blind_Alley_Handling som är givet). Titta över de givna filer som finns att kopiera så finner du det du behöver för att slippa göra en massa i onödan. Det finns ett givet testprogram som heter Test_Tunnel (som inte skall modifieras) som låter ett antal bilar köra in i respektive ut ur en tunnel. OBS! Din datatyp Tunnel_Type skall ENDAST bestå av återvändsgränderna. För att simulera en tunnel med hjälp av två återvändsgränder kan man tänka sig följande scenarion. Kör in i tunnel motsvarar att köra in bilar i den första återvändsgränden. ALLTID! När man begär att få ut en bil ur tunnel finns det två fall. 1. Det finns bilar i den andra återvändsgränden: Plocka bil från den andra återvändsgränden. 2. Det är tomt i den andra återvändsgränden: Backa ut alla bilarna ur den första återvändsgränden och backa in dem i den andra återvändsgränden. Plocka sen en bil ut den andra återvändsgränden.

2008-03-13.kl.14-19 Uppgift 4 Du skall skriva ut det diagram man får för funktionen y = round(roten ur x). Det som är lite udda är att användaren inte matar in värden på x utan istället matar in min- och maxvärde på y samt den steglängd i y-led som skall användas (steglängden skall alltid gå jämnt upp med y- max och y-min). Se i exemplen nedan hur utskrifterna skall se ut för olika indata. Körexempel 1: Mata in startvärde på y: 1 Mata in slutvärde på y : 5 Mata in steglängd : 2 5 ********** 3 ****** 1 ** 0123456789012345678901234567890 Körexempel 2: Mata in startvärde på y: 0 Mata in slutvärde på y : 7 Mata in steglängd : 1 7 ************** 6 ************ 5 ********** 4 ******** 3 ****** 2 **** 1 ** 0* 012345678901234567890123456789012345678901234567890123456 Körexempel 3: Mata in startvärde på y: 3 Mata in slutvärde på y : 7 Mata in steglängd : 1 7 ************** 6 ************ 5 ********** 4 ******** 3 ****** 012345678901234567890123456789012345678901234567890123456 Tips: Den ordinarie funktionen för roten ur heter Sqrt och ligger i paketet Ada.Numerics.Elementary_Functions. Avrundning kan göras med t.ex. Float Rounding.

2008-03-14.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som läser igenom en textfil som heter DATA.XML och skriver ut på skärmen hur många taggar det finns inuti. Vi räknar inte de taggar som är rena avslutningstaggar. De taggar som kan förekomma är: Inledningstag: <xxx> Avslutningstag: </xxx> Inledning och avslutning i samma tag: <xxx/> Ett exempel på indatafil skulle kunna vara: <aaa>... <bbb>... </bbb>...... <ccc>... </ccc>... <ddd/>... </aaa> <eee/> Resultatet på skärmen skulle i detta fall bli: Det finns 5 taggar i filen. Det finns en given textfil som heter just DATA.XML att kopiera. Det är givet att filen består av en korrekt datamängd. D.v.s. det fattas inga avslutningstaggar och det finns inga taggar som ligger i fel ordning. Det är också givet att texten i övrigt inte innehåller några /, < eller >.

2008-03-14.kl.14-19 Uppgift 2 I Ada har vi lite problem med hantering av riktigt stora heltal. Datatypen Integer räcker liksom inte till. Detta i kombination med att man ofta vill hantera andra talbaser än det decimala gör att vi är ute efter ett paket som klarar av att addera binära tal. Din uppgift är att skapa paketet Big_Binary_Numbers och där skapa operatorn + som adderar två binära tal. Det är givet att din operator skall ta emot två strängar (som inte är begränsade i längd) och addera ihop innehållet och returnera en ny sträng med resultatet. Strängarna innehåller endast ett antal tecken 0 och 1. Inga inledande nollor får finnas med (förutom för talet noll som givetvis representeras som 0 ). Det är givet att det endat är positiva binära heltal som skall adderas. Att addera binära tal är inget konstigare än att addera två vanliga tal. Man får tänka på att det blir en minnessiffra till nästa position om man adderar minst två ettor. OBS! Tänk på att minnessiffran räknas med i additionen. Körexempel 1: Mata in två binära tal (ett per rad): 1001010001010101010100100101010100100101001 10010101001010100101010001010 Resultatet av additionen blir: 1001010001010111101001101111111001110110011 Körexempel 2: Mata in två binära tal (ett per rad): 101 111 Resultatet av additionen blir: 1100 Körexempel 3: Mata in två binära tal (ett per rad): 1 11111111111 Resultatet av additionen blir: 100000000000 Körexempel 4: Mata in två binära tal (ett per rad): 0 0 Resultatet av additionen blir: 0

2008-03-14.kl.14-19 Uppgift 3 Du skall komplettera paketet Data_Structure_Handling som redan är påbörjat. Din uppgift är att se till att proceduren Insert fungerar enligt nedan. Det är givet att varje nod har ett tecken som data och att den kan kopplas mot två andra noder. Detta leder till att det kan bli cirkulariteter i datastrukturen, men det är alltid givet att man inte behöver leta sig vidare i strukturen om nästa nod är en nod med en tidigare bokstav (i alfabetet). Indata till programmet kommer att vara en sekvens av rader med beskrivningar av vilka noder som skall kopplas ihop i datastrukturen. Indatasekvensen kommer alltid att vara ordnad så att den kan ses som sorterad i bokstavsordning och man kan aldrig koppla sig mot en tidigare nod om inte existerar. Indatasekvensen avslutas med en enkel nolla (tecknet 0 ). Exempel på indatasekvens: a-b b-c c-b c-d d-a d-e e-c 0 Datastrukturen efter detta: Data b e a d c Du har i paketet en utskriftsprocedur given som återskapar indatasekvensen om du fått till datastrukturen rätt.

2008-03-14.kl.14-19 Uppgift 4 Du skall skriva ut det diagram man får för funktionen y = roten ur x. Det som är lite udda är att användaren inte matar in värden på x utan istället matar in min- och maxvärde på y. Steglängden skall alltid vara 1. Se i exemplen nedan hur utskrifterna skall se ut för olika indata. Körexempel 1: Mata in startvärde på y: 1 Mata in slutvärde på y : 5 5 * 4 * * 3 * * * 2 * * * * 1 * * * * * 01234567890123456789012345 Körexempel 2: Mata in startvärde på y: 0 Mata in slutvärde på y : 7 7 * 6 * * 5 * * * 4 * * * * 3 * * * * * 2 * * * * * * 1 * * * * * * * 0** * * * * * * 01234567890123456789012345678901234567890123456789 Körexempel 3: Mata in startvärde på y: 3 Mata in slutvärde på y : 7 7 * 6 * * 5 * * * 4 * * * * 3 * * * * * 01234567890123456789012345678901234567890123456789 Tips: Den ordinarie funktionen för roten ur heter Sqrt och ligger i paketet Ada.Numerics.Elementary_Functions.

2008-06-04.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som ritar ut en almanacka för en given månad. Indata till programmet (matas in från tangentbordet) är hur många dagar det är i månaden och vilken dag första dagen i månaden är. Dagen matas in som ett heltal (1 = mån, 2 = tis,..., 7 = sön). Krav: Almanackan skall alltid vara utskriven med måndag som första dag. Exempel 1 på programkörning: Mata in antal dagar i månaden : 31 Mata in första dagen i månaden: 3 Mån Tis Ons Tor Fre Lör Sön --------------------------------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Exempel 2 på programkörning: Mata in antal dagar i månaden : 28 Mata in första dagen i månaden: 1 Mån Tis Ons Tor Fre Lör Sön --------------------------------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Exempel 3 på programkörning: Mata in antal dagar i månaden : 30 Mata in första dagen i månaden: 7 Mån Tis Ons Tor Fre Lör Sön --------------------------------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2008-06-04.kl.08-13 Uppgift 2 Till denna uppgift finns det tre givna filer. Den första innehåller ett antal substantiv och heter SUBSTANTIV.TXT. Den andra heter VERB.TXT och innehåller verb. Den tredje filen heter MENINGAR.TXT och innehåller ett antal rader med försök till enkla meningar. Din uppgift är att skriva ett program som läser igenom filen med meningarna och plockar ut de rader som innehåller meningar uppbyggda enligt formen substantiv verb. Filerna innehåller endast ord skrivna som gemener och de ord som inte finns med i de två filerna som innehåller verb och substantiv räknas som felaktiga. Det kan finnas meningar som alltså är korrekta ur uppbyggnaden substantiv verb, men ändå inte räknas som korrekta då orden i dessa meningar inte kan hittas i de två andra filerna. I de två hjälpfilerna (VERB.TXT och SUBSTANTIV.TXT) är orden maximalt 20 tecken långa och det finns inga blanktecken någonstans. I meningsfilen är orden alltid separerade med exakt ett blanktecken. Det är alltid två ord per rad i denna fil. När ditt program körts skall alla de rader (själva innehållet i raderna) som uppfyllde kraven ovan vara utskrivna på skärmen. Exempel på hur utskriften skulle kunna vara givet någon variant av filinnehåll (OBS! I de filer du har tillgängliga finns det säkert helt andra meningar/ord att tillgå. Kolla därför i dessa filer): huset brinner bilen tutar motorbåten far far far mor ror

2008-06-04.kl.08-13 Uppgift 3 I matematiken vill man ofta kunna beräkna determinanten av en matris (alltid kvadratiska matriser). Det finns i denna uppgift givet ett huvudprogram som läser in en matris från tangentbordet och lagrar detta i en datastruktur som representerar matrisen (i detta fall en vektor av godtycklig längd). Din uppgift är att lägga till två funktioner. 1) En funktion som beräknar determinanten av matrisen. 2) En hjälpfunktion till den förra som plockar ut en delmatris ur en matris. Antag att man har en matris av dimension 3 (d.v.s. en 3x3-matris) enligt följande: M 3 4 2 5 1 6 7 9 8 Lagras i programmet som 3 4 2 5 1 6 7 9 8 När man skall beräkna determinanten behöver man plocka ut ett antal delmatriser ur den matris man har. Detta görs genom att plocka bort första raden och en av kolumnerna (alla varianter av detta skall plockas ut). I en 3x3-matris blir det alltså tre delmatriser som skall plockas ut. Dessa blir med ovanstående matris följande: V 1 V 2 V 3 M 1 M 2 M 3 3 4 2 5 1 6 7 9 8 1 6 9 8 3 4 2 5 1 6 7 9 8 5 6 7 8 3 4 2 5 1 6 7 9 8 5 1 7 9 Att plocka ut en delmatris kommer alltså att behövas flera gånger och därför skulle du alltså skapa funktionen beskriven i 2) ovan. Till funktionen skickar du matrisen och vilken kolumn som skall plockas bort. Tillbaka från funktionen får du den nya (mindre) matrisen. OBS! representationen av matrisen är en vektor i programmet. Tag ut rätt delar ur vektorn! Originalmatrisens dimension kallar vi för N (i vårt fall = 3 då M är en 3x3-matris) Vi kan kalla originalmatrisen gör M och delmatriserna för M 1, M 2, M 3. Det värde som står i första raden i den kolumn som tagits bort för att få fram delmatriserna kallar vi för V 1 (=3), V 2 (=4), V 3 (=2). Själva formeln för att beräkna determinanten kan beskrivas enligt följande: N det( M) = ( 1) ( i 1) V det ( M ) i i i = 1 Man beräknar alltså determinanten genom att summera en formel som i sig har determinaten för en delmatris. När en delmatris endast består av en 1x1-matris är determinanten densamma som värdet (talet) i matrisen. Tips: Det finns ett färdigt program som skapar olika matriser och ger determinantvärdet så att du kan kontrollera ditt svar. Kör detta och använd dessa data som indata till ditt program.

2008-06-04.kl.08-13 Uppgift 4 Alla vet vi ju hur de vanliga operatorerna + och - fungerar. Din uppgift är att fullborda ett påbörjat paket som skall ge lite extra hjälp till dem som vill använda de vanliga operatorerna + och -. Paketet heter Math och dess ads -fil finns given. Det finns dessutom ett testprogram som använder detta paket. I paketspecifikationen står en del krav på hur de funktioner som skall implementeras skall fungera. Funktionerna som skall skapas heter Plus och Minus.

2008-08-20.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Inte nog med att Albert Frank Einstein klöv en ölatom redan som ung, han uppfann också det matematiska begreppet relativa tal. Ett relativt tal, E, definieras enligt formeln E = m * c 2 De två delar talet består av är talets massa (m) och den hastighet talet färdas i rymden (c). Två relativa tal kan ha olika massa och fara med olika hastighet i rymden och ändå vara lika. På samma sätt kommer två tal med samma massa, men som färdas olika fort alternativt har samma hastighet, men har olika massor att vara olika till storlek. Din uppgift är att skapa en post som representerar ett relativt tal samt följande procedurer och funktioner för att bearbeta sådana tal. Get - som läser in ett relativt tal. =, < - som jämför två relativa tal. Det är tillåtet att skapa ett separat paket för datatypen och ovanstående underprogram, men det är inget krav. Programkörning, exempel 1: Mata in det första relativa talet: Ange m-värdet: 16 Ange c-värdet: 2 Mata in det andra relativa talet: Ange m-värdet: 4 Ange c-värdet: 4 Dessa relativa tal var lika. Programkörning, exempel 2: Mata in det första relativa talet: Ange m-värdet: 12 Ange c-värdet: 2 Mata in det andra relativa talet: Ange m-värdet: 4 Ange c-värdet: 4 Det andra relativa talet var störst. I ditt program behöver du inte ha någon felhantering. Generellt sett kommer E att bli relativt stort även för relativt små c-värden. Vi antar också att inga negativa tal matas in av användaren.

2008-08-20.kl.14-19 Uppgift 2 Alla vet att Albert Einstein var väldigt begåvad och att han löste problem som man inte ens visste att de fanns innan han löst dem. Mindre känt (kanske helt okänt) är att han hade en syster som gifte sig med med en byggnadsherre vid namn Berthold Zweistein och fick en son som efter sin far och sin morbror fick heta Bertbert Zweistein. Bertbert sitter på jobbet och har fått ett antal textfiler som var och en kan innehålla en massa positiva oktala tal (tal i basen 8) eller så är de tomma. Om det inte är en tom fil gäller att det på varje rad i filen finns ett eller flera oktala tal separerade med blanktecken. Det är också givet att det kan vara olika många rader med tal i de olika filerna. Bertberts uppgift är att han för varje textfil med oktala tal skall skapa en ny textfil som skall innehålla ett antal tal (i den normala basen 10) som motsvarar summan av alla oktala tal som finns på en rad i originalfilen. Summan av första radens oktala tal i originalfilen skall alltså stå i den nya filen på rad ett. Summan av andra raden med oktala tal skall stå på rad två i den nya filen etc. Den nya filen kommer alltså att ha ett tal per rad och det skall bli lika många rader i den nya filen som i originalfilen. Bertbert har inte den matematiska begåvning som morbror hade, men han har ju datorer och programspråket Ada till sin hjälp så han löser problemet trots allt. Din uppgift är att lösa samma problem som Bertbert hade. Det gäller alltså att skriva ett program som läser data från en originalfil, som vi kan anta i denna uppgift att den heter OKTALA_TAL.TXT, och skriver ut summorna på den nya filen som skall heta DECIMALA_SUMMOR.TXT. Exempel på innehåll i OKTALA_TAL.TXT: 123 23 76 43 77 12 11 22 Resultatet i DECIMALA_SUMMOR.TXT: 83 189 27 TIPS 1: Om du inte klarar av att omvandla ett oktalt tal till ett decimalt tal gör det inget. Man kan i Ada läsa in tal i olika baser med hjälp av den vanliga Get-proceduren för heltal. Det är dock ett litet problem. För att Get skall klara av inmatningen måste det som matas in vara på formatet talbas#värde# vilket inte är fallet i filen (det är upp till dig att lösa). Ett exempel skulle kunna vara 8#11# som motsvarar talet 11 8 som i sin tur är samma tal som 9 10, d.v.s. talet 9 i vårt decimala talsystem. TIPS 2: Det är ok att använda fler filer eller datatrukturer än de som nämns i uppgiften.

Uppgift 3 Inom modern vetenskap finns det många begrepp som har sina anor långt tillbaka i tiden. Numer finns det ett helt forskningsområde som handlar om strängteori (engelska string theory ). Barbara Dreistein, en avlägsen släkting till den numer välkände Bertbert Zweistein, håller på med just detta och vill ha hjälp med ett litet problem hon stött på. Det smala forskningsprojekt Barbara Dreistein är involverad i tittar på långa och korta palindrom och hur dessa matchar varandra. Hon forskar i så kallade palindrompar. Ett par exempel där man direkt ser att de matchar varandra är de två palindromparen ABBA RATAR ABBA och ABBA samt NATURRUTAN och NATAN. Själva matchningen går till så att man tittar på sista bokstaven i de båda palindromen och om dessa är lika går man vidare och tittar på första tecknet i palindromen. Är dessa också lika går man vidare och tittar på näst sista tecknet i respektive palindrom. Likhet ger att man tittar på de andra tecknet etc. Man arbetar sig mot mitten av palindromet och när man gått igenom alla tecken i den kortare strängen och alla tecken har matchat varandra anser man att det är ett palindrompar. Om vi tittar på exemplen ovan och markerar de matchande tecknen med versaler ser vi kanske mer hur matchningen gått till. ABba ratar abba <-> ABBA NAturruTAN <-> NATAN Andra exempel på strängteoripalindrompar är: GOD Arab åt tå bara DOG <-> GOD ARA DOG AnNA <-> ANA Skriv ett program som läser in två strängar (vi antar att användaren matar in korrekta palindrom så slipper vi felhantering av detta), som är maximalt 30 tecken långa, och utför ovanstående kontroll. Om det är två strängar som matchar skall programmet skriva ut att de matchar, annars skall det stå att de inte matchar. Exempel på programkörning: Mata in det längsta palindromet : GOD ARAB ÅT TÅ BARA DOG Mata in det kortaste palindromet: GOD ARA DOG Det var matchande palindrom. Ett ytterligare exempel: Mata in det längsta palindromet : SIRAP I PARIS Mata in det kortaste palindromet: LIM I MIL Det var inte matchande palindrom.

Uppgift 4 Nu tror du att denna uppgift skall handla om den berömde musikern Beatrice Vierstein, men detta är helt fel. Den handlar istället om hennes broder Tuck som sysslade med broderier. Han behöver ett program som hjälper honom att rita ut de mönster han skall brodera. Det mönster som skall ritas av programmet ser ut på följande sätt (dimensionerna är här S=3, K=4, R=2). ------------------------ -- -- -- -- -- -- -- -- - - - - - - - - ------------------------ -- -- -- -- -- -- -- -- - - - - - - - - - - - - - - - - -- -- -- -- -- -- -- -- ------------------------ - - - - - - - - -- -- -- -- -- -- -- -- ------------------------ Ett körexempel (observera att dimensionerna endast avser övre vänstra kvadranten): Mata in S (antal stygn) : 6 Mata in K (antal kolumner): 4 Mata in R (antal rader) : 2 ------------------------------------------------ ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- --- --- --- --- --- --- --- --- -- -- -- -- -- -- -- -- - - - - - - - - ------------------------------------------------ ----- ----- ----- ----- ----- ----- ----- ----- ---- ---- ---- ---- ---- ---- ---- ---- --- --- --- --- --- --- --- --- -- -- -- -- -- -- -- -- - - - - - - - - - - - - - - - - -- -- -- -- -- -- -- -- --- --- --- --- --- --- --- --- ---- ---- ---- ---- ---- ---- ---- ---- ----- ----- ----- ----- ----- ----- ----- ----- ------------------------------------------------ - - - - - - - - -- -- -- -- -- -- -- -- --- --- --- --- --- --- --- --- ---- ---- ---- ---- ---- ---- ---- ---- ----- ----- ----- ----- ----- ----- ----- ----- ------------------------------------------------