Барсик

програмує рисунки

Вночі, виконуючи свої службові обов’язки, Барсик надумав об’єднати чотири такі маленькі програмки в одну. Погодьтеся, що не зовсім зруч­но, коли тобі потрібно виконувати кілька обчис­лень, перезавантажувати одну за одною різні про­грами. Він і ім’я програмі придумав — «Усе разом ». А щоб не тримати текст у голові, записав на піску:

Program Усе разом;

var

a,b,c: Integer; с: Real;

begin

write('Введіть два числа ');

read(a,b);

c:=a+b;

write('їх сума ', с) ; с:=a-b;

write('їх різниця ',с); c:=a*b;

write('їх добуток ',с); с:=a/b;

write('їх частка ',с:5:2);

end.

Згодом йому спало на думку: навіщо викону­вати всі чотири арифметичні дії, якщо тобі, на­приклад, потрібна зараз тільки різниця двох чи­сел? Ось якби написати таку програму, яка б за потреби чи на вимогу користувача сама вибирала б, що виконувати. Більш чітко поки що Барсик не зміг сформулювати це завдання, а обдумуючи його, зрозумів, що для виконання завдання знову чогось не вистачає в його знаннях. «А Маркіз на­віщо? Він допоможе», — вирішив Барсик.

Тільки-но Маркіз з’явився на подвір’ї, Барсик покликав його. Попри всі сподівання песика на похвалу, Маркіз одразу ж заявив, що комп’ютер цю програму в такому вигляді не виконуватиме.

  • Це чому ж? — здивувався Барсик. — Учо­ра кожну окремо виконував, а сьогодні всі разом не буде?
  • По-перше, ім’я програми повинно писатися одним словом, — розпочав був Маркіз, але Барсик нетерпляче його перебив:
  • То нехай буде «арифметика», чи ще якось...
  • Для комп’ютера одним словом можна було б записати і так: «Усе разом». А ще в тебе змінна с описана двічі: то вона цілого типу, то вона дій­сного типу. Комп’ютер не любить таких неодно­значностей, — продовжував повчати Маркіз.
  • Що ж мені було робити? Я написав так, як ми вчора писали, — почав виправдовуватися Бар­сик, на що Маркіз зауважив:
  • А ти для дії ділення введи ще одну змінну — змінну дійсного типу. Не зрозумів? Давай спробу­ємо разом.

Спільними зусиллями текст програми було до­ведено до такого вигляду:

Program Усе_разом;

var

a.,b,c: Integer; d: Real;

begin

write('Введіть два.числа '); read(a,b); с:=a+b;

write('їх сума ',c); с:=a-b;

write('їх різниця ',c); c:=a*b;

write('їх добуток ',c); d:=a/b;

write('lx частка ',d:5:2);

end.

Маркіз допитливо подивився на товариша:

  • Бачу, що ти ще щось хочеш сказати.
  • Розумієш, — нерішуче почав Барсик, але, зустрівши в очах друга підтримку, продовжив ді­литися своїми думками, — я подумав, що час­то нам не потрібно знати суму, різницю, добуток і частку двох чисел одночасно. Нам потрібно щось одне з чотирьох. То як зробити так, щоб комп’ютер виконував ту дію, яка мені зараз потрібна, і не ви­трачав час на інші, не потрібні мені зараз дії?
  • Якщо я правильно зрозумів, — розгладжую­чи вуса, Маркіз пильно подивився на Барсика, — тобі потрібен оператор вибору, — і, вловивши

 

в очах друга нерозуміння, пояснив: — ипера- тор — команда (операція), що буде вибирати ту дію, яку ти повинен попередньо замовити. Для цього ми повинні скласти список замовлень, інак­ше кажучи, меню. Ти з меню вибираєш і вводиш номер арифметичної дії. Комп’ютер за цим номе­ром вибирає, яку частину програми потрібно виконати, і виконує її. Нам потрібна буде ще одна змінна цілого типу — номер вибраної тобою дії з меню записаних дій. Нехай це буде змінна п. Оператор вибору (варіанту) має вигляд case n of (випадок п з), але це краще видно з тексту про­грами. Тому пишемо:

 

Program Arifmetica;

var

a,b,c,n: Integer; d: Real;

begin

writeln('У моїй програмі ви можете обчислити');

writeln('1. Суму двох чисел.');

writeln ('2. Різницю двох чисел.');

writeln('3. Добуток двох чисел.');

writeln('4. Частку від ділення двох  чисел;

write ( ' Що ви вибрали? ') ;

 readln(п) ;

write ('А тепер введіть два числа ')' ;

readln(a,b);

case n of

1: begin

 c:=a+b;

write('їх сума ',с);

end;

2: begin

c:=a-b;

write('їх різниця ',c);

 end;

3: begin

 c:=a*b;

write('їх добуток ',c);

end;

4: begin

d:=a/b;

write('їх частка ',d:5:2);

end;

write('3 повагою, Барсик.');

end.

 

— Тепер час проаналізувати текст цієї програ­ми, — вирішив Маркіз.

Блок процедур виведення тексту:

writeln('1. Суму двох чисел.');

writeln('2. Різниця двох чисел');

writeln('3. Добуток двох чисел.');

 writeln('4. Частку від ділення двох чисел.'); є те, що програмісти називають «меню». З цього переліку, або меню користувач буде вибирати за­пропоновані можливості програми.

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

1: begin

 c:=a+b;

write('їх сума ',с);

 end;

адже його порядковий номер 1, а якщо ввести 4, то виконається блок номер 4

4: begin

d:=a/b;

write('lx частка ',d:5:2);

end;

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

write('3 повагою, Барсик.');

  • А якщо я введу число, якого немає в нуме­рації? Наприклад, 5 чи 0? Що ж тоді буде викону­вати ця програма? — невпевнено запитав Барсик.
  • Програма не знайде блоку з таким номером, тому виконає оператор, який слідує першим після оператора вибору, в нашій програмі виведе «З по­вагою, Барсик», — запевнив Маркіз і запропону­вав Барсику прокоментувати хід виконання про­грами.
  • Програма виконає перші шість рядків виве­дення тексту, — розпочав доповідати Барсик. — У вікні результатів у стовпчик буде записано:

У моїй програмі ви можете обчислити

  1. Суму двох чисел.
  2. Різницю двох чисел.
  3. Добуток двох чисел.
  4. Частку від ділення двох чисел.

Що ви вибрали?

Комп’ютер на вимогу процедури введення да­них зупинить виконання програми і буде чекати введення значення змінної п — параметра опера­тора вибору. Якщо я введу число 3, то комп’ютер спочатку у вікні результатів напише: «А тепер введіть два числа» і буде чекати введення значень чисел а і b , а потім виконає третій — блок ко­манд, записаних під номером 3 в операторі вибо­ру, — обчислить добуток чисел а і Ь, виведе зна­чення добутку — значення змінної с. Завершить виконання програми виведення у вікні результа­тів тексту «З повагою, Барсик». Так? — а далі вже нетерпляче: — Швидше б вже до комп’ютера та випробувати все це.

  • Не поспішай, — зупинив його гарячку Мар­кіз. — Ти звернув увагу на те, що номери блоків операторів оператора вибору відділяються від са­мих операторів двокрапкою?
  • Це я побачив і подумав, що то так треба, тому нічого тобі не говорив, — запевнив його Бар­сик. — А ось чому тут так багато команд begin і end — я не здогадався.
  • У Паскалі існує поняття складеного опе­ратора, який містить кілька команд. Початок та­кого оператора і починається командою «поча­ток», а завершується командою «кінець». Але якщо в кінці всієї програми ми пишемо end і ста­вимо крапку, то в кінці складеного оператора теж пишемо end, але ставимо крапку з комою. Запам’ятав? А ще ти пропустив запис процедури виведення. Справа в тому, що процедура writeln після виведення повідомлення переносить курсор на початок нового рядка, в той час як процедура write залишає курсор у наступній позиції після останнього виведеного символа в тому ж рядку.
  • Доведеться пам’ятати, — погодився Барсик і знову заканючив про комп’ютер. Та й сніданок затримувався, і господарі не спішили на город.
  • Ми сьогодні їдемо до моєї мами, — повідо­мила тітка Люда, виносячи їдло, — так що хата буде закрита і комп’ютер до нашого повернення відміняється.
  • Та нехай годину попрацюють, — заступив­ся за друзів дядько Микола, — поки ми зберемо­ся, та й під ногами не будуть даремно крутити­ся. Я бачив на піску текст нової програми. І коли вони тільки встигають писати?
  • Годину і не більше, — категорично заяви­ла тітка Люда. — І щоб знали: біля комп’ютера не більше години, бо мені зовсім не світить перспек­тива годувати сліпих кота і собаку. Бережіть зір, а комп’ютер від вас не втече.

Маркіз, щоб зекономити час, сам швиденько написав текст програми. Барсик, вводячи все нові дані, запускав на виконання. Програма працюва­ла, як годинник. Нарешті Маркіз відштовхнув товариша, зберіг програму під іменем «Арифме­тика» і подивився на тітку Люду, яка саме пере­ступала поріг.

  • Закінчуйте вже, — знову категорично про­мовила вона.

Друзям не було куди діватися, тому, закрив­ши середовище програмування і вимкнувши комп’ютер, вони неохоче подалися надвір. На подвір’ї все було по-старому. Барсик ліниво по­тягся і побіг ганяти горобців. Маркіз, замислив­шись, подався в тінь під кролятник. Урок про­грамування закінчився, і кожен занурився у свої буденні справи.

Десь пополудні Барсйк «підкотив» до Маркіза з черговою серією запитань.

  • А ти можеш складати програми, які малю­ють? — почав він здалеку. — А ти можеш мене на­вчити малювати на комп’ютері?
  • Тут потрібно дещо уточнити, — ліниво від­повідав Маркіз, якому дуже не хотілося відволі­катися від своїх думок на пустопорожні балачки, але якщо не відповісти, то так можна погасити в малого інтерес до теми. — Для малювання на комп’ютері є спеціальні програми — графічні ре­дактори, але оскільки я сам не вмію малювати, то ними не цікавився. В середовищі програмування є набір процедур для побудови графічних зобра­жень, але їх, я так думаю, не достатньо, щоб на­малювати твій чи мій портрети.
  • А як же дядько Микола робить рисунки і креслення своїх виробів? — не здавався Барсик.

Маркіз вирішив продовжити свою «просвіт­ницьку місію», тому вже серйозно почав:

  • Доведеться ознайомитися з теорією. По-пер­ше, однією з характеристик монітора комп’ютера є таке поняття, як роздільна здатність екрана. На нашому комп’ютері вона складає 1024 на 768 світ­них точок, 768 рядків по 1024 точки у кожному. Ти можеш завдяки своїм програмам помножити ці два числа і визначити, скільки точок формують зо­браження на екрані. Розумієш, про що я говорю?
  • Це як перші краплини дощу залишають на землі мокрі чорні цятки, які поступово зли­ваються в чудернадські малюнки, — спробував уточнити Барсик. — То що, кожна буква, будь- який фрагмент рисунка складається, як мозаїка, з окремих різнокольорових точок?

Ти навів доречний приклад. Молодець, — похвалив його Маркіз. — Продовжимо? Графіч­ний екран середовища ALGO має розміри 800 на 600 світних точок — їх ще називають пікселями. Піксель має форму квадрата, сталі координати та змінні колір і яскравість. Щоб «засвітити» точку у вікні результатів, потрібно звернутися до проце­дури Point(x,y), де х і у — координати цієї точ­ки. І тут Маркіз схаменувся: — Ти хоч знаєш, що таке координати точки? Ні? Тоді слухай, або ні. Краще перейдемо до купи піску. Там і малювати, і писати можна. А дорогою поговоримо.

  • Барсик вже почав був прикидати, скільки ж тих точок: «8 • 6 = 48, а ще чотири нулі, що ж це буде? А буде 480 000 пікселів, майже півмільйо- на. Нічого собі». Маркіз тим часом вже намалю­вав на піску сітку квадратиків і готовий був роз­повідати далі.
  • Я намалював лише частину графічного екрана, взяту з його верхнього лівого кутка. Чому саме цю частину? Та тому, що відлік координат розпочинається саме з верхнього лівого кутка екрана. Ось якби ти рахував клітинки на сторінці зошита? Теж починав би з верхнього лівого кутка, правда ж? Так ось, найперша клітинка має коор­динати нуль, нуль, що записують так: (0,0), сусід­ня з нею праворуч має координати (1, 0), а сусід­ня з клітинкою (0-, 0) знизу має координати (0, 1). Координати червоної клітинки — (4,2), зеленої — (1, 4), синьої — (8, 3). Зрозумів?

Барсик ствердно кивнув головою й у свою чер­гу запитав:

  • А як комп’ютер буде знати, яким кольором засвітити точку — (4, 2) чи (8, 3)?

—- Для цього є процедура Pen(п, г, £, Ь)Олі­вець, п — товщина лінії в пік селях, г, g, Ь — відповідно червоний, зелений чи синій кольори. Наприклад, для того щоб засвітити, як ти гово­риш, червону точку, потрібно виконати такі ко­манди: Pen(1, 255, 0, 0); Роіп1(4, 2);, зелену —Pen(1, 0, 255, 0); Ріп^І, 4);, синю — Pen(1, 0, 0, 255); Роіп1;(8, 3);.

  • Ти хочеш сказати, що дядько Микола, ви­конуючи свої креслення, забиває малюнок окре­мими точками? Та їх же тисячі! — здивувався Барсик.

Звичайно, ні, — відповів Маркіз. — Дядько Микола використовує процедури «Лінія» і «Еліпс». Щоб побудувати відрізок, що сполучає дві точки, потрібно викликати процедуру побудови відрізка Ілпе(х1,у1,х2,у2), де 11) —координати одного кінця цього відрізка, а (х22) — координати дру­гого. Так само в процедурі Е1Ир8(х1,у1,х2,у2) 11) — координати, наприклад, лівої верхньої,

а 22) — координати правої нижньої вершин

прямокутника, у який буде вписано цей еліпс. Ти хоч знаєш, що таке еліпс?

  • Знаю, знаю. Еліпс — це якщо на гімнастич­ний круг натиснути з одного боку, то буде еліпс; це притиснуте коло. Це я знаю, а де дядько Ми­кола бере координати точок? — не вгавав Барсик.
  • Для цього він на аркуші в клітинку спо­чатку виконує ескіз якоїсь деталі, з нього зчитує координати, а потім пише програму, — відповів Маркіз, який не один раз бачив, як це все робить­ся. — Ось на цій сітці, що я намалював на піску, намалюй свою будку, а тоді поговоримо далі.

Барсик задумався лише на хвильку, соломин­кою обережно виконав малюнок, потім навів зо­браження стеблом лободи і глянув на Маркіза.

  • А тепер пронумеруй точки, які потрібно по­слідовно сполучити, щоб отримати твій малюнок, — порадив Кіт, що Барсик негайно виконав і знову поглянув на друга.
  • Непогано, — оцінив роботу Маркіз. — А чому ти точку № 6 позначив як № 5, а потім пе­ренумерував?
  • Я спочатку намалював будку, а потім дах над нею, але якщо ми проведемо відрізки між точ­ками № 4 і № 6, № 6 і № 1, а потім між точками № 5 і № 6, № 6 і № 7, то ми будемо двічі будувати відрізки між точками № 4 і № 6, № 6 і № 1. Так, як я зробив, я думаю, буде, як би це сказати, еко­номніше, чи що? — взявся пояснювати Барсик.

Маркіз жестом зупинив цей словесний потік:

  • Давай визначимо координати кожної з по­значених тобою точок. Нехай сторона квадрата сітки має довжину 20 пікселів, а половина сто­рони буде... звичайно, 10, тоді координати точки № 1 — (40, 80), точки № 2 — (40,160), точки № 3 — (160, 160), точки № 4 — (160, 80) ...
  • Тут його перебив Барсик:

— Я зрозумів. Я зрозумів! — застрибав він на­вколо малюнка. — Давай я буду говорити, а ти тільки перевіряй і записуй: точка № 5 (20, 100), точка № 6 (100, 20), точка № 7 (180, 100), точка № 8 (180, 90) (бо на півклітинки, правда ж?) точ­ка № 9 — (100, 10), точка № 10 — (20, 90). Так? Я ніде не напартачив?

 

Program Buaa; {Заголовок програми, ім’я «Буда»}

Begin {Початок програми}

line(40,80,40,160); {Відрізок, що сполучає точки № 1 (40, 80) і № 2 (40, 160)}

lineto(160,160); {Щоб не переписувати координати точки № 2 — початку відріз­ка між точками № 2

                                 і № 3, використали процедуру «Лінія до» від попередньої точки (№ 2) до точки № 3  

                                 (160, 160)}

lineto(160,80); {Відрізок від попередньої точки до точки № 4 (160, 80)}

line(20,100,100,20); {Відрізок з кінцями в точках № 5 (20, 100) і № 6 (100, 20)}

 lineto(180,100); {Відрізок від точки № 6 до точки № 7 (180, 100)}

lineto (180, 90); {Відрізок від точки № 7 до точки № 8 (180, 90)}

lineto(100,10); {Відрізок від точки № 8 до точки № 9 (100, 10)}

lineto(20,90); {Відрізок від точки № 9 до точки № 10 (20, 90)}

lineto(20,100); {Відрізок від точки № 10 до точки № 5 (20, 100)}

line (100, 10, 100, 20); {Відрізок між точками № 9 (100, 10) і № 6 (100, 20)}

ellipse(60,70,140,150); {Радіус кола 2 клітинки = 40 Пікселів, центр кола (100, 110), коорди­нати  

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

                                                 вписуватися коло (60, 70) і (140, 150)}

end.  {Кінець програми}

 

 

 

  - Тут ти ознайомився ще з однією процеду­рою побудови відрізка від останньої побудованої точки до точки, вказаної своїми координатами, — завершив пояснення Маркіз.

Господарі ніяк не їхали і, незважаючи на те­плу сонячну днину, потяглася, як на Барсика, сіра буденність. Виконуючи свої обов’язки, він раз по раз забігав до купи піску, перечитував текст про­грами, намагаючись її запам’ятати, але від такої навали чисел у голові була суцільна каша.

  • Чому це так, що коли Маркіз говорить або пише — все зрозуміло, а коли сам до чогось доду­мався — беруть сумніви? — розмірковував Барсик.

Урешті-решт він додумався, що було б непога­но переписати текст програми на папір — не біга­ти ж надвір до піску, коли випаде нагода писати рограму на комп’ютері^ чи, може, простіше, пе­реписати координати точок і перемалювати будку на папері. Було б добре, але де взяти папір? І ще одна проблема — Барсик ніколи не тримав у лапах олівця. Залишається сподіватися на Маркіза — хто ж іще зможе допомогти? Отже, вирішено: шукаємо аркуш і олівець. Майстерня дядька Ми­коли відчинена. Л ось і олівці: і звичайні про­сті креслярські, і товсті теслярські для розміт­ки по дереву... і хоч би тобі клаптик паперу. Ну, навіщо це дядько Микола так ретельно прибирає майстерню? Маркіз теж підключився до пошуку аркуша. Координати точок він записав на бере­гах газети, а щоб цю таку дорогу для обох запис­ку не занесло кудись вітром, притиснув уривок камінчиком. Кола взявся годувати всю домашню звірину і пта­ство, тітка Люда винесла їдло і нашим героям. Барсик зараз не може навіть згадати, що тоді було на обід — усі думки заполонив комп’ютер. Коли з обідом було покінчено, Маркіз у роті приніс за­писку з координатами і заштовхнув її Барсику під нашийник. Дядько Микола, який помітив у Бар- сика невідомий йому папірець, зі словами:

— Це що за наукові записки? — витяг па­пірець, роздивився, ще й пожартував: — Якась шифровка, чи що? — а потім, напевно, здогадав­ся, бо, розтягуючи слова, міркував увголос: — Це, напевно, координати точок площини — має бути малюнок...

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

—• Розумієш, у цій програмі ми користували­ся абсолютними координатами точок, тому, щоб отримати збільшейе зображення, потрібно було ти точок і внести зміни до програми...

  • Так мерщій на пісок, — крикнув Барсик, який вже стрибнув на підлогу і добігав порогу.
  • Та зажди... — зупинив його Маркіз. — Дай подумати. А що як записати програму не в абсо­лютних, а у відносних координатах...
  • Це що ще за «новації»? — Барсик аж при­сів на задні лапи.
  • Координати точок у нашій програмі запи­сані сталими для цієї програми числами, — роз­мірковуючи над коленим словом, протяжно почав Маркіз, — тому їх називають «абсолютними», тобто незмінними координатами, а ми зробимо так, щоб комп’ютер обчислював ці координати, наприклад, відносно довжини сторони квадрата сітки, яку ми малювали, а потім по ній обчислю­вали координати точок...
  • Отже, якщо сторона квадрата сітки а, — продовжив він, — то, рахуючи клітинки, кіль­кість клітинок помножимо на а — і буде довжина відрізка, а кількість клітинок від початку відлі­ку, помножена на а — координата точки... А ще потрібно буде півклітинки. Спробуємо, чи що? — і він, зберігши текст програми у файлі під іменем «Буда», захоплено почав швидко-швидко писати по вже набраному тексту:

 

 

Program Budal;   {Заголовок програми, ім’я «Будаї»}

const п=10;          {Стала п —ширина півклітинки}

var a: Integer;      {Змінна а цілого типу — коефіцієнт збільшення}

begin {Початок програми}

write ( 'Введіть а=');     {Підказка користувачеві}

read (а);      {Ввести значення змінної а}

а: =а * п;    {Ширина півклітинки}

clear; {Очистити екран — вікно результатів}

line (4*а, 8*а, 4*а, 16*а) ;      {Відрізок між точками № 1 і № 2}

lineto (16*а, 16*а) ;      {Відрізок до точки № 3}

lineto (16*а, 8*а) ;        {Відрізок до точки № 4}

line (2*а, 10*а, 10*а, 2*а) ;    {Відрізок між точками № 5 і № 6}

lineto (18*а, 10*а) ;      {Відрізок до точки № 7}

lineto (18 * а, 9*а) ;      {Відрізок до точки № 8}

lineto (10*а, а);    {Відрізок до точки № 9}

lineto (2*а, 9*а) ; {Відрізок до точки № 10}

lineto (2*а, 10*а) ;        {Відрізок до точки № 5}

line (10*a,a,10*a,2*a);      {Відрізок між точками № 9 і № 6}

ellipse(6*а,7*а,14*а,15*а); {Зображення круглого отвору}

end.  {Кінець програми}

  • Ну що, спробуємо? - сказав Маркіз і запус­тив програму на виконання.

На запит «Введіть а=» він увів число 1. Комп’ю­тер намалював буду і повідомив про успішне вико­нання програми.

  • І що тут такого? — здивувався Барсик. — Буда яка була, така і залишилася.
  • А ти запусти і введи число 2, — лукаво по­сміхаючись, відповів Маркіз.

Барсик виконав усе, як велів Кіт, і очі від зди­вування в нього округлились. «Якби вмів, то свис­нув би», — подумав Барсик, бо тепер буда була значно більшою, а Маркіз, не чекаючи кінця ряс­ного дощу похвал, закрив середовище і вимкнув комп’ютер. У Барсика від здивування аж щелепа відвисла.

  • Година минула, а «договор дороже денег», так що не будемо сердити господарку, — пояснив свої поспішні дії кіт і вже на подвір’ї запитав, — Що ти ще мав питати?
  • Я ніяк не второпаю з координатами для по­будови кола... — почав був Барсик.

Довелося знову йти до купи піску. Маркіз на­малював прямокутник і вписав у нього еліпс.

  • Ось дивись, — почав пояснювати Маркіз, — нехай маємо прямокутник, довжина якого — а, а ширина— b. Якщо координати вершини А(х,у), то які координати мають інші вершини цього пря­мокутника?
  • Вершина В має координати (х + а,у)... — об­думуючи кожне слово, розтягуючи слова, почав Барсик. — Тоді вершина С має координати (х,у + b)... — і вже більш впевнено, — а координа­ти вершини b{х + а,у + b). Тільки до чого це?
  • Справа в тому, — продовжив пояснення Маркіз, — що немає потреби для побудови прямокутника чотири рази будувати відрізки — сторони цього прямокутника. Запам’ятай: для по­будови прямокутника застосовують процедуру Rectangle(xl,yl,x2,y2), де (x1.y1,) — координати вершини А, а (х22) — координати вершини С. Отже, якщо використати попередню умову, то для побудови цього прямокутника слід виконати про­цедуру Rectangle(х,у,х+а,у+Ь) або Rectangle (х, у+b, х+а, у) . Координати яких вершин записа­ні аргументами в другому прикладі?
  • Звичайно, DiB, — впевнено відповів Бар­сик і додав: — Л для побудови еліпса, вписаного в цей прямокутник, треба виконати процедуру Ellipse(х,у,х+а,у+Ь) або Ellipse(х,у+Ь,х+а,у). Тепер я вже все зрозумів, навіть зрозумів, що ти там говорив про габаритний прямокутник. Тепер і я скажу, що я молодець. Ось так!
  • Зачекай. Ось тобі ще один приклад, — пере­бив його Маркіз. — Нехай центр кола (я його спе­ціально для тебе вписав у квадрат) має координа­ти а Л Ь, а радіус кола — г. Запиши процедуру побудови зображення цього кола.'
  • Легко! — запевнив був Барсик, але осік­ся й повільно, щось обдумуючи, вивів на піску Ellipse(a-r,b-r,а+r,Ь+г);
  • Ось тепер бачу, що ти дійсно молодець, — похвалив його Маркіз.

До вечора Барсик намалював на піску ще й ав­томобіль дядька Андрія, і трактор дядька Сер­гія, але йому ніяк не вдавалося, як казав Мар­кіз, «прив’язати» свої малюнки до сітки. Якщо виконати малюнок, а потім креслити сітку, то не завжди кінці відрізків знаходилися на перетині ліній сітки, якщо ж накреслити спочатку сітку, то малюнок виходив якийсь незграбний. Невда­чі Барсика, як виявилося, були не зовсім не­вдачами. Це він зрозумів, коли Маркіз запитав: «А чому ти хочеш, щоб координати виражалися обов’язково числами, кратними 10, досить того, щоб вони були натуральними числами». Це зау­важення розв’язало, як кажуть люди, руки Барсику, але до програм справа не дійшла, бо плани Маркіза наступного дня змінилися, змінилися й обставини.