Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Структурне програмування, діаграма ходу виконання і спогади про Бейсік

with 9 comments

Структурне програмування – це така парадигма.

А діаграму ходу виконання прийнято називати блок-схемою, але цей термін має погану славу. Тому що всіх її заставляли малювати, але не пояснювали навіщо, якщо відповідну прорамку на C написати набагато простіше і швидше.

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

В ПМЛ в мене була вчителька яка забороняла користуватись goto, і не казала чому. А до того я прочитав цікаву книжку яка називалась Бейсік для дітей, і розказав як користуватись goto всім хто хотів, хоча всім було до лампочки.

Так от, той бейсік – то дуже незвична мова як на сучасний погляд. В двох словах – це високорівневий ассемблер. Сучасний Visual Basic .Net – подібний на нього трохи більше ніж Java на Fortran.

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

Офіційна мова програмування Демократичного Утворення ПлАнет

Номери команд використовувались для безумовного переходу по команді GOTO. Крім неї була ще команда IF. Але це не був умовний оператор, це була команда умовного переходу. Цикли організовувались умовним переходом назад. (Була ще пара FOR NEXТ, але я писав короткі програми, бо паперу було мало :), і великого сенсу в ній тоді не бачив)

10 PRINT "Введіть ваш вік"
20 INPUT age
30 IF age > 21 THEN 60
40 PRINT "Підростіть ще трохи"
50 GOTO 70
60 PRINT "Все, вам вже можна купляти алкоголь"
70 END

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

Крім того в мене є підозра що тоді й візуальний (Ерік Реймонд його називає rogue-подібним) редактор ніхто собі уявити не міг, бо книжка ще писала щось про команду LIST, яка виводить текст програми на екран. (IDE напевне виглядало як командна оболонка для керування відсортованим списком команд).

Ах, ще була команда безумовного переходу GOSUB, яка запам’ятовувала місце з якої її викликали в стек, і при виконанні команди RETURN продовжувала роботу одразу з наступної. (RETURN ніякого значення не повертав (куди?), всі змінні були глобальні).

Тип змінних визначався по мадярськи. Рядки починались зі знаку долара.

Але це все я до того, що от аби написати простеньку програмку як вище, розміром всього 7 рядків, мені довелось би передбачати що команда END буде мати мітку 70 (аби на неї перейти), і так само з 60.

Та навіть в ассемблері все зручніше організовано, бо там є символьні мітки!

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

Так от, щоб їх не шукати і придумали блок-схеми.

З іншого боку, сьогодні вперше я зрозумів що іноді ними варто скористатись.

Але лише це випадок коли їм відповідає близько тисячі рядків коду, рух по якому відбувається за допомогою посилань (GET) та відправлення форм (POST), ну, окрім оцих запитів взаємодія між ними можлива лише через сесію та модель.

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

Але ті приклади що дають в школі – бррр.

Advertisements

Written by bunyk

Жовтень 14, 2011 at 23:40

Відповідей: 9

Subscribe to comments with RSS.

  1. Звісно, тих часів вже не застав, але як розумію, колись Basic, QBasic та їм подібні дійсно слугували чимось типу асемблеру на перших самозбірних персоналках СРСР, принаймні. Бо на їх рекламах у “Техника молодежи” за кінець 80-х як раз фігурував бейсик.

    Engraver

    Жовтень 15, 2011 at 09:20

    • Я якось два роки тому на день РФФ бачив там живий саморобний Spectrum, на якому таки був той же бейсік в перемішку з якимось DOS (в мене є підозра що там компілятор вшитий в ПЗУ).

      bunyk

      Жовтень 15, 2011 at 10:06

      • Там швидше всього не компілятор, а інтерпретатор був, тобто ні в що воно не компілювалося, а просто виконувалося як є. І так, воно там вшито в ПЗУ. Я правда Spectrum’а не бачив, але по-моєму це трохи кращий аналог українського ПК “Львів”, який був в мене:)

        Dmytro Dzyuma (@DixonDs)

        Жовтень 21, 2011 at 16:04

  2. Більше схоже на діаграму станів, а не блоксхему. Чи все-таки на діаграму активностей?

    danbst

    Жовтень 15, 2011 at 12:10

    • Це недомальована (блокнот замалий) карта переходів користувача між різними контролерами.

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

      А коротко, в чому різниця між останніми? Бо я в UML ні бум-бум.

      bunyk

      Жовтень 15, 2011 at 14:53

    • Я про те, що це не “блок-схема” у її канонічному визначенні. Ти тут робиш акцент на взаємодії\поведінці, а не на алгоритмі. Так би мовити, “конечный автомат конечному автомату рознь” 😉

      danbst

      Жовтень 15, 2011 at 15:20

  3. Блок-схеми справді стають корисні при складних алгоритмах. Тільки мабуть не такі як на малюнку)) Мені наприклад малювання блок-схеми при написанні програми на асемблері для курсака значно скоротило час. І щодо мотивації справді в школі і універі часто розказують як треба робити, але не кажуть як робити. І взагалі якщо б казали на парах хоча б навіщо той чи інший курс потрібний було б набагато цікавіше і де взагалі щось застосовується, а то виявляється, що щось справді потрібно тільки після того, коли закінчив навчання:)

    vova

    Жовтень 17, 2011 at 16:59

    • Та в тому то й річ, що в при програмуванні на ассемблері блок схема є мовою вищого рівня, і крім того просто перекладається в код в якому є багато jmp, jnz, mov ax,ip, чи як воно там робиться. Тому в ній зручно описувати специфікацію.

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

      bunyk

      Жовтень 17, 2011 at 18:48

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

        Engraver

        Жовтень 17, 2011 at 19:33


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: