Vektornormen in C

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Gerowia
Beiträge: 14
Registriert: Di Jan 03, 2017 10:38 am

Vektornormen in C

Beitrag von Gerowia » So Jan 15, 2017 3:13 pm

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

Armin
Beiträge: 8
Registriert: Sa Jul 02, 2016 11:11 am

Re: Vektornormen in C

Beitrag von Armin » So Jan 15, 2017 7:48 pm

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

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Vektornormen in C

Beitrag von cloidnerux » So Jan 15, 2017 9:04 pm

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];
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten