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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Освой ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π‘++ Π·Π° 21 дСнь.Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 40

Автор ДТСсс Π›ΠΈΠ±Π΅Ρ€Ρ‚ΠΈ

while (counter < 5).


РассмотрСнный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ возмоТности языка C++ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ мноТСством способов. Листинг 7.11 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ скорСС для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ гибкости возмоТностСй C++, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ программист Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Π°ΠΆΠ΅ всС Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ†ΠΈΠΊΠ»Π° for, Π° для управлСния Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ break ΠΈ continue. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования конструкции for Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 7.12.

Листинг 7.12. ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

1: //Листинг 7.12.

2: // ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

3:

4: #include <iostream.h>

5:

6: int nain()

7: {

8:    int counter=0; ,// установка Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния счСтчика

9:    int max;

10:   cout << " How many hellos?";

11:   cin >> max;

12:   for (;;) // Π·Π°Π΄Π°Π½ΠΈΠ΅ бСсконСчного Ρ†ΠΈΠΊΠ»Π°

13:   {

14:     if (counter < max) // ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° значСния

15:     {

16:       cout << "Hello!\n";

17:       counter++; // ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ значСния счСтчика

18:     }

19:     else

20:       break;

21:   }

22:   return 0;

23: }


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

How many hellos?

Hello!

Hello!

Hello!


Анализ: Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for максимально ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½. ΠžΠΏΡƒΡ‰Π΅Π½Ρ‹ всС Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° β€” инициализация, условиС ΠΈ опСрация. ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика присваиваСтся Π² строкС 8 Π΅Ρ‰Π΅ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ†ΠΈΠΊΠ»Π°. УсловиС продолТСния Ρ†ΠΈΠΊΠ»Π° Ρ‚Π°ΠΊΠΆΠ΅ провСряСтся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС (строка 14), ΠΈ, Ссли ΠΎΠ½ΠΎ истинно, выполняСтся опСрация Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π°, послС Ρ‡Π΅Π³ΠΎ Π² строкС 17 увСличиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика. Если условиС Π½Π΅ выполняСтся, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break Π² строкС 20 ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π°.

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ рассмотрСнная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выглядит достаточно Π½Π΅Π»Π΅ΠΏΠΎ, Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ситуации, ΠΊΠΎΠ³Π΄Π° конструкции for(;;) ΠΈ while(true) ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ‚Π°ΠΊΠΈΡ… конструкций Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅ послС рассмотрСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch.

ИспользованиС пустых Ρ†ΠΈΠΊΠ»ΠΎΠ² for

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ синтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π΅Π³ΠΎ описании Ρ†ΠΈΠΊΠ»Π° достаточно слоТныС конструкции, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· пустой строки, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉΡΡ символом Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой (;). Π”Π°Π½Π½Ρ‹ΠΉ символ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ for. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ пустого Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 7.13.

Листинг 7.13. ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ пустого Ρ†ΠΈΠΊΠ»Π°

1: // Листинг 7.13.

2: // ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for

3: // для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ "пустого" Ρ†ΠΈΠΊΠ»Π°

4:

5: #include <iostream.h>

6: int main()

7: {

8:    for (int i = 0; i<5; cout << "i: " << i++ << endl)

9:    ;

10:   return 0;

11: }


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

i: 0

i: 1

i: 2

i: 3

i: 4


Анализ: ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for Π² строкС 8 содСрТит всС Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС состоит ΠΈΠ· описания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i ΠΈ присвоСния Π΅ΠΉ значСния 0. Π—Π°Ρ‚Π΅ΠΌ провСряСтся условиС i<5, ΠΈ, Ссли ΠΎΠ½ΠΎ выполняСтся, Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ выводится Π½Π° экран ΠΈ увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ.

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


8: for (int i = 0; i<5; i++)

9: cout << "i: " << i << endl;


Оба Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° записи Ρ€Π°Π²Π½ΠΎΡ†Π΅Π½Π½Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈ понятнСС.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹

Π¦ΠΈΠΊΠ», ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² Ρ‚Π΅Π»Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ. Π’ этом случаС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ выполняСтся Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ внСшнСго Ρ†ΠΈΠΊΠ»Π°. Листинг 7.14 дСмонстрируСт Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ элСмСнтов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

Листинг 7.14. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹

1: // Листинг 7.14.

2: // Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ for

3:

4: #include <iostream.h>

5:

6: int main()

7: {

8:    int rows, columns;

9:    char theChar;

10:   cout << "How many rows? ";

11:   cin >> rows;

12:   cout << "How many columns? ";

13:   cin >> columns;

14:   cout << "What character? ";

15;   cin >> theChar;

16:   for (int i = 0; i<rows; i++)

17:   {

18:     for (int j = 0; j<columns; j++)

19:     cout << theChar;

20:     cout << "\n";

21:   }

22;   return 0;

23: }


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

How many rows? 4

How many columns? 12

What character? x

xxxxxxxxxxxx

xxxxxxxxxxxx

xxxxxxxxxxxx

xxxxxxxxxxxx


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

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Ρ‚Π΅Π»Π° внСшнСго Ρ†ΠΈΠΊΠ»Π° (строка 18) инициализируСтся Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ». ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ j присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 ΠΈ начинаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π»Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Π’ строкС 19 символ, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈ Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, выводится Π½Π° экран. На этом пСрвая итСрация Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° заканчиваСтся. Π’Ρ‹Π²ΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΉ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° выполняСтся условиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° (j<columns). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ j становится Ρ€Π°Π²Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ columns, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° прСкращаСтся.

ПослС Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ (12 символов "x") ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся Π² строку 20 ΠΈ выводится символ Π½ΠΎΠ²ΠΎΠΉ строки. ПослС этого провСряСтся условиС внСшнСго Ρ†ΠΈΠΊΠ»Π° (i<rows) ΠΈ, Ссли ΠΎΠ½ΠΎ справСдливо, выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ итСрация.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ внСшнСго Ρ†ΠΈΠΊΠ»Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ с Π½Π°Ρ‡Π°Π»Π°. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ j присваиваСтся Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

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

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-счСтчиков Ρ†ΠΈΠΊΠ»ΠΎΠ² for

Π”ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, описанных Π² Ρ†ΠΈΠΊΠ»Π΅ for, Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΠ»Π°ΡΡŒ Π½Π° вСсь Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ. Богласно Π½ΠΎΠ²ΠΎΠΌΡƒ стандарту, установлСнному ANSI, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, описанных Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅, Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π°. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, нСсмотря Π½Π° внСсСнныС измСнСния, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ компиляторы ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ старый стандарт. Набрав ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ свой компилятор Π½Π° соотвСтствиС Π½ΠΎΠ²ΠΎΠΌΡƒ стандарту.

#include <iostream.h>

int main()

{

   // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° области видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i

   for (int i = 0; i<5; i++)

   {

     cout << "i: " << i << endl;

   }

   i = 7; // i находится Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ области видимости

   return 0;

}

Если такая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· ошибок, Π·Π½Π°Ρ‡ΠΈΡ‚, ваш компилятор Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ стандарта ANSI.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΌΡƒ стандарту, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС ΠΎΠ± ошибкС для выраТСния i = 7. ПослС внСсСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ всСми компиляторами Π±Π΅Π· ошибок.

#include <iostream.h>

int main()

{

   int i; //объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π°

   for (int i = 0; i<5; i++)

   {

     cout << "i: " << i << endl;

   }

   i = 7; // Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ пСрСмСнная i Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ всСми компиляторами return 0;

}

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ свСдСний ΠΎ Ρ†ΠΈΠΊΠ»Π°Ρ…

На занятии 5 рассматривался ΠΏΡ€ΠΈΠΌΠ΅Ρ€ построСния ряда чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ с использованиСм рСкурсивного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Напомним, Ρ‡Ρ‚ΠΎ этот ряд начинаСтся числами 1, 1, 2, 3, Π° всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ Ρ‡Π»Π΅Π½Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ суммой Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ….

1,1,2,3,5,8,13,21,34...

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, n-ΠΉ Ρ‡Π»Π΅Π½ ряда Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ вычисляСтся слоТСниСм (rt-l)-TO ΠΈ (n-2)-Π³ΠΎ Ρ‡Π»Π΅Π½ΠΎΠ². Рассмотрим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»ΠΎΠ² (листинг 7.15).

Листинг 7.15. НахоТдСниС n-Π³ΠΎ Ρ‡Π»Π΅Π½Π° ряда Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π°

1: // Листинг 7.15.

2: // НахоТдСниС n-ro Ρ‡Π»Π΅Π½Π° ряда Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ

3: // с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π°

4:

5: #include <iostream.h>

6:

7:

8: int fib(int position);

9:

10: int main()

11: {

12:    int answer, position;

13:    cout << "Which position? ";

14:    cin >> position;

15:    cout << "\n";

16:

17:    answer = fib(position);