Programm schreiben (C)

Neue Frage »

Auf diesen Beitrag antworten »
nightowl Programm schreiben (C)

Meine Frage:
Guten Tag,

ich habe eine etwas ungewöhnliche Frage, nämlich ob mir jemand ein Programm
(Aufgabenstellung siehe unten) schreiben kann. Es ist so, dass ich heute noch 6 weiter schreiben muss und die Zeit dafür vmtl. nicht reicht(ich weiß ich weiß früher anfangen...). Jetzt möchte ich euch bitten mir das, meiner Meinung nach, "leichteste" abzunehmen. Vielen Dank schon mal und wenn nicht hab ich eben Pech gehabt :P


Meine Ideen:
Schreiben Sie einen Strukturdatentyp Date zur Speicherung alle Daten ab 01.01.1900. Die Struktur besteht aus drei int-Members (Tag, Monat und Jahr). Schreiben Sie die Funktionen

?Date* newDate(int d, int m, int y),

?Date* delDate(Date* date),

sowie die sechs Zugriffsfunktionen

?void setDateDay(Date* date, int d),

?void setDateMonth(Date* date, int m),

?void setDateYear(Date* date, int y),

?int getDateDay(Date* date),

?int getDateMonth(Date* date),

?int getDateYear(Date* date).

Schreiben Sie die Funktion int isMeaningful(Date* date), die die Zulässigkeit einer Datum überprüft (Rückgabewert 1 bei Zulässigkeit, sonst 0). Die Datum 31.02.2013 z.B. ist nicht zulässig (Schaltjahre nicht vergessen!). Schreiben Sie ferner ein aufrufendes Hauptprogramm, um Ihre Implementierung entsprechend zu testen. Speichern Sie den Source-Code, aufgeteilt in Header-Datei datum.h und datum.c, in das Verzeichnis serie08.
 
Auf diesen Beitrag antworten »
InformaTiger RE: Programm schreiben (C)

Hallo nightowl,

ich denke folgender Code sollte den Job erledigen smile

date.h
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
#ifndef _DATE_H
#define _DATE_H

struct date_t {
    int day;
    int month;
    int year;
};

typedef struct date_t Date;

Date* newDate(int d, int m, int y);

void delDate(Date* date);

void setDateDay(Date* date, int d);

void setDateMonth(Date* date, int m);

void setDateYear(Date* date, int y);

int getDateDay(Date* date);

int getDateMonth(Date* date);

int getDateYear(Date* date);

int isMeaningful(Date* date);

#endif // _DATE_H


date.c
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
#include <stdio.h>
#include <stdlib.h>

#include "date.h"

Date* newDate(int d, int m, int y){
    Date* date = malloc(sizeof(Date));
    if (date == NULL){
        fprintf(stderr, "Failed to allocate memory\n");
        exit(1);
    }
    date->day = d;
    date->month = m;
    date->year = y;

    return date;
}

void delDate(Date* date){
    free(date);
}

void setDateDay(Date* date, int d){
    if (d > 31 || d < 1){
        fprintf(stderr, "Invalid day\n");
        exit(1);
    }
    date->day = d;
}

void setDateMonth(Date* date, int m){
    if (m > 12 || m < 1){
        fprintf(stderr, "Invalid month\n");
        exit(1);
    }
    date->month = m;
}

void setDateYear(Date* date, int y){
    if (y < 1900){
        fprintf(stderr, "Invalid year\n");
        exit(1);
    }
    date->year = y;
}

int getDateDay(Date* date){
    return date->day;
}

int getDateMonth(Date* date){
    return date->month;
}

int getDateYear(Date* date){
    return date->year;
}

int isMeaningful(Date* date){
    if (date->month == 2){
        if (date->year % 4 == 0 && date->year % 100 != 0){
            return date->day > 0 && date->day <= 29;
        } else {
            return date->day > 0 && date->day <= 28;
        }
    }
    
    if (date->month < 0 || date->month > 12){
        return 0;
    } else if (date->month < 8){
        return date->day > 0 && (date->month % 2 == 0) ? date->day <= 30 : date->day <= 31;
    }
    return date->day > 0 && (date->month % 2 == 1) ? date->day <= 30 : date->day <= 31;
}


main.c
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
#include <stdio.h>
#include <stdlib.h>

#include "date.h"

int testDate(Date* date, int d, int m, int y);

int main(void){
    Date* d = newDate(29, 2, 2016);

    printf("%d\n", isMeaningful(d));
    printf("%d\n", testDate(d, 29, 2, 2017));
    printf("%d\n", testDate(d, 31, 1, 1990));
    printf("%d\n", testDate(d, 31, 6, 1986));
    printf("%d\n", testDate(d, 31, 9, 1996));

    /* will exit after first failure */
    printf("%d\n", testDate(d, 0, 1, 1903));
    printf("%d\n", testDate(d, 30, -1, 1905));
    printf("%d\n", testDate(d, 20, 1, 1886));

    delDate(d);
    return EXIT_SUCCESS;
}

int testDate(Date* date, int d, int m, int y){
    setDateDay(date, d);
    setDateMonth(date, m);
    setDateYear(date, y);
    return isMeaningful(date);
}


Mit freundlichen Grüßen
InformaTiger
Auf diesen Beitrag antworten »
nightowI RE: Programm schreiben (C)

Vielen, vielen Dank hat mir sehr geholfen!!
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »