Rechnen mit Zeigern



  • Hallo vielleicht kann mir jemand weiter helfen ich habe das problem das bei dem Programm zwar die erste Zeile richtig berechnet wird aber die letzten 3 Zeilen stimmen überhaupt nicht und ich bekomme es einfach nicht hin wäre für jeden tip dankbar.

    Ach ja die Ergebnisse in zeile 2 müssten 156 sein ist aber 171, zeile 3 149 ist aber 172 und in zeile 4 ist es 155 aber leider hab ich dort 194.

    thx schon mal im voraus

    #include <stdio.h>
    #include <conio.h>
    
    void main(void)
    {
      int matrix_a [5] = {3, 2, 1, 2, 3};
    
      int matrix_b [4][5] = {{ 3, 15, 10, 30, 14},
                            {16, 12, 12, 24,  8},
                            { 8,  5, 15, 20, 20},
                            {10,  8, 14, 10, 25}};
    
      int ges_pkte [4] = { 0, 0, 0, 0 };
    
      int *z_matrix_a;
      int *z_matrix_b;
      int *z_ges_pkte;
    
      z_matrix_a = &matrix_a[0];
      z_matrix_b = &matrix_b[0][0];
      z_ges_pkte = &ges_pkte[0];
    
      int k, a;
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    
      for(k=0; k<5; k++)
        for(a=0; a<4; a++)
          *(z_ges_pkte+a) += *(z_matrix_a+k) * *(z_matrix_b +k+a);
    
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    
        z_matrix_a = &matrix_a[0];
        z_matrix_b = &matrix_b[0][0];
    
      printf("\t\t\t\t\t\t\   Gesamt Pkt.");
    
        z_ges_pkte = &ges_pkte[0];
        z_matrix_b = &matrix_b[0][0];
      for(k=0; k<4; k++)
        {
          printf("\n\n Klasse 8%c:     ", 97+k);
    
          for(a=0; a<5; a++)
          printf("%4d  !", *z_matrix_b++);
          printf("%6d    ! ",*z_ges_pkte++);
        }
    
      printf("\n\n Pkt/Aufg.:     ");
        for(k=0; k<5; k++)
          printf("%4d  !", *z_matrix_a++);
          printf("\n\n\n");
    getch();
    }
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    

    Thx DrSnow



  • DrSnow schrieb:

    void main(void)
    

    Das heißt int main(), nicht void main().

    DrSnow schrieb:

    for(k=0; k<5; k++)
      for(a=0; a<4; a++)
        *(z_ges_pkte+a) += *(z_matrix_a+k) * *(z_matrix_b +k+a);
    

    Der letzte Term (z_matrix_b + k + a) arbeitet nicht so wie du willst.
    Du willst wahrscheinlich dasselbe wie "matrix_b[a][k]" über Zeiger hinbekommen. Du hast aber nicht bedacht, dass 2-Dimensionale Arrays nur funktionieren, wenn der Compiler die Größe im voraus kennt.
    Wenn man also "matrix_b[a][k]" einfach in "z_matrix_b + k + a" umschreiben könnte, warum funktionieren 2-dimensionale Arrays dann nicht dynamisch?
    Die Antwort: Du musst +a*5 anstelle +a rechnen. Der Compiler braucht die Arraygröße im voraus, um Zugriffe dieser Art berechnen zu können. Du brauchst die Array-Größe auch.

    btw:
    Über Benennung der Variablen lässt sich streiten, aber die derzeitigen Namen fördern nicht gerade die Übersichtlichkeit und Lesbarkeit.



  • Danke für den Tip.



  • Hallo Dr. Snow ich bin gerade bei der gleichen Aufgabe, bei mir sieht es so aus und funktioniert einwandfrei.

    #include <stdio.h>
    #include <conio.h>
    
    void main()
    {
    	int matrix_a[4][5] = {{ 3, 15, 10, 30, 14},
    							{16, 12, 12, 24,  8},
    							{ 8,  5, 15, 20, 20},
    							{10,  8, 14, 10, 25}} ;
    
    	int	matrix_b[5] = { 3, 2, 1, 2, 3};
    	int	ges_pkt[4] = { 0, 0, 0, 0};
    
    	int k, a;
    
    	int *z_matrix_a;
    	int *z_matrix_b;
    	int *z_ges_pkt;
    
    	z_matrix_a = &matrix_a[0][0];
    	z_matrix_b = &matrix_b[0];
    	z_ges_pkt = &ges_pkt[0];
    
    	for(k=0;k<4;k++)
    	{
    		for(a=0;a<5;a++)
    		{
    			*z_ges_pkt=*z_ges_pkt + *z_matrix_a * *z_matrix_b;
    			z_matrix_a++;
    			z_matrix_b++;
    		}
    		z_matrix_b = &matrix_b[0];
    		z_ges_pkt++;
    	}
    
    	z_matrix_a = &matrix_a[0][0];
    	z_ges_pkt = &ges_pkt[0];
    
    printf("\n\tDie Punkteverteilung fuer alle 4 Klassen:");
    printf("\n\n Nr der Aufg.	 1       2       3       4       5   Gesamt Pkt.\n\n");
    
    	for(k=0;k<4;k++)
    	{
    		printf(" Klasse 8%c    ",k+97);
    
    		for(a=0;a<5;a++)
    		{
    			printf("%4d  I ",*z_matrix_a);
    			z_matrix_a++;
    		}
    
    		printf(" %4d \n\n",*z_ges_pkt);
    		z_ges_pkt++;
    
    	}
    	printf(" Pkt/Aufg.   ");
    
    	for(a=0;a<=4;a++)
    	{
    		printf(" %4d  I",*z_matrix_b);
    		z_matrix_b++;
    	}
    	printf("\n\n\t Bitte druecken Sie eine beliebige Taste");
    	printf("\n\t");
    	getch();
    }
    

    Ach ja übrigens: Bei mir funktioniert diese behinderte Funktion _settextposition() aus CWI04 Aufgabe E2_4 überhaupt nicht!!

    [edit Shade]Bitte CodeTags verwenden[/edit]



  • Thx Keule hatte es schon gelöst wegen der _settextposition kannst mich ja mal an mailen


Anmelden zum Antworten