Några tips på vägen kanske kan vara bra. Tentaupplägg denna gång TIPS 1: Läs igenom ALLA uppgifterna och välj den du känner att det är den lättaste först. Det kan gärna ta 10-20 minuter. Försök skriva ner lite saker som kan vara problem i uppgifterna. Om det är något du absolut kommer att fastna på kanske det är fel uppgift. Du tjänar lätt in denna tid på att välja rätt uppgift. TIPS 2: Kolla ibland till kommunikationsfönstret. Det kan ha kommit information till alla utan att ni skickat in en fråga. Kanske gäller det dig också (din uppgift kanske). TIPS 3: Sista timmen är vi normalt sett lite snällare och ger eventuellt lite bättre återkoppling på era fel. Innan dess kan man få högre betyg och därför kräver vi att ni har lite mer koll på vad som skall rättas till. Vi ger dock information om vilket symptom felet uppvisar om vi kompletterar er uppgift under hela tentans gång. Om ni är nära G tidigt på tentan kan detta kanske ge G i slutet. Don t give up before the fat lady sings. som de säger. TIPS 4: Om ni har problem med kompilator, Emacs eller annat som INTE har med uppgifterna att göra. Räck upp handen så kommer en assistent. Detsamma gäller om hur man kopierar givna filer cp given_files/*. eller liknande. Frågor om själva uppgifterna tar vi i första hand via tentasystemet. Vi hinner inte svara på frågor de sista 10 minuterna på tentan. Då ängnar vi all tid åt att rätta uppgifter för att alla skall hinna få svar innan ni går hem. Om det är så att ni skickar in en uppgift precis i slutet av tentan hinner vi förstås inte, men då får ni gärna skicka ett mail för att få reda på hur det gick. Vi rapporterar in resultaten efter det att alla tre passen är avslutade (antagligen dagen efter sista passet). Det tar ett par dagar med pappershantering efter detta så räkna med att det är i LADOK ca en vecka efter sista passet. Kolla med era kompisar om de fått poäng innan innan ni skickar mail till oss. Lycka till med tenterandet och hoppas att alla får G på minst en uppgift idag. M.v.h. /Torbjörn (examinator)
Uppgift 1 (Snittargumentlängd) Din uppgift är att skriva ett program som räknar ut medellängden av de argument som kommer in till programmet som kommandoradsargument. OBS! Ingen inmatning inne i programmet. KRAV: Utskriften skall endast (och alltid) ha en decimal för medellängden. >> argument_lengths 1 22 333 4444 55555 Medellängden av argumenten är 3.0 >> argument_lengths 1 22 333 4444 55555 666666 Medellängden av argumenten är 3.5 >> argument_lengths Medellängden av argumenten är 0.0 Körexempel 4: >> argument_lengths Hoppas att detta blir bra. Medellängden av argumenten är 4.4 Körexempel 5 (inga argument): >> argument_lengths Starta programmet med ett positivt antal argument. Körexempel 6 (om man använder iso-8859-1 (Latin-1) blir detta det man tror ): >> argument_lengths ÅåÄäÖö AaBbCc Medellängden av argumenten är 6.0 Körexempel 7 (om man använder UTF-8 kan vissa tecken ha en annan representation): >> argument_lengths ÅåÄäÖö AaBbCc Medellängden av argumenten är 9.0 OBS! De två sista exemplen är på något sätt ortogonala. Du kan endast få ett av resultaten. Det beror på vilken teckenuppsättning din terminal arbetar i. Det går att ställa om av den som använder datorn. Därav två olika exempel. Alltså: Om ett av exempel 6 och 7 fungerar så kommer inte det andra att fungera. Inget ni kan göra något åt.
Uppgift 2 (Rekursiv kvadrat) Din uppgift är att skriva ett program som ritar ut en kvadrat enligt exemplen nedan. Det finns ingen övre begränsning (mer än heltalsdatatypen Integer eller minnesmängd i datorn) på hur stora kvadrater användaren vill ha. Det behövs ingen felhantering av indata, men ditt program får INTE använda sig av några upprepningssatser (for, while och loop) utan MÅSTE använda rekursion för att lösa alla former av upprepningar. OBS! Ingen ledtext i denna uppgift. Användaren vet att det är ett heltal som skall matas in. 1 +--+ +--+ 2 +----+ +----+ 3 +------+ +------+ Körexempel 8: 8 +----------------+ +----------------+
Uppgift 3 (Samma födelsedag?) Din uppgift är att skriva ett program som gör en simulering för att kontrollera hur stor sannolikhet det är att minst två personer i en grupp fyller år på samma dag på året (vi antar att det är 365 dagar per år, inga skottår alltså). Det är givet att användaren matar in hur många personer som ingår i gruppen. Själva simuleringen går till på så sätt att man kör (i programmet) ett test 10.000 gånger. Själva testet går till så att man slumpar ut vilken födelsedag de olika personerna har på året. Därefter kontrollerar man om det finns minst två som har samma födelsedag. Man räknar samtidigt hur många test som utfaller med att att det är minst två som fyller på samma dag. Till sist delar man antalet med 10.000 (förstås) och får då fram sannolikheten. Om du vill lösa detta i annan ordning är det helt ok, men det är alltså inte någon matematisk formel man skall komma fram till utan det kommer att blir ett närmevärde på hur stor sannolikheten är. Resultatet skulle kunna bli helt galet om man har riktigt otur (då slumpen ibland spelar oss ett spratt), men att ha otur 10.000 gånger låter ju lite tungt. Mata in antalet personer: 2 fyller år på samma dag är ungefär: 0.24% Mata in antalet personer: 5 fyller år på samma dag är ungefär: 2.86% Mata in antalet personer: 23 fyller år på samma dag är ungefär: 50.38% Körexempel 4: Mata in antalet personer: 32 fyller år på samma dag är ungefär: 75.68% OBS! Dessa resultat är de vi fick vid en testkörning per gruppstorlek. Det kan alltså bli lite annorlunda resultat för er, men det rör sig i dessa trakter. Vid 7 ytterligare körningar med indata 5 fick jag följande resultat (2.60%, 2.60%, 2.55%, 2.43%, 2.40%, 2.58%, 2.98%). TIPS 1: Man kan skapa en vektor med 365 data som håller reda på om någon är född på en given dag. Detta gör att man alltid har samma datamängd att arbeta med. TIPS 2: Det är viktigt att man bara gör Reset EN gång per programkörning ( Reset skall alltså inte utföras mer än en gång). Därför måste man skicka generatorn (den som är av typen Generator ) som parameter (troligen som in out ).
Uppgift 4 (Det allseende ögat) Det allseende ögat är en symbol som visar ett öga som omges av solstrålar, ofta innesluten i en triangel. Det allseende ögat brukar ofta tolkas som en symbol för Guds öga som vakar över mänskligheten. I denna uppgift skall du få rita en helt ny version av detta allseende öga som vi i kursledningen har skapat (inte så snyggt som andra varianter, men vi tar inte åt oss någon ära heller). För att ni skall få se hur det ser ut i detalj har vi tänkt oss att ni skall kunna zooma in det i olika steg. Man kan också se det som att det förstoras om man vill det. De tecken vi använder i figurerna nedan (i de olika körexemplen) är: _ - = horisontalix (understrykningsstreck) och bindestreck = vertikalix (lodrätt streck, lodstreck) / \ = snedstreck och bakåtsnedstreck = blanktecken. = punkt och citationstecken Fyra körexempel: Mata in ögats storlek: 3 Mata in ögats storlek: 2 -_ _- _ / /.\ \ _ / /. \ \ _\ \ / / \ \ / /_ - - - - Mata in ögats storlek: 4 Mata in ögats storlek: 1 -_ _- //.\\ -_ _- _\\ //_ -_ _- - - _ / /. \ \ \ \ / /_ - - TIPS: Ledtexten står alltid direkt till vänster i terminalen vid körning. Det lättaste sättet att finna var tecknen står är att jämföra med ledtextens positioner. Tänk också på att ögats mitt ändras lite olika mellan de olika storlekarna.