Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Wurzelberechnung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.07.2009, 10:52 Uhr
~Gipsy
Gast


Hallo,

ich habe eine aufgabe in dr schule zu machen.

Diese lautet wie folgt:

Hier herunterladen (pdf):

www.gipsy-computer.de/Aufgabe5.pdf

Ich hab dass jetzt mal programmiert:

http://nopaste.info/da94f1b098.html


C++:
   1.  //------------------------------------------
   2. float wurzel_berechnung(float radikand);
   3. //------------------------------------------
   4. void main()
   5. {
   6.   float r = 0;
   7.   float ergebnis = 0;
   8.  
   9.   printf("\t\t ********** Wurzelberechnung **********");
  10.   printf("\n\n");
  11.  
  12.   printf("Bitte geben Sie den Radikand ein: \t");
  13.   scanf("%f", &r);
  14.  
  15.   ergebnis = wurzel_berechnung(r);
  16.  
  17.   printf("\n\n");
  18.   printf("Das Ergebnis lautet: \t %f", ergebnis);
  19.  
  20.   printf("\n\nEnde");
  21. }
  22. float wurzel_berechnung(float radikand)
  23. {
  24.   float x = 2;
  25.   float y = 0;
  26.  
  27.   y = radikand / x;
  28.  
  29.   while((x-y < 0.0001) && (x-y > -0.0001))
  30.   {
  31.     x = (x + y) / 2;
  32.     y = radikand / x;
  33.   }
  34.  
  35.   return y;
  36. }
  37. //------------------------------------------



Ich glaube, dass die while Schleife Bedinung falsch ist, aber könnt ihr mir sagen, wie die richtig lautet.

PS: Alle wichtigen Header-Dateien sind eingebunden.

Vielen Dank


Bearbeitung von FloSoft:

hab das mal eingefügt


Dieser Post wurde am 06.07.2009 um 16:43 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.07.2009, 13:14 Uhr
ao

(Operator)


Na ja, der Ausdruck in der Klammer:


C++:
(x-y < 0.0001) && (x-y > -0.0001)


ist doch wahr, wenn das Ergebnis gefunden bzw. nah genug approximiert ist, oder? In dem Fall willst du die Schleife verlassen. Wiederholen willst du im umgekehrten Fall.

Ach so, nochwas: Kurze Sourcecodes (so wie da oben) kannst du besser hier direkt posten als irgendwo verlinken. Das macht das Nachlesen und Zitieren leichter.

Dieser Post wurde am 06.07.2009 um 13:17 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.07.2009, 17:43 Uhr
0xdeadbeef
Gott
(Operator)


Ich würde dafür wohl eine eigene Funktion einführen, etwa so:

C++:
#include <stdbool.h>

bool epsilon_equal(float x, float y, float epsilon) {
  return fabs(x - y) < epsilon;
}


...und dann später

C++:
while(!epsilon_equal(x, y, 1e-4))


Die Benutzung von bool setzt dabei C99-Unterstützung voraus. Da dein Compiler sich aber scheinbar nicht über "void main" beschwert, nehme ich an, dass er dafür wesentlich zu alt ist. In altem C sähe das also so aus:

C++:
int epsilon_equal(float x, float y, float epsilon) {
  return fabs(x - y) < epsilon;
}


...und in jedem Fall solltest du

C++:
void main() {
  ...
}


durch das standardkonforme

C++:
int main(void) {
  ...
  return 0;
}


ersetzen. Erstens nehmen es dir dann auch strengere Compiler ab, zweitens kann man das Programm dann ggf. auch in Skripten sinnvoll verwenden.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: