Kurt Nørmark
Institut for Datalogi, Aalborg Universitet
Sammendrag Forrige lektion Næste lektion Stikord Referencer Indhold | Emnet for denne lektion er datatyper. Efter en oversigt over typerne i C tager vi endnu et kig på heltal og flydende tal. Som noget nyt studerer vi enumerationtyper og typedefinition. Også mulighederne for at konvertere en type til en anden kommer vi omkring. Dernæst ser vi på scopebegrebet og storage classes i C. Vi ser dernæst overordnet og begrebsmæssigt på arrays, som er et eksempel på en sammensat datatype. Vi slutter af med en kort introduktion til abstrakte datatyper. |
Typer |
Typer Slide Indhold Stikord Referencer |
Begrebet type: En type er en mængde af værdier med fælles egenskaber |
|
Program: Et C program med typer - og med forskellige udfordringer. |
|
Program: Output fra ovenstående program. |
|
|
|
Typer i C Slide Indhold Stikord Referencer |
|
|
|
Abstrakte datatyper Slide Indhold Stikord Referencer |
Begrebet abstrakt datatype: En abstrakt datatype er en mængde af værdier og en tilhørende mængde af operationer på disse værdier | Værdierne i en abstrakt datatype kaldes ofte objekter. Dette er specielt tilfældet i det objekt-orienterede programmeringsparadigme, hvor ideen om abstrakte datatyper er helt central. |
|
|
Fundamentale C datatyper |
Oversigt over typer i C Slide Indhold Stikord Referencer |
|
Heltalstyper Slide Indhold Stikord Referencer |
|
Tabel. |
|
|
Program: Et C program som illustrerer ovenstående. |
|
Program: Et program der 'udregner' bytestørrelsen af heltalstyperne. |
|
Program: Output fra programmet (gcc med Cygwin på min Windows maskine). |
|
Program: Output fra programmet (gcc på en Linux filserver). |
|
Program: Et program der tilgår konstanter i limits.h. |
|
Program: Output fra programmet (gcc med Cygwin på min Windows maskine). |
|
Enumeration types (1) Slide Indhold Stikord Referencer |
Begrebet enumeration type: En enumeration type er en endelig mængde af heltal som er knyttet til enumeration konstanter | ||
Begrebet enumeration konstant: En enumeration konstant (enumerator) er et navn, som på mange måder ligner en variabel |
Syntax: Syntaktisk definition af to mulige former af enumeration typer i C |
|
Program: En enumeration type enum days og en funktion next_day_of. |
|
|
Program: En funktion prnt_day der udskriver det symbolske navn på en dag. |
|
Program: Det samlede program - inklusive en anvendelse af next_day_of og prnt_day i main. |
|
Program: Output fra programmet. |
|
|
Enumeration types (2) Slide Indhold Stikord Referencer |
Syntax: Syntaktisk definition af to mulige former af enumeration typer i C |
|
|
Program: Et eksempel på et program som bruger enumeration typer til karakterskalaer. |
|
Program: Et program som både bruger enumeration typer 7-trins og 13-skala karakterer - ULOVLIGT. |
|
Program: Possible compilation - error messages. |
|
Program: Et program som både bruger enumeration typer 7-trins og 13-skala karakterer - Nu lovlig, men med tunge navne. |
|
Enumeration types (3) Slide Indhold Stikord Referencer |
|
Program: Et program med enum en blanding af days og enum colors - ingen compileringsfejl. |
|
|
Opgave 8.2. En tilfældig menu | Definer tre forskellige enumeration typer for hhv. forret, hovedret og dessert. Enumeration typen forret skal indholde værdier for guacamole, tarteletter, lakserulle og græskarsuppe. Enumeration typen hovedret skal indholde værdier for gyldenkål, hakkebøf, gullash og forloren hare. Enumeration typen dessert skal indholde værdier for pandekager med is, gulerodskage, choklademousse, og citronfromage. Undgå dog danske bogstaver i dit C program. Det giver kun besvær! Skriv en funktion maaltid, som vælger og udskriver én tilfældig ret i hver af de tre kategorier. Læs om "tilfældige tal" i C her. Kald funktionen maaltid 25 gange i main, med det formål at få genereret et menukort af 25 kombinationer af forret, hovedret og dessert. Overvej om der skal defineres flere små funktioner, som nedbryder det samlede problem i delproblemer. Denne opgave er inspireret af en tilsvarende opgave i bogen 'C by Dissection'. Benyttet med tilladelse fra forlaget. |
|
|
Enumeration typer i andre sprog Slide Indhold Stikord Referencer |
|
|
Floating point typer (1) Slide Indhold Stikord Referencer |
Tabel. |
|
Program: Et C program som illustrerer ovenstående. |
|
Program: Et program der 'udregner' bytestørrelsen af float typerne. |
|
Program: Output fra programmet (gcc med Cygwin på min Windows maskine). |
|
Program: Output fra programmet (gcc på en Linux filserver). |
|
Program: Et program der tilgår konstanter i floats.h. |
|
Program: Output fra programmet (gcc med Cygwin på min Windows maskine). |
|
Floating point typer (2) Slide Indhold Stikord Referencer |
|
Typekonvertering og typedef |
Implicit typekonvertering Slide Indhold Stikord Referencer |
|
|
Program: Eksempler på implicitte typekonverteringer. |
|
Program: Output fra programmet. |
|
Eksplicit typekonvertering Slide Indhold Stikord Referencer |
|
Syntax: Syntaktisk definition af casting - eksplicit typekonvertering i C |
|
|
Program: Et program med eksempler på casts. |
|
Program: Output fra programmet. |
|
Program: Funktionen next_day_of omskrevet med brug af casts. |
|
|
Navngivne typer med typedef Slide Indhold Stikord Referencer |
|
Syntax: Syntaktisk definition af casting - eksplicit typekonvertering i C |
|
Program: En omskrivning af ugedags programmet som benytter typedef. |
|
|
Program: En alternativ anvendelse af typedef. |
|
Program: En endnu simplere alternativ anvendelse af typedef. |
|
Program: Brug af typedef i forbindelse med funktionstyper. |
|
Scope |
Scope Slide Indhold Stikord Referencer |
|
Begrebet scope: Scope af et navn er de dele af en programtekst hvor navnet er kendt og tilgængeligt |
|
Scope - eksempler Slide Indhold Stikord Referencer |
|
Program: Illustration af basale scoperegler. |
|
Program: Illustration af scope i tre indlejrede blokke. |
|
Program: Samme program - med kommentarer der afslører værdierne af a, b og c. |
|
Program: Output fra programmet. |
|
|
Storage classes |
Oversigt over storage classes Slide Indhold Stikord Referencer |
|
Syntax: Syntaktisk definition af storage classes i variabel erklæringer |
|
|
Storage class auto Slide Indhold Stikord Referencer |
Begrebet auto: Variable med storage class auto kaldes automatiske variable | ||
Begrebet automatisk variabel: En automatisk variabel er lokal i en blok, dvs. den skabes når blokken aktiveres og nedlægges når blokken forlades |
|
|
|
Storage class static af lokale variable Slide Indhold Stikord Referencer |
Begrebet statisk variabel: En statisk variabel i en blok beholder sin værdi fra en aktivering af blokken til den næste |
|
Program: Motivation - Hvad udskriver dette underlige program. |
|
Program: Output fra programmet. |
|
Program: Illustration af statiske lokale variable - en funktion der husker forrige returværdi. |
|
Program: Output fra programmet. |
|
|
Storage class extern Slide Indhold Stikord Referencer |
Begrebet extern: Variable og funktioner med storage class extern kaldes eksterne variable | ||
Begrebet ekstern variabel: En ekstern variabel eller funktion er global tilgængelig i hele programmet |
|
Program: Et separat c program med adgang til den globale variabel. |
|
Program: Et program med en global variabel gv. |
|
Program: Compilation of the programs. |
|
Program: Program output. |
|
Storage class static af eksterne variable Slide Indhold Stikord Referencer |
|
Begrebet statisk variabel: En statisk variabel på globalt niveau er kun synlig i den aktuelle kildefil |
|
|
Tilfældige Tal |
Tilfældige tal i C Slide Indhold Stikord Referencer |
|
Program: Et program der simulerer et antal kast med en terning. |
|
|
Flere Opgaver Slide Indhold Stikord Referencer |
|
Opgave 8.3. Tegning af geometriske primitiver - PPM grafik | I denne opgave vil vi - trin for trin - tilføje nye nyttige funktioner, som arbejder på PPM billeder. De første er forholdsvis simple. De senere er lidt mere udfordrende. I denne opgave er billedet tilgængelig i en passende datastruktur, som vi dog ikke har behov for at gå i dybden med på nuværende tidspunkt. Der findes en video som giver et oplæg til denne opgave. Der findes også en video der introducerer det billedformat som vi arbejder med. Det er kun de første 9 minutter af denne video der er relevant for dette kursus. Arbejdet vil basere sig på nogle allerede programmerede funktioner, som kan aflæse og sætte én pixel i et PPM billede. Du kan også tænke på en pixel som en farve. Der findes en zip-fil, som indeholder alt det nødvendige for at komme igang. README filen giver anvisninger på hvordan du kan compilere programmerne. Nogle af jer har måske allerede lavet lidt forarbejde, nemlig funktioner som arbejder med RGB pixels. Hvis dette ikke er filfældet indholder zip filen min version af pixel funktionerne. Det anbefales først at læse ppm.h og det simple eksempel på anvendelse af nogle af funktionerne fra ppm.h. Denne anvendelse genererer dette billede. Programmer nu følgende:
Arbejdet kan fortsættes med endnu flere primitiver, i forskellige retninger. Tegning af stiplede linier er en mulighed. Eller indnu mere ambitiøst (for de særligt inkarnerede) indsættelse af tegn (fra en bestemt font) i et ppm billede. Det er naturligvis vigtigt, at du kan se den grafik som genereres af dit program. Her er et antal muligheder, som jeg ved virker:
|
Kapitel 8: Datatyper
Kursets hjemmeside Forfatteren's hjemmeside Om frembringelsen af disse sider Forrige lektion (top) Næste lektion (top) Forrige lektion (bund) Næste lektion (bund)
Genereret: 9. maj 2022, 13:59:35