- Bearbeitet
Guten Abend 🙂
ich würde gerne ein Programm schreiben, welches mir das Spatprodukt dreier Vektoren berechnet. Dazu soll es einmal eine Funktion zur Berechnung des Kreuzproduktes, und danach die Funktion zur Berechnung des Skalarproduktes aufrufen. Der Code dazu sieht so aus:
Iceberg
ich würde gerne ein Programm schreiben, welches mir das Spatprodukt dreier Vektoren berechnet. Dazu soll es einmal eine Funktion zur Berechnung des Kreuzproduktes, und danach die Funktion zur Berechnung des Skalarproduktes aufrufen. Der Code dazu sieht so aus:
/*Aufgabe: Skalarprodukt, Vektorprodukt und Spatprodukt als Funktionen*/
#include<stdio.h>
/*Deklariere die Funktionen*/
double skalar(double a_1, double a_2, double a_3, double b_1, double b_2, double b_3);
double kreuz(double a_1, double a_2, double a_3, double b_1, double b_2, double b_3);
double spat(double a_1, double a_2, double a_3, double b_1, double b_2, double b_3);
/*Hauptprogramm*/
int main() {
/*Variablendeklaration*/
double erg_skalar;
double erg_kreuz[3];
double erg_spat;
double a[3];
double b[3];
/*Einlesen der Komponenten*/
for(int loop = 0; loop <= 2; loop++) {
printf("Komponente a_%i: ",loop);
scanf("%lf", &a[loop]);
}
printf("\n");
for(int loop = 0; loop <= 2; loop++) {
printf("Komponente b_%i: ",loop);
scanf("%lf", &b[loop]);
}
printf("\n");
/*Skalarprodukt speichern*/
erg_skalar = skalar(a[0],a[1],a[2],b[0],b[1],b[2]);
/*Kreuzprodukt speichern*/
for(int i = 0; i <= 2; i++) {
erg_kreuz[i] = kreuz(a[0],a[1],a[2],b[0],b[1],b[2]);
}
/*Spatprodukt speichern*/
erg_spat = spat(a[0],a[1],a[2],b[0],b[1],b[2]);
/*Ergebnis Skalarprodukt ausgeben*/
printf("a * b = %.2lf\n", erg_skalar);
/*Ergebnis Kreuzprodukt ausgeben*/
printf("a x b = (%.2lf,%.2lf,%.2lf)\n",erg_kreuz[0],erg_kreuz[1],erg_kreuz[2]);
/*Ergebnis Spatprodukt ausgeben*/
printf("(a x b) * c = %.2lf\n", erg_spat);
return 0;
}
/*Definiere die Funktionen*/
double skalar(double a_1, double a_2, double a_3, double b_1, double b_2, double b_3) {
/*Variablendeklaration*/
double a[3];
double b[3];
double erg;
/*Umspeichern der Komponenten*/
a[0] = a_1;
a[1] = a_2;
a[2] = a_3;
b[0] = b_1;
b[1] = b_2;
b[2] = b_3;
/*Berechnen des Skalarproduktes*/
for(int loop = 0; loop <= 2; loop++) {
erg = erg + (a[loop] * b[loop]);
}
return erg;
}
double kreuz(double a_1, double a_2, double a_3, double b_1, double b_2, double b_3) {
/*Variablendeklaration*/
double a[3];
double b[3];
double erg;
static int zaehler = 1;
static int zaehler_2 = 1;
/*Umspeichern der Vektoren*/
a[0] = a_1;
a[1] = a_2;
a[2] = a_3;
b[0] = b_1;
b[1] = b_2;
b[2] = b_3;
/*Die Variable zaehler bzw. zaehler_2 zählt die Funktionsaufrufe. Dementsprechen werden die Komponenten des Kreuzproduktes berechnet*/
switch(zaehler) {
case 1:erg = a[1]*b[2] - a[2]*b[1]; zaehler++; return erg;
case 2:erg = a[2]*b[0] - a[0]*b[2]; zaehler++; return erg;
case 3:erg = a[0]*b[1] - a[1]*b[0]; zaehler++; return erg;
default: switch(zaehler_2) {
case 1:erg = a[1]*b[2] - a[2]*b[1]; zaehler_2++; return erg;
case 2:erg = a[2]*b[0] - a[0]*b[2]; zaehler_2++; return erg;
case 3:erg = a[0]*b[1] - a[1]*b[0]; zaehler_2++; return erg;
}
}
return 0;
}
double spat(double a_1, double a_2, double a_3, double b_1, double b_2, double b_3) {
/*Variablendeklaration*/
double c[3];
double erg_kreuz[3];
double erg_skalar;
/*Einlesen der Komponenten*/
for(int loop = 0; loop <= 2; loop++) {
printf("Komponente c_%i: ",loop);
scanf("%lf", &c[loop]);
}
printf("\n");
/*Kreuzprodukt speichern*/
for(int i = 0; i <= 2, i++) {
erg_kreuz[i] = kreuz(a_1,a_2,a_3,b_1,b_2,b_3);
}
/*Skalarprodukt speichern*/
erg_skalar = skalar(erg_kreuz[0],erg_kreuz[1],erg_kreuz[2],c[0],c[1],c[2]);
return erg_skalar;
}
Skalarprodukt und Kreuzprodukt werden auch korrekt berechnet. Was mir allerdings nicht einleuchtet, ist, dass das Spatprodukt nur dann korrekt berechnet wird, wenn ich in der letzten for-Schleife immer noch einmal die Werte mit printf() ausgeben lasse. Kannn mir einer sagen, was ich hier falsch gemacht habe? Dafür schonmal vielen DankIceberg