C++ Betrag eines Vektors n-ter Dimension
-
Hallo Leute,
ich hab erst vor kurzem mit C++ angefangen, bin also noch ein Anfänger
Kann mir bitte jemand weiterhelfen???Ich soll ein Programm schreiben, dass die dimension 2er vektoren einliest, dann ihre koordinaten und dann jeweils den betrag und das skalarprodukt von beiden ausgibt. Hab bisher folgendes auf die reihe bekommen:
#include <stdio.h>
#include <math.h>
#define N 100void main()
{
int n;
int i;
int j;
int k;
float x[N];
float y[N];
float betrag_x[N];
float betrag_y[N];
float produkt[N];printf("Geben Sie bitte die Dimension des Koordinatensystems ein:\n");
scanf_s("%d", &n);printf("Geben Sie bitte die %d Koordinaten des Vektors x ein:\n", n);
for(i=0; i<=(n-1); i++)
{
scanf_s("%f", &x[i]);
}printf("Geben Sie bitte die %d Koordinaten des Vektors y ein:\n", n);
for(j=0; j<=(n-1); j++)
{
scanf_s("%f", &y[i]);
}for(k=0; k<=n; k++)
{
betrag_x[k]=sqrtf((x[k]*x[k])+(betrag_x[k-1]*betrag_x[k-1]));
betrag_y[k]=sqrtf((y[k]*y[k])+(betrag_y[k-1]*betrag_y[k-1]));
produkt[k]=x[k]*y[k]+produkt[k-1];
}printf("Betrag des Vektors x: %f\n", betrag_x[n]);
printf("Betrag des Vektors y: %f\n", betrag_y[n]);
printf("Skalarprodukt der beiden Vektoren: %f", produkt[n]);getchar();
getchar();}
gibt aber nur ganz komische zahlen aus, also keineswegs die richtige lösung...
HILFE!!!
-
Im ersten Schritt der Rechenschleife greifst du ja auch auf die undefinierten Elemente betrag_x[-1] etc zu. (außerdem glaube ich nicht, daß du die Zwischenergebnisse der Rechnungen noch für irgendwas brauchst)
PS: Ich würde ja in der Schleife nur summieren und am Ende von allem die Wurzel ziehen - geht schneller und vermeidet Rundungsfehler.
-
ok, danke erstmal. Aber versteh wo da Betrag_x[-1] herkommen soll, ist doch alles größer 0 was eingegeben wird.... Und was für Zwischenergebnisse??? Alles was ich berechne, muss ich doch zuletzt auch ausgeben...
-
nessi schrieb:
ok, danke erstmal. Aber versteh wo da Betrag_x[-1] herkommen soll, ist doch alles größer 0 was eingegeben wird....
Im ersten Durchlauf der for()-Schleife ist k=0 und du berechnest [c]betrag_x[0]=sqrtf((x[0]*x[0])+(**betrag_x[-1]***betrag_x[-1]));[/c] -siehst du's?
(außerdem verwendest du im letzten Durchlauf die ebenfalls nicht definierten Werte x[n] und y[n])
Und was für Zwischenergebnisse??? Alles was ich berechne, muss ich doch zuletzt auch ausgeben...
Mußt du am Ende wirklich noch wissen, wie groß der Betrag des Teilvektors aus x0 und x1 war? Interessant sind doch nur die Endwerte betrag_x[n], betrag_y[n] und produkt[n], also kannst du alles andere überschreiben:
float betrag_x=0,betrag_y=0,produkt=0; for(k=0;k<n;++k) { betrag_x+=x[k]*x[k]; betrag_y+=y[k]*y[k]; produkt +=x[k]*y[k]; } betrag_x = sqrt(betrag_x); betrag_y = sqrt(betrag_y);