Differenz zweier Daten berechnen (Modularisierung)
Ich werde hier kein fertiges Programm posten, das heisst ich werde ganz von vorne bei der Programmentwicklung anfangen
1) Aufgabenstellung
Es soll ermittelt werden wieviel Tage zwischen einem Anfangsdatum und einem Endtaums bestehen. Ausserdem soll überprüft werden ob die Eingabe plausibel ist. Es wird mit dem Kaufmännischen Datum gerechnet.
2) Beschreibung der Aufgabe
3) Modularisierung
Die Aufgabe wird jetzt in verschiedene Funktionen (Module) unterteilt.
Vorteil: Man kann bestimmte Module für andere Programme später verwenden, z.B. Prüfe Datum.
4) Beschreibung der Module
4.1) void LeseDatum (↑↓jahrjahr;↑↓Monat;↑↓Tag)
Liest ein Datum ein, prüft es und wiederholt ggf. die Eingabe.
4.2) ↑DatumKorrekt PrüfeDatum (↓Jahr;↓Monat;↓Tag)
Vergleicht Programmieraufgabe: PrüfeDatum.cpp
4.3) ↑SchaltjahrKorrekt PrüfeSchaltjahr (↓Jahr)
4.4) ↑AnzahlTage (↓Jahr;↓Monat;↓Tag)
Bestimmt die AnzahlTage nach folgender Formel:
anzahlTage: jahr*360+(moant-1)+30+tag
4.5) ↑differenz Bestimme Differenz (↓wert1;↓wert2);
Bestimmt die differenz nach folgender Formel:
Differenz:wert1-wert2
4.6) void AusgabeDifferenz (↓Ausgabewert)
Gibt einen Wert auf den Bildschirm aus.
5) Sturkturgramm
....
6) Quelltext
#include stdio.h //in spitze Klammern
#include conio.h //in spitze Klammern
long ErmittleAnzahlTage(int tag, int monat, int jahr)
{
long zwischenergebniss;
zwischenergebniss = jahr * 360 + ((monat * 1) * 30) + tag;
return zwischenergebniss;
}
long ErmittleDifferenz(int wert1, int wert2)
{
long differenz;
differenz = wert1 - wert2;
return differenz;
}
void AusgabeDifferenz(long differenz)
{
printf ("\nDie Differenz ist %li Tage", differenz);
}
int SchaltjahrPlausibel(int jahr)
{
int letztertag;
if(((jahr%4)==0) && ((jahr%100)!=0) || ((jahr%400)==0))
{
letztertag = 29;
}
else
{
letztertag = 28;
}
return letztertag;
}
int DatumPlausibel(int tag,int monat, int jahr)
{
int letztertag, schaltjahr, plausibel=0;
switch(monat)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:letztertag = 31;
break;
case 4:
case 6:
case 9:
case 11:letztertag = 30;
break;
default:
letztertag = SchaltjahrPlausibel(jahr);
}
if(jahr > 0 && jahr < 9999 && monat >= 1 && monat <= 12 && tag >= 1 && tag <= letztertag)
{
plausibel = 1;
}
else
{
plausibel = 0;
printf ("\n ** Darum war nicht Plausibel, nochmal eingeben! **");
getch();
clrscr();
}
return plausibel;
}
void LeseDatum(int &tag, int &monat, int &jahr)
{
do
{
printf("\nTag: ");
scanf ("%i", &tag);
printf("Monat: ");
scanf ("%i", &monat);
printf("Jahr: ");
scanf ("%i", &jahr);
}while (DatumPlausibel(tag,monat,jahr) == 0);
}
void main(void)
{
int tagAnfang,
monatAnfang,
jahrAnfang,
tagEnde,
monatEnde,
jahrEnde,
anzahlTageAnfang,
anzahlTageEnde;
long differenz;
LeseDatum(tagAnfang,monatAnfang,jahrAnfang);
LeseDatum(tagEnde,monatEnde,jahrEnde);
anzahlTageAnfang = ErmittleAnzahlTage(tagAnfang,monatAnfang,jahrAnfang);
anzahlTageEnde = ErmittleAnzahlTage(tagEnde,monatEnde,jahrEnde);
differenz = ErmittleDifferenz(anzahlTageAnfang,anzahlTageEnde);
AusgabeDifferenz(differenz);
}
Quellcode Bei Rückfragen einfach posten.
(c) liegt bei mir.
|