Berechnung negativer ungerader Wurzel klappt nicht
-
Denk mal die Überschrift sagt worum es geht ansonsten läuft alles wie es soll. Wo ist der Fehler???
#include<stdio.h> #include<math.h> void main() { int n,i,zaehler=0; double a,x1=1,x2,pot,diff=1; printf("Wurzelexponent: "); scanf("%i",&n); printf("Wurzelbasis: "); scanf("%lf",&a); if(n==1) { printf("\n\n\tDie %d-te Wurzel von %lf = %lf\n\n",n,a,a); } else { if(n<0, n % 2==0) { printf("Kein Ergebnis, da keine gerade Wurzel aus einer negativen Zahl gezogen werden kann!\n\n\n"); } else { while(diff > 0.00000001) { pot = x1; for(i=0;i<n-2;i++) { pot = pot * x1; } x2 = ((n-1)*x1 + (a/pot))/n; diff = fabs(x2-x1); x1 = x2; zaehler=zaehler+1; } printf("Die %d-te Wurzel von %lf = %lf",n,a,x2); printf("Die Iteration wurde %i mal durchgefuehrt\n\n",zaehler); } } }
-
Viel schlimmer könnte der Code kaum noch aussehen. Hier der verbesserte, funktionierende und formatierte + Kommentare Code:
#include<stdio.h> #include<math.h> int main() { int n; //int i; //warum nicht in der for-Schleife mit for(int i = 0; ... ? int zaehler = 0; double a; double x1 = 1; double x2; double pot; double diff = 1; printf("Wurzelexponent: "); scanf("%i", &n); printf("Wurzelbasis: "); scanf("%lf", &a); if(n == 1) { printf("\n\n\tDie %d-te Wurzel von %lf = %lf\n\n", n, a, a); } else { if(n < 0) // da stand vorher if(n < 0, n % 2 == 0) ... was sollte das Komma? und warum hast du auf Rest geprüft { printf("Kein Ergebnis, da keine gerade Wurzel aus einer negativen Zahl gezogen werden kann!\n\n\n"); } else { for(zaehler; diff > 0.00000001; zaehler++) //ersetzte while-Schleife, for(; diff > 0.00000001; zaehler++) ginge auch { pot = x1; for(int i = 0; i < n - 2; i++) // for(int i = 0; ... { pot = pot * x1; } x2 = ((n - 1) * x1 + (a / pot)) / n; diff = fabs(x2 - x1); x1 = x2; } printf("Die %d-te Wurzel von %lf = %lf\n", n, a, x2); printf("Die Iteration wurde %i mal durchgefuehrt\n\n", zaehler); } } }
-
FreakY<3Cpp schrieb:
//int i; //warum nicht in der for-Schleife mit for(int
Das geht mWn erst ab C99, nicht jeder hat nen C99 Compiler.
-
Big Brother schrieb:
FreakY<3Cpp schrieb:
//int i; //warum nicht in der for-Schleife mit for(int
Das geht mWn erst ab C99, nicht jeder hat nen C99 Compiler.
Absolut korrekt. Zudem müssen die Daten vor dem Code stehen. Also:
int main() { int x, y, z; float f; // [...] Code }
-
FrEEzE2046 schrieb:
Zudem müssen die Daten vor dem Code stehen. Also:
int main() { int x, y, z; float f; // [...] Code }
Als hätte es Algol nie gegeben?
-
Wie ist das denn in Algol?
-
Bashar schrieb:
Wie ist das denn in Algol?
Afaik hat eine der Algol-Varianten das Konzept der Blöcke eingeführt, in denen man anfangs immer was definieren darf. Und das ist ja auch schon im C von K&R so, sonst wäre dieses Zudem müssen die Daten vor dem Code stehen manchmal recht ärgerlich.
Vielleicht hat's das auch schon vor Algol gegeben. Aber auf die Schnelle hab ich Hinweise dafür auf Wikipedia und in R5RS gefunden.
-
Wenn das in Algol also wie in C ist, dann verstehe ich nicht, was du mit "als hätte es Algol nie gegeben" meinst. In dem zitierten Code ist das doch so wie in Algol.
-
FrEEzE2046 schrieb:
und warum hast du auf Rest geprüft
Ich schätze deshalb, weil die dritte Wurzel aus -8 im Reelen bleibt, die zweite und die vierte aber imaginär werden.
Die dritte Wurzel aus x sei gleich dem Quadrat von x. Was ist x?
-
Bashar schrieb:
Wenn das in Algol also wie in C ist, dann verstehe ich nicht, was du mit "als hätte es Algol nie gegeben" meinst. In dem zitierten Code ist das doch so wie in Algol.
Natürlich. Aber die Erläuterung hab ich zu pragmatisch gefunden, weil man in dem Beispiel den Zähler für die for-Schleife zB auch in dem else-Block anlegen könnte.
-
µngbd schrieb:
Die dritte Wurzel aus x sei gleich dem Quadrat von x. Was ist x?
1 oder 0, gibts noch was?
-
;fricky schrieb:
µngbd schrieb:
Die dritte Wurzel aus x sei gleich dem Quadrat von x. Was ist x?
1 oder 0, gibts noch was?
Ich hatte da einen Plan im Auge, eine imaginäre Lösung zu produzieren, aber ich hab ihn verloren. Wahrscheinlich war's Blödsinn.
Vielleicht geht's aber auch so wie zB in:
\sqrt[2]{x} = \sqrt[10]{x}Ich hab seit Jahren nicht mehr symbolisch gewurzelt, aber da passt für x zB Null und i (Wurzel aus -1), oder bin ich schon wieder verwirrt? Können die E-Techniker sowas nicht im Schlaf?
-
µngbd schrieb:
Vielleicht geht's aber auch so wie zB in:
\sqrt[2]{x} = \sqrt[10]{x}Oje, das hat nicht scheinbar nicht hingehaut.
Soll heissen: zweite Wurzel aus x ist gleich zehnte Wurzel aus x.
-
µngbd schrieb:
Oje, das hat nicht scheinbar nicht hingehaut.
Ich hab's durchschaut!
\sqrt[2]{x} = \sqrt[10]{x}
-
µngbd schrieb:
µngbd schrieb:
Oje, das hat nicht scheinbar nicht hingehaut.
Ich hab's durchschaut!
\sqrt[2]{x} = \sqrt[10]{x}müßte es nicht eher
\sqrt[2]{x} = \sqrt[10]{x^{5}}oder klappte das nur in meinem test fall
\sqrt[2]{16} = \sqrt[10]{16^{5}}
-
noobLolo schrieb:
müßte es nicht eher
\sqrt[2]{x} = \sqrt[10]{x^{5}}oder klappte das nur in meinem test fall
\sqrt[2]{16} = \sqrt[10]{16^{5}}Das sollte eine Gleichung sein, in der x gesucht ist. Wie ist die Lösungsmenge über den komplexen Zahlen?
Und wie ist es bei $$\sqrt[3]{x} = x^2$$?
-
µngbd schrieb:
Und wie ist es bei $$\sqrt[3]{x} = x^2$$?
frag doch mathematika: http://www.wolframalpha.com/input/?i=x2+%3D+x%281%2F3%29
-
;fricky schrieb:
µngbd schrieb:
Und wie ist es bei $$\sqrt[3]{x} = x^2$$?
frag doch mathematika: http://www.wolframalpha.com/input/?i=x2+%3D+x%281%2F3%29
Oder nimm Zettel und nen Stift, kriegst du
x^(1/3) = x^2 // ^(3/1)
x = (x2)3
x = x^6
1 = x^5
-
Big Brother schrieb:
Oder nimm Zettel und nen Stift, kriegst du
x^(1/3) = x^2 // ^(3/1)
x = (x2)3
x = x^6
1 = x^5Und falls x Null ist, kann man die letzte Division nicht machen, und kommt auf
-
µngbd schrieb:
Und falls x Null ist, kann man die letzte Division nicht machen, und kommt auf
oder man kommt auf 1=0 *fg*