2.8k Aufrufe
Gefragt in Anwendungen(Java,C++...) von Mitglied (205 Punkte)
Ich habe folgendes Problem Der Compiler compiliert fehlerfrei, aber ich bekomme ZB.
tim ist größertim ist größer als Ausgabe . Wo liegt der Fehler???

9 Antworten

0 Punkte
Beantwortet von Mitglied (205 Punkte)
[code]



#include <iostream>
using namespace std;

struct datum1
{
int tag;
int monat;
int jahr;

};

struct person
{
string name1;
datum1 geburtsdatum;

};

int main()
{

// 1.Person
person p1,p2;
cout << "Geben Sie ihr Namen ein: \n";
cin >> p1.name1;
cout << "Geben Sie den tag ihren Geburt ein: \n";
cin >> p1.geburtsdatum.tag;
cout << "Gebsen Sie ihren Geburtsmonat ein: \n";
cin >> p1.geburtsdatum.monat;
cout << "Geben Sie ihren Geburtsjahr ein: \n";
cin >> p1.geburtsdatum.jahr;

// 2.Person
cout << "Geben Sie ihr Namen ein: \n";
cin >> p2.name1 ;
cout << "Geben Sie den tag ihren Geburt ein: \n";
cin >> p2.geburtsdatum.tag;
cout << "Geben Sie ihren Geburtsmonat ein: \n";
cin >> p2.geburtsdatum.monat;
cout << "Geben Sie ihren Geburtsjahr ein: \n";
cin >> p2.geburtsdatum.jahr;


// Wenn beide gleich alt sind !!!!!!!!
if((p1.geburtsdatum.jahr == p2.geburtsdatum.jahr ) && (
p1.geburtsdatum.monat == p2.geburtsdatum.monat ) && (
p1.geburtsdatum.tag == p2.geburtsdatum.tag ) ){

cout << "Beide sind gleich alt";
}

else {
//Das Jahr wird vergliechen!!!!
if( (p1.geburtsdatum.jahr < p2.geburtsdatum.jahr ) ){

cout << p1.name1 << " ist Groeßer";
}

else {
cout << p2.name1 << " ist Groeßer";
}

// I think here i have logic erro
// Jahre sind gleich aber monate sind anderes
!!!
if((p1.geburtsdatum.jahr == p2.geburtsdatum.jahr ) && (
p1.geburtsdatum.monat < p2.geburtsdatum.monat )){
cout << p1.name1 << " ist Groeßer";
}

else {
cout << p2.name1 << " ist Groeßer";
}
}
}
}
getchar();
return 0;
}
0 Punkte
Beantwortet von Mitglied (205 Punkte)
sorry falscher Code

Der ist der richtige Code:

[code]

#include <iostream>
using namespace std;

struct datum1
{
int tag;
int monat;
int jahr;

};

struct person
{
string name1;
datum1 geburtsdatum;

};

int main()
{

// 1.Person
person p1,p2;
cout << "Geben Sie ihr Namen ein: \n";
cin >> p1.name1;
cout << "Geben Sie den tag ihren Geburt ein: \n";
cin >> p1.geburtsdatum.tag;
cout << "Gebsen Sie ihren Geburtsmonat ein: \n";
cin >> p1.geburtsdatum.monat;
cout << "Geben Sie ihren Geburtsjahr ein: \n";
cin >> p1.geburtsdatum.jahr;

// 2.Person
cout << "Geben Sie ihr Namen ein: \n";
cin >> p2.name1 ;
cout << "Geben Sie den tag ihren Geburt ein: \n";
cin >> p2.geburtsdatum.tag;
cout << "Geben Sie ihren Geburtsmonat ein: \n";
cin >> p2.geburtsdatum.monat;
cout << "Geben Sie ihren Geburtsjahr ein: \n";
cin >> p2.geburtsdatum.jahr;


// Wenn beide gleich alt sind !!!!!!!!
if((p1.geburtsdatum.jahr == p2.geburtsdatum.jahr ) && (
p1.geburtsdatum.monat == p2.geburtsdatum.monat ) && (
p1.geburtsdatum.tag == p2.geburtsdatum.tag ) ){

cout << "Beide sind gleich alt";
}


// Wer ist älter vergleicht das jahr
else if( (p1.geburtsdatum.jahr < p2.geburtsdatum.jahr ) ){

cout << p1.name1 << " ist Groeßer";
}

else
cout << p2.name1 << " ist Groeßer";

// Wer ist älter vergleicht den monat
if((p1.geburtsdatum.jahr == p2.geburtsdatum.jahr ) && (
p1.geburtsdatum.monat < p2.geburtsdatum.monat )){

cout << p1.name1 << " ist Groeßer";
}

else
cout << p2.name1 << " ist Groeßer";

// Wer ist älter jahr und monat gleich tag wird vergliechen
if((p1.geburtsdatum.jahr == p2.geburtsdatum.jahr ) && (
p1.geburtsdatum.monat == p2.geburtsdatum.monat ) && (
p1.geburtsdatum.tag < p2.geburtsdatum.tag ) ){

cout << p1.name1 << " ist Groeßer";
}

else
cout << p2.name1 << " ist Groeßer";


getchar();
return 0;
}
0 Punkte
Beantwortet von simontheprogger Mitglied (719 Punkte)
Hallo,

bitte setze Quellcode in die
Code-Formatierung
(Text markieren und auf den "Code"-Button klicken.) oder lade ihn auf einen Pastebin (z.B. https://gist.github.com/ oder https://pastebin.com/) hoch, damit wir besser arbeiten können.

Dein Code hat grundsätzliche Probleme, und ihn zu korrigieren würde mir jetzt zu viel Arbeit machen (außerdem lernt man am Besten, wenn man es selber macht ;) ), deshalb erkläre ich die Vorgehensweise:

Das Hauptproblem ist, das die If-Abfragen sehr unstrukturiert sind.

Besser machst du es so:


if (p1.geburtsdatum.jahr < p2.geburtsdatum.jahr)
{
cout << p1.name << "ist älter.";
}
elseif (p1.geburtsdatum.jahr > p2.geburtsdatum.jahr)
{
cout << p2.name << "ist älter.";
}
else
{
// Hier weitere Abfragen
}


So wird erst verglichen, ob das Geburtsjahr von P1 kleiner ist als das von P2. Wenn das nicht der Fall ist, wird geprüft, ob das Geburtsjahr von P1 größer ist als das von P2. Sollte das auch nicht der Fall sein, so müsse man in gleicher Weise den Monat und dann den Tag prüfen.
Ich hoffe, das hilft dir,

Gruß,
Simon
0 Punkte
Beantwortet von
Hallo @SimonTheProgger, das würde er bestimmt machen, wenn es möglich wäre.
Bei der Fragestellung "Ich möchte eine Frage im Forum stellen" gibt es die von dir erwähnte Beitragsformatierung nicht.
Wenn schon, dann müsste er per Hand ["code] Hier der code [/code] - ohne " eingeben.
Hier der Code


mfg
0 Punkte
Beantwortet von simontheprogger Mitglied (719 Punkte)
Der Code ist bisher so:
pbrd.co/W6ypdb

Wie er sein soll:
pbrd.co/W6ylKp

Und weil ich gerade Zeit hatte, habe ich ihn auch noch geschrieben:
https://gist.github.com/f71aaa975d38d4ce867f
0 Punkte
Beantwortet von Mitglied (205 Punkte)
Danke schön für eure Hilfe ihr beide :-)

Simon ich hab es mal nach deiner Methode gemacht .

#include <iostream>
using namespace std;

struct datum1
{
int tag;
int monat;
int jahr;

};

struct person
{
string name1;
datum1 geburtsdatum;

};

int main()
{

// 1.Person
person p1,p2;
cout << "Geben Sie ihr Namen ein: \n";
cin >> p1.name1;
cout << "Geben Sie den tag ihren Geburt ein: \n";
cin >> p1.geburtsdatum.tag;
cout << "Gebsen Sie ihren Geburtsmonat ein: \n";
cin >> p1.geburtsdatum.monat;
cout << "Geben Sie ihren Geburtsjahr ein: \n";
cin >> p1.geburtsdatum.jahr;

// 2.Person
cout << "Geben Sie ihr Namen ein: \n";
cin >> p2.name1 ;
cout << "Geben Sie den tag ihren Geburt ein: \n";
cin >> p2.geburtsdatum.tag;
cout << "Geben Sie ihren Geburtsmonat ein: \n";
cin >> p2.geburtsdatum.monat;
cout << "Geben Sie ihren Geburtsjahr ein: \n";
cin >> p2.geburtsdatum.jahr;

if(p1.geburtsdatum.jahr < p2.geburtsdatum.jahr)
{

cout << p1.name1 << " ist aelter \n";

}

else if (p1.geburtsdatum.jahr > p2.geburtsdatum.jahr)
{

cout << p2.name1 << " ist aelter \n";

}

else

if(p1.geburtsdatum.jahr == p2.geburtsdatum.jahr &&
(p1.geburtsdatum.monat < p2.geburtsdatum.monat) )
{

cout << p1.name1 << " ist aelter \n";

}

else if (p1.geburtsdatum.jahr == p2.geburtsdatum.jahr &&
(p1.geburtsdatum.monat > p2.geburtsdatum.monat) )
{

cout << p2.name1 << " ist aelter \n";

}

else

if(p1.geburtsdatum.jahr == p2.geburtsdatum.jahr &&
(p1.geburtsdatum.monat == p2.geburtsdatum.monat) &&
(p1.geburtsdatum.tag < p2.geburtsdatum.tag) )
{

cout << p1.name1 << " ist aelter \n";

}

else if (p1.geburtsdatum.jahr == p2.geburtsdatum.jahr &&
(p1.geburtsdatum.monat == p2.geburtsdatum.monat) &&
(p1.geburtsdatum.tag > p2.geburtsdatum.tag) )
{

cout << p2.name1 << " ist aelter \n";

}

else

if((p1.geburtsdatum.jahr == p2.geburtsdatum.jahr) &&
(p1.geburtsdatum.monat == p2.geburtsdatum.monat) &&
(p1.geburtsdatum.tag == p2.geburtsdatum.tag) )
{

cout << " Beide sind Gleich Alt \n";

}






getchar();
return 0;
}
[code]
0 Punkte
Beantwortet von Mitglied (205 Punkte)
Simon eine frage bleibt bei mir noch beim ersten versuch hatte ich es
versucht von:


if((p1.geburtsdatum.jahr == p2.geburtsdatum.jahr ) && (
p1.geburtsdatum.monat == p2.geburtsdatum.monat ) && (
p1.geburtsdatum.tag == p2.geburtsdatum.tag ) ){

cout << "Beide sind gleich alt";
}


Als Standpunkt auszugehen und von dort aus die Verzweigungen
aufzubauen. Würde es überhaupt so gehen? oder müsste ich so wie du
gemacht hast machen???
0 Punkte
Beantwortet von simontheprogger Mitglied (719 Punkte)
Das würde so auch funktionieren. Wäre aber vermutlich ein bisschen mehr Aufwand.
0 Punkte
Beantwortet von Mitglied (205 Punkte)
Ok nochmals vielen dank für deine Hilfe noch ein schönen Abend
...