Introduktion till debugging med GDB

Storlek: px
Starta visningen från sidan:

Download "Introduktion till debugging med GDB"

Transkript

1 Jozef Swiatycki Sid 1(11) *:58/ID100V HT07 Innehållsförteckning Inledning...1 Läsa mer om GDB...2 Programexempel...2 Förberedelse för debugging...2 Radnumrering av källkod...3 Grundläggande GDB-kommandon...3 Starta GDB...3 Starta programexekveringen...4 Avsluta GDB...4 Brytpunkter...4 Fortsätta exekveringen...4 Skriva ut variabelvärden...5 Flytta sig inom anropsstacken...5 Skriva ut anropsstacken...6 Skriva ut en länkad lista...6 Radvis exekvering...7 Exekvera resten av en funktion...7 Lokalisering av fel...8 Lokalisering av exekveringsavbrott...8 Lokalisering av oändliga loopar...9 Återstående fel i wrong.c...9 Kommandoradsargument vid debugging...10 Undersökning av void *-utpekade objekt...10 Exempelprogrammen right.c och wrong.c...11 Inledning Debugging (man har föreslagit "avlusning" som svensk term, den har dock inte blivit allmänt accepterad) utgör en del av programtestning, där tester först visar förekomsten av fel (programmets output överensstämmer inte med den förväntade), varefter felen måste lokaliseras och avhjälpas. Det finns olika tekniker för denna lokalisering inklusive analys av källkoden av programmeraren eller en grupp av programmerare och provkörningar av program med olika indata och med inlagda spårutskrifter. Ett mycket viktigt verktyg i samband med provkörningar är s.k. debuggers ("avlusningsverktyg") som är program som tillåter exekvering av det testade programmet under kontroll av debuggern, med möjlighet att observera det testade programmets exekveringsföljd, värden i dess primärminnesceller m.m. Det exekverbara programmet är ju uttryckt i maskininstruktioner och källkodens variabel- och funktionsnamn är ersatta med primärminnesadresser. För att möjliggöra kommunikation med programmeraren med användning av källkodens radnummer och variabel- och funktionsnamn lägger kompilatorer och länkare in omfattande symboltabeller som innehåller information om avbildning av källkodsrader på motsvarande maskininstruktionsföljder och en avbildning av variabel- och funktionsnamn på primärminnesadresserna. Debugging med användning av källkodens symboler och radnummer kallas symbolisk debugging. Här introduceras debuggern GDB som är GNU-debuggern för program kompilerade med kompilatorn GCC.

2 Jozef Swiatycki Sid 2 *:58/ID100V HT07 Läsa mer om GDB Tillsammans med detta häfte delas ut ett tvåsidigt referenskort med samtliga GDBkommandon och mycket kortfattad beskrivning av varje kommando. Kortet finns även för nedladdning och utskrift (Postscript-format) på momentets webbsida (Kursmaterial). På momentets webbsidor (Verktygsmanualer >> GDB) finns en länk till den fullständiga GDB-manualen "Debugging with GDB" i HTML-format. GDB har kommandot help, som ger en lista med olika kommandokategorier. Kommandot help kategori ger en lista av kommandon inom denna kategori med en kort beskrivning av varje kommando. Kommandot help kommando ger en mer fullständig beskrivning av kommandot. Det finns olika användargränssnitt till GDB. Här beskrivs det grundläggande kommandogränssnittet. GDB kan dock även köras inifrån Emacs, se avsnittet "Using GDB under GNU Emacs" i GDB-manualen på webben. Det finns även ett antal grafiska användargränssnitt till GDB under Linux, främst ddd som startas med kommanot ddd programnamn. Kommandot man ddd ger mer information, liksom webbsajten Programexempel Denna introduktionen ges i form av ett par exempel: programmen right.c och wrong.c, som återges sist i häftet. Båda programmen skapar en länkad lista av poster bestående av ett nummer, en sträng och en pekare till nästa post. Strängarna till posterna tas från en array av strängar (för att undvika tidsödande inmatning under demonstrationen av debuggern). Programmet right.c är inte behäftat med (avsiktliga) fel, men har inte utskrift av listan implementerad, det används för att visa grundläggande GDB-kommandon (t.ex. hur man kan undersöka programvariabler och följa exekveringen rad för rad). Programmet wrong.c är behäftat med några fel som är markerade i källkoden, det används för att demonstrera olika felsökningssituationer. Dessutom används programmet echoln.c för att vissa hur kommandoradsargument anges under debugging (detta program är inte intressant nog för att återges i häftet). Dessa program finns på kursens webbsidor, de kan med fördel kopieras till egen katalog och användas tillsammans med detta häfte för övning i fall man missar presentationen. Förberedelse för debugging För att kompilatorn och länkaren skall inkludera symboltabellen (och alltså möjliggöra symbolisk debugging) måste man både vid kompilering och länkning ge flaggan -g: gcc -c -g right.c gcc -g right.o -o right eller i ett steg: gcc -g right.c -o right Obs att det kompilerings- och länkningskommando som på vårt Linux-system genereras av programmet make (och utan att man själv anger hur make skall generera kommandon, vilket

3 Jozef Swiatycki Sid 3 *:58/ID100V HT07 kommer att visas på Verktygspresentation 2) inte innehåller denna flagga. Tillsvidare kan man alltså inte använda det bekväma make-kommandot om man vill kunna debugga sina program. Om man glömt att kompilera eller länka sitt program med flaggan -g kan man fortfarande debugga sitt program, men man måste göra det på maskinkodsnivå. Detta rekommenderas inte, men GDB kommer att starta utan att kunna "köra programmet radvis" eller förstå variabel- eller funktionsnamn. Man ser dock att symbolisk info inte är inläst genom att GDB meddelar att "...(no debugging symbols found)...", man bör då lämna GDB, kompilera och länka om programmet med -g-flaggan och starta GDB igen. Radnumrering av källkod GDB identifierar källkodsrader med radnummer. Det kan alltså vara bra att lätt kunna lokalisera källkodsrader med hjälp av deras radnummer. GDB har ett kommando för utskrift av radnumrerade portioner av källkoden på skärmen. Kommandot heter list (kan förkortas till l), som default skriver det ut 10 rader, nästa kommando list skriver då 10 rader till. Man kan ge kommandot ett radnummer, t.ex. list 53 varvid kommandot skriver ut 10 rader omgivande denna rad, eller ett radnummerintervall, t.ex. list 53, 59 varvid GDB skriver ut rader from 53 tom 59. I Emacs kan man se radnummer där markören befinner sig vid bokstaven L på mode-raden. Man kan även ge Emacs-kommandot M-x goto-line RETURN radnummer (tryck på ALT och x samtidigt, skriv in kommandot goto-line, tryck på RETURN, mata in radnumret och tryck på RETURN), varvid markören hoppar till denna rad (detta kommando kan även fås genom menyvalet Edit >> Go To >> Goto Line... ). Slutligen kan man vid utskrift av textfil med kommandot lpp begära radnumrering med flaggan -N: lpp -N right.c Grundläggande GDB-kommandon Starta GDB GDB startas med kommandot gdb programnamn där programnamn är namnet på den exekverbara filen. Källkoden borde dock finnas på samma katalog för att GDB skall kunna visa källkodsrader under debugging. GDB svarar så här: GNU gdb cvs Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-linux"... Texten på sista raden är GDBs prompt som innebär att GDB väntar på kommandon.

4 Jozef Swiatycki Sid 4 *:58/ID100V HT07 Starta programexekveringen Programexekvering startas med kommandot run (kan förkortas till r), men om man ger detta kommando direkt så exekveras programmet från början till slut som vanligt (det finns ibland anledning att göra så, se avsnittet om lokalisering av exekveringsfel resp. oändliga loopar). Vill man observera programexekveringen bör man ange att exekveringen skall stoppas någonstans i programmet genom att sätta in s.k. brytpunkter. Avsluta GDB Innan vi tittar på brytpunkter kan vi nämna hur man lämnar GDB: kommandot heter quit (kan förkortas till q). Brytpunkter En brytpunkt sätts i en viss funktion eller på en viss källkodsrad och innebär att exekveringen av programmet kommer att avbrytas just när funktionen blivit anropad (men innan dess första sats har blivit exekverad) eller just innan exekveringen av den angivna källkodsraden, sedan kan man ge nya GDB-kommandon och fortsätta exekveringen. Sätta brytpunkt i en viss funktion: kommandot heter break funktionsnamn (kan förkortas till b funktionsnamn), t.ex. b dohitta Efter detta kommando ger GDB utskriften Breakpoint 1 at 0x804880e: file right.c, line 53. GDB numrerar brytpunkter, denna brytpunkt har nummer 1 (vissa kommandon kräver brytpunktsnummer, men vi kommer inte att titta på dessa kommandon i denna introduktion). Därefter följer den hexadecimala adressen till instruktionen där exekveringen kommer att avbrytas, även den informationen vi kan ignorera. Sedan följer filnamnet och radnummer i källkoden till den sats inför vilken exekveringen kommer att avbrytas. Om man nu ger kommandot run så kommer exekveringen att starta och sedan avbrytas när funktionen dohitta har anropats, med utskriften: Breakpoint 1, dohitta (first=0x8049ca0) at right.c:53 53 printf("vem: "); GDB visar att exekveringen avbröts vid brytpunkt 1, i funktionen dohitta, inom parentes anges värden som funktionens argument hade vid detta anrop (i detta fall är det en pekare, så dess värde är en hexadecimal primärminnesadress, som inte ger oss så mycket information. Ibland kan det dock vara värt att titta på sådana värden, t.ex. om man vill se om två pekare pekar på samma sak - samma hexadecimala adress betyder att de pekar på samma sak). Därefter visar GDB vilken sats som står i tur att utföras och inväntar nya kommandon. Om man vill ange brytpunkt på en viss källkodsrad istället så är kommandosyntaxen break radnummer, t.ex. b 53 Om funktionen eller källkodraden finns i en annan fil än den aktuella kan funktionsnamnet eller radnumret kvalificeras med källkodsfilens namn: b list.c:dohitta b list.c:53 Fortsätta exekveringen Nu kan man ge nya kommandon (sätta nya brytpunkter, skriva ut variabelvärden o.s.v.) och sedan fortsätta exekveringen. Kommandot för att fortsätta exekveringen efter avbrott heter continue (kan förkortas till c).

5 Jozef Swiatycki Sid 5 *:58/ID100V HT07 Skriva ut variabelvärden Om man vill se vilka värden variabler har vid detta tillfälle kan man ge kommandot print (kan förkortas till p). I funktionen dohitta, där vi nu "står", finns en variabel vem, man kan skriva ut dess värde med p vem varvid GDB svarar något i stil med: $1 = "À\227\0@\200p\023@\0P\001@±a\004@H\236\023@" Variabeln vem är en array av char och den har ännu inte blivit initierad, så dess innehåll är några "skräptecken". GDB numrerar även värden som den visar, därav inledningen med $1. Vi kommer inte att behöva dessa nummer, men väl en notation för "det senast utskrivna värdet" (se avsnittet "Skriva ut en länkad lista"), så det är bra att veta att GDB kommer ihåg de utskrivna värdena. På samma sätt kan globala data skrivas ut, t.ex. om vi vill veta värdet av den globala antal: p antal $2 = 8 För att se värden för existerande variabler i andra funktioner krävs det dock mer (se nästa avsnitt). Flytta sig inom anropsstacken Funktionen dohitta är anropad från main och i main finns en variabel som heter list (denna variabel skickades som argumentet first till funktionen dohitta). Variabler i funktionen main existerar, main har ju inte terminerat utan bara avbrutits i avvaktan på att dohitta skall bli klar. Säg att vi vill se värdet av variabeln list: p list No symbol "list" in current context. GDB "ser" vid varje ögonblick de symboler som är deklarerade enligt C:s regler för deklarationsvidd. I funktionen dohitta syns denna funktions lokala variabler och de globala variablerna, däremot syns inte lokala variabler i andra funktioner, även om dessa funktioner är aktiva och deras variabler existerar och ligger på stacken. Man kan dock flytta GDBs "synvinkel" upp (till tidigare anropad funktion) och ner (till senare anropad funktion, detta kan givetvis endast göras om man har flyttat synvinkeln upp innan). Kommandot för att flytta synvinkeln upp heter up, för att flytta synvinkeln ner down. Så för att se variabeln list från funktionen main kan man göra up #1 0x e in main () at right.c:76 76 case 'H': dohitta(list); break; p list $4 = (Post *) 0x8049ca0 Detta visar nu värdet på pekarvariabeln list och även att denna adress betraktas som pekare till Post. Obs att man nu kan se att list:s värde är lika med argumentet first:s värde (som visades när funktionen avbröts vid brytpunkten). Obs att detta inte ändrar exekveringsordningen, programmet är fortfarande avbrutet i funktionen dohitta, vi har bara ändrat vilka symboler GDB ser just nu.

6 Jozef Swiatycki Sid 6 *:58/ID100V HT07 Skriva ut anropsstacken Man kan se anropsstacken med kommandot backtrace (kan förkortas till bt): bt #0 dohitta (first=0x8049ca0) at right.c:53 #1 0x e in main () at right.c:76 Stacken visas "upp och ner", utskriften visar att först anropades main och från main på rad 76 anropades dohitta (med argumentvärdet inom parentes), denna funktion är avbruten på rad 53. Vi kommer att behöva detta kommando senare (se avsnittet "Lokalisera exekveringsavbrott"). Skriva ut en länkad lista Säg att vi vill titta på den länkade listan. Om vi har flyttat GDBs synvinkel upp på stacken till main kan vi flytta den tillbaka till dohitta och be om utskrift av argumentet first: down #0 dohitta (first=0x8049ca0) at right.c:53 53 printf("vem: "); p first $5 = (Post *) 0x8049ca0 Detta säger oss inte så mycket, men print-kommandot accepterar alla syntaktiska åtkomstkonstruktioner som finns i C, så för att avreferera pekaren skriver man * framför: p *first $6 = {nr = 0, data = 0x8049cb0 "STEFAN", next = 0x8049cc0} Detta säger oss mer, strukten som pekas ut av first har alltså dessa värden. Obs att char * - värden skrivs ut med både adressen och den utpekade strängen! Vill vi titta på nästa post i listan kan vi skriva: p *first->next $7 = {nr = 1, data = 0x8049cd0 "HUGO", next = 0x8049ce0} Detta blir dock senare omständigt: för att skriva tredje posten för man skriva p *first->next->next o.s.v. Det är här som historiken över utskrivna värden kommer till hjälp. Det senast utskrivna värdet kan refereras med symbolen $ (dollar). Vid utskrift av listan vill vi hela tiden skriva ut det senast utskrivna värdet utökat med ->next, så vi kan skriva printkommandot så här: p *$->next och om vi upprepar detta kommando så blir ju det senast utskrivna värdet nästa post och upprepning av samma kommando kommer att ge oss nästa post o.s.v. Eftersom GDB upprepar det senast givna kommandot när man bara trycker på RETURN så kan man skriva ut hela listan (en post i taget) med kommandona: p *first $8 = {nr = 0, data = 0x8049cb0 "STEFAN", next = 0x8049cc0} p *$->next $9 = {nr = 1, data = 0x8049cd0 "HUGO", next = 0x8049ce0} och därefter räcker det med att bara trycka på RETURN så får man utskrift av nästa post.

7 Jozef Swiatycki Sid 7 *:58/ID100V HT07 Radvis exekvering I många situationer kan det vara till hjälp att följa programexekveringen en källkodsrad i taget. Det finns två kommandon för att exekvera nästa källkodsrad (eller snarare motsvarande maskininstruktioner) och sedan avbryta exekveringen och vänta på kommandon: next (kan förkortas till n) och step (kan förkortas till s). Att det finns två sådana kommandon beror på att nästa källkodsrad kan innehålla ett funktionsanrop och att man i så fall kan vilja att hela funktionen utförs innan man avbryter exekveringen eller att den stegvisa exekveringen går in i funktionen och stannar där. Kommandot next utför i en sådan situation funktionen utan avbrott medan kommandot step stegar in i funktionen. Säg att vi vill följa exekveringen av programmet right.c radvis. Vi startar GDB med gdb right Kommandona next och step kan endast användas i ett program vars exekvering har startats. Vi kan å andra sidan inte bara ge kommandot run för då kommer hela programmet att utföras utan avbrott. Så en mycket vanlig start av en debugging är att man ger följande två kommandon: b main Breakpoint 1 at 0x80488ae: file right.c, line 63. run Starting program: /amd/blt/home1/mars/dsv/jozef/c/debug/right Breakpoint 1, main () at right.c:63 63 Post *list=makelist(); Man sätter alltså en första brytpunkt i main (där exekveringen ju börjar) och därefter startar exekveringen av programmet. Nu kan man ge kommandot next om man vill utföra hela makelist-anropet och stanna innan nästa rad i main eller kommandot step om man vill gå in i makelist och stanna innan dess första sats. Obs att upprepning av senaste kommandot vid tryckning på RETURN gör att man efter ett första next eller step bara behöver trycka på RETURN så länge man vill fortsätta till nästa rad. Exekvera resten av en funktion Säg att vi går in i funktionen makelist: step makelist () at right.c:29 29 Post *first=null, *last, *ny; och då inser att det var onödigt och vi vill inte behöva stega oss igenom hela funktionen, däremot vill vi stanna innan nästa sats i main. Ett sätt att göra det på vore att sätta en brytpunkt på nästa sats i main och ge kommandot continue, men ett bättre sätt är att ge kommandot finish (kan förkortas till fini), som exekverar funktionen tills den terminerar och stannar efter anropet. Funktionens returvärde skrivs ut på skärmen: fini Run till exit from #0 makelist () at right.c:29 0x080488b3 in main () at right.c:63 63 Post *list=makelist(); Value returned is $1 = (Post *) 0x8049ca0 Detta sätt behövs bl.a. om man vill stega in i en funktion vars argument är ett funktionsanrop, ta t.ex. satsen if (tmp=find(first, strtoupper(vem))) Om vi vill stega in i funktionen find måste kommandot bli step, men detta kommando kommer att stega in i funktionen strtoupper först. Inne i strtoupper ger man sedan kommandot finish, därefter ger man kommandot step igen och hamnar i find.

8 Jozef Swiatycki Sid 8 *:58/ID100V HT07 Lokalisering av fel Lokalisering av exekveringsavbrott Vid försök till exekvering av programmet wrong.c får man bara den korthuggna utskriften Segmentation fault Detta innebär att det någonstans i programmet finns adresseringsfel. Om man låter programmet exekveras under kontroll av GDB får man mer hjälp: gdb wrong GNU gdb cvs Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-linux"... run Starting program: /amd/blt/home1/mars/dsv/jozef/c/debug/wrong Program received signal SIGSEGV, Segmentation fault. 0x080486e6 in makelist () at wrong.c:33 33 ny->nr=i; Detta visar att felet inträffat på rad 33 i programmet, i funktionen makelist. Studerar man källkoden upptäcker man att pekaren ny inte har fått något värde - vi har glömt att allokera utrymme till posten. Man får lämna GDB, rätta programmet (allokera utrymme till posten och låta pekaren ny peka på detta utrymme), kompilera om programmet och försöka igen. Nästa försök slutar lika illa. Vi startar GDB och ger kommandot run, men denna gång är inte utskriften lika hjälpsam: run Starting program: /amd/blt/home1/mars/dsv/jozef/c/debug/wrong Program received signal SIGSEGV, Segmentation fault. 0x in strcpy () from /lib/libc.so.6 Felet inträffar inne i en biblioteksfunktion (strcpy), det beror säkert på att vi skickar fel argumentvärden till strcpy, men hur skall vi veta varifrån i vårt program funktionen anropades? Det är här som kommandot backtrace (bt) för utskrift av anropsstacken är till hjälp: bt #0 0x in strcpy () from /lib/libc.so.6 #1 0x e in makelist () at wrong.c:35 #2 0x f in main () at wrong.c:69 Detta visar att strcpy anropades från makelist på rad 35. Vi tittar i källkoden och upptäcker att vi glömt att allokera utrymme till strängen som skickas till strcpy för kopiering av strängvärdet. Vi får avsluta GDB, ändra i källkoden, kompilera om och försöka igen...

9 Jozef Swiatycki Sid 9 *:58/ID100V HT07 Lokalisering av oändliga loopar Efter senaste ändring fungerar programmet mycket bättre. Men när vi prövar kommandot H till programmet och anger något namn så händer inget mer, programmet "hänger sig" och måste brytas med CTRL-C. Vi misstänker en oändlig loop, men hur hitta var den inträffar? Om man exekverar under GDBs kontroll och bryter med CTRL-C avbryts exekveringen på det ställe där den råkade befinna sig och GDB meddelar var man är och inväntar kommandon: gdb wrong GNU gdb cvs Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-linux"... run Starting program: /amd/blt/home1/mars/dsv/jozef/c/debug/wrong Du kan ge följande kommandon: A - för att skriva ut alla H - för att hitta en viss Q - för att avsluta Kommando> h Vem: stefan (Här "hänger sig" programmet och jag avbryter med CTRL-C) Program received signal SIGINT, Interrupt. 0x in find (first=0x8049c78, str=0xbffffa38 "HUGO\n") at wrong.c:51 51 if (strcmp(tmp->data, str)==0) Tydligen befinner sig programmet på rad 51, i loopen som skall gå igenom listan och jämföra varje posts medlem data med den sökta strängen. Här kan man skriva ut värdet på variabeln tmp (som är den hjälpvariabel som skall flyttas i varje varv i loopen tills hela listan är genomgången eller den sökta posten har hittats) och följa exekveringen några varv i loopen med hjälp av kommandot next. Ganska snart inser man att man loopar i for-satsen utan att tmp förändras... Man misstänker alltså att for-satsen är felaktig, framför allt modifieringsuttrycket. Och studerar men det närmare ser man att vi inte ändrar variabeln tmp (det står bara tmp->next istället för tmp=tmp->next). Återstående fel i wrong.c Det återstår några fel i demoprogrammet wrong.c. För att lokalisera dessa fel måste man följa programexekveringen och undersöka variablers värden, vilket görs med kommandon som redan tagits upp. Arbetsgången lämpar sig inte för en skriftlig beskrivning men demonstreras (om tiden tillåter) på Verktygspresentation 1.

10 Jozef Swiatycki Sid 10 *:58/ID100V HT07 Kommandoradsargument vid debugging Om man vill debugga program som tar kommandoradsargument så kan inte argumenten skrivas när man startar GDB (de kommer att tas som argument till GDB, inte till det testade programmet). Istället skall argumenten skrivas vid run-kommandot till GDB: gdb echoln GNU gdb cvs Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-linux"... run hej hopp din ödla Starting program: jozef/c/debug/echoln hej hopp din ödla /amd/blt/home1/mars/dsv/jozef/c/debug/echoln hej hopp din ödla Program exited normally. Undersökning av void *-utpekade objekt Vi kommer under momentet *:58 att bygga återanvändbara datastrukturer som skall kunna hantera data av godtycklig typ. Sådana datastrukturer konstrueras i C med hjälp av void *- pekare, som kan peka ut vad som helst men inte får avrefereras. Om man debuggar en sådan modul och begär utskrift av det pekaren pekar ut svarar GDB: p *vpek Attempt to dereference a generic pointer. Men vid debugging av programmet är ju modulen med den återanvändbara datastrukturen sammanlänkad med ett tillämpningsprogram och vi vet under debuggingen vilken typ av data pekaren pekar ut (eller snarare vad den borde peka ut). Man kan då med ett "type cast" berätta för GDB hur den skall tolka de utpekade data, säg att vi tror att pekaren pekar ut ett objekt av typen Post: p *(Post *)vp $2 = {nr = 1, data = 0x8049cc8 "HUGO", next = 0x0}

11 Jozef Swiatycki Sid 11 *:58/ID100V HT07 Exempelprogrammen right.c och wrong.c Exempelprogrammen finns på kursens webbsidor under rubriken "Övrigt".

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

Föreläsning 2: Debugging

Föreläsning 2: Debugging 2D1458, Problemlösning och programmering under press Föreläsning 2: Debugging Datum: 2006-09-11 Skribent(er): Marcus Dicander, Alix Warnke Föreläsare: Fredrik Niemelä Föreläsningen handlade om felsökning

Läs mer

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

Tentamen *:58/ID100V Programmering i C Exempel 3

Tentamen *:58/ID100V Programmering i C Exempel 3 DSV Tentamen *:58/ID100V Sid 1(5) Tentamen *:58/ID100V Programmering i C Exempel 3 Denna tentamen består av fyra uppgifter som tillsammans kan de ge maximalt 22 poäng. För godkänt resultat krävs minst

Läs mer

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

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

Programmering i C++ Kompilering från kommandoraden

Programmering i C++ Kompilering från kommandoraden Programmering i C++ Kompilering från kommandoraden Sven Gestegård Robertz Datavetenskap, LTH 9 november 2015 Sammanfattning Ibland vill man, av olika anledningar, inte använda en stor integrerad utvecklingsmiljö

Läs mer

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

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011, Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman

Läs mer

Poster ( structar ) Postdeklarationer

Poster ( structar ) Postdeklarationer Poster ( structar ) Exempel på en postdeklaration: struct person { int id; char namn[20]; int vikt, skonr; p1, p2; Detta definierar två variabler p1 och p2 som poster med termerna id, namn, vikt och skonr.

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

Pekare och arrayer. Indexering och avreferering

Pekare och arrayer. Indexering och avreferering Pekare och arrayer En array är ett sammanhängande minnesområde rymmande ett antal element av en viss typ. Arraynamnet kan ses som adressen till arrayens början, dvs. dess första element. En pekare är en

Läs mer

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare Funktionspekare, inledning: funktionsanropsmekanismen Vid funktionsanrop läggs aktuella argumentvärden och återhoppsadressen på stacken, därefter sker ett hopp till adressen för funktionens första instruktion.

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

prog: prog.c gcc -g -Wall prog.c /usr/local/bib/c/58an/modules/modul.o -o prog

prog: prog.c gcc -g -Wall prog.c /usr/local/bib/c/58an/modules/modul.o -o prog DSV Sid 1(10) *:58/ID100V Jozef Swiatycki Innehållsförteckning Inledning... 1 Raddelning, kommentarer, macros och inkludering... 4 Undertryckning av utskrifter från make... 6 Flera kommandon per mål...

Läs mer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på:

Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på: Bilaga C Eclipse 1 Inledning Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på: www.eclipse.org help.eclipse.org www.eclipse.org/downloads/

Läs mer

Programmeringsteknisk översiktskurs för yrkeshögskoleprogram

Programmeringsteknisk översiktskurs för yrkeshögskoleprogram Programmeringsteknisk översiktskurs för yrkeshögskoleprogram Föreläsning 12 Våren 2005 Innehåll Palindrom Hur man hittar fel i program, debuggning Felhantering, hur man förhindrar program att krascha Ev.

Läs mer

Kompilera och exekvera Javakod

Kompilera och exekvera Javakod Kompilera och exekvera Javakod Förberedelser För att kunna göra dessa övningar måste du ha installerat Java Development Kit, JDK, som bland annat innehåller Java kompilatorn, javac. Hur du installerar

Läs mer

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Programmering I Tobias Wrigstad fredag, 2009 augusti 28 Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,

Läs mer

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016 Emacs Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016 Historia 2/21 Utvecklas konstant, från 70-talet Är en generellt texteditor (INTE ordbehandlare) som fokuserar på texten, inte utseendet

Läs mer

*Pekarvärden *Pekarvariabler & *

*Pekarvärden *Pekarvariabler & * *Pekarvärden *Pekarvariabler & * Motivering Pekare är ett fundamentalt koncept i C (och C++) Multipla returvärden från funktioner. Arrayer hanteras via pekare Dynamiskt minne (kommer i slutet av kursen)

Läs mer

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

Laboration 1. kompilera-ikonen exekvera-ikonen Programmerade system I1 Syfte Laboration 1. Syftet med denna laboration är dels att göra dej bekant med de verktyg som kan vara aktuella i programmeringsarbetet, dels ge en första inblick i att skriva

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga

Läs mer

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas. Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

Föreläsning 2: Avlusning och antilustekniker

Föreläsning 2: Avlusning och antilustekniker 2D1458, Problemlösning och programmering under press Föreläsning 2: Avlusning och antilustekniker Datum: 2007-09-11 Skribent(er): Emil Hesslow, Stefan Pettersson Föreläsare: Per Austrin Föreläsningen handlade

Läs mer

Värmedistribution i plåt

Värmedistribution i plåt Sid 1 (6) Värmedistribution i plåt Introduktion Om vi med konstant temperatur värmer kanterna på en jämntjock plåt så kommer värmen att sprida sig och temperaturen i plåten så småningom stabilisera sig.

Läs mer

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio Ditt första C#-program med Visual Studio Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så

Läs mer

Laboration 1. En första bekantskap med C++ Namn: Godkänd den: Rest:

Laboration 1. En första bekantskap med C++ Namn: Godkänd den: Rest: Högskolan Dalarna Objektorienterad analys & Konstruktion, 10p 1 Laboration 1 En första bekantskap med C++ Namn: Godkänd den: Sign: Rest: Högskolan Dalarna Objektorienterad analys & Konstruktion, 10p 2

Läs mer

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen

Läs mer

Labora&on 2 Funk&oner, if och loop övningar/uppgi:er

Labora&on 2 Funk&oner, if och loop övningar/uppgi:er Labora&on 2 Funk&oner, if och loop övningar/uppgi:er 1M322 Webbteknik 2, 7,5hp Medieteknik 2017 Rune Körnefors rune.kornefors@lnu.se 1. Ladda ner arbetsdokument Till övningarna i denna labora&on finns

Läs mer

Code-Lite tutorial ( /RoJ)

Code-Lite tutorial ( /RoJ) Code-Lite tutorial (2013-03-20/RoJ) Följ dessa anvisningar för att skapa projekt, kompilera/länka och testa dina laborationsuppgifter 3,4. Project Projekt, innehåller bland annat ett antal källtextfiler

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentamen i TDP004 Objektorienterad Programmering Praktisk del Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär

Läs mer

Det finns många flaggor till g++,

Det finns många flaggor till g++, C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.

Läs mer

Planering av ett större program, del 2 - for och listor. Linda Mannila

Planering av ett större program, del 2 - for och listor. Linda Mannila Planering av ett större program, del 2 - for och listor Linda Mannila 9.10.2007 Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Utskrift Indata Felhantering Funktioner och moduler (grunder)

Läs mer

Funktioner forts. F3: Funktioner (kap. 5) Parametrar. findgear.m forts

Funktioner forts. F3: Funktioner (kap. 5) Parametrar. findgear.m forts F3: Funktioner (kap. 5) Funktionsfil, funktionsanrop in- och utparametrar, anropsin- och anropsutparametrar lokala, globala och persistenta variabler lokala funktioner return variabelt antal parameterar,

Läs mer

Eclipse en handledning

Eclipse en handledning LUNDS TEKNISKA HÖGSKOLA EDAA01 Programmeringsteknik fördjupningskurs Institutionen för datavetenskap VT 2015 Eclipse en handledning 1 Inledning Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling

Läs mer

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010 Programsystemkonstruktion med C++: Övning 1 Karl Palmskog palmskog@kth.se september 2010 Programuppbyggnad Klassens uppbyggnad en C++-klass består av en deklaration och en definition deklaration vanligtvis

Läs mer

Frekvenstabell över tärningskast med C#

Frekvenstabell över tärningskast med C# Instruktion Frekvenstabell över tärningskast med C# Introduktionsuppgift Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Innehåll Du ska följa steg för steg -instruktionen i

Läs mer

Introduktion C-programmering

Introduktion C-programmering Introduktion C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. 2 C Standarder

Läs mer

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen

Läs mer

Att använda pekare i. C-kod

Att använda pekare i. C-kod Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare

Läs mer

Deluppgift 9 Installera Pintos

Deluppgift 9 Installera Pintos Linköpings Tekniska Högskola Institutionen för Datavetanskap (IDA), Software and Systems (SaS) (c) Klas Arvidsson 2015-03-24 Deluppgift 9 Installera Pintos Uppgift Målet med denna del är att skapa din

Läs mer

Planering Programmering grundkurs HI1024 HT 2014

Planering Programmering grundkurs HI1024 HT 2014 Planering Programmering grundkurs HI1024 HT 2014 Föreläsning V36 Föreläsning 1 Vad är programmering? Boken! Kurs-PM Vad är ett program? Kompilerande- Interpreterande Programmeringsmiljö Hello World! Att

Läs mer

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

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Repetition C-programmering

Repetition C-programmering Repetition C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. Repetition

Läs mer

1 Logga in 1. 2 Byta lösenord 1. 3 Hemkatalog 1. 4 Unixintroduktion 1 4.1 Viktiga kommandon... 2. 5 Läsa e-mail 3

1 Logga in 1. 2 Byta lösenord 1. 3 Hemkatalog 1. 4 Unixintroduktion 1 4.1 Viktiga kommandon... 2. 5 Läsa e-mail 3 UMEÅ UNIVERSITET 2005-04-08 Institutionen för datavetenskap Modifierat av Helena Lindgren, Daniel Lundmark & David Olsson & Tomas Larsson {johane, helena, lundmark, don, tomasl}@cs.umu.se Introduktionsmaterial

Läs mer

NetBeans 5.5. Avsikt. Projektfönster

NetBeans 5.5. Avsikt. Projektfönster NetBeans 5.5 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION Laborationsansvarig: Anders Arvidsson Utskriftsdatum: 2005-08-31 Laborant(er): 1 Syfte Laborationen ska ge studenten möjlighet att genom assemblerinlägg

Läs mer

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14) Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter.

Läs mer

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

Laboration 1. kompilera-ikonen exekvera-ikonen Syfte Laboration 1. Objektorienterad programmering, Z1 Syftet med denna laboration är dels att göra dej bekant med de verktyg som kan vara aktuella i programmeringsarbetet, dels ge en första inblick i

Läs mer

Laboration: Whitebox- och blackboxtesting

Laboration: Whitebox- och blackboxtesting Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska

Läs mer

Frekvenstabell över tärningskast med C#

Frekvenstabell över tärningskast med C# Guide Frekvenstabell över tärningskast med C# Introduktionsuppgift Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning

Läs mer

Introduktionslaboration

Introduktionslaboration TDDC76 Laborationshandledning 1 TDDC76 Programmering och datastrukturer Introduktionslaboration Denna introduktionslaboration introducerar programmeringsspråket C++, hur du skriver enkla C++-program samt

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

Funktioner. Linda Mannila

Funktioner. Linda Mannila Funktioner Linda Mannila 13.11.2007 Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Samlingsdatatyp Listan Utskrift Indata Felhantering Intro till funktioner och moduler Villkorssatsen

Läs mer

Objektorienterad programmering i Java I

Objektorienterad programmering i Java I Laboration 0 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: ca 2 3 timmar Att läsa: sidan 45 52 Syfte: Att ladda hem och installera utvecklingsmiljön Att skriva ditt första Javaprogram

Läs mer

Funktionens deklaration

Funktionens deklaration Funktioner - 1 Teknik för stora program #include #include......... cout

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet Vad händer när man kör ett program? Program och processer När man kompilerar ett program och sedan länkar ihop det så stoppar länkaren in lite extra kod i programmet. Det är denna kod som i sin tur anropar

Läs mer

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner GPT föreläsning 8 Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner Denna gång Reflektioner kring OU1 Funktioner Reflektioner

Läs mer

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ orienterad programmering Föreläsning 3 Exempel: Telefonboken Fält som funktionsresultat Exempel Definiera static double[] vectorsum(double[] a, double[] b) Betrakta sedan följande kodavsnitt:... double[]

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon

Läs mer

TUTORIAL: SAMLING & KONSOLL

TUTORIAL: SAMLING & KONSOLL TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även

Läs mer

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x Mathematica Första kapitlet kommer att handla om Mathematica det matematiska verktyg, som vi ska lära oss hantera under denna kurs. Indata När du arbetar med Mathematica ger du indata i form av kommandon

Läs mer

IDA kursmaterial Informationsblad make. make

IDA kursmaterial Informationsblad make. make make make är ett verktyg som främst används för att underhålla, uppdatera och återskapa program och filer. Det är dock ett generellt verktyg som kan användas även i många andra sammanhang. En avancerad

Läs mer

Lab5 för prgmedcl04 Grafik

Lab5 för prgmedcl04 Grafik Lab5 för prgmedcl04 Grafik Viktigt läs detta först:den här labblydelsen är ganska lång, detta betyder inte att labben tar lång tid.en hel del av lydelsen är anvisning om hur man går tillväga för att kunna

Läs mer

Introduktion till användning av linux-servern sledge och några övningsuppgifter

Introduktion till användning av linux-servern sledge och några övningsuppgifter Uppsala universitet Institutionen för utbildning, kultur och medier Monica Langerth Zetterman och Richard Walls IT-stöd i undervisningen, HT10 Introduktion till användning av linux-servern sledge och några

Läs mer

Introduktion till programmering SMD180. Föreläsning 3: Funktioner

Introduktion till programmering SMD180. Föreläsning 3: Funktioner Introduktion till programmering Föreläsning 3: Funktioner 1 1 Mer matematik Vi har sett matematiska uttryck med variabler, värden och operatorer, ex: 17+n pi/2 hours*60+minutes Kan man även skriva uttryck

Läs mer

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: Föreläsning 1 OH: Övergripande information Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: * maskinspråk = ettor och nollor, kan bara en maskin förstå. * programmeringsspråk

Läs mer

Introduktion till arv

Introduktion till arv Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering

Läs mer

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram? Programmeringsteknik och Matlab Övning 2 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe Kodningskonventioner Viktor Kämpe Varför kodningskonventioner? Förståelse för Skillnaden mellan lokala/globala variabler. Funktionsargument. Returvärde. Möjliggör Mix av assembler och C. Kodningskonventioner/VK

Läs mer

2 Eclipse en handledning

2 Eclipse en handledning 2 Eclipse en handledning Inledning Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på: http://www.eclipse.org http://help.eclipse.org http://www.eclipse.org/downloads/

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (

Läs mer

F5: Högnivåprogrammering

F5: Högnivåprogrammering F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data via

Läs mer

F5: Högnivåprogrammering

F5: Högnivåprogrammering 1 F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser.

Läs mer

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer Programmering hh.se/db2004 Föreläsning 3: Java. Grundtyper, variabler och arrayer Hej Då, Karel! Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Center for Research on Embedded

Läs mer

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program Datateknik A, Syfte: Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program Att läsa: Lektion 1 Antal uppgifter: 3 Inlämning: Sker via inlämningsuppgifter

Läs mer

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016 Command line argumenter Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 /* Cla. java * Programmet illustrerar

Läs mer

Att skriva till och läsa från terminalfönstret

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter

Läs mer

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)

Läs mer

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner KPP053, HT2016 MATLAB, Föreläsning 1 Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner MATLAB Väletablerat Mycket omfattande program GNU OCTAVE Öppen

Läs mer

Program. Kapitel make Program Interpreterande och kompilerande program

Program. Kapitel make Program Interpreterande och kompilerande program Kapitel 11 Program Detta kapitel är som synes mycket kort och nämner inte allt från föreläsningen. 11.1 Program Ett datorprogram är en samling instruktioner som beskriver något som en dator ska utföra.

Läs mer

Strängar. Strängar (forts.)

Strängar. Strängar (forts.) Strängar En sträng i C är helt enkelt en array av char: char namn[20]; För att få strängar att bete sig som om de vore av dynamisk längd markeras strängens slut med null-tecknet \0 : J o z e f S w i a

Läs mer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Sven-Olof Nyström Uppsala Universitet 13 juni 2005 1 Utvecklingsverktyg för Java Vi rekommenderar Suns utvecklingsverktyg (SDK, tidigare JDK), se

Läs mer

Objektorienterad programmering Föreläsning 2

Objektorienterad programmering Föreläsning 2 Objektorienterad programmering Föreläsning 2 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Inläsning av data via dialogrutor Repetitioner (While-satsen och For-satsen) Nästlade

Läs mer

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32) Programmeringsteknik och Matlab Övning Dagens program Övningsgrupp 2 (Sal Q22/E2) Johannes Hjorth hjorth@nada.kth.se Rum 458 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d2

Läs mer

Handbok KXSLDbg. Keith Isdale Översättare: Stefan Asserhäll

Handbok KXSLDbg. Keith Isdale Översättare: Stefan Asserhäll Keith Isdale Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 1.1 Funktioner.......................................... 5 2 Använda KXSLDbg 6 2.1 Anpassa en KXSLDbg-session...............................

Läs mer

Så här skriver du ditt första program i C++

Så här skriver du ditt första program i C++ Så här skriver du ditt första program i C++ Introduktion till att skapa Solution, Project och källkodsfil i Visual Studio 2013 Författare Anne Norling Kurs: Strukturerad programmering med C++ Kurskod:1DV433

Läs mer

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php Introlektion PHP är ett av de enklare språken att lära sig just pga. dess dynamiska struktur. Det används för att bygga upp båda stora och mindre system. Några vanliga system som använder sig av PHP är

Läs mer

NetBeans 7. Avsikt. Projektfönster

NetBeans 7. Avsikt. Projektfönster NetBeans 7 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

Övningsuppgifter kapitel 8

Övningsuppgifter kapitel 8 Inst. för Systemteknik Introduktion till programmering (SMD 180), 5 p Övningsuppgifter kapitel 8 1. Listor är en viktig datatyp i Python. Hur definierar kursboken lista? Vad kallas de värden som tillsammans

Läs mer

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då Agenda Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer Övningar nu och då 1 Motivering I de flesta problem ingår att hantera multipla data I de

Läs mer

TENTAMEN OOP

TENTAMEN OOP TENTAMEN OOP 2013-08-08 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli

Läs mer