Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt förbjuden. Böcker och anteckningssidor kan komma att granskas av tentavakt i samband med tentans start samt under tentans gång. Frågor om specifika uppgifter eller om tentan i stort ska ställas via tentasystemet. Systemfrågor kan ställas till assistent i sal. Ingen uppgift rättas efter tentatidens slut. Så länge en uppgift inte har betyget Underkänd kan den kompletteras till godkänt. Ingen kompletteringsmöjlighet ges de sista tio minuterna. Inga elektroniska hjälpmedel får medtas. Mobiltelefon ska vara avstängd och ligga i jacka eller väska. Inga ytterkläder eller väskor får förvaras vid skrivplatsen. All kod som skickas in för rättning ska kompilera och vara väl testad. Kompilerande kod, fullständig kravuppfyllnad och god stil och goda konventioner enligt god programmeringssed är krav för att en uppgift ska bedömmas Godkänd VÄND! Antal uppgifter 5 Antal sidor (exklusive denna) 5 Hjälpmedel En bok om C++ Ett A4-ark med egna anteckningar
Betygssättning Tentan innehåller fem uppgifter. För godkänt betyg krävs minst två avklarade uppgifter. För gränser för högre betyg, se i tabell 1. Tid (timmar) Antal uppgifter Betyg 3 3 5 4 4 5 4 3 4 Tabell 1: Gränser för högre betyg Bonus från labserien Varje avklarad mjuk deadline under kursens gång ökar respektive tidsgräns för högre betyg med fem minuter. Observera att sluttiden för tentamen inte ändras. Observera att bonustiden endast gäller under detta tillfälle. Inloggning Information Logga in på ditt normala konto med session exam system Följ menyvalen så långt det går tills du ska mata in ett engångslösenord. Tag fram ditt LiU-kort och visa det för tentavakten för att få detta lösenord. Kompilering Det finns ett antal olika alias som kan förenkla vid kompilering: g++11 Kompilering med c++11-standarden w++11 Kompilering med c++11-standard samt varningsflaggor g++11filter g++11 med gccfilter - ett program som snyggar till kompileringsmeddelanden w++11filter w++11 med gccfilter Avslutning Logga ut som vanligt ska du vänta ett tag och sedan trycka på knappen Avsluta tentamen när det är möjligt. När detta är gjort är det omöjligt att logga in igen.
Uppgift 1 I första säsongen av tv-serien The Wire jagar huvudpersonerna ett brottsligt gäng som använder sig av personsökare för att skicka kodade meddelanden till varandra. På grund av den uråldriga tekniken går det endast att skicka numeriska meddelanden. Gänget vill ha sina meddelanden kodade, men medlemmarna är inte de mest välutbildade och behöver därför en enkel kod. Ovan ser du ett numeriskt tangentbord som finns på de flesta telefoner med fysiskt tangentbord. I den kod de valt byts varje siffra i meddelandet ut mot siffran på andra sidan av siffra fem på telefonens tangentbord. Därmed ersätter exemplevis siffrorna ett och nio varandra. Då det är svårt att hitta något på andra sidan sett från noll väljer de att ersätta fem och noll med varandra. Gör ett program som ber användaren mata in ett kodat meddelande (en eller flera siffror) och sedan skriver ut det avkodade meddelandet. Mata in kodat meddelande: 23215 Avkodat meddelande: 87890
Uppgift 2 En lysdiod är en elektronisk komponent som har två egenheter, den släpper endast igenom ström i en riktning och den lyser i en given färg. Det finns lysdioder som har flera delar som kan kombineras för att ge en blandning av färger. Det finns många olika sätt att beskriva färger och en av de vanligaste är RGB-skalan. RGB är en additativ modell som uttrycks med tre tal som representerar styrkan av rött, grönt respektive blått ljus som måste blandas för att få den givna färgen. Dessa tre tal kan presenteras på olika sätt, antingen som ett absolut värde mellan 0 och ett bestämt maxvärde (ofta 255) eller som andel av ett maxvärde uttryckt som ett tal mellan 0 och 1.0. Ett vanligt sätt att uttrycka ett RGB-värde är som ett hexadecimalt tal med sex tecken (två för varje färg). Se tabell 2 för exempel på dessa olika sätt att ange värden. Färg Absolut värde Andel HEX Röd ( 255, 0, 0) ( 1.0, 0, 0) FF0000 Blå ( 0, 0, 255) ( 0, 0, 1.0) 0000FF Vit ( 255, 255, 255) ( 1.0, 1.0, 1.0) FFFFFF Svart ( 0, 0, 0) ( 0, 0, 0) 000000 Orange ( 255, 128, 0) ( 1.0, 0.50, 0) FF8000 Tabell 2: Olika färger i RGB-skalan Antag att du har en lysdiod med tre delar; röd, grön och blå. Varje del kan ges allt mellan 0 och 5 volt för att variera ljusstyrkan på aktuell färg från avslaget till full styrka. Skapa ett program som ber användaren om en färg uttryckt hexadecimalt och skriver ut vilken spänning respektive färg behöver för att lysdioden ska lysa med den inmatade färgen enligt nedanstående körexempel. Spänning ska skrivas ut med två decimaler. Mata in färg: FF0E00 Röd: 5.00V Grön: 0.27V Blå: 0.00V Körexempel 2 Mata in färg: FF8000 Röd: 5.00V Grön: 2.51V Blå: 0.00V
Uppgift 3 Examinator har hittat på en (kanske inte allt för effektiv) krypteringsmetod beskriven enligt nedan: Indata: Ett medddelande M För varje tecken C i M: Steg 1: Skriv ut C Steg 2: Slumpa ett tal I i intervallet [0, 94] Steg 3: Skriv ut talet I som ett tecken Steg 4: Skriv ut I stycken slumpmässiga tecken Varje gång ett tal ska omvandlas till ett tecken adderas 32 till talet och tecknet på denna position i teckentabellen tas ut. Detta för att få ett skrivbart tecken (tecknen på position 0 till 31 är så kallade styrtecken). I katalogen given_files/messages finns flera filer med meddelanden krypterade enligt ovanstående metod. Din uppgift är att skapa ett program som tar ett filnamn på kommandoraden och skriver ut det ursprungliga meddelandet som det var innan det krypterades enligt ovanstående algoritm. Om programmet ges felaktiga argument eller om filen inte går att läsa ska ett felmeddelande skrivas ut och programmet avbrytas. progixx@li-y-z:~$ decrypt given_files/messages/msg1 Ett kort testmeddelande Körexempel 2 progixx@li-y-z:~$ decrypt FEL: Programmet startas enligt "decrypt filnamn"
Uppgift 4 Amerikaner gillar att separera tusental med komman när de skriver ut stora tal. Skriv ett program som låter användaren mata in tal på detta format (ett per rad) tills talet 0.0 (eller varianter såsom 0.00, 00.0 osv) matas in. Därefter ska ditt program skriva ut summan av alla inmatade tal med två decimaler. Formatbeskrivning Du kan anta att alla tal som matas in har följande format: 1. En eller flera siffror 2. Eventuellt upprepningar av följande sekvens (a) Ett kommatecken (b) En eller flera siffror 3. En punkt (decimalpunkt) 4. En eller två siffror Mata in tal: 1,100.10 100,000.01 10.2 0.0 Totalsumma: 101110.31 TIPS: Inläsning till variabler av typen int är inte rekommenderat i denna uppgift. Många svårlösliga problem introduceras om man gör detta.
Uppgift 5 Skapa ett program som skapar en vektor innehållandes 400 slumpade heltal i intervallet [1, 6]. Därefter ska ditt program skriva ut hela vektorns innehåll med 25 tal per rad följt av alla sekvenser av minst fyra konsekutiva tal, dvs minst fyra tal i ökande följd i nummerordning. Exempelvis är 1,2,3 konsekutiva men inte 1,2,4 eller 4,3,2. Varje sekvens ska skrivas ut på en egen rad. Utskriften ska formateras som i nedanstående körexempel (även om talen så klart troligen är andra). (Hittade sekvenser markerade i rött) Slumpade tal: 2 4 1 5 3 2 1 1 4 1 5 2 1 4 5 1 3 6 4 2 5 4 5 3 5 2 2 4 6 2 5 2 4 5 3 2 4 5 3 6 6 5 2 6 4 6 2 4 1 3 4 6 4 5 5 5 5 3 5 3 3 2 3 6 1 2 3 4 5 2 1 2 6 5 2 1 5 1 1 1 5 4 6 3 3 1 4 3 3 2 5 5 1 3 5 4 2 1 4 2 2 5 3 2 5 4 4 4 6 6 5 4 4 5 2 3 2 4 5 4 3 1 4 6 2 1 5 5 2 6 6 6 1 6 1 3 2 2 4 1 4 2 1 4 2 2 3 3 6 6 3 2 4 6 5 2 2 2 4 6 5 6 5 1 1 2 4 2 1 4 3 1 1 6 6 2 4 2 5 3 6 1 5 3 1 6 2 2 2 5 3 6 1 5 6 5 4 5 6 4 4 4 4 3 1 3 6 3 3 4 4 1 6 6 4 3 1 5 5 6 6 6 6 6 5 4 2 3 1 3 3 5 1 5 2 3 4 4 5 2 6 1 6 6 2 1 3 1 5 4 3 5 6 6 2 5 2 2 2 5 6 4 2 5 4 5 6 1 4 6 2 3 3 3 1 1 2 2 3 4 5 3 4 1 3 1 5 5 5 1 6 2 3 3 5 3 6 2 3 4 5 6 5 1 3 5 4 5 1 3 6 4 6 1 3 2 6 3 3 6 6 4 4 4 1 3 4 1 3 1 1 1 6 1 2 1 2 3 3 2 5 6 4 1 6 5 3 4 4 6 3 2 5 5 2 4 1 2 1 6 3 1 6 3 2 5 4 5 2 5 1 5 6 1 5 5 5 6 4 6 2 4 3 2 1 5 4 6 3 3 4 1 5 3 1 6 3 1 6 6 Sekvenser: 1 2 3 4 5 2 3 4 5 2 3 4 5 6 TIPS: I mappen given_files finns det ett program ni kan använda för att kontrollera er lösning som heter test_numbers. Det startas enligt given_files/test_numbers <(a.out) (om ert körbara program heter a.out). Observera att utskriften från ditt program måste vara formaterat enligt körexemplet.