Velkommen til INF2100

Like dokumenter
Velkommen til INF2100

Velkommen til INF2100

Velkommen til INF2100. Bakgrunnen for INF2100. Hva gjør en kompilator? Prosjektet. Jeg er Dag Langmyhr

Velkommen til INF2100

Velkommen til INF2100

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

Velkommen til INF2100 Jeg er Dag Langmyhr

Velkommen til INF2100

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

Vektorer. Dagens tema. Deklarasjon. Bruk

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Dagens tema: INF2100. Utvidelser av Minila array-er. tegn og tekster. Flass- og Flokkode. prosedyrer. Prosjektet struktur. feilhåndtering.

Dagens tema INF1070. Vektorer (array-er) Tekster (string-er) Adresser og pekere. Dynamisk allokering

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

IN 147 Program og maskinvare

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Datamaskinen LC-2. Dagens tema. Tall i datamaskiner Hvorfor kan LC-2 lagre tall i intervallet ? Hvorfor er det akkurat celler i lageret?

Dagens tema. Datamaskinen LC-2 En kort repetisjon. Binære tall Litt om tallsystemer generelt. Binære tall. Heksadesimale og oktale tall

UNIVERSITETET I OSLO Institutt for informatikk. RusC og Rask. Kompendium til INF2100. Stein Krogdahl Dag Langmyhr

UNIVERSITETET I OSLO Institutt for informatikk. RusC og Rask. Kompendium til INF2100. Stein Krogdahl Dag Langmyhr

Offentlig utvalg for punktskrift, OUP Norsk standard for 8-punktskrift punktskrift 24. oktober 2004 sist endret

Velkommen til INF2100

Digital representasjon

UTKAST. RusC og Rask. Kompendium til INF2100. Stein Krogdahl Dag Langmyhr. UNIVERSITETET I OSLO Institutt for informatikk

C< og kompilatoren hans

Digital representasjon

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Dagens tema: Mer av det dere trenger til del 1

C og kompilatoren hans. Kompendium for INF2100

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Tema for siste forelesning:

ISO Dagens tema. Tegn. Uttrykk. I Minila lagres kun heltall, men de kan tolkes som tegn. Det siste om Minila.

Dagens tema: Resten av det dere trenger til del 1

En oppsummering (og litt som står igjen)

Dagens tema: 12 gode råd for en kompilatorskriver. Prosjektet. Koblingen mellom grammatikken og klasser. Utifra dette RusC-programmet:

Digital representasjon

Dagens tema: Resten av det dere trenger til del 1

Dagens tema: Sjekking

Del 3: Evaluere uttrykk

Dagens tema: 12 gode råd for en kompilatorskriver. Prosjektet. Modifikasjon av grammatikken. Utifra dette RusC programmet:

Kapittel 1 En oversikt over C-språket

Dagens tema: Generelt om variable. Kodegenerering. Deklarasjon av array er. Versjonskontroll. Oppslag i array er

C< og kompilatoren hans

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

Hvordan en prosessor arbeider, del 1

En snarvei til INF2100

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Programmeringsspråket C

Hjemmeeksamen 2 i INF3110/4110

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Dagens tema: Kodegenerering. Redigeringsverktøy. Versjonskontroll. Array-er Funksjoner og kall Hovedprogrammet Noen siste gode råd.

AlboC og kompilatoren hans. Kompendium for INF2100

En kompilator for Pascal. Kompendium for INF2100

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Velkommen. Velkommen til INF2270. Datamaskinarkitektur. Motto: Datamaskinen på tvers

Dagens tema: 12 gode råd for en kompilatorskriver

INF2100. Oppgaver 26. september til 1. oktober 2007

En kompilator for Pascal. Kompendium for INF2100

Tema for siste forelesning:

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Anbefalt litteratur: Pensum-bøker: Forelesere: Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Semantisk Analyse del I

Velkommen til INF Kompilatorteknikk

INF2100. Oppgaver uke 40 og

Dagens tema: Kodegenerering. Versjonskontroll. Variabler, spesielt vektorer Funksjoner, kall og parametre Noen siste gode råd.

Hva er kompilering? Dagens tema. En kompilator En kompilator leser Minila koden og lager Flok koden.

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Velkommen til INF Kompilatorteknikk

Obligatorisk Innlevering 2

Programmering. Carsten Wulff

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Velkommen til INF5110 Kompilatorteknikk

Tema for siste forelesning:

IN 147 Program og maskinvare. Velkommen til IN 147. Program- og maskinvare

Programmeringsspråket C

Del 1 En oversikt over C-programmering

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

Programmeringsspråket C

MAT-INF 1100: Obligatorisk oppgave 1

Dagens tema: Mer av det dere trenger til del 1

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Debugging. Tore Berg Hansen, TISIP

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Læringsmål og pensum. v=nkiu9yen5nc

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Transkript:

Kursopplegg Velkommen til INF2100 Jeg er (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får man det godkjent? Programmeringsspråket C En kort oversikt Syntaks Fire eksempler

Bakgrunnen Bakgrunnen for INF2100 I INF1000/INF1100 og INF1010 har dere lært å programmere, men bare små programmer (< 500 linjer). Hensikten med INF2100 er å gi mer programmeringstrening forstå mekanismene man trenger i større programmer (som objektorientering og moduler) gi trening i å lese og forstå andres programkode

Prosjektet Prosjektet Prosjektet er valgt fordi det har en nytteverdi i seg selv: Prosjekt: Skriv en kompilator for programmeringsspråket C. Dette gir forståelse for hvordan en kompilator fungerer kjennskap til maskin- og assemblerspråk eksempel på hvorledes et programmeringsspråk er definert og bygget opp

En kompilator Hva gjør en kompilator? C-program if (a == 0) ++a; Kompilator gcc En kompilator oversetter et program til en annen kode, oftest maskin- eller assemblerkode. Assemblerspråk cmpl $0,a Assembler as Maskinkode 00101111

Java-kompilatoren Java-program Bil a = new Bil(); Noen kompilatorer oversetter til en egen kode som tolkes av en interpreter. Kompilator javac Java byte-kode CAFE BABE 7501 (Det finnes også Java-kompilatorer som lager maskinkode, men de er ikke så vanlige.) Java-simulator java

Python-interpreteren Python-program if i.area() > max: Noen interpretere leser kildekoden direkte (men vil oversette den til en passende form internt). Python-interpreter python

C -kompilatoren Cb-program x = x+1; Kompilator cflat Opplegget for C ligner mye på det for C. Oppgaven deres er å skrive denne kompilatoren. Assemblerkode addl $1,%eax Assembler gcc Maskinkode 81 01 00 00...

Dataspråk Ulike programmeringsspråk I dette kurset skal vi innom flere språk: Java, som benyttes til all implementasjon. C («C flat»), som er målet for prosjektet. x86-maskinkode til datamaskinen vår assemblerspråket til x86.

Selve kurset Oppbyggingen av kurset Kurset har syv hovedkomponenter: Forelesningene holdes i utgangspunktet nesten hver uke. Gruppeøvelser 2 timer hver uke. Gruppearbeid for å løse oppgavene. Man jobber to og to (eller alene om man vil). Kompendiet gir en grundig innføring i C og prosjektet. Basiskoden er utgangspunktet for programmeringen deres. Den skal bare utvides, ikke endres! Nettsidene er også en viktig informasjonskanal. Nettforumet kan benyttes til informasjon og diskusjon.

Basiskoden Basiskoden Det er flere grunner til å dere skal basere prosjektet på en utdelt basiskode: Det gjør det lettere for dere å komme i gang. Det er nyttig å bli vant til å lese andres kode. Jeg har bevisst benyttet noen uvante kodeteknikker. Uten basiskode ville gruppelærerne fått en uoverkommelig jobb med rettingen.

Godkjenning Godkjenning av kurset Kurset har ikke karakterer, bare bestått/ikke bestått. Det er tre obligatoriske oppgaver. Når de er godkjent, er kurset godkjent.

Godkjenning Men... Mot slutten av semesteret vil noen bli plukket ut til en samtale om programmet de har laget. Dette kan man stryke på! Siden man normalt jobber i lag, forventes at begge har kjennskap til hovedstrukturen i programmet begge kan identifisere sin del av programmet (som skal være rundt halvparten) der de kan forklare nøye hvorfor koden er blitt slik den er.

Samarbeid Samarbeid og fusk Samarbeid og utveksling av ideer er bra! Kopiering og fusk er ikke bra! Gode råd for samarbeid Snakk gjerne med andre om ideer. Kopier aldri andres kode.

Programmeringshjelpemidler Ulike programmeringshjelpemidler Når man skal programmere et større prosjekt, trenger man hjelpemidler: et dokumentasjonsopplegg (à la JavaDoc) et versjonskontrollsystem (à la Subversion)... Dette kommer vi til mot slutten av kurset (når dere er motivert for å høre om dem ).

Eksempel 1 Programmeringsspråket C Dette språket («C flat») er en meget forenklet utgave av C spesiallaget til dette kurset. p0.cflat int main () { putchar(! ); } putchar(10);

Kompilering p0.cflat Programmet kompileres og kjøres med kommandoene $ cflat p0.cflat This is the Cb compiler (version 2012-08-16 on Linux) Parsing... checking... generating code... OK Running gcc -m32 -o p0 p0.s -L. -L/local/share/inf2100 -lcflat $./p0! eller $ java -jar /local/opt/inf2100/cflat.jar p0.cflat This is the Cb compiler (version 2012-08-16 on Linux) Parsing... checking... generating code... OK Running gcc -m32 -o p0 p0.s -L. -L/local/share/inf2100 -lcflat $./p0!

Kompilering Siden C er forenklet C, kan vi også bruke C-kompilatoren til å kompilere koden (om vi tar med en biblioteksfil): $ more p1.cflat int main () { int x; x = 5; putint(x+1); putchar(10); } $ gcc -m32 -x c -o p1 p1.cflat -L/local/share/inf2100 -lcflat $./p1 6

Syntaks for program Grammatikk Vi kan beskrive grammatikken til C med jernbanediagrammer: program var decl func decl Et program er bare (som i C) en samling deklarasjoner av variabler og funksjoner.

Syntaks for variable Variabler Variabler (enkle eller vektorer) deklareres slik vi er kjent med fra C: var decl type name [ number ] ; I C har vi bare to typer: type int double

Syntaks for funcdecl etc Funksjoner deklareres som i C og Java: func decl, type name ( param decl ) func body param decl type name func body { var decl statm list } Funksjonen main er hovedprogrammet.

Syntaks for statement C har færre setninger enn C og Java: statement empty statm assign-statm call-statm for-statm if-statm return-statm while-statm

Syntaks for functioncall Funksjonskall er som forventet call-statm function call ; function call name ( expr list ) expr list, expression

Feilsjekking Grammatikken forteller om et program er korrekt når det gjelder oppsettet (men det kan allikevel ha logiske feil). Dette programmet er ikke korrekt: 1 int main () 2 { 3 int x = 5; 4 putint(x+1); putchar(10); 5 } Kjøring gir $ cflat p1b.cflat This is the Cb compiler (version 2012-08-16 on Linux) Parsing... Cb error in line 3: A semicolontoken expected, but found a assigntoken!

Eksempel 2 p2.cflat int main () { int c; int kind; putchar(? ); c = getchar(); /* Read a letter. */ if (c >= a ) { /* Convert to uppercase (if required) */ c = c - 32; } kind = C ; /* Initially, assume a consonant. */ if (c == A ) { kind = V ; } else { if (c == E ) { kind = V ; } else { if (c == I ) { kind = V ; } else { if (c == O ) { kind = V ; } else { if (c == U ) { kind = V ; }}}}} } putchar(kind); putchar(10); exit(0);

Eksempel 2 $ cflat p2.cflat This is the Cb compiler (version 2012-08-16 on Linux) Parsing... checking... generating code... OK Running gcc -m32 -o p2 p2.s -L. -L/local/share/inf2100 -lcflat $./p2?f C Programmet leser en bokstav og avgjør om det en vokal eller konsonant.

Syntaks for if statm If-setninger If-setninger tester på 0 (usant) og 0 (sant). Legg merke til at det alltid skal være krøllparenteser. if-statm else-part if ( expression ) { statm list } else-part else { statm list } Setningslister inneholder 0 eller flere setninger: statm list statement

Syntaks for if statm Kommentarer Det finnes to former for kommentarer: /*... */ kan gå over flere linjer. #... er en ren kommentarlinje (om # står helt til venstre) (Disse inngår ikke blant jernbanediagrammene de håndteres på et annet plan.)

Syntaks for expression Uttrykk Grammatikken for expression er uventet komplisert, men det er en grunn til det. rel opr ==!= < expression term rel opr term <= > >=

Syntaks for expression term opr term term opr factor + - factor factor opr operand factor opr * /

Syntaks for operand og variable operand number variable function call ( expression ) variable name [ expression ]

April 1995, DFL, Ifi/UiO Syntaks for number number - digit 0-9 any char Et tegn (som a ) er bare en annen notasjon for et tall (97). 0 000 00 1 001 01 2 002 02 3 003 03 4 004 04 5 005 05 6 006 06 7 007 07 8 010 08 9 011 09 10 012 0A 11 013 0B 12 014 0C 13 015 0D 14 016 0E 15 017 0F 16 020 10 17 021 11 18 022 12 19 023 13 20 024 14 21 025 15 22 026 16 23 027 17 24 030 18 25 031 19 26 032 1A 27 033 1B 28 034 1C 29 035 1D 30 036 1E 31 037 1F ISO 8859 1 04 64 100 96 140 128 200 160 240 32 0 20 33 041! " # $ % & ( ) * +,. / 0 1 2 3 4 5 6 7 8 9 : ; < = >? 21 34 042 22 35 043 23 36 044 24 37 045 25 38 046 26 39 047 27 40 050 28 41 051 29 42 052 2A 43 053 2B 44 054 2C 45 055 2D 46 056 2E 47 057 2F 48 060 30 49 061 31 50 062 32 51 063 33 52 064 34 53 065 35 54 066 36 55 067 37 56 070 38 57 071 39 58 072 3A 59 073 3B 60 074 3C 61 075 3D 62 076 3E 63 077 3F @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ 40 65 101 41 66 102 42 67 103 43 68 104 44 69 105 45 70 106 46 71 107 47 72 110 48 73 111 49 74 112 4A 75 113 4B 76 114 4C 77 115 4D 78 116 4E 79 117 4F 80 120 50 81 121 51 82 122 52 83 123 53 84 124 54 85 125 55 86 126 56 87 127 57 88 130 58 89 131 59 90 132 5A 91 133 5B 92 134 5C 93 135 5D 94 136 5E 95 137 5F a b c d e f g h i j k l m n o p q r s t u v w x y z { } ~ 60 97 141 61 98 142 62 99 143 63 100 144 64 101 145 65 102 146 66 103 147 67 104 150 68 105 151 69 106 152 6A 107 153 6B 108 154 6C 109 155 6D 110 156 6E 111 157 6F 112 160 70 113 161 71 114 162 72 115 163 73 116 164 74 117 165 75 118 166 76 119 167 77 120 170 78 121 171 79 122 172 7A 123 173 7B 124 174 7C 125 175 7D 126 176 7E 127 177 7F 80 129 201 81 130 202 82 131 203 83 132 204 84 133 205 85 134 206 86 135 207 87 136 210 88 137 211 89 138 212 8A 139 213 8B 140 214 8C 141 215 8D 142 216 8E 143 217 8F 144 220 90 145 221 91 146 222 92 147 223 93 148 224 94 149 225 95 150 226 96 151 227 97 152 230 98 153 231 99 154 232 9A 155 233 9B 156 234 9C 157 235 9D 158 236 9E 159 237 9F A0 161 241 ª «± ² ³ µ ¹ º» ¼ ½ ¾ A1 162 242 A2 163 243 A3 164 244 A4 165 245 A5 166 246 A6 167 247 A7 168 250 A8 169 251 A9 170 252 AA 171 253 AB 172 254 AC 173 255 AD 174 256 AE 175 257 AF 176 260 B0 177 261 B1 178 262 B2 179 263 B3 180 264 B4 181 265 B5 182 266 B6 183 267 B7 184 270 B8 185 271 B9 186 272 BA 187 273 BB 188 274 BC 189 275 BD 190 276 BE 191 277 BF À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß 192 300 C0 193 301 C1 194 302 C2 195 303 C3 196 304 C4 197 305 C5 198 306 C6 199 307 C7 200 310 C8 201 311 C9 202 312 CA 203 313 CB 204 314 CC 205 315 CD 206 316 CE 207 317 CF 208 320 D0 209 321 D1 210 322 D2 211 323 D3 212 324 D4 213 325 D5 214 326 D6 215 327 D7 216 330 D8 217 331 D9 218 332 DA 219 333 DB 220 334 DC 221 335 DD 222 336 DE 223 337 DF à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ø ù ú û ü ý þ ÿ 224 340 E0 225 341 E1 226 342 E2 227 343 E3 228 344 E4 229 345 E5 230 346 E6 231 347 E7 232 350 E8 233 351 E9 234 352 EA 235 353 EB 236 354 EC 237 355 ED 238 356 EE 239 357 EF 240 360 F0 241 361 F1 242 362 F2 243 363 F3 244 364 F4 245 365 F5 246 366 F6 247 367 F7 248 370 F8 249 371 F9 250 372 FA 251 373 FB 252 374 FC 253 375 FD 254 376 FE 255 377 FF

Eksempel 3 p3.cflat int LF; int gcd (int a, int b) { while (a!= b) { if (a < b) { b = b-a; } else { a = a-b; } } return a; } int main () { int v1; int v2; int res; } LF = 10; putchar(? ); v1 = getint(); v2 = getint(); res = gcd(v1,v2); putint(res); putchar(lf);

Eksempel 3 Programmet finner største felles divisor: $ cflat p3.cflat This is the Cb compiler (version 2012-08-16 on Linux) Parsing... checking... generating code... OK Running gcc -m32 -o p3 p3.s -L. -L/local/share/inf2100 -lcflat $./p3?52 221 13

Biblioteket til C Biblioteket C kjenner til disse syv funksjonene: exit(status) getchar() getdouble() getint() putchar(n) putdouble(x) putint(n) Avslutter programmet Leser et tegn fra tastaturet Leser et flyttall fra tastaturet Leser et heltall fra tastaturet Skriver ut et tegn på skjermen Skriver ut et flyttall på skjermen Skriver ut et heltall på skjermen

Eksempel 4 Vektorer var decl type name [ number ] ; int a [3]; deklarerer a med elementene a[0], a[1] og a[2]. Det er ingen sjekk på grensene.

Eksempel 4 primes.cflat, del 1 # Program primes # ---------------- # # Finds all prime numbers up to 1000 (using the technique called # "the sieve of Eratosthenes") and prints them nicely formatted. int prime[1001]; /* The sieve */ int LF; /* LF */ int find_primes () { /* Remove all non-primes from the sieve: */ } int i1; int i2; for (i1 = 2; i1 <= 1000; i1 = i1+1) { for (i2 = 2*i1; i2 <= 1000; i2 = i2+i1) { prime[i2] = 0; } }

Eksempel 4 primes.cflat, del 2 int mod (int a, int b) { /* Computes a%b. */ } return a - a/b*b;

Eksempel 4 primes.cflat, del 3 int n_chars (int a) { /* How many positions are needed to print a? */ } if (a < 0) { return 1+n_chars(0-a); } if (a <= 9) { return 1; } return n_chars(a/10)+1;

Eksempel 4 primes.cflat, del 4 int pn (int v, int w) { /* Does a printf("%*d", w, v). */ int i; } for (i = n_chars(v)+1; i <= w; i = i+1) { putchar( ); } putint(v);

Eksempel 4 primes.cflat, del 5 int and (int a, int b) { /* Compute a && b. */ } if (a) { return b; } else { return 0; }

Eksempel 4 primes.cflat, del 6 int print_primes () { /* Print the primes, 10 on each line. */ } int n_printed; int i; n_printed = 0; for (i = 1; i <= 1000; i = i + 1) { if (prime[i]) { if (and(mod(n_printed,10)==0, n_printed>0)) { putchar(lf); } putchar( ); pn(i,3); n_printed = n_printed+1; } } putchar(lf);

Eksempel 4 primes.cflat, del 7 int main () { int i; LF = 10; /* Initialize the sieve by assuming all numbers >1 to be primes: */ prime[1] = 0; for (i=2; i<=1000; i=i+1) { prime[i] = 1; } } /* Find and print the primes: */ find_primes(); print_primes(); return 0;

Eksempel 4 $ cflat primes.cflat This is the Cb compiler (version 2012-08-16 on Linux) Parsing... checking... generating code... OK Running gcc -m32 -o primes primes.s -L. -L/local/share/inf2100 -lcflat $./primes 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997

Programmering i C Oppsummering C er et meget enkelt programmeringsspråk. Det bør være enkelt å lære. Ikke alt man forventer, er lov. Sjekk grammatikken!