Rechnen mit Zahlen
-
Hi,
ich bin dabei ein Buch über den grundkurs von C zu lesen und zu verstehen.
Ein Beispiel aus dem Buch lautet jetzt zum Beispiel:
[cpp]double r, pi=3.14...
double AKreis[/cpp];
.
.
.printf("Radius eingeben : "); scanf("%lf", &r);
.
.
.
Warum benutzen wir überhaupt double?, bzw. Fließkommazahlen. Ich versteh den Zusammenhang zwischen den Fließkommazahlen (, Datentyp, Wertebereich) und der Mathematik in C nicht. Sonst hab ich den Rest von dem Beispiel verstanden. Aber ich sage mal so. Es bringt ja nichts, wenn ich weiß was ich eingeben muss, ich sollte es ja auch verstanden haben, was der Sinn und Zweck davon ist und WARUM ich es so schreiben muss. Und das wiederrum führt mich zu meiner zweiten Frage.Bei dem folgenden rechnerischen Listing tischt sich bei mir folgende Frage auf: (Aber zuerst das Beispiel)
.
.
.(printf("%d + %d + %d = %d\n", val1, val2, val3, sum);
Meine Frage lautet jetzt: Warum MÜSSEN wir val, val,2, val3 und sum dahinter schreiben? Das Beispiel ist eigentlich etwas länger, aber ich wollte direkt auf den Punkt kommen. Val1/2... wird in dem Beispiel in meinem Buch wieter oben als Adressoperator verwendet was auch logisch ist. Nicht das Ihr jetzt denkt, dass ich garnicht weiß WO val1/2...herkommen sondern, wieso ich das jetzt nochmal unbedingt in die Zeile schreiben muss.
Hoffe, dass das nicht zu viel verlangt ist, oder so. Danke für Eure Hilfe
-
Windassel schrieb:
Ich versteh den Zusammenhang zwischen den Fließkommazahlen (, Datentyp, Wertebereich) und der Mathematik in C nicht.
http://de.wikipedia.org/wiki/Gleitkommazahl
Windassel schrieb:
wieso ich das jetzt nochmal unbedingt in die Zeile schreiben muss.
Ehm.. hä? Du willst die Zahlen ausgeben, also rufst du die Funktion printf auf. Wie soll die Funktion denn sonst wissen, welche Zahlen sie ausgeben soll
-
Windassel schrieb:
Hi,
ich bin dabei ein Buch über den grundkurs von C zu lesen und zu verstehen.
Ein Beispiel aus dem Buch lautet jetzt zum Beispiel:
[cpp]double r, pi=3.14...
double AKreis[/cpp];
.
.
.printf("Radius eingeben : "); scanf("%lf", &r);
.
.
.
Warum benutzen wir überhaupt double?, bzw. Fließkommazahlen. Ich versteh den Zusammenhang zwischen den Fließkommazahlen (, Datentyp, Wertebereich) und der Mathematik in C nicht. Sonst hab ich den Rest von dem Beispiel verstanden. Aber ich sage mal so. Es bringt ja nichts, wenn ich weiß was ich eingeben muss, ich sollte es ja auch verstanden haben, was der Sinn und Zweck davon ist und WARUM ich es so schreiben muss. Und das wiederrum führt mich zu meiner zweiten Frage.Naja, ganze Zahlen sind nicht genau genug für derartige Berechnungen.
Bei dem folgenden rechnerischen Listing tischt sich bei mir folgende Frage auf: (Aber zuerst das Beispiel)
(printf("%d + %d + %d = %d\n", val1, val2, val3, sum);
Meine Frage lautet jetzt: Warum MÜSSEN wir val, val,2, val3 und sum dahinter schreiben? Das Beispiel ist eigentlich etwas länger, aber ich wollte direkt auf den Punkt kommen. Val1/2... wird in dem Beispiel in meinem Buch wieter oben als Adressoperator verwendet was auch logisch ist. Nicht das Ihr jetzt denkt, dass ich garnicht weiß WO val1/2...herkommen sondern, wieso ich das jetzt nochmal unbedingt in die Zeile schreiben muss.
irgendwie mußt du printf() ja sagen, welche Werte es ausgeben soll. Der Formatstring sagt nur aus, wie die Werte ausgegeben werden sollen - die weiteren Angaben sagen aus, welche Werte dort hinkommen.
-
Ahso, okay, das hab ich verstanden, warum wir val1/2/3 hinschreiben müssen.
Aber warum müssen wir noch das "sum" zum Schluss der Zeile hinzufügen?
Beispiel aus dem Buch:
sum = val1 + val2 + val3;
printf("%d + %d + %d = %d\n", val1, val2, val3, sum);Ist die Zeile mit sum = nicht unnötig? Damit sagen wir ihm ja, dass die Summe aus val1/2/3 zusammengezählt wird, und dann als dezimal Zahl ausgegeben werden soll. Aber das gleiche machen wir doch auch mit dem + in der zeiel von printf.
-
printf macht formatierte Ausgabe (print formatted). Die Zeile
printf("%d + %d + %d = %d\n", val1, val2, val3, sum);
rechnet nichts aus, sie sagt nur: Ich habe hier vier Zahlen, die du in der angegebenen Form formatieren und in die Standardausgabe schreiben sollst. %d ist dabei ein Platzhalter für einen nachfolgend angegebenen Integer, + und = sind in diesem Fall stumpf als Zeichen zu verstehen, die 1:1 an der entsprechenden Stelle ausgegeben werden. So wird
printf("%d + %d = %d\n", 2, 2, 5);
auf der Konsole
2 + 2 = 5
ausgeben. Du könntest auch
printf("%d foo %d foo %d bar %d\n", val1, val2, val3, sum);
schreiben und hättest dann statt + foo und statt = bar in der Ausgabe. Gerechnet wird mit den Eingabedaten nicht (bzw. nur insofern, dass eine dezimale Darstellung ausklamüsert wird).
-
ah okay, also ist das nicht so wie in der Mathematik, dass + als addieren, und = als ist gleich betrachtet wird?
-
Windassel schrieb:
ah okay, also ist das nicht so wie in der Mathematik, dass + als addieren, und = als ist gleich betrachtet wird?
Fast.
+ ist addieren.
= ist Zuweisung
== ist Vergleich.= und == werden in der Mathematik oft nicht unterschieden.
int a,b; //Vergleich printf("%d",2+2==4);//1 printf("%d",2+2==5);//0 //Zuweisung printf("%d",a=2+5);//7 printf("%d",a);//7 printf("%d",a=2+2);//4 printf("%d",a);//4 printf("%d",a+a);//8 //Geht nicht, der Compiler betreibt keine höhere Mathematik, um Gleichungen zu lösen printf("%d",2+2=b); //Geht gar nicht printf("%d",2*b+5=5*b-7); //Ausrechnen kann er aber auch größeres b=7; printf("%d",4*b-a==6*a);//1 (falls ich mich nicht verrechnet habe)
-
Wenn Zeichen zwischen den " stehen, haben sie keine besondere Bedeutung mehr. Dann sind sie nur Text.
-
Dirk, denk an Zeilenvorschub, Einrückung und was sonst eventuell noch vom alten Fernschreiber übernommen wurde. Früher war z.B. auch noch ein akustisches Signal möglich. Hab ich aber lange schon nicht mehr gesehen.
Wie heisst denn dein Buch, Windassel?
Da gibt es doch schon mal etwas vom Beitragsersteller:
http://www.c-plusplus.net/forum/288395MfG f.-th.
-
Warum probierst du das den nicht einfach aus?
(printf("%d + %d + %d = %d\n", val1, val2, val3, sum);
dann änderst du deinen Quelltext:
(printf("%d + %d + %d \n", val1, val2, val3);
hier mal die Reihenfolge geändert:
(printf("%d + %d + %d \n", val3, val2, val1);
ich hoffe das deine Daten den Unterschied demonstrieren.
und dann noch mal:(printf("\t\t%d + %d + %d = %d\n", val1, val2, val3, sum);
Vergleiche was im Quelltext geändert wird und was auf deinem Monitor ausgegeben wird.
-
@f.-th.
Ich bezog mich mehr auf die vom TO genannten Zeichen + = und auch - * /Jetzt mit Escapesequenzen zu kommen, wo er gerade mit den einfachen Sachen hadert, fand ich zu früh.
-
Wie versuchen wir das einfach?
printf("alles für die Optik auf Konsole und Vorbereitung für die formatierte Zeichendarstellung", hier kommen dann soviel Daten wie Platzhalter innerhalb der Hochkomma stehen);
Aber man kann dem TO = Beitragsersteller nur raten mit printf() zu spielen.
Also eine printf() Zeile vornehmen z.B. bei den Daten eine Position ändern schauen was bei der Ausgabe anders ist oder ob sich der Compiler schon meldet mit einer Warnung oder einem Fehler. Immer nur soviel ändern von Schritt zu Schritt das du das nachvollziehen kannst.MfG f.-th.
-
f.-th. schrieb:
Wie heisst denn dein Buch, Windassel?
Das ist das Buch, was ich mir bestellt habe.
-
f.-th. schrieb:
Warum probierst du das den nicht einfach aus?
(printf("%d + %d + %d = %d\n", val1, val2, val3, sum);
dann änderst du deinen Quelltext:
(printf("%d + %d + %d \n", val1, val2, val3);
hier mal die Reihenfolge geändert:
(printf("%d + %d + %d \n", val3, val2, val1);
ich hoffe das deine Daten den Unterschied demonstrieren.
und dann noch mal:
[cpp]
(printf("\t\t%d + %d + %d = %d\n", val1, val2, val3, sum);
[/cpp]Vergleiche was im Quelltext geändert wird und was auf deinem Monitor ausgegeben wird.
Also ist das auch egal, in Welcher Reihenfolge ich val1,val2,val3, und sum dahinter schreibe? Gibt es eine Bezeichung für die Begriffe, die dahinter stehen müssen? Dann könnte ich ja normal im Inhaltsverzeichnis nachgucken.
-
Probier doch mal aus, was passiert, wenn du die Reihenfolge vertauscht.
Und das was du wissen musst, steht unter printf in deinem Buch.
-
Windassel schrieb:
Also ist das auch egal, in Welcher Reihenfolge ich val1,val2,val3, und sum dahinter schreibe?
Jain. Du kannst es zwar in jeder Reihenfolge schreiben, aber die Zahlen werden dann natürlich auch in der Reihenfolge ausgegeben.
int i = 5; int j = 2; printf("%d + %d = %d", i, j, i + j); | | | ^ ^ ^ Hier wird gerechnet! NICHT im Formatstring! ---------------| | | | | | | -------------| | | | -----------|
Du könntest natürlich auch schreiben:
int i = 5; int j = 2; printf("%d + %d = %d", i, i + j, j);
Den Compiler interessiert das nicht, der ersetzt nur die %d's mit den entsprechenden Zahlen.
-
[quote="cooky451"
[cpp]
int i = 5;
int j = 2;
printf("%d + %d = %d", i, i + j, j);
[/cpp]
[/quote]Ah, okay. Wenn ich jetzt richtig liege, dann müssen wir hinter dem %d" angeben, WAS wir berechnen. Also i und j, UND WIE wir es berechnen. Mit einem +? Ist das jetzt richtig?
-
Durch das %d teilst du printf mit das du ein
int
ausgeben möchtest.
Der Wert der Zahl wird dann in dem Text eingesetzt. Da du jetzt drei mal %d geschrieben hast, erwartet printf auch, dass du noch drei Zahlen als Parameter mit übergibst.
Diese Parameter werden durch Kommas getrennt angegeben.Erste Zahl für das erste %d, zweite Zahl für das zweite %d, ...
Das
i + j
ist erstmal ein Ausdruck in C. Der Compiler berechnet das Ergebnis und übergibt dieses dann an printf.
-
Na ja.. sorry aber ich weiß irgendwie nicht wo ich anfangen soll^^
http://de.wikibooks.org/wiki/C-Programmierung:_Operatoren
http://de.wikibooks.org/wiki/C-Programmierung:_Einfache_Ein-_und_AusgabeVielleicht hilft dir das weiter, gründlich durchlesen!
(Es kann auch sein, dass du jetzt bereits das Richtige meinst, aber es nicht gut ausdrücken kannst..)
-
AHHHHHHHH ich habe einen Gedankenblitz!!!
Also Leute aufpassen, und sagen, ob ich damit richti leige.int i = 5;
int j = 2;
printf("%d + %d = %d", i, j, i + j);Ich würde jetzt gerne eine Linie zwischen dem 1. %d und dem i als Parameter ziehen, damit man den Zusammenhang erkennt. Aber das geht ja leider schlecht. Und dann noch eine Linie zwischen dem 2. %d und dem j als Parameter. Und die beiden %d zusammen ergeben %d und der Parameter dafür lautet i + d. Ist das richtig?
float wkursF = 222
float betragF = 111printf("[float] : %f Dollar = %f Euro}n", betragF, betragF/wkursF
Der Parameter betragF (111) ist dieses %f?? Und dann wird der Betrag %f durch die Werte betragF und wkursF ausgerechnet? Richtig???
Eigentlich könnte ich anstatt des Parameters betragF auch wkursF eingeben? Dann würde sich ja nur das Ergebnis änder...
wkursF, betragF/betragF?? Richtig? Nur viel Sinn hätte das dann net wirklich...
Aber es geht ja ums Prinzip. Und wofür steht das / zwischen den Parameter betragF und wkursF? Als geteilt?
Hoffe, dass ich das einigermaßen verständlich erklärt habe.