Funktion der 1-norm schreiben
-
Hallo, habe hier eine Aufgabe bekommen.
Schreiben Sie drei Funktionen, die die 1-Norm, die Euklidische Norm bzw. die Maximumsnorm eines double-Vektors
der Länge N zurückgeben.
Das ist soweit mein Ansatz:#include <stdio.h> #include <math.h> double einsnorm ( double i, double N, double xi ) { double result; for( i = 0; i < 2; ++i ) result= xi; return result; } double main () { double i, double N; printf("Geben sie die Länge N ihres Vektors ein:\n"); scanf("%lf", &N); for( i = 0; i < N; ++i ) printf("Geben sie x %lf ein:\n", i); scanf("%lf", &xi); printf("Die 1-Norm ihres Vektors ist:\n", einsnorm(i, N, xi)); return 0; }
Mir ist schon klar, dass das mit dem xi so wahrscheinlich nicht funktioniert, aber ich habe einfach keine andere idee...
Außerdem wollte ich fragen, ob es irgendein c-anfänger-buch gibt, was sich besonders für mathematiker eignet.
Danke schonmal
-
Schau dir mal Arrays an.
Das i brauchst du nicht an einsnorm zu übergeben und für eine Zählvariable ist ein int besser geeignet.
Welchen Compiler nimmst du?
-
Hab es jetzt mit einem array und diesem malloc gemacht. Läuft
Danke für dem Tipp
Hast du denn noch einen Buch Tipp für mich? Am besten schön einfach geschrieben
-
lilalinda06 schrieb:
Hab es jetzt mit einem array und diesem malloc gemacht. Läuft
Danke für dem TippZeig noch mal her. Gibt dann noch mehr Tipps
lilalinda06 schrieb:
Hast du denn noch einen Buch Tipp für mich? Am besten schön einfach geschrieben
Leider nicht.
Hängt auch davon ab, ob du schon eine andere Programmiersprache kannst und ob du englische Bücher nimmst oder lieber deutsche.Du kannst mal hier schauen: http://www.c-plusplus.net/forum/300567
-
#include <stdio.h> #include <math.h> #include <stdlib.h> double einsnorm ( double N, double *x ) { double result; int i; for( i = 0; i < N; ++i ) result+= fabs(x[i]); return result; } double main () { double *x; int i, N ; printf("Geben sie die Länge N ihres Vektors ein:\n"); scanf("%d", &N); x=malloc(N * sizeof(double)); for( i = 0; i < N; ++i ) { printf("Geben sie x %d ein:\n", i+1); scanf("%lf", &x[i]); } printf("Die 1-Norm ihres Vektors ist: %lf\n", einsnorm( N, x)); return 0; }
so sieht das ganze jetzt aus und läuft optimal
-
Du musst
result
ineinsnorm
noch initialisieren.
Das kannst du auch gleich bei der Definition machen.double result = 0;
Sonst kann da irgendein Wert drin stehen.
Bevor du das jetzt gleich änderst, schau doch mal nach, ob dein Compiler eine Warnung gegeben hat.
In der Art "Benutzung der Variablen result ohne vorherige Wertzuweisung".
Diese Warnung solltest du erhalten. Und wenn nicht, stell deinen Compiler entsprechend ein.Den Rückgabewert von malloc solltest du auch prüfen:
if (x == NULL) { puts("Sorry, nicht genug Speicher"); exit(-1); }
-
double main()
Soweit ich weiss gibt main() standardmaessig ein int zurueck.
-
gigg schrieb:
Soweit ich weiss gibt main() standardmaessig ein int zurueck
Ja klar. Sollte auch eine Compilerwarnung geben.