Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Informatik in der Schule » Programm schreiben (C) » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Programm schreiben (C)
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
nightowl
Grünschnabel


Dabei seit: 09.05.2017
Beiträge: 1

Programm schreiben (C) Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.
09.05.2017 11:29 nightowl ist offline E-Mail an nightowl senden Beiträge von nightowl suchen Nehmen Sie nightowl in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

RE: Programm schreiben (C) Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Why do Java developers wear glasses? Because they can't C#
09.05.2017 19:14 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
nightowI
unregistriert
RE: Programm schreiben (C) Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen, vielen Dank hat mir sehr geholfen!!
09.05.2017 23:47
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Informatik in der Schule » Programm schreiben (C)