ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ²ΠΎΠ΄Π° Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΈ, ΠΏΡΠΈΡΠ΅ΠΌ Π² ΡΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅.
#include βΉstdio.hβΊ
#include βΉstring.hβΊ
#define MAXLINES 5000 /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΡΡΠΎΠΊ */
char *lineptr[MAXLINES]; /* ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΡΠΎΠΊΠΈ */
int readlines(char *lineptr[], int nlines);
void writelines(char *lineptr[], int nlines);
void qsort(char *lineptr[], int left, int right);
/* ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΡΡΠΎΠΊ */
main()
{
int nlines; /* ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΡ ΡΡΡΠΎΠΊ */
if ((nlines = readlines(lineptr, MAXLINES)) βΊ= 0) {
qsort(lineptr, 0, nlines-1);
writelines(lineptr, nlines);
return 0;
} else {
printf("ΠΎΡΠΈΠ±ΠΊΠ°: ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠΎΠΊ\n");
return 1;
}
}
#define MAXLEN 1000 /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ */
int getline(char *, int);
char *alloc(int);
/* readlines: ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ */
int readlines(char *lineptr[], int maxlines)
{
int len, nlines;
char *p, line[MAXLEN];
nlines = 0;
while ((len = getline(line, MAXLEN)) βΊ 0)
if (nlines βΊ= maxlines || (p = alloc(len)) == NULL)
return -1;
else {
line[len-1] = '\0'; /* ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ» \n */
strcpy(p, line);
lineptr[nlines++] = p;
}
return nlines;
}
/* writelines: ΠΏΠ΅ΡΠ°ΡΡ ΡΡΡΠΎΠΊ */
void writelines(char *lineptr[], int nlines)
{
int i;
for (i = 0; i βΉ nlines; i++)
printf("%s\n", lineptr[i]);
}
Π€ΡΠ½ΠΊΡΠΈΡ getline Π²Π·ΡΡΠ° ΠΈΠ· ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ° 1.9. ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π½ΠΎΠ²ΡΠ΅ΡΡΠ²ΠΎ Π·Π΄Π΅ΡΡ - ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ lineptr:
char *lineptr[MAXLINES];
Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ°Π΅ΡΡΡ, ΡΡΠΎ lineptr Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· MAXLINES ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° char. ΠΠ½Π°ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, lineptr[i] - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ», Π° *lineptr[i] - ΡΠΈΠΌΠ²ΠΎΠ», Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ (ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» i-ΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ΅ΠΊΡΡΠ°).
Π’Π°ΠΊ ΠΊΠ°ΠΊ lineptr - ΠΈΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Π°, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°ΠΊΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Ρ. Π΅. ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ , ΠΈ writelines ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
/* writelines: ΠΏΠ΅ΡΠ°ΡΡ ΡΡΡΠΎΠΊ */
void writelines(char *lineptr[], int nlines)
{
while (nlines-- βΊ 0)
printf("%s\n", *lineptr++);
}
ΠΠ½Π°ΡΠ°Π»Π΅ *lineptr ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΡ ΡΡΡΠΎΠΊΡ: ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ *lineptr ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ, ΠΈ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΡΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° nlines Π½Π΅ ΡΡΠ°Π½Π΅Ρ Π½ΡΠ»Π΅ΠΌ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Ρ Π²Π²ΠΎΠ΄ΠΎΠΌ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅. ΠΡΡΡΡΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π² Π³Π»Π°Π²Π΅ 4, Π½Π°Π΄ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ: Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ strcmp. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΎΡΡΠ°Π»ΡΡ ΡΠ΅ΠΌ ΠΆΠ΅, ΠΈ ΡΡΠΎ Π΄Π°Π΅Ρ Π½Π°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΡ Π² Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ.
/* qsort: ΡΠΎΡΡΠΈΡΡΠ΅Ρ v[left]β¦v[right] ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ */
void qsort(char *v[], int left, int right)
{
int i, last;
void swap(char *v[], int i, int j);
if (left βΊ= right) /* Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ */
return; /* ΠΌΠ΅Π½Π΅Π΅ Π΄Π²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² */
swap(v, left, (left+right)/2);
last = left;
for(i = left+1; i βΉ= right; i++)
if (strcmp(v[i], v[left]) βΉ 0)
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last-1);
qsort(v, last+1, right);
}
ΠΠ΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΏΠΎΠΏΡΠ°Π²ΠΊΠΈ ΡΡΠ΅Π±ΡΡΡΡΡ ΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ.
/* swap: ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ v[i] ΠΈ v[j] */
void swap(char *v[], int i, int j)
{
char *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° v (Ρ. Π΅. lineptr) ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ», temp Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠΏ, ΡΡΠΎ ΠΈ v - ΡΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ temp ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ v.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.7. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ readlines, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π»Π° Π±Ρ ΡΡΡΠΎΠΊΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Π² main, Π° Π½Π΅ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π»Π° ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ alloc. ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΡΡΡΠ΅Π΅ ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°?
5.7 ΠΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ
Π Π‘ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΏΡΠ°Π²Π΄Π°, Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΆΠ΅. Π ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅ ΠΌΡ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π·Π°Π΄Π°ΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π΄Π°ΡΡ "Π΄Π΅Π½Ρ-ΠΌΠ΅ΡΡΡ" Π² "Π΄Π΅Π½Ρ Π³ΠΎΠ΄Π°" ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 1 ΠΌΠ°ΡΡΠ° - ΡΡΠΎ 60-ΠΉ Π΄Π΅Π½Ρ Π½Π΅Π²ΠΈΡΠΎΠΊΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ 61-ΠΉ Π΄Π΅Π½Ρ Π²ΠΈΡΠΎΠΊΠΎΡΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΡΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ: ΡΡΠ½ΠΊΡΠΈΡ day_of_year Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΡΡ ΠΈ Π΄Π΅Π½Ρ Π² Π΄Π΅Π½Ρ Π³ΠΎΠ΄Π°, a month_day - Π΄Π΅Π½Ρ Π³ΠΎΠ΄Π° Π² ΠΌΠ΅ΡΡΡ ΠΈ Π΄Π΅Π½Ρ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠ΅ΡΡΡ ΠΈ Π΄Π΅Π½Ρ Π±ΡΠ΄ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ. Π’Π°ΠΊ Π²ΡΠ·ΠΎΠ²
month_day(1988, 60, &m, &d)
ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ m Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 2, Π° d - 29 (29 ΡΠ΅Π²ΡΠ°Π»Ρ).
ΠΠ°ΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ Π½ΡΠΆΠ½Π° ΠΎΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±Π»ΠΈΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΠΈΡΠ»Π° Π΄Π½Π΅ΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΡΠ°. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ Π²ΠΈΡΠΎΠΊΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈ Π½Π΅Π²ΠΈΡΠΎΠΊΠΎΡΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ΄ΠΎΠ² ΡΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ Π±ΡΠ΄ΡΡ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ, ΠΏΡΠΎΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π΄Π²Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π² Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅, ΡΠ΅ΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΎΡΠΎΠ±ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ Ρ ΡΠ΅Π²ΡΠ°Π»Π΅ΠΌ. ΠΠ°ΡΡΠΈΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
static char daytab[2][13] = {
{0, 31, 28, 31. 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
}
/* day_of_year: ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΄Π΅Π½Ρ Π³ΠΎΠ΄Π° ΠΏΠΎ ΠΌΠ΅ΡΡΡΡ ΠΈ Π΄Π½Ρ */
int day_of_year(int year, int month, int day)
{
int i, leap;
leap = year % 4 == 0 && year % 100 !=0 || year % 400 == 0;
for (i = 1; i βΉ month; i++)
day += daytab[leap][i];
return day;
}
/* month_day: ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ΅ΡΡΡ ΠΈ Π΄Π΅Π½Ρ ΠΏΠΎ Π΄Π½Ρ Π³ΠΎΠ΄Π° */
void month_day(int year, int yearday, int *pmonth, int *pday)
{
int i, leap;
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
for (i = 1; yearday βΊ daytab[leap][i]; i++)
yearday -= daytab[leap][i];
*pmonth = i;
*pday = yearday;
}
ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ, ΡΡΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ»ΠΎΡΡ leap) ΡΠ°Π²Π½ΠΎ Π»ΠΈΠ±ΠΎ Π½ΡΠ»Ρ (Π»ΠΎΠΆΡ), Π»ΠΈΠ±ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ (ΠΈΡΡΠΈΠ½Π°), ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ daytab.
ΠΠ°ΡΡΠΈΠ² daytab Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠ±Π΅ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ day_of_year ΠΈ month_day, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½ΡΠΆΠ΅Π½ ΠΈ ΡΠΎΠΉ ΠΈ Π΄ΡΡΠ³ΠΎΠΉ. ΠΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π΅Π³ΠΎ ΡΠΈΠΏΠ° char, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΊΠΎΠ½Π½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠΏΠ° char Π΄Π»Ρ ΠΌΠ°Π»ΡΡ ΡΠ΅Π»ΡΡ Π±Π΅Π· Π·Π½Π°ΠΊΠ°.
ΠΠ°ΡΡΠΈΠ² daytab - ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· ΡΠΈΡΠ»Π° Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΡ , Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΡ Π΅ΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ Π΄Π΅Π»Π°. Π‘ΡΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π² Π‘ΠΈ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ - ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ°ΡΡΠΈΠ². ΠΠΎΡΡΠΎΠΌΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠ°ΠΊ:
daytab[i][j] /* [ΡΡΡΠΎΠΊΠ°] [ΡΡΠΎΠ»Π±Π΅Ρ] */
Π° Π½Π΅ ΡΠ°ΠΊ:
daytab[i,j] /* ΠΠΠΠΠ ΠΠ */
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² Π‘ΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π»ΠΈΡΡ Π² ΡΠΎΡΠΌΠ΅ Π·Π°ΠΏΠΈΡΠΈ, Π² ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°ΠΊΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠΈ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ . ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΡΡ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ΅ ΠΈΡ Π² ΡΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΡΠ°ΠΌΡΠΉ ΠΏΡΠ°Π²ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ.
ΠΠ°ΡΡΠΈΠ² ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ Π² ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ; ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΏΠΎΠ΄ΡΠΏΠΈΡΠΊΠΎΠΌ. ΠΡΠ»Π΅Π²ΠΎΠΉ ΡΡΠΎΠ»Π±Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Π½Π°ΡΠ°Π»ΠΎ daytab Π»ΠΈΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΡΠΎΠ²ΠΏΠ°Π΄Π°Π»ΠΈ Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΌΠ΅ΡΡΡΠ΅Π² ΠΎΡ 1 Π΄ΠΎ 12. ΠΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ ΠΏΠ°ΡΡ ΡΡΠ΅Π΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π·Π΄Π΅ΡΡ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΌΡΡΠ»Π°, Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΆΠ΅ Π½Π΅ Π½Π°Π΄ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ, Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ½ΠΎΠΉ.
ΠΡΠ»ΠΈ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π΅ΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ²; ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ΅ΠΆΠ΄Π΅, ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· 13 Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° int. B Π½Π°ΡΠ΅ΠΌ ΡΠ°ΡΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΈΠ· 13 Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° int. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² daytab ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ f, ΡΠΎ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
f(int daytab[2][13]) {β¦}
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ
f(int daytab[][13]) {β¦}
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΡΠ»ΠΎ ΡΡΡΠΎΠΊ Π·Π΄Π΅ΡΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈΠ»ΠΈ
f(int (*daytab)[13]) {β¦}
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ Π·Π°ΠΏΠΈΡΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· 13 Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° int. Π‘ΠΊΠΎΠ±ΠΊΠΈ Π·Π΄Π΅ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ [] ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, ΡΠ΅ΠΌ *. ΠΠ΅Π· ΡΠΊΠΎΠ±ΠΎΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅