Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

3. Wurzel ziehen in C

Empfohlene Antworten

Veröffentlicht

Hallo,

Wir sollen in der Schule mit einem Näherungsalgorithmus die 3. Wurzel bestimmen.

Ich kann nun mit meinem Quellcode die 3. Wurzel für Zahlen größer 1 und kleiner -1 bestimmen.

Bei Zahlen zwischen -1 und 1 klappt es leider noch nicht, deswegen hab ich die auch mit meiner ersten Abfrage raus genommen.

Hat jemand eine Idee wie ich das auch noch realisieren kann?

#include <stdio.h>

#include <stdlib.h>


float A = 0;

float xneu = 0;

float xalt = 0;

float vergleich = 0;


main()

{

 // Eingabe des Startwertes durch den Benutzer fuer die Variable A, Eingabe muss größer als 1 sein


 printf("************************************\n\n\n");

 printf("Programm zum Berechnen der 3. Wurzel\n\n\n");

 printf("************************************\n\n\n\n");

 printf("Bitte geben Sie die Zahl ein fuer die die 3. Wurzel berechnet werden soll:\n\n\n");

 scanf("%f",& A);

 if ((A>-1&&A<1) || A==0) 

 {

 printf("\n\n\nZahlen zwischen Null und Eins sind nicht erlaubt, bitte versuchen Sie es mit einer zulaessigen Zahl erneut\n\n");

//irgendwie funktioniert das aber net wenn ich 0 eingebe bei Zahlen zwischen 0 und 1 kommt die Ausgabe bei genau 0 aber nicht!?!

 }

 else if (A > 1)

   {

   // Definition der Variablen xalt und xneu

   xneu = A;

   xalt = A;

   // Schleife für Berechnung der 3. Wurzel

   do

   {

   A = ((2*xalt+(xneu/(xalt*xalt)))/3);

   vergleich = (xalt-A);

   xalt = A;      

   }   

   while (vergleich > 0.00000001);

   // Ausgabe des Startwertes A und der 3. Wurzel xneu

   printf("\n\nDie 3. Wurzel Ihrer Zahl %.0f ist: %f\n\n",xneu, A);

   printf("\n\n\n\n");

   }

 else if (A<0) //Abfangen von negativen Zahlen

   {

   // Definition der Variablen xalt und xneu

   xneu = A*(-1);

   xalt = A*(-1);

   // Schleife für Berechnung der 3. Wurzel von negativen Zahlen 

   do

   {

   A = ((2*xalt+(xneu/(xalt*xalt)))/3);

   vergleich = (xalt-A);

   xalt = A;      

   }   

   while (vergleich > 0.00000001);

   // Ausgabe des Startwertes A und der 3. Wurzel xneu

   A=A*(-1);

   xneu=xneu*(-1);

   printf("\n\nDie 3. Wurzel Ihrer Zahl %.0f ist: %f\n\n",xneu, A);

   printf("\n\n\n\n");

   }

 system("PAUSE");  

}

Es muss im Übrigen auch "int main" heißen ;)

In C kann der Rückgabetyp auch weggelassen, dann wird int automatisch verwendet.

Nur in ANSI-C++ ist das nicht erlaubt.

Konventionssache...

Hallo,

Also von mir aus schrieb ich im Code auch "int main" ;-)

Aber nun wieder zum eigentlichen Thema:

Bei Zahlen zwischen 1 und -1 werden bei deiner Näherung die Absolutwerte größer, nicht kleiner. Damit wird (xalt-A) negativ. Du musst also den Absolutwert dieses Ausdrucks prüfen.

Wie mache ich das? Könntest du das evtl. auch in Code ausdrücken?

mfg

Also fabs macht aus negativen Werten einen positiven und belässt positive Werte als positive wenn ich das richtig verstanden habe.

Soweit so gut....

Ich habe meinen Code nun wie folgt umgeschrieben allerdings liefert er mir für Werte zwischen -1 und 1 immernoch die falschen Ergebnisse!?!

#include <stdio.h>

#include <stdlib.h>

#include <math.h>


float A,a = 0;

float xneu = 0;

float xalt = 0;

float vergleich = 0;


main()

{

 // Eingabe des Startwertes durch den Benutzer fuer die Variable A, Eingabe muss größer als 1 sein


 printf("************************************\n\n\n");

 printf("Programm zum Berechnen der 3. Wurzel\n\n\n");

 printf("************************************\n\n\n\n");

 printf("Bitte geben Sie die Zahl ein fuer die die 3. Wurzel berechnet werden soll:\n\n\n");

 scanf("%f",& A);


  if ((A>0&&A<1) || A==0) 

  {

   // Definition der Variablen xalt und xneu a wird der absolute Wert von A zugeordnet

   a= fabs (A);;

   xneu = a;

   xalt = a;

   // Schleife für Berechnung der 3. Wurzel

   do

   {

   a = ((2*xalt+(xneu/(xalt*xalt)))/3);

   vergleich = (xalt-a);

   xalt = a;      

   }   

   while (vergleich > 0.00000001);

   // Ausgabe des Startwertes A und der 3. Wurzel xneu

   printf("\n\nDie 3. Wurzel Ihrer Zahl %.0f ist: %f\n\n",xneu, a);

   printf("\n\n\n\n");

   }

   else if (A > 1)

   {

   // Definition der Variablen xalt und xneu

   xneu = A;

   xalt = A;

   // Schleife für Berechnung der 3. Wurzel

   do

   {

   A = ((2*xalt+(xneu/(xalt*xalt)))/3);

   vergleich = (xalt-A);

   xalt = A;      

   }   

   while (vergleich > 0.00000001);

   // Ausgabe des Startwertes A und der 3. Wurzel xneu

   printf("\n\nDie 3. Wurzel Ihrer Zahl %.0f ist: %f\n\n",xneu, A);

   printf("\n\n\n\n");

   }

 else if (A<0) //Abfangen von negativen Zahlen

   {

   // Definition der Variablen xalt und xneu

   xneu = A*(-1);

   xalt = A*(-1);

   // Schleife für Berechnung der 3. Wurzel von negativen Zahlen 

   do

   {

   A = ((2*xalt+(xneu/(xalt*xalt)))/3);

   vergleich = (xalt-A);

   xalt = A;      

   }   

   while (vergleich > 0.00000001);

   // Ausgabe des Startwertes A und der 3. Wurzel xneu

   A=A*(-1);

   xneu=xneu*(-1);

   printf("\n\nDie 3. Wurzel Ihrer Zahl %.0f ist: %f\n\n",xneu, A);

   printf("\n\n\n\n");

   } 




 system("PAUSE");  

}

Ich habe meinen Code nun wie folgt umgeschrieben allerdings liefert er mir für Werte zwischen -1 und 1 immernoch die falschen Ergebnisse!?!
Ich sehe nur, dass du eine zusätzliche Variable eingefügt und die Eintrittsbedingung für den ersten Block geändert hast. Sonst machst du immer noch alles genau so wie vorher.

Du sollst fabs bei der Berechnung von vergleich benutzen. Dann brauchst du übrigens auch negative Zahlen nicht mehr "abzufangen". Der Algorithmus funktioniert dann mit allen Zahlen.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.