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]; }