Föreläsning 8: Structar

Storlek: px
Starta visningen från sidan:

Download "Föreläsning 8: Structar"

Transkript

1 Föreläsning 8: Structar Structar är ett sätt att få en variabel att innehålla mer än ett värde, precis som arrayer, men skillnaden, mellan structar och arrayer är att i en array så har alla element samma typ, exempelvis 10 heltal eller 10 tecken (som kansk kan lagra en sträng) eller 10 flyttal etc. En struct kan innehålla flera värden av olika typer, till exempel ett heltal, en teckenarray och ett flyttal. Boken går igenom 3 sätt att hantera structar, men vi ska bara gå igenom ett av dessa sätt, det enklaste sättet som alltid fungerar i alla sammanhang. Vi kommer att gå in i avsnitt 16.2 på en gång, 16.1 kan ni läsa översiktligt Typbegreppet för structar Normala variabler har en typ som vi anger då vi deklarerar dem, int x;, betyder till exempel att vi ska skapar en lagringsplats som vi benämner x och som lagrar ett heltal (int). När det gäller structar vill vi dock lagra olika typer av data i samma lagringsutrymme. För att åstadkomma detta anger vi först hur en struct ska se ut, vi anger en så kallad structure tag, som boken säger. På svenska kanske vi kan kalla det för struct-innehåll. Om vi till exempel vill lagra ett heltal och två strängar i en struct, för att göra en telefonbok till exempel, så skriver vi först ett struct-innehåll, så här: struct personuppgift int id; char namn[20]; char telefonnummer[20]; ; Då har vi beskrivit hur en struct ska se ut, här ett heltal och 2 arrayer. Vi kan nu göra deklarationen struct personuppgift person1, person2; och då får vi två variabler person1 och person2 som har innehållet id, namn och telefonnummer. Dessa delar av en struct kallas structens medlemmar och person1 och person2 är alltså två variabler som innehåller structar med medlemmarna id, namn och telefonnummer. Man kommer åt en medlem genom operatorn., alltså en punkt. Genom att skriva person1.id, person1.namn och person1.telefonnummer så kommer vi åt medlemmarna precis som vanliga variabler. Vi kan alltså göra så här: person1.id = 1; strcpy(person1.namn, Johnny ); strcpy(person1.telefonnummer, ); så har vi lagt in mina kontaktuppgifter i variabeln person1. Den stora fördelen, som inte nog kan betonas, är att variabeln person1 nu samlar alla sammanhörande uppgifter. Vi är nu säkra på att Johnnys telefonnummer verkligen hänger ihop med Johnny. Operationer på structvariabler En till fördel med structar är att vi kan utföra operationer på dem som påverkar varje medlem. Ett mycket intressant exempel är att vi kan göra tilldelning, vi kan skriva person2 = person1; och då kommer alla uppgifter (id=1, namn= Johnny etc.) att kopieras över till person2. Vi behöver faktiskt inte kopiera alla structmedlemmar för sig, vilket kanske är en överaskning särskilt vad gäller strängmedlemmar som vi alltså inte behöver använda strcpy() för att kopiera. johnnyp@kth.se Sidan 1 av 11

2 Vi kan också skicka innehållet i en struct som parametrar till funktioner, vi kan till exempel ha nedanstående funktion och struct: struct part int number; char name[40]; int on_hand; ; void print_part (struct part p) printf( Part number: %d.\n, p.number); printf( Part name: %s.\n, p.name); printf( Quantity on hand: %d.\n, p.on_hand); ; On hand, på engelska betyder hur många som finns inne och detta kan användas för att beskriva ett lager som lagrar saker. Vi ska studera detta exempel i detalj i denna föreläsning. Om vi har en struct lagrad i variabeln part1 (vi har då tidigare gjort deklarationen struct part part1;) och gör följande anrop: part1.id = 528; strcpy(part1.name, Disk drive ); part1.on_hand = 10; så kan vi tolka detta som att vi lagrar en uppgift om att vi har en del som heter Disk drive, alltså diskettstation, den har identitetsnummer 528 och vi har 10 stycken hemma. Om vi nu gör anropet print_part(part1); så kommer det att resultera i utskriften Part number: 528. Part name: Disk drive. Quantity on hand: 10. Alltså en utskrift av de lageruppgifter som vi lagrat i de respektive medlemmarna. Alla medlemmar är förstås individuella för varje enskild struct, har vi två olika structar så kan de alltså lagra olika värden på sina respektive medlemmar. Vid ett funktionsanrop sker en kopiering så att innehållet i struct-variabeln part1 kopieras över i parametern som också är en struct. Denna kopiering tar en del kraft, särskilt om vi anropar en funktion säg flera miljoner gånger i sekunden. Det är därför många gånger mer effektivt att skicka en pekare till en struct om den ska vara parameter till en funktion. Ett alternativt sätt att deklarera funktionen ovan skulle då vara: void print_part (struct part *p) printf( Part number: %d.\n, p->number); printf( Part name: %s.\n, p->name); printf( Quantity on hand: %d.\n, p->on_hand); ; Vi har alltså deklarerat parametern som en pekare istället. Anropet måste nu ändras så att vi har adressoperatorn med, det nya anropet får då formen print_part(&part1); Arrayer och structar tillsammans Det vi vill göra med structar är att kombinera dem med arrayer. Ovan har vi sett exempel på hur vi kan ha en teckenarray som medlem i en struct, medlemmen char namn[20;] i det förra exemplet användes som en sträng och char name[40]; i det tidigare exemplet användes också som en sträng. Intressant är också att vi förstås kan bilda arrayer av structar så att vi kan lagra en hel johnnyp@kth.se Sidan 2 av 11

3 rad av objekt som vi alltså beskriver med en array av structar. En array av structen struct part låter oss då beskriva många parts alltså många delar. Vi har möjligheten att hantera ett helt register (också kallat databas) av delar. Det här är bakgrunden till ett av kursens viktigaste exempel som beskrivs i Mainatining a Parts Database. Tyvärr finns det ett problem med detta exempel och vi ska rätta till det i denna föreläsning och samtidigt illustrera en viktig aspekt av programmering. Exemplet är inte bra för det innehåller globala variabler vi ska undvika detta. Rent övergripande ser exemplet ut så här, boken kallar exemplet för inventory.c: inkluderingsdirektiv makron struct-innehållsdeklaration en inmatningsfunktion (read_line()) i en separat fil global variabel, en array av structar med registeruppgifter global variabel, antal rgisteruppgifter funktionsprototyper för att hantera den globala variabeln main() funktionsdefinitioner De olika funktionerna anropas sedan från main() och utför olika saker på den globala arrayen av delar och den globala variabeln som håller reda på antalet delar. Om vi till exempel ska mata in en ny del så anropas en funktion där användaren uppmanas att mata in de olika uppgifterna som ska definiera delen, dessa uppgifter läggs som medlemmar i en struct som läggs in i den globala arrayen av structar och så ökas den globala variabeln som räknar antalet delar med 1. Det här är kanske enkelt att förstå och det är också enkelt att själv modifiera programmet för att göra det bättre, bara att lägga till nya funktioner. Problemet är att inga av funktionerna har några parametrar, vilket innebär att de är beroende av globala variabler för att fungera, det är inte bra för då uppstår lätt fel i funktionerna. Om man låter en funktion vara beroende av globala variabler så vet vi inte så mycket när vi ser på funktionskoden vad den gör, den arbetar med en variabel, men den variabeln är inte deklarerad som parameter. Om den vore en parameter skulle det bli tydligare hur funktionen arbetar. Det här är någonting som man uppskattar som programmerare och vi ska sträva efter att ni får detta tidigt i kursen. När vi också har en global variabel som innehåller vårt register så är det svårt att arbeta med flera register, alla funktioner behandlar ju just bara den globala variabeln som innehåller registret. Om vi inte hade registret som en global variabel och istället skickade med en pekare till registret så skulle våra funktioner kunna riktas mot att hantera flera olika register samtidigt. Denna flexibilitet tappar vi med globala variabler. Man skulle då kunna tänka sig att vi skriver ett program som bara ska använda en global variabel så att det inte är ett problem, men då inför vi en svaghet. Vårt program kan då inte lätt utvidgas, det skulle vara mycket lättare att utvidga programmet om vi inte hade globala variabler. Då kanske man tänker att det spelar ingen roll eftersom jag aldrig i livet kommer att vilja utvidga detta program ändå. Det är ändå ett problem, för det visar sig faktiskt att man ofta behöver underhålla program, alltså ändra i dem för att göra dem bättre eller bara rätta fel. Det är faktiskt extra svårt att ens rätta ett program som inte är skrivet så att det är lätt att utvidga det, så även om vi inte ska utvidga eller förbättra ett program är det alltid bra att skriva ett program som om vi skulle utvidga och förbättra det i framtiden. Vår strategi är därför att skriva program som inte har några globala variabler och deklarera alla variabler i main() och till varje funktion skicka pekare till variablerna som parametrar till funktionerna som ska behandla registret. Detta är en strategi som vi ska ha hela tiden. johnnyp@kth.se Sidan 3 av 11

4 Vi ändrar i programmet i boken så att det uppfyller de krav vi beskrivit ovan. Eftersom vi inte ännu gått igenom hur vi lägger delar av ett program i separata filer lägger vi också in hela programmet i en fil som heter database.c. Vi använder ett annat namn än inventory.c för att kunna skilja dem åt. Så här ser database.c ut: inkluderingsdirektiv makron struct-innehållsdeklaration funktionsprototyper för att hantera registeruppgifter, skickas i parametrarna funktionsprotoypen för inmatningsfunktion (read_line()) main() med lokala variabler: en array av structar md registeruppgifter och en heltalsvariabel som räknar antal rgisteruppgifter funktionsdefinitioner inklusive den för read_line(). Att vi lägger in read_line() i programmet är inte en viktig förändring, det gör vi bara för att ni lättare ska förstå detta program. Det absolut viktigaste och centrala här är att vi ändrar i hanteringen av de data som programmet använder: i bokens version, inventory.c, är data hanterat via globala variabler. Vi flyttar in deklarationerna av dessa variabler i main() och de blir då lokala. Detta är mycket viktigt, om vi kan undvika att arbeta med globala variabler ska vi göra det. För att vi ska kunna koppla ihop funktionerna med de data som de ska hantera skickar vi alltså dem som parametrar, vidare skickar vi ofta adresser till variablerna. Vi ser på ett par centrala exempel ur database.c, alltså inte bokens version, vi studerar funktionen insert(): /*insert: Prompts the user for information about a new part and the inserts the part into the database. Prints an error message and returns prematurely if the part already exists or if the database is full.*/ void insert(struct part *parts, int *num_parts) int part_number; if(*num_parts == MAX_PARTS) printf("database is full; can't add more parts.\n"); return; printf("enter part number: "); scanf("%d", &part_number); if (find_part(part_number, parts, *num_parts) >= 0) printf("part already exists.\n"); return; parts[*num_parts].number = part_number; printf("enter part name: "); read_line(parts[*num_parts].name, NAME_LEN); printf("enter quantity on hand: "); scanf("%d", &parts[*num_parts].on_hand); (*num_parts)++; johnnyp@kth.se Sidan 4 av 11

5 Parameterlistan är struct part *parts, int *num_parts och det betyder att funktionen tar emot en adress till en variabel av typen struct part samt en adress till ett heltal, int *num_parts. Vi använder första parametern för att skicka en array av structar, minns att arrayer kan skickas i form av adresser och den andra variabeln används för att öka variabeln som håller reda på antalet delar som programmet hanterar. Vi kan se det allra sist i koden, satsen (*num_parts)++; betyder att det som num_parts pekar på ökas med 1 och main(), som anropar funktionen, skickar med adressen till variabeln som håller reda på antalet delar som andra argument. Minns att main() också har en jättearray av structar som alltså (som nämnt ovan) skickas som första parameter. Anropet i main() ser ut så här: insert(parts1,&num_parts1); och sker i respons till att användaren väljer kommandot i, för insert. Vi jämför nu bokens inventory.c med database.c, skillnaderna illustrera många viktiga begrepp ganska väl och detta är ett av kursens centrala moment. Det är definitivt värt att lägga ner mycket tid på detta avsnitt. Vi studerar den första skillnaden: Bokens variant, inventory.c If (num_parts == MAX_PARTS) Vår variant, database.c If (*num_parts == MAX_PARTS) Kodmässigt är skillnaden är bara värdeoperatorn, alltså stjärnan (*). Inte så mycket kan tänkas, men det är en väsentlig skillnad, bokens funktion, insert(), har inga parametrar utan referenser till num_parts är en referens till en global variabel som gäller i hela programmet. I vår variant skriver vi *num_parts och refererar då till det som skickas till funktionen. Vår funktion tar emot en pekare då till antal argument som vi bestämmer i main(), och här skickar vi med adressen till en lokalt deklarerad variabel som heter num_parts1. Detta illustrerar flera saker. För det första har vi en bättre överblick över situationen i vår funktion, allt som den hanterar skickas med parametrarna. Vi har sämre överblick över hur bokens funktion eftersom den refererar till en global variabel num_parts. Detta kan tyckas som petitesser men är faktiskt av mycket stor betydelse då vi får större program. Det här att skicka allt i parametrar gör att funktionen (och dess konsekvenser) blir koncentrerad på en skärmsida, vi behöver inte scrolla upp för att kolla vilken global variabel som betyder vad. Nästa skillnad är av enklare natur, vi refererar till *num_parts igen, i en if-sats, av precis samma skäl som ovan, så vi avstår från att kommentera det. Vi går istället vidare till nästa skillnad som är mer intressant: Bokens variant, inventory.c inventory[num_parts].number=part_number; Vår variant, database.c parts[*num_parts].number = part_number; Återigen verkar skillnaden vara liten, bara en värdeoperator (*) i vår variant och inte en värdeoperator hos boken. Visserligen har vi ett annat variabelnamn, parts, och boken har namnet inventory, men det är ju bara skillnad i variabelnamnen, det är samma typ av sats, eller? En enkel tilldelning... Är det så stor skillnad? Ja, återigen är det en väldigt stor skillnad. I bokens kod har vi en global variabel, inventory, som lagrar alla delar som finns i registret. Vår funktion refererar till parametern parts och det bestäms i main() vart den ska referera. Parameterns deklaration är en pekar till structar och då kan vi skicka adressen till arrayen av structar som är deklarerad i huvudprogrammet. Faktiskt är parameterns namn, parts, valt med viss omsorg. Bokens program kan bara hantera ett register, eftersom varje funktion refererar till fixa globala variabler johnnyp@kth.se Sidan 5 av 11

6 inventory och num_parts men våra funktioner behandlar det de får i sina parametrar och inget annat. Det finns då en möjlighet att main() kan hantera flera olika register med dessa funktioner genom att anropa samma funktioner a. Vi illustrerar det så genom att faktiskt deklarera två uppsättningar variabler som potentiellt kan hantera två uppsättningar register, i main() har vi deklarationerna: struct part parts1[100]; int num_parts1 = 0; /* struct part parts2[100]; int num_parts2 = 0; */ men vi använder inte variablerna parts2 och num_parts2, de är till och med bortkommenterade. De finns bara där för att illustrera en möjlighet som vi har då vi använder parametrar till funktioner istället för globala variabler. Jag tyckte att det då var naturligt att sätta parameternamnet parts istället för inventory eftersom ordet inventory på engelska betyder allt som finns inne. Vårt program kan hantera olika uppsättningar av saker (i och med att funktionerna inte är hårt knutna till fixa globala variabler som i bokens exempel) och då tänkte jag att det är bättre att kalla parametern för parts, det ger en liten vink om att vi hanterar inte alla saker, bara det som skickas i parametern. Det här kan tyckas som subtila och svårbegripliga aspekter i början, men jag rekommenderar er att faktiskt ägna mycket tid åt detta exempel. Det är kärnan i att skriva bra strukturerade program och det är en viktig förmåga som ni absolut måste tillägna er. De övriga skillnaderna i insert() är baserade på precis samma motiveringar som vi gått igenom ovan så vi avstår från upprepande kommentarer kring dem. Vi kan dock jämföra två av funktionerna. Vi studerar funktionsprototyperna för search() och insert(): void insert (struct part *parts, int *num_parts); void search (struct part *parts, int num_parts); Vi ser att vi deklarerar num_part som pekare till heltal i insert() men som vanligt heltal i search(). Varför det? Jo, i insert() vill vi öka antalet på antalet registeruppgifter, vi vill också att insert() själv ska avgöra om antalet registeruppgifter ska ökas eller ej (varför det?), därför måste insert() få hantera den variabel som innehåller antal registeruppgifter, därför måste den ha adressen till den variabeln som parameter, inte bara en kopia av värdet. Om allt gått bra i insert() ser vi också på slutet att värdet ökas genom satsen (*num_parts)++;. Till skillnad från detta ser vi att search() inte har num_parts deklarerad som adress till int, anledningen är då att search() absolut säkert inte ska ändra på värdet på variabeln som innehåller antalet registeruppgifter. Därför skickar vi inte den som adress till heltal, här räcker det med att få en kopia av hur många registeruppgifter som det finns. Nu kommer då frågan, men det finns ingen skillnad i deklarationerna av den första parameter, parts, den är deklarerad som pekare till struct part i båda fallen. Hur stämmer det? Jo, eftersom vi skickar en array i parts-parametern (man kan ju göra så med pekare, arraynamn är ju också pekare) så måste vi pekare i båda fallen, även om vi inte ändrar på innehållet i search(). johnnyp@kth.se Sidan 6 av 11

7 Vi studerar en provköning: HI1024 Programmering, grundkurs, 8.0 hp, KTH STH, hösten 2012 $./database Enter operation code (i/s/u/p/q): i Enter part number: 1 Enter part name: Disk drive Enter quantity on hand: 4 Illegal code. Part number Part Name Quantity on Hand 1 Disk drive 4 Enter operation code (i/s/u/p/q): i Enter part number: 4 Enter part name: Printer cable Enter quantity on hand: 19 Illegal code. Part number Part Name Quantity on Hand 1 Disk drive 4 4 Printer cable 19 Enter operation code (i/s/u/p/q): s Enter part number: 4 Part name: Printer cable. Quantity on hand: 19. Enter operation code (i/s/u/p/q): u Illegal code. Enter operation code (i/s/u/p/q): u Enter part number: 1 Enter change in quantity on hand: 10 Illegal code. Part number Part Name Quantity on Hand 1 Disk drive 14 4 Printer cable 19 Enter operation code (i/s/u/p/q): johnnyp@kth.se Sidan 7 av 11

8 Körningen är inte helt stabil, vi ser meddelandet Illegal code ett par gånger trots att vi visst skriver in giltiga operationskoder. Jag har inte helt genomskådat varför det är så här, mitt råd till er är att vi egentligen inte ska arbeta med konsolprogam på det här sättet på sikt, på sikt ska vi givetvis lära oss att skapa fönsterbaserade användargränssnitt (GUI) så vi behöver inte fördjupa oss för mycket i varför vi hamnar i otakt då och då. Problemet uppstår när vi blandar inmatning av heltal och strängar, detta exempel visar en lösning av det problemet. När vi studerar kapitlet om stora program ska vi se på en annan lösning. Vi ger nedan hela källkoden till programmet database.c, det är självfallet rekommenderat att ni provkör detta program. #include <stdio.h> #define NAME_LEN 25 #define MAX_PARTS 100 struct part int number; char name[name_len+1]; int on_hand; ; int find_part (int number, struct part *parts, int num_parts); void insert (struct part *parts, int *num_parts); void search (struct part *parts, int num_parts); void update (struct part *parts, int num_parts); void print (struct part *parts, int num_parts); int read_line(char str[], int n); /* main: Prompts user to enter operation code, then calls the appropriate function to perform the command. Repeats until user enters 'q', to quit. */ main() char code, buf[2]; struct part parts1[100]; int num_parts1 = 0; /* struct part parts2[100]; int num_parts2 = 0; */ for(;;) printf("enter operation code (i/s/u/p/q): "); scanf("%c", &code); while (getchar()!='\n') /* Skips to end of line*/ ; johnnyp@kth.se Sidan 8 av 11

9 HI1024 Programmering, grundkurs, 8.0 hp, KTH STH, hösten 2012 switch(code) case 'i': insert(parts1,&num_parts1); break; case 's': search(parts1,num_parts1); break; case 'u': update(parts1,num_parts1); break; case 'p': print(parts1,num_parts1); break; case 'q': return 0; default: printf("illegal code.\n"); printf("\n"); /*find_part: Looks up a part number in the inventory array Returns the array index if the part with the part number is found. Returns -1 otherwise.*/ int find_part(int number, struct part *parts, int num_parts) int i; for(i=0;i<num_parts;i++) if(parts[i].number == number) return i; return -1; /*insert: Prompts the user for information about a new part and the inserts the part into the database. Prints an error message and returns prematurely if the part already exists or if the database is full.*/ void insert(struct part *parts, int *num_parts) int part_number; if(*num_parts == MAX_PARTS) printf("database is full; can't add more parts.\n"); return; printf("enter part number: "); scanf("%d", &part_number); if (find_part(part_number, parts, *num_parts) >= 0) printf("part already exists.\n"); return; parts[*num_parts].number = part_number; printf("enter part name: "); read_line(parts[*num_parts].name, NAME_LEN); printf("enter quantity on hand: "); scanf("%d", &parts[*num_parts].on_hand); (*num_parts)++; johnnyp@kth.se Sidan 9 av 11

10 /*search: Prompts the user to enter a part number, then looks up the part in the database. If the part exists, prints the name and quantity on hand; if not, prints an error message.*/ void search(struct part *parts, int num_parts) int i, number; printf("enter part number: "); scanf("%d", &number); i = find_part(number, parts, num_parts); if(i>=0) printf("part name: %s.\n", parts[i].name); printf("quantity on hand: %d.\n", parts[i].on_hand); else printf("part not found.\n"); /*update: Prompts the user to enter a part number. Prints an error message if the part doesn't exist; otherwise, prompts the user to enter change in quantity on hand and updates the database.*/ void update(struct part *parts, int num_parts) int i, number, change; printf("enter part number: "); scanf("%d", &number); i = find_part(number, parts, num_parts); if(i>=0) printf("enter change in quantity on hand: "); scanf("%d", &change); parts[i].on_hand += change; else printf("part not found.\n"); johnnyp@kth.se Sidan 10 av 11

11 /*print: Prints a listing of all parts in the database, showing th part number, part name, and quantity on hand. Parts are printed in the order in which they were entered into the database.*/ void print (struct part *parts, int num_parts) int i; printf("part number Part Name " "Quantity on Hand\n"); for(i=0;i<num_parts;i++) printf("%7d %-25s%11d\n", parts[i].number, parts[i].name, parts[i].on_hand); /*read_line: Skips leading white-space characters, then reads the remainder of the input linee and stores it in str. Truncates the line if the input exceeds n. Returns the number of characters stored.*/ int read_line(char str[], int n) int ch, i = 0; while (isspace(ch=getchar())) ; while (ch!= '\n' && ch!= EOF) if (i < n) str[i++] = ch; ch = getchar(); str[i] = '\0'; return i; johnnyp@kth.se Sidan 11 av 11

Föreläsning 6 pekare och pekare tillsammans med arrayer

Föreläsning 6 pekare och pekare tillsammans med arrayer Föreläsning 6 pekare och pekare tillsammans med arrayer Vi ska nu undersöka vad pekare egentligen är och hur de relaterar till arrayer. Det är ett centralt tema i C-programmering. Vi följer boken och går

Läs mer

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011, KTH STH TENTAMEN HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011, 8.15-12.15 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny

Läs mer

Föreläsning 10. Pekare (Pointers)

Föreläsning 10. Pekare (Pointers) Föreläsning 10 Pekare (Pointers) Dagens kluringar int a=5; int f(int b) a--; b++; return b; int main() int a=3; printf("%d,",f(a)); printf("%d",a); return 0; int f(int a) if(a==1) return a; else return

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

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

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011, Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1 Tisdagen den 7 juni 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 inom C programmering.

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

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

Övning från förra gången: readword

Övning från förra gången: readword (9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver

Läs mer

Hantering av textsträngar och talsträngar. William Sandqvist

Hantering av textsträngar och talsträngar. William Sandqvist Hantering av textsträngar och talsträngar Strängen Hello world! PIC-processorerna lagrar strängkonstanter med bokstäverna inbakade i en följd av instruktioner (en tabell). Man hämtar en bokstav genom att

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

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, 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

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

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011, KTH STH TENTAMEN HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011, 8.15-13.15 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny

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

Programmering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012

Programmering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012 Programmering, grundkurs, 8.0 hp HI1024, TEN1 Fredagen den 2 mars 2012 Tentamen består av två delar, del A och del B. Del A innehåller 4 kryssfrågor på olika teman inom C programmering. Varje fråga är

Läs mer

En kort text om programmering i C.

En kort text om programmering i C. En kort text om programmering i C C skapades 1972 av Brian Ritchie och Dennis Kerighan på Bell Labs i USA Det blev det språk som är mest använt genom tiderna Det finns många olika språk Pascal, FORTH,

Läs mer

Planering Programmering grundkurs HI1024 HT TIDAA

Planering Programmering grundkurs HI1024 HT TIDAA Planering Programmering grundkurs HI1024 HT 2016 - TIDAA Föreläsning V35 Föreläsning 1 Programmering Kurs-PM Programmeringsmiljö Hello World! Variabler printf scanf Föreläsning 2 Operatorer Tilldelning

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Underprogram - Funktioner Eric Elfving Institutionen för datavetenskap 18 september 2014 Översikt 2/22 Återblick till satsblocken Funktioner - Namngivna satsblock

Läs mer

Funktioner och programstruktur. Föreläsning 5

Funktioner och programstruktur. Föreläsning 5 Funktioner och programstruktur Föreläsning 5 Dagens kluring int v[10]=1,2,3,4,5,6,7,8,9,10; int i; for(i=0;i

Läs mer

Planering Programmering grundkurs HI1024 HT 2015 - data

Planering Programmering grundkurs HI1024 HT 2015 - data Planering Programmering grundkurs HI1024 HT 2015 - data Föreläsning V36 Föreläsning 1 Programmering Kurs-PM Programmeringsmiljö Hello World! Variabler printf scanf Föreläsning 2 Operatorer Tilldelning

Läs mer

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för

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

Uppgifter till praktiska tentan, del A. (7 / 27)

Uppgifter till praktiska tentan, del A. (7 / 27) Uppgifter till praktiska tentan, del A. (7 / 27) I. Sortering/Sökning: III II. Representation/Omvandling/format/protokoll: II III. Strukturering: II I alla problem, där bokstäver förekommer, antar vi att

Läs mer

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13.00. Omtentamen i Programmering C, Fri, Kväll, 050108.

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13.00. Omtentamen i Programmering C, Fri, Kväll, 050108. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13.00. Denna tenta kommer att vara färdigrättad Fr 14/1 och kan då hämtas på mitt tjänsterum,

Läs mer

Programmering i C, 7,5 hp

Programmering i C, 7,5 hp Programmering i C, 7,5 hp Föreläsning 4 VÄLKOMNA! 31 switch-satsen Antag att vi har en heltalsvariabel a som skall styra programflödet Antag vidare att a kan anta tex 5 olika värden 1,2,3,4,5 printf( Mata

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

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012 KTH STH TENTAMEN HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny Panrike och

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

Funktioner och programstruktur. Föreläsning 5

Funktioner och programstruktur. Föreläsning 5 Funktioner och programstruktur Föreläsning 5 Dagens kluring int v[10]=1,2,3,4,5,6,7,8,9,10; int i; for(i=0;i

Läs mer

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad. 5(16) Tentamen på kurserna Programmeringsteknik med C och Matlab Programmering i C Tid: 2/11-11, kl. 9-13 Lärare: Jonny Pettersson Totalt: 60 poäng Betyg 3: 30 poäng Betyg 4: 39 poäng Betyg 5: 48 poäng

Läs mer

HI1024 Programmering, grundkurs TEN2 2015-10-30

HI1024 Programmering, grundkurs TEN2 2015-10-30 HI1024 Programmering, grundkurs TEN2 2015-10-30 KTH STH Haninge 8.15-13.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King

Läs mer

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Övningsuppgifter till föreläsning 2 Variabler och uttryck Sid 1 (5) Övningsuppgifter till föreläsning 2 Variabler och uttryck Syfte Syftet med övningsuppgifterna är att träna på: Aritmetik, variabler, tilldelning, scanf och printf Generellt Diskutera gärna uppgifterna

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

Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI)

Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI) Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI) Som sagt så kommer den här kursen endast innehålla en enda föreläsning och det var förra gången. Från och med nu så kommer vi förutsätta

Läs mer

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående

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

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det? Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?

Läs mer

HI1024 Programmering, grundkurs TEN

HI1024 Programmering, grundkurs TEN HI1024 Programmering, grundkurs TEN2 2016-12-22 KTH STH Flemingsberg 8.15-13.00 Tillåtna hjälpmedel: Kursboken C PROGRAMMING A Modern Approach K. N. King helt utan anteckningar Alternativt C från början

Läs mer

Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1. Fredagen den 11 mars 2011,

Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1. Fredagen den 11 mars 2011, Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1 Fredagen den 11 mars 2011, 13.15 17.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika

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

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

Programmering Grundkurs (HI1900) Teoridel

Programmering Grundkurs (HI1900) Teoridel Tentamen Programmering Grundkurs, 11 januari 2010, STH KTH, Håkan Strömberg 1 Programmering Grundkurs (HI1900) Teoridel Skrivtid: 8:15-12:15 Datum: Onsdagen 2010-10-20 Tentamen består av 4 sidor Hjälpmedel:

Läs mer

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010 Föreläsning 6 Kapitel 5 5.1 switch-satsen Vi ser på ett par exempel ur boken: int a; srand(time(0)); a=rand()%6+1; if(a==1) printf("hej Du glade\n"); else if(a==2) printf("god dag\n"); else if(a==3) printf("är

Läs mer

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

C++ - En introduktion

C++ - En introduktion C++ - En introduktion De imperativa grunderna för dig som kan programmera Eric Elfving Institutionen för datavetenskap 1 / 72 Översikt 1 Grunderna 2 Uttryck och satser 3 Funktioner 4 Poster 1 Grunderna

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

struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ };

struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ }; struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ Vad är problemet? Att kunna lagra data som avser flera olika egenskaper

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program

Läs mer

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag HI1024 TEN2 2013-10-28 Betygsgränser: Fx-8, E-9, D-11, C-12, B-14, A-16 (MAX-18) Generella rättningsnormer: Mycket dåliga variabelnamn ger -1p totalt på provet vid andra tillfället Inga eller dåliga kommentarer

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

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 6: Filhantering Henrik Björklund Umeå universitet 13 oktober 2009 Björklund (UmU) Programmeringsteknik 13 oktober 2009 1 / 22 Textfiler Filer är sekvenser

Läs mer

#include <stdio.h> #include <string.h>

#include <stdio.h> #include <string.h> #include #include void fun(char s[]) int i=-1; while(s[++i]!=0) if('a'

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

DD1314 Programmeringsteknik

DD1314 Programmeringsteknik Skolan för Datavetenskap och kommunikation DD1314 Programmeringsteknik Föreläsning 1 o print o variabler o reserverade ord o input o kommentarer o beräkningar o datatyper o if-satser Kursinformation Programmering:

Läs mer

1 Funktioner och procedurell abstraktion

1 Funktioner och procedurell abstraktion 1 Funktioner och procedurell abstraktion Det som gör programkonstruktion hanterlig och övergripbar och överhuvudtaget genomförbar är möjligheten att dela upp program i olika avsnitt, i underprogram. Vår

Läs mer

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1 Skolan för Datavetenskap och kommunikation DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 1 Kursinfo Diagnostiskt prov Python-intro: print variabler reserverade ord input kommentarer beräkningar

Läs mer

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011 1 of 7 Örebro universitet Akademin för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1 Skolan för Datavetenskap och kommunikation DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 1 Kursinfo Python-intro: print variabler reserverade ord input kommentarer beräkningar datatyper if-satser

Läs mer

Föreläsning 5: Introduktion av pekare

Föreläsning 5: Introduktion av pekare Föreläsning 5: Introduktion av pekare Det bör påpekas att det som tas upp i introduktionen inte är reella exempel på kod. Man anväder inte pekare till att peka på enstaka heltal som i exemplen nedan, men

Läs mer

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående

Läs mer

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: Att skapa en klass kvadrat Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: public class Kvadrat { private int sida; Det var väl inte

Läs mer

Om pekare och minneshantering i C, relaterat till operativsystem och särskilt konstruktionen fork() execvp().

Om pekare och minneshantering i C, relaterat till operativsystem och särskilt konstruktionen fork() execvp(). Om pekare och minneshantering i C, relaterat till operativsystem och särskilt konstruktionen fork() execvp(). Detta extra material är tänkt att dels fördjupa och förtydliga pekarbegreppet från C och ge

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

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

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

HI1024 Programmering, grundkurs TEN

HI1024 Programmering, grundkurs TEN HI1024 Programmering, grundkurs TEN2 2016-01-09 KTH STH Haninge 8.15-13.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King

Läs mer

Grundläggande datalogi - Övning 1

Grundläggande datalogi - Övning 1 Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b

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

HI1024 Programmering, grundkurs TEN2 2014-03-13

HI1024 Programmering, grundkurs TEN2 2014-03-13 HI1024 Programmering, grundkurs TEN2 2014-03-13 KTH STH Haninge 13.15-18.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King

Läs mer

Tentamen ges för: Tentamensdatum: Tid:

Tentamen ges för: Tentamensdatum: Tid: Programmering E 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för: Tentamen TE081B El2 Tentamensdatum: 2012-04-13 Tid: 900 1300 Hjälpmedel: Kursbok Kelley, Pohl: A Book on C, Fourth Edition Tillåtet

Läs mer

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen Föreläsning 2 Programmeringsteknik och Matlab DD1312 Introduktion till python Variabler, datatyper, omvandling av typer sfunktioner Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Tentamen i Programmering C, Fri, Kväll, 041211.

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Tentamen i Programmering C, Fri, Kväll, 041211. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Denna tenta kommer att vara färdigrättad Ti 14/12 och kan då hämtas på mitt tjänsterum,

Läs mer

Chapter 4: Writing Classes/ Att skriva egna klasser.

Chapter 4: Writing Classes/ Att skriva egna klasser. Chapter 4: Writing Classes/ Att skriva egna klasser. I dessa uppgifter kommer du att lära dig om hur man definierar egna objekt genom att skriva klasser. Detta är grunden för att förstå objekt orienterad

Läs mer

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

HI1024 Programmering, grundkurs TEN

HI1024 Programmering, grundkurs TEN HI1024 Programmering, grundkurs TEN2 2014-10-27 KTH STH Haninge 13.15-18.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King

Läs mer

Typkonvertering. Java versus C

Typkonvertering. Java versus C Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då

Läs mer

Övningar Dag 2 En första klass

Övningar Dag 2 En första klass Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är

Läs mer

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 1(10) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Denna tenta kommer att vara färdigrättad Må 22/3 och kan då hämtas på mitt

Läs mer

Tentamen i Introduktion till programmering

Tentamen i Introduktion till programmering Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:

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

Imperativ programmering. Föreläsning 2

Imperativ programmering. Föreläsning 2 Imperativ programmering 1DL126 3p Föreläsning 2 Imperativ programmering Kännetecken för imperativa språk: Programmet består av en serie instruktioner. Olika språk har olika uppsättningar av instruktioner.

Läs mer

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for Inför provet Provet skrivs för hand och är uppdelad i två delar. Den första delen är på E-nivå och den andra delen är på C- och A-nivå. För att det ska bli enklare för er att träna inför provet så har

Läs mer

2 Pekare och dynamiska variabler.

2 Pekare och dynamiska variabler. 2 Pekare och dynamiska variabler. När man definierar en variabel reserverar man samtidigt minne för variabelns värde. Detta minnesutrymme kommer man sedan åt med hjälp av variabelns namn. Definierar man

Läs mer

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen C++ Funktioner 1 Teori När programmen blir större och mer komplicerade är det bra att kunna dela upp programmet i olika delar som gör specifika saker, vilket kan göra programmet mer lättläst. Ett sätt

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

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar Dynamiskt minne Agenda Vad är dynamiskt minne Motivering Hur gör man i C Övningar Minne Datorns primärminne används till olika ändamål De flesta system partitionerar minnet efter användningen: Programkoden

Läs mer

6.1 Kompilering och lite grundläggande information

6.1 Kompilering och lite grundläggande information 6 Förhoppningsvis ska de C-konstruktioner som gås igenom här tillsammans med de exempelprogram som ges här och i andra delar av lab-pm vara tillräckliga för att ni ska kunna klara av laborationerna. Syftet

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

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe Fortsä'ning Pekare Ulf Assarsson Originalslides av Viktor Kämpe Pekare och Arrayer/VK 2 Pekare och Arrayer/VK 3 Förra föreläsningen Pekare Bll data Arrayer fix storlek och adress Dynamisk minnesallokering

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

Möte 9: Relationer mellan körande processer - (PI)

Möte 9: Relationer mellan körande processer - (PI) Möte 9: Relationer mellan körande processer - (PI) Målet med att köra flera processer är ofta att få dem att samverka. Vi ska idag studera olika sätt att får processer att samverka. En viktig form av samverkan

Läs mer

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment: Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volafle, #define Arrayer av pekare, arrayer av arrayer Hemuppgi9er: v2. Föregående

Läs mer

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1 Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och

Läs mer

Java, klasser, objekt (Skansholm: Kapitel 2)

Java, klasser, objekt (Skansholm: Kapitel 2) Java, klasser, objekt (Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Objectorienterad programmering Sida 1 Vad är en klass? En klass är ett sätt att beskriva en mängd objekt och deras gemensamma

Läs mer

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

Läs mer

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1, 040607.

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1, 040607. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Denna tenta kommer att vara färdigrättad On 9/6 och kan då hämtas på mitt tjänsterum,

Läs mer