Programmering i C. Lektion september 2009

Størrelse: px
Starte visningen fra side:

Download "Programmering i C. Lektion september 2009"

Transkript

1 Programmering i C Lektion september 2009

2 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 2 / 81 1 Introduktion og Kontrolstrukturer 2 Funktioner 3 Datatyper 4 Pointers 5 Opsummering (i dag)

3 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 3 / 81 Oversættelse Kildekode Maskinkode Fortolkning Udførsel gcc -ansi -pedantic -Wall -O -o hello hello.c./hello #include < s t d i o. h> i n t main ( void ) { / h e l l o w o r l d. c / p r i n t f ( " Hello, world! \ n " ) ; return 0;

4 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 4 / 81 en variabel er en navngiven plads i computerens lager en variabel kan indeholde en værdi af en bestemt type variables værdier kan ændres ved assignment-kommandoer variable skal erklæres før brug #include < s t d i o. h> i n t main ( void ) { / v a r i a b l e. c / i n t a, b, c ; a = 5; b = 3; c = a / b ; p r i n t f ( "%d d i v i d e r e t med %d g i v e r %d \ n ", a, b, c ) ; p r i n t f ( " Hov, hvad er nu det?\ n " ) ; return 0;

5 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 4 / 81 en variabel er en navngiven plads i computerens lager en variabel kan indeholde en værdi af en bestemt type variables værdier kan ændres ved assignment-kommandoer variable skal erklæres før brug #include < s t d i o. h> i n t main ( void ) { / v a r i a b l e 2. c / i n t a = 5, b = 3, c ; c = a / b ; p r i n t f ( "%d d i v i d e r e t med %d g i v e r %d \ n ", a, b, c ) ; p r i n t f ( " Hov, hvad er nu det?\ n " ) ; return 0;

6 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 4 / 81 en variabel er en navngiven plads i computerens lager en variabel kan indeholde en værdi af en bestemt type variables værdier kan ændres ved assignment-kommandoer variable skal erklæres før brug variable skal altid tildeles startværdier #include < s t d i o. h> i n t main ( void ) { / v a r i a b l e n o i n i t. c / i n t a, b, c ; c = a / b ; p r i n t f ( "%d d i v i d e r e t med %d g i v e r %d \ n ", a, b, c ) ; p r i n t f ( " Hov, hvad er nu det?\ n " ) ; return 0;

7 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 5 / 81 heltal reelle tal tegn strenge short float char char * int double long long double #include < s t d i o. h> i n t main ( void ) { / v a r i a b l e f l o a t. c / i n t a = 5, b = 3; double c ; c = ( double ) a / b ; p r i n t f ( "%d d i v i d e r e t med %d g i v e r %f \ n ", a, b, c ) ; p r i n t f ( " Det var bedre! \ n " ) ; return 0;

8 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 6 / 81 #include < s t d i o. h> i n t main ( void ) { / e l e f a n t. c / i n t a = 1; p r i n t f ( "%d e l e f a n t kom marcherende, \ hen ad edderkoppens f i n e spind \ n ", a ) ; while ( a <= 10) { a = a + 1; p r i n t f ( "%d e l e f a n t e r kom marcherende, \ hen ad edderkoppens f i n e spind \ n ", a ) ; return 0;

9 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 7 / 81 Udtryk: 7 x, a, b rest ved (heltals)division a + b, a b a b, a / b, a % b a < b, a <= b, a == b etc. (boolske udtryk) Prioritering: beregnes før + etc.: = 3 + (5 7) assignment/tildeling {{ c = a / b {{ expression/udtryk Associering: Operationer med samme prioritet foretages fra venstre til højre: = (10 5) 2 10 (5 2)

10 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 8 / 81 a = i + 5: udtrykket i + 5 beregnes, og a tildeles den beregnede værdi dvs. + har højere prioritet end = men i C er a = i + 5 også et udtryk! Udtrykkets værdi er ligeledes i + 5 misbrug: #include < s t d i o. h> i n t main ( void ) { / misbrug. c / i n t a, b, c ; a = b = c = 7; p r i n t f ( " a : %d, b : %d, c : %d \ n ", a, b, c ) ; a = 1 + ( b = 2 ( c = 3 ) ) ; p r i n t f ( " a : %d, b : %d, c : %d \ n ", a, b, c ) ; return 0;

11 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 9 / 81 increment-operator: skriv i++ eller ++i i stedet for i = i + 1 decrement-operator: skriv i eller i i stedet for i = i 1 men det er også et udtryk... : i = 7; a = ++i i=8, a=8 i = 7; a = i++ i=8, a=7! Hvorfor? også akkumulerende assignment-operatorer: a += 5 a = a + 5 a = 7 a = a 7 a = 4 a = a 4 a /= 3 a = a / 3 etc.

12 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 10 / 81 Udskrivning med printf : printf( kontrolstreng, parametre) kontrolstreng: almindelige tegn udskrives uændret, konverteringstegn erstattes med parametre, som er formateret i h.t. konverteringsspecifikationen printf returnerer antallet af udskrevne tegn se printf-eks.c

13 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 10 / 81 Udskrivning med printf : printf( kontrolstreng, parametre) kontrolstreng: almindelige tegn udskrives uændret, konverteringstegn erstattes med parametre, som er formateret i h.t. konverteringsspecifikationen printf returnerer antallet af udskrevne tegn se printf-eks.c Indlæsning med scanf: scanf( kontrolstreng, parametre) kontrolstreng (næsten) analog til printf, men parametrene skal være adresser på variable (pointere): &a scanf returnerer antallet af gennemførte indlæsninger se scanf-eks.c

14 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A Et større eksempel: #include < s t d i o. h> # define PI i n t main ( void ) { / c i r c l e. c / double radius ; p r i n t f ( " \ n%s \ n \ n%s ", " This program computes the area of a c i r c l e. ", " I n p u t the r a d i u s : " ) ; scanf ( "%l f ", &r a d i u s ) ; p r i n t f ( " \ n%s \ n%s%.2 f%s%.2 f%s%.2 f \ n%s%.5 f \ n \ n ", " Area = PI r a d i u s r a d ius ", " = ", PI, " ", radius, " ", radius, " = ", PI r a d i u s r a d ius ) ; return 0; 11 / 81

15 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 12 / 81 Kildekode Kildekode gcc -E Kildekode Præprocessering Oversættelse Kompilering gcc -S Assemblerkode gcc -c Assemblering Objektkode Maskinkode Udførsel Fortolkning Linkning Maskinkode Udførsel Fortolkning

16 Indhold Programmer Variable Datatyper Kontrol strukturer Udtryk Assignments Operatorer I/O Eksempel Processen A 13 / 81 gcc -ansi -pedantic -Wall -O -o ting ting.c Vi vil have alle advarsler som ANSI kræver Vi følger ANSI-standarden Output skal hedde ting Vi optimerer for at fange flere mulige fejl Vi vil også have en masse andre advarsler

17 Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 14 / 81 Kontrolstrukturer 13 Sekventiel kontrol 14 Logiske udtryk 15 Short circuit evaluering 16 Udvælgelse af kommandoer

18 Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 15 / 81 #include < s t d i o. h> i n t main ( void ) { / seconds. c / long i n t input, temp, h, m, s ; p r i n t f ( " Giv mig et h e l t a l! \ n " ) ; scanf ( "%l d ", &i n p u t ) ; h= i n p u t / 3600; temp= input h 3600; m= temp / 60; s= temp% 60; p r i n t f ( " \ n%l d sekunder svarer t i l \ %l d timer, %l d m i n u t t e r og %l d sekunder \ n ", input, h, m, s ) ; return 0; start gør noget gør noget gør mere slut

19 Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer Udvælgelse af kommandoer: start Gentagelse af kommandoer: start gør noget gør noget ja betingelse nej nej betingelse gør eet gør andet ja gør noget gør mere gør mere slut if slut while; for 16 / 81

20 Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 17 / 81 Udvælgelse: if( logisk udtryk ) Gentagelse: while( logisk udtryk ) Logiske udtryk: x<y, x<=y, x>=y, x>y, x!=y, x==y!a, A&&B, A B, hvor A og B selv er logiske udtryk har værdien falsk (0) eller sandt (1, i de fleste(!) compilere) && har højere prioritet end brug parenteser! (Hvad er værdien af 3==5 1==1 && 1==2?... ) [oper.c]

21 Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 18 / 81 # include < s t d i o. h> i n t main ( void ) { / l i g h e d. c / i n t a, b, l i g ; p r i n t f ( " Vi sammenligner to t a l. \ n \ Output 0 betyder at de er f o r s k e l l i g e. \ n \ n \ Må jeg bede om to h e l t a l?\ n " ) ; scanf ( "%d %d ", &a, &b ) ; l i g = ( a == b ) ; p r i n t f ( " \ noutput : %d \ n ", l i g ) ; return 0;

22 Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 19 / 81 Observation: Hvis A er falsk, da er A&&B også falsk Hvis A er sandt, da er A B også sandt i udtrykket A&&B beregnes B kun hvis A er sandt og i udtrykket A B beregnes B kun hvis A er falsk Smart, men kilde til fejl

23 Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 20 / 81 # include < s t d i o. h> i n t main ( void ) { / lighed2. c / i n t a, b ; char l i g ; p r i n t f ( " Vi sammenligner to t a l. \ n \ n \ Må jeg bede om to h e l t a l?\ n " ) ; scanf ( "%d %d ", &a, &b ) ; ( a == b ) && ( l i g = ) ; ( a!= b ) && ( l i g = u ) ; p r i n t f ( "%d er %c l i g %d \ n ", a, l i g, b ) ; return 0;

24 Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 21 / 81 Udvælgelse med &&: (a == b) && (lig = ); kryptisk... Udvælgelse med if: if (a== b) lig = ; det var bedre! ja lig= a==b nej

25 Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 21 / 81 Udvælgelse med &&: (a == b) && (lig = ); kryptisk... Udvælgelse med if: if (a== b) lig = ; det var bedre! if (a==b) lig = ; else lig = u ; ja lig= a==b nej lig= u i f ( u dtryk ) kommando1 ; else kommando2 ; først beregnes udtryk hvis udtryk er sandt, udføres kommando1 hvis udtryk er falsk, udføres kommando2

26 Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer # include < s t d i o. h> i n t main ( void ) { / lighed3. c / i n t a, b ; char l i g ; p r i n t f ( " Vi sammenligner to t a l. \ n \ n \ Må jeg bede om to h e l t a l?\ n " ) ; scanf ( "%d %d ", &a, &b ) ; i f ( a== b ) { l i g = ; else { l i g = u ; p r i n t f ( "%d er %c l i g %d \ n ", a, l i g, b ) ; return 0; 22 / 81

27 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme 23 / 81 Kontrolstrukturer, Kommandoblokke; scope 18 Udvælgelse med if, Udvælgelse med switch 20 Gentagelse med while 21 Gentagelse med for 22 Opsummering

28 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme 24 / 81 Problem: Vil gerne udvælge mellem to blokke af kommandoer Løsning: Sammensætning af kommandoer: i f ( a== b ) { c= 1; d= 2; else { c= 7; d= 5; blok blok ja kommando kommando betingelse nej kommando kommando

29 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme 25 / 81 blok = antal kommandoer omkranset af { og en blok behandles som én kommando blokke kan indlejres i hinanden

30 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme 25 / 81 blok = antal kommandoer omkranset af { og en blok behandles som én kommando blokke kan indlejres i hinanden i starten af en blok kan variabelerklæringer forekomme!! disse variable er lokale for blokken (deres scope er blokken)

31 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme blok = antal kommandoer omkranset af { og en blok behandles som én kommando blokke kan indlejres i hinanden i starten af en blok kan variabelerklæringer forekomme!! disse variable er lokale for blokken (deres scope er blokken) #include < s t d i o. h> i n t main ( void ) { / blok. c / i n t a=5; p r i n t f ( " Før : a==%d \ n ", a ) ; { / en blok / i n t a=7; / d e k l a r a t i o n / p r i n t f ( " I : a==%d \ n ", a ) ; p r i n t f ( " E f t e r : a==%d \ n ", a ) ; #include < s t d i o. h> i n t main ( void ) { / blok2. c / i n t a=5; p r i n t f ( " Før : a==%d \ n ", a ) ; { / en blok / a=7; / assignment! / p r i n t f ( " I : a==%d \ n ", a ) ; p r i n t f ( " E f t e r : a==%d \ n ", a ) ; return 0; return 0; 25 / 81

32 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme en else knytter sig altid til den inderste if brug kommandoblokke for at undgå tvivl! 26 / 81 Dangling else -problemet: i f ( a == 1) i f ( b == 2) p r i n t f ( "A" ) ; else p r i n t f ( "B" ) ; i f ( a == 1) { i f ( b == 2) { p r i n t f ( "A" ) ; else { p r i n t f ( "B" ) ; ja a==1 nej ja a==1 nej ja b==2 nej ja b==2 nej printf("b") printf("a") printf("b") printf("a")

33 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme Hvad hvis der er flere end to valgmuligheder? Brug switch! #include < s t d i o. h> i n t main ( void ) { / switch. c / i n t a ; char dyr ; p r i n t f ( " Giv mig et h e l t a l! \ n " ) ; scanf ( "%d ", &a ) ; switch ( a ) { case 1: dyr= " hest " ; break ; case 2: dyr= " g r i s " ; break ; case 3: dyr= " abe " ; break ; default : dyr= " ko " ; break ; p r i n t f ( " \ ndu er en %s! \ n ", dyr ) ; return 0; 27 / 81

34 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme switch ( u d t r y k ) { case const1 : command1 ; case const2 : command1 ;... case constn : commandn ; default : command ; først beregnes udtryk. Resultatet skal være et heltal eller noget der ligner (f.x. en char) udtryk == const i command i udføres. Herefter udføres command i+1 osv. udtryk!= const i for alle i default-kommandoen udføres, og herefter de efterfølgende! Hvis der ingen default er, gøres ingenting. man ønsker næsten altid at afslutte et case med en break-kommando; så springes de efterfølgende kommandoer over. 28 / 81

35 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme while ( udtryk ) kommando ; først beregnes udtryk hvis udtryk er sandt, udføres kommando, og løkken startes forfra hvis udtryk er falsk, afsluttes løkken nej udtryk ja kommando #include < s t d i o. h> i n t main ( void ) { / while. c / i n t h = 0; while ( h!= 1234) { p r i n t f ( " I n d t a s t det hemmelige h e l t a l : " ) ; scanf ( "%d ", &h ) ; p r i n t f ( " \ nhurra! \ n " ) ; return 0; 29 / 81

36 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme for ( i n i t ; c o n d i t i o n ; update ) kommando ; (den mest generelle løkkekonstruktion i C) 1 først udføres init 2 så beregnes condition, og hvis den er falsk, afbrydes 3 kommando udføres 4 update udføres, og vi springer tilbage til trin 2. #include < s t d i o. h> i n t main ( void ) { / f o r. c / i n t i = 1; p r i n t f ( "%d e l e f a n t \ n ", i ) ; for ( i = 2; i <=10; i ++) { p r i n t f ( "%d e l e f a n t e r \ n ", i ) ; return 0; 30 / 81

37 Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Opsumme 31 / 81 Udvælgelse If Switch Gentagelse While For Struktur Komando blokke

38 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 32 / 81 Funktioner 23 Funktioner 24 Eksempel 25 Parametre 26 Rekursive funktioner 27 Parametre til main()

39 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 33 / 81 at opdele et større program i mindre enheder funktioner abstraktion! top-down-programmering type navn ( parametre ) { d e k l a r a t i o n e r ; kommandoer ;

40 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 34 / 81 Et program der indlæser et tal; hvis tallet er primtal udskrives PRIMA, ellers udskrives næste primtal: #include < s t d i o. h> i n t main ( void ) { / prim. c / i n t t a l ; t a l = i n d l a e s ( ) ; / / et f u n k t i o n s k a l d i f ( prim ( t a l ) ) { / / et f u n k t i o n s k a l d p r i n t f ( "PRIMA \ n " ) ; else { t a l = nextprime ( t a l ) ; / / endnu et p r i n t f ( " Next prime i s %d \ n ", t a l ) ; return 0;

41 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 35 / 81 At indlæse et heltal: / en f u n k t i o n s d e f i n i t i o n / i n t i n d l a e s ( void ) { i n t t a l ; p r i n t f ( " \ nenter a number : " ) ; scanf ( "%d ", & t a l ) ; return t a l ;

42 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 36 / 81 Find ud af om et heltal er et primtal (Er det den bedste måde at gøre det på?): i n t prim ( i n t t a l ) { i n t isprime= 1; i n t i ; for ( i = 2; i <= t a l 1; i ++) { i f ( t a l % i == 0) { isprime = 0; break ; return isprime ; break: Springer ud af en switch, while, do eller for

43 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 37 / 81 Returner næste primtal: i n t nextprime ( i n t t a l ) { t a l ++; while (! prim ( t a l ) ) { t a l ++; return t a l ; Bemærk genbrug af prim-funktionen.

44 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() Funktioner skal erklæres før de bliver brugt: #include < s t d i o. h> i n t i n d l a e s ( void ) ; i n t prim ( i n t t a l ) ; i n t nextprime ( i n t t a l ) ; i n t main ( void ) { / prim. c / i n t t a l ; t a l = i n d l a e s ( ) ; / / et f u n k t i o n s k a l d i f ( prim ( t a l ) ) { / / et f u n k t i o n s k a l d p r i n t f ( "PRIMA \ n " ) ; else { t a l = nextprime ( t a l ) ; / / endnu et p r i n t f ( " Next prime i s %d \ n ", t a l ) ; return 0; 38 / 81

45 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 39 / 81 Hele programmet: prim.c

46 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 40 / 81 type navn ( parametre ) { d e k l a r a t i o n e r ; kommandoer ; En parameter i en funktionsdefinition kaldes en formel parameter. En formel parameter er et variabelnavn. En parameter i et funktionskald kaldes en aktuel parameter. En aktuel parameter er et udtryk der beregnes ved funktionskaldet.

47 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 40 / 81 type navn ( parametre ) { d e k l a r a t i o n e r ; kommandoer ; Antallet og typer af aktuelle parametre i kaldet skal modsvare antallet og typer af formelle parametre i definitionen. definition: i n t days_per_month ( i n t m, i n t y ) { kald: dmax= days_per_month ( m, y ) ;

48 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 40 / 81 type navn ( parametre ) { d e k l a r a t i o n e r ; kommandoer ; Antallet og typer af aktuelle parametre i kaldet skal modsvare antallet og typer af formelle parametre i definitionen. I C overføres funktionsparametre som værdiparametre. Dvs. værdien af parametren kopieres til brug i funktionen, ændringer af værdien har ingen indvirkning på programmet udenfor funktionen, når funktionskaldet ender, ophører værdien med at eksistere.

49 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 40 / 81 type navn ( parametre ) { d e k l a r a t i o n e r ; kommandoer ; Antallet og typer af aktuelle parametre i kaldet skal modsvare antallet og typer af formelle parametre i definitionen. I C overføres funktionsparametre som værdiparametre. Dvs. værdien af parametren kopieres til brug i funktionen, ændringer af værdien har ingen indvirkning på programmet udenfor funktionen, når funktionskaldet ender, ophører værdien med at eksistere. Dette kan omgåes ved brug af pointers

50 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 40 / 81 type navn ( parametre ) { d e k l a r a t i o n e r ; kommandoer ; Antallet og typer af aktuelle parametre i kaldet skal modsvare antallet og typer af formelle parametre i definitionen. I C overføres funktionsparametre som værdiparametre. Dvs. værdien af parametren kopieres til brug i funktionen, ændringer af værdien har ingen indvirkning på programmet udenfor funktionen, når funktionskaldet ender, ophører værdien med at eksistere. Her er den værdi der kopieres adressen på et sted i hukommelsen

51 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 41 / 81 rekursiv funktion = funktion der kalder sig selv Eksempel: fakultetsfunktionen: n! = n = n (n 1)! unsigned long f a k u l t e t ( unsigned long n ) { i f ( n == 1) { return 1; else { return n f a k u l t e t ( n 1 ) ; [fak.c] smart og kompakt måde at kode på (men nogle gange ikke særlig hurtig afvikling)

52 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 42 / 81 Eksempel: Fibonaccital: f 1 = 1 f 2 = 1 f n = f n 1 + f n 2 1, 1, 2, 3, 5, 8, 13, 21, 34,... unsigned long f i b o ( i n t n ) { switch ( n ) { case 1: case 2: return 1; break ; default : return f i b o ( n 1) + f i b o ( n 2 ) ; [fibo.c]

53 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 43 / 81 i n t main ( void ) { en funktion! Generel form: i n t main ( i n t argc, char argv ) { Parametrene tages fra kommandolinien. argc er antallet af argumenter argv er et array af strenge med alle argumenter; argv[0] er programnavnet Eksempel:./argtest 15 hest argc == 3 argv[0] == "argtest" argv[1] == "15" argv[2] == "hest" [argtest.c]

54 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() i f ( argc == 1) { p r i n t f ( " E r r o r : %s needs one argument \ n ", myself ) ; else { / convert argv [ 1 ] to i n t / t a l = s t r t o l ( argv [ 1 ], &endptr, 1 0 ) ; p r i n t f ( " \ nthe f a c t o r i a l of %l u i s %l u \ n ", t a l, f a k u l t e t ( t a l ) ) ; return 0; 44 / 81 Eksempel: Et fakultetsprogram der tager tallet som input på kommandolinien: #include < s t d i o. h> #include < s t d l i b. h> unsigned long f a k u l t e t ( unsigned long n ) ; i n t main ( i n t argc, char argv ) { / fak2. c / char myself= argv [ 0 ] ; unsigned long t a l ; char endptr ; / needed f o r s t r t o l /

55 Funktioner Eksempel Parametre Rekursive funktioner Parametre til main() 45 / 81 cstdlib/strtol/

56 Typer Typekonvertering Arrays 46 / 81 Datatyper 28 Typer 29 Typekonvertering 30 Arrays

57 Typer Typekonvertering Arrays 47 / 81 C er et programmeringssprog med statisk, svag typning: hver variabel har en bestemt type typen skal deklareres explicit og kan ikke ændres ved kompilering efterses om der er type-fejl mulighed for implicitte typekonverteringer også mulighed for eksplicitte typekonverteringer. En variabels type bestemmer hvilke værdier den kan antage i hvilke sammenhænge den kan bruges

58 Typer Typekonvertering Arrays 48 / 81 Typer i C: void, den tomme type skalære typer: aritmetiske typer: heltalstyper: short, int, long, char!; enum kommatals-typer: float, double, long double pointer-typer sammensatte typer: array-typer struct [typer.c]

59 Typer Typekonvertering Arrays 49 / 81 Boolean values

60 Typer Typekonvertering Arrays #include < s t d i o. h> typedef struct { unsigned i n t a l d e r ; i n t penge ; char navn ; Person ; i n t main ( void ) { / s t r u c t. c / Person p1 ; p1. a l d e r = 30; p1. penge = 300; p1. navn = " U l r i k Nyman" ; p r i n t f ( "%s er %d år og har %d penge ", p1. navn, p1. penge, p1. penge ) ; return ( 0 ) ; 50 / 81

61 Typer Typekonvertering Arrays 51 / 81 Type Bytes Bits Range short int ,768 -> +32,767 (32kb) unsigned short int > +65,535 (64Kb) unsigned int > +4,294,967,295 ( 4Gb) int ,147,483,648 -> +2,147,483,647 ( 2Gb) long int ,147,483,648 -> +2,147,483,647 ( 2Gb) signed char > +127 unsigned char > +255 float 4 32 double 8 64 long double 12 96

62 Typer Typekonvertering Arrays 52 / 81 implicitte konverteringer: integral promotion: short og char konverteres til int widening: en værdi konverteres til en mere præcis type narrowing: en værdi konverteres til en mindre præcis type. Information går tabt! [conversions.c] eksplicitte konverteringer: ved brug af casts for ( i = 2; i <= ( i n t ) s q r t ( x ) ; i ++) {

63 Typer Typekonvertering Arrays Et array er en tabel af variable af samme type der kan tilgås via deres indeks. i n t t a l [ 3 ] ; t a l [ 0 ] = 5 ; t a l [ 1 ] = 4 ; t a l [ 2 ] = t a l [ 0 ] + t a l [ 1 ] ; et array skal deklareres med angivelse af type, og helst også størrelse: type a[n] laveste indeks er 0, højeste er N 1 indgangene lagres umiddelbart efter hinanden 53 / 81

64 Typer Typekonvertering Arrays 54 / 81 Pas på! C ser ikke efter om et indeks man forsøger at tilgå ligger indenfor arrayets grænser: #include < s t d i o. h> i n t main ( void ) { / array bad. c / i n t a [ 3 ] ; / Menigsløst r e s u l t a t / p r i n t f ( "%d \ n ", a [ 3 ] ) ; / FARLIGT! / / a [ 3 ] = 17; / return 0; Programmet skriver i et hukommelsesområde det ikke har reserveret! I bedste tilfælde er det kun programmet der crasher...

65 Scope Storage class Memorisering 55 / 81 Scope 31 Scope 32 Storage class 33 Memorisering

66 Scope Storage class Memorisering Scope ( virkefelt ) af en variabel er de dele af programmet hvor variablen er kendt og tilgængelig. I C: Scope af en variabel er den blok hvori den er erklæret Variable i en blok skygger for variable udenfor der har samme navn huller i scope! #include < s t d i o. h> i n t main ( void ) { / blok. c / i n t a=5; p r i n t f ( " Før : a==%d \ n ", a ) ; Eksempel fra lektion 1: { / en blok / i n t a=7; / d e k l a r a t i o n / p r i n t f ( " I : a==%d \ n ", a ) ; p r i n t f ( " E f t e r : a==%d \ n ", a ) ; return 0; 56 / 81

67 Scope Storage class Memorisering Storage class af variable medvirker til at bestemme deres scope. auto (default): lokal i en blok static: lokal i en blok, men bibeholder sin værdi fra én aktivering af blokken til den næste. Eksempel: #include < s t d i o. h> i n t nextsquare ( void ) { s t a t i c i n t s= 0; s ++; return s s ; i n t main ( void ) { i n t i ; for ( i = 1; i <= 10; i ++) { p r i n t f ( "%d \ n ", nextsquare ( ) ) ; return 0; 57 / 81

68 Scope Storage class Memorisering 58 / 81 Tilbage til Fibonaccital: f 1 = 1 f 2 = 1 f n = f n 1 + f n 2 unsigned long f i b o ( i n t n ) { switch ( n ) { case 1: case 2: return 1; break ; default : return f i b o ( n 1) + f i b o ( n 2 ) ; Problem: kører meget langsomt pga. utallige genberegninger Løsning: Husk tidligere beregninger vha. et static array ( dynamisk programmering )

69 Scope Storage class Memorisering 59 / 81 Memoriseret udgave af fibo: unsigned long f i b o ( i n t n ) { unsigned long r e s u l t ; s t a t i c unsigned long memo[max] ; / t h i s gets i n i t i a l i s e d to 0! / switch ( n ) { case 1: case 2: return 1; break ; default : r e s u l t = memo[ n ] ; i f ( r e s u l t == 0) { / need to compute / r e s u l t = f i b o ( n 1) + f i b o ( n 2 ) ; memo[ n ] = r e s u l t ; return r e s u l t ; [fibo2.c]

70 Udseende Kommentarer Symbolske konstanter 60 / 81 Programmeringsstil 34 Udseende 35 Kommentarer 36 Symbolske konstanter

71 Udseende Kommentarer Symbolske konstanter 61 / 81 C er et programmeringssprog i fri format, dvs. stor frihed mht. formatering: mellemrum, tabs og linieskift kan indsættes (og udelades) næsten overalt. eget ansvar at koden er letlæselig! indentér! brug mellemrum omkring operatorer sæt afsluttende på deres egen linie inddel koden i logiske enheder vha. tomme linier en masse andre (og til dels modsigende!) konventioner find din egen stil!

72 Udseende Kommentarer Symbolske konstanter 62 / 81 Sætning: Kode er sværere at læse end at skrive. brug mange kommentarer. / en kommentar der f y l d e r 2 l i n i e r / (Det er ikke kun andre der skal kunne forstå din kode; måske er det dig selv der 4 uger efter forsøger at finde ud af hvad det her program gør.) kommentér hver enkelt funktion indsæt programmets navn i en kommentar skriv en kommentar om hvad det her program gør (medmindre programmet selv fortæller det) hvis en kodelinie tog specielt lang tid at skrive, er den nok også svær at forstå. Skriv en kommentar. fortæl hvad variablene betyder

73 Udseende Kommentarer Symbolske konstanter 63 / 81 Hvis der er en konstant i dit program der ikke er lig 0 eller 1, vil du sandsynligvis lave den værdi om senere. definér konstanten symbolsk vha. præprocessoren: # define SVAR 42 og referér til det symbolske navn i koden: p r i n t f ( " The answer i s %d ", SVAR ) ; Præprocessoren erstatter, som det første skridt, inden kompilering, alle forekomster af SVAR i koden med 42, undtagen hvis SVAR står som del af en streng.

74 Pointers Referenceparametre 64 / 81 Pointers 37 Pointers 38 Referenceparametre

75 Pointers Referenceparametre 65 / 81 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads.

76 Pointers Referenceparametre 65 / 81 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads. Declaring a pointer: i n t ptr_example ; / / Declares a p o i n t e r to an i n t.

77 Pointers Referenceparametre 65 / 81 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads. Declaring a pointer: i n t ptr_example ; / / Declares a p o i n t e r to an i n t. Getting the address of a variable: i n t my_int = 3; ptr_example = &my_int. / / makes ptr_example p o i n t to / / the address of my_int.

78 Pointers Referenceparametre 65 / 81 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads. Declaring a pointer: i n t ptr_example ; / / Declares a p o i n t e r to an i n t. Getting the address of a variable: i n t my_int = 3; ptr_example = &my_int. / / makes ptr_example p o i n t to / / the address of my_int. Dereferencing: ptr_example = 2; / / Sets the value of the data / / pointed to by ptr_example.

79 Pointers Referenceparametre 66 / 81 &j betegner adressen af variablen j pti betegner den værdi, som pti peger på &i er det samme som i (og & pti er det samme som pti) = dereference, & = reference

80 Pointers Referenceparametre 67 / 81 Eksempel: i n t ptr_example ; / / Declares a p o i n t e r to an i n t. i n t ptr_example ; / / Declares a p o i n t e r to an i n t. i n t ptr2, p t r 3 ; i n t main ( void ) { p t r 3 = 5; p t r 2 = 5; / / gives warning

81 Pointers Referenceparametre 68 / 81 *s should be sticky. Eksempel: i n t ptr_example ; / / Declares a p o i n t e r to an i n t. i n t ptr_example ; / / Declares a p o i n t e r to an i n t. i n t ptr2, p t r 3 ; i n t main ( void ) { p t r 3 = 5; p t r 2 = ( i n t ) 5; / / using a cast / / s t i l l not a good idea.

82 Pointers Referenceparametre 69 / 81 &j betegner adressen af variablen j pti betegner den værdi, som pti peger på &i er det samme som i (og & pti er det samme som pti) = dereference, & = reference

83 Pointers Referenceparametre 70 / 81 Problem: Funktioner i C kan ikke ændre på deres parametre (og give ændringer tilbage til hovedprogrammet) værdiparametre.

84 Pointers Referenceparametre 70 / 81 Problem: Funktioner i C kan ikke ændre på deres parametre (og give ændringer tilbage til hovedprogrammet) værdiparametre. Løsning: Kald funktionen med pointers som parametre:

85 Pointers Referenceparametre 70 / 81 Problem: Funktioner i C kan ikke ændre på deres parametre (og give ændringer tilbage til hovedprogrammet) værdiparametre. Løsning: Kald funktionen med pointers som parametre: Eksempel: en funktion der bytter om på to heltal: void swap ( i n t x, i n t y ) { i n t tmp ; tmp = x ; x = y ; y = tmp ; Bemærk at swap ikke laver om på de to pointers; kun på de værdier de peger på! [swap.c]

86 Pointers Referenceparametre 71 / 81 Eksempel: en funktion der bytter om på to heltal: i n t main ( void ) { i n t a = 3, b = 7; p r i n t f ( " Before : %d %d \ n ", a, b ) ; swap(&a, &b ) ; p r i n t f ( " A f t e r : %d %d \ n ", a, b ) ; return 0; void swap ( i n t x, i n t y ) { i n t tmp ; tmp = x ; x = y ; y = tmp ;

87 Arrays Arrays og pointere Eksempel Out of bounds 72 / 81 Arrays 39 Arrays 40 Arrays og pointere 41 Eksempel 42 Out of bounds

88 Arrays Arrays og pointere Eksempel Out of bounds Et array er en tabel af variable af samme type der kan tilgås via deres indeks. i n t t a l [ 3 ] ; t a l [ 0 ] = 5 ; t a l [ 1 ] = 4 ; t a l [ 2 ] = t a l [ 0 ] + t a l [ 1 ] ; et array skal deklareres med angivelse af type, og helst også størrelse: type a[n] laveste indeks er 0, højeste er N 1 indgangene lagres umiddelbart efter hinanden &a[k] == &a[0] + k sizeof(type) 73 / 81

89 Arrays Arrays og pointere Eksempel Out of bounds 74 / 81 I C er et array det samme som en konstant pointer til dets første indgang: #include < s t d i o. h> i n t main ( void ) { / array pt. c / i n t a [ 3 ], i ; a = 5; ( a + 1) = 4; ( a + 2) = a + ( a + 1 ) ; for ( i = 0; i < 3; i ++) { p r i n t f ( "%d : %d \ n ", i, a [ i ] ) ; return 0;

90 Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; a pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 75 / 81

91 Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; a pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 75 / 81

92 Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; a pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 75 / 81

93 Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; a pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 75 / 81

94 Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; a pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 75 / 81

95 Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; a pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 75 / 81

96 Arrays Arrays og pointere Eksempel Out of bounds #include < s t d i o. h> / array pt 2.c / i n t main ( void ) { i n t a [ 5 ] = { 1, 2, 3, 4, 5 ; i n t pta, i ; pta = a ; / or, pta= &a [ 0 ] ; / pta = 4; pta ++; pta = ( pta 1) 2; pta += 3; ( pta )++; p r i n t f ( " index : %d \ n ", pta a ) ; a pta for ( i = 0; i < 5; i ++) { p r i n t f ( " a[%d ] : %d \ n ", i, a [ i ] ) ; return 0; 75 / 81

97 Arrays Arrays og pointere Eksempel Out of bounds 76 / 81 Pas på! C ser ikke efter om et indeks man forsøger at tilgå ligger indenfor arrayets grænser: #include < s t d i o. h> i n t main ( void ) { / array bad. c / i n t a [ 3 ] ; / Menigsløst r e s u l t a t / p r i n t f ( "%d \ n ", a [ 3 ] ) ; / FARLIGT! / / a [ 3 ] = 17; / return 0; Programmet skriver i et hukommelsesområde det ikke har reserveret! I bedste tilfælde er det kun programmet der crasher...

98 Strenge Eksempel Noter string.h 77 / 81 Strenge 43 Strenge 44 Eksempel 45 Noter 46 string.h

99 Strenge Eksempel Noter string.h 78 / 81 En streng i C er et nulafsluttet array af chars: char s [ ] = { A, a, l, b, o, r, g, \0 ; eller tilsvarende, en pointer til char: char s ; s= " Aalborg " ; Følgende initialisering går også: char s [ ] = " Aalborg " ; Men som assignment er den gal: char s [ ] ; s= " Aalborg " ; [streng-init.c]

100 Strenge Eksempel Noter string.h p r i n t f ( "%s \ n ", s ) ; return 0; 79 / 81 Lav alle forekomster af a om til i : #include < s t d i o. h> i n t main ( void ) { / abrakadabra. c / char s [ ] = " abrakadabra " ; / v i r k e r / / char s= " abrakadabra " ; / / v i r k e r IKKE / char p ; p r i n t f ( "%s \ n ", s ) ; p = s ; while ( p!= \0 ) { i f ( p == a ) { p= i ; p++;

101 Strenge Eksempel Noter string.h 80 / 81 en streng kan defineres som et array af char eller en pointer til char begge er nulafsluttet: sidste indgang er \0 ( sentinel ) i strenge der er defineret som et array, kan tegnene ændres i strenge der er defineret som en pointer, kan tegnene ikke ændres tegnet a er forskellig fra strengen a : a = 97 a =[ a, \0 ] den tomme streng: =[ \0 ]

102 Strenge Eksempel Noter string.h Biblioteket string.h leverer funktioner til håndtering af strenge: int strcmp( char s, char t) sammenligner s og t i leksikografisk orden < 0: s kommer før t = 0: s er lig med t > 0: s kommer efter t unsigned int strlen( char s) returnerer antallet af tegn i s (minus \0 ) char strcpy( char s, char t) kopierer t til s returnerer en pointer til s Pas på: Hvis der ikke er plads nok i s, går det galt! char strcat( char s, char t) tilføjer t til slutningen af s returnerer en pointer til s samme kommentar som for strcpy og en del flere [streng-eks.c] 81 / 81

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 4 18. september 2009 Pointers Referenceparametre 2 / 19 Pointers 1 Pointers 2 Referenceparametre Pointers Referenceparametre 3 / 19 Husk: En variabel er en navngiven plads i computerens

Læs mere

Programmering i C. Lektion 4. 5. december 2008

Programmering i C. Lektion 4. 5. december 2008 Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )

Læs mere

Programmering i C. Lektion oktober 2008

Programmering i C. Lektion oktober 2008 Programmering i C Lektion 2 20 oktober 2008 Historie Processen At kompilere 2 / 23 Fra sidst 1 Historie 2 Processen 3 At kompilere Historie Processen At kompilere 3 / 23 ALGOL 60 1963 CPL 1966 BCPL 1969

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 2 14. september 2009 Kontrolstrukturer Udvælgelse Gentagelse Eksempler Kommentarer Format - scanf og printf 2 / 27 Fra sidst 1 Kontrolstrukturer 2 Udvælgelse 3 Gentagelse 4 Eksempler

Læs mere

Programmering i C. Lektion november 2008

Programmering i C. Lektion november 2008 Programmering i C Lektion 3 18. november 2008 Kontrolstrukturer Udvælgelse Gentagelse Eksempler Fra sidst 1 Kontrolstrukturer 2 Udvælgelse 3 Gentagelse 4 Eksempler Kontrolstrukturer Udvælgelse Gentagelse

Læs mere

Pointers. Programmering i C. 11. december Lektion 5. Eksempel: denne plads. Getting the address of a variable:

Pointers. Programmering i C. 11. december Lektion 5. Eksempel: denne plads. Getting the address of a variable: Programmering i C Lektion 5 11. december 2008 Pointers 1 Pointers 2 Referenceparametre 2 / 23 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads.

Læs mere

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale Programmering i C Lektion 1 16. september 2008 Målgruppe Indhold Form Materiale Kursusintroduktion 1 Målgruppe 2 Indhold 3 Form 4 Materiale 2 / 21 Målgruppe Indhold Form Materiale Folk der har styr på

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

1. Variable og assignment

1. Variable og assignment 1. Variable og assignment Dette er starten af det faglige indhold i første lektion af 'Programmering i C'. Før dette følger et antal mere praktiske slides, som vi ikke har medtaget i denne 'tematiske udgave'

Læs mere

Programmering i C. Kurt Nørmark 2005 Institut for Datalogi, Aalborg Universitet. Sammendrag

Programmering i C. Kurt Nørmark 2005 Institut for Datalogi, Aalborg Universitet. Sammendrag Programmering i C Kurt Nørmark 2005 Institut for Datalogi, Aalborg Universitet Sammendrag Dette er et undervisningsmateriale om introducerende programmering i et imperativt sprog. Mere konkret er det et

Læs mere

Sproget Rascal (v. 2)

Sproget Rascal (v. 2) Sproget Rascal (v. 2) Til brug i K1 på kurset Oversættere Opdateret 29/11 2004 Abstract Rascal er et simpelt Pascal-lignende imperativt sprog. Dette dokument beskriver uformelt Rascals syntaks og semantik

Læs mere

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

Sproget Limba. Til brug i G1 og K1. Dat1E 2003 Sproget Limba Til brug i G1 og K1 Dat1E 2003 Abstract Limba er et simpelt imperativt sprog med hoballokerede tupler. Dette dokument beskriver uformelt Limbas syntaks og semantik samt en fortolker for Limba,

Læs mere

Programmering i C Intro og grundlæggende C 5. marts 2007

Programmering i C Intro og grundlæggende C 5. marts 2007 Programmering i C Intro og grundlæggende C 5. marts 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan for kurset Ma. 5/3: Ma. 19/3: Ma. 2/4: To. 12/4: Formål, intro, grundlæggende Videre, sprogkonstruktioner

Læs mere

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) int wmid, wmevent; PAINTSTRUCT Introduktion ps; til HDC hdc; programmering med switch (message) case WM_COMMAND: wmid = LOWORD(wParam);

Læs mere

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang

Læs mere

Python programmering. Per Tøfting. MacFest

Python programmering. Per Tøfting. MacFest Python programmering MacFest 2005 Per Tøfting http://pertoefting.dk/macfest/ Indhold Måder at afvikle Python program på Variabler Data typer Tal Sekvenser Strenge Tupler Lister Dictionaries Kontrolstrukturer

Læs mere

Introduktion til C programmering

Introduktion til C programmering Introduktion til C programmering Rasmus Erik Voel Jensen Uge 17 voel@math.ku.dk Dagens forelæsning Formalia Indledende programmering, main, include, printf, variable, scanf, if-else, statements, eksempler

Læs mere

Programmering i C Videre med C (2 af 4) 19. marts 2007

Programmering i C Videre med C (2 af 4) 19. marts 2007 Programmering i C Videre med C (2 af 4) 19. marts 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan i dag Brush-up fra sidst Videre med C Kontrolløkker (while, for, ) Conditional Execution (if, if/else) Funktioner

Læs mere

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget

Læs mere

Noter til C# Programmering Selektion

Noter til C# Programmering Selektion Noter til C# Programmering Selektion Sætninger Alle sætninger i C# slutter med et semikolon. En sætning kontrollerer sekvensen i programafviklingen, evaluerer et udtryk eller gør ingenting Blanktegn Mellemrum,

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

Læs mere

Programmering for begyndere Lektion 2. Opsamling mm

Programmering for begyndere Lektion 2. Opsamling mm Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

Kursus 02199: Programmering. Kontrol af programudførelsen. afsnit 3.1-3.5. if (indkomst > 267000) topskat = (indkomst-267000) * 0.

Kursus 02199: Programmering. Kontrol af programudførelsen. afsnit 3.1-3.5. if (indkomst > 267000) topskat = (indkomst-267000) * 0. Kursus 02199: Programmering afsnit 3.1-3.5 Anne Haxthausen IMM, DTU 1. Kontrol af programudførn (afsnit 3.1) 2. Valg-sætninger (if og switch) (afsnit 3.2 og 3.3) 3. Bloksætninger (afsnit 3.2) 4. Logiske

Læs mere

//--------------------------------- Definition af porte og funktioner -------------------------

//--------------------------------- Definition af porte og funktioner ------------------------- Temeraturmåler (C-program).txt // Initialiserings-sekvens #include #pragma model=medium #pragma code=0x0000 #pragma xdata=0x4000 #pragma asm=on #pragma parameters=register //#define display P4

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4 LØKKER METODER C S HISTORIE Grundlæggende programmering Lektion 4 1 LEKTIER UML struktur diagrammer om biler 2 OPERATORER Syntaks til at udføre forskellige beregninger og handlinger Booleans og hvorfor

Læs mere

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato: 14-05-2003

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato: 14-05-2003 Side 1 af 8 Dato: 14-05-2003 Til Sigurd Som aftalt vil jeg her fremsende vores program til vores 80C535 kit og display. Det gik jo ud på at vi skulle starte med at få den til at intialiserer displayet,

Læs mere

Følgende definition fortæller i bund og grund, at en type er en mængde af værdier. Så simpelt er det faktisk.

Følgende definition fortæller i bund og grund, at en type er en mængde af værdier. Så simpelt er det faktisk. 17. Typer I lektionen, som starter med dette kapitel, studerer vi typer i C. Vi har allerede ved flere lejligheder set på typer. I denne lektion vil vi dog være mere systematiske end vi hidtil har været.

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Java syntax og style guide Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Brug

Læs mere

5. Kontrolstrukturer - Motivation og Oversigt

5. Kontrolstrukturer - Motivation og Oversigt 5. Kontrolstrukturer - Motivation og Oversigt I dette og de følgende afsnit vil vi - vigtigst af alt - møde forgreninger og løkker. Sådanne kaldes kontrolstrukturer, fordi vi med disse kan kontrollere

Læs mere

Online kursus: Programming with ANSI C

Online kursus: Programming with ANSI C Online kursus 365 dage DKK 1.999 Nr. 90198 P ekskl. moms Denne kursuspakke giver dig et bredt kendskab til sproget C, hvis standarder er specificeret af American National Standards Institute (ANSI). Kurserne

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. 10) til heltal (10). if (udtryk) else Programmering 1999 Forelæsning 2, fredag 3. september 1999 Betingede ordrer: if-, if Indlejrede betingede ordrer Løkker med begrænset iteration: for Løkker med ubegrænset iteration: while Betingede ordrer,

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13%

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13% Samuel Alberg Thrysøe, PhD, PostDoc, Kontakt info: Email: sat@iha.dk, Tlf: +45 25533552 2 4. 5 Waveform Chart Waveform Graph XY Graph Indicator Graph 4. 33% Waveform Chart Waveform Graph XY Graph Indicator

Læs mere

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

METODER ARV KLASSER. Grundlæggende programmering Lektion 5 METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen

Læs mere

Erklæring af variabler. Void indstil (Indstiller starttidspunkt og måleinterval).

Erklæring af variabler. Void indstil (Indstiller starttidspunkt og måleinterval). Indholdsfortegnelse til Bilag 1.: Side 1: Include filer. Side 1: Erklæring af variabler. Side 2: Void indstil (Indstiller starttidspunkt og måleinterval). Side 3: Void indstil (Indstiller starttidspunkt

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner Java Programmering En bog for begyndere Skrevet af Henrik Kressner Indholdsfortegnelse Introduktion...3 1 Introduktion til Java...4 1.1 Javakoden...4 1.2 Det første program...6 1.2 Skriv til skærmen...6

Læs mere

Kapitel 4 Løkker i C#

Kapitel 4 Løkker i C# Kapitel 4 Løkker i C# Løkker en vigtig del af alle programmeringssprog, og C# er ikke andeles. En løkke er en måde at udføre en del af koden gentagne gange. Ideen er at du fortsætter med at udføre en opgave

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

Læs mere

Sammenlign og byt. Et eksempel på dokumentering af et program

Sammenlign og byt. Et eksempel på dokumentering af et program Sammenlign og byt Et eksempel på dokumentering af et program Sammenlign og byt Jeg har valgt, som et eksempel, at dokumentere et meget enkelt program som indlæser to tal, sammenligner dem og udskriver

Læs mere

Lær Python dag 1 - modul 1

Lær Python dag 1 - modul 1 Lær Python dag 1 - modul 1 Introduktion, basis python Steffen Berg Klenow Jonas Bamse Andersen Syddansk Universitet Indhold 1. Velkommen 2. Programmering i python 3. Typer, variabler og udtryk 1 Velkommen

Læs mere

Videregående Programmering for Diplom-E Noter

Videregående Programmering for Diplom-E Noter Videregående Programmering for Diplom-E Noter 1. Uddelegering Ét af de væsentlige principper i objektorienteret programmering er, at enhver klasse selv skal kunne "klare ærterne". Enhver klasse skal altså

Læs mere

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Noter til C# Programmering Iteration

Noter til C# Programmering Iteration Noter til C# Programmering Iteration Programflow Programmer udfører det meste af deres arbejde vha. forgrening og løkker. Løkker Mange programmeringsproblemer kan løses ved at gentage en handling på de

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Klassevariabler og klassemetoder Levetid for variabler og parametre Virkefeltsregler Projektopgave Kaninjagt Lommeregner (for MAT studerende) Klassevariabler og klassemetoder

Læs mere

#AlleKanKode. Lektion 2 - Konstanter og Variabler

#AlleKanKode. Lektion 2 - Konstanter og Variabler #AlleKanKode Lektion 2 - Konstanter og Variabler Disclaimer / Ansvarsfraskrivelse Alt du deler og siger mm bliver optaget. Lad være med at dele privat oplysninger, adgangskoder, kreditkort oplysninger

Læs mere

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1 Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),

Læs mere

JavaScript. nedarvning.

JavaScript. nedarvning. JavaScript er et sprog, der kan give en hjemmeside mere funktionalitet og gøre den interaktiv, så den reagerer på læsernes handlinger. CGI (Common Gateway Interface) har hidtil været de protokoller, man

Læs mere

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13 1 Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Hvad er en makro... 10 Hvad kan du bruge en makro til... 10 Hvad en makro er (Visual Basic for Applications)... 11 Det hele sker

Læs mere

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner Forelæsning 4.1 Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner finden findalle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Afleveringsopgave

Læs mere

Internt interrupt - Arduino

Internt interrupt - Arduino Programmering for begyndere Brug af Arduino Internt interrupt - Arduino - Afslutning EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Intern interrupt Jeg vil rydde lidt op. Her er nogle punkter vil har glemt

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

#AlleKanKode. Lektion 4 - Kontrol flow

#AlleKanKode. Lektion 4 - Kontrol flow #AlleKanKode Lektion 4 - Kontrol flow Disclaimer / Ansvarsfraskrivelse Alt du deler og siger mm bliver optaget. Lad være med at dele privat oplysninger, adgangskoder, kreditkort oplysninger osv. Andre

Læs mere

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999 sammenligninger, hvor Programmering 1999 Forelæsning 17, tirsdag 2 november 1999 Søgning efter en given værdi i en tabel Lineær søgning og binær søgning Effektivitet: maskinuafhængig vurdering af køretid

Læs mere

21. Introduktion til arrays

21. Introduktion til arrays 21. Introduktion til arrays I dette kapitel vil vi introducere arrays. Vi vil se på de væsentligste overordnede egenskaber af arrays, og vi vil se på nogle forhold, som er specifikke for C. 21.1. Arrays

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Introduktion til funktioner, moduler og scopes i Python

Introduktion til funktioner, moduler og scopes i Python Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for

Læs mere

Kursusarbejde 2 Grundlæggende Programmering

Kursusarbejde 2 Grundlæggende Programmering Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................

Læs mere

Et alfabet er en ordnet mængde af bogstaver og andre tegn

Et alfabet er en ordnet mængde af bogstaver og andre tegn 16. Tegn og alfabet I dette kapitel studerer vi tegn. Tegn udgør grundbestanddelen i enhver form for tekstbehandling. I senere kapitler, nærmere betegnet kapitel 27 - kapitel 31, ser vi på sammensætningen

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Har en hvis lighed med divide-and-conquer: Begge opbygger løsninger til større problemer

Læs mere

Indhold. Maskinstruktur... 3. Kapitel 1. Assemblersprog...3. 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output...

Indhold. Maskinstruktur... 3. Kapitel 1. Assemblersprog...3. 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output... Indhold Maskinstruktur... 3 Kapitel 1. Assemblersprog...3 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output... 9 Kapitel 2. Maskinkode... 13 2.1 Den fysiske maskine... 13 2.2 Assemblerens

Læs mere

Kontrol-strukturer i PHP

Kontrol-strukturer i PHP Denne guide er oprindeligt udgivet på Eksperten.dk Kontrol-strukturer i PHP Denne artikel gennemgår kontrolstrukturer i PHP. 'if', 'switch', 'while' og 'for' bliver gennemgået. Den forudsætter lidt grundlæggende

Læs mere

#AlleKanKode. Lektion 3 - Operatorer

#AlleKanKode. Lektion 3 - Operatorer #AlleKanKode Lektion 3 - Operatorer Disclaimer / Ansvarsfraskrivelse Alt du deler og siger mm bliver optaget. Lad være med at dele privat oplysninger, adgangskoder, kreditkort oplysninger osv. Andre vil

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Crash Course i Programmering. HumTek, RUC

Crash Course i Programmering. HumTek, RUC Crash Course i Programmering HumTek, RUC Kursus mål At give en basal introduktion til programmering i sproget Processing At give et overblik over sprogets potentiale At have det sjovt :-) Kursus form Meget

Læs mere

Lektion 2. Grundlæggende programmering i VR

Lektion 2. Grundlæggende programmering i VR Lektion 2 Grundlæggende programmering i VR Plan for i dag Introduktion til Unity Vi laver vores første programmer Introduktion til C# Vi koder vores første af meget få ting uden Unity Behandling af data

Læs mere

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser 3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse

Læs mere

Input/Output: Brugergrænseflader. dopsys

Input/Output: Brugergrænseflader. dopsys Input/Output: Brugergrænseflader dopsys Interaktion med bruger Visse devices lægger et fundamentalt sæt af spilleregler for vores brug af computere Generisk tilbagemelding, hvad laver den : Billedskærm

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

En streng er en sekvens af data af samme type. En tekststreng er en streng af datatypen tegn

En streng er en sekvens af data af samme type. En tekststreng er en streng af datatypen tegn 27. Tekststrenge i C Denne lektionen er om tekststrenge, som både har berøringspunkter med arrays og pointers. Programmering med tekststrenge er vigtig i enhver form for tekstbehandling. Lektionen udspænder

Læs mere

Moduler i Standard ML

Moduler i Standard ML Moduler i Standard ML Hans Hüttel December 2001 I løbet af datalogikurset har vi haft glæde af en hel række forskellige standardmoduler som f.eks. Math, Int, Real og String. Disse moduler kan, har vi set,

Læs mere

DM13-3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode

DM13-3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode - 3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode Jacob Aae Mikkelsen - 191076 12. december 2005 1 Indhold 1 Opgave beskrivelse 2 2 Muligheder for optimering 2 2.1 efter branch.........................

Læs mere

C Programmering V1.37

C Programmering V1.37 Indholdsfortegnelse Indledning...3 1 I gang med C...5 1.2 Variabler...12 1.3 Intelligens...17 1.6 Afrunding...38 1.7 Opgaver...41 2 Grundbegreber...42 2.1 Blokke...42 2.2 Datatyper...47 2.3 Typekonvertering...49

Læs mere

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller.

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller. Flowchart Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller. Et godt program til at tegne flowcharts med er, EDGE-Diagrammer, eller Smartdraw.

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering 1 / 36 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 6, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

CPUer og maskinkode DM534. Rolf Fagerberg

CPUer og maskinkode DM534. Rolf Fagerberg CPUer og maskinkode DM534 Rolf Fagerberg CPUers opbygning En CPU er bygget op af elektriske kredsløb (jvf. sidste forelæsning), som kan manipulere bits. En CPU manipulerer flere bits ad gangen, deres antal

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Programmering C RTG - 3.3 09-02-2015

Programmering C RTG - 3.3 09-02-2015 Indholdsfortegnelse Formål... 2 Opgave formulering... 2 Krav til dokumentation af programmer... 3 ASCII tabel... 4 Værktøjer... 5 Versioner af ASCII tabel... 6 v1.9... 6 Problemer og mangler... 6 v2.1...

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere