Псевдокод і блок-схеми

Увага! Даний сайт не оновлюється. Нова версія: shatalov.su

Перед тим як почати вивчати С ++, ми познайомимося з двома "методами", що дозволяють спростити життя починаючому програмісту. Для людей, ніколи не стикалися з програмуванням, досить важко відразу писати програми. Тому були придумані проміжні стадії між людською мовою і вихідним кодом програм.

Будь-яка мова дуже багатий. За допомогою мови, в нашому випадку - українського, ми можемо висловити будь-яку думку. Комп'ютери набагато дурніші за нас - людей. Вони не терплять неоднозначностей, якими так багаті людські мови. Крім того, варто відзначити, що наш (і будь-який інший національний) мова занадто надлишковий з точки зору комп'ютера. Ми можемо донести інформацію без спотворення сенсу, використовуючи набагато більш мізерні кошти, наприклад, відмовившись від вигуків, вступних слів.

Так про що це я? Так як спочатку комп'ютери мали дуже невеликими ресурсами, перш за все невеликою кількістю пам'яті і повільною швидкістю роботи, то розумним людям довелося максимально спростити мови, які розуміли комп'ютери. Але при цьому на будь-якій мові комп'ютерів можна висловити практично будь-яку думку людської мови.

Головне завдання програміста: переводити думки з повсякденної мови спілкування на мову комп'ютерів.

Як я писав вище, початківцям програмістам досить важко це робити. Для подолання цих труднощів призначені блок-схеми і псевдокод.

Псевдокод (pseudocode)

Що таке псевдокод? Це запис команд комп'ютера звичайною людською мовою. В результаті програміст отримує проміжну форму між повсякденною мовою і мовою програмування.

Давайте розберемо приклад. Зазвичай, в якості прикладів вибирають ситуації, з практикою не мають нічого спільного. Ми ж розглянемо зовсім інший приклад, який постійно зустрічається на практиці. Припустимо у нас в стратегічній грі є карта розміром 64 на 64 клітини. Для кожного персонажа гри потрібно перевірити, щоб він не виходив за межі карти. Координати позначимо як x (по горизонталі), y (по вертикалі). Очевидно, що координати будь-якого персонажа повинні знаходитися в діапазоні [1. 64]. Попередня пропозиція - це думка, яку потрібно висловити на мові програмування.

Так як ми ще не почали вивчати C ++, то давайте запишемо цю думку за допомогою псевдокоду. При цьому пропозиції потрібно будувати тільки за допомогою базових конструкцій, які ми вивчили в попередньому уроці:

Дані чотири пропозиції обмежують рух персонажа. Це і є псевдокод. Всю завдання ми змогли реалізувати за допомогою чотирьох розгалужень з однією гілкою, в кожній з яких по одному оператору. Тепер цей псевдокод можна легко перевести на будь-яку мову програмування. Давайте зробимо це для C ++. Для цього в псевдокоді потрібно замінити деякі слова на англійські еквіваленти, а математичні дії потрібно записати на математичній мові. Слово якщо англійською буде if (читається як іф):

Це теж псевдокод, правда, вже ближчий до мов програмування. В даному варіанті псевдокоду ми дещо втратили. Чиї координати тут перевіряються? Щоб позначити, що x, y - координати персонажів гри, ми запишемо їх через точку: unit.x, unit.y. Тут видно, що x і y належать юниту, а не будівлі або дереву. Подивимося на новий варіант:

Це все ще псевдокод, але тут вже не міститься ніякої надмірності - ми позбулися всіх зайвих слів. Даний варіант дуже близький до мов програмування. На C ++ фінальний код буде виглядати ось так:

Цей код на С ++ повністю робочий! До речі, дуже схожий код ми будемо використовувати в арканоїд для контролю кулі.

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

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

Що повинен уміти робити програміст?

Основне завдання програміста полягає в наступному: переклад думок на мову, зрозумілу комп'ютерів. Давайте ще раз простежимо, як це відбувається.

Спочатку ми захотіли створити стратегію, далі ми починаємо усвідомлювати окремі частини майбутньої програми. Так, ми хочемо, щоб дія гри відбувалося на обмеженому полі розміром 64 * 64 клітини. Звідси випливає наступне правило: будь-який персонаж гри повинен знаходитися в межах цього поля. У кожного персонажа є координати, які задають його місце розташування на карті. Щоб точно впевнитися, що персонаж знаходиться всередині поля, потрібно перевірити, чи не перетнув персонаж будь-яку з чотирьох сторін поля. Тепер ми можемо написати псевдокод (або відразу код, якщо досить добре знаємо який-небудь мову програмування):

У підсумку з одного речення: "Будь-який персонаж гри повинен знаходитися в межах поля 64 * 64" - вийшло чотири розгалуження, кожне з яких буде складатися з одного оператора.

Найскладніше і найважливіше на початковому етапі навчання програмуванню - навчитися переводити думки з людської мови на мови програмування (основні засоби яких ми обговорили в минулому уроці).

Блок-схеми (blockschemes)

Блок-схема - це графічне представлення програми.

Блок-схеми будуються з окремих блоків. При цьому різні засоби мов програмування на блок-схемах зображуються різними блоками. Наприклад, для умови, на основі якого будується розгалуження, зображується ромбом. Оператор, в якому відбувається обробка інформації, зображується прямокутником. Давайте більш детально обговоримо різні блоки.

Будь-яка програма має початок і кінець. На блок-схемах початок і кінець програм позначаються прямокутниками з округленими кутами. Усередині цих прямокутників пишуться слова: "Початок", "Кінець".

У блок-схемах виділяють два види операторів: оператори обробки даних і оператори введення / виведення.

Блок обробки даних зображується прямокутником. В операторі обробки даних відбуваються різні розрахунки (складання, віднімання, ділення, множення чисел). Давайте подивимося на просту програму з трьома операторами:

Псевдокод і блок-схеми

Як бачимо, блоки з'єднуються лініями зі стрілками. Стрілочками вказується послідовність виконання блоків.

Другий вид операторів в блок-схемах - блоки введення / виводу даних. Вони позначаються як чотирикутники з скошеними бічними сторонами. У таких блоках відбувається введення / виведення даних: друк даних на екран, отримання координат курсору миші, отримання клавіш клавіатури, на які натиснув користувач:

Псевдокод і блок-схеми

На двох попередніх картинках ми бачимо послідовне виконання операторів. Тепер давайте подивимося, як в блок-схемах відображаються розгалуження. Для побудови розгалужень в блок-схемах використовується блок умови, що позначається ромбом:

Псевдокод і блок-схеми

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

У минулому уроці ми бачили приклади розгалужень, в яких було більше двох гілок. Щоб реалізувати такі розгалуження за допомогою блоків умов, потрібно використовувати вкладення цих блоків один в одного.

Також можлива побудова розгалужень з однією гілкою. У блок-схемах це буде виглядати ось так:

Псевдокод і блок-схеми

Зверніть увагу, що лінії не обов'язково малювати зліва і праворуч від блоку умови, можна і знизу. При цьому з блоку розгалуження має виходити тільки дві гілки: одна, яка задовольняє умові, інша, яка не задовольняє умові.

На цій же картинці я показав ще пару нових речей: трикрапки і окружності.

Три крапки використовується, щоб показати, що в цьому місці пропущено кілька операторів.

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

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

Для позначення циклів в блок-схемах використовується наступний блок:

Псевдокод і блок-схеми

Усередині п'ятикутника записується умова продовження циклу. Якщо умова виконується, то виконується і код циклу. Зверніть увагу, що код циклу завжди повертається до початку циклу. Якщо умова не виконується, то виконується наступний оператор після циклу.

А тепер давайте подивимося, як буде виглядати блок-схема програми, псевдокод якої ми розглянули вище:

Псевдокод і блок-схеми

Я трохи удосконалив програму. Тут не просто перевіряються координати одного юніта, але координати всіх юнітів гри. Самі юніти зберігаються в масиві units. Всього в грі двадцять юнітів. Щоб перевірити координати всіх юнітів, використовується змінна current (current - поточний, Новомосковскется як Каррент). На зображенні не показані дві речі: як збільшується змінна current і те, що перевіряються x і y для поточного юніта.

Збільшення current має відбуватися після всіх розгалужень, але перед тим, як процесор повернеться до початку циклу. Я упустив цей момент, коли малював картинку (а зараз виправляти не хочеться).

висновок

Ось, загалом-то, і все по псевдокоду і блок-схемами. Деякі моменти я упустив, сподіваюся, доповню пізніше.

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

Арканоід

Псевдокод і блок-схеми

Камера
Псевдокод і блок-схеми

клітини
Псевдокод і блок-схеми

спрайт
Псевдокод і блок-схеми