S
Das Ding is nur. Wir wurden da in der Klasse alle ins kalte Wasser geworfen. Ich hab keinen schnall von C++. Ich weiß echt nicht mehr weiter. Vor allem muss ich eigentlich fürs Abi lernen und nicht dieses Programm schreiben.
Und wie ich das nun machen soll mit der Klasse oder so...ka...
Mein Kompletter Quellcode sieht so aus.
Die Funktion Geburtstagskalender ist hierbei nicht wichtig..so wollte ich das vorher mal lösen aber geht net.
/***************************************************************************
main.cpp - description
-------------------
begin : Sunday July 7 11:13:38 GMT+8 2002
copyright : (C) 2002 by Jerry Jenkins
email : Jerry_J_Jenkins@hotmail.com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************
* *
* In the Gregorian calendar, which is widely used now, the year AD 1 *
* is directly preceded by the year 1 BC; a year 0 does not exist in *
* this system. In contrast, astronomical reckoning indeed uses a year *
* 0. For the purpose of distinction, astronomical reckoning drops the *
* symbols AD and BC and uses a plus or minus sign before the year *
* instead. The astronomical year +1 therefore corresponds to the year *
* AD 1, the year 0 corresponds to 1 BC, and the year -1 to 2 BC. For *
* convenience, I'll use astronomical years in the program. *
* *
***************************************************************************/
#ifdef HAVE_CONFIG_H //Kurzschreibweise für #if defined
#include <config.h>
#endif
#include <iostream.h>
#include <fstream>
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
using namespace std;
int DayOfWeek( int nYear, int nMonth, int nDay ); //Integer Deklaration
int CountOfFeb29( int nYear );
bool Schaltjahr( int nYear );
char Geburtstagskalender ( int nDay, int nMonth);
/**************************************************
* int main muss in jedem Programm enthalten sein.*
* Es ist der Einstiegspunkt des Programms. *
* In den Klammer () werden die *
* Variablen argc in Interherund argv in Char *
* deklariert. *
* Hier ist es dafür zuständig Die Ausgabe und *
* Abfrage zu erstellen *
* ************************************************/
int main(int argc, char *argv[]) //Definiert in der Datei "stdlib.h"
{
int nYear, nMonth, nDay; //deklarieren der Variablen Year Month und Day
const static char aszWeekDayNames[][16] = //Erstellen eines Arrays. Jede spallte kann Maximal 16 Zeichen lang sein.
{
"Sonntag",
"Montag",
"Dienstag",
"Mittwoch",
"Donnerstag",
"Freitag",
"Samstag" //Dem Array werden die 7 Wochentage zugewiesen
};
printf( "Druecken Sie CTRL+C um das Programm zu beenden.\n\n" ); //Ausgabe: "Drücken Sie CTRL+C um das Programm zu beenden."
while( 1 ) //Eine whileschleife wird gestartet
{
//prinf ist eine Ausgabe: Tag,Monat,Jahr
printf ( "Tag,Monat,Jahr\t: " );
//scanf ist ein Formatbezeichner. Durch "%d" erwartet das Programme eine Decimalzahl
scanf ( "%d,%d,%d", &nDay, &nMonth, &nYear );
//Ausgabe:Das Programm gibt das aus was man als Datum eingegeben hat + den Tag.
//"%d" Stellt hier die Zahlen da, die man eingegeben hat.
//"\t" ist ein horizontaler Tab.
//"%s" steht für den String. Hier der Wochentag
printf ( "%d,%d,%d\t: %s\n", nDay, nMonth, nYear,
aszWeekDayNames[ DayOfWeek( nYear, nMonth, nDay ) ] );
printf ("Vom Jahr 0 bis zum Jahr %d gibt es %d Schaltjahre\n", nYear, CountOfFeb29(nYear));
Geburtstagskalender (nDay,nMonth);
//Textdatei einlesen
char filename[128] = "test.txt";
ifstream file;
char zeile[1024];
// Dateinamen einlesen
//cout << "Dateinamen eingeben: " << flush;
//cin.getline(filename, 127);
// Datei öffnen
file.open(filename, ios::in);
if (file.good())
{
// Wenn die Datei geoeffnet werden konnte...
// An den Anfang der Datei springen
file.seekg(0L, ios::beg);
while (! file.eof())
{
// Die Datei zeilenweise auslesen
file.getline(zeile, 1024, ';');
cout << zeile << endl;
}
}
else
{
// Wenn die Datei nicht geoeffnet werden konnte,
// aus welchen Gruenden auch immer...
cout << "Datei nicht gefunden." << endl;
}
}
return EXIT_SUCCESS; //Ein vordefinierter Wert für das ende der Main Funktion
}
/**************************************************
* Dies ist das eigentlich Programm zur Bestimmung*
* des Wochentages. Die Variablen Year Month und *
* Day werden der Function übergeben *
* ************************************************/
int DayOfWeek( int nYear, int nMonth, int nDay ) //Übergeben der Variablen aus der Main Funktion
{
int nDayOfWeek; //DayOfWeek wird als Integer deklariert
/* const = Die Variable wird hier definiert und kann später nicht mehr geändert werden.
static = eine Globale Variable wird erzeugt. Diese Variable gilt somit auch in anderen Funktionen.
int = Integer. Ganze Zahl.
*/
const static int pnDaysBeforeMonth[] = //DaysBeforeMonth werden die Werte durch ein Array zugewiesen
{
//In dem Array werden 14 Zahlen gespeichert. Man fäng bei 0 an zu zählen.
//Weiter unten wird dann der Wert des eingegebenen Monats um einen erhöht.
//Man gibt 12 ein + 1. D.h. wir haben 365 Tage.
0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
};
assert //"Assert" heißt soviel wie "bestehen auf"
(
nMonth > 0 && nMonth <= 12 //Monath muss größer sein als 0 und kleiner gleich 12
);
assert //Assert ist eine Behauptung, falls sie nicht eintritt, wird das Programm sofort abgebrochen
(
nDay > 0 //Es müssen mehr als 0 Tage angegeben werden
);
assert
(
nDay <= ( pnDaysBeforeMonth[ nMonth+1 ] - pnDaysBeforeMonth[ nMonth ] ) //Die Tage müssen kleinergleich (Monate+1)-Monate sein.
|| ( nMonth == 2 && nDay == 29 && Schaltjahr(nYear) ) //oder die Tage müssen kleinergleich (Monat:2 Tag:29 und dem Schaltjahr sein)
);
/* the day of Jan 1, nYear */
nDayOfWeek = 6 + nYear % 7 + CountOfFeb29(nYear) % 7 + 14;/* + 14 : makes nDayOfWeek >= 0 */
/* the day of nMonth 1, nYear */
nDayOfWeek += pnDaysBeforeMonth[ nMonth ];
if( nMonth > 2 && Schaltjahr(nYear) ) nDayOfWeek++;
/* the day of nMonth nDay, nYear */
nDayOfWeek += nDay - 1;
nDayOfWeek %= 7;
return nDayOfWeek;
}
/********************************************************
*Diese Function zählt wieviele 29. Ferbuare es bis *
* zum angegebenen Datum gibt und gibt sie dann mittels *
* der Retunrfunction in der Variablen nCount aus. *
********************************************************/
int CountOfFeb29( int nYear )
{
int nCount = 0; //Die Variable nCount wird deklariert und 0 gesetzt
if( nYear > 0 ) //Wenn die Jahre größer als 0 sind durchläuft das Programm die If-Schleife
{
nCount = 1; //Das Jahr 0 ist ein Schaltjahr
nYear--; //Das eingebene Jahr wird um ein Jahr zurück gesetzt
}
nCount += nYear / 4 - nYear / 100 + nYear / 400;
return nCount; //Die Variable wird mit der Returnfunction an andere Unterprogramme übergeben
}
/****************************************
* Function zur Überprüfung ob sich vom *
* Jahr 0 bis zum angegebenen Jahr ein *
* Schaltjahr befindet *
****************************************/
bool Schaltjahr( int nYear ) //Schaltjahr
{
if( nYear % 4 != 0 ) return false; //Wenn man die Angegebenen jahre durch vier teilt und das Ergebnis nicht 0 ist gibt er ein false aus
if( nYear % 100 != 0 ) return true; //Wenn die angegebenen Jahre durch hundert geteielt nicht null sind gibt die Funktion ein true aus
return ( nYear % 400 == 0 );
}
char Geburtstagskalender ( int nDay, int nMonth)
{
int a = nMonth;
int b = nDay-1;
char Januar [30][20] = {"bam","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","Splete"};
char Februar [30][20] = {"Splete"};
char Maerz [30][20] = {"Freeety"};
char April [30][20] = {"Hubert"};
char Mai [30][20] = {"Cornelia"};
char Juni [30][20] = {"Baaaaaa"};
char Juli [30][20] = {};
char August [30][20] = {};
char September [30][20] = {};
char Oktober [30][20] = {};
char November [30][20] = {};
char Dezember [30][20] = {};
switch(a)
{
case 1 : cout<<Januar [b];break;
case 2 : cout<<Februar [b];break;
case 3 : cout<<Maerz [b];break;
case 4 : cout<<April [b];break;
case 5 : cout<<Mai [b];break;
case 6 : cout<<Juni [b];break;
case 7 : cout<<Juli [b];break;
case 8 : cout<<August [b];break;
case 9 : cout<<September[b];break;
case 10 : cout<<Oktober [b];break;
case 11 : cout<<November[b];break;
case 12 : cout<<Dezember[b];break;
default : cout<<"An diesem Tag hat keiner Geburtstag.\n\n";
}
return 0;
}