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

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

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

 for (gap = n/2; gap β€Ί 0; gap /= 2)

  for (i = gap; i β€Ή n; i++)

   for (j = i - gap; j β€Ί= 0 && v[j] β€Ί v[j+gap]; j -= gap) {

    temp = v[j];

    v[j] = v[j + gap];

    v[j + gap] = temp;

   }

}

Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚Ρ€ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π° Ρ†ΠΈΠΊΠ»Π°. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ управляСт ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ gap ΠΌΠ΅ΠΆΠ΄Ρƒ сравниваСмыми элСмСнтами, сокращая Π΅Π³ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ дСлСния ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ ΠΎΡ‚ n/2 Π΄ΠΎ нуля. Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ элСмСнты. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ - сравниваСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ элСмСнтов, отстоящих Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π½Π° расстоянии gap, ΠΈ пСрСставляСт элСмСнты Π² нСупорядочСнных ΠΏΠ°Ρ€Π°Ρ…. Π’Π°ΠΊ ΠΊΠ°ΠΊ gap ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ свСдСтся ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅, всС элСмСнты Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС Π±ΡƒΠ΄ΡƒΡ‚ упорядочСны. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° for позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ внСшний Ρ†ΠΈΠΊΠ» ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅, хотя ΠΎΠ½ ΠΈ Π½Π΅ являСтся арифмСтичСской прогрСссиСй.

ПослСдний ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π‘ΠΈ - это "," (запятая), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² инструкции for. ΠŸΠ°Ρ€Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятой, вычисляСтся слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. Π’ΠΈΠΏΠΎΠΌ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ выраТСния, Ρ‡Ρ‚ΠΎ позволяСт Π² инструкции for Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎ нСсколько Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вСсти Π΄Π²Π° индСкса ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ reverse(s), которая "ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚" строку s, оставляя Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ строкС s:

#include β€Ήstring.hβ€Ί

/* reverse: ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ строку s (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² s) */

void reverse(char s[])

{

 int с, i, j;

 for (i = 0, j = strlen(s)-1; i β€Ή j; i++, j--) {

  с = s[i];

  s[i] = s[j];

  s[j] = c;

 }

}

ЗапятыС, Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… ΠΈ ΠΏΡ€. Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ-запятыми ΠΈ Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ вычислСний слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ.

Запятыми ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ слСдуСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ. Π‘ΠΎΠ»Π΅Π΅ всСго ΠΎΠ½ΠΈ умСстны Π² конструкциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тСсно связаны Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ (ΠΊΠ°ΠΊ Π² for-Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ reverse), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² макросах, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… многоступСнчатыС вычислСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Ρ‹ ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Запятой-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ reverse ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ символами Π² провСряСмых ΠΏΠ°Ρ€Π°Ρ… элСмСнтов строки, мысля этот ΠΎΠ±ΠΌΠ΅Π½ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Ρƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ:

for (i = 0, j = strlen(s)-1; i β€Ή j; i++, j--)

 Ρ = s[i], s[i] = s[j], s[j] = c;

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.3. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ expand(s1,s2), Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΡƒΡŽ ΡΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½ΡƒΡŽ запись Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ a-z Π² строкС s1 эквивалСнтной ΠΏΠΎΠ»Π½ΠΎΠΉ записью Π°bс…хуz Π² s2. Π’ s1 Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π±ΡƒΠΊΠ²Ρ‹ (прописныС ΠΈ строчныС) ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΠΌΠ΅Ρ‚ΡŒ ΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ случаями, ΠΊΠ°ΠΊ a-b-c, a-z0-9 ΠΈ -a-b. Π‘Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π·Π½Π°ΠΊ - Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ s1 ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ символом минус.

3.6 Π¦ΠΈΠΊΠ» do-while

Как ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π² Π³Π»Π°Π²Π΅ 1, Π² Ρ†ΠΈΠΊΠ»Π°Ρ… while ΠΈ for ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условия окончания Ρ†ΠΈΠΊΠ»Π° выполняСтся Π½Π°Π²Π΅Ρ€Ρ…Ρƒ. Π’ Π‘ΠΈ имССтся Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²ΠΈΠ΄ Ρ†ΠΈΠΊΠ»Π°, do-while, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ эта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ while ΠΈ for дСлаСтся Π²Π½ΠΈΠ·Ρƒ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прохоТдСния Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π°, Ρ‚. Π΅. послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚Π΅Π»ΠΎ выполнится хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π¦ΠΈΠΊΠ» do-while ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

do

 ΠΈΠ½ΡΡ‚рукция

while (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅);

Π‘Π½Π°Ρ‡Π°Π»Π° выполняСтся инструкция, Π·Π°Ρ‚Π΅ΠΌ вычисляСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Если ΠΎΠ½ΠΎ истинно, Ρ‚ΠΎ инструкция выполняСтся снова ΠΈ Ρ‚. Π΄. Когда Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ становится Π»ΠΎΠΆΠ½Ρ‹ΠΌ, Ρ†ΠΈΠΊΠ» Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π¦ΠΈΠΊΠ» do-while эквивалСнтСн Ρ†ΠΈΠΊΠ»Ρƒ repeat-until Π² ПаскалС с Ρ‚ΠΎΠΉ лишь Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС указываСтся условиС продолТСния Ρ†ΠΈΠΊΠ»Π°, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ - условиС Π΅Π³ΠΎ окончания.

ΠžΠΏΡ‹Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» do-while ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ€Π΅ΠΆΠ΅, Ρ‡Π΅ΠΌ while ΠΈ for. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² Π½Π΅ΠΌ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ itoa (ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ atoi), ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π΅ΠΉ число Π² строку символов. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ оказалось нСсколько Π±ΠΎΠ»Π΅Π΅ слоТным Π΄Π΅Π»ΠΎΠΌ, Ρ‡Π΅ΠΌ оТидалось, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ простыС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Ρ†ΠΈΡ„Ρ€Ρ‹ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС. ΠœΡ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сначала формируСтся обратная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° рСвСрсируСтся.

/* itoa: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ n Π² строку s */

void itoa(int n, char s[])

{

 int i, sign;

 if ((sign = n) β€Ή 0) /* сохраняСм Π·Π½Π°ΠΊ */

  n =-n; /* Π΄Π΅Π»Π°Π΅ΠΌ n ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ */

 i = 0;

 do {/* Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Ρ†ΠΈΡ„Ρ€Ρ‹ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС */

  s[i++] = n %10 + '0'; /* ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ†ΠΈΡ„Ρ€Π° */

 } while ((n /= 10) β€Ί 0); /* ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π΅ */

 if (sign β€Ή 0)

  s[i++] = '-';

 s[i] = '\0';

 reverse(s);

}

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ do-while здСсь Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΡƒΠ΄ΠΎΠ±Π½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² s посылаСтся хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ символ, Π΄Π°ΠΆΠ΅ Ссли n Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ. Π’ Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΎΠ΄Π½Ρƒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΌΡ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками (хотя ΠΎΠ½ΠΈ ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΈΡΠΊΡƒΡˆΠ΅Π½Π½Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ принял ΠΏΠΎ ошибкС слово while Π·Π° Π½Π°Ρ‡Π°Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° while.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.4. ΠŸΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ для прСдставлСния чисСл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, наша вСрсия itoa Π½Π΅ справляСтся с самым большим ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ равняСтся -(2n-1), Π³Π΄Π΅ n - Ρ€Π°Π·ΠΌΠ΅Ρ€ слова. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, Ρ‡Π΅ΠΌ это Π²Ρ‹Π·Π²Π°Π½ΠΎ. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π΄Π°Π²Π°Π»Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ числа нСзависимо ΠΎΡ‚ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.5. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ itob(n,s,b), которая ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Ρ†Π΅Π»ΠΎΠ΅ n Π² строку s, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ число ΠΏΠΎ основанию b. Π’ частности, itob(n, s, 16) ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² s тСкст числа n Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.6. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ itoa с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ поля. ΠŸΡ€ΠΈ нСобходимости ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ число Π΄ΠΎΠ»ΠΆΠ½ΠΎ слСва Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ.

3.7 Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ break ΠΈ continue

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° Π½Π΅ ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, осущСствляСмой Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ†ΠΈΠΊΠ»Π°, Π° ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом. Π’Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для Ρ†ΠΈΠΊΠ»ΠΎΠ² for, while ΠΈ do-while, Π° Ρ‚Π°ΠΊΠΆΠ΅ для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ switch прСдоставляСт инструкция break. Π­Ρ‚Π° инструкция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· самого Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰ΠΈΡ… Π΅Π΅ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция, trim, удаляСт ΠΈΠ· строки Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, табуляции, символы Π½ΠΎΠ²ΠΎΠΉ строки; break ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π½Π΅ΠΉ для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌΡƒ справа символу, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΎΡ‚ Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ….

/* trim: удаляСт Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, табуляции ΠΈ Π½ΠΎΠ²Ρ‹Π΅ строки */

int trim(char s[])

{

 int n;

 for (n = strlen(s)-1; n β€Ί= 0, n--)

  if (s[n]!= ' '&& s[n]!= '\t'&& s[n]!= '\n')

   break;

 s[n+1] = '\0';

 return n;

}

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ strlen ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки. Π¦ΠΈΠΊΠ» for просматриваСт Π΅Π³ΠΎ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС, начиная с ΠΊΠΎΠ½Ρ†Π°, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ встрСтится символ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»Π°, табуляции ΠΈ Π½ΠΎΠ²ΠΎΠΉ строки. Π¦ΠΈΠΊΠ» прСрываСтся, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊΠΎΠΉ символ обнаруТится ΠΈΠ»ΠΈ n станСт ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ (Ρ‚. Π΅. вся строка Π±ΡƒΠ΄Π΅Ρ‚ просмотрСна). Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ функция Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈ Π² случаях, ΠΊΠΎΠ³Π΄Π° строка пуста ΠΈΠ»ΠΈ состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· символов-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ continue Π² Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° break, Π½ΠΎ примСняСтся Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ€Π΅ΠΆΠ΅. Она Π²Ρ‹Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚ блиТайший ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰ΠΈΠΉ Π΅Π΅ Ρ†ΠΈΠΊΠ» (for, while ΠΈΠ»ΠΈ do-while) Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Для while ΠΈ do-while это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ условия, Π° для for - ΠΊ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΡŽ шага. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ continue ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ†ΠΈΠΊΠ»Π°ΠΌ, Π½ΠΎ Π½Π΅ ΠΊ switch. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ switch, располоТСнного Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΎΠ½Π° Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ этого Ρ†ΠΈΠΊΠ»Π°.

Π’ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты массива a (ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ).

for (i = 0; i β€Ή n; i++) {

 if (a[i] β€Ή 0) /* пропуск ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов */

  continue;

 β€¦ /* ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов */

}

К инструкции continue часто ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° слоТна, Π° Π·Π°ΠΌΠ΅Π½Π° условия Π² Π½Π΅ΠΌ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅ ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ уровня приводят ΠΊ слишком Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ числу ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ влоТСнности.

3.8 Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ goto ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ

Π’ Π‘ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ порицаСмая ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ инструкция goto ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΈΡ…. Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, Π² этой инструкции Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ нСобходимости, ΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда Π»Π΅Π³ΠΊΠΎ Π±Π΅Π· Π½Π΅Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ. Π”ΠΎ сих ΠΏΠΎΡ€ Π² нашСй ΠΊΠ½ΠΈΠ³Π΅ ΠΌΡ‹ Π½Π΅ использовали goto.

Однако ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ случаи, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… goto ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ. НаиболСС Ρ‚ΠΈΠΏΠΈΡ‡Π½Π° ситуация, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ структурС ΠΈ Π²Ρ‹ΠΉΡ‚ΠΈ сразу ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ большСго числа Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ². Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ break здСсь Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° обСспСчит Π²Ρ‹Ρ…ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· самого Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ: