rand Funktion, falsche Ausgabe!
-
Hallo zusammen,
ich hab da ein riesen Problem... Wir sollen folgende Aufgabe bearbeiten und ich weiß echt nicht mehr weiter. Das ist die Aufgabenstellung:
(a) Schreiben Sie eine Funktion, die die euklidische Norm eines double-Vektors berechnet, d.h.
die Quadratwurzel aus der Summe der Quadrate der Einträge.
(b) Schreiben Sie ein Programm, das folgendes tut:
• eine ganze Zahl d einliest,
• prüft, ob d mindestens 1 ist,
• mit malloc einen double-Vektor der Dimension d erzeugt,
• zehnmal folgendes tut:– die Komponenten des Vektors mit zufälligen Werten zwischen -1 und 1 füllt,
– die Norm des Vektors berechnet,
– diese Norm ausgibt.
Hinweis: das Einlesen geht z. B. folgendermaßen. Mit scanf(char* s) liest man einen String
von der Tatstatur ein (s muss groß genug sein). Dann kann man mit int atoi(char* s) den
String in eine ganze Zahl umwandeln. Für scanf und atoi benötigt man #include <stdio.h>
bzw. #include <stdlib.h>.Und das ist mein Programmm:
#include <stdio.h> #include <math.h> #include <stdlib.h> double euklid(int n, double* a) { int i; double sum = 0.0; double w; for (i = 0; i < n; ++i) { sum += a[i] * a[i]; } w=sqrt(sum); return w; } int main(void) { int n; double* a; a = malloc(n * sizeof(double)); int i,j; n=0; while (n<1) { printf("Gib Zahl n ein:\n"); scanf("%d", &n); } a = malloc(n * sizeof(double)); for (i=0; i<n; i++) { a[i]= (rand()*((-1)^(rand()%2) )); } printf("norm ist %lf\n", euklid(n,a)); return (0); }
Ich bin echt Ratlos... was mache ich denn falsch? Stimmt was mit meiner rand-Funktion nicht?
{
a[i]= (rand()*((-1)^(rand()%2) ));
}
-
int n; double* a; a = malloc(n * sizeof(double)); /* Böse!!!! */
n ist undefiniert...!
-
Benutze bitte [cpp][/cpp]-Tags.
Verrate uns doch bitte was nicht funktioniert. Wenn du es selbst nicht weißt gebe Zwischenergebnisse aus. Zum Beispiel kannst du in Zeile 36 sowas wie das hier schreiben:printf("Die berechnete Zufallszahl lautet: %f\n", a[i] = (rand()*((-1)^(rand()%2))));
Dann erkennst du schonmal ob deine Zufallszahlen funktionieren. Beim Euklid kannst du auch die Parameter und den Rückgabewert ausgeben, dann siehst du ob die Funktion die richtigen Parameter kriegt und du kannst von Hand nachrechnen ob die Funktion richtig gerechnet hat.
Die eingegebene Zahl solltest du auch so überprüfen.