270 likes | 410 Views
C-kursus 6. Lektion. Repetition af 5. Lektion Vi mødes igen kl. 11.00 til gennemgang af 6. Lektion. Arrays og strenge. Et array svarer til det, man i matematik kalder en matrix Et array er en navngiven samling af variabler af samme type En streng er en tekst
E N D
C-kursus 6. Lektion Repetition af 5. Lektion Vi mødes igen kl. 11.00 til gennemgang af 6. Lektion
Arrays og strenge • Et array svarer til det, man i matematik kalder en matrix • Et array er en navngiven samling af variabler af samme type • En streng er en tekst • En tekst er et array af bogstaver • Variablerne i et array er nummereret fra 0 til n. • Antallet af variabler i et array er n+1
Type cast 1 void main(void) { float tabel[LIM] = { 20, 10, 5, 2, 1, .50, .25 }; int tal, antal; float amount; printf("\nProgram som beregner, hvor mange mønter et indtaste beløb kan opdeles i\n"); printf("\nIndtast beløbet i kr. (f.eks. 54.25): "); scanf("%f", &amount);
Type cast 2 float tabel[LIM] int tal, antal; float amount; for (tal=0; tal<LIM; tal++) { antal = ((int)(amount*100)) / ((int)(tabel[tal]*100)); printf("Mønter med værdien=%6.2f kr, ", tabel[tal] ); printf("udgør %2d af beløbet!\n", antal ); amount = ((amount / tabel[tal]) - (float)antal) * tabel[tal]; } } // Slut på main
Konstanter og biblioteker #include <stdio.h> // De eneste der er brug for er printf // og scanf #define MAXSIZE 20 // Der skal højest arbejdes med 20 // tal i array’et
Sortering af data i et array void main(void) { int list[MAXSIZE]; int ant = 0; int tal; printf("\nIndtast et tal, 0 afslutter\n"); do { printf(”Indtast et tal: "); scanf("%d", &list[ant]); } while ( list[ant++] != 0 ); sort(list,--ant); for (tal=0; tal<ant; tal++) printf("%d\n", list[tal]); }
Sortering af data i et array void sort(int liste[], int antal) { int out, in, temp; for (out=0; out<antal-1; out++) for (in=out+1; in<antal; in++) if (liste[out] > liste[in]) { temp = liste[in]; liste[in] = liste[out]; liste[out] = temp; } } sort(list,--ant);
Eksempel for (out=0; out<antal-1; out++) for (in=out+1; in<antal; in++) if (liste[out] > liste[in]) { temp = liste[in]; liste[in] = liste[out]; liste[out] = temp; } list[0] = 45 list[1] = 32 list[2] = 37 list[3] = 24 list[4] = 42 out = 0 => in = 1 liste[0] = 45 > liste[1] = 32 temp = 32 => liste[1] = 45 => liste[0] = 32 for (in fortsætter så længe in<antal) out = 0 => in = 2 => liste[0] > liste[2] NEJ out = 0 => in = 3 => liste[0] > liste[3] JA Byt igen => liste[0] = 24 og liste[3] = 32 24 ender som liste[0], ved næste gennemløb ender 32 i liste[1] osv.
Hovedprogrammet void main(void) { int list[MAXSIZE]; int ant = 0; int tal; printf("\nIndtast et tal, 0 afslutter\n"); do { printf(”Indtast et tal: "); scanf("%d", &list[ant]); } while ( list[ant++] != 0 ); sort(list,--ant); for (tal=0; tal<ant; tal++) printf("%d\n", list[tal]); }
Øvetid Vi mødes igen kl. 11.00
6. Lektion, pointere • Pointerkonstanter • Pointervariabler
Pointerkonstanter • En pointerkonstant er adressen på en variabel • int x - erklærer en variabel (x), som indeholder et heltal • &x er adressen til variablen x
Et programeksempel void main(void) { int x = 4, y = 7; printf("\nFørste udskrift: x = %d og y = %d ", x, y); get2tal(x, y); printf("\nFjerde udskrift: x = %d og y = %d ", x, y); }
Proceduren - get2tal() void get2tal(int xx, int yy) { int temp; printf("\nAnden udskrift: xx = %d og yy = %d ", xx, yy); temp = xx; xx = yy; yy = temp; printf("\nTredie udskrift: xx = %d og yy = %d ", xx, yy); }
Programeksemplet igen void main(void) { int x = 4, y = 7; printf("\nFørste udskrift: x = %d og y = %d ", x, y); get2tal(x, y); printf("\nFjerde udskrift: x = %d og y = %d ", x, y); }
Pointervariabler • En pointervariabel er en variabel, som indeholder en adresse • Int *x - erklærer en variabel (*x), som kan indeholde et heltal • x indeholder adressen til variablen *x
Et programeksempel void main(void) { int x = 4, y = 7; printf("\nFørste udskrift: x = %d og y = %d ", x, y); get2tal(&x, &y); printf("\nFjerde udskrift: x = %d og y = %d ", x, y); }
Proceduren - get2tal() void get2tal(int *xx, int *yy) { int *temp; printf("\nAnden udskrift: xx = %d og yy = %d ", xx, yy); *temp = *xx; *xx = *yy; *yy = *temp; printf("\nTredie udskrift: xx = %d og yy = %d ", xx, yy); }
int *px => px = &x ?? void main(void) { int x = 4, y = 7; int *px, *py; printf("\nx = %d, y = %d", x, y); px = &x; py = &y; *px = *px + 10; *py = *py + 10; printf("\nx = %d, y = %d", x, y); }
Et eksempel med et array void main(void) { int numre[] = { 92, 81, 70, 69, 58 }; int tal; printf("\n"); for (tal = 0; tal<5; tal++) printf("\nNummer[%d] = %d", tal, numre[tal] ); }
Nu med anvendelse af pointer void main(void) { int numre[] = { 92, 81, 70, 69, 58 }; int tal; printf("\n"); for (tal = 0; tal<5; tal++) printf("\nNummer[%d] =%d", tal, *(numre+tal) ); } numre er adressen på array’et første element tal er en heltalsvariabel
2-dimensionalt array uden pointer #define MAX 5 #define LEN 40 char liste[MAX] [LEN] = { "Katrine", ”Christian", ”Poul", ”Lotte", ”Henning" };
2-dimensionalt array med pointer #define MAX 5 #define LEN 40 char *liste[MAX] = { "Katrine", ”Christian", ”Poul", ”Lotte", ”Henning" };
Slut Nogen spørgsmål til dagens tekst
list[0] = 45 Her er et andet eksempel En tredje tekst Her sker lidt andet