Frage zum C - Programm - Nullstellenberechnung

Tutorials.at
Verfügbare Informationen zu "Frage zum C - Programm - Nullstellenberechnung"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Kimi - Xin - dani93
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 3
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Frage zum C - Programm - Nullstellenberechnung
  • Letzte Antwort: vor 14 Jahren, 11 Monaten, 23 Tagen, 20 Stunden, 50 Minuten
  • Alle Beiträge und Antworten zu "Frage zum C - Programm - Nullstellenberechnung"

    Re: Frage zum C - Programm - Nullstellenberechnung

    Kimi - 03.04.2008, 23:15

    Frage zum C - Programm - Nullstellenberechnung
    Hi ich habe folgendes C- Programm nur habe ich da eine Frage auf die schnelle:


    Hier das C- Programm:


    Code: #include <stdio.h> /* quadrat.c */
    #include <math.h>
    void main(){
    float a, b, c; /*Koeff. der quadr. Gleichung.*/
    float x1, x2; /*Loesungsvariablen*/
    float help, diskr; /*x1=-p/2+sqrt((-p/2)^2-q)*/
    /*x2=-p/2-sqrt((-p/2)^2-q)*/
    printf("Loesung der quadrat. Gleichung\n");
    printf("a= ");
    scanf("%f", &a);
    printf("b= ");
    scanf("%f", &b);
    printf("c= ");
    scanf("%f", &c);
    if(a){ /* a <> 0 */
    help=-0.5f*b/a;
    diskr=help*help-c/a;
    if (!diskr) printf("x = %f",help);
    else
    if(diskr>0.0){
    x1=help+(float)sqrt(diskr);
    x2=help-(float)sqrt(diskr);
    printf("x1 = %f x2 = %f", x1, x2);
    }
    else {
    printf("x1 = %f + %fi\n",help,sqrt(-diskr));
    printf("x2 = %f - %fi\n",help,sqrt(-diskr));
    }
    }
    else
    if(b) printf("X= %f", -c/b);
    else if(c) printf("Keine Loesung");
    else printf("Unendlich viele Loesungen");
    printf("\n");
    getchar();getchar();
    }
    /*
    Loesung der quadrat. Gleichung (Beispiel)
    a= 4
    b= 7
    c= 8
    x1 = -0.875000 + 1.111024i
    x2 = -0.875000 - 1.111024i
    */


    Und hier meine frage dazu:

    Kann ich ín diesem C-Programm den Typ float gegen den Typ double ersetzen.

    Danke



    Re: Frage zum C - Programm - Nullstellenberechnung

    Xin - 04.04.2008, 14:03

    Re: Frage zum C - Programm - Nullstellenberechnung
    Kimi hat folgendes geschrieben: Hi ich habe folgendes C- Programm nur habe ich da eine Frage auf die schnelle:

    Und hier meine frage dazu:

    Kann ich ín diesem C-Programm den Typ float gegen den Typ double ersetzen.

    (Nahezu) Vollkommen unabhängig vom Programm: double ist genauer als float, wenn Du genauere Ergebnisse möchtest, nimmst Du double anstelle von float. Das ist als ob Du short gegen long austauschst. Bei den Fließkommazahlen kannst Du nun größere Zahlen speichern oder eben mehr Nachkommastellen.

    Hier hast Du nun also einfach genauere Ergebnisse in den Variablen.

    Edit: Ist das 'i' hinter der zweiten Zahl beabsichtigt?
    Imaginäre Zahlen sind vermutlich nicht gefragt ^^

    Zur Berechnung der PQ Formel fällt mir hier die Numerik ein und der Begriff "Numerisch stabil"...



    Re: Frage zum C - Programm - Nullstellenberechnung

    dani93 - 04.04.2008, 14:13


    So zuerst mal den Code aufräumen:

    Code: #include <stdio.h>
    #include <math.h>

    void main ()
    {

     float a, b, c, x1, x2, help, diskr;

     printf("Loesung der quadrat. Gleichung\n");

     printf("a= ");
     scanf("%f", &a);

     printf("b= ");
     scanf("%f", &b);

     printf("c= ");
     scanf("%f", &c);

     if (a)
     {

     help=-0.5f*b/a;
     diskr=help*help-c/a;

     if (!diskr)
       printf("x = %f",help);
     
         else  if (diskr>0.0)
          {
           x1=help+(float)sqrt(diskr);
           x2=help-(float)sqrt(diskr);
           printf("x1 = %f x2 = %f", x1, x2);
          }

                else
                {   
                 printf("x1 = %f + %fi\n",help,sqrt(-diskr));
                 printf("x2 = %f - %fi\n",help,sqrt(-diskr));
                }

    }

        else  if(b)
           printf("X= %f", -c/b);

                 else if(c)
                      printf("Keine Loesung");

                           else
                             printf("Unendlich viele Loesungen");

     printf("\n");

     getchar();
     getchar();

    }

    Sieht doch gleich viel besser aus.
    Double ist ähnlich wie float, nur dass es viel genauer (mit mehr Nachkommastellen) rechnet.
    Ich rate dir aber, dass Ergebnis nicht auf 20 Kommastellen auszugeben, da das in den meisten Fällen nicht nötig ist.

    Also für drei Kommastellen:

    Code: printf ("%L.3f", variable);

    Double ist doch Lf oder?



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    wer hat noch tools für das alte (turbo-) basic? - gepostet von hapec am Dienstag 28.08.2007
    Knifflige fehler im kleinem programm - gepostet von aimheld am Samstag 23.09.2006
    --- IDE --- (unbedingt lesen) - gepostet von X am Sonntag 10.09.2006
    Probleme mit Dev-C++ - gepostet von Mobin am Donnerstag 30.11.2006
    Zippen - HowTo ? - gepostet von Dirty Oerty am Mittwoch 05.03.2008
    Der Trash-Thread - Alles sinlose Hier rein ;-) - gepostet von ggspp am Sonntag 16.07.2006
    Pfade für Units - gepostet von detewe89 am Freitag 23.02.2007
    Datei einlesen - gepostet von Blümchen am Mittwoch 07.02.2007
    Männlich- Weiblich zeichen - gepostet von DrPhil_Guth am Sonntag 23.04.2006



    Ähnliche Beiträge wie "Frage zum C - Programm - Nullstellenberechnung"

    Mitglieder-Foto-Box - cäsar (Mittwoch 22.03.2006)
    Mitglieder - Orakel (Montag 27.08.2007)
    Kb's von ZvL Mitglieder gengen Euch - feschit (Dienstag 03.10.2006)
    Vorstellung der Mitglieder - Lars90 (Donnerstag 17.01.2008)
    klassenfremde mitglieder - Berii (Sonntag 16.07.2006)
    mitglieder... - Henry (Donnerstag 14.12.2006)
    Mitglieder - Fortune (Freitag 17.06.2005)
    Die Mitglieder - irrerjohn (Samstag 13.05.2006)
    Hinweis fuer Mitglieder - dickschiff (Mittwoch 11.10.2006)
    WICHTIG: wir brauchen neue mitglieder !!! - EL Barto (Freitag 23.09.2005)