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.
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
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.
@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.
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/
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.