Zeiger Wert zurückgeben
-
Suuuuper habs hinbekommen. Jetzt klappts.
Danke für die Hilfe!!!#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> double x[2][2]; int eigen(double *e1, double *e2) { int uwurzel, rueck; uwurzel = ((x[1][1] + x[0][0] / 2.0) * (x[1][1] + x[0][0] / 2.0) + (x[1][0] * x[0][1]) - (x[0][0] * x[1][1])); if (uwurzel > 0) { *e1 = (((x[1][1] + x[0][0]) / 2) + (sqrt((((x[1][1] + x[0][0]) / 2) * ((x[1][1] + x[0][0]) / 2)) + (x[1][0] * x[0][1]) - (x[0][0] * x[1][1])))); *e2 = (((x[1][1] + x[0][0]) / 2) - (sqrt((((x[1][1] + x[0][0]) / 2) * ((x[1][1] + x[0][0]) / 2)) + (x[1][0] * x[0][1]) - (x[0][0] * x[1][1])))); } else { return 0; } } void main(void) { double a, b, c, d, E1, E2; int rueck, uwurzel, eigen(E1, E2); time_t t; time(&t); srand((unsigned int)t); a = rand() % 100; b = rand() % 100; c = rand() % 100; d = rand() % 100; x[0][0] = a; x[0][1] = b; x[1][0] = c; x[1][1] = d; eigen(&E1, &E2); printf("Eigenwert1= %.1lf\nEigenwert2= %.1lf\n", E1, E2); return 0; }
-
Handwerker2013 schrieb:
Warum machst du eigentlich aus dem hier:
nicht das?Weil das nicht im Sinne der Aufgabe ist.
Du wertest den Rückgabewert von eigen nicht aus.
Den Umweg über a, b, c, d musst du auch nicht gehen.
Warum schreibst du nicht
sqrt(uwurzel)
?
Und bist du sicher, das du mit dem Typ für uwurzel richtig liegst?Die Deklaration von eigen gehört auch nicht in
main
.
-
Du wertest den Rückgabewert von eigen nicht aus.
Den Umweg über a, b, c, d musst du auch nicht gehen.
Warum schreibst du nicht
sqrt(uwurzel)
?
Und bist du sicher, das du mit dem Typ für uwurzel richtig liegst?Die Deklaration von eigen gehört auch nicht in
main
.Wie meinst du das mit dem Auswerten des Rückgabewertes von eigen? Was wäre der Lösungsvorschlag?
Den Umweg über a,b,c,d....was wäre der kürzere Weg?
Stimmt die Deklaration von eigen hab ich rausgenommen aus main() und von int uwurzel habe ich ein double uwurzel gemacht wobei ich denke das das egal ist da ich nur schauen will ob uwurzel negative ist oder nicht.
Warum ich nichtsqrt(uwurzel)
schreibe ist, dass mich der Wurzelwert nicht interessiert sondern nur das, was unter der Wurzel steht.
-
Na sowas hier:
if(eigen(&E1, &E2)) printf("Eigenwert1= %.1lf\nEigenwert2= %.1lf\n", E1, E2); else printf("Fehlermeldung\n");
-
Ich habe es nicht getestet:
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> double x[2][2]; int eigen(double *e1, double *e2) { int uwurzel = ((x[1][1] + x[0][0] / 2.0) * (x[1][1] + x[0][0] / 2.0) + (x[1][0] * x[0][1]) - (x[0][0] * x[1][1])); if (uwurzel > 0) { *e1 = (((x[1][1] + x[0][0]) / 2) + (sqrt((((x[1][1] + x[0][0]) / 2) * ((x[1][1] + x[0][0]) / 2)) + (x[1][0] * x[0][1]) - (x[0][0] * x[1][1])))); *e2 = (((x[1][1] + x[0][0]) / 2) - (sqrt((((x[1][1] + x[0][0]) / 2) * ((x[1][1] + x[0][0]) / 2)) + (x[1][0] * x[0][1]) - (x[0][0] * x[1][1])))); return 1; } else { return 0; } } void main(void) { double E1, E2; time_t t; time(&t); srand((unsigned int)t); x[0][0] = rand() % 100; x[0][1] = rand() % 100; x[1][0] = rand() % 100; x[1][1] = rand() % 100; if (eigen(&E1, &E2)) printf("Eigenwert1= %.1lf\nEigenwert2= %.1lf\n", E1, E2); else printf("Fehlermeldung\n); return 0; }
-
double uwurzel = ((x[1][1] + x[0][0] / 2.0) * (x[1][1] + x[0][0] / 2.0) + (x[1][0] * x[0][1]) - (x[0][0] * x[1][1])); if (uwurzel > 0) { *e1 = (((x[1][1] + x[0][0]) / 2) + sqrt(uwurzel)); // da war es gemeint *e2 = (((x[1][1] + x[0][0]) / 2) - sqrt(uwurzel)); // und hier auch
Und noch ein paar Kleinigkeiten:
int main(void) // main gibt ein int zurück. Immer { double E1, E2; srand(time(NULL)); // reicht ... printf("Eigenwert1= %.1f\nEigenwert2= %.1f\n", E1, E2); // Wie schon gesagt: %f (ohne l) ist für double und float ...
-
Na, dann fasse ich mal als Handwerker zusammen(ungetestet):
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> double x[2][2]; int eigen(double *e1, double *e2) { double uwurzel = ((x[1][1] + x[0][0] / 2.0) * (x[1][1] + x[0][0] / 2.0) + (x[1][0] * x[0][1]) - (x[0][0] * x[1][1])); if (uwurzel > 0) { *e1 = (((x[1][1] + x[0][0]) / 2) + sqrt(uwurzel)); *e2 = (((x[1][1] + x[0][0]) / 2) - sqrt(uwurzel)); return 1; } else { return 0; } } int main() { double E1, E2; srand(time(NULL)); x[0][0] = rand() % 100; x[0][1] = rand() % 100; x[1][0] = rand() % 100; x[1][1] = rand() % 100; if (eigen(&E1, &E2)) printf("Eigenwert1= %.1f\nEigenwert2= %.1f\n", E1, E2); else printf("Fehlermeldung\n); return 0; }
-
Schreibfehler korrigiert(ungetestet):
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> double x[2][2]; int eigen(double *e1, double *e2) { double uwurzel = ((x[1][1] + x[0][0] / 2.0) * (x[1][1] + x[0][0] / 2.0) + (x[1][0] * x[0][1]) - (x[0][0] * x[1][1])); if (uwurzel > 0) { *e1 = (((x[1][1] + x[0][0]) / 2) + sqrt(uwurzel)); *e2 = (((x[1][1] + x[0][0]) / 2) - sqrt(uwurzel)); return 1; } else { return 0; } } int main() { double E1, E2; srand(time(NULL)); x[0][0] = rand() % 100; x[0][1] = rand() % 100; x[1][0] = rand() % 100; x[1][1] = rand() % 100; if (eigen(&E1, &E2)) printf("Eigenwert1= %.1f\nEigenwert2= %.1f\n", E1, E2); else printf("Fehlermeldung\n"); return 0; }
-
Da ist ja immer noch die unsinnige globale Variable vorhanden.
-
So lautet ja auch die Aufgabe.
Aber bei den Problemen die der TE damit hatte, sicher das kleiner Übel.