Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ. ИзданиС 3-Π΅, исправлСнноС». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 31

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄Π° занимаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ строки, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ располоТСны ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π½ΠΈΡ… Π² массивС.

#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. Π‘ΠΊΠΎΠ±ΠΊΠΈ здСсь Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки [] ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Ρ‡Π΅ΠΌ *. Π‘Π΅Π· скобок объявлСниС