Uppgift 1 (Sorterade heltal som är OK)

Relevanta dokument
Uppgift 1 (Oläsliga krypterade meddelanden)

Uppgift 1a (Aktiekurser utan poster)

kl Tentaupplägg

Uppgift 1 (vadå sortering?)

Uppgift 1 (grundläggande konstruktioner)

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

DUGGA Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

Tentaupplägg denna gång

Tentaupplägg denna gång

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

Regler. Betygssättning

Uttryck, satser och strömhantering

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

DUGGA Tentaupplägg

kl Tentaupplägg

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

Tentaupplägg denna gång

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

TDIU Regler

TDIU Regler

kl Tentaupplägg

kl Tentaupplägg

Tentaupplägg denna gång

TDIU Regler

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

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

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

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

Tentaupplägg denna gång

kl Tentaupplägg

TDP Regler

kl Examination - Ada

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

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

TDP Regler

Regler. Betygssättning

TDP Regler

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

TDP Regler

TDDI TDDI22 Tentaregler

TDIU Regler

Lab 0: Mycket grundläggande in- och utmatning

Uppgift 1 ( Betyg 3 uppgift )

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

5 Grundläggande in- och utmatning

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

kl Tentaupplägg

TDDI22 (exempel) TDDI22 Tentaregler

kl Tentaupplägg

MMA132: Laboration 2 Matriser i MATLAB

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

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

Uppgift 1 ( Betyg 3 uppgift )

TDP Regler

Tentamen, EDAA10 Programmering i Java

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Övningsuppgifter. TDIU04 Programmering i C++, standardbibliotek. Innehåll. Vt Lektion Lektion Lektion Lektion 4...

TDP Regler

Uppgift 1 ( Betyg 3 uppgift )

Tentaupplägg denna gång

Föreläsning 6: Introduktion av listor

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

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Tentamen i Programmering

TDP Regler

Tentaupplägg denna gång

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

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

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

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

UPPGIFT 1 EURO. Utdata: Två rader, som för indata ovan, ser ut som följer: Före resan: bank 1 Efter resan: bank 3

Värmedistribution i plåt

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

Tentamen i Introduktion till programmering

EXTRA UPPGIFTER I C++ PROGRAMMERING-A

Grundläggande in- och utmatning

UPPGIFT 1 TVETYDIGA DATUM

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

kl Tentaupplägg

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

TDIU01 / 725G

Föreläsning 4: Poster

Transkript:

2013-03-12.kl.14-19 Uppgift 1 (Sorterade heltal som är OK) Ibland råkar man ut för att man måste se till att man inte får dubletter i sina inmatningar. Denna uppgift baserar sig på detta, men dessutom att inmatningen skall ske på så sätt att alla tal man matar in måste komma i storleksordning. Ditt program skall läsa in maximalt 15 unika heltal (avsluta med en nolla). Rimlighetskontroll att det är tal mellan 1 och 100 (inklusive gränserna) samt undantagshantering för felaktiga data (som t.ex. bokstäver) skall göras. Om användaren matar in dubletter skall dessa kastas bort. Det skall dessutom vara så att alla tal som matas in måste vara större än det föregående (utom det första och den avslutande nollan förstås). Skriv ut de tal som accepterats enligt exemplen nedan (det är ok att skriva ut dem direkt efter de godkänts som indata, d.v.s. du behöver inte lagra dem i onödan). När talet noll matats in skall programmet avslutas med texten "Klart!". Körexempel 1: Mata in maximalt 15 tal i stigande ordning (avsluta med 0:a): 3 2 5 7 7 4 9 51 0 OK> 3 OK> 5 OK> 7 OK> 9 OK> 51 Klart! Körexempel 2: Mata in maximalt 15 tal i stigande ordning (avsluta med 0:a): A Xd3 2 5 7 7 4 9 51 OK> 3 OK> 5 OK> 7 OK> 9 OK> 51 B100pers F KALLE OK> 100 101 0 Klart!

2013-03-12.kl.14-19 Uppgift 2 (Absurditetstalet av N) Du skall skriva ett program som låter användaren mata in ett positivt heltal, N, och sen beräknar det så kallade "Absurditetstalet av N", A(N). Formeln för detta tal är per definition rekursiv så du skall i ditt program ha en funktion, som är rekursiv, som räknar ut detta tal. Följande gäller: Absurditetstalet av 1, A(1) = 0 Absurditetstalet av 2, A(2) = 1 Absurditetstalet av 3, A(3) = 1 För att beräkna "Absurditetstalet av N" (givet att N är större än 3) använder man de tre föregående på så sätt att man adderar de två som har nummer (N-2) och (N-3). Därefter multiplicerar man denna summa med det tredje (som har nummer (N-1)). Absurditetstalet av 4, A(4), blir då (0 + 1) * 1 = 1 Absurditetstalet av 5, A(5), blir då (1 + 1) * 1 = 2 De som följer efter dessa är: 4 12 72... Körexempel: Mata in vilket Absurditetstal du söker: 7 Resultat: A(7) = 12 KRAV: Denna serie ökar väldigt fort. Vi testar inte med alltför stora tal. Det är dock så att ditt program skall utföra beräkningarna, rekursivt, när programmet körs. Du får absolut inte räkna ut talen och göra någon form av fullständig uppräkning av de färdiga resultaten.

2013-03-12.kl.14-19 Uppgift 3 (Rotera 90 grader) Du skall skriva ett program som vrider en figur 90 grader motsols. Figuren innehåller endast blanktecken och snedstreck (både / och ). Det är givet att användaren startar programmet och som kommandoradsargument skickar hen storleken på figuren (i antal tecken). Det är givet att figuren alltid är kvadratisk. Körexempel 1 ( > i början av raden markerar bara kommandoraden i Unix): > rotate_90 4 Mata in figuren (OBS! måste vara 4 tecken per rad): / / \ \ Figuren blir efter rotation: Körexempel 2: > rotate_90 8 Mata in figuren (OBS! måste vara 8 tecken per rad): / / / / \ \ \ \ Figuren blir efter rotation: / \ \ /

2013-03-12.kl.14-19 Uppgift 4 (Det tar mycket tid med mail!) När det gäller mailhantering är det mängder med mail som hanteras av oss som kursledare/ examinatorer. För att belysa detta lite kan man se på 5 års mailskörd gällande en av våra kurser (TDDD11). I kursen går det normalt sett ca 220-240 studenter per år. År 2011 hölls kursen för två årskullar då kursen flyttades ned i årskurs. Vi har normalt sett flera kurser och ävan andra uppdrag så det ger endast en liten bild av verkligheten. Vad innebär detta i antal mail kan man då undra? Om man räknar ALLA mail som har med kursen att göra. Allt ifrån schemaläggningssaker, kursmöten, administrativa saker som bollas mellan institutionen och andra delar av universitet och dessutom de mail som kommer från studenter eller skickas från oss i kursen till er är det en hel del. Om vi begränsar oss till de mail som kommer till eller skickas från den som är kursledare/examinator blir det lite mindre. På filerna MAIL.TDDD11."årtal" som finns givna i mappen "given_files" ligger en sammanställning av de mail som hade med kursen TDDD11 att göra under de årtal som ingår i filnamnen. Det är givetvis borttaget information om vem som skickat saker till examinatorn för att inte dessa personer skall känna att de blir utpekade. Din uppgift är att skriva ett program som läser data från den fil som användaren anger (årtalet matas in från tangentbordet) och sen skriver ut hur många mail som skickats av examinatorn ("torjo") gällande just denna kurs (de flesta mail som skickas är dock administrativa, d.v.s. de skickas inte till er studenter som väl är). Dessutom skall ditt program skriva ut hur många av dessa som är svar ("RE:") på andras mail eller vidarebefordrade brev ("FWD:"). Programmet skall också skriva ut hur många mail det var totalt detta år. TIPS: Öppna filerna i Emacs för att se hur formatet ser ut på raderna. Varje rad motsvarar ett mail. Körexempel: Mata in årtal: 2008 Det var totalt 793 mail gällande denna kurs detta år. Examinator "torjo" skickade totalt 335 mail. Av dessa var det 260 svar på andras mail och dessutom 0 vidarebefordrade till någon annan.

2013-03-13.kl.08-13 Uppgift 1 (Supermomstabellen) I laborationen MOMSTABELLEN som ni gjort i labserien (finns med som bilaga) löste ni ett ganska vanligt problem i programmeringshänseende. Inmatning av data, felhantering och sen utskrift av en tabell med resultat. Denna uppgift skall ni nu får göra igen, d.v.s. samma uppgift som i labserien, MEN med en liten modifiering. TIPS: Vi kommer INTE att kontrollera ert program vad det gäller avrundningsfel. Om programmet är logiskt korrekt är det alltså godkänt även om det råkar fattas en rad i utskriften beroende på att det finns avrundningsfel vad det gäller flyttal. Modifieringen av laborationen: Ni skall förutom det som står i laborationen också lägga till undantagshantering vid inmatningarna så att användaren inte kan råka mata in t.ex. bokstäver där det skall vara flyttal. Alla inmatningar skall vara kontrollerade både med avseende på rimliga indata och med avseende på felaktiga data (såsom bokstäver). Vi kallar detta för fullständig felhantering. Extra körexempel (finns två i bilagan med laborationen): Första pris: Sju kronor <<FEL>> Måste vara decimaltal. Första pris: 10.00 Sista pris: 5.35 <<FEL>> Sista pris måste vara större än första pris. Sista pris: 15.00 Steg: ETT <<FEL>> Måste vara decimaltal. Steg: 0.5 Momsprocent: 101.00 <<FEL>> Måste ligga i intervallet 0-100. Momsprocent: 10.00 === Momstabell === Pris utan moms Moms Pris med moms 10.00 1.00 11.00 10.50 1.05 11.55 11.00 1.10 12.10...... 15.00 1.50 16.50

2013-03-13.kl.08-13 Uppgift 2 (Primtalsfaktorisering) Det finns tillfällen då man vill dela upp ett tal i alla dess minsta faktorer. Detta kallas att man primtalsfaktoriserar talet. Din uppgift är att skriva ett program som gör just detta. Huvudprogrammet skall fråga efter ett positivt heltal och sen skall du ha en rekursiv procedur som skriver ut alla de primtalsfaktorer som talet har. Denna procedur skall utföra själva primtalsfaktoriseringen. Man skall försöka dela det tal man har med så små tal som möjligt hela tiden. Det tal man delar med kallas för dividenden. Denna sätts till 2 från början. Det man gör är att man delar talet med dividenden. Om det går jämnt upp skriver man ut dividenden och delar talet med densamma. Man får på det sättet ett nytt tal. Fortsätt med detta tal och samma dividend. Om det inte går jämnt upp ökar man dividenden och fortsätter på samma vis igen med det befintliga talet. När talet som skall divideras är 1 skall man avsluta (specialfall: om talet är 1 redan från början skrivs bara 1 ut (1:an skrivs inte ut om man har högre tal)). Allt detta skall göras inuti proceduren. TIPS: Det är lämpligt att öka dividenden med 2 i de flesta fall så att man slipper försöka dela med alla jämna tal då dessa redan klaras av med dividenden 2. Öka dock med 1 från 2 till 3 första gången detta skall göras. Körexempel 1: Mata in det tal du vill faktorisera: 12 Faktorerna blir: 2 2 3 Körexempel 2: Mata in det tal du vill faktorisera: 68 Faktorerna blir: 2 2 17 Körexempel 3: Mata in det tal du vill faktorisera: 27 Faktorerna blir: 3 3 3 Körexempel 4: Mata in det tal du vill faktorisera: 120 Faktorerna blir: 2 2 2 3 5 Körexempel 5: Mata in det tal du vill faktorisera: 1 Faktorerna blir: 1

2013-03-13.kl.08-13 Uppgift 3 (Flytta delar) Du skall skriva ett program som flyttar runt de fyra kvadranterna i en figur. Figuren innehåller endast blanktecken och snedstreck (både / och \ ). Det är givet att användaren startar programmet och som kommandoradsargument skickar hen storleken på figuren (i antal tecken). Det är givet att figuren alltid är kvadratisk och att det är en jämn storlek. De olika kvadranterna skall flyttas till den kvadrant som ligger diagonalt mot den aktuella. För att exemplifiera detta visar vi detta i figuren till vänster nedan med sifforna 1, 2, 3 och 4 i de olika kvadranterna. 1122 4433.1.2 4..3 1122 => 4433 1..2 =>.43. 3344 2211.34..2.1 3344 2211 3..4.21. OBS! Kvadranterna skall inte roteras eller speglas utan bara flyttas. Se i bilden till höger ovan. Körexempel 1 ( > i början av raden markerar bara kommandoraden i Unix): > move_parts 4 Mata in figuren (OBS! måste vara 4 tecken per rad): / / \ \ Figuren blir efter förflyttningarna: \ \ / / Körexempel 2: > move_parts 8 Mata in figuren (OBS! måste vara 8 tecken per rad): / / / / \ \ \ \ Figuren blir efter förflyttningarna: \ \ \ \ / / / /

2013-03-13.kl.08-13 Uppgift 4 (Spam eller kursmail?) När det gäller mailhantering är det mängder med mail som hanteras av oss som kursledare/ examinatorer. För att belysa detta lite kan man se på 5 års mailskörd gällande en av våra kurser (TDDD11). I kursen går det normalt sett ca 220-240 studenter per år. År 2011 hölls kursen för två årskullar då kursen flyttades ned i årskurs. Vi har normalt sett flera kurser och ävan andra uppdrag så det ger endast en liten bild av verkligheten. Vad innebär detta i antal mail kan man då undra? Om man räknar ALLA mail som har med kursen att göra. Allt ifrån schemaläggningssaker, kursmöten, administrativa saker som bollas mellan institutionen och andra delar av universitet och dessutom de mail som kommer från studenter eller skickas från oss i kursen till er är det en hel del. Om vi begränsar oss till de mail som kommer till eller skickas från den som är kursledare/examinator blir det lite mindre. På filerna MAIL.TDDD11."årtal" som finns givna i mappen "given_files" ligger en sammanställning av de mail som hade med kursen TDDD11 att göra under de årtal som ingår i filnamnen. Det är givetvis borttaget information om vem som skickat saker till examinatorn för att inte dessa personer skall känna att de blir utpekade. Din uppgift är att skriva ett program som läser data från den fil som användaren anger (årtalet matas in från tangentbordet) och sen skriver ut hur många mail som inkommit till examinatorn och inte kommit från en LiU-adress samt de som kommit från en LiU-adress, men inte har kurskod given i rubriken. De mail där det står "<torjo@liu.se>" är brev som skickats från examinatorn så dessa skall alltså inte räknas i denna uppgift. Programmet skall också skriva ut hur många mail det var totalt detta år. TIPS: Öppna filerna i Emacs för att se hur formatet ser ut på raderna. Varje rad motsvarar ett mail. Körexempel: Mata in årtal: 2008 Det var totalt 793 mail gällande denna kurs detta år. Det var 134 mail från icke LiU-adresser. Det var 150 mail från LiU-adresser utan kurskod i rubriken.

2013-03-13.kl.14-19 Uppgift 1 (Minimomstabellen) I laborationen MOMSTABELLEN som ni gjort i labserien (finns med som bilaga) löste ni ett ganska vanligt problem i programmeringshänseende. Inmatning av data, felhantering och sen utskrift av en tabell med resultat. Denna uppgift skall ni nu får göra igen, d.v.s. samma uppgift som i labserien, MEN med en liten modifiering. TIPS: Vi kommer INTE att kontrollera ert program vad det gäller avrundningsfel. Om programmet är logiskt korrekt är det alltså godkänt även om det råkar fattas en rad i utskriften beroende på att det finns avrundningsfel vad det gäller flyttal. Modifieringen av laborationen: Ni skall förutom det som står i laborationen få ett ytterligare krav. Detta är att de rader som sköter själva inmatningen skall i huvudprogrammet ersättas med endast FYRA anrop till en och samma procedur. Ett anrop per inmatning alltså. Därefter skall huvudprogrammet skriva ut själva tabellen. Proceduren skall sköta all hantering av utskrifter av ledtexter (d.v.s. frågorna, som skall vara anpassad efter vilket data som skall matas in), utskrifter av felmeddelanden (endast ett felmeddelande per inmatning är helt ok oavsett vilket fel det är, men det skall vara anpassat så att man känner att det har med inmatningen av just detta data att göra samt inmatningen av datat förstås. För att detta skall fungera behöver proceduren fem parametrar: Ledtexten (sträng) Felmeddelande (sträng) Min- och maxgräns för det data som skall matas in (Flyttal) Datat som skall matas in (Flyttal) Körexempel finns i bilagan med laborationen.

2013-03-13.kl.14-19 Uppgift 2 (Fibonacci- ord ) I denna uppgift ska du hitta Fibonacci-ord. Fibonacci-ord är "ord" som definieras på ett sätt som liknar de vanliga Fibonacci-talen (där man summerar de två föregående talen i talserien för att få fram det nya). Ett Fibonacci-ord skapas genom att man slår samman de två närmaste föregående "orden" (det största först, följt av det näst största). De första Fibonacci-orden är alltid (per definition) "0" och "01". Detta ger de första 6 Fibonacci-orden: Nummer Fibonacci-ord --------------------- 1 "0" 2 "01" 3 "010" ("01" och "0") 4 "01001" ("010" och "01") 5 "01001010" 6 "0100101001001" Ditt program ska fråga användaren efter ett heltal och skriva ut motsvarande Fibonacci-ord. KRAV: Ditt program skall anropa en funktion som skapar och returnerar Fibonacci-ordet. Funktionen skall vara rekursiv. Körexempel: Mata in vilket Fibonacci-ord du söker: 5 Fibonacci-ord nummer 5 är "01001010".

2013-03-13.kl.14-19 Uppgift 3 (Rotera 180 grader) Du skall skriva ett program som vrider en figur 180 grader motsols. Figuren innehåller endast blanktecken och snedstreck (både / och \ ). Det är givet att användaren startar programmet och som kommandoradsargument skickar hen storleken på figuren (i antal tecken). Det är givet att figuren alltid är kvadratisk. Körexempel 1 ( > i början av raden markerar bara kommandoraden i Unix): > rotate_180 4 Mata in figuren (OBS! måste vara 4 tecken per rad): / / \ \ Figuren blir efter rotation: \ \ / / Körexempel 2: > rotate_180 8 Mata in figuren (OBS! måste vara 8 tecken per rad): / / / / \ \ \ \ Figuren blir efter rotation: \ \ \ \ / / / /

2013-03-13.kl.14-19 Uppgift 4 (Vilken kurs gäller det?) När det gäller mailhantering är det mängder med mail som hanteras av oss som kursledare/ examinatorer. För att belysa detta lite kan man se på 5 års mailskörd gällande en av våra kurser (TDDD11). I kursen går det normalt sett ca 220-240 studenter per år. År 2011 hölls kursen för två årskullar då kursen flyttades ned i årskurs. Vi har normalt sett flera kurser och ävan andra uppdrag så det ger endast en liten bild av verkligheten. Vad innebär detta i antal mail kan man då undra? Om man räknar ALLA mail som har med kursen att göra. Allt ifrån schemaläggningssaker, kursmöten, administrativa saker som bollas mellan institutionen och andra delar av universitet och dessutom de mail som kommer från studenter eller skickas från oss i kursen till er är det en hel del. Om vi begränsar oss till de mail som kommer till eller skickas från den dom är kursledare/examinator blir det lite mindre. På filerna MAIL.TDDD11."årtal" som finns givna i mappen "given_files" ligger en sammanställning av de mail som hade med kursen TDDD11 att göra under de årtal som ingår i filnamnen. Det är givetvis borttaget information om vem som skickat saker till examinatorn för att inte dessa personer skall känna att de blir utpekade. Din uppgift är att skriva ett program som läser data från den fil som användaren anger (årtalet matas in från tangentbordet) och sen skriver ut hur många mail som inkommit till examinatorn från studenter på LiU (relevanta mailadresser för denna kurs slutar på "student.liu.se" respektive "island.liu.se"). Dessutom hur många av dessa som inte skrivit kurskoden i rubriken respektive inte skrivit någon rubrik alls (dessa rader innehåller "TOM RUBRIK" som rubrik). Programmet skall också skriva ut hur många mail det var totalt detta år. TIPS: Öppna filerna i Emacs för att se hur formatet ser ut på raderna. Varje rad motsvarar ett mail. Körexempel: Mata in årtal: 2008 Det var totalt 793 mail gällande denna kurs detta år. Det var totalt 210 mail från LiU-studenter år 2008. Av dessa var det 100 utan kurskod i rubriken och av dessa var det 1 med helt tom rubrik.

2013-03-15.kl.14-19 Uppgift 1 (Oläsliga krypterade meddelanden) Ofta vill man kryptera text för att inte andra skall se vad man skrivit. I den givna filen KRYPTERAD_TEXT.TXT finns en krypterad text som kan vara av intresse för dig. Detta är inte en filhanteringsuppgift i egentlig mening utan din uppgift är att skriva två program som utför kryptering respektive dekryptering av indata som kommer via tangentbordet i båda fallen. Utskrifterna skall dessutom skrivas på skärmen i båda programmen. --- Program nummer 1: Dekrypteringsprogrammet som här skall tillverkas skall läsa ett antal rader med text från tangentbordet och sen skriva ut på skärmen det meddelande som dolde sig. Varje rad som matas in motsvarar ett tecken i utskriften. Tecknet som skall skrivas ut beror enbart på hur många blanktecken det finns på den inlästa raden. Om det är 10 blanktecken på raden skall tecknet med ordningsnumret (kallas ibland ASCIIvärdet) 10 skrivas ut (detta råkar vara tecknet NL som motsvarar nyradstecknet i Unix). Om det är 32 blanktecken motsvarar det ett blanktecken (SPACE) och är det 65 blanktecken på raden skall man skriva ut tecknet A. Detta program är lämpligt att starta med. Det finns som sagt en krypterad text i filen KRYPTERAD_TEXT.TXT och du kan använda denna textmängd genom att köra ditt program på följande sätt (antag att ditt program heter from_white_space ): from_white_space < KRYPTERAD_TEXT.TXT --- Program nummer 2: Krypteringsprogrammet skall göra det omvända mot program nummer 1. Du skall alltså läsa in en text (som avslutas med Ctrl-D på vårt system) och omvandla alla tecken till rader som innehåller rätt antal blanktecken. OBS! Vissa tecken kan man inte läsa med en vanlig Get-sats för Character så det enda specialtecken vi kommer att ta hand om (eller som vi har krav på från er) är radslutstecknet (NL). Detta kan inte läsas av Get och du får behandla detta separat. När du har båda programmen klara skall följande kunna fungera (antar att ditt andra program heter to_white_space ): to_white_space from_white_space Inmatningen sker då till programmet to_white_space och sen vidarebefordras all utdata från detta program till programmet from_white_space så att detta tar det som indata. Utskriften från from_white_space skrivs sen på skärmen. --- TIPS: Alla kanske inte har gjort detta med omvanling av tecken till ordningsnummer och vice versa. För säkerhets skull ger jag lite tips här: Omvandling mellan ordningsnummer och tecken sker med Character Val(ordningsnummer) och omvandling åt andra hållet sker med Character Pos(tecken).

2013-03-15.kl.14-19 Uppgift 2 (Balanserade parenteser) Skriv ett program som kontrollerar om en inmatad text innehåller parentespar som är balanserade. De parentespar som kan ingå är ( - ), [ - ] och { - }. Man kan tänka sig att det är enklare att lösa denna uppgift med hjälp av rekursion (till viss del) än med iteration helt och hållet (bara loopar), men din uppgift är att lösa detta iterativt. Ingen rekursion är tillåten. Till din hjälp kan det vara bra att ha ett fält där du lagrar de startparenteser du finner (inget krav, men ett tips). Vi kan anta att det inte finns mer är 1000 nivåer av parenteser i textmassan (man kan tänka sig att det är ett Lisp-program som är indata (där finns det många parenteser (som behöver kontrolleras))). :-) KRAV: Du får inte lagra hela texten i ditt program. Du måste beta av texten tecken för tecken. Tänk på att man inte får läsa "radslutstecknet" med en Get för Character. Om det är så att texten är balanserad (att parenteserna ligger rätt) skall utskriften "ALLT OK" skrivas ut. Om det är något fel (att det saknas parenteser eller att de ligger i fel ordning) skall texten "MINST ETT FEL" skrivas ut. Körexempel 1: Mata in en text (avsluta med tecknet *): Denna text (som innehåller { och } samt [ och ]) är helt ok. Man kan se att man kan ha parenteser på olika rader (som detta exempel (som också har parenteser av samma sort inuti varandra)).* ALLT OK Körexempel 2: Mata in en text (avsluta med tecknet *): Denna gång finns det parenteser som inte är matchade i antal (som denna.* MINST ETT FEL Körexempel 3: Mata in en text (avsluta med tecknet *): Denna gång är det rätt antal parenteser, men de är inte matchade i rätt ordning. Som här ( ABC [ DEF ) GHI ]* MINST ETT FEL

2013-03-15.kl.14-19 Uppgift 3 (Rotera med rekursion) Du skall skriva ett program som vrider en figur 180 grader motsols. Figuren innehåller endast blanktecken och snedstreck (både / och \ ). Det är givet att användaren startar programmet och som kommandoradsargument skickar hen storleken på figuren (i antal tecken). Det är givet att figuren alltid är kvadratisk. När programmet är startat skall användaren mata in figuren. KRAV: Du får inte använda dig av loopar (for, while, loop) i denna uppgift. Använd rekursion istället. TIPS: Om man läser den första figuren baklänges får man den andra figuren. Intressant. Körexempel 1 ( > i början av raden markerar bara kommandoraden i Unix): > rotate_180 4 Mata in figuren (OBS! måste vara 4 tecken per rad): / / \ \ Figuren blir efter rotation: \ \ / / Körexempel 2: > rotate_180 8 Mata in figuren (OBS! måste vara 8 tecken per rad): / / / / \ \ \ \ Figuren blir efter rotation: \ \ \ \ / / / /

2013-03-15.kl.14-19 Uppgift 4 (Kursmail! Eller spam?) När det gäller mailhantering är det mängder med mail som hanteras av oss som kursledare/ examinatorer. För att belysa detta lite kan man se på 5 års mailskörd gällande en av våra kurser (TDDD11). I kursen går det normalt sett ca 220-240 studenter per år. År 2011 hölls kursen för två årskullar då kursen flyttades ned i årskurs. Vi har normalt sett flera kurser och ävan andra uppdrag så det ger endast en liten bild av verkligheten. Vad innebär detta i antal mail kan man då undra? Om man räknar ALLA mail som har med kursen att göra. Allt ifrån schemaläggningssaker, kursmöten, administrativa saker som bollas mellan institutionen och andra delar av universitet och dessutom de mail som kommer från studenter eller skickas från oss i kursen till er är det en hel del. Om vi begränsar oss till de mail som kommer till eller skickas från den som är kursledare/examinator blir det lite mindre. På filerna MAIL.TDDD11."årtal" som finns givna i mappen "given_files" ligger en sammanställning av de mail som hade med kursen TDDD11 att göra under de årtal som ingår i filnamnen. Det är givetvis borttaget information om vem som skickat saker till examinatorn för att inte dessa personer skall känna att de blir utpekade. Din uppgift är att skriva ett program som läser data från den fil som användaren anger (årtalet matas in från tangentbordet) och sen skriver ut antalet mail som skickades av personer till examinatorn, från LiU-adresser respektive från icke LiU-adresser, uppdelat på månader under året. De mail som skickats av "torjo" skall alltså inte räknas. Programmet skall också skriva ut hur många mail det var totalt detta år. TIPS: Öppna filerna i Emacs för att se hur formatet ser ut på raderna. Varje rad motsvarar ett mail. Körexempel: Mata in årtal: 2008 Det var totalt 793 mail gällande denna kurs detta år. Månad Totalt LiU EJ LiU ----------------------------- 01 62 38 24 02 27 17 10 03 119 90 29 04 77 54 23 05 70 57 13 06 30 17 13 07 1 0 1 08 37 24 13 09 14 11 3 10 3 3 0 11 8 6 2 12 10 7 3 ----------------------------- 2008 458 324 134

2013-03-15.kl.14-19 Uppgift 1 (Specialstjärna) Skriv ett program som ritar ut följande specialstjärna (se körexemplen). Det är givet att vi kommer att testa med många olika storlekar (inte bara dem som syns i uppgiften). Skriv därför ditt program så att det klarar av att skala upp även till större stjärnor. Körexempel 1: Mata in storlek: 1 17 \ / -*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*- / \ Körexempel 2: Mata in storlek: 2 1 \ / \ / --*-- / \ / \ Körexempel 4: Mata in storlek: 4 2 \ / \ / \ / \ / ----*--------*---- / \ / \ / \ / \ Körexempel 5: Mata in storlek: 5 4 \ / \ / \ / \ / \ / -----*----------*----------*----------*----- / \ / \ / \ / \ / \