www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - Variable nicht initialisiert
Variable nicht initialisiert < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Variable nicht initialisiert: Hilfe, Korrektur, Idee, Tipp
Status: (Frage) beantwortet Status 
Datum: 17:45 Sa 15.12.2012
Autor: Mija

Aufgabe
Schreiben Sie ein C-Programm, das das Alter des Benutzers in Tagen berechnet und auf die Konsole ausgibt. Dabei soll der Benutzer sein Geburtsdatum und das aktuelle Datum über die Tastatur eingeben. Und wenn das funktioniert, lassen Sie Ihr Programm das Alter auch in Stunden, Minuten und Sekunden ausrechnen und ausgeben.
Tipp: Schreiben Sie eine Funktion anzahlTageBisDatum(), die die Anzahl der Tage in einem Jahr bis zu einem konkreten Datum in diesem Jahr berechnet. Das Datum übergeben Sie der Funktion als Parameter.

Hallo, ich habe das obenstehende Programm zunächst für die Berechnung der Tage geschrieben.

Nachdem ich allerdings alle Daten richtig eingegeben habe, kommt die Fehlermeldung
"Debug Error! Run-Time Check Failure #3 - The Variable 'tageGanzesJahr' is being used without being initialized."

Wo ist mein Fehler?

(Ich weiß, man könnte sicher das Programm noch um einiges verkürzen. Allerdings haben wir noch nicht soviel behandelt)

Hier ist mein Code:

/* Wie alt bin ich? */

#include <stdio.h>

//Funktionsdeklarationen
int schaltjahr(int);
int monatUngerade(int);
int tageGanzesJahrBerechnen(int,int);
int anzahlTageBisDatum(int,int);
int anzahlTageBisEnde(int,int);

//Funktionsdefinitionen

//prüft, ob das betreffende Jahr ein Schaltjahr ist oder nicht
int schaltjahr(int jahr)
{
if ( jahr % 4 == 0 && jahr % 100 != 0 || jahr % 400 == 0 )
return 1;
else
return 0;
}

//Prüfen, ob der Monat ungerade ist (also Monat 01, 03, 05 usw.)
int monatUngerade(int gmonat)
{
if (gmonat % 2 != 0)
{
return 1;
}
else
{
return 0;
}
}

//Jahre zwischen Geburtsjahr und aktuelles Jahr betrachten und dessen Tage zusammenzählen
int tageGanzesJahrBerechnen(int gjahr, int hjahr)
{
int tageGanzesJahr;

while ( gjahr < hjahr )
{
if (schaltjahr(gjahr+1)) // wir wollen das Jahr nach dem Geburtsjahr betrachten, denn das Geburtsjahr ist ja schon abgehandelt
{
tageGanzesJahr = tageGanzesJahr + 366;
}
else
{
tageGanzesJahr = tageGanzesJahr + 365;
}
gjahr++;
}

return tageGanzesJahr;
}


int anzahlTageBisDatum(int htag, int hmonat, int hjahr)
{
int jan = 31; int feb = 0; int maerz = 31; int apr = 30; int mai = 31; int juni = 30;
int juli = 31; int aug = 31; int sep = 30; int okt = 31; int nov = 30; int dez = 31;
int volleMonate;

if (schaltjahr(hjahr)) // aktuelles Jahr ist ein Schaltjahr
{
feb = 29;

if (hmonat = 1)
{
volleMonate = 0;
}
else if (hmonat = 2)
{
volleMonate = jan;
}
else if (hmonat = 3)
{
volleMonate = jan + feb;
}
else if (hmonat = 4)
{
volleMonate = jan + feb + maerz;
}
else if (hmonat = 5)
{
volleMonate = jan + feb + maerz + apr;
}
else if (hmonat = 6)
{
volleMonate = jan + feb + maerz + apr + mai;
}
else if (hmonat = 7)
{
volleMonate = jan + feb + maerz + apr + juni;
}
else if (hmonat = 8)
{
volleMonate = jan + feb + maerz + apr + juni + juli;
}
else if (hmonat = 9)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug;
}
else if (hmonat = 10)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep;
}
else if (hmonat = 11)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep + okt;
}
else if (hmonat = 12)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep + okt + nov;
}
}
else // aktuelles Jahr ist kein Schaltjahr
{
feb = 28;

if (hmonat = 1)
{
volleMonate = 0;
}
else if (hmonat = 2)
{
volleMonate = jan;
}
else if (hmonat = 3)
{
volleMonate = jan + feb;
}
else if (hmonat = 4)
{
volleMonate = jan + feb + maerz;
}
else if (hmonat = 5)
{
volleMonate = jan + feb + maerz + apr;
}
else if (hmonat = 6)
{
volleMonate = jan + feb + maerz + apr + mai;
}
else if (hmonat = 7)
{
volleMonate = jan + feb + maerz + apr + juni;
}
else if (hmonat = 8)
{
volleMonate = jan + feb + maerz + apr + juni + juli;
}
else if (hmonat = 9)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug;
}
else if (hmonat = 10)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep;
}
else if (hmonat = 11)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep + okt;
}
else if (hmonat = 12)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep + okt + nov;
}
}

return volleMonate + htag;

}

int anzahlTageBisEnde(int gtag, int gmonat, int gjahr)
{
int jan = 31; int feb = 0; int maerz = 31; int apr = 30; int mai = 31; int juni = 30;
int juli = 31; int aug = 31; int sep = 30; int okt = 31; int nov = 30; int dez = 31;
int diffMonat;
int summeTage;
int diffTage;

if (gmonat<3)
{
if (schaltjahr(gjahr))
{
feb = 29;
}
else
{
feb = 28;
}
}

//ganze Monate zusammenrechnen

diffMonat = 12 - gmonat;

if (diffMonat = 11)
{
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr + maerz + feb;
}
else if (diffMonat = 10)
{
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr + maerz;
}
else if (diffMonat = 9)
{
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr;
}
else if (diffMonat = 8)
{
summeTage = dez + nov + okt + sep + aug + juli + juni + mai;
}
else if (diffMonat = 7)
{
summeTage = dez + nov + okt + sep + aug + juli + juni;
}
else if (diffMonat = 6)
{
summeTage = dez + nov + okt + sep + aug + juli;
}
else if (diffMonat = 5)
{
summeTage = dez + nov + okt + sep + aug;
}
else if (diffMonat = 4)
{
summeTage = dez + nov + okt + sep;
}
else if (diffMonat = 3)
{
summeTage = dez + nov + okt;
}
else if (diffMonat = 2)
{
summeTage = dez + nov;
}
else if (diffMonat = 1)
{
summeTage = dez;
}
else
{
summeTage = 0;
}

//ganze Tage zusammenrechnen

if ( ( gmonat<8 && monatUngerade(gmonat) ) || ( gmonat >=8 && !monatUngerade(gmonat) ) )
{
diffTage = 31 - gtag;
}
else if ( ( gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gmonat >= 8 && monatUngerade(gmonat) ) )
{
diffTage = 30 - gtag;
}
else if (gmonat = 2 && schaltjahr(gjahr))
{
diffTage = 29 - gtag;
}
else // also if (gmonat = 1 && schaltjahr(gjahr)=FALSE)
{
diffTage = 28 - gtag;
}

return summeTage + diffTage;
}

//Main-Programm
int main(void)
{
int gtag; int gmonat; int gjahr;
int htag; int hmonat; int hjahr;
int tageGeburtsjahr; int tageAktuellesJahr; int tageGanzesJahr; int tageInsgesamt;

//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);

//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);

while ( gtag<1 || gmonat<1 || gjahr<1 || gtag>31
|| ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || ( gmonat=2 && gtag>28 && !schaltjahr(gtag) )
|| ( ( gtag>30 && gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 && monatUngerade(gmonat) ) )
|| htag<1 || hmonat<1 || hjahr<1 || htag>31
|| ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || ( gmonat=2 && gtag>28 && !schaltjahr(gtag) )
|| ( ( gtag>30 && gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 && monatUngerade(gmonat) ) )
)
{
[mm] printf("\nGeben [/mm] Sie ein gueltiges Datum [mm] ein!\n\n"); [/mm]

//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);

//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);
}

while ( (hjahr<gjahr) || (hjahr=gjahr && hmonat<gmonat) || ( ( (hjahr=gjahr) && (hmonat=gmonat) ) && htag<=gtag ) )
{
[mm] printf("\nDas [/mm] Geburtsdatum muss vor dem Enddatum [mm] liegen!\n\n"); [/mm]

//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);

//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);
}

tageGeburtsjahr = anzahlTageBisEnde(gtag, gmonat, gjahr);
tageAktuellesJahr = anzahlTageBisDatum(htag, hmonat, hjahr);
tageGanzesJahr = tageGanzesJahrBerechnen(gjahr, hjahr);

tageInsgesamt = tageGeburtsjahr + tageGanzesJahr + tageAktuellesJahr;

printf("Sie sind %d Jahre [mm] alt!\n\n\n", [/mm] tageInsgesamt);

return 0;
}

        
Bezug
Variable nicht initialisiert: Antwort
Status: (Antwort) fertig Status 
Datum: 18:14 Sa 15.12.2012
Autor: link963

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

> Schreiben Sie ein C-Programm, das das Alter des Benutzers
> in Tagen berechnet und auf die Konsole ausgibt. Dabei soll
> der Benutzer sein Geburtsdatum und das aktuelle Datum über
> die Tastatur eingeben. Und wenn das funktioniert, lassen
> Sie Ihr Programm das Alter auch in Stunden, Minuten und
> Sekunden ausrechnen und ausgeben.
>  Tipp: Schreiben Sie eine Funktion anzahlTageBisDatum(),
> die die Anzahl der Tage in einem Jahr bis zu einem
> konkreten Datum in diesem Jahr berechnet. Das Datum
> übergeben Sie der Funktion als Parameter.
>  Hallo, ich habe das obenstehende Programm zunächst für
> die Berechnung der Tage geschrieben.
>  
> Nachdem ich allerdings alle Daten richtig eingegeben habe,
> kommt die Fehlermeldung
>  "Debug Error! Run-Time Check Failure #3 - The Variable
> 'tageGanzesJahr' is being used without being initialized."
>  
> Wo ist mein Fehler?
>  
> (Ich weiß, man könnte sicher das Programm noch um einiges
> verkürzen. Allerdings haben wir noch nicht soviel
> behandelt)
>  
> Hier ist mein Code:
>  
> /* Wie alt bin ich? */
>  
> #include <stdio.h>
>  
> //Funktionsdeklarationen
>  int schaltjahr(int);
>  int monatUngerade(int);
>  int tageGanzesJahrBerechnen(int,int);
>  int anzahlTageBisDatum(int,int);
>  int anzahlTageBisEnde(int,int);
>  
> //Funktionsdefinitionen
>  
> //prüft, ob das betreffende Jahr ein Schaltjahr ist oder
> nicht
>  int schaltjahr(int jahr)
>  {
>  if ( jahr % 4 == 0 && jahr % 100 != 0 || jahr % 400 == 0
> )
>   return 1;
>   else
> return 0;
>  }
>  
> //Prüfen, ob der Monat ungerade ist (also Monat 01, 03, 05
> usw.)
>  int monatUngerade(int gmonat)
>  {
>   if (gmonat % 2 != 0)
>   {
>   return 1;
>   }
>   else
>   {
>   return 0;
>   }
>  }
>  
> //Jahre zwischen Geburtsjahr und aktuelles Jahr betrachten
> und dessen Tage zusammenzählen
>  int tageGanzesJahrBerechnen(int gjahr, int hjahr)
>  {
>   int tageGanzesJahr;
>  
> while ( gjahr < hjahr )
>   {
>   if (schaltjahr(gjahr+1)) // wir wollen das Jahr nach dem
> Geburtsjahr betrachten, denn das Geburtsjahr ist ja schon
> abgehandelt
>   {
>   tageGanzesJahr = tageGanzesJahr + 366;
>   }
>   else
>   {
>   tageGanzesJahr = tageGanzesJahr + 365;
>   }
>   gjahr++;
>   }
>  
> return tageGanzesJahr;
>  }

Hier steckt ein kleiner Fehler. Du musst der Variable vor der Schleife einen Wert zuweisen, sonst kann dein Compiler im ersten Durchlauf nicht damit rechnen.

>  
>
> int anzahlTageBisDatum(int htag, int hmonat, int hjahr)
>  {
>   int jan = 31; int feb = 0; int maerz = 31; int apr = 30;
> int mai = 31; int juni = 30;
>   int juli = 31; int aug = 31; int sep = 30; int okt = 31;
> int nov = 30; int dez = 31;
>   int volleMonate;
>  
> if (schaltjahr(hjahr)) // aktuelles Jahr ist ein
> Schaltjahr
>   {
>   feb = 29;
>  
> if (hmonat = 1)
>   {
>   volleMonate = 0;
>   }
>   else if (hmonat = 2)
>   {
>   volleMonate = jan;
>   }
>   else if (hmonat = 3)
>   {
>   volleMonate = jan + feb;
>   }
>   else if (hmonat = 4)
>   {
>   volleMonate = jan + feb + maerz;
>   }
>   else if (hmonat = 5)
>   {
>   volleMonate = jan + feb + maerz + apr;
>   }
>   else if (hmonat = 6)
>   {
>   volleMonate = jan + feb + maerz + apr + mai;
>   }
>   else if (hmonat = 7)
>   {
>   volleMonate = jan + feb + maerz + apr + juni;
>   }
>   else if (hmonat = 8)
>   {
>   volleMonate = jan + feb + maerz + apr + juni + juli;
>   }
>   else if (hmonat = 9)
>   {
>   volleMonate = jan + feb + maerz + apr + juni + juli +
> aug;
>   }
>   else if (hmonat = 10)
>   {
>   volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep;
>   }
>   else if (hmonat = 11)
>   {
>   volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep + okt;
>   }
>   else if (hmonat = 12)
>   {
>   volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep + okt + nov;
>   }
>   }
>   else // aktuelles Jahr ist kein Schaltjahr
>   {
>   feb = 28;
>  
> if (hmonat = 1)
>   {
>   volleMonate = 0;
>   }
>   else if (hmonat = 2)
>   {
>   volleMonate = jan;
>   }
>   else if (hmonat = 3)
>   {
>   volleMonate = jan + feb;
>   }
>   else if (hmonat = 4)
>   {
>   volleMonate = jan + feb + maerz;
>   }
>   else if (hmonat = 5)
>   {
>   volleMonate = jan + feb + maerz + apr;
>   }
>   else if (hmonat = 6)
>   {
>   volleMonate = jan + feb + maerz + apr + mai;
>   }
>   else if (hmonat = 7)
>   {
>   volleMonate = jan + feb + maerz + apr + juni;
>   }
>   else if (hmonat = 8)
>   {
>   volleMonate = jan + feb + maerz + apr + juni + juli;
>   }
>   else if (hmonat = 9)
>   {
>   volleMonate = jan + feb + maerz + apr + juni + juli +
> aug;
>   }
>   else if (hmonat = 10)
>   {
>   volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep;
>   }
>   else if (hmonat = 11)
>   {
>   volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep + okt;
>   }
>   else if (hmonat = 12)
>   {
>   volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep + okt + nov;
>   }
>   }
>  
> return volleMonate + htag;
>  
> }
>  
> int anzahlTageBisEnde(int gtag, int gmonat, int gjahr)
>  {
>   int jan = 31; int feb = 0; int maerz = 31; int apr = 30;
> int mai = 31; int juni = 30;
>   int juli = 31; int aug = 31; int sep = 30; int okt = 31;
> int nov = 30; int dez = 31;
>   int diffMonat;
>   int summeTage;
>   int diffTage;
>  
> if (gmonat<3)
>   {
>   if (schaltjahr(gjahr))
>   {
>   feb = 29;
>   }
>   else
>   {
>   feb = 28;
>   }
>   }
>  
> //ganze Monate zusammenrechnen
>  
> diffMonat = 12 - gmonat;
>  
> if (diffMonat = 11)
>   {
>   summeTage = dez + nov + okt + sep + aug + juli + juni +
> mai + apr + maerz + feb;
>   }
>   else if (diffMonat = 10)
>   {
>   summeTage = dez + nov + okt + sep + aug + juli + juni +
> mai + apr + maerz;
>   }
>   else if (diffMonat = 9)
>   {
>   summeTage = dez + nov + okt + sep + aug + juli + juni +
> mai + apr;
>   }
>   else if (diffMonat = 8)
>   {
>   summeTage = dez + nov + okt + sep + aug + juli + juni +
> mai;
>   }
>   else if (diffMonat = 7)
>   {
>   summeTage = dez + nov + okt + sep + aug + juli + juni;
>   }
>   else if (diffMonat = 6)
>   {
>   summeTage = dez + nov + okt + sep + aug + juli;
>   }
>   else if (diffMonat = 5)
>   {
>   summeTage = dez + nov + okt + sep + aug;
>   }
>   else if (diffMonat = 4)
>   {
>   summeTage = dez + nov + okt + sep;
>   }
>   else if (diffMonat = 3)
>   {
>   summeTage = dez + nov + okt;
>   }
>   else if (diffMonat = 2)
>   {
>   summeTage = dez + nov;
>   }
>   else if (diffMonat = 1)
>   {
>   summeTage = dez;
>   }
>   else
>   {
>   summeTage = 0;
>   }
>  
> //ganze Tage zusammenrechnen
>  
> if ( ( gmonat<8 && monatUngerade(gmonat) ) || ( gmonat >=8
> && !monatUngerade(gmonat) ) )
>   {
>   diffTage = 31 - gtag;
>   }
>   else if ( ( gmonat!=2 && gmonat<8 &&
> !monatUngerade(gmonat) ) || ( gmonat >= 8 &&
> monatUngerade(gmonat) ) )
>   {
>   diffTage = 30 - gtag;
>   }
>   else if (gmonat = 2 && schaltjahr(gjahr))
>   {
>   diffTage = 29 - gtag;
>   }
>   else // also if (gmonat = 1 && schaltjahr(gjahr)=FALSE)
>   {
>   diffTage = 28 - gtag;
>   }
>  
> return summeTage + diffTage;
>  }
>  
> //Main-Programm
>  int main(void)
>  {
>   int gtag; int gmonat; int gjahr;
>   int htag; int hmonat; int hjahr;
>   int tageGeburtsjahr; int tageAktuellesJahr; int
> tageGanzesJahr; int tageInsgesamt;
>  
> //Eingabe Geburtsdatum
>   printf("Bitte geben Sie Ihr Geburtsdatum [mm]ein!\n");[/mm]
>   printf("Tag: ");
>   scanf("%d", >ag);
>   printf("Monat: ");
>   scanf("%d", &gmonat);
>   printf("Jahr: ");
>   scanf("%d", &gjahr);
>  
> //Eingabe aktuelles Datum
>  [mm] printf("\nBitte[/mm] geben Sie das heutige Datum [mm]ein!\n");[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)


>   printf("Tag: ");
>   scanf("%d", &htag);
>   printf("Monat: ");
>   scanf("%d", &hmonat);
>   printf("Jahr: ");
>   scanf("%d", &hjahr);
>  
> while ( gtag<1 || gmonat<1 || gjahr<1 || gtag>31
>   || ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || (
> gmonat=2 && gtag>28 && !schaltjahr(gtag) )
>   || ( ( gtag>30 && gmonat!=2 && gmonat<8 &&
> !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 &&
> monatUngerade(gmonat) ) )
>   || htag<1 || hmonat<1 || hjahr<1 || htag>31
>   || ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || (
> gmonat=2 && gtag>28 && !schaltjahr(gtag) )
>   || ( ( gtag>30 && gmonat!=2 && gmonat<8 &&
> !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 &&
> monatUngerade(gmonat) ) )
>   )
>   {
>  [mm] printf("\nGeben[/mm] Sie ein gueltiges Datum [mm]ein!\n\n");[/mm]
>  
> //Eingabe Geburtsdatum
>   printf("Bitte geben Sie Ihr Geburtsdatum [mm]ein!\n");[/mm]
>   printf("Tag: ");
>   scanf("%d", >ag);
>   printf("Monat: ");
>   scanf("%d", &gmonat);
>   printf("Jahr: ");
>   scanf("%d", &gjahr);
>  
> //Eingabe aktuelles Datum
>  [mm] printf("\nBitte[/mm] geben Sie das heutige Datum [mm]ein!\n");[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)


>   printf("Tag: ");
>   scanf("%d", &htag);
>   printf("Monat: ");
>   scanf("%d", &hmonat);
>   printf("Jahr: ");
>   scanf("%d", &hjahr);
>   }
>  
> while ( (hjahr<gjahr) || (hjahr=gjahr && hmonat<gmonat) ||
> ( ( (hjahr=gjahr) && (hmonat=gmonat) ) && htag<=gtag ) )
>   {
>  [mm] printf("\nDas[/mm] Geburtsdatum muss vor dem Enddatum
> [mm]liegen!\n\n");[/mm]
>  
> //Eingabe Geburtsdatum
>   printf("Bitte geben Sie Ihr Geburtsdatum [mm]ein!\n");[/mm]
>   printf("Tag: ");
>   scanf("%d", >ag);
>   printf("Monat: ");
>   scanf("%d", &gmonat);
>   printf("Jahr: ");
>   scanf("%d", &gjahr);
>  
> //Eingabe aktuelles Datum
>  [mm] printf("\nBitte[/mm] geben Sie das heutige Datum [mm]ein!\n");[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)


>   printf("Tag: ");
>   scanf("%d", &htag);
>   printf("Monat: ");
>   scanf("%d", &hmonat);
>   printf("Jahr: ");
>   scanf("%d", &hjahr);
>   }
>  
> tageGeburtsjahr = anzahlTageBisEnde(gtag, gmonat, gjahr);
>   tageAktuellesJahr = anzahlTageBisDatum(htag, hmonat,
> hjahr);
>   tageGanzesJahr = tageGanzesJahrBerechnen(gjahr, hjahr);
>  
> tageInsgesamt = tageGeburtsjahr + tageGanzesJahr +
> tageAktuellesJahr;
>  
> printf("Sie sind %d Jahre [mm]alt!\n\n\n",[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

tageInsgesamt);

>  
> return 0;
>  }

Grüße link963

Bezug
                
Bezug
Variable nicht initialisiert: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:48 Sa 15.12.2012
Autor: Mija

Vielen Dank, nun wird schonmal etwas ausgegeben :D

Allerdings habe ich nun das Problem, dass immer nur etwas über ein Jahr, also z.B. 378 Tage ausgegeben werden, egal welches Geburtsdatum ich nehme.

Bezug
                        
Bezug
Variable nicht initialisiert: Antwort
Status: (Antwort) fertig Status 
Datum: 19:43 Sa 15.12.2012
Autor: link963

Kommt auch ein Wert über 365/366 raus, wenn Geburtsjahr und Datumsjahr gleich sind? Wie hast du die Variable "tageGanzesJahr" initialisiert ?

Grüße link963


Bezug
                                
Bezug
Variable nicht initialisiert: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 19:48 Sa 15.12.2012
Autor: Mija

Wenn ich z.B. den 2.9.2012 als Geburtsdatum nehme und den 15.12.2012 als aktuelles Datum, dann komme über 365/366.
Wenn ich aber z.B. den 28.3.2012 als Geburtsdatum nehme, dann komme ich drunter.

Die Variable tageGanzesJahr ist bei mir zunächst 0 und läuft dann durch die untenstehende while-Schleife:

//Jahre zwischen Geburtsjahr und aktuelles Jahr betrachten und dessen Tage zusammenzählen
int tageGanzesJahrBerechnen(int gjahr, int hjahr)
{
int tageGanzesJahr=0;
int jahrNachGeburt = gjahr + 1;

while ( jahrNachGeburt < hjahr )
{
if (schaltjahr(jahrNachGeburt)) // wir wollen das Jahr nach dem Geburtsjahr betrachten, denn das Geburtsjahr ist ja schon abgehandelt
{
tageGanzesJahr = tageGanzesJahr + 366;
}
else
{
tageGanzesJahr = tageGanzesJahr + 365;
}
jahrNachGeburt++;
}

return tageGanzesJahr;
}

Bezug
                                        
Bezug
Variable nicht initialisiert: Antwort
Status: (Antwort) fertig Status 
Datum: 20:57 Sa 15.12.2012
Autor: link963

Du hast in deinem Code durchgehend einen Fehler gemacht.

Wenn du prüfen willst, ob die Werte von zwei Variablen übereinstimmen, musst du "==" verwenden.
Möchtest du einer Variable einen Wert zuweisen, nimmst du "=".

Also zB
int b = x;
int a = b;

Dann liefert a == b ein true.

Grüße link963

Bezug
                                                
Bezug
Variable nicht initialisiert: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:07 Sa 15.12.2012
Autor: Mija

Oh stimmt, vielen Dank! (peinlich..) Das ist ein typischer Fehler von mir, der mir irgendwie nie auffällt.

Vielen Dank! :)

Bezug
                                                        
Bezug
Variable nicht initialisiert: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:12 Sa 15.12.2012
Autor: link963

Ja, mir ist es auch nicht gleich aufgefallen ;)

Keine Ursache.

Bezug
        
Bezug
Variable nicht initialisiert: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 20:46 Sa 15.12.2012
Autor: Mija

Hier ist mal mein aktueller Code (ich habe noch ein paar Kleinigkeiten gefunden. Mittlerweile bin ich 713 Tage alt :D Ich glaube, dass der Fehler immer noch in der Funktion tageGanzesJahrBerechnen liegt, denn sonst wären es ja wesentlich mehr Tage):

/* Wie alt bin ich? */

#include <stdio.h>

//Funktionsdeklarationen
int schaltjahr(int);
int monatUngerade(int);
int tageGanzesJahrBerechnen(int,int);
int anzahlTageBisDatum(int,int);
int anzahlTageBisEnde(int,int);
int tageInsgesamtBerechnen(int,int,int,int,int,int);

//Funktionsdefinitionen

//prüft, ob das betreffende Jahr ein Schaltjahr ist oder nicht
int schaltjahr(int jahr)
{
if ( jahr % 4 == 0 && jahr % 100 != 0 || jahr % 400 == 0 )
return 1;
else
return 0;
}

//Prüfen, ob der Monat ungerade ist (also Monat 01, 03, 05 usw.)
int monatUngerade(int gmonat)
{
if (gmonat % 2 != 0)
return 1;
else
return 0;
}

//Jahre zwischen Geburtsjahr und aktuelles Jahr betrachten und dessen Tage zusammenzählen
int tageGanzesJahrBerechnen(int gjahr, int hjahr)
{
int tageGanzesJahr=0;
int jahrNachGeburt = gjahr + 1;

while ( jahrNachGeburt < hjahr )
{
if (schaltjahr(jahrNachGeburt)) // wir wollen das Jahr nach dem Geburtsjahr betrachten, denn das Geburtsjahr ist ja schon abgehandelt
{
tageGanzesJahr = tageGanzesJahr + 366;
}
else
{
tageGanzesJahr = tageGanzesJahr + 365;
}
jahrNachGeburt++;
}

return tageGanzesJahr;
}

//berechnet die Tage im aktuellen Jahr vom Jahresanfang bis zum aktuellen Datum
int anzahlTageBisDatum(int htag, int hmonat, int hjahr)
{
int jan = 31; int feb = 0; int maerz = 31; int apr = 30; int mai = 31; int juni = 30;
int juli = 31; int aug = 31; int sep = 30; int okt = 31; int nov = 30; int dez = 31;
int volleMonate=0;
int tageAktuellesJahr=0;

if (schaltjahr(hjahr)) // aktuelles Jahr ist ein Schaltjahr
feb = 29;
else // aktuelles Jahr ist kein Schaltjahr
feb = 28;

if (hmonat = 12)
volleMonate = jan + feb + maerz + apr + mai + juni + juli + aug + sep + okt + nov;
else if (hmonat = 11)
volleMonate = jan + feb + maerz + apr + mai + juni + juli + aug + sep + okt;
else if (hmonat = 10)
volleMonate = jan + feb + maerz + apr + mai + juni + juli + aug + sep;
else if (hmonat = 9)
volleMonate = jan + feb + maerz + apr + mai + juni + juli + aug;
else if (hmonat = 8)
volleMonate = jan + feb + maerz + apr + mai + juni + juli;
else if (hmonat = 7)
volleMonate = jan + feb + maerz + apr + mai + juni;
else if (hmonat = 6)
volleMonate = jan + feb + maerz + apr + mai;
else if (hmonat = 5)
volleMonate = jan + feb + maerz + apr;
else if (hmonat = 4)
volleMonate = jan + feb + maerz;
else if (hmonat = 3)
volleMonate = jan + feb;
else if (hmonat = 2)
volleMonate = jan;
else //falls hmonat = 1
volleMonate = 0;

tageAktuellesJahr = volleMonate + htag;

return tageAktuellesJahr;

}

//berechnet die Tage im Geburtsjahr vom Geburtsdatum bis zum Ende des Geburtsjahres
int anzahlTageBisEnde(int gtag, int gmonat, int gjahr)
{
int jan = 31; int feb = 0; int maerz = 31; int apr = 30; int mai = 31; int juni = 30;
int juli = 31; int aug = 31; int sep = 30; int okt = 31; int nov = 30; int dez = 31;
int diffMonat=0;
int summeTage=0;
int diffTage=0;
int tageGeburtsjahr=0;

if (schaltjahr(gjahr))
feb = 29;
else
feb = 28;

//ganze Monate zusammenrechnen

diffMonat = 12 - gmonat;

if (diffMonat = 11)
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr + maerz + feb;
else if (diffMonat = 10)
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr + maerz;
else if (diffMonat = 9)
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr;
else if (diffMonat = 8)
summeTage = dez + nov + okt + sep + aug + juli + juni + mai;
else if (diffMonat = 7)
summeTage = dez + nov + okt + sep + aug + juli + juni;
else if (diffMonat = 6)
summeTage = dez + nov + okt + sep + aug + juli;
else if (diffMonat = 5)
summeTage = dez + nov + okt + sep + aug;
else if (diffMonat = 4)
summeTage = dez + nov + okt + sep;
else if (diffMonat = 3)
summeTage = dez + nov + okt;
else if (diffMonat = 2)
summeTage = dez + nov;
else if (diffMonat = 1)
summeTage = dez;
else //falls diffMonat = 0
summeTage = 0;

//ganze Tage zusammenrechnen

if ( ( gmonat<8 && monatUngerade(gmonat) ) || ( gmonat >=8 && !monatUngerade(gmonat) ) )
diffTage = 31 - gtag;
else if ( ( gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gmonat >= 8 && monatUngerade(gmonat) ) )
diffTage = 30 - gtag;
else if (gmonat = 2 && schaltjahr(gjahr))
diffTage = 29 - gtag;
else // also if (gmonat = 1 && schaltjahr(gjahr)=FALSE)
diffTage = 28 - gtag;

tageGeburtsjahr = summeTage + diffTage;

return tageGeburtsjahr;
}

int tageInsgesamtBerechnen(int gtag, int gmonat, int gjahr, int htag, int hmonat, int hjahr)
{
int tageGeburtsjahr=0;
int tageAktuellesJahr=0;
int tageGanzesJahr=0;
int tageInsgesamt;

tageGeburtsjahr = anzahlTageBisEnde(gtag, gmonat, gjahr);
tageAktuellesJahr = anzahlTageBisDatum(htag, hmonat, hjahr);
tageGanzesJahr = tageGanzesJahrBerechnen(gjahr, hjahr);

tageInsgesamt = tageGeburtsjahr + tageGanzesJahr + tageAktuellesJahr;

return tageInsgesamt;
}

//Main-Programm
int main(void)
{
int gtag; int gmonat; int gjahr;
int htag; int hmonat; int hjahr;
int tageGeburtsjahr; int tageAktuellesJahr; int tageGanzesJahr;
int tageInsgesamt;

//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);

//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);

//Schleife, falls ein ungültiges Datum eingegeben wurde
while ( gtag<1 || gmonat<1 || gjahr<1 || gtag>31
|| ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || ( gmonat=2 && gtag>28 && !schaltjahr(gtag) )
|| ( ( gtag>30 && gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 && monatUngerade(gmonat) ) )
|| htag<1 || hmonat<1 || hjahr<1 || htag>31
|| ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || ( gmonat=2 && gtag>28 && !schaltjahr(gtag) )
|| ( ( gtag>30 && gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 && monatUngerade(gmonat) ) )
)
{
[mm] printf("\nGeben [/mm] Sie ein gueltiges Datum [mm] ein!\n\n"); [/mm]

//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);

//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);
}

//Schleife, falls Geburtsdatum vor Enddatum liegt
while ( (hjahr<gjahr) || (hjahr=gjahr && hmonat<gmonat) || ( ( (hjahr=gjahr) && (hmonat=gmonat) ) && htag<=gtag ) )
{
[mm] printf("\nDas [/mm] Geburtsdatum muss vor dem Enddatum [mm] liegen!\n\n"); [/mm]

//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);

//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n"); [/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);
}

tageInsgesamt = tageInsgesamtBerechnen(gtag, gmonat, gjahr, htag, hmonat, hjahr);

[mm] printf("\n\nSie [/mm] sind %d Tage [mm] alt!\n\n\n", [/mm] tageInsgesamt);

return 0;
}

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de