lu.se

Datavetenskap

Lunds Tekniska Högskola

Denna sida på svenska This page in English

Laborationer

Laborationerna är obligatoriska. De äger rum i grupper i läsveckorna 2 - 7 i läsperiod HT2. Man ska samarbeta två och två. 

Anmälan och gruppindelning görs i SAM.

En kort introduktion till kommandorads-miljön i datorsalarna finns på sidan Om kommandoraden. (Notera att  Windows Subsystem for Linux (WSL) introducerades i Windows 10, för äldre Windows-system är  Cygwin ett alternativ.)

Uppgifter

Ett laborationshäfte bestående av ett försättsblad, en blankett där övningsledaren ska notera att du är godkänd, och laborationernsuppgifterna finns här (labs.pdf) och kommer att delas ut under den andra föreläsningen.

 

Schema för laborationsuppgifterna:

Laboration 1, Introduktion till verktygen, grundläggande C++: Läsvecka 2

Laboration 2, Introduktion till standardbiblioteket: Läsvecka 3--4

Laboration 3, Debugging: Läsvecka 5

Laboration 4, Strängar och strömmar; mallar: Läsvecka 6--7

 

Notera att det är två labtillfällen för lab 2 och 4.

Filer till laborationerna

Här kommer kod och material till laborationerna att finnas för nedladdning.

Lab 1

Filerna till labben finns i lab1.tar.gz 

För att kunna göra cmake-uppgiften behöver du installera cmake, med apt-get install cmake (för ubuntu/WSL eller motsvarande för annat system).

Lab2

Koden från labhandledningen finns i lab2.tar.gz 

/usr/share/dict/words finns inte i datorsalarna, ni kan använda denna filen: dict-words.txt

Lab3

Koden för labben finns i lab3.tar.gz  

29/11: Mindre fel och förtydligande:
I UserTable.h fanns det tidigare dels en medlemsfunktion int UserTable::testFindNbr och dels en fri funktion (som är friend), testFindNbr.

Det är den fria funktionen som ska användas (och det är bara denna som faktiskt har en definition), så deklarationen  av medlemsfunktionen kan tas bort från klassen UserTable.

När det i labbhandledningen står "testFindNumber()", så ska det läsas som "funktionen testFindNumber", och () betyder här bara "funktion", inte nödvändigtvis "funktion utan parametrar". Det är alltså den fria funktionen testFindNumber, som tar en UserTable som argument, som åsyftas. 

Notera att det inte är fel att deklarera en funktion som inte har en definition, så länge man inte försöker att anropa den.

Sanitizers

För att hitta fel relaterade till minneshantering och undefined behaviour har både gcc och clang "sanitizers" som slås på genom att kompilera och länka (observera att man måste både kompilera och länka med samma sanitizer)  med
-fsanitize=<SANITIZER> 
(där <SANITIZER> kan vara bland annat address, leak, eller undefined.) Se https://github.com/google/sanitizers för mer info.

Exempel

Ett litet exempel finns i sanitizers.tar.gz. I filen README.txt finns kortfattade instruktioner.

En liten detalj är att optimeraren ibland kan göra så att programmet faktiskt fungerar som avsett, trots att det har undefined behaviour. Därför kan det vara en god idé att stänga av optimering (med -O0) för att sanitzern ska hitta felet. För att få mer lättlästa meddelanden bör man kompilera med debug-symboler ( -g ).

cmake

Ett exempel på hur man kan bygga med sanitizers i en debug-build men inte i release finns i denna CMakeLists.txt (se kommentarerna i filen).

Lab4

Koden för labben finns i lab4.tar.gz