Algoritmer och datastrukturer TF3 Sy
samt
Algoritmer och datastrukturer med objektorienterad programmering,
fristående kurs
Övningar för att komma i gång.
Bekanta dig med Unix och C++
Mer info finns i Datorhandboken. Appendixarna kan vara bra att ha till
hands första gångerna du jobbar med Unix och emacs. Se även Unix'
man-sidor.
Tips: Ett bra program för att läsa man-sidor är TkMan. Det
startas genom att du skriver /usr/hacks/bin/tkman& <RETUR>
i ditt terminalfönster.
Bekanta dig med Unix
Logga in
Skriv (ditt user name)<RETUR>
(ditt password)<RETUR>.
Ändra ditt password!
Du måste ändra ditt password innan du börjar arbeta första
gången. Detta gör du med hjälp av unix-kommandot passwd
Ett password skall:
- vara minst 8 tecken långt.
- innehålla både stora och små bokstäver (gärna även siffror).
- inte bestå av abcabc, aabbcc, abc123, flick-/pojkvännens namn, eller
något vanligt ord! Crackers älskar passwords som metallica eller
marianne.
Några enkla saker att börja med:
- Skapa en xterm i nedre högra hörnet. (Tryck ner musens mittknapp,
och välj xterm. Placera fönstret.)
- Ikonifiera och deikonifiera några fönster. Ändra storlek
på några fönster.
Prova Unix-kommandon
Använd man:
- Vad gör kommandot grep? Vilka flaggor tar det?
- Vad gör kommandot pwd?
- Leta reda på några bra kommandon för att titta på innehållet
i filer (man -k kan kanske vara bra att leta med?)
Pröva att kopiera och ta bort filer. Observera att filer som tagits bort
är borta för alltid och för evigt!
Prova alla kommandon som har egna avdelningar i Datorhandboken, och se till
att du kan använda dem!
Titta dig omkring! Pröva dig fram och var inte rädd för att göra
misstag. Det är ganska svårt att åstadkomma skada, och det ska vara
omöjligt att skada andra, så pröva på bara! Var bara försiktig med
rm så går det nog bra.
Prova WWW
Starta Netsacpe. (Detta görs genom att skriva netscape& i
ditt terminalfönster)
När ditt netscape fönster kommer upp bör du komma till en sida med
vidarepekare (visade som understrykna ord) till diverse ställen. Du
kan följa en sådan pekare genom att klicka på den.
Du kan även öppna en viss sida direkt. Detta görs genom att du trycker
på öppna-knappen på din netscape, och skriver sidans adress i det
lilla fönstret som kommer upp. Du kan t.ex. testa:
- http://www.docs.uu.se/~andersb/AoD_tf96/AoD_tf96.html
- http://www.docs.uu.se/~andersb/AoD_tf96/Komma_igaang.html
- http://www.docs.uu.se/~foy/TF-Dark-VT96.html
- http://www.lysator.liu.se/runeberg/index.sv.html
- http://www.update.uu.se/
Du kan även söka efter sidor i något av de olika sidregister som
finns. Det register som är enklast att hitta når du genom att välja
Internet Search i Directory menyn på din Netscape.
Leta t.ex. upp en bra nattklubb i Paris.
Tips:
Vissa av dokumenten kan vara på ett format som kräver ändringar i dina
init-filer för Netscape, för att kunna läsas.
Skapa en fil (om du inte redan har den) som heter .mailcap i
ditt hembibliotek. I denna fil lägger du sedan följande rad:
application/postscript; ghostview %s;
Första programmeringsförsöket
Kopiera labfilerna
Gör ett eget subdirectory i xterm, med mkdir.
Kopiera filerna i /stud/docs/kurs/aod-tf/
till ditt nya directory, med hjälp av cp.
Gör cd till ditt nya directory, och lista
filerna i det.
(cd <newdir>,
ls)
Ex:
$mkdir mydir
$cd mydir
$cp /stud/docs/kurs/aod-tf/prog1.cc .
$cp /stud/docs/kurs/aod-tf/prog2.cc .
$cp /stud/docs/kurs/aod-tf/prog3.cc .
$cp /stud/docs/kurs/aod-tf/prog4.example .
$ls
prog1.cc
prog2.cc
prog3.cc
prog4.example
$
'$' representerar Unixprompten,
fetstil det som användaren skriver.
Skriva och spara en fil
Gör ditt emacsfönster stort, låt det täcka hela den vänstra halvan av
skärmen. (Dra i övre högra hörnet med vänster musknapp intryckt)
C-x C-f tar fram en fil i emacs.
C-x C-s sparar filen. Om du inte
redan namngivit filen du sparar så kommer emacs att fråga efter ett
namn att spara under. C-x C-w sparar
en fil under nytt namn.
Använd piltangenter för att flytta runt, eller
C-f, C-b,
C-n, C-p.
C-l scrollar skärmen så att det du håller på med hamnar mitt
på skärmen. C-g är ett bra nödstopp. C-l och
C-g är i princip aldrig "farliga".
C-x C-c avslutar emacs.
Tips: Om du skriver M-x line-number-mode i
din emacs, så börjar den att visa vilken rad markören befinner sig
på. Detta kan vara mycket användbart, t.ex. vid debugging.
Kompilera ett program
Kompilera ett program från xterm-fönstret på skärmen
genom att skriva:
g++ -o <prgfil> -ggdb <källkod.cc>
- <prgfil> blir namnet på
din körbara fil. Kan naturligtvis bytas ut mot vad du vill,
exempelvis runnable.
- <källkod.cc> är namnet på den
fil du vill kompilera, exempelvis myprog.cc.
Om du vill kompilera t ex filen myprog.cc, och vill att
resultatet (den exekverbara filen) skall heta runnable, så
skriver du alltså g++ -o runnable -ggdb myprog.cc
-ggdb är till för att producera information som debuggern
använder sig av - utan denna information kan du inte köra programmet i
debuggern.
Prova gärna att kompliera programmet med SUNs C++-kompilator i stället
för med GNU C++. Bland annat felmeddelanden skiljer dessa två
kompilatorer åt.
CC -o prgfil -g källkod.cc
Kör programmet
Skriv namnet på din kompilerade fil, dvs det namn du använt istället
för prgfil när du kompilerade. Om du kallat den körbara filen
test kan du få problem: ett program för hårdvarutest kommer
att köras i stället. Lösningen är helt enkelt att inte kalla sina
program test.
Om du skriver namnet på din körbara fil och får svaret
runnable: Command not found
så kan det finnas flera orsaker.
- Filen finns inte i det directory där du står. Kontrollera med
ls. Om filen syns när du gör ls så pröva detta:
- Pröva att skriva ./runnable
Om detta fungerar, så beror problemet på att din sökväg
inte letar i det directory där du står. Lösningen är
att antingen lägga till "." i din sökväg (ej att rekommendera
- detta öppnar dörren för trojanska hästar) eller att
alltid köra program i dina hemdirectoryn med kommandon av typen
./program
Ändra och debugga i programmet
Kopiera nu /stud/docs/kurs/aod-tf/prog2.cc.
Som du snabbt ser, är det felaktigt. Försök lista ut vad som är fel, och rätta
felen.
Tips: Det är ofta en god hjälp att kompilera ett
program även om det är felaktigt, eftersom kompilatorn ger
felutskrifter och varningar med radhänvisningar.
Rätta felen och spara den rättade filen. Kompilera. Gör om
tills programmet går igenom kompilatorn, och exekverar tillfredställande.
Kör debuggern
Filen /stud/docs/kurs/aod-tf/prog3.cc
innehåller mer subtila fel. Nu kan debuggern komma till nytta.
Kopiera filen, kompilera.
För att felsöka programmet ska du köra den debugger som är avsedd för
vår C++-kompilator. Det lättaste är att använda ddd. ddd
startas genom att du i ditt terminalfönster skriver ddd
<programnamn>&. ( ddd är i själva verket inte en
dedugger, utan ett grafiskt gränssnitt till debuggern gdb. Om
du vill kan du köra gdb direkt i ditt terminalfönster, det
blir dock inte lika lättarbetat som om du kör ddd)
Om du använder ddd kommer du att få upp två stycken fönster. Ett
kommandofönster, där du kan skriva kommandon direkt till gdb, och ett
fönster som visar källkoden till ditt program.
Inne i ddd / gdb ger kommandot help
... just det, hjälp. Titta sedan i den kategori kommandon du är
intresserad av. help running listar till exempel kommandon
med anknytning till hur man kör program i gdb.
Kategorin breakpoints innehåller kommandon för att vid vissa tidpunkter
stoppa exekveringen, exempelvis för att inspektera variabler.
break main skapar exempelvis en breakpoint vid funktionen
main, så att exekveringen avbryts när main nås. breakpoints kan också
sättas på radnummer.
Om du använder ddd är det lättast att skapa breakpoints genom att
placera markören på den rad i koden du vill ha en breakpoint (ställ
markören först på den raden, och tryck på vänster musknapp), och sedan
trycka på knappen Break(), i knappraden i källkodsfönstret.
cont fortsätter exekvering.
step exekverar nästa rad. Om någon funktion anropas på raden så stiger
step ned i den.
next exekverar nästa rad, utan att stiga ner i funktioner.
I kategorin data finns användbara kommandon för att inspektera data,
t. ex. print och display. Print i skriver
ut vad variabeln i har för värde för tillfället, och display
ser till att variabelns värde visas efter varje steg i programmet.
Använd debuggerkommandona för att undersöka variablers värde, och
stega dig fram genom exekveringen. Snart har du hittat felet, och kan
åtgärda det.
Exempel:
- Kompilera prog3.cc
- Starta debuggern (t.ex. med ddd prog3&)
- Sätt en brytpunkt på rad 20. ( Klicka på rad 20 i källkodsfönstret, och
tryck sedan på knappen med texten Break()) Du bör nu
få en markering (en liten stoppskylt) på rad 20.
- Starta programmet. (Tryck på knappen med texten Run.)
- Programmet kommer nu att stanna och vänta på att du matar in ett
heltal. Gå till kommandofönstret och skriv in ett tal, t.ex. 1,
följt av <retur>
- Programmet kör vidare, och stannar vid din brytpunkt. Detta kommer
att markeras med en pilmarkering bredvid stoppskylten på rad 20.
- Säg åt debuggern att visa innehållet i varabeln i, efter
varje steg. (Detta gör du genom att markera i med musen,
och trycka på knappen märkt Display()) Du får då upp ett
fönster med titeln "DDD: Data Window", och i detta
fönster finns en liten ruta som visar vilken variabel man tittar på,
och vad den har för värde just nu.
- Stega programmet några steg, genom att trycka på knappen märkt
Step. Nu kommer pilen, som markerar var i programmet man
befinner sig, att flyttas i programfönstret, och värdet på
i att ändras i datafönstret.
- Testa vidare på egen hand.
Att skapa en loggfil
För att få en loggfil, som visar programexekveringen, ska du köra
programmet i emacs. Gör så här: Ställ markören i emacsen, skriv
M-x shell. Kör programmet som vanligt, och spara körningen
med C-x C-w <loggfil>, vilket sparar hela sessionen i
en fil med namnet loggfil. Filen kan sedan editeras som
vanligt. Kom ihåg att skriva exit i emacs.
Frivilliga uppgifter
- Skriv ut en fil. Välj en som är liten! Skriv aldrig ut binärfiler
och körbara filer!
- Skriv en egen hemsida. Enklast gör du så här:
- Skapa ett underbibliotek public_html i din hemkatalog.
- Kopiera någon hemsida du tycker om, t.ex. genom att
välja "save as" i file-menyn när du tittar på sidan.
(Spara den som index.html i ditt
public_html-bibliotek.) En bra startsida för att
leta efter hemsidor finns på http://www.csd.uu.se/staff/DVL.html
- Ta in sidan i Emacs och ändra den efter behag.
En enkel beskrivning av HTML finns på http://www.eeb.ele.tue.nl/misc/html_guide.html
Eller börja lösa veckouppgiften.
Johan Bengtsson
<Johanb@DoCS.UU.SE>
Last modified: Thu Jan 18 18:21:43 1996