jazykc  2013.3
upoljazykc
 All Classes Files Functions Variables Typedefs Macros Pages
t20u1.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4 
5 #define MIN_ROK 1980
6 #define MAX_ROK 2000
7 
8 typedef struct {
9  unsigned den:5;
10  unsigned mesic:4;
11  unsigned rok:7;
12 } DATUM;
13 
14 int je_prestupny(unsigned int rok);
15 unsigned int pocet_dnu(unsigned int mesic);
16 int generuj_datumy(const char *nazev, unsigned int pocet);
17 int precti_datumy(char *nazev);
18 DATUM maximum(char *nazev);
19 
20 int main()
21 {
22  DATUM m;
23  generuj_datumy("datumy.dat", 100);
24  precti_datumy("datumy.dat");
25  m = maximum("datumy.dat");
26  printf("\nNejpozdejsi datum je: %u. %u. %u\n", m.den, m.mesic, m.rok + MIN_ROK);
27  system("pause");
28  return 0;
29 }
30 
31 int je_prestupny(unsigned int rok)
32 {
33  if (rok % 100 == 0)
34  return (rok % 400 == 0);
35  else
36  return (rok % 4 == 0);
37 }
38 
39 unsigned int pocet_dnu(unsigned int mesic)
40 {
41  const static int pocet[] = { 31, 28, 31, 30, 31, 30,
42  31, 31, 30, 31, 30, 31
43  };
44  if (mesic <= 12)
45  return pocet[mesic - 1];
46  else
47  return 0;
48 }
49 
50 int generuj_datumy(const char *nazev, unsigned int pocet)
51 {
52  unsigned int i;
53  size_t zapsano;
54  FILE *fw;
55 
56  fw = fopen(nazev, "wb");
57  if (fw == NULL)
58  return 1;
59 
60  srand((unsigned) time(NULL));
61  for (i = 0; i < pocet; i++) {
62  unsigned int den;
63  unsigned int mesic;
64  unsigned int rok;
65  unsigned int max_den;
66  DATUM d;
67  rok = (rand() % (MAX_ROK - MIN_ROK + 1)) + MIN_ROK;
68  mesic = (rand() % 12) + 1;
69  max_den = pocet_dnu(mesic);
70  if ((mesic == 2) && (je_prestupny(rok)))
71  max_den++;
72  den = (rand() % max_den) + 1;
73 
74  d.den = den;
75  d.mesic = mesic;
76  d.rok = rok - MIN_ROK;
77  zapsano = fwrite(&d, sizeof(DATUM), 1, fw);
78  if (zapsano != 1) {
79  fclose(fw);
80  return 2;
81  }
82  }
83  if (EOF == fclose(fw))
84  return 3;
85  return 0;
86 }
87 
88 int precti_datumy(char *nazev)
89 {
90  FILE *fr;
91  DATUM d;
92  size_t precteno;
93 
94  fr = fopen(nazev, "rb");
95  if (fr == NULL)
96  return 1;
97 
98  /* cte dokud to jde - neni testovano,
99  * jestli skonci na konci souboru nebo nastane chyba
100  */
101  do {
102  precteno = fread(&d, sizeof(DATUM), 1, fr);
103  printf("%u. %u. %u\n", d.den, d.mesic, d.rok + MIN_ROK);
104  } while (precteno == 1);
105 
106  if (EOF == fclose(fr))
107  return 3;
108  return 0;
109 }
110 
111 DATUM maximum(char *nazev)
112 {
113  /* DODELAT */
114 }
Definition: t20u1.c:8