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); C wmevent = HIWORD(wParam); // Parse the menu selections: switch (wmid) case IDM_ABOUT: DialogBox(hInst,
C / C++ mål Få praktiske færdigheder indenfor højniveau programmering med C / C++ Kunne udarbejde mindre softwareløsninger Anvende standard biblioteker Indbyggede færdige programdele Anvende Objekt Orienteret Programmering Erklæring af klasser Nedarvning Exception handling Have det sjovt
Hvad er C C er et programmeringssprog Opfundet i 1970 erne Meget populært Kan anvendes til mange forskellige systemer Mangler struktur til store programløsninger C++ er en udvidelse af C Opfundet sidst i 1980 erne Struktur til store programløsninger Skrevet kode kan ofte genanvendes direkte
C og C++ stamtræ Sprog Udviklet af Årstal BCPL Martin Richards / MIT 1967 B Ken Thompson / Bell 1969 C Dennis Ritchie / Bell 1973 C med klasser Bjarne Stroustrup / AT&T 1978 C++ Bjarne Stroustrup / AT&T 1983 Ansi C Kernigan og Ritchie 1988 Java James Gosling / SUN 1995 C# (C-sharp) Anders Hejlsberg / MS 2003
Hvad er et program Et program er en række instruktioner til CPU en En CPU har et instruktionssæt Forskellige typer CPU er har forskellige instruktionssæt (Pentium, Sun Sparc.) Forskellige CPU er er ikke binære kompatible
Lav niveau programmering Der programmeres direkte til CPU en Assembler programmering Fordele Stor kontrol over alle hændelser Kode kan optimeres meget Ulemper Tid eller plads Kan kun afvikles på bestemt type CPU Stor indsigt i CPU teknik nødvendig Programmer bliver komplekse og komplicerede Svære at vedligeholde Nemt at lave fejl
Høj niveau programmering Programmøren skriver kode i programmeringssprog C / C++ Visual Basic Program oversætter kode til assembler Oversætterprogrammet kaldes en Compiler Samme kode kan oversættes på forskellige CPU er C Compiler til Intel Pentium oversætter til Pentium instruktioner C Compiler til Sun Sparc oversætter til Sun Sparc instruktioner.
Høj niveau programmering Fordele Programmerings sprog er logisk opbyggede Dybgående kendskab til CPU ikke nødvendig Kode er lettere at forstå Er nemmere at vedligeholde Moduler fra kode er genanvendelige Programmeringssprog har indbyggede sikringer mod fejl. Ulemper Nogle sprog mere end andre Der findes mange højniveau programmeringssprog Detaljeret kontrol over programmet tabes
Microsoft Visual C++ version 7
C prog. Hello World
Opgave lav dit første program Du har brug for Kompendiet: Oprettelse af C projekt i Visual Kørsel af Console programmer
Biblioteker C sproget indeholder ingen funktioner til for eksempel udskrift til skærm Derfor findes der en række standard biblioteker over programmer der følger med C compileren I hvert bibliotek findes mange funktioner Se MSDN Library Der anvendes forskellige biblioteker til C og C++
Biblioteker Funktionen printf er et eksempel på en funktion for eksempel stdio.h C funktioner til ind og udlæsning af data. Tastatur, skærm og filer string.h C funktioner til simpel manipulation af tekststrenge
Biblioteker Bibliotekerne er en masse programmer som er lavet. Gør programmering hurtigere Gennemtestede programmer i biblioteker Skal lære biblioteker at kende Udvikling af egen biblioteker Genanvendelse af programmer simplificeres
Datatyper C har fire grundlæggende datatyper Datatyper anvendes til at arbejde med og gemme data Datatype anvendelse Fylder char Karakter eller tegn 1 bytes int Heltal (Integer) 4 bytes float Flydende decimal 4 bytes double Flydende decimal 8 bytes
#include <stdio.h> main() char tegn = 'A'; int lykketal = 2541; float bananpris = 7.85; double flypris = 100000000.98; Datatyper - opgave printf("variablen tegn indeholder\t: %c\n", tegn); printf("variablen lykketal indeholder\t: %i\n", lykketal); printf("variablen bananpris indeholder\t: %f\n", bananpris); printf("variablen flypris indeholder\t: %e\n", flypris); printf("datatypen char fylder \t: %i Byte(s) i ram.\n", sizeof(tegn)); printf("datatypen int fylder \t: %i Byte(s) i ram.\n", sizeof(lykketal)); printf("datatypen float fylder \t: %i Byte(s) i ram.\n", sizeof(bananpris)); printf("datatypen double fylder \t: %i Byte(s) i ram. \n", sizeof(flypris));
Datatyper opgave 2 #include <stdio.h> main() char fornavn[20]; char efternavn[20]; printf("indtast dit fornavn\t: "); scanf("%s",fornavn); printf("indtast dit efternavn\t: "); scanf("%s",efternavn); printf("du hedder %s %s\n", fornavn, efternavn);
Betingelser Relations operatorer Operator Mening == Lig med!= Forskellig fra > Større end < Mindre end >= Større end eller lig med <= Mindre end eller lig med
if sætninger int i = 10, j = 20; if ( i == 10 ) printf( Sandt udsagn ); else printf( Falsk udsagn ); if ( i == 10 ) printf( Sandt udsagn ); i = 11; else printf( Falsk udsagn ); i = 9; i = 10; /* Tak til eleverne */ if ( i!= 10 ) printf( Sandt udsagn ); else printf( Falsk udsagn ); int i = 10, j = 20; if ( j == 10 ) printf( Sandt udsagn ); else printf( Falsk udsagn ); if ( j == 10 ) printf( Sandt udsagn ); i = 11; else printf( Falsk udsagn ); i = 9; if ( j!= 10 ) printf( Sandt udsagn ); else printf( Falsk udsagn );
Betingelser Opgave 1 #include <stdio.h> #define MAXTAL 1000 #define MINTAL 10 main() int tal; printf("indtast et tal mellem %i og %i: ", MINTAL, MAXTAL); scanf("%i", &tal ); if ( tal < MINTAL ) printf("det indtastede tal er mindre end %i\n", MINTAL); else if ( tal > MAXTAL ) printf("det indtastede tal er st\233rre end %i\n", MAXTAL); else printf("tallet %i er godkendt!\n", tal );
switch sætningen Simplificerer nestede if-then-else if. main() int ugedag; printf("indtast nummeret p\206 en ugedag: "); scanf("%i", &ugedag ); switch ( ugedag ) case 1: printf("mandag\n"); break; case 2: printf("tirsdag\n"); break; /* onsdag til søndag udeladt... */ default: printf("det er ikke en ugedag\n");
switch sætningen main() int month; printf("indtast nummeret p\206 en m\206ned: "); scanf("%i", &month ); switch ( month ) case 2: printf("der er 28 dage\n"); break; case 1: case 3: case 5: printf("der er 31 dage\n"); break; /* Fleste måneder udeladt... */ default: printf("det er ikke en m\206ned\n");
Opgave Lav en lommeregner Skal kunne de fire regnearter: +, -, *, / Eksempel: 7 * 98 eller 1000 / 25 Tips: Scanf kan læse flere argumenter af gangen Scanf returnerer antal argumenter Prøv at dividere med 0 int i; float tal1, tal2; char regneart; i = scanf( %f %c %f,&tal1, ®neart, &tal2);
Løkker - for #include <stdio.h> #define ANTALTAL 4 main() int tal[antaltal]; int j; /* Indlæsning af tal */ for ( j=0 ; j < ANTALTAL ; j = j + 1 ) printf("indtast tal nummer %i\t: ", j+1 ); scanf("%i", &tal[ j ] ); /* udlæsning af tal */ for ( j=0 ; j < ANTALTAL ; j = j + 1 ) printf("indtastet tal nummer %i er\t: %i\n", j+1, tal[ j ] );
Løkker while 1 #include <stdio.h> #include <conio.h> main() int taeller = 0 ; /* Taeller initialiseres til 0 */ while (! kbhit() ) printf("t\221ller = %i\r", taeller++ );
Opgave Udregning af pi pi 1 1 1 1 1 1 = 1 + + +... 4 3 5 7 9 11 13 Til dem som bliver færdig først lav et program der finder primtal Hvem kan lave det hurtigste program til udregning af pi (1 Mia udregninger)
En dimensionelle arrays[ ] (tabeller) void main( void ) int daysmd[12] = 31,28,31,30,31,30,31,31,30,31,30,31; int mdnr; do printf("tast et m\206neds nummer (0 for at afslutte): "); scanf("%i", &mdnr); if ( mdnr!= 0 ) printf("måned %i har %i dage.\n", mdnr,daysmd[ mdnr-1 ] ); while ( mdnr!= 0 );
To dimensionelle arrays[][] void main( void ) int daysmd[ ] = 31,28,31,30,31,30,31,31,30,31,30,31; char months[12][10] = "Januar","Februar","Marts","April","Maj","Juni","Juli", "August","September","Oktober","November","December"; int mdnr; do printf("tast et m\206neds nummer (0 for at afslutte): "); scanf("%i", &mdnr); if ( mdnr!= 0 ) printf("%s har %i dage.\n", months[mdnr-1],daysmd[ mdnr-1 ]); while ( mdnr!= 0 );
To dimensionelle arrays[][] void main( void ) int sudokoplade[9][9]; int i,j; /* Initialiser sudokoplade først */ for ( i = 0 ; i < 9 ; i++ ) for ( j = 0 ; j < 9 ; j++ ) sudokoplade[i][j]=0;.. Kode udeladt
Multi dimensionelle Arrays[ ][ ][ ] void main( void ) int sudokoplade3d[9][9][9]; int i,j,k; /* Initialiser sudokoplade først */ for ( i = 0 ; i < 9 ; i++ ) for ( j = 0 ; j < 9 ; j++ ) for ( k = 0 ; k < 9 ; k++ ) sudokoplade3d[i][j][k] = 0;.. Kode udeladt
Funktioner() Opdeling af program i funktioner Giver bedre overblik Et stort program er mange små funktioner Funktioner er overskuelige Et stort program uoverskueligt Hver funktion kan testes hver for sig Funktioner kan genbruges i andre projekter
Funktioner() void fejl(int fejlnr, char fejltxt[ ]) /* Udskriv fejltekst og nummer */ printf( FEJL nummer %i : Beskrivelse %s\n", fejlnr, fejltxt ); int main( void ). Udeladt kode if ( naevner == 0 ) fejl( 102, Division med nul );.. Udeladt kode if ( fp = fopen( C:\data\julegaver.txt, r ) == 0 ) fejl(103, Filen C:\data\julegaver.txt kunne ikke åbnes );
Hvad laver denne funktion()? int hentlinie( char *txtpoi, int size ) int counter = -1; do counter++; txtpoi[counter] = getch(); putch( txtpoi[counter] ); while ( (counter < size ) && (txtpoi[counter]!= '\r') ); txtpoi[counter] = 0; putch('\n'); return( counter);
Lidt sjov #include <stdio.h> main() FILE *fp; if ( (fp=fopen( LPT2:, w ) ) == 0 ) printf( Filen LPT2: kan ikke åbnes. ); else fprintf( fp, Denne tekst kommer på printeren\n ); fclose( fp );
Lidt om pointere #include <stdio.h> main() int i, j; /* Opret 2 integer */ int *poi; /* Opret plads til at gemme adressen på en integer */ i = 7; j = 9; /* Initialiser i og j */ poi = &i; /* Sæt poi lig adressen på i */ j = *poi; /* Sæt j lig værdien som poi peger på ( j = i ) */ printf( i = %i og j = %i\n, i,j );
int i,antal; struct person char fornavn[20]; char efternavn[20]; ; Strukturer struct person ansatte[ ] = "Jens","Hansen", "Ulla,"Svendsen", "Jens Otto","Sigurdsen" ; antal = sizeof(ansatte) / sizeof(struct person); printf("der er %i ansatte\n", antal); for (i=0 ; i < antal ; i++) printf("l\233n nr. %i Fornavn %s Efternavn %s\n", i+1000, ansatte[i].fornavn, ansatte[i].efternavn);
int antalpersoner = 4444; main() int i=0; Lokale og globale variable antalpersoner = 10; int i = 10, antalpersoner = 199; printf( %i %i\n, i, antalpersoner); printf( %i %i\n, i, antalpersoner); gernok(); gernok() int i = 20; printf( %i %i\n, i, antalpersoner);
Opgave Lav et personalestyrings program Oplysninger: Fornavn, efternavn,løn Lav plads til 10 ansatte Lav følgende funktioner i en anden c fil nyansat() Henter oplysninger med scanf() udskrivansatte() Udskriv med printf Husk det med lokale og globale variable