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

Størrelse: px
Starte visningen fra side:

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

Transkript

1 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 af tegn til tekststrenge. Tegn organiseres i alfabeter, som er mængder af tegn. Dette er emnet for det første afsnit efter denne introduktion. I C er der en tæt sammenhæng mellem tegn og små heltal. Ofte er det bekvemt at notere sådanne tal enten oktalt eller hexadecimalt. I dette kapitel vil vi se hvorfor disse talsystemer er attraktive, og vi vil benytte lejligheden til at studerende opbygningen af talsystemer lidt nærmere. Vigtigst af alt gennemgår vi også i dette kapitel et antal programeksempler. Her skal fremhæves to, nemlig programmer som kan konvertere mellem forskellige talsystemer, og programmer som kan tælle tegn, ord og linier i en tekst Alfabet Lektion 4 - slide 2 I dette afsnit vil vi først fastslå betydningen af et alfabet, og dernæst vil vi på punktform diskutere forskellige egenskaber af alfabeter, og primært af det såkaldte ASCII alfabet. Et alfabet er en ordnet mængde af bogstaver og andre tegn ASCII alfabetet American Standard Code for Information Interchange Angiver tegnets placering i alfabetet ved at tildele tegnet en heltalsværdi Det oprindelige ASCII tegnsæt indeholder 128 tegn Det udvidede ASCII tegnsæt indeholder 256 tegn De danske tegn 'æ', 'ø', 'å', 'Æ', 'Ø' og 'Å' er placeret i det udvidede ASCII tegnsæt Appendix E side 609 i C by Dissection I afsnit 16.2 viser vi hvordan vi kan udskrive en tabel over tegnene i ASCII alfabetet. I det seneste årti er der defineret mere omfattende alfabeter, som indeholder tegn fra mange forskellige kulturer. Unicode er et sådant alfabet Datatypen char Lektion 4 - slide 3 75

2 Datatypen char er en type i C, ligesom f.eks. int, float, og double. Datatypen char repræsenterer mængden af mulige tegn i et standard alfabet Datatypen char Et tegn repræsenteres i én byte, som svarer til otte bits Otte bit tegn giver netop mulighed for at repræsentere tegnene det udvidede ASCII alfabet Typen char er en heltalstype i C En bit er den mindste informationsenhed i en computer. En bit kan skelne mellem to forskellige tilstande, som vi ofte benævner 0 og 1. Otte bit kaldes en byte, og da de alle individuelt og uafhængig af hinanden kan være enten 0 eller 1 kan der repræsenteres 2 8 = 256 mulige værdier i en byte. Det kan f.eks. være 256 mulige tegn. Videre endnu sammensættes andre informationsenheder af et helt antal byte. Eksempelvis er en int værdi i C typisk sammensat af fire bytes, således at vi kan arbejde med = 2 32 = forskellige int værdier i C. Herunder viser vi et C program, som udskriver en simpel version af de 128 ASCII tegn. I for-løkken gennemløbes et interval fra 0 til 127. Den røde del afgør om tegnet er printbart eller ej. Abstraktionen isgraph diskuteres i afsnit Den første if i forløkken sørger for linieskift for hvert tiende tegn. Det fremgår også af dette program, at i C skelner vi ikke skarpt mellem tal og tegn. #include <stdio.h> #include <ctype.h> int main(void) { int i; printf("\n"); printf("%3s", ""); /* print top line above table */ for (i = 0; i < 10; i++) printf("%6d",i); printf("\n"); for (i = 0; i < 128; i++){ /* print the table */ if (i % 10 == 0){ /* print leftmost column */ printf("\n"); printf("%3d", (i/10) * 10); if (isgraph(i)) printf("%6c", i); else printf("%6s", "NP"); printf("\n\n"); Program 16.1 Et C program som udskriver en ASCII tegntabel. 76

3 Outputtet fra program 16.1 vises i program 16.2 herunder. Som det fremgår af programmet ovenfor er en del tegn udskrevet som NP, hvilket betyder 'Non Printable'. NP tegn er netop de tegn, hvorpå isgraph(i) i program 16.1 returner false (altså 0) NP NP NP NP NP NP NP NP NP NP 10 NP NP NP NP NP NP NP NP NP NP 20 NP NP NP NP NP NP NP NP NP NP 30 NP NP NP! " # $ % & ' 40 ( ) * +, -. / : ; 60 < = A B C D E 70 F G H I J K L M N O 80 P Q R S T U V W X Y 90 Z [ \ ] ^ _ ` a b c 100 d e f g h i j k l m 110 n o p q r s t u v w 120 x y z { ~ NP Program 16.2 Udskriften fra programmet Tegnkonstanter (1) Lektion 4 - slide 4 Vi vil i dette afsnit se på forskellige notationer for konkrete tegn. Den mest basale notation er 'a', her for tegnet a. Printbare værdier i typen char noteres i enkelt quotes, eksempelvis 'a'. Det er vigtigt at kunne skelne mellem tegn, strenge og tal. Eksempelvis '7', "7" og 7. Andre mulige notationer for tegn: Escape notation af ikke printbare tegn Eksempler: '\n' '\t' '\'' '\\' Oktal escape notation Eksempler: '\12' '\141' '\156' Hexadecimal escape notation Eksempler: '\xa' '\x61' '\x6e' I første eksempel linie (ikke printbare tegn) viser vi escape notation for linieskift, tabulatortegnet, enkelt-anførselstegn, og bagvendt skråstreg. De tre tegn, som er noteret som oktal og hexadecimal notation er parvis ens. 77

4 Tegnene '\12' og '\xa' er begge tegn 10 i decimal notation, hvilket ifølge ASCII tabellen er newline tegnet, altså '\n'. Tegnene '\141' og '\x61' er begge tegn 97, som ifølge ASCII tegntabellen er 'a', altså et lille a. Tegnene '\156' og '\x6e' er begge tegn 110, som ifølge ASCII tegntabellen er 'n', altså et lille n. Vi vil senere i denne lektion udvikle et nyttigt program - program som kan omregne ovenstående oktale og hexadecimale tal til 'normale' decimale tal Tegnkonstanter (2) Lektion 4 - slide 5 Vi viser i dette afsnit et C program, som indeholder forskellige tegnkonstanter. I program 16.3 indeholder variablene c, d, e og f alle en værdi svarende til tegnet 'n'. Mere konkret indeholder disse variable heltalsværdien 110 (decimalt). Variablen x indeholder newline tegnet, svarende til heltalsværdien 10. Vi udskriver variablene c, d, e, f, og x som tegn (%c), som decimaltal (%d), som oktale tal (%o), og som hexadecimale tal (%x) i de fire printf kommandoer i program #include <stdio.h> int main(void) { char c = 'n', d = '\156', e = '\x6e'; int f = 110; char x = '\n'; printf("c = %c (%d, %o, %x) \n", c,c,c,c); printf("d = %c (%d, %o, %x) \12", d,d,d,d); printf("e = %c (%d, %o, %x) \xa", e,e,e,e); printf("f = %c (%d, %o, %x) \n", f,f,f,f); printf("x = %c (%d, %o, %x) \n", x,x,x,x); Program 16.3 Et C program med eksempler på forskellige tegn konstanter. Programmet fokuserer på tegnet 'n', som noteres i normal tegnnotation, oktalt, og hexadecimalt. Udskriften fra program 16.3 ses herunder. Læg mærke til, at når '\n' skrives ud som et tegn, bliver der skiftet linie. 78

5 c = n (110, 156, 6e) d = n (110, 156, 6e) e = n (110, 156, 6e) f = n (110, 156, 6e) x = (10, 12, a) Program 16.4 Output fra programmet Oktale og hexadecimal notation (1) Lektion 4 - slide 6 Vi har talt om binære, oktale og decimale tal i de forrige afsnit. Men det er ikke sikkert vi alle har en god forståelse af systematikken og ideen bag disse talsystemer. Ligeså vigtigt er det at forstå, hvorfor vi belemrer hinanden med disse fremmede notationer. Mange vil nok mene, at det ikke just er en hjælp til forståelsen. I dette og næste afsnit vil vi indse, at der rimelighed i galskaben... Herunder viser vi tallet 14 (decimalt) som binære tal. Vi grupperer de indgående bits i grupper af tre (anden linie) og i grupper af 4 (tredie linie). Nogle vil nok spørge, hvor og hvordan vi får øje på tallet 14. Forklaringen er at 14 = Vi ser på dette i detaljer i afsnit Figur 16.1 En illustration af binære, oktale og hexadecimale tal. Binære tal er relevante fordi digital hardware teknologi er i stand til at skelne mellem to tilstande: Høj og lav spænding, strøm/ikke strøm, etc. Abstrakt set kalder vi disse for 0 og 1. Al indsigt om binære tal - som et matematisk begreb - kan dermed direkte overføres til digital hardware. Oktale tal tillader ciffervis konvertering af det oktale til grupper af 3 bits. Dette er illustreret i figur Tilsvarende tillader hexadecimale tal ciffervis konvertering af de hexadecimale tal til grupper af 4 bits, hvilket også fremgår af figuren. Det er, med andre ord, meget enkelt for os mennesker at omforme et oktalt eller et hexadecimalt tal til binær notation. Dette er bestemt ikke tilfældet for decimale tal. Vi kan dog relativt let skrive et 79

6 program som udfører konverteringen. Vi viser hvordan i afsnit 16.10, nærmere betegnet i program Oktal og hexadecimal tal notation tillader en ciffervis konvertering til binær notation Oktale og hexedecimal notation (2) Lektion 4 - slide 7 I dette afsnit anskueliggør vi logikken bag de binære, oktale og hexedecimale talsystemer. Herunder ser vi hvordan decimaltallet 14 kan opløses efter basis 2, 8 og 16. Det er et matematisk faktum, at disse opløsninger er entydige. Vi vil starte med at konstatere, at decimaltallet 14 egentlig betyder Ganske tilsvarende forholder det sig når vi opløser tallet efter en anden basis end 10: Binære tal: Grundtal 2 Eksempel: 14 = Oktale tal: Grundtal 8 Eksempel: 14 = Hexadecimale tal: Grundtal 16 Eksempel: 14 = = e 16 0 Senere i denne lektion vil vi programmere funktioner der kan konvertere mellem talsystemerne Tegn aritmetik Lektion 4 - slide 8 Vi kan bruge tegn i både aritmetiske og logiske udtryk. Det er ikke så underligt, idet vi jo for længst har indset, at tegn i C blot repræsenteres som det tilsvarende tal fra ASCII tegntabellen. Det er muligt at udføre aritmetiske operationer på tegn - forstået som aritmetik på de underliggende ASCII værdier Herunder fortolker vi betydningen af en række forskellige udtryk, der har tegn som operander. 80

7 Addition af et tal til et tegn '0' + 7 == '7' Tegnet 7 positioner længere fremme i tegntabellen Subtraktion af et tal fra et tegn 'k' - 1 == 'j' Tegnet før k Subtraktion af to tegn 'a' - 'A' Afstanden mellem små og store bogstaver Sammenligning af to tegn 'a' < 'b' Tegnet a kommer før b. Vurdering af alfabetisk rækkefølge Klassificering af tegn Lektion 4 - slide 9 I dette afsnit vil vi diskutere en hierarkisk klassificering af tegn. Biblioteket ctype.h understøtter en række abstraktioner, som klassificerer tegn Tegn Kontrol tegn - iscntrl(c) Printbare tegn - isprint(c) Blanke tegn - isspace(c) Grafiske tegn - isgraph(c) Punkt tegn - ispunct(c) Alfanumeriske tegn - isalnum(c) Alfabetiske tegn - isalpha(c) Små bogstaver - islower(c) Store bogstaver - isupper(c) Numeriske tegn - isdigit(c) Vi kan tænke på ovenstående abstraktioner som funktioner fra biblioteket ctype. Typisk er disse dog implementeret som makroer, hvilke tekstuelt substitueres ind i stedet for kaldet. Dette er en helt anderledes mekanisme end kald af funktioner, som vi diskuterede generelt i afsnit 12.3 og eksemplificerede konkret i afsnit Brug af makroer giver effektive programmer, idet vi undgår et egentlig funktionskald. Der er dog også en række problemer forbundet med brug af makroer. Se appendix B i C by Dissection for nogle detaljer om dette. 81

8 16.9. Abstraktionerne getchar og putchar Lektion 4 - slide 10 Til historien om tegn hører også en lille beretning om hvordan enkelttegn kan udskrives og indlæses. Det sker med C funktionerne getchar og putchar. Abstraktionerne getchar og putchar giver mulighed for input og output af enkelttegn. getchar og putchar er lavniveau alternativer til scanf og printf. Som et eksempel på readchar ser vi på tegnvis indlæsning af heltal. Ved brug af scanf er det (nogenlunde) let og bekvemt at indlæse et heltal. Vi har efterhånden set flere gange, at det kan gøres med scanf("%d", &var). Dette kald af scanf overfører det indlæste heltal til variablen var. Vi vil nu antage, at vi ikke har scanf funktionen til rådighed, og at vi derfor selv skal programmere en funktion (eller rettere en procedure) som indlæser et heltal. I program 16.5 viser vi en basal udgave. I program 16.7 ser vi på en lidt mere udbygget version. int read_int(char *prompt){ int res = 0; char c; printf(prompt); while (isdigit(c = getchar())) res = res * 10 + (c - '0'); return res; Program 16.5 En funktion der læser et heltal som enkelttegn - basal udgave. I programmet vist ovenfor indlæser vi tegn i en for-løkke, med anvendelse af getchar. Læg mærke til, at vi faktisk læser tegnene i det logiske udtryk (den røde del) der kontrollerer while-løkken. Dette er en typisk udtryksform i C, også kaldet et mønster eller et idiom. I det blå assignment oparbejder vi det resulterende heltal. Oparbejdningen sker efter principperne i afsnit Under indlæsningen af cifre med getchar (den røde del) møder vi først de mest betydende cifre, og tilslut det mindst betydende ciffer. Hvis vi indtaster 123 vil res i første gentagelse i while-løkken få værdien 1. I andet gennemløb får res værdien 1*10 + 2, altså 12. I tredje og sidste gennemløb får res værdien 12*10 + 3, altså 123. Vi har altså hermed indset at indlæsning af tegnene 123 leder til beregningen af tallet 123. Voila! Nedenfor viser vi et helt C program, hvori funktionen readint fra program 16.5 indgår. Funktionen readint er vist med fed sort skrift i program

9 #include <stdio.h> int read_int(char*); int main(void) { int i, n = 0; for (i = 1; i <= 5; i++){ n = read_int("enter an integer: "); printf("decimal value: %d\n", n); int read_int(char *prompt){ int res = 0; char c; printf(prompt); while (isdigit(c = getchar())) res = res * 10 + (c - '0'); return res; Program 16.6 Funktionen read_int og en main funktion som kalder read_int 5 gange. Vi afslutter dette delafsnit med en lidt mere generel, og lidt mere robust implementation af funktionen readint. Udgaven herunder kan håndtere et + eller - fortegn af det indlæste tal. Funktionen er også lidt bedre til at læse 'resten af linien' efter der ikke er flere cifre. #include <stdio.h> int read_int(char*); int main(void) { int i, n = 0; for (i = 1; i <= 5; i++){ n = read_int("enter an integer: "); printf("decimal value: %d\n", n); int read_int(char *prompt){ int res = 0; char c; int sign = 1; printf(prompt); /* Handle initial sign, if any */ c = getchar(); if (c == '+') {sign = 1; c = getchar(); else if (c == '-') {sign = -1; c = getchar(); /* Read digits - first char is ready in c*/ 83

10 while (isdigit(c)){ res = res * 10 + (c - '0'); c = getchar(); /* read rest of line */ while (c!= '\n') c = getchar(); return sign * res; Program 16.7 En mere brugbar udgave med mulighed for fortegn og bedre linieafslutning Konvertering mellem talsystemer Lektion 4 - slide 11 I dette afsnit laver vi to nyttige programmer, som kan konvertere mellem talsystemer. Det første konverterer et tal fra et (næsten) vilkårligt talsystem til det sædvanlige 10-talsystem. Det næste omregner et tal fra 10-talsystemet til et andet talsystem. De første 10 cifre noteres med tegnene '0' - '9'. Vi har ikke flere naturlige cifre i ASCII tabellen, så derfor benytter vi de alfabetiske tegn 'a' - 'z' for de næste 26 cifre. Det betyder vi kan håndtere talsystemer op til basis 36. Den eneste årsag til at vi ikke kan gå højere op er at vi ikke har naturlig notation for mere end 36 forskellige cifre. Vi vil nu se på et program, der indlæser et tal i et n talsystem, og som konverterer det til et decimalt tal. Vi vil tilsvarende se på et program, der konverterer et decimalt tal til et tal i et andet talsystem. Programmerne illustrerer tillige getchar og putchar. Som det fremgår, tager programmet herunder et tal i et talsystem op til basis 36, og konverterer det til et decimaltal. Det betyder, at vi skal kunne håndtere input som både kan være normale cifre og bogstaver. Derfor læser vi cifrene enkeltvis med getchar (den blå del i program 16.8). Funktionen read_in_base indlæser således en række tegn, og det returnerer det decimaltal, som modsvarer de indlæste tegn i den base, der er overført som parameter til read_in_base. Det ville have været mere tilfredsstillende at overføre allerede indlæste cifre som en parameter til read_in_base. Generelt ønsker vi at begrænse de steder i vore programmer, som laver input og output. Det vil dog kræve programmering med arrays, som vi endnu ikke har set på. Med arrays ville vi kunne overføre en ordnet samling af cifre til funktionen, read_in_base, som så kunne returnere et tal. Dette ville være en renere abstraktion, end den vi faktisk har programmeret nedenfor. Arrays mødes første gang i kapitel 21 i dette materiale. 84

11 #include <stdio.h> #include <stdlib.h> int read_in_base(int); void skip_rest_of_input_line (void); int main(void) { int i, n, base; printf("this PROGRAM CONVERTS NUMBERS IN A" "GIVEN BASE TO A DECIMAL NUMBER.\n\n"); do { printf("enter number base (0 terminates the program, max 36): "); scanf("%d", &base); skip_rest_of_input_line(); if (base > 0){ printf("enter a non-negative number to be converted" "to decimal notation: "); n = read_in_base(base); if (n >= 0) printf("the decimal number is: %d\n", n); else { printf("you have typed an illegal ciffer - TRY AGAIN\n"); skip_rest_of_input_line(); while (base > 0); /* Read a number in base and return the corresponding decimal number. Return -1 if erroneous input is encountered. */ int read_in_base(int base){ int ciffer_number, res = 0, done = 0; char ciffer; do { ciffer = getchar(); if (ciffer >= '0' && ciffer <= '9') ciffer_number = ciffer - '0'; else if (ciffer >= 'a' && ciffer <= 'z') ciffer_number = ciffer - 'a' + 10; else if (ciffer == '\n') done = 1; else return -1; if (ciffer_number >= 0 && ciffer_number < base){ if (!done) res = res * base + ciffer_number; else return -1; while (!done); return res; void skip_rest_of_input_line (void){ char c; 85

12 c = getchar(); while (c!= '\n') c = getchar(); Program 16.8 resultatet. Et C program der omregner et tal fra et talsystem til titalsystemet og udskriver Lad os lige diskutere et par detaljer i program I funktionen read_in_char bruger vi en do løkker, idet vi altid skal læse mindst ét tegn. If-else kæden skelner mellem normale cifre og udvidede cifre, idet ciffer_number beregnes forskelligt i de to tilfælde. Der er også et tilfælde som fanger end of line tegnet, og som sætter den boolske done til true (1). Hvis vi falder hele vejen gennem if-else kæden til den afsluttende else returnerer vi umiddelbart -1, som tegn på en fejl. I dette tilfælde har vi mødt et ulovligt ciffertegn. Den sidste if i do-løkken tester om det indlæste ciffer er ikke-negativ og mindre end base. Hvis dette ikke er tilfældet returnerer vi igen umiddelbart -1. Da jeg programmerede read_in_base måtte jeg gøre mig umage for at styre tilfældene 1. Udelukkende lovlige cifre afsluttet med '\n', som resulterer i normal afslutning af do løkken styret ved hjælp af variablen done. 2. Forekomst af et ulovligt ciffertegn, f.eks. '?' 3. Forekomst af et ciffertegn der er større end base. Normalt bestræber vi os på kun at have ét returneringspunkt i en funktion. Jeg fandt det imidlertid mest naturligt at have flere return kommandoer i read_in_base, idet én returnering til sidst i funktionen gjorde styringen af kontrollen for kompliceret. I programmet herefter programmerer vi den omvendte konvertering. Her indlæser vi i main et normal heltal, som overføres til C funktionen print_in_base. Vi indlæser også et basistal for det talsystem, hvortil vi ønsker at konvertere. Funktionen print_in_base finder cifrene i tallet i det andet talsystem. Endvidere udskriver funktionen de beregnede cifre. 86

13 #include <stdio.h> void print_in_base(int, int); int main(void) { int i, n, base; for (i = 1; i <= 5; i++){ printf("enter positive decimal number " "and number base (at least two): "); scanf(" %d %d", &n, &base); print_in_base(n, base); printf("\n"); /* Convert the decimal number n to base and print the result */ void print_in_base(int n, int base){ int ciffer; if (n > 0){ ciffer = n % base; /* find least significant ciffer */ /* RECURSIVELY, find and print most significant ciffers */ print_in_base(n / base, base); /* print least significant ciffer */ if (ciffer >= 0 && ciffer <= 9) putchar('0' + ciffer); else if (ciffer >= 10 && ciffer <= 36) putchar('a' + ciffer - 10); else putchar('?'); Program 16.9 Et C program der omregner et tal fra titalsystemet til et andet talsystem og udskriver resultatet. Igen et par detaljer om konverteringen. I print_in_base finder vi først det mindst betydende ciffer. Ved at studere formlen for opløsningen af et tal ud fra et grundtal i et talsystem (se afsnit 16.6) ser man let at det mindst betydende ciffer fås ved at finde resten af tallet ved division med grundtallet base. Vi husker på det mindst betydende ciffer i variablen ciffer. Den resterende del af problemet kan løses rekursivt, ved at kalde print_in_base på n / base. Dette vil give de mest betydende cifre, som vi udskriver før vi udskriver det mindst betydende ciffer, som stadig findes i variablen ciffer. I stedet for at bruge rekursion kunne vi lave en løkke. Den rekursive løsning er dog 'fiks', idet den gør det let og naturligt at udskrive cifrene i den ønskede rækkefølge (mest betydende før mindre betydende). 87

14 Eksempel: Kopiering af fil Lektion 4 - slide 12 Vi finder det naturligt, ligesom i bogen, at vise hvordan vi laver et filkopierings program. Som vi ser i program er dette meget let i C. Med brug af file redirection, ala program kan vi tilmed nærme os en ganske bekvem aktivering af filkopieringen. #include <stdio.h> int main(void) { int c; Det er meget simpelt at skrive et program som kopierer en fil til en anden fil. while ((c = getchar())!= EOF) putchar(c); Program Et C program der kopierer input til output. normark$ gcc -o copy-file copy.c normark$ copy-file < copy.c > copy-of-copy.c Program Oversættelse og udførelse af copy.c Eksempel: Optælling af ord Lektion 4 - slide 13 Vi slutter af med at se på lærebogens eksempel på et program, der tæller antal af ord i en fil. Programmet er vist i program Jeg synes ikke at programmet er vellykket. Der er i alt tre løkker involveret. Ét i main, og to indlejrede løkker i found_next_word. Der skal konstant holdes udgik efter end of file, hvilket skæmmer alt for meget. Man kan forestille sig at programmet startede simpelt, ud fra en rimelig idé om abstraktionen found_next_word. Men resultatet virker som en lappeløsning, hvor programmøren er kommet i tanker om flere og flere nødvendige specialtilfælde i kroppen af found_next_word. 88

15 #include <ctype.h> #include <stdio.h> int found_next_word(void); int main() { int word_cnt = 0; while (found_next_word() == 1) ++word_cnt; printf("\nnumber of words = %d\n\n", word_cnt); int found_next_word(void) { int c; while (isspace(c = getchar())) ; /* skip white space */ if (c!= EOF) { /* found a word */ while ((c = getchar())!= EOF &&!isspace(c)) ; /* skip all except EOF and white space */ return 1; Program Bogens udgave af ordtællingsprogrammet - et uskønt program. Vi viser et tilsvarende eksempel fra kernighan og Ritcies oprindelige bog om C, The C Programming Language. Dette program har én løkke, som læser alle tegn indtil end of file. Programmet tæller både tegn, liner og ord. Ordtællingen er det mest komplicerede element, som jeg derfor forklarer. Variablen state bruges til formålet. state starter med at være OUT, hvilket betyder at vi er uden for et ord. OUT er en symbolsk konstant, defineret med define. Når vi i tilstanden OUT møder det første tegn i et ord tælles variablen nw op. Vi skifter også tilstand til IN. Vi tæller altså et ord ved indgangen til ordet. I tilstand IN bliver nw ikke talt yderligere op. Først når vi forlader ordet, og kommer i tilstand OUT, har vi mulighed for at møde det næste ord, som så bliver talt. 89

16 #include <stdio.h> #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */ int main(void) { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while ((c = getchar())!= EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' c == '\n' c == '\t') state = OUT; else if (state == OUT) { /* entering a word */ state = IN; ++nw; printf("%d %d %d\n", nl, nw, nc); Program Kernighan og Ritchies's tilsvarende, men mere generelle program. Dette afslutter vores behandling af tegn. 90

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

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

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

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) Efterår 2009 1 Simpel aritmetik på maskinniveau I SCO, appendix A, er det beskrevet, hvordan man adderer ikke-negative heltal

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

(Positions) Talsystemer

(Positions) Talsystemer (Positions) Talsystemer For IT studerende Hernik Kressner Indholdsfortegnelse Indledning...2 Positions talsystem - Generelt...3 For decimalsystemet gælder generelt:...4 Generelt for et posistionstalsystem

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

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

Repræsentation af tal

Repræsentation af tal Repræsentation af tal DM534 Rolf Fagerberg 1 / 18 Mål Målet for disse slides er at beskrive, hvordan tal repræsenteres som bitmønstre i computere. Dette emne er et uddrag af kurset DM548 Computerarkitektur

Læs mere

ITS MP 013. Talsystemer V009. Elevens navn. IT Skolen Boulevarden 19A-C 7100 Vejle Tel.:+45 76 42 62 44

ITS MP 013. Talsystemer V009. Elevens navn. IT Skolen Boulevarden 19A-C 7100 Vejle Tel.:+45 76 42 62 44 ITS MP 013 V009 Elevens navn IT Skolen Boulevarden 19A-C 7100 Vejle Tel.:+45 76 42 62 44 ITS MP 013 Udarbejdet af Søren Haahr, juni 2010 Copyright Enhver mangfoldiggørelse af tekst eller illustrationer

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

Repræsentation af tal

Repræsentation af tal Repræsentation af tal DM534 Rolf Fagerberg Mål Målet for disse slides er at beskrive, hvordan tal repræsenteres som bitmønstre i computere. Dette emne er et uddrag af kurset DM548 Computerarkitektur og

Læs mere

Repræsentation af tal

Repræsentation af tal Repræsentation af tal DM534 Rolf Fagerberg Bitmønstre 01101011 0001100101011011... Bitmønstre skal fortolkes for at have en betydning: Tal (heltal, decimaltal (kommatal)) Bogstaver Computerinstruktion

Læs mere

Repræsentation af tal

Repræsentation af tal Repræsentation af tal DM526 Rolf Fagerberg, 2009 Bitmønstre 01101011 0001100101011011... Bitmønstre skal fortolkes for at have en betydning: Tal (heltal, kommatal) Bogstaver Computerinstruktion (program)

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

dcomnet-nr. 6 Talrepræsentation Computere og Netværk (dcomnet)

dcomnet-nr. 6 Talrepræsentation Computere og Netværk (dcomnet) dcomnet-nr. 6 Talrepræsentation Computere og Netværk (dcomnet) Efterår 2009 1 Talrepræsentation På maskinkodeniveau (Instruction Set Architecture Level) repræsenteres ordrer og operander ved bitfølger

Læs mere

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

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

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

Med TI-89 / TI-92 Plus kan du også sammenligne eller manipulere binære tal bit for bit.

Med TI-89 / TI-92 Plus kan du også sammenligne eller manipulere binære tal bit for bit. Kapitel 20: Talsystemer 20 Resumé af talsystemer... 344 Indtastning og omregning af talsystemer... 345 Udførelse af matematiske beregninger med hexadecimale og binære tal... 346 Sammenligning eller manipulation

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

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

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer BRP 13.9.2006 Tal. Om computer-repræsentation og -manipulation. Logaritmer 1. Opgaverne til i dag dækker det meste af stoffet 2. Resten af stoffet logaritmer binære træer 3. Øvelse ny programmeringsopgave

Læs mere

Bits, bit operationer, integers og floating point

Bits, bit operationer, integers og floating point Denne guide er oprindeligt udgivet på Eksperten.dk Bits, bit operationer, integers og floating point Denne artikel beskriver hvordan data gemmes som bits og hvordan man kan manipulere med bits. Den forudsætter

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

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

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

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

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

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

#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

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

APPENDIX A INTRODUKTION TIL DERIVE

APPENDIX A INTRODUKTION TIL DERIVE APPENDIX A INTRODUKTION TIL DERIVE z x y z=exp( x^2 0.5y^2) CAS er en fællesbetegnelse for matematikprogrammer, som foruden numeriske beregninger også kan regne med symboler og formler. Det betyder: Computer

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

Boolsk algebra For IT studerende

Boolsk algebra For IT studerende Boolsk algebra For IT studerende Henrik Kressner Indholdsfortegnelse Indledning...3 Logiske kredsløb...4 Eksempel:...4 Operatorer...4 NOT operatoren...5 AND operatoren...5 OR operatoren...6 XOR operatoren...7

Læs mere

It og informationssøgning Forelæsning december 2006 Jakob Grue Simonsen. Diverse emner af almen interesse

It og informationssøgning Forelæsning december 2006 Jakob Grue Simonsen. Diverse emner af almen interesse It og informationssøgning Forelæsning 12 6. december 2006 Jakob Grue Simonsen Diverse emner af almen interesse 1 Gemme objekter til filer I python skal en fil på disken åbnes, før man kan læse eller skrive

Læs mere

Talsystemer I V X L C D M 1 5 10 50 100 500 1000. Hvad betyder halvanden??. Kan man også sige Halvtredie???

Talsystemer I V X L C D M 1 5 10 50 100 500 1000. Hvad betyder halvanden??. Kan man også sige Halvtredie??? Romertal. Hvordan var de struktureret?? Systematisk?? I V X L C D M 1 5 10 50 100 500 1000 Regler: Hvis et lille tal skrives foran et stort tal trækkes tallet fra: IV = 5-1 = 4 Hvis et lille tal skrives

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

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

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004 Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen torsdag den 3. juni 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes

Læs mere

DRONNINGER (QUEENS) Opgave 1

DRONNINGER (QUEENS) Opgave 1 DRONNINGER (QUEENS) I denne opgave vil vi beskæftige os med det såkaldte 8-dronningeproblem, hvor man skal placerede 8 dronninger på et 8 x 8 skakbræt, således at ingen af dronningerne kan slå hinanden.

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

Boolsk algebra For IT studerende

Boolsk algebra For IT studerende Boolsk algebra For IT studerende Henrik Kressner Indholdsfortegnelse 1 Indledning...2 2 Logiske kredsløb...3 Eksempel:...3 Operatorer...4 NOT operatoren...4 AND operatoren...5 OR operatoren...6 XOR operatoren...7

Læs mere

Det endelige tal fremkommer ved at opstille bogstavkombinationer, hvor følgende regler gælder:

Det endelige tal fremkommer ved at opstille bogstavkombinationer, hvor følgende regler gælder: Talsystemer Et talsystem er betegnelsen for den måde, hvorpå tal kan skrives ud fra et grundtal. I dag anvendes i de fleste lande titalssystemet, hvor tallets placering har en værdi (positionssystem),

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Mandag den 27. maj 2002, kl. 9.00 13.00 Opgave 1 (25%) Denne opgave handler om multiplikation af positive heltal.

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

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

Om at udregne enkeltstående hexadecimaler i tallet pi

Om at udregne enkeltstående hexadecimaler i tallet pi Om at udregne enkeltstående hexadecimaler i tallet pi I 996 var det en sensation, da det kom frem, at det var lykkedes D. Bailey, P. Borwein og S. Plouffe at finde en formel for tallet π, med hvilken man

Læs mere

Anvendelse af del og hersk princippet involverer altså problemopdelning og løsningskombination.

Anvendelse af del og hersk princippet involverer altså problemopdelning og løsningskombination. 32. Rekursion Rekursive funktioner er uundværlige til bearbejdning af rekursive datastrukturer. Rekursive datastrukturer forekommer ofte - f.eks. både som lister og træer. Rekursiv problemløsning via del

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

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

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

3. Om skalamønstrene og den indfoldede orden

3. Om skalamønstrene og den indfoldede orden Dette er den tredje af fem artikler under den fælles overskrift Studier på grundlag af programmet SKALAGENERATOREN (forfatter: Jørgen Erichsen) 3. Om skalamønstrene og den indfoldede orden Lad os begynde

Læs mere

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. 26 Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. Hvad er programverifikation? Bevisregel for 'tom kommando'. Bevisregel for assignment. Bevisregler for selektive

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

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Formål: Indledning: Notationer

Formål: Indledning: Notationer Formål: Formålet med dette kompendium er at gennemgå de forskellige principper bag EDB printeren, således at læseren efter gennemgangen, har overblik over printeren som enhed. Indledning: I nudansk ordbog

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Alle hjælpemidler. Vægtning af opgaverne: Opgave

Læs mere

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. 22 Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. Indsættelse i hobe. Sletning af minimalt element i hobe. Repræsentation. 327

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

PUT og INPUT funktionerne

PUT og INPUT funktionerne PUT og INPUT funktionerne Af: Peter Kellberg Danmarks Statistik Sejrøgade 11 DK-2100 København Ø pke@dst.dk PUT og INPUT-funktionerne Denne artikel er foranlediget af en henvendelse til vores interne SAS

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

It og informationssøgning Forelæsning september 2006 Nils Andersen. Gentagelser og tekster

It og informationssøgning Forelæsning september 2006 Nils Andersen. Gentagelser og tekster It og informationssøgning Forelæsning 3 20. september 2006 Nils Andersen Gentagelser og tekster Dokumentationstekster Iteration (gentagelse) - med while - med for En- og todimensionale tabeller Typen af

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2017 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 6. april, 2017 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

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

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

Grundlæggende køretidsanalyse af algoritmer

Grundlæggende køretidsanalyse af algoritmer Grundlæggende køretidsanalyse af algoritmer Algoritmers effektivitet Størrelse af inddata Forskellige mål for køretid Store -notationen Klassiske effektivitetsklasser Martin Zachariasen DIKU 1 Algoritmers

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

DM507 Algoritmer og datastrukturer

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

Læs mere

It og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning

It og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning It og informationssøgning Forelæsning 2 13. september 2006 Nils Andersen Underprogrammer og betingelser Standardfunktioner, typeomsætning Funktionskald Moduler, lange navne Brugerdefinerede funktioner

Læs mere

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode.

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode. Denne guide er oprindeligt udgivet på Eksperten.dk I gang med Python I denne artikel vil jeg forsøge at give et kort og hurtigt indblik i programmeringssproget Python, der desværre er alt for overset.

Læs mere

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato:

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato: Side 1 af 13 Dato: 03-06-03 Til Sigurd Som aftalt får du nu tilbygningen til 80C535 kittet, keyboard og programmet med programopdatering. Den sidste opgave her, gik så ud på at tilslutte et tastatur, og

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

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

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer.

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer. 14 Algoritmeanalyse. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. O og Ω. Køretid for forskellige kontrolstrukturer. Eksempler på algoritmeanalyse. Eksponentiel og polynomiel

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

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 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

PHP guide af Daniel Pedersen

PHP guide af Daniel Pedersen PHP guide af Daniel Pedersen Side 1 af 12 Indholdsfortegnelse PHP guide af Daniel Pedersen Side 2 af 12 Indledning I dette hæfte finder du forklaringer til PHP funktioner, løkker, variabler samt en række

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

Aritmetiske Forelæsning Pr ogrammering operatorer tir 1999 sda præcedens september 1999 Logiske Sammenligningsoperatorer operatorer præcedens

Aritmetiske Forelæsning Pr ogrammering operatorer tir 1999 sda præcedens september 1999 Logiske Sammenligningsoperatorer operatorer præcedens Programmering 1999 Forelæsning 3, tirsdag 7. september 1999 Aritmetiske og logiske operatorer, præcedens Den indbyggede klasse String: tegnstrenge Metoder i klasser Metoder: returtype eller void Metoder:

Læs mere

Et SML-program til at finde rødder i en kontinuert funktion

Et SML-program til at finde rødder i en kontinuert funktion Et SML-program til at finde rødder i en kontinuert funktion Hans Hüttel Ole Høgh Jensen 11 januar 2002 Indhold 1 Om denne tekst 1 2 Hvad er bisektion? 1 3 Specifikation af vores program 2 4 SML-versionen

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

Maple. Skærmbilledet. Vi starter med at se lidt nærmere på opstartsbilledet i Maple. Værktøjslinje til indtastningsområdet. Menulinje.

Maple. Skærmbilledet. Vi starter med at se lidt nærmere på opstartsbilledet i Maple. Værktøjslinje til indtastningsområdet. Menulinje. Maple Dette kapitel giver en kort introduktion til hvordan Maple 12 kan benyttes til at løse mange af de opgaver, som man bliver mødt med i matematiktimerne på HHX. Skærmbilledet Vi starter med at se lidt

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

Introduktion. Philip Bille

Introduktion. Philip Bille Introduktion Philip Bille Plan Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Algoritmer og datastrukturer Hvad er det? Algoritmisk problem: præcist defineret relation mellem

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

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

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

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

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

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Institut for Matematik og Datalogi Syddansk Universitet, Odense Mandag den 6. juni 2016, kl. 15:00 19:00 Besvarelsen skal afleveres elektronisk. Se

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Alle skriftlige hjælpemidler. Vægtning af opgaverne:

Læs mere

Det er muligt at chekce følgende opg. i CodeJudge: og

Det er muligt at chekce følgende opg. i CodeJudge: og Det er muligt at chekce følgende opg. i CodeJudge:.1.7 og.1.14 Exercise 1: Skriv en forløkke, som producerer følgende output: 1 4 9 16 5 36 Bonusopgave: Modificer dit program, så det ikke benytter multiplikation.

Læs mere

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00 Page 1/12 Aarhus Universitet, Science and Technology, Computer Science Exam Wednesday 27 June 2018, 9:00-11:00 Allowed aid: None The exam questions are answered on the problem statement that is handed

Læs mere

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. 19 Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. Sammenligning af hashtabeller og søgetræer. 281 Hashing-problemet (1). Vi ønsker at afbilde n objekter på en tabel

Læs mere

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Philip Bille Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Algoritmer

Læs mere

brikkerne til regning & matematik tal og algebra preben bernitt

brikkerne til regning & matematik tal og algebra preben bernitt brikkerne til regning & matematik tal og algebra 2+ preben bernitt brikkerne. Tal og algebra 2+ 1. udgave som E-bog ISBN: 978-87-92488-35-0 2008 by bernitt-matematik.dk Kopiering af denne bog er kun tilladt

Læs mere