Ручне прокручування

Що ж таке "Ручне прокручування"?

Як же виконувати ручне прокручування?

Насамперед, треба акуратно виписати алгоритм і тестовий приклад, на якому виконуватиметься ручне прокручування. А потім рядково виконувати алгоритм до кінця.

1 2 3 4 5 6 7 8 9 10 відповідь

A : 5 11 4 4 4 2 2 2 2 2 5

tek : 1 1 1 2 3 1 2 3 4 5

Введення А[1..10] i : 2 3 4 5 6 7 8 9 10 11

для i від 2 до 10

інакше якщо tek > max то max = tek

Відповідь: 3 (max) - ПОМИЛКА.

Вище наведено приклад ручного прокручування для алгоритму про найбільшу кількість однакових чисел, що йдуть поспіль.

Після виконання цього рядка у пам'яті комп'ютера з'являться введені дані

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

тобто. A[1]=5, A[2]=11, A[3]=4, . A[10]=2

Ми пам'ятаємо, що правильна відповідь для цього випадку - 5 (5 чисел 2 поспіль, були ще й 3 поспіль ідучі числа 4, але 5 більше 3 і тому правильна відповідь - 5)

Змінні max та tek отримали значення 1

в ручному прокручуванні це записується так :

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

У принципі "документування" ручного прокручування можна було здійснювати і горизонтально:

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

зрушенням відображаємо протягом часу, тобто. що змінна tek набула свого значення після змінної max.

для i від 2 до 10

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

Змінна i набуває значення 2, це значення звіряється з числом 10 - оскільки 2 max то max = tek

Tek зараз дорівнює 1, max теж дорівнює 1

1 > 1? - Ні, значить оператор після того не виконується і поки все залишається як було:

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 44 2 2 2 2 2

У нас у таблиці tek і так одно 1 - але зараз ми - ПК і, як і він, повинні замість старого значення занести нове (хай навіть те саме)

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

І оскільки в циклі більше операторів немає, то керування знову передається до рядка початку циклу:

для i від 2 до 10

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

i збільшується на 1 (було 2 – стає 3) 3 max то max = tek

Tek зараз дорівнює 1, max теж дорівнює 1

1 > 1? - Ні, значить оператор після того не виконується і поки все залишається як було:

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

У нас у таблиці tek і так одно 1 - але зараз ми-ПК і як і він повинні замість старого значення занести нове (хай навіть те саме)

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

І оскільки в циклі більше операторів немає, то керування знову передається до рядка початку циклу:

для i від 2 до 10

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

i збільшується на 1 (було 3 – стає 4) 4 max то max = tek

Tek зараз дорівнює 3, max теж дорівнює 1

3 > 1? - Так, значить виконується оператор після того

і max набуває значення 3:

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

. нагадаємо розміщення операторів

інакше якщо tek > max то max = tek

Оператор tek=1 знаходиться після іншого на одному рівні з оператором ЯКЩО - це означає, що у разі інакше він обов'язково повинен бути виконаний:

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

tek : 1 1 1 2 3 1

І оскільки в циклі більше операторів немає, то керування знову передається до рядка початку циклу:

для iвід 2 до 10

1 2 3 4 5 6 7 8 9 10

A : 5 11 4 4 4 2 2 2 2 2

tek : 1 1 1 2 3 1

i збільшується на 1 (було 6 - стає 7) 7 10 і тому цикл завершено і управління передається до оператора, що йде за оператором циклу :

Дивимося, що у нас перебуває в змінній Max? 3!

Число 3 і буде виведено як відповідь.

Це – помилка, адже правильна відповідь – 5 для даного тесту.

Помилка полягає в тому, що в алгоритмі не передбачений випадок, коли найбільша кількість тих, що йдуть, виходить в результаті завершення масиву. Тобто, коли відповідні елементи, що йдуть поспіль, стоять в кінці масиву. Виправити алгоритм легко - достатньо поставити додатковий оператор порівняння змінних max і tek після завершення циклу:

для i від 2 до 10

інакше якщо tek > max то max = t

. якщо tek > max то max = tek

Ну, а тепер, коли розробник алгоритму переконаний, що алгоритм працює правильно, легко за алгоритмом написати текст відповідної програми. Як це робиться, описується у наступному пункті.

Але насамперед кілька зауважень щодо ручного прокручування. Напевно, багатьом здалося, що ручне прокручування - це дуже трудомісткий процес. І дехто спробує обійтися без нього. Це небезпечний шлях, і він може призвести до значно більшого часу. З іншого боку, регулярне застосування ручного прокручування призводить до того, що Ваш мозок починає виконувати цю роботу підсвідомо ще в той момент, коли Ви тільки складаєте алгоритм, що відповідно різко скорочує кількість допущених Вами помилок при розробці нових і нових алгоритмів. Крім того, виконання ручного прокручування дозволяє легко знайти помилки на стадії налагодження.