C++ Variable zuweisen.

Gast #2501048
Lesenswert?

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.
Gast #2501075
Lesenswert?

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?
#2501082
Lesenswert?

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
Gast #2501100
Lesenswert?

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
#2501119
Lesenswert?

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!
#2501148
Lesenswert?

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.
Gast #2501155
Lesenswert?

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.
Gast #2501166
Lesenswert?

@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....
#2501178
Lesenswert?

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.
Gast #2501213
Lesenswert?

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!
#2501236
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren