Hallo zusammen, ich habe eine frage. Ich möchte bei C++ einer Variable andere Variablen zuweisen. Ich habe wie folgt angefangen: #include "iostream" #include <conio.h> using namespace std; int main() { int J , M , T , Jahr1 , Jahr2; cout << "Gebe das Jahr ein! "; cin >> J; cout << "Gebe den Monat ein! (ganze Zahl) "; cin >> M; cout << "Gebe den Tag ein! (ganze Zahl) "; cin >> T; int Jahr1 = J , M , T; getch(); return 0; } jetzt möchte ich Jahr1 zuweisen. Also wenn ich zum Beispiel J = 2008 M = 12 T = 22 angebe möchte ich Jahr1 = 20081222 haben. Wie stelle ich das an? Danke für die Hilfe schon mal. PS: Ich bin ein Noob was C++ angeht. Also habt bitte rücksicht.
Tetra schrieb: > 12 T = 22 angebe möchte ich Jahr1 = 20081222 haben. du kennst die Grundrechenarten * und +?
ja kenne ich. Sorry hätte vorher noch erklären sollen was ich vor habe. Also es soll eine kleine Anwendung werden die das Alter bestimmt. Also zum Beispiel Geboren: 13.06.1984 = 19840613 Aktuelles Datum 14.01.2012 = 20120114 20120114 - 19840613 = 279501 Dann die letzten 4 Zahlen ausklammern und man hat das Alter 27 Jahre. PS: Wenn ich am ende das Ergebnis habe wie kann ich die letzten 4 Zahlen ausklammern lassen. Bevor ich die Variable ausgeben lasse?
Tetra schrieb: > ja kenne ich. Na dann benutze sie! hast du 2 Zahlen 23 und 8 dann rechnest du 23 * 10 + 8 und kriegst 238 als Ergebnis. Frage an dich: Warum in diesem Beispiel *10? > Dann die letzten 4 Zahlen ausklammern und man hat das Alter 27 Jahre. In deinem Beispiel. Aber das stimmt so nicht allgemein, bzw. wenn du das etwas genauer aufschlüsseln willst (Jahre, Monate, Tage) stimmts überhaupt nicht mehr. Das wäre ein bischen zu einfach. > PS: Wenn ich am ende das Ergebnis habe wie kann ich die letzten 4 Zahlen > ausklammern lassen. Bevor ich die Variable ausgeben lasse? durch Dividieren? 238 / 10 ergibt 23
Sorry ich stehe gerade ein bisschen auf dem Schlauch.
wie kommst du auf die beiden Zahlen "23" und "8". Oder soll das ein
Beispiel sein?
> Frage an dich: Warum in diesem Beispiel *10?
Da bin ich mir nicht ganz sicher.
Ein Jahr hat 12 Monate
Und ein Monat hat 30/31 Tage.
Gib mir noch ein Tipp und ich komm vielleicht drauf. :D:D
Sorry streich die frage mit dem Beispiel. :D:D Also sollte ich die zahlen zusammen rechnen und dann statt *10 *12 nehmen für die Anzahl der Monate?
01.01.2012 -> 20120101 31.12.2011 -> 20111231 - -------- 8870 -> 88 Monate und 70 Tage von Silvester bis Neujahr.
Tetra schrieb: > Sorry ich stehe gerade ein bisschen auf dem Schlauch. > > wie kommst du auf die beiden Zahlen "23" und "8". Oder soll das ein > Beispiel sein? Ja. Es soll ein Beispiel sein für deine Frage "Also wenn ich zum Beispiel J = 2008 M = 12 T = 22 angebe möchte ich Jahr1 = 20081222" Da passiert genau das an 2008 willst du 12 'anhängen', macht 200812 und an diese Zahl wolltest du noch die 22 'anhängen', macht 20081222 Genau die Zahl, die dir als Ergebnis vorschwebte. Und ich hab dir ein Beispiel gebracht, wie man an beispielsweise an die Zahl 23, die Zahl 8 'anhängen' kann. 23 * 10 + 8 >> Frage an dich: Warum in diesem Beispiel *10? > > Da bin ich mir nicht ganz sicher. Damit ich in der Einerstelle die Position freibekomme! Sag mal, wie alt bist du eigentlich? 23 * 10 macht 230 d.h. die 23 sind schon um 1 Stelle nach links verschoben und die Einerstelle hab ich jetzt frei um da die 8 rein zu addieren. 230 + 8 -> 238 schaust du dir die Anfangszahlen an, 23 und 8, und schaust du dir das Endergebnis an, 238, dann entspricht das genau deiner 'Forderung' dass du an die Zahl 23 die Zahl 8 'anhängen' wolltest. und wenn du an 345 die Zahl 87 anhängen willst, dann rechnest du eben 345 * 100 macht 34500 (man beachte: die 345 sind da schon um 2 Stellen nach links verschoben!) und zu den 34500 kommen noch die 87 dazu, macht 34587 Ausgangszahlen: 345 und 87 die 87 an die 345 angehängt muss 34587 ergeben. 345 * 100 + 87 ergibt aber augenscheinlich genau diese 34587 Die 10 bzw 100 haben also ganz offensichtlich damit zu tun, um wieviele Stellen man die Ursprungszahl nach links 'verschieben' will um dann die andere Zahl einaddieren zu können und so die beiden Zahlen 'aneinanderzuhängen'. Einfach mal ein bischen mit Zahlen spielen und nachsehen, wie sich mathematische Operationen präsentieren!
Ok jetzt ist der Groschen gefallen. :D:D Aber die frage ist wie weise ich der Variable 1 diese Rechnung zu? Denn so mache ich etwas falsch: cin >> Jahr1 >> J * 10000;
Die Frage ist eine andere. Die Frage ist, welche Datentypen hast du eigentlich? Denn je nach Datentyp können die Zahlen eine gewisse Größe nicht überschreiten.
Aber wie gesagt, und wie Dirk B. weiter oben schon gezeigt hat: Wenn du deine Systematik weiter verfolgst, kriegst du falsche Ergebnisse! Das geht so nicht. Deine beste Option ist es, zb auszurechnen, wieviele Monate seit einem Stichtag, sagen wir mal beispielsweise den 1.1.1950 vergangen sind. Willst du wissen wieviele Monate zwischen dem 1.11.1999 und dem 1.1.1950 vergangen sind, dann rechnest du. Zwischen dem 1.11.1999 und dem 1.1.1950 liegen erst mal (1999-1950) macht 49 ganze Jahre. 49 ganze Jahre, das sind 49*12 oder 588 Monate. Dazu kommen noch 10 ganze vergangene Monate im Jahre 1999, macht also in Summe 588 + 10 = 598 Monate. Angenommen wir wollen als 2.tes Datum den 14.1.2012 nehmen, dann sieht die Rechnung für dieses Datum so aus zwischen 2012 und 1950 liegen 62 ganze Jahre, das sind also 62*12 gleich 744 Monate. Für 2012 kommt kein ganzer Monat mehr dazu, weil wir ja noch im Jänner sind, und da ist noch kein Monat vergangen. D.h. bezogen auf den 1.1.1950 sind 744 ganze Monate vergangen. 14. 1.2012 744 Monate (bezogen auf den 1.1.1950) 1.11.1999 598 Monate (ebenfalls bezogen auf den 1.1.1950) d.h. zwischen den beiden Daten, 1.11.199 und 14.1.2012, liegen 744-598 gleich 146 Monate. 146 Monate, das sind 12 Jahre und 2 Monate. Denn 146 / 12 macht 12, und 146 % 12 macht 2 un 12*12 + 2 ergibt wieder die 146. Wenn du jetzt die Tage auch noch wissen willst, dann wirds etwas komplizierter. Denn 1 Jahr hat immer 12 Monate. Aber: die Monate haben nicht gleich viele Tage und dann gibt es ja auch noch die Schaltjahre, in denen ein Jahr anstelle von 365 dann 366 Tage hat. PS. Der Stichtag 1.1.1950 war so gewählt, dass man leicht rechnen kann. Denn dann brauch ich keine Jahreswechsel oder dergleichen berücksichtigen. Die Anzahl an ganzen Monaten ist dann immer einfach die Monatsnummer weniger 1.
Hallo ich bin es noch mal: Also ich habe es jetzt so geschrieben: Jahr1 = J * 100; Jahr1_2 = Jahr1 + M; Jahr1_3 = Jahr1_2 * 100; Jahr1_4 = Jahr1_3 + T; cout << Jahr1_4 aber trotzdem kommen noch fehler beim Kompelieren.
Fehlermeldung lesen! Der Compiler schreibt ja nicht einfach nur 'Fehler' hin.
@Buchegger Das habe ich bis jetzt geschrieben: #include "iostream" #include <conio.h> using namespace std; int main() { int J , M , T , Jahr1 , Jahr1_2 , Jahr1_3 , Jahr1_4; cout << "Gebe das Jahr ein! "; cin >> J; cout << "Gebe den Monat ein! (ganze Zahl) "; cin >> M; cout << "Gebe den Tag ein! (ganze Zahl) "; cin >> T; Jahr1 = J * 100; Jahr1_2 = Jahr1 + M; Jahr1_3 = Jahr1_2 * 100; Jahr1_4 = Jahr1_3 + T; cout << Jahr1 getch(); return 0; } Kann es sein das int der falsche Datentyp ist? Ich will ja nicht die Tage bestimmen sondern nur das Alter....
Tetra schrieb: > Kann es sein das int der falsche Datentyp ist? Auf einem PC mit 32-Bit int geht sich das noch aus. Aber was ist mit deiner Fehlermeldung? Hast du die jetzt schon bereinigt? > Ich will ja nicht die Tage bestimmen sondern nur das Alter.... Schon klar. Du sollst aber trotzdem richtig rechnen.
Karl Heinz Buchegger schrieb: > Der Compiler schreibt ja nicht einfach nur 'Fehler' hin. Tetra schrieb: > Das habe ich bis jetzt geschrieben: Und wo ist die Fehlermeldung vom Compiler? Ein Fehler wäre mal: Tetra schrieb:
1 | > cout << Jahr1 |
2 | ^
|
3 | hier fehlt ein Semikolon. |
Tetra schrieb: > Ich will ja nicht die Tage bestimmen sondern nur das Alter.... Die Frage wäre, warum du dann Tage und Monate überhaupt kunstvoll mit den Jahren verbindest, wenn du sie am Schluß doch nur wieder verwirfst.
Ok ich habe es hinbekommen und es funktioniert.... Ich habe habe nur eine letzte Frage: Wie bekomme ich es in das in der Konsolen Anwendung später solche Sätze: cout << "Welches Datum haben wir heute?....Druecke Enter..."; cout << "Trage das Jahr ein!"; nicht nebeneinander stehen sondern untereinander? Also: Welches Datum haben wir heute?....Druecke Enter... Trage das Jahr ein!
Tetra schrieb: > Wie bekomme ich es in das in der Konsolen Anwendung später solche Sätze: > > cout << "Welches Datum haben wir heute?....Druecke Enter..."; > cout << "Trage das Jahr ein!"; > > nicht nebeneinander stehen sondern untereinander? > http://www.cplusplus.com/forum/beginner/2138/
Untereinander heißt in verschiedenen Zeilen. Wie machst du beim Schreiben ein Zeilenumbruch? Mit Enter, richtig, woher soll das Programm auch wissen, dass es eine neue Zeile ist. Der Zeilenumbruch ist ein Steuerzeichen Entweder cout << "\n\r"; oder cout << endl; BTW: Kauf dir ein C++ Buch! Diese kann ich empfehlen: http://www.amazon.de/lernen-professionell-anwenden-Peter-Prinz/dp/3826608240/ref=sr_1_fkmr0_1?ie=UTF8&qid=1326555569&sr=8-1-fkmr0
Das Buch klingt super. Das werde ich mir besorgen. Vielen Dank für die Hilfe Gruß Tetra
Matthias Keller schrieb: > Der Zeilenumbruch ist ein Steuerzeichen > Entweder cout << "\n\r"; Kein \r. Nur \n. > oder cout << endl; Das macht zusätzlich zum Zeilenumbruch noch ein "flush", schreibt also an der Stelle auch alles raus, was noch im Puffer steht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.