.c och.h filer. Programmeringsteknik 113

Storlek: px
Starta visningen från sidan:

Download ".c och.h filer. Programmeringsteknik 113"

Transkript

1 .c och.h filer När programmen blir större är det nödvändigt att dela upp det i mindre enheter. Varje enhet definieras oftast som en del i programmet som hanterar en väl avgränsad uppgift. Denna enhet bildar oftast en samling typdeklarationer (typedef), ev. Globala variabler och en samling funktioner. Då andra delar ev. programmet vill kunna använda innehållet samlas alla deklarationer (typdeklarationer och funktionsprototyper) i en s.k. header-fil som slutar på.h. Denna headerfil kan sedan inkluderas på samma sätt som t.ex. stdio.h i andra filer och funktionerna kan användas. Funktionsdefinitionerna däremot återfinns i en.c fil. Varje.c fil kan sedan separatkompileras. Programmeringsteknik 113

2 Assertions Header-filen assert.h innehåller makrot assert(). Det är bra programmeringsvana att använda sig av assert() för att kontrollera att argumenten till en funktion är korrekta. #include <assert.h> double div (double a, double b) { assert(b!= 0); return a/b; int main(void) { div(2, 0); /* assertion will fail */ Programmeringsteknik 114

3 Assertions Om ett argument till assert() är falskt, kommer programmet att skriva ut ett felmeddelande, t.ex. Assertion failed on line 23 och programmet kommer att avslutas. Assertions är enkla att skriva och gör källkoden robustare. Andra läsare av källkoden kan dessutom lättare förstå innehållet. Använd assert()!!! Programmeringsteknik 115

4 Räckvidd (scope) Grundregeln är att identifierare är bara tillgängliga inne i det block där de deklarerades. De finns inte utanför blocket. Detta låter som en enkel regel, men programmerare väljer ofta att använda samma identifierare på olika variabler. Frågan uppstår då vilken objekt identifieraren refererar till... Programmeringsteknik 116

5 { Exempel int a = 2; printf("a = %d\n", a); { int a = 5; printf("a = %d\n", a); printf("a = %d\n", a); Vad skrivs ut? Programmeringsteknik 117

6 Räckvidd int a = 1; int b = 2; int c = 3; void fkn (int b) { int a = 4; return (a + b); int main (void) { int a = 5; fkn(c); Programmeringsteknik 118

7 Exempel { int a = 1, b = 2, c = 3; printf("a = %d b = %d c = %d\n", a, b, c); { int b = 4; float c = 5.0F; printf("a = %d b = %d c = %f\n", a, b, c); a = b; { int c = b; printf("a = %d b = %d c = %d\n", a, b, c); printf("a = %d b = %d c = %f\n", a, b, c); printf("a = %d b = %d c = %d\n", a, b, c); Programmeringsteknik 119

8 { Partiella och nästlade block int a, b; { float a;... /* int b is known but not int a */ { float b;... /* int a is known but not int b */ Huvudsyftet med att använda block är att spara minne. Minne reserveras bara när variabeln behövs. Vid andra tillfällen kan minnet användas till annat. Programmeringsteknik 120

9 Lagringsklasser Varje variabel och funktion i C har två attribut: datatyp och lagringsklass. De fyra lagringsklasserna är auto, extern, register och static. Den vanligaste lagringklassen är auto, men den vi ska beröra är static. Programmeringsteknik 121

10 Lagringsklassen static Statiska deklarationer låter en lokal variabel behålla sitt gamla värde. void f (void) { static int cnt = 0; ++cnt; if (cnt % 0) /* do something */ else /* do something else */ Varannan gång funktionen ovan anropas kommer den att göra en sak och varannan gång något annat. Programmeringsteknik 122

11 Statiska funktioner En funktion kan också deklareras som static och blir därmed privat för den filen. static int g(void) /* funktionsprototyp */ /*g() är tillgänglig här men inte i andra filer*/ void f (int a) {... static void g(void) {... Programmeringsteknik 123

12 Initiering Variabler innehåller normalt skräpvärden om de inte har initialiserats. Däremot så initialiseras statiska variabler till noll om inte programmeraren anger ett värde. Vissa C-kompilerare sätter dock värdet på autovariabler till noll om programmeraren inte anger något annat. Detta kan dock skilja sig åt och som programmerare bör man inte lita på detta utan istället explicit sätta värden. Programmeringsteknik 124

13 Rekursion En funktion är rekursiv om den anropar sig själv, direkt eller indirekt. Alla funktioner kan anropas rekursivt. I sin enklaste form är rekursion enkel att förstå. #include <stdio.h> int main(void) { printf("the universe is never ending\n"); main(); return 0; /* Kommer aldrig att nås */ Programmeringsteknik 125

14 Exempel För att summera de fem första heltalen kan man skriva int sum(int n) { if (n >= 1) return n; else return n + sum(n-1) sum(1) 1 sum(2) 2 + sum(1) eller sum(3) 3 + sum(2) eller sum(4) 4 + sum(3) eller Programmeringsteknik 126

15 fakultet.c Matematiskt så lyder definitionen av fakultet som följer 0!=1, n!=n (n-1) 2 1 n>0 eller ekvivalent 0!=1, n!=n (n-1)! n>0 I C kan detta skrivas rekursivt som int factorial (int n) { assert (n >= 0); return (n <= 1? 1 : n * factorial(n-1) ); Programmeringsteknik 127

16 Iterativ motsvarighet Funktionen kan också skrivas iterativt int factorial (int n) { int product = 1; assert(n >= 0); for ( ; n > 1; n-- ) product *= n; return product; Programmeringsteknik 128

17 Effektivitet Många algoritmer har både rekursiva och iterativa lösningar. Normalt så är den rekursiva formuleringen vackrare och använder färre variabler för att göra samma beräkning. Vissa datorspråk använder bara rekursion för att åstadkomma upprepning (dvs. de har inte t.ex. while eller for). Rekursion orsakar att datorn lägger gamla värden av variabler i en stack för att komma ihåg dem. Ofta kan rekursion orsaka många funktionsanrop. Programmeringsteknik 129

18 fibonacci.c Fibonaccisekvensen definieras som följer ƒ 0 =0, ƒ 1 =1, ƒ i+1 =ƒ i +ƒ i-1, i=1.2, int fibonacci (int n) { return (n <= 1? n : fibonacci(n-1) + fibonacci(n-2); N fibonacci(n) Antalet funktionsanrop Programmeringsteknik 130

19 Rekursion vs. iteration Vissa programmerare anser att rekursion inte ska användas p.g.a. de många funktionsanropen ineffektivitet. Rekursion har dock många fördelar de är ofta enklare att skriva lättare att förstå lättare att underhålla Därför kan det vara motiverat att använda rekursion trots dess nackdelar. Programmeringsteknik 131

20 Endimensionella vektorer Har man relaterat data kan man lagra detta i vektorer istället för i enkla variabler. Vektorer deklareras och indexeras med hjälp av hakparenteser ([ och ]) direkt efter variabelnamnet. Exempel: int x0; int x[3]; int x1; int x2; x[0] = 2; x[1] = 1; x0 = 2; x[2] = x[0]; x1 = 1; x2 = x0; Vektorer har en fix längd, n, och indexeras från 0, dvs 0,1,2,,n-1. Programmeringsteknik 132

21 Endimensionella vektorer Vektorer kan liksom enkla variabler initieras med ett värde vid deklarationen. int x0 = 2; int x[3] = {2, 1, 4; int x1 = 1; int x2 = 4; Om listan med initieringsvärden är kortare än vektorn, initieras resterande element till 0. int x[100] = {1,0; /* första elementet i x blir 1 resten 0 */ int y[100] = {0; /* nollställer alla element i y */ Programmeringsteknik 133

22 Endimensionella vektorer Om en vektor är deklarerad utan längd, men initierad med en lista av initierare, är dess storlek implicit satt till antalet initierare. Följande två deklarationer är därmed ekvivalenta int x[] = {5, 1, -3, 4; int x[4] = {5, 1, -3, 4; För vektorer av tecken finns en alternativ notation. Följande två deklarationer är ekvivalenta. char s[] = { a, b, c, \0 char s[] = "abc"; Programmeringsteknik 134

23 Endimensionella vektorer #include <stdio.h> #define N 5 /* Läs in heltal till en vektor. Beräkna och skriv ut dess summa */ int main(void) { int values[n]; int i; int sum = 0; for (i=0; i<n; i++) { printf("enter value %d: ",i); scanf("%d",&values[i]); for (i=0; i<n; i++) { sum += values[i]; printf("\nsum: %d\n",sum); Programmeringsteknik 135

24 Flerdimensionella vektorer I C kan man deklarera vektorer av alla typer, inklusive vektorer av vektorer. På så vis kan man skapa vektorer i flera dimensioner. int a[100]; /* en endimensionell vektor */ int b[2][7]; /* en två-dimensionell vektor */ int c[6][1][5]; /* en tredimensionell vektor */ Initiering sker på liknande sätt som med endimensionella vektorer. int a[2][2] = {{1, 2, {4, 0; int b[2][3][1] = {{{4,{6,{1, {{7,{2,{1; int b[][][] = { {{4, 2, {6, 1, {{1, 0, {2, 0 ; Programmeringsteknik 136

25 Två-dimensionella vektorer Det är lättast att tänka på två-dimensionella vektorer som en matris, med rader och kolumner. Deklarationen int a[3][5] kan ses på följande vis: I minnet lagras dock flerdimensionella vektorer kontinuerligt. Programmeringsteknik 137

26 Två-dimensionella vektorer #include <stdio.h> #define N 5 #define M 3 int main(void) { double A[M][N]; int i, j; for (i=0; i<n; i++) { for (j=0; j<i; j++) { A[i][j] = 0; printf("%4.0lf", A[i][j]); for (j=i; j<m; j++) { A[i][j] = pow(j-i+1, 2); printf("%4.0lf", A[i][j]); printf("\n"); /*Ny rad för varje rad i A */ Programmeringsteknik 138

27 Pekare Varje variabel i ett program har en unik minnesadress. Med pekare kan man referera och manipulera minnesadresser. Värdet i en pekarvariabel är minnesadressen till en variabel. Om vi har en variabel v så anger &v minnesadressen till v. Deklarationer av pekare görs med en * före variabelnamnet. int *ip; char *cp; double *dp; Programmeringsteknik 139

28 Pekare Bland de tillåtna adresserna att referera finns alltid adressen 0. Adressen 0 har i C ett speciellt namn, nämligen NULL. Adressen NULL används som defaultvärde hos pekare då inga variabler kan ha den adressen, d.v.s. &v kan aldrig vara 0 (NULL). Några exempel på tilldelning av pekare kan vara: int i; int *p; p = 0; p = NULL; p = &i; Programmeringsteknik 140

29 Pekare int a = 3; int *p; int a = 3; int *p = NULL; int a = 3; int *p = &a; Programmeringsteknik 141

30 Pekare Man kan referera värdet på variabler med hjälp av pekare. Om p är en pekare som pekar på b:s minnesadress, ger *p värdet av b, en s.k. indirekt adressering. Exempel: int b = 3; int *p = &b; /* Initiering till adressen av b */ printf(" b: %d\n p: %p\n*p: %d\n", b, p, *p); Ger utskriften b: 3 p: effffbac /*Adressen skriven i hexadecimal form */ *p: 3 Programmeringsteknik 142

31 Pekare int a = 1; int *p; p = &a; printf(" a = %d *p = %d\n\n", a, *p); *p = 2; /* ekvivalent med a = 2 */ printf(" a = %d *p = %d\n\n", a, *p); a = 3; /* ekvivalent med *p = 3 */ printf(" a = %d *p = %d\n", a, *p); Ger utskriften: a = 1 *p = 1 a = 2 *p = 2 a = 3 *p = 3 Programmeringsteknik 143

32 Pekare I C används void * som generell pekartyp. Jämför med void.... int a = 3; char c = c ; void *p; p = &a; p = &c;... I ANCI C kan man inte göra konverteringar mellan olika pekartyper om inte den ena är av typen void *. Programmeringsteknik 144

33 Call-by-Reference När en variabel skickas som argument till en funktion kopieras dess värde till funktionens parameter och värdet på variabeln är oför ändrat. Detta kallas Call-by-value. Om i stället en referens till variabeln skickas som argument kan variabelns värde ändras i den anropade funktionen. Detta kallas Call-by- Reference. C använder alltid Call-by-value, men pekare kan användas for att åstadkomma samma effekt som i Call-by-reference. Programmeringsteknik 145

34 Programmen Call-by-Reference #include <stdio.h> #include <stdio.h> void set(int a, int value){ void set(int *a, int value){ a = value; *a = value; int main(void) { int main(void) { int a = 5; int a = 5; set(a, 2); set(&a, 2); printf("a = %d\n",a); printf("a = %d\n",a); ger utskrifterna: a = 5 a = 2 Programmeringsteknik 146

35 Pekare vs. vektorer En vektorvariabel, ex. float x[20], är i sig själv en adress (ett pekarvärde). Medan pekare kan anta nya pekarvärden så är vektorvariabler fixa. Både pekare och vektorer kan indexeras. Om a är en vektor, är a[3] ekvivalent med *(a + 3). a + 3 är ett pekaruttryck som anger tredje elementpositionen efter a. Ekvivalent, om p är en pekare, är p[3] ekvivalent med *(p + 3). Programmeringsteknik 147

36 Pekare vs. vektorer #define N 5 int main(void) { int a[n] = {0, 1, 2, 3, 4; int i; for (i=0; i<n; i++) { printf("a[%d]=%d *(a + %d)=%d &a[%d]=%p (a + %d)=%p\n, i, a[i], i, *(a + i), i, &a[i], i, (a + i)); Ger utskriften: a[0]=0 *(a + 0)=0 &a[0]=effffb98 (a + 0)=effffb98 a[1]=1 *(a + 1)=1 &a[1]=effffb9c (a + 1)=effffb9c a[2]=2 *(a + 2)=2 &a[2]=effffba0 (a + 2)=effffba0 a[3]=3 *(a + 3)=3 &a[3]=effffba4 (a + 3)=effffba4 a[4]=4 *(a + 4)=4 &a[4]=effffba8 (a + 4)=effffba8 Programmeringsteknik 148

37 Pekare vs. vektorer Vi kan alltså se det som att det ser ut så här i minnet. Observera C tillåter oss att referera och ändra hur vi vill i minnet. Om vi försöker ändra minne som programmet inte äger avslutar vanligtvis operativsystemet programmet. Däremot kan vi ändra i det minne som programmet äger. Om vi antar att i har adressen effffb94 kan vi alltså ändra värdet på i genom att skriva *(a - 1) = 3;. Programmeringsteknik 149

38 Pekare vs. vektorer Vi kan alltså använda pekare för att referera positioner i vektorer. Exempel: #define N 5 int a[n] = {0, 1, 2, 3, 4; int *p; int sum = 0; p = &a[1]; /* *p == 1 */ p = (a + 2) /* *p == 2 */ *p = 7; /* a[2] == 7 */ for (p=a; p<&a[n]; p++) { sum += *p; Värdet på sum är efter detta 15. Programmeringsteknik 150

39 Vektorer som argument Man kan även ge vektorer som argument till funktioner. När vektorer skickas som argument kopieras vektorns adress med Call-by-value, medan vektorelementen inte kopieras. Exempel: void scale(double v[], int n, double scale) { int i; for (i=0; i<n; i++) { v[i] *= scale; Observera att följande deklaration är ekvivalent. void scale(double *v, int n, double scale) {... Programmeringsteknik 151

40 Bubble sort void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; void bubble(int v[], int n) { int i, j; for (i=0; i<n-1; i++) for (j=0; j<n-i-1; j++) if (v[j] > v[j+1]) swap(&v[j], &v[j+1]); Programmeringsteknik 152

41 Dynamisk minnesallokering Allokera minne för de variabler man behöver och frigör minne när man är klar. För att allokera minne finns i C, de inbyggda funktionerna malloc och calloc. #include <stdlib.h> void *malloc(size_t size); void *calloc(size_t nelem, size_t size); Returnerar: En pekare till allokerat minne om OK, annars NULL Typen size_t är i ANSI C definierad till unsigned int. Vanligtvis är typedef använd i stdlib.h. Programmeringsteknik 153

42 Dynamisk minnesallokering malloc allokerar size bytes med minne. För att allokera minne som räcker för en viss mängd data och datatyp invänds oftast sizeof. int *v = (int*)malloc(10*sizeof(int)); Här allokeras minne för en heltalsvektor med längden 10. Observera att vi också gör en typecast från void* till int*. Detta är inte nödvändigt, men är bra programmeringsstil. v[i] kan användas p.s.s. som om man gjort deklarationen v[10]. Programmeringsteknik 154

43 Dynamisk minnesallokering calloc allokerar nelem element av storleken size. calloc initierar det allokerade minnets alla bitar till 0; Motsvarande exempel för calloc blir: int *v = (int*)calloc(10, sizeof(int)); Programmeringsteknik 155

44 Dynamisk minnesallokering Minne som är dynamiskt allokerat lämnas inte automatiskt tillbaka till systemet. #include <stdlib.h> void free(void* ptr); Funktionen free används för att explicit lämna tillbaka minne. int *p = (int*)malloc(10*sizeof(int));... free(p); Allokerat minne är inte knutet till en specifik pekarvariabel. Om man förlorar referensen till allokerat minne kan man inte sedan referera det eller frigöra det. Programmeringsteknik 156

45 Dynamisk minnesallokering int* new_int_array(int n) { int *v; v = (int*)malloc(n*sizeof(int)); return v; int main(void) { void *p; p = new_int_array(10); p = new_int_array(10); /* memory lost!!! */ free(p); Programmeringsteknik 157

46 Strängar Strängar är endimensionella vektorer av typen char. En sträng avslutas med ett \0 tecken, dvs ett tecken med alla bitar satta till 0. En strängs längd kan ses på två sätt: En fix maximal längd som avgörs av vektorns allokerade längd. En variabel längd som bestäms av första \0 tecknet. \0 tecknet måste rymmas inom det allokerade utrymmet. Programmeringsteknik 158

47 Strängar char s[] = "abc"; char s[] ={ a, b, c, \0 char *p = "abc"; Programmeringsteknik 159

48 strcat & strncat #include <string.h> char *strcat(char *s1, const char *s2); char *strncat(char *s1,const char *s2, size t n); Returnerar: Pekaren s1. Konkatenerar (slår ihop) två strängar och lägger resultatet i s1. s1 måste vara stor nog för att rymma resultatet. strncat lägger till som mest n tecken. Programmeringsteknik 160

49 strcmp & strncmp #include <string.h> int strcmp(char *s1, const char *s2); int strncmp(char *s1, const char *s2, size_t n); Returnerar: Ett heltal < 0, lika med 0 eller > 0, beroende på om s1 är lexikografiskt mindre, lika eller större än s2. Jämför två strängar. strncmp jämför som mest n tecken. Programmeringsteknik 161

50 Strängfunktioner #include <string.h> char *strcpy(char *s1, const char *s2); char *strncpy(char *s1,const char *s2, size_t n); Returnerar: Pekaren s1. Innehållet i s2 kopieras till s1 tills \0 flyttas. s1 måste ha plats för resultatet. strncpy kopierar som mest n tecken. #include <string.h> size_t strlen(const char *s); Returnerar: Antalet tecken före \0. Undersöker längden av eller antalet tecken före\0 hos en sträng. Programmeringsteknik 162

51 Strängexempel #include <stdlib.h> #define MAX_STR_LEN 20 int main(void) { char s[] = "I love pointers"; char *p; p = (char*)malloc(max_str_len*sizeof(char)); strncpy(p, s, MAX_STR_LEN); free(p); Bild just innan free anropas. Programmeringsteknik 163

52 Argument till main() Två argument, vanligtvis kallade argc och argv kan användas med main() för kommunikation med operativsystemet. argc anger antalet argument på kommandoraden. argv är en vektor med pekare till strängar med respektive argument. Kommandot, eller programnamnet, är alltid första argumentet. void main(int argc, char *argv[]) {... Programmeringsteknik 164

53 Echo exempel #include <stdio.h> int main(int argc, char *argv[]) { int i; for (i=1; i<argc; i++) { printf("%s", argv[i]); if (i < argc-1) printf(" "); else printf("\n"); return 0; Programmeringsteknik 165

54 Echo exempel Om det tidigare exemplet döpts till my_echo och kompilerats på C: kan ett exempel vid kommandopromten bli: C:> my_echo I love C I love C C:> I minnet kommer det att se ut så här: Programmeringsteknik 166

55 Sammansatta datatyper Vektorer finns för homogent data. Vad gör man med relaterat data av olika datatyper? char *name1 = "Adam Gudmundsson"; int age1 = 23; double weight1 = 74.7; char *name2 = "Eva Gudmundsdotter"; int age2 = 27; double weight2 = 56.2; Programmeringsteknik 167

56 Strukturer Strukturer definieras med nyckelordet struct. struct post { /* definition */ char *name; int age; double weight; ; struct post p1, p2; /* deklaration */ Definitionen skapar en mall, med vilken man sedan kan deklarera variabler. Strukturer kan användas som andra datatyper i bl.a. vektorer. Programmeringsteknik 168

57 Strukturer För att göra accesser till medlemmar av en struktur används punktoperatorn. ( genetiv s) struct post p1, persons[2]; p1.name = "Adam Gudmundsson"; p1.age = 23; p1.weight = 74.7; persons[0] = p1; /* hela posten kopieras */ persons[1].name = "Eva Gudmundsdotter"; persons[1].age = 27; persons[1].weight = 56.2; Programmeringsteknik 169

58 Strukturer Utelämnar man namntaggen till en struktur, kan strukturen inte användas till ytterligare deklarationer. struct { int r; int g; int b; red, blue, green; Detta till skillnad mot om den tas med struct colour { int r; int g; int b; ; struct colour red; struct colour green; struct colour blue; Programmeringsteknik 170

59 Strukturer Vanligtvis använder man typedef tillsammans med strukturer. När man gör typdeklarationer är namntaggen vanligtvis onödig. typedef struct { double re; double im; complex; /* ny datatyp */ complex a, b, c[n]; Typdeklarationer ökar flexibiliteten och portabiliteten hos kod. Programmeringsteknik 171

60 Strukturer och dynamiskt minne Vid hantering av pekare till strukturer kommer nyttan av sizeof till sin fulla rätt. sizeof returnerar, för strukturer, summan av storlekarna hos dess medlemstyper. Om vi har strukturen complex. typedef struct { double re; double im; complex; ger sizeof(complex) summan av storleken på två double, d.v.s. vanligtvis 16. Detta är mycket praktiskt vid allokering av nytt minne. complex *a = (complex*)malloc(sizeof(complex)); Programmeringsteknik 172

61 Strukturer och dynamiskt minne Om vi har en struktur som en pekare kan syntaxen fort bli komplex. complex *a = (complex*)malloc(sizeof(complex)); complex *v[n]; (*a).im = 3.0; (*a).re = 0.2; v[0] = (complex*)malloc(sizeof(complex)); (*(v[0])).im = 5.1; (*(v[0])).re = 2.8; I C finns operatorn -> för att göra accesser till medlemmar i en struktur via en pekare. a->im = 3.0; a->re = 0.2; v[0]->im = 5.1; v[0]->re = 2.8; Programmeringsteknik 173

62 Strukturer och funktioner Precis som andra datatyper kan strukturer användas med funktioner. typedef struct { int x; int y; coordinate; Med Call-by-value : coordinate move(coordinate p, int dx, int dy) { p.x += dx; p.y += dy; return p; och som pekare: void move(coordinate *p, int dx, int dy) { p->x += dx; p->y += dy; Programmeringsteknik 174

63 Initiering av strukturer Även strukturer kan initieras vid deklarationen. complex a = {1.0, 2.45; complex v[2] = {{1.4, 0.23, {-1.4, 5.1; person p = {"Adam Gudmundsson", 27, 74.7; Man kan även initiera en hel struktur med värde noll (alla bitar satta till noll) på vanligt sätt. complex c[4] = {0; Programmeringsteknik 175

64 Unioner Unioner är en datatyp som definierar set med alternativa typer. Definitionen sker på liknande sätt som hos strukturer och ger en mall. union int_or_float { int i; float f; ; Mallen kan sedan användas för att deklarera variabler. union int_or_float a; union int_or_float v[n]; union int_or_float *p; Programmeringsteknik 176

65 Unioner Det ligger på programmerarens ansvar att tolka det lagrade värdet rätt. Följande exempel går genom kompilatorn och kan exekveras utan fel, men kan ge mycket märkliga effekter. float f; union int_or_float a; a.i = 3; f = a.f; /* f == e-45 och ej 3.0!!! */ Storleken på en union blir storleken av den största ingående datatypen. typedef union { int v[6]; double lf; union1; sizeof(union1) /*== 6*sizeof(int) == 6*4 == 24 */ Programmeringsteknik 177

66 Exempel på sammansatta typer typedef struct { enum {t_integer, t_float type; union { int i; float f; value; compound;... compound c; c.type = t_integer; c.value.i = 4; switch (c.type) { case t_integer: print("c: %d\n", c.value.i); break; case t_float: print("c: %f\n", c.value.f); break; Programmeringsteknik 178

67 Utskrifter till skärm Utskrifter sker med printf funktionen. #include <stdio.h> int printf(const char* format,...); Returnerar: Antalet utskrivna tecken om OK, annars negativt värde. Första argumentet, format, anger vad som skall skrivas ut och hur det skall skrivas ut. I format-strängen kan konverteringsspecifikationer anges som beskriver hur följande argument skall tolkas och konverteras. int a = 3; printf("%s\n","hello world!"); printf("a har värdet %d\n",a); Programmeringsteknik 179

68 Flaggor till printf [] flaggan behöver inte anges. eller x bredd på fältet y antalet decimaler som skall skrivas ut z antalet siffror i exponenten som skall skrivas ut. - vänsterjusterat space mellanslag om tecken saknas + skriver ut + eller - före nummer 0 fyller ut med 0:or. # alternativ formatering. Programmeringsteknik 180

69 Flaggor till printf %[-][x]c chars %[-][x]s strings %[ +][-][0][x]d decimal %[ +][-][0][x]u unsigned decimal %[ +][-][0][x]o octal %[ +][-][0][x]x hexadecimal (with a,b,...) %[ +][-][0][x]X hexadecimal (with A,B,...) %[ +][-][0][x][.y]f float %[ +][-][0][x][.y]lf double %[ +][-][#][0][x][.y][+z]e scientific notation (with e) %[ +][-][#][0][x][.y][+z]E scientific notation (with E) %[ +][-][#][0][x][.y][+z]g same as f or e, depending on the value. %[ +][-][#][0][x][.y][+z]G same as f or E, depending on the value. Programmeringsteknik 181

70 Exempel på printf #include <stdio.h> int main(void) { int i1 = -3; int i2 = 5; char c1 = c ; double f1 = -2.0; double f2 = 3.3; printf("%-10s%10s\n", "Variabel", "Värde"); printf(" \n"); printf("%-10s%+10d\n", "i1", i1); printf("%-10s% 10d\n", "i2", i2); printf("%-10s%10c\n", "c1", c1); printf("%-10s%+10.2f\n", "f1", f1); printf("%-10s% e\n","f2", f2); return 0; Programmeringsteknik 182

71 Exempel på printf Ger utskriften: Variabel Värde i1-3 i2 5 c1 c f f e+00 Programmeringsteknik 183

72 Inläsning från tangentbord Inläsning från tangentbordet sker vanligtvis med scanf. #include <stdio.h> int scanf(const char* format,...); Returnerar: Antalet lyckosamt matchade tecken. Vid fel EOF. Första argumentet, format, anger hur det som läses in skall formateras. Efterföljande argument anger adresser (pekare) till minnesutrymme för det inlästa datat. int i; char c; double d; scanf("%d%c%lf", &i, &c, &d); Programmeringsteknik 184

73 Exempel på scanf int i; char c; char s[15]; scanf("%d,%*s %% %c %5s %s", &i, &c, s, &s[5]); Med insträngen 45, ignore_this % C read_in_this** lagras 45 i i, C i c och read lagras i s[0] till s[4] och \0 i s[5]. Därefter lagras in this** i s[5] till s[13] och \0 i s[14]. Programmeringsteknik 185

74 Fler strängfunktioner #include <stdio.h> int sprintf(char *s, const char* format,...); Returnerar: Antalet utskrivna tecken om OK, annars negativt värde. sprintf fungerar på samma sätt som printf med den skillnaden att resultatet skrivs till en sträng, s, istället för till skärmen. #include <stdio.h> int sscanf(char* s, const char* format,...); Returnerar: Antalet lyckosamma matchningar. Vid fel EOF. sprintf läser text från en sträng och inte från tangentbordet. Programmeringsteknik 186

75 Filhantering Filer hanteras med en speciell struktur, FILE, eller snarare pekare till en sådan struktur FILE * Denna definieras i stdio.h, men hur den exakt ser ut är oviktigt. Även utskrifter till skärm och inläsning från tangentbort sköts med filpekare. Dessa benämns stdout och stdin. Dessutom finns en filpekare för utskrifter av felmeddelanden, stderr. Programmeringsteknik 187

76 Öppna och stänga filer För att kunna läsa eller skriva till en fil måste den först öppnas. #include <stdio.h> FILE *fopen(const char* filename, const char *mode); Returnerar: Filpekare vid OK, annars NULL. Vi öppnar filer genom att ange bl. a. dess namn. #include <stdio.h> int main(void) { FILE* ifp; FILE* ofp; /* open for reading */ ifp = fopen("any_file", "r"); /* open for writing */ ofp = fopen("another_file", "w");... Programmeringsteknik 188

77 Öppna och stänga filer Vid öppnandet anger man också vad man vill kunna göra med filen. Detta för att undvika misstag. Dessa kan vara r Öppnar textfil för läsning. w Öppnar textfil för skrivning. a Öppnar textfil för att lägga till. rb Öppnar binär fil för läsning. wb Öppnar binär fil för skrivning. ab Öppnar binär fil för att lägga till. r+ Öppnar fil för läsning och skrivning. w+ Öppnar fil för skrivning och läsning.... o.s.v. Programmeringsteknik 189

78 Öppna och stänga filer När man är klar med en fil bör den stängas. #include <stdio.h> int fclose(file *stream); Returnerar: 0 vid OK, annars EOF. #include <stdio.h> int main(void) { FILE* fp; /* open for reading */ fp = fopen("any_file", "r"); fclose(fp); Programmeringsteknik 190

79 Läsa och skriva på filer Motsvarigheten till printf och scanf för filer heter fprintf och fscanf. #include <stdio.h> int fprintf(file *stream,const char* format,...); Returnerar: Antalet utskrivna tecken om OK, annars negativt värde. fprintf fungerar på samma sätt som printf med den skillnaden att resultatet skrivs till en filpekare, stream, i stället för till skärmen. #include <stdio.h> int fscanf(file* stream,const char* format,...); Returnerar: Antalet lyckosamma matchningar. Vid fel EOF. fprintf läser text från en filpekare och inte från tangentbordet. Programmeringsteknik 191

80 Exempel med filer FILE* fp; int a = 5; fp = fopen("anyfile", "w"); fprintf(fp, "Skriver a: %d\n", a); fclose(fp); fp = fopen("anyfile", "r"); fscanf(fp, "%*s%*s %d\n", &a); fclose(fp); Programmeringsteknik 192

81 Skriva eller läsa enskilda tecken Motsvarigheten till getchar och putchar heter för filer getc och putc. #include <stdio.h> int putc(int c, FILE *stream); Returnerar: värdet av c. EOF vid filslut eller fel. #include <stdio.h> int getc(file *stream); Returnerar: Nästa tecken från strömmen. EOF vid filslut eller fel. Dessa anrop sker genom makron. Det finns också litet långsammare funktionsvarianter av dessa som heter fputc och fgetc. Programmeringsteknik 193

82 Exempel Observera att dessa två satser är ekvivalenta och att man inte kan öppna eller stänga stdout. fprintf(stdout, "Detta skrivs till skärm\n"): printf("detta skrivs till skärm\n"): Liksom att dessa tre satser är ekvivalenta. putc( a, stdout); fputc( a, stdout); putchar( a ); Programmeringsteknik 194

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05 Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 12 Filhantering Funktionsbibliotek Mer om kompilering Lagrinsklasser Makron Programmeringsteknik VT05 2 Mer om printf Utskrifter

Läs mer

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10 Programmeringsteknik för Ingenjörer VT06 Föreläsning 10 Dagens föreläsning Repetition Strukturer Programmeringsteknik för ingenjörer, VT06 2 Deklaration: char name1[10]; char *name2; Repetition - Strängar

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

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

Ö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

Exempel. Rekursion. Iterativ motsvarighet. fakultet.c. fibonacci.c Fibonaccisekvensen definieras som följer ƒ 0 =0, ƒ 1 =1, ƒ i+1 =ƒ i +ƒ i-1, i=1,2,

Exempel. Rekursion. Iterativ motsvarighet. fakultet.c. fibonacci.c Fibonaccisekvensen definieras som följer ƒ 0 =0, ƒ 1 =1, ƒ i+1 =ƒ i +ƒ i-1, i=1,2, Rekursion En funktion är rekursiv om den anropar sig själv, direkt eller indirekt. Alla funktioner kan anropas rekursivt. I sin enklaste form är rekursion enkel att förstå. printf("the universe is never

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

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

Enkla datatyper minne

Enkla datatyper minne Enkla datatyper minne 143.56 sant Sonja A falskt 18 1999-10-29 Bertil Gralvik, KTH Ingenjörsskolan 1 Addera två tal Algoritmen Summera tal Mata in två tal Beräkna Skriv ut resultat Mata in tal 1 Mata in

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

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

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013 1 of 7 Örebro universitet Institutionen 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

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare Vad är en pekare? Varför använder vi pekare? Hur används pekare? Hur deklarerar vi pekare i C? Hur kommer vi åt pekarvärdet? DAVA07/08 JE,MG,MG,PS 2 DAVA07/08 JE,MG,MG,PS Vad är en pekare? En pekare är

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

Tentamen i. Programmering i språket C

Tentamen i. Programmering i språket C 1 of 8 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering i språket C för D1 m fl, även distanskursen torsdag

Läs mer

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C 1 of 7 Örebro universitet Institutionen 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

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

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Innehållsförteckning. Exempel. Åtkomst & användarhandledning Framsidan Framsidan på din labrapport kan du utforma ganska fritt. Tänk bara på att den ska vara läsbar, och innehålla (minst) följande information: Ditt namn Din e-mail adress här på CS! Kursens namn

Läs mer

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C 1 of 8 Örebro universitet Institutionen 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

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

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

*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

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

4 Sammansatta datatyper

4 Sammansatta datatyper 4 Sammansatta datatyper De enkla datatyper som vi hittills använt är otillräckliga när man ska hantera stora datamängder. Vill man exempelvis läsa in 100 reella mätvärden, som man tillfälligt vill spara

Läs mer

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C 1 of 6 Örebro universitet Institutionen 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

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C 1 of 7 Örebro universitet Institutionen 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

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

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 har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar. Vad har vi lärt oss så här långt Vad är en sträng Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar. Matriser av strängar. Sortering av strängar. Vad har vi lärt oss i dag Literals

Läs mer

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33 Programmering i C++ EDA623 Typer EDA623 (Föreläsning 4) HT 2013 1 / 33 Typer Innehåll Heltalstyper Flyttalstyper Pekare Minnesallokering Funktionspekare Typdeklarationer med typedef Typomvandlingar (casting)

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

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

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

Föreläsning 13. In- och utmatning

Föreläsning 13. In- och utmatning Föreläsning 13 In- och utmatning Dagens kluring Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar

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

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

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

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

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

Innehåll. Pekare Syntax

Innehåll. Pekare Syntax Innehåll EDAF30 Programmering i C++ Typer, pekare Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Typer och arrayer Operatorn -> Typer, pekare 2/1 Påminner om referenser i Java, men en pekare är minnesadressen

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

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

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

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström DST 1 Nicholas Wickström IDE, Högskolan i Halmstad 2009 1 Outline 1 Vad är Hårdvara? (Datorsystemmodell; processor m. periferi, IO, Minne) Typiskt för hårdvarunära programmering (datablad, register, datastrukturer,...)

Läs mer

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110.

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Denna tenta kommer att vara färdigrättad On 14/1-04 och kan då hämtas på mitt

Läs mer

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C 1 of 6 Örebro universitet Institutionen 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

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe Pekare och Arrayer Viktor Kämpe Pekare Pekarens värde är en adress. Pekarens typ berättar hur man tolkar bitarna som finns på adressen. unsigned char* pek 0x3026 0x3026 0110 0001 typ värdet är en adress...

Läs mer

Grundkurs Programmering

Grundkurs Programmering HI124 Grundkurs Programmering F7b: Funktioner på djupet! A. Cajander, STH 6 1 5 42 3.14f a float char short circuit order of subexp eval. Dagens fokus = + - * / % ++ -- + - * / % & ^ > ==!= > < >=

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i

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

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world Programmering i C Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur Kernighan, Ritchie: The C Programming Language, Second edition, Steve Oualline:

Läs mer

C-programmering, föreläsning 2 Jesper Wilhelmsson

C-programmering, föreläsning 2 Jesper Wilhelmsson C-programmering, föreläsning 2 Jesper Wilhelmsson Funktioner void Globala och lokala variabler, scope static Arrayer Strängar ASCII, ANSI Argument till main Slumptal Funktioner Nu är det dags att börja

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

Deklarera en struct som kan användas för att representera en rät linje

Deklarera en struct som kan användas för att representera en rät linje Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar en linje som går genom punken (0,2) och

Läs mer

Heltal(int) Programmeringsteknik 54

Heltal(int) Programmeringsteknik 54 Heltal(int) Datatypen int används tillsammans med char, short int och long int för att lagra heltal i C. Matematisk sett finns det oändligt många heltal. På en dator måste det införas en begränsning på

Läs mer

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X Algoritmer och Datastrukturer Kary FRÄMLING/Göran PULKKIS (v23) Kap. 7, Sid 1 BINÄRA TRÄD Träd används för att representera olika slags hierarkier som ordnats på något sätt. Den mest använda trädstrukturen

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

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

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

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

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

Funktionens deklaration

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

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

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

#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

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

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

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

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 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man

Läs mer

Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning

Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning Övning 3 i 2D1324 Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning Avancerad c-programering och repetition Typisk h-fil #ifndef special_a

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

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

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera Föreläsning 2 Variabler, tilldelning och kodblock if-satsen Logiska operatorer Andra operatorer Att programmera Variabler Det är i variabler som all data (information) lagras. Genom att ändra värde på

Läs mer

Loopar och datatyper. Föreläsning 3

Loopar och datatyper. Föreläsning 3 Loopar och datatyper Föreläsning 3 Dagens kluringar int x; printf("ange x:"); scanf("%d",&x); if(/*fyll i kod*/) printf("du angav x mellan 7 och 14"); int i=0; if(i++) i++; printf("%d",i++); //vad skrivs

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

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet 1 Texthantering I detta avsnitt tas det upp två sätt att arbeta med text i C++ program. Det första sättet som behandlas är hanteringen av textfält. Texter i C++ består utav en serie med enstaka tecken

Läs mer

Loopar och datatyper. Föreläsning 3

Loopar och datatyper. Föreläsning 3 Loopar och datatyper Föreläsning 3 Dagens kluringar int x; printf("ange x:"); scanf("%d",&x); if(/*fyll i kod*/) printf("du angav x mellan 7 och 14"); int i=0; if(i++) i++; printf("%d",i++); //vad skrivs

Läs mer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik för ingenjörer, VT06 2 Repetition Repetition -

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

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga, 051119

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga, 051119 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Denna tenta kommer att vara färdigrättad On 23/11 och kan då hämtas

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

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall Rekursiva funktioner Föreläsning 10 (Weiss kap. 7) Induktion och rekursion Rekursiva funktioner och processer Weiss 7.1-3 (7.4, 7.5.3 utgår) Fibonaccital (7.3.4) Exempel: Balansering av mobil (kod se lab

Läs mer

Föreläsning 11. Strängar

Föreläsning 11. Strängar Föreläsning 11 Strängar Dagens kluring void findmax(int v[], int length, int *pmax) int i;??=v[0]; for(i=1;i< length;i++) if(v[i]>??)??=v[i]; int main() int a[]=1,2,3,4,2; int max; hittamax(a,5,???); printf(

Läs mer

C++-programmets beståndsdelar

C++-programmets beståndsdelar C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet

Läs mer

Filer och structer Del 2

Filer och structer Del 2 Filer och structer Del 2 Agenda: Typedef Alternativ strängläsning från fil Binära data Lagra Läsa Oväntat slut på input Spara till nästa programstart Typedef Kan användas till att sätta ett eget namn på

Läs mer

Grundläggande programmering med C# 7,5 högskolepoäng

Grundläggande programmering med C# 7,5 högskolepoäng Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)

Läs mer

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet

Läs mer

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167 GU / Chalmers Campus Lindholmen Tentamen Programutveckling 2016-01-13 LEU 482 / TIG167 Examinator: Henrik Sandklef (0700-909363) Tid för tentamen: 2016-01-13, 08.30 12.30 Ansvarig lärare: Henrik Sandklef,

Läs mer

Data, typ, selektion, iteration

Data, typ, selektion, iteration Data, typ, selektion, iteration En programmeringkurs på halvfart IDT, MDH ttp://www.negative-g.com/nolimits/no%20limits%20defunct%20coasters.htm 1 Dagens agenda Talrepresentation Typkonvertering Sekvens

Läs mer

C-programmering, föreläsning 1 Jesper Wilhelmsson

C-programmering, föreläsning 1 Jesper Wilhelmsson C-programmering, föreläsning 1 Jesper Wilhelmsson Introduktion till C Variabler, Typer, Konstanter Operatorer Villkorliga satser if-else, switch Loopar for, while, do... while Inmatning och utmatning stdin

Läs mer

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut F5: Filhantering in- och utmatning (kap. 2 och 8) 1 Utskrift på skärm, inläsning från tangentbord (kap. 2) Spara och hämta variabler med save och load (kap. 2) Kommandot textread Mer avancerad filhantering:

Läs mer

Exempelsamling Assemblerprogrammering

Exempelsamling Assemblerprogrammering Exempelsamling Assemblerprogrammering I uppgifterna nedan utgå från följande programskelett: #include.data var1:.word 12 var2:.word 19 sum: prod:.float 0.set noreorder.text.globl start.ent start

Läs mer

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Minnestilldelning (allokering) och frigörande (avallokering) av minne Pekare i C++ Pekare används mycket i C++. De är bra både för att de tillåter dynamisk minnesallokering och för att de är referenser. En pekarvariabel innehåller en adress till ett element, den pekar på

Läs mer

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world Programmering i C Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur Kernighan, Ritchie: The C Programming Language, Second edition, Steve Oualline:

Läs mer

Pekare ( )

Pekare ( ) Pekare Varje variabel har en adress En variabels adress ges av den unära adressoperatorn & Adresser hanteras kan lagras i variabler (pekarvariabel) Den unära avrefereringsoperatorn * används dels vid deklaration

Läs mer