Uppgift 1 (vadå sortering?)

Relevanta dokument
kl Tentaupplägg

kl Tentaupplägg

Uppgift 1a (Aktiekurser utan poster)

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

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 (Sorterade heltal som är OK)

Uppgift 1 (grundläggande konstruktioner)

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

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

Tentaupplägg denna gång

kl Tentaupplägg

kl Examination - Ada

kl Tentaupplägg

kl Tentaupplägg

DUGGA Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

TDIU Regler

kl Tentaupplägg

kl Tentaupplägg

Tentaupplägg denna gång

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

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

kl Tentaupplägg

kl Tentaupplägg

DUGGA Tentaupplägg

Tentaupplägg denna gång

Uppgift 1 ( Betyg 3 uppgift )

5 Grundläggande in- och utmatning

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 (Oläsliga krypterade meddelanden)

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

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

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

kl Tentaupplägg

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

Tentaupplägg denna gång

Tentaupplägg denna gång

Tentaupplägg denna gång

TDIU Regler

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

Uppgift 1 ( Betyg 3 uppgift )

TDDI22 (exempel) TDDI22 Tentaregler

TDIU Regler

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

kl Tentaupplägg

Regler. Betygssättning

kl Tentaupplägg

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

Uttryck, satser och strömhantering

kl Tentaupplägg

HI1024 Programmering, grundkurs TEN

EXTRA UPPGIFTER I C++ PROGRAMMERING-A

TDP Regler

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

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

Känguru 2019 Student gymnasiet

kl Tentaupplägg

DE FYRA RÄKNESÄTTEN (SID. 11) MA1C: AVRUNDNING

HI1024 Programmering, grundkurs TEN

Uppgift 1 ( Betyg 3 uppgift )

TDIU Regler

Kursmaterial för laborationer i

Tentamen i Programmering grundkurs och Programmering C

kl Tentaupplägg

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator

Programmeringsolympiaden 2012 Kvalificering

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

TDP Regler

TDDI TDDI22 Tentaregler

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

HI1024 Programmering, grundkurs TEN

HI1024 Programmering, grundkurs TEN

Textsträngar från/till skärm eller fil

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

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

LAB 1. FELANALYS. 1 Inledning. 2 Flyttal. 1.1 Innehåll. 2.1 Avrundningsenheten, µ, och maskinepsilon, ε M

TDP Regler

1Mer om tal. Mål. Grunddel K 1

Övningsuppgift 2 Datalogi I 2I1027/2I1035/2I1046

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

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

HI1024 Programmering, grundkurs TEN

Tentaupplägg denna gång

Uppgift 1 ( Betyg 3 uppgift )

Tentamen i Programmering grundkurs och Programmering C

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

Projektdokumentation för Othello

UPPGIFT 1 LAMELLER. Minsta antalet hål: 1. Första lamellen? Andra lamellen? Minsta antalet hål: 3

Laboration: Grunderna i MATLAB

Uppgift 1 ( Betyg 3 uppgift )

Föreläsning 6: Introduktion av listor

Repetitionsuppgifter inför Matematik 1. Matematiska institutionen Linköpings universitet 2013

Transkript:

2011-06-08.kl.14-19 Uppgift 1 (vadå sortering?) Du skall skriva ett program som sorterar in en sekvens av tal i en vektor (en array ) enligt en speciell metod. Inledningsvis skall vektorn innehålla endast nollor. Användaren matar in ett antal heltal och avslutar inmatningen med talet 0 (noll). Efter det att inmatningen är klar skall innehållet i vektorn skrivas ut, men de index i vektorn där det är nollor skall inte skrivas ut. Utskriften skall innehålla både indexet i vektorn samt talet som ligger på detta index i en tabell enligt exemplen nedan. Regler för insättning i vektorn: Första talet skall alltid stoppas in på index 1 i vektorn. De övriga talen skall sorteras in enligt följande metod: - Om talet är mindre än det tal man just nu tittar på (på index N, där N = 1 för första talet) skall man leta vidare på index N*2. - Om talet istället är större än det tal man tittar på skall man leta vidare på index N*2+1. - Om talet är lika som det tal man tittar på skall man inte göra något med det nya talet. - Om talet man tittar på är 0 (noll) skall man stoppa in det nya talet på denna plats i vektorn. Antag att användaren matar in talen 5 3 7 4 9 2 7 0 1 8. Detta leder till att talet: 5 läggs i index 1 3 läggs i index 2 (mindre än talet 5) 7 läggs i index 3 (större än talet 5) 4 läggs i index 5 (mindre än talet 5 och sen större än talet 3) 9 läggs i index 7 (större än talet 5 och sen större än talet 7) 2 läggs i index 4 (mindre än talet 5 och sen mindre än talet 3) 7 kastas bort då det redan finns med i vektorn. 0 avslutar inmatningen. Vi antar att användaren aldrig matar in fler än 10 unika heltal (exklusive nollan). Körexempel: Mata in en sekvens av heltal (avsluta med talet noll): 5 3 7 4 9 2 7 0 1 8 Index - Tal ----------- 1-5 2-3 3-7 4-2 5-4 7-9

2011-06-08.kl.14-19 Uppgift 2 (akta dig för nollan!) Skriv ett program som läser in två flyttal som antingen matas in som heltal eller som decimaltal (med komma som separatortecken), d.v.s. på formen N eller N,M (där N är ett heltal och M är ett positivt heltal). Programmet skall därefter summera dessa och skriva ut summan (med tre decimalers noggrannhet och med punkt som separatortecken). Körexempel 1: Mata in två flyttal: 12 345,67 Summan blir: 357.670 Körexempel 2: Mata in två flyttal: -12 345,67 Summan blir: 333.670 Körexempel 3: Mata in två flyttal: 12,4-5,37 Summan blir: 7.030 Körexempel 4: Mata in två flyttal: 12,4567 5,12345 Summan blir: 17.580 Körexempel 5: Mata in två flyttal: 12 5 Summan blir: 17.000 Vi antar att man ALLTID matar in de två talen med ett blanktecken mellan talen och inget före. Dessutom är det inget efter det sista talet (bara ett ENTER). Dessutom får användaren inte mata in mer än 9 heltalssiffror respektive 7 decimaler. Behöver inte kollas av ditt program. TIPS: Bra med underprogram.

2011-06-08.kl.14-19 Uppgift 3 (figurera ytligt) En assistent fick för sig att rita upp en figur som kanske skulle kunnat varit en rituppgift enligt nedanstående. Dock visade det sig att detta kan ge väldiga problem för den som skall lösa uppgiften så examinator valde att ändra inriktningen till att istället beräkna arean av den yta som täcks av figuren. Den mittersta kvadraten (den som har högst siffra i de respektive figurerna) har arean 1 a.e. (areaenhet). Varje kvadrat som är en storlek mindre är 1/4 av den större i area (gäller för alla storlekar). Man ser att det inte alltid kommer att bli 4 stycken av nästa mindre storlek utan det kan bli 3 eller till och med 2 ibland. Figur 1 (storlek 2): 0 0 1 1 1 1 0 0 Figur 2 (storlek 3): 0 0 1 1 0 1 1 0 0 1 1 2 2 2 2 1 1 2 2 2 2 0 0 2 2 2 2 1 1 2 2 2 2 1 1 0 0 1 1 0 1 1 0 0 Nog om figurerna nu. För att beräkna arean på den totala figuren givet en viss storlek (N) kommer man (lätt?) fram till att följande formel gäller: f( N 0, ARN,, ) 0, för N N 0 eller R 4 A A + 4f N 0, ---, 1, N+ 1 4, för N = 0 = A A 2f N 0, ---, 1, N+ 1 A + + f N 0, ---, R + 1, N + 1, för N 1 och R 2 4 4 A f A N 0, ---, 1, N + 1 A + + f N 4 0, ---, R, N+ 1, för N 1 och R = 3 4 I formeln ovan är N 0 storleken, A arean på den kvadrat man beräknar ytan för just nu (1 för kvadrat nummer 0), R en rotationsriktning (som börjar på 0 för den första kvadraten) och N den aktuella kvadratens nummer (som också börjar på 0). Din uppgift är att skriva det program som beräknar arean av en sådan figur där användaren matar in storleken. Arean för de ovanstående figurerna blir f(1, 1, 0, 0) = 2.000 a.e. respektive f(2, 1, 0, 0) = 2.750 a.e.

2011-06-08.kl.14-19 Uppgift 4 (ljuv musik, eller...) Din uppgift är att skriva ett music-shuffle -program som läser in ett antal låtar från en textfil och sen skriver ut en ordning på låtarna som uppfyller kraven nedan. Filnamnet (max 30 tecken långt) skall matas in från tangentbordet när programmet startats. Det är givet att det inte är särskilt många låtar med samma artist i förhållande till totala antalet låtar. Utskriften av låtarna skall vara enligt exemplen, d.v.s. med låt och sen artist inom parentes. I filen ligger dessa data på samma rad med endast ett kolon ( : ) mellan låtnamn och artist för en given låt. Det skall givetvis kunna finnas flera artister med samma låt och vice versa. Låtnamn och artistnamn är maximalt 30 respektive 23 tecken). KRAV: Samma låt (med samma artist) får inte spelas flera gånger. Två på varandra följande låtar får inte ha samma artist. Det skall inte bli samma ordning på låtarna vid olika programkörningar (åtminstone inte sannolikt så). Körexempel 1: Mata in filnamn: given_files/songs_5.txt Bohemian Rhapsody (Queen) Comftorably Numb (Pink Floyd) Don t Stop Me Now (Queen) Sweet Emotion (Aerosmith) Free Bird (Lynyrd Skynyrd) Körexempel 2: Mata in filnamn: given_files/songs_5.txt Sweet Emotion (Aerosmith) Comftorably Numb (Pink Floyd) Don t Stop Me Now (Queen) Free Bird (Lynyrd Skynyrd) Bohemian Rhapsody (Queen) Körexempel 3: Mata in filnamn: given_files/songs_5.txt Don t Stop Me Now (Queen) Free Bird (Lynyrd Skynyrd) Comftorably Numb (Pink Floyd) Bohemian Rhapsody (Queen) Sweet Emotion (Aerosmith) TIPS 1: Det finns fler filer att testa med i mappen given_files. TIPS 2: Det kan vara praktiskt att försöka slumpa fram vilken låt som skall komma efter den man för tillfället har fått fram och sen kolla att kraven är uppfyllda. Om man upptäcker att den ordning man har inte kan generera en korrekt lösning är det ok att slumpa om allt från början (dock skall inte programmet startas om i detta fall).

2011-06-09.kl.08-13 Uppgift 1 (ont om tid?) Fibonacci-serien är uppbyggd på så sätt att man börjar med två ettor (som två tal) och sen bygger hela serien på följande rekursiva definition (där N < 1 är otillåtet): Fib( N) = Som vissa kanske inser så finns det oändligt många tal i Fibonacci-serien och det kan ju ställa till det lite, men det gör inget i denna uppgift. I denna uppgift skall du skriva ut en tabell med de första N talen i Fibonacci-serien. Talet N matas in av användaren. Vi har endast begränsningen på inmatning att resultatet kan lagras i en Integer och ditt program behöver inte kontrollera detta. Du skall anropa ett underprogram som heter Fib som räknar ut ett visst tal i serien. Detta underprogram skall anropas för varje Fibonacci-tal i tabellutskriften. I exemplet nedan har vi tagit bort en del rader för att det är lite ont om plats. Ditt huvudprogram skall dock skriva ut alla rader i tabellen. KRAV: Ditt program får inte ta mer än 10 sekunder att köra i det givna intervallet ovan. Körexempel: Fib N 1 Mata in N: 46 N - Fib(N) ----------------- 1-1 2-1 3-2 4-3... 30-832040 31-1346269 32-2178309 33-3524578 34-5702887 35-9227465 36-14930352 37-24157817 38-39088169 39-63245986 40-102334155 41-165580141 42-267914296 43-433494437 44-701408733 45-1134903170 46-1836311903 1, för N < 3 ( ) + Fib( N 2), för N > 2 TIPS: Vi kommer inte att köra med större inmatningar än 46... (av någon anledning)

2011-06-09.kl.08-13 Uppgift 2 (räkna med bråk!) Du skall skriva ett program som beräknar det exakta värdet av produkten av ett antal bråk. Användaren matar in ett godtyckligt antal bråk och du skall efter varje inmatat bråk skriva ut den aktuella produkten av detta och de tidigare inmatade bråken. Användaren matar in ett bråk på formen T/N där T (täljaren) och N (nämnaren) är heltal. Inga blanktecken är tillåtna. Produkten skall alltid skrivas ut med så liten heltalsnämnare som möjligt. Detta leder till att du inte skall omvandla till flyttal... Användaren avslutar inmatningen med 0/0. Körexempel 1: Mata in ett bråk: 10/12 Produkten är för tillfället: 5/6 Mata in ett bråk: 3/10 Produkten är för tillfället: 1/4 Mata in ett bråk: 7/65 Produkten är för tillfället: 7/260 Mata in ett bråk: 38/4 Produkten är för tillfället: 133/520 Mata in ett bråk: 52/13 Produkten är för tillfället: 133/130 Mata in ett bråk: 0/0 Körexempel 2 (man kan i resultatet inte ha negativ nämnare): Mata in ett bråk: -4/12 Produkten är för tillfället: -1/3 Mata in ett bråk: 12/-4 Produkten är för tillfället: 1/1 Mata in ett bråk: -4/-12 Produkten är för tillfället: 1/3 Mata in ett bråk: 12/-6 Produkten är för tillfället: -2/3 Mata in ett bråk: 0/0 KRAV 1: Lagringen av ett bråk skall ske i en post. KRAV 2: Multiplikationen av två bråk skall ske i en * -operator. KRAV 3: Inläsning och utskrift av bråk skall ske i procedurerna Get respektive Put som endast har en parameter vardera (d.v.s. bråket). TIPS: Det kan vara lämpligt att * -operatorn förkortar bråket så att detta är färdigt när man får tillbaka produkten.

2011-06-09.kl.08-13 Uppgift 3 (rätt radavstånd?) På en textfil ligger en massa data. Varje rad i filen har formatet: <heltal><textrad> D.v.s. det är först ett heltal (inte några < - eller > -tecken) och sen ett antal tecken fram till radslut. Din uppgift är att skriva ett program som frågar användaren efter vad filen heter och sen går igenom filens innehåll och utför följande för varje rad som finns i filen: Läs in heltalet som står först på raden (inga blanktecken före). Skriv ut (på skärmen) det tecken som står så många positioner efter heltalet (på samma rad) som heltalet anger. Om raden är för kort skall inget tecken skrivas ut på skärmen. Antag att man har filen INDATA.TXT som innehåller följande data: 12 Kalle Stropp ligger och sover 4Kantareller är goda 23Tomten är sjuk 2Braskaminen är läcker En programkörning skulle då kunna se ut som följer: Mata in filnamnet: INDATA.TXT ptr Problemet med detta är att du INTE får använda dig av andra inläsningsprocedurer än de som heter Get_Line som finns i Ada som standard. Det är dock givet att heltalen i början av raderna aldrig är längre än 3 tecken. Till din hjälp finns en fil som heter given_files/testdata.txt och du får givetvis skapa egna testdatafiler för att se om ditt program fungerar. Dessa filer skapar du lättast i Emacs. Glöm dock inte att det måste vara ett ENTER på sista raden i filen så att den inte avslutas utan radslut. Det får heller inte vara en tom rad sist i testfilen (d.v.s. en rad utan ett heltal i början).

2011-06-09.kl.08-13 Uppgift 4 (kopplar du detta?) Givet att man har ett antal kontakter (de svarta fyllda cirklarna) som är placerade enligt följande figur: Kontakternas numrering (11, 12, 13, 21, 22,...) relaterar till den sida 31 32 33 de är på samt vilken placering kontakten har på sidan. 23 22 21 13 12 11 41 42 43 I dessa kontakter kan man sätta i 4 typer av sladdar (gröna, vita, röda och blå). Dessa sladdar har två ändar som skall stoppas i två av kontakterna. Det finns plats för två sladdar i varje kontakt. Man kan inte stoppa två olikfärgade sladdar i samma kontakt Följande regler gäller: Det är tillåtet att ha kontakter utan sladdar isatta. D.v.s. en kontakt kan vara tom. En tom kontakt anses dock ha en färg enligt sladdfärgerna ovan även om den inte är inkopplad. Sätter man i en sladd i en kontakt måste den sättas i även en annan kontakt (inga sladdar får vara lösa i ena änden). Alla kontakter som inte är tomma måste ha två sladdar. Följer man en kedja av sladdar skall man komma tillbaka till utgångskontakten (detta fås fram av de ovanstående, men bara som ett förtydligande). Om man stoppar i en röd sladd i en kontakt måste de två andra kontakterna på denna sida också innehålla röda kontakter. Det måste också vara så att alla dessa tre kontakterna ingår i samma sladdkedja (det kan dock vara så att kedjan passera flera sidor). Blå och vita kontakter får endast sitta mitt på sidorna. För att representera detta använder vi en vektor som innehåller 12 heltal. Varje position i vektorn motsvarar en kontakt (index 1=kontakt 11, 2=12, 3=13, 4=21,..., 12=43). Om man har värdet 0 (noll) i vektorn motsvarar detta att man inte har stoppat i en sladd. I övriga fall markerar talet vilken färg samt vilken kontakt sladden går till från denna kontakt. De olika färgerna markeras med hundratal (0=grön, 100=vit, 200=röd och 300=blå). 23 22 21 31 32 33 13 12 11 41 42 43 Om vi antar att det sitter sladdar enligt figuren till vänster och att den tomma kontakten anses vara vit skall alltså vektorn innehålla talen (i denna ordning): 23 122 21 13 112 31 33 100 11 242 243 241 Din uppgift blir att skriva ett program som läser in en sekvens av kontaktnummer (motsvarande det som står ovan) från tangentbordet och sen kontrollerar att det är en korrekt koppling som är gjord (enligt reglerna ovan). Om programmet upptäcker att det är en felaktig koppling skall programmet säga FEL! annars OK!. Inget annat.