Problem mit Programm!!!



  • hey...

    Hab ein kleines Problem mit einem Programm!!!
    Bei dem Programm soll eine Zahlt geteilt werden, das klappt auch so weit aber er zeigt mir bei manchen rechnungen die Nachkommastellen nicht an 😕

    Hier der Quelltext:

    # include <stdio.h>
    # include <stdlib.h>
    
    main()
        {
        int z;
        int n;
        int a;
        int x;
    
        printf( "Zu teilende Zahl: ");
        scanf( "%d", &z);
        printf( "Teiler: ");
        scanf( "%d", &n);
        printf( "Anzahl der Nachkommastellen: ");
        scanf( "%d", &a);
        x = z/n;
        printf( "Ergebnis = %d.", x);
        for( ; a > 0; a = a - 1)
            {
            z = 10*(z - n*x);
            if( z == 0)
                break;
            x = z/n;
            printf( "%d", x);
            }
        printf( "\n");
        }
    

    Hoffe ihr habt paar Lösungen parat!!!
    Danke jetzt schon mal!!!

    [edit="junix"]sfds[/edit]



  • Ich hab grad 5 Lösungen parat!

    1. Benutze bitte in Zunkunft das Syntaxcoloring.
    2. Beantworte bitte die Frage: "Was bedeutet %d im Printf-Aufruf?"
    3. Was genau hat dein Problem mit der VCL oder der CLX zu tun?
    4. Gewöhn dir doch bitte an, aussagekräftige Überschriften zu wählen
    5. Gewöhn dir bitte in Zukunft an, aussagekräftige Variablennamen zu wählen. C hat diese überaus praktische Funktion, das man Variablennamen mit einer Zeichenlänge >> 1 wählen kann! Nutze dieses Feature!



  • Dieser Thread wurde von Moderator/in junix aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • shutdown schrieb:

    bei manchen rechnungen

    Zum Beispiel?



  • an junix:

    Weiß ich auch nicht so genau was %d in printf aufruft ich hab das Programm nämlich auch nur von einem Kumpel und wollt es jatzt mal ausprobieren!!!
    Ja ist ok ich werd in Zukunft deine Hinweise befolgen!!!
    Ich werd einfach mal meinen Kumpel fragen ob er es hi bekommen hat!!!

    an MFK:

    meine zum Beispiel Rechungen wie 123/12=61,5 bloß bei diesem programm würde er dann halt nur 61 als Lösung angeben!!!



  • shutdown schrieb:

    meine zum Beispiel Rechungen wie 123/12=61,5 bloß bei diesem programm würde er dann halt nur 61 als Lösung angeben!!!

    Bei mir gibt das Programm 61.5 aus.



  • @shutdown
    Liest dir mal ein Tutorial zu Variablen und der printf Funktion durch.



  • an MFK:

    komisch hast du denn noch irgendwas verändert???

    an GPC:

    ja werd ich woh mal machen müssen!!!



  • shutdown1 schrieb:

    komisch hast du denn noch irgendwas verändert???

    Nein, das Programm läuft so, wie es ist. Man darf natürlich für die Anzahl der Nachkommastellen nicht Null eingeben:

    Kopiert aus meiner Konsole:

    Zu teilende Zahl: 123
    Teiler: 2
    Anzahl der Nachkommastellen: 1
    Ergebnis = 61.5
    Press any key to continue
    

    Compiliert mit MSVC 7.1



  • mhhh...

    bei mir verschwindet jetzt die Konsole!!!
    Und das Ergebnis würd nicht mehr angezeigt!! 😕 😕 😞



  • Siehe Konsolen-FAQ: Automatisches Schließen verhindern.



  • Warum macht ihr es euch eigentlich so kompliziert mit den Nachkommastellen?

    int zaehler,nenner,stellen;
    double wert;
    //... (eingeben)
    wert=(double)zaehler/nenner;
    printf("Ergebnis = %.*f\n",stellen,wert);
    

    (zur Erklärung empfehle ich die Beschreibung der Format-Kennungen von man: printf(3))



  • CStoll schrieb:

    Warum macht ihr es euch eigentlich so kompliziert mit den Nachkommastellen?

    Weil das Programm (im Gegensatz zu deinem) kein eingebautes Genauigkeitsproblem hat?



  • So jetzt funktuniert es aber es wird jetzt bloß für eine milliSekunde ungefähr angezeigt!!!



  • Versuch's mal mit MFK's Hinweis - in der Konsolen-FAQ gibt es ein paar nützliche Methoden, wie man das Abschalten der Konsole bei Programmende hinauszögert.



  • ja klappt jetzt schon alles aber er gibt jetzt zwei ergebnisse aus einmal 61.5 was richtig ist und danach kommt noch mal = 511 was falsch ist !!!



  • code posten bitte, aber in [cpp] tags und sauber formatiert und eingerueckt, wenns geht.



  • # include <stdio.h>
    # include <stdlib.h>

    main()
    {
    int z;
    int n;
    int a;
    int x;
    int zaehler,nenner,stellen;

    printf( "Zu teilende Zahl: ");
    scanf( "%d", &z);
    printf( "Teiler: ");
    scanf( "%d", &n);
    printf( "Anzahl der Nachkommastellen: ");
    scanf( "%d", &a);
    x = z/n;
    printf( "Ergebnis = %d.", x);
    for( ; a > 0; a = a - 1)
    {
    z = 10*(z - n*x);
    if( z == 0)
    break;
    x = z/n;
    printf( "%d", x);
    double wert;//... (eingeben)
    wert=(double)zaehler/nenner;
    printf("Ergebnis = %.*f\n",stellen,wert);
    system ("Pause");
    }
    printf( "\n");
    }



  • c.rackwitz schrieb:

    in [cpp] tags und sauber formatiert und eingerueckt, wenns geht.

    Ging wohl nicht 😉

    shutdown1, du kannst nicht einfach den Code von CStoll irgendwo in dein Programm einbauen. Der Code war als Ersatz für deine Berechnungschleife gedacht. Und zu system: system("PAUSE") an sich ist schon schlecht - in der Schleife system("PAUSE") aufzurufen, ist totaler Quatsch.

    Hast du den FAQ-Beitrag, auf den ich dich verwiesen hatte, nicht gelesen?



  • ne hab ich leider noch nicht!!!
    Weil muss hier neben bei noch Arbeiten aber wenn ich zeit habe mach ich es mal!!!
    Naja danke für die Tipps werd sie in zukunft beachten!!! 🙂


Anmelden zum Antworten