5. Lösungen
Ausführliche Lösungen zu den Fragen und die Ergebnisse der Aufgaben jeder Einheit können hier eingesehen werden.
Bitte Kapitel auswählen:
2. Pointer Grundlagen
2.2.1 Pointer deklarieren und initialisieren
2.2.2 Adresse ausgeben
2.2.3 Verändern über Pointerzugriff
3. Pointer & Felder
3.2.1 ASCII-Tabelle
3.2.2 Messwerttabelle
3.2.3 Schachbrett
4. Pointer & Funktionen
4.2.1 Zahlentausch
4.2.2 Kaugummiautomat
4.2.3 Vektor 3D
2.2.1 Pointer deklarieren und initialisieren
2.2.2 Adresse ausgeben
2.2.3 Verändern über Pointerzugriff
3. Pointer & Felder
3.2.1 ASCII-Tabelle
3.2.2 Messwerttabelle
3.2.3 Schachbrett
4. Pointer & Funktionen
4.2.1 Zahlentausch
4.2.2 Kaugummiautomat
4.2.3 Vektor 3D
Lösungen:
2. Pointer Grundlagen
2.2.1 Pointer deklarieren und initialisieren nach oben 01 #include <stdio.h>
02
03 int main(void)
04 {
05 /*Variablen deklarieren und initialisieren*/
06 int var_a=4;
07 short var_b=26;
08 long var_c=586;
09
10 /*Pointer deklarieren*/
11 int *pt_a;
12 short *pt_b;
13 long *pt_c;
14 int *pt_d=NULL;
15
16 /*Anfangsadressen dem Pointer zuweisen*/
17 pt_a = &var_a;
18 pt_b = &var_b;
19 pt_c = &var_c;
20
21 getchar();
22 return 0;
23 }
2.2.2 Adresse ausgeben nach oben 01 #include <stdio.h>
02
03 int main(void)
04 {
05 /*Variablen deklarieren und initialisieren*/
06 int var_a=4;
07 short var_b=26;
08 long var_c=586;
09
10 /*Pointer deklarieren*/
11 int *pt_a;
12 short *pt_b;
13 long *pt_c;
14 int *pt_d=NULL;
15
16 /*Anfangsadressen dem Pointer zuweisen*/
17 pt_a = &var_a;
18 pt_b = &var_b;
19 pt_c = &var_c;
20
21 printf ("Ausgabe der Speicheradressen: \n");
22 printf ("------------------------------\n");
23 printf ("Variable 1 (direkt): %d\n", &var_a);
24 printf ("Variable 1 (ueber Pointer): %d\n", pt_a);
25 printf ("Variable 2 (direkt): %d\n", &var_b);
26 printf ("Variable 2 (ueber Pointer): %d\n", pt_b);
27 printf ("Variable 3 (direkt): %ld\n", &var_c);
28 printf ("Variable 3 (ueber Pointer): %ld\n", pt_c);
29 printf ("Nullpointer: %d\n", pt_d);
30
31 getchar();
32 return 0;
33 }
2.2.3 Verändern über Pointerzugriff nach oben 01 #include <stdio.h>
02
03 int main(void)
04 {
05 /*Variablen deklarieren und initialisieren*/
06 int var_a=4;
07 short var_b=26;
08 long var_c=586;
09
10 /*Pointer deklarieren*/
11 int *pt_a;
12 short *pt_b;
13 long *pt_c;
14 int *pt_d=NULL;
15
16 /*Anfangsadressen dem Pointer zuweisen*/
17 pt_a = &var_a;
18 pt_b = &var_b;
19 pt_c = &var_c;
20
21 printf ("Ausgabe der Speicheradressen: \n");
22 printf ("------------------------------\n");
23 printf ("Variable 1 (direkt): %d\n", &var_a);
24 printf ("Variable 1 (ueber Pointer): %d\n", pt_a);
25 printf ("Variable 2 (direkt): %d\n", &var_b);
26 printf ("Variable 2 (ueber Pointer): %d\n", pt_b);
27 printf ("Variable 3 (direkt): %ld\n", &var_c);
28 printf ("Variable 3 (ueber Pointer): %ld\n", pt_c);
29 printf ("Nullpointer: %d\n\n", pt_d);
30
31 *pt_a = 18;
32 *pt_b = 20;
33 *pt_c = 22;
34
35 printf ("Ausgabe ueber Variable: \n");
36 printf ("------------------------------\n");
37 printf ("Variable 1 (direkt): %d\n", var_a);
38 printf ("Variable 2 (direkt): %d\n", var_b);
39 printf ("Variable 3 (direkt): %ld\n\n", var_c);
40
41 var_a = 19;
42 var_b = 21;
43 var_c = 23;
44
45 printf ("Ausgabe ueber Pointer: \n");
46 printf ("------------------------------\n");
47 printf ("Variable 1 (ueber Pointer): %d\n", *pt_a);
48 printf ("Variable 2 (ueber Pointer): %d\n", *pt_b);
49 printf ("Variable 3 (ueber Pointer): %ld\n", *pt_c);
50
51 getchar();
52 return 0;
53 }
3. Pointer & Felder
3.2.1 ASCII-Tabelle nach oben 01 # include<stdio.h>
02
03 int main(void)
04 {
05 char ascii[255];
06 char *ascii_pt;
07 int i=0;
08
09 ascii_pt=&ascii[0];
10
11 for(i=0; i<255; i++)
12 {
13 *(ascii_pt+i)=i;
14 }
15
16 for(i=0; i<255; i++)
17 {
18 printf("%3d: %c\n",(i+1), *(ascii_pt+i));
19 }
20
21 printf("%c", ascii[0]);
22
23 getchar();
24 fflush(stdin);
25 return 0;
26 }
3.2.2 Messwerttabelle nach oben 01 #include<stdio.h>
02
03 int main(void)
04 {
05 float messwert[10];
06 float *messwert_pt;
07 int i=0;
08
09 messwert_pt = &messwert[0];
10
11 for(i=0;i<10;i++)
12 {
13 printf("Bitte den %2d. Messwert eingeben: ", i+1);
14 scanf("%f", (messwert_pt+i));
15 }
16
17 printf("\n*******************\n");
18 printf("* Nr. * Messwert *\n");
19 printf("*******************\n");
20
21 for(i=0;i<10;i++)
22 {
23 printf(" %2d * %6.2f\n", i+1, *(messwert_pt+i));
24 }
25 printf("*******************\n");
26
27 fflush(stdin);
28 getchar();
29 return 0;
30 }
3.2.3 Schachbrett nach oben 01 #include<stdio.h>
02
03 int main(void)
04 {
05 char schachfeld [8][8];
06 char *pt_schachfeld;
07 pt_schachfeld = &schachfeld [0][0];
08 int i=0, j=0;
09
10 /* Schachbrett initialisieren */
11
12 do{
13 for (j=0; j<8; j++)
14 {
15 if(i%2==0)
16 {
17 *(pt_schachfeld+i)=' ';
18 }
19 else
20 {
21 *(pt_schachfeld+i)='#';
22 }
23 i++;
24 }
25 for (j=0; j<8; j++)
26 {
27 if(i%2==0)
28 {
29 *(pt_schachfeld+i)='#';
30 }
31 else
32 {
33 *(pt_schachfeld+i)=' ';
34 }
35 i++;
36 }
37 }while(i<8*8);
38
39 /* Schachbrett ausgeben */
40
41 printf ("Das Schachbrett: \n\n");
42
43 for (i=0; i<8; i++)
44 {
45 for (j=0; j<8; j++)
46 {
47 printf ("| %2c ", *pt_schachfeld++);
48 }
49 printf ("|\n\n\n");
50 }
51
52 fflush(stdin);
53 getchar();
54 return 0;
55 }
4. Pointer & Funktionen
4.2.1 Zahlentausch nach oben 01 #include<stdio.h>
02
03 /*Prototyp der Tausche Funktion$*/
04 void tausche(float *zahla, float *zahlb);
05
06 int main(void)
07 {
08 float a,b;
09 float *a_pt, *b_pt;
10
11 /*2 Zahlen einlesen*/
12 printf("Programm zum tauschen zweier float-Zahlen\n\n");
13 printf("Bitte erste Zahl eingeben:\n");
14 fflush(stdin);
15 scanf("%f", &a);
16 printf("Jetzt bitte die zweite Zahl eingeben:\n");
17 fflush(stdin);
18 scanf("%f", &b);
19
20 /*Testausgabe*/
21 printf("\na ist %.3f und b ist %.3f\n\n", a, b);
22 printf("Die Variablen werden jetzt getauscht.\n\n");
23
24 /*Pointer setzen*/
25 a_pt=&a;
26 b_pt=&b;
27
28 /*Variablen tauschen*/
29 tausche(a_pt, b_pt);
30
31 /*Testausgabe*/
32 printf("a ist %.3f und b ist %.3f\n", a, b);
33
34 /*Auf Enter warten*/
35 fflush(stdin);
36 getchar();
37 return 0;
38 }
39
40 /* tausche - Funktion */
41 void tausche(float *zahla, float *zahlb)
42 {
43 float temp = 0;
44
45 temp=*zahla;
46 *zahla=*zahlb;
47 *zahlb=temp;
48 }
4.2.2 Kaugummiautomat nach oben 01 #include <stdio.h>
02
03 void aufgeldwarten(int *geldeinwurf_pt);
04 void kaugummiausgeben(int *geldeinwurf_pt, int *geldstand_pt, int *kaugummistand_pt);
05
06 int main(void)
07 {
08 int kaugummistand=100, *kaugummistand_pt;
09 int geldstand=0, *geldstand_pt;
10 int geldeinwurf=0, *geldeinwurf_pt;
11
12 geldstand_pt=&geldstand;
13 kaugummistand_pt=&kaugummistand;
14 geldeinwurf_pt=&geldeinwurf;
15 printf("Kaugummiautomat bereit.\n\n");
16
17 do
18 {
19 printf("Noch %d Kaugummis im Automat.\n", kaugummistand);
20 if((geldstand < 100) && (kaugummistand>0))
21 {
22 aufgeldwarten(geldeinwurf_pt);
23 kaugummiausgeben(geldeinwurf_pt, geldstand_pt, kaugummistand_pt);
24 }
25 }while((kaugummistand>0) && (geldstand<=100));
26
27
28 printf("Bitte Kaugummis auffuellen und Geldbox leeren!");
29
30 fflush(stdin);
31 getchar();
32 return 0;
33 }
34
35 void aufgeldwarten(int *geldeinwurf_pt)
36 {
37 char janein;
38 do
39 {
40 printf("Willst du 1 Euro fuer Kaugummi einwerfen?(j/n)\n");
41 fflush(stdin);
42 janein=getchar();
43
44 }while(janein!='j');
45 *geldeinwurf_pt=1;
46 }
47
48 void kaugummiausgeben(int *geldeinwurf_pt, int *geldstand_pt, int *kaugummistand_pt)
49 {
50 *geldeinwurf_pt=0;
51 *geldstand_pt=*geldstand_pt+1;
52 *kaugummistand_pt=*kaugummistand_pt-1;
53
54 printf("Hier ist dein Kaugummi:\n");
55 printf(" __\n");
56 printf(" /o \\ \n");
57 printf(" \\__/\n\n");
58
59 }
4.2.3 Vektor 3D nach oben 01 #include<stdio.h>
02 #include<math.h>
03
04 double abstand_3d_zwischen_a_und_b(int *a, int *b, int *c);
05
06 int main(void)
07 {
08 int a[3]={6,3,4};
09 int b[3]={12,9,10};
10 int c[3]={0,0,0};
11 int *a_pt, *b_pt, *c_pt;
12 double betrag_des_vektors_c=0;
13 int i=0;
14
15 a_pt=a;
16 b_pt=b;
17 c_pt=c;
18
19 //printf("%d",*(a_pt+0));
20 betrag_des_vektors_c = abstand_3d_zwischen_a_und_b(a_pt, b_pt, c_pt);
21
22 printf("Ausgabe der Vektoren:\n");
23 printf("=====================\n");
24 printf(" a: b: c:\n\n");
25 for(i=0; i<3; i++)
26 {
27 printf("|%3d| |%3d| |%3d|\n", a[i], b[i], c[i]);
28 }
29
30 printf("\nDer Betrag des Vektors c ist: %.3f", betrag_des_vektors_c);
31
32 fflush(stdin);
32 getchar();
33 return 0;
34 }
35
36 double abstand_3d_zwischen_a_und_b(int *a, int *b, int *c)
37 {
38 double betrag;
39 int i=0;
40
41 for(i=0; i<3; i++)
42 {
43 *(c+i)=(*(b+i))-(*(a+i));
44 }
45
46 /* double pow(double x, double y); x^y */
47 /* double sqrt(double x); Wurzel für x>0 */
48
49 if(pow(*(c+0),2.0)+pow(*(c+1),2.0)+pow(*(c+2),2.0) > 0)
50 {
51 betrag = sqrt(pow(*(c+0),2.0)+pow(*(c+1),2.0)+pow(*(c+2),2.0));
52 return betrag;
53 }
54 else
55 {
56 printf("Achtung, Division durch null nicht moeglich. Fehler!!!\n\n");
57 return 0;
58 }
59
60 }