Rechnen mit Zahlen
-
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.
-
Ich glaube du hast es immer noch nicht verstanden. Spiel mal hiermit herum:
int a = 11; int b = 22; int c = 44; printf("BlaBla %d Dudeldu %d lalala %d ping %d pong %d tischtennis %d \n", a, b, c, 55, 88-11, a+b); printf("BlaBla %d Dudeldu %d lalala %d ping %d pong %d tischtennis %d \n", 99-11, a, 55, c, b, b); // Und andere Kombinationen // oder auch printf("%d + %d = %d \n", a, b, a-b); printf("%d = %d * %d \n", a*b, b, a);
-
hm okay...also mit %d sagen wir ja, dass wir eine dezimale Zahl ausgeben möchte. Und mit den Parametern bestimmen wir welche das ist? Und dann können wir sie noch mit anderen Parametern + oder * nehmen lassen? Stimmt´s?
-
Windassel schrieb:
hm okay...also mit %d sagen wir ja, dass wir eine dezimale Zahl ausgeben möchte. Und mit den Parametern bestimmen wir welche das ist?
Ja.
Windassel schrieb:
Und dann können wir sie noch mit anderen Parametern + oder * nehmen lassen? Stimmt´s?
Operatoren gehören nicht zu den Parametern. Die sind wie Funktionen mit eigenen Parametern. Die werden als erstes ausgerechnet, und dann wird das Ergebnis zurückgegeben bzw. die Funktion printf wird erst mit dem fertig berechneten Ergebnis aufgerufen.
int add(int a, int b) { return a + b; } int main() { printf("%d + %d = %d\n", 1, 1, 3); printf("%d * %d = %d\n", 3, 3, add(3, 3)); }
-
// kap003/listing009.c #include <stdio.h> int main(void) { int a = 11; int b = 22; int c = 44; int d = 54; int e = 70; int f = 89; printf(" %d\n %d\n %d\n %d\n %d\n %d \n", a + (c * b), b, d, c, e, f - 90); system("PAUSE"); return 0; }
Also, theoretisch könnten wir das mit den Parametern so stehen lassen, ist aber ein schlechter Stil? Eher sollten wir das dann so schreiben?:
[cpp]// kap003/listing009.c
#include <stdio.h>int main(void) {
int a = 11;
int a1 = a + (c * b);
int b = 22;
int c = 44;
int d = 4;
int e = 54;
int f = 90;
int g = 13;printf(" %d\n %d\n %d\n %d\n %d\n %d \n", a1, b, d, c, e, f - g);
system("PAUSE");
return 0;
}[/cpp]Richtig?
-
Windassel schrieb:
ist aber ein schlechter Stil? Eher sollten wir das dann so schreiben?:
Nö ich habe das nur zur Erklärung geschrieben.
printf("%d\n", 5 + 3); |-----| Das ist im Endeffekt nur als 1 Parameter anzusehen, weshalb man keine "Parameter addiert". Die Addition findet bereits statt, bevor der Parameter (der hier einfach nur 8 wäre) übergeben wird.
-
haha okay, dann hab ich das jetzt verstanden
-
Windassel schrieb:
Das ist das Buch, was ich mir bestellt habe.
Das dürfte ein ziemlicher Klogriff gewesen sein - der Autor des Buches ist hier schon berüchtigt.
Was die Stilfrage angeht, das ist ein Stück weit Geschmackssache und vom umgebenden Code abhängig. Wichtig ist, dass der Code übersichtlich bleibt; wie man das erreicht, ist im Einzelfall zu entscheiden. Es kann dabei hilfreich sein, einen Ausdruck über mehrere Zeilen zu verteilen. Beispiel:
printf("%f\n%f\n", (double) (bench[1] - bench[0]) / CLOCKS_PER_SEC, (double) (bench[2] - bench[1]) / CLOCKS_PER_SEC);
Das ist aus einem einfachen Benchmark-Programm entnommen, wo bench die bis zu bestimmten Zeitpunkten verbrauchte CPU-Zeit enthält. Worauf ich hinaus will ist, dass das in der Form deutlich lesbarer ist, als wenn man es in eine Zeile hintereinander schreibt:
printf("%f\n%f\n", (double) (bench[1] - bench[0]) / CLOCKS_PER_SEC, (double) (bench[2] - bench[1]) / CLOCKS_PER_SEC);
...was es für mein Verständnis zu besserem Stil macht.
In deinem konkreten Beispiel kann ich keinen Vorteil darin erkennen, alle Werte in Variablen zu stopfen; das liegt aber größtenteils daran, dass sowohl die Werte als auch die Namen willkürlich gewählt sind. Ob du jetzt a1 oder a * (b + c) schreibst, ist ziemlich gleichgültig, wenn weder a1 noch a * (b + c) den Sinn des Unterfangens verdeutlichen. Etwas realistischer gewählt womöglich:
/* quadrat.c */ #include <stdio.h> int main(void) { int seitenlaenge = 10; int flaeche = seitenlaenge * seitenlaenge; printf("Ein Quadrat mit Seiten der Länge %d hat eine Fläche von %d\n", seitenlaenge, flaeche); return 0; }
...worin sinnvolle Variablennamen dabei Helfen, den Sinn des Codes zu verdeutlichen. Es mag dann womöglich kürzere, allgemein übliche Notationen geben - das ist in der Mathematik häufiger der Fall. Beispielsweise wäre Folgendes völlig vertretbar:
/* rechtwinkliges Dreieck */ #include <math.h> #include <stdio.h> int main(void) { double a = 3.0; /* Ankathete */ double b = 4.0; /* Gegenkathete */ double c = sqrt(a * a + b * b); /* Hypothenuse */ printf("%f^2 + %f^2 = %f^2\n", a, b, c); return 0; }
...und wenn da keine gute Methode findet, kann (und sollte!) man einen Kommentar daneben schreiben, der erklärt, was man mit der ganzen Schose meint.
-
seldon schrieb:
Windassel schrieb:
Das ist das Buch, was ich mir bestellt habe.
Das dürfte ein ziemlicher Klogriff gewesen sein - der Autor des Buches ist hier schon berüchtigt.
Toll, warum das denn? :(:(:(:/:/:/