Einfache Berechnung von X darstellen lassen



  • Hallo,

    ich bin noch ein ziemlicher Anfänger. Daher bitte den einfachsten Code wenn es geht.

    Ich möchte einige einfache Berechnungen darstellen.

    Ich habe schon etwas rumprobiert aber ich kriege nicht das gewünschte Ergebnis.
    Wie kann ich die unten stehenden einfachen Berechnung ausgeben lassen?

    Ich programmiere mit eclipse unter ubuntu 16.04...

    Rechenergebnisse für folgende
    Ausdrücke jeweils für x?

    int i=4;
    int j=5;
    double x;

    x = (double) i / j;
    x = 1.0 * i / j * 10;
    x = (10.0 * i) / j;
    x = i / j * 10;
    x = 1.0 * (i / j) * 10;
    x = i / 0.1 * j;
    x = i * 10 / j;
    x = 10.0 * i / j;
    x = i / (0.1 * j);

    DANKE für jeden Tipp!



  • ich habe es hinbekommen.

    Ist mein Code in Ordnung oder eher schlecht?

    int main (void)
    {
    int i= 4;
    int j= 5;

    float x;

    x=1.0 * i/j * 10;

    printf("%f", x);
    }



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum Mathematik und Physik in das Forum C (alle ISO-Standards) verschoben.

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

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    float ist nicht double, der in x gespeicherte Wert wird daher von dem Ergebnis in der Vorgabe geringfügig abweichen. Bei der Art und Weise, wie du derzeit das Ergebnis ausgibst (d.h. auf 6 Stellen genau, weil das der Standardwert bei %f ist), wird es aber keinen Unterschied machen.

    Da es keinen erkennbaren Grund gibt, wieso du nicht einfach das double aus der Vorgabe kopiert haben solltest, spekuliere ich mal, dass du annimmst, dass %f nur für float wäre. %f (in printf, nicht in scanf!)ist aber für double (und deckt damit auch automatisch float ab).



  • Ich habe noch eine Frage. Was bedeutet in den Klammern meiner Ausgabe seht ja %f

    was bedeutet % und was beudetet das "f".

    Bedeutet das "f" Es soll eine Gleitkommazahl ausgegeben werden?

    Danke!



  • An dem ersten Parameter (dem Formatstring) erkennt printf, von welchem Typ die folgenden Parameter sind und wie sie ausgegeben werden sollen.
    Das % leitet einen Formatspecifier ein und ja, da f steht für floating point.

    http://www.cplusplus.com/reference/cstdio/printf/

    Noch etwas:

    In deiner Berechnung wird erst das 1.0 * i berechnet. Dadurch ist das ein double (wegen der 1.0).
    Danach dann das /j, was dann auch wieder ein double ergibt.

    Bei 1.0 * (i/j) * 10 wird zuerst i/j berechnet.
    Da beides int sind, kommt die Ganzzahldivision zum tragen. Und 4/5 sind 0.


  • Mod

    Das Prozentzeichen in printf-Formatstrings bedeutet, dass an dieser Stelle ein Platzhalter für ein späteres Argument kommt. Beispiel:

    printf("Foo %i bar", 123)
    

    gibt

    Foo 123 bar
    

    aus.

    Hinter dem Platzhalter kommt eine genaue Beschreibung des Formats, in dem der Wert ausgegeben werden soll. Dieser muss unbedingt zu dem Datentyp passen, den der Wert hat. Dies liegt in der Verantwortung des Programmierers, printf kann das nicht selber erkennen¹!

    Optionen für die Formatierung gibt es sehr viele, kannst du in einer printf-Referenz nachlesen. Viele haben auch noch einmal eigene Parameter, z.B. Angaben auf wie viele Stellen genau eine Zahl ausgegeben werden soll. Wieder der Verweis auf eine printf-Referenz.

    Konkret %f steht für die Ausgabe eines double-Wertes (Das f steht für floating point); im Dezimalsystem; klein geschrieben; ohne weitere Längenangabe auf 6 Stellen genau.

    Falls du dich jetzt fragst, wieso man dann mit %f auch floats ausgeben kann, wenn ich oben doch erklärt habe, dass der Programmierer dafür sorgen muss, dass die Datentypen zum Platzhalter passen: Das ist wieder eine andere Regel, dass in C floats zu double erweitert werden, wenn sie als Teil einer variablen Argumentenliste an eine Funktion übergeben werden (und printf hat eine variable Argumentenliste). Ebenso werden chars und shorts zu ints und noch ein paar weitere Umwandlungen. Achtung: Umgekehrt gilt das nicht, long double wird nicht zu double (ware auch schlecht) und benötigt daher eine Modifikation des Formatspezifizierer zu %Lf.

    Wenn dir das alles furchtbar kompliziert vorkommt: Ist es auch. C ist keine einfache Lehrsprache, sondern ziemlich gnadenlos gegenüber Anfängerfehlern.

    ¹: Aber viele Compiler können dem Programmierer dabei helfen, wenn man Compilerwarnungen aktiviert.


  • Mod

    DirkB schrieb:

    In deiner Berechnung wird erst das 1.0 * i berechnet. Dadurch ist das ein double (wegen der 1.0).
    Danach dann das /j, was dann auch wieder ein double ergibt.

    Bei 1.0 * (i/j) * 10 wird zuerst i/j berechnet.
    Da beides int sind, kommt die Ganzzahldivision zum tragen. Und 4/5 sind 0.

    Ich schätze mal, dass es bei der Aufgabe genau darum geht.



  • Hallo, und danke für die Antworten.

    Jetzt habe ich überlegt ob ich mir nacheinander alle Berechnungen ausgeben lassen kann.

    Wie könnte ich das am besten machen?

    Ich probiere rum mit einer for und if Schleife, aber ich glaube das ist falsch..

    Hat jemand einen tipp für mich?

    Ich möchte im Prinzip alle berechnungen wie im Anfangspost dargestellt berechnen und nacheinander einzeln ausgeben.


  • Mod

    Mach nach jeder Rechnung eine Ausgabe.



  • Frost1989 schrieb:

    Ich probiere rum mit einer for und if Schleife, aber ich glaube das ist falsch..

    Eine if-Schleife gibt es nicht.
    Schleifen ganz allgemein eignen sich super dazu, dieselben Dinge mit unterschiedlichen Werten oft hintereinander auszuführen.
    Deine Berechnungen unterscheiden sich aber alle voneinander, deshalb ist eine Schleife nicht für Deine Zwecke geeignet.


Anmelden zum Antworten