Seite 1 von 1

Vektornormen in C

Verfasst: So Jan 15, 2017 3:13 pm
von Gerowia
Hallo,
ich soll ein C Programm schreiben, das die Vektornormen berechnet (mit n als Länge des Vektors und v als Feld von n Werten vom Typ double)
Die Vektoren der Länge 100 sollen mit Zufallszahlen aus 0 und 1 initialisiert und aufgerufen werden .
Ich habe allerdings keine Idee, wie ich die letzte Vektornorm für einen vinf= max |vi| umsetzen soll, der scheinbar den Betrag der Höchsten Komponente des Vektors wiedergeben soll...
Auch weiß ich nicht, warum in meiner Vorgabe steht ich soll enum{N=100} verwenden um den Vektor zu initialisieren, und trotzdem die Unterfunktionen mit int n bennen, also ich verstehe nicht wofür n da sein soll...

Das habe ich bisher

Code: Alles auswählen

#include <stdlib.h>
#include <time.h>
#include <math.h>
enum { N = 100 };
double norm1(int n, double* v)                 //Namen der Unterfunktionen, sowie enum{N=100} sind vorgegeben, aber ich weiß nicht wofür sowohl N als auch n         benötigt werden...
{
	double v1;
	v1=v1+*v
	return v1;
}
double norm2(int n, double* v)
{
	double v2;
	v2=v2+(*v*2)
	return v2;
}
double normInf(int n, double* v)
{
	double vinf;                                  //soll eigentlich besagter Vektor werden, dessen Betrag der höchsten Komponente ausgegeben wird
	return vinf;
}
int main(void)
{
double v[N], v1, v2, vinf;
int n=100;
srand(time(NULL));
for (int i = 0; i < N; i++)
{
v[i] = (double)rand() / RAND_MAX;    //Initialisiere v mit Zufallszahlen von 0 bis 1
norm1(&v[i], n);
norm2(&v[i], n);
normInf(&v[i], n);
}
v2=sqwrt(v2);
printf("Die Vektornormen betragen:\nV1=%lf\nV2=%lf\nVInf=%lf\n", v1, v2, vinf);
return 0;
}

Re: Vektornormen in C

Verfasst: So Jan 15, 2017 7:48 pm
von Armin
Servus,

Auch wenn ich denke zu wissen wie es geht bitte ich dich darum, den Code etwas leserlicher zu gestalten (v.A. Zeilenabstände und Einrücken). Hilfreich wäre es auch, den genauen Wortlaut der Aufgabenstellung zu kennen.

Bin mir mit meiner Methode noch nicht ganz sicher, deswegen möchte ich sie jetzt noch nicht preisgeben.

LG Armin

Re: Vektornormen in C

Verfasst: So Jan 15, 2017 9:04 pm
von cloidnerux
Auch weiß ich nicht, warum in meiner Vorgabe steht ich soll enum{N=100} verwenden um den Vektor zu initialisieren
Das mit dem Enum ist ein andere Weg eine Define zu machen. Dass große N wird mit der Zahl 100 ersetzt, überall da, wo es verwendet wird.
und trotzdem die Unterfunktionen mit int n bennen, also ich verstehe nicht wofür n da sein soll..
Das kleine n ist der tatsächliche Index. Groß N ist die Anzahl aller Vektoren, n der Index des Vektors.

Der Sinn des ganzen ist es, dass deine Funktionen nicht das Array-Element übergeben bekommen, sondern der Anfang des Arrays.
Statt also

Code: Alles auswählen

v1=v1+*v;
kannst du

Code: Alles auswählen

v1=v1+*(v+n);
schreiben, um das n-te Element zu erreichen.

Dann musst du beachten, dass ein Vektor mehr als eine Komponente hat.
Sinnvollerweise würdest du deine Vektoren in der folgenden Art anlegen um ein Array an 3D Vektor zu erhalten:
double v[N][3];