Problem bei einem Beispiel



  • Ich hab hier mal folgenden Vektorrechner.
    Wenn ich einen 3D vektor eingebe, dann rechnet er mir paar sachen durch.

    Jetzt ist die Aufgabe diese:
    Ich soll das Programm erweitern. Die Ausgangsspezifikation soll wirklich erfüllt werden und zusätzlich eine "struct" als Rückgabewert bei Addition/Subtraktion, Kreuzprodukt und Einheitsvektor verwendet werden.
    Die struct nenn' ich "Vec3D" und soll 3 double Werte (x,y und z) enthalten.

    Ich habe wenig Ahnung wie ich das realisieren soll!

    #include <stdio.h>
    #include <math.h>
    
    void vektor_addition(float a[], float b[]);        
    void vektor_subtraktion(float a[], float b[]);     
    void vektor_dot(float a[], float b[]);             
    void vektor_cross(float a[], float b[]);           
    void vektor_length(float a[], float b[]);         
    void vektor_normalize(float a[], float b[]);     
    
    int main ()                                        
    {
    	float vektor1[3];                             
    	float vektor2[3];
    	int i;
    
    	for (i=0;i<3;i++)                                                    
    
    	{	
    
    			printf("Geben Sie Wert %d fuer Vektor 1 ein:",i+1);         
    			scanf("%f",&vektor1 [i]);                                    
    
    	}
    
    	for (i=0;i<3;i++)                                                   
    	{	
    
    			printf("Geben Sie Wert %d fuer Vektor 2 ein:",i+1);
    			scanf("%f",&vektor2[i]);
    	}
    
    	vektor_addition(vektor1, vektor2);									
    	vektor_subtraktion(vektor1, vektor2);
    	vektor_cross(vektor1, vektor2);
    	vektor_dot(vektor1, vektor2);
    	vektor_length(vektor1, vektor2);
    	vektor_normalize(vektor1, vektor2);
    
    }
    
    void vektor_addition (float a[], float b[])								
    {
    	printf("\nAddition beider Vektoren:");
    	printf("\n%f \n%f \n%f ", a[0] + b[0],a[1] + b[1], a[2] + b[2]);	
    
    }
    
    void vektor_subtraktion (float a[], float b[])							
    {
    	printf("\nSubtraktion beider Vektoren:");
    	printf("\n%f \n%f \n%f ", a[0] - b[0],a[1] - b[1], a[2] - b[2]);											
    
    }
    
    void vektor_cross (float a[], float b[])							
    {
    	printf("\nKreuzprodukt beider Vektoren:");
    	printf("\n%f\n%f\n%f ", (a[1] * b[2]) - (a[2] * b[1]), -((a[0] * b[2]) - (a[2]*b[0])),a[0] * b[1] - a[1] * b[0]);
    
    }
    
    void vektor_dot (float a[], float b[])								
    {
    	printf("\nSkalarpprodukt beider Vektoren:");
    	printf("%f\n", a[0] * b[0] + a[1] * b[1] +a[2] * b[2]);         
    
    }
    
    void vektor_length (float a[], float b[])													{	
    
    	printf("\nLaenge von ");
    	printf("Vektor a: %f", sqrt(pow(a[0],2)+pow(a[1],2)+pow(a[2],2)));
    	printf(" und von Vektor b: %f\n", sqrt(pow(b[0],2)+pow(b[1],2)+pow(b[2],2)));
    
    }
    
    void vektor_normalize (float a[], float b[])												
    {
    
    	printf("\nNormalvektor a: %g %g %g\n", a[0] / sqrt(pow(a[0],2) + pow(a[1],2) + pow(a[2],2)), a[1] / sqrt(pow(a[0],2) + pow(a[1],2) + pow(a[2],2)), a[2] / sqrt(pow(a[0],2) + pow(a[1],2) + pow(a[2],2))); 
    
    	printf("Normalvektor b: %g %g %g\n", b[0] / sqrt(pow(b[0],2) + pow(b[1],2) + pow(b[2],2)), b[1] / sqrt(pow(b[0],2) + pow(b[1],2) + pow(b[2],2)), b[2] / sqrt(pow(b[0],2) + pow(b[1],2) + pow(b[2],2)));
    
    }
    


  • Entweder du verwendest als Rückgabewert dieser Funktionen statt void Vec3D:

    struct Vec3D
    {
      double X; double Y; double Z;
    };
    
    Vec3D vektor_cross (float a[], float b[])                            
    {
        Vec3D c;
    
        c.X = a[1] * b[2] - a[2] * b[1];
        c.Y = a[0] * b[2] - a[2] * b[0]
        c.Z = a[0] * b[1] - a[1] * b[0];
    
        return c;
    }
    

    oder du Gibst den Wert per Zeigerparameter zurück:

    void vektor_cross (Vec3D *c, float a[], float b[])                            
    {
        c->X = a[1] * b[2] - a[2] * b[1];
        c->Y = a[0] * b[2] - a[2] * b[0]
        c->Z = a[0] * b[1] - a[1] * b[0];
    }
    

Anmelden zum Antworten