Ручне прокручування
Що ж таке "Ручне прокручування"?
Як же виконувати ручне прокручування?
Насамперед, треба акуратно виписати алгоритм і тестовий приклад, на якому виконуватиметься ручне прокручування. А потім рядково виконувати алгоритм до кінця.
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
Ну, а тепер, коли розробник алгоритму переконаний, що алгоритм працює правильно, легко за алгоритмом написати текст відповідної програми. Як це робиться, описується у наступному пункті.
Але насамперед кілька зауважень щодо ручного прокручування. Напевно, багатьом здалося, що ручне прокручування - це дуже трудомісткий процес. І дехто спробує обійтися без нього. Це небезпечний шлях, і він може призвести до значно більшого часу. З іншого боку, регулярне застосування ручного прокручування призводить до того, що Ваш мозок починає виконувати цю роботу підсвідомо ще в той момент, коли Ви тільки складаєте алгоритм, що відповідно різко скорочує кількість допущених Вами помилок при розробці нових і нових алгоритмів. Крім того, виконання ручного прокручування дозволяє легко знайти помилки на стадії налагодження.