Барсик
програмує рисунки
Вночі, виконуючи свої службові обов’язки, Барсик надумав об’єднати чотири такі маленькі програмки в одну. Погодьтеся, що не зовсім зручно, коли тобі потрібно виконувати кілька обчислень, перезавантажувати одну за одною різні програми. Він і ім’я програмі придумав — «Усе разом ». А щоб не тримати текст у голові, записав на піску:
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? Що ж тоді буде виконувати ця програма? — невпевнено запитав Барсик.
- Програма не знайде блоку з таким номером, тому виконає оператор, який слідує першим після оператора вибору, в нашій програмі виведе «З повагою, Барсик», — запевнив Маркіз і запропонував Барсику прокоментувати хід виконання програми.
- Програма виконає перші шість рядків виведення тексту, — розпочав доповідати Барсик. — У вікні результатів у стовпчик буде записано:
У моїй програмі ви можете обчислити
- Суму двох чисел.
- Різницю двох чисел.
- Добуток двох чисел.
- Частку від ділення двох чисел.
Що ви вибрали?
Комп’ютер на вимогу процедури введення даних зупинить виконання програми і буде чекати введення значення змінної п — параметра оператора вибору. Якщо я введу число 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), де (х1,у1) —координати одного кінця цього відрізка, а (х2,у2) — координати другого. Так само в процедурі Е1Ир8(х1,у1,х2,у2) (х1,у1) — координати, наприклад, лівої верхньої,
а (х2,у2) — координати правої нижньої вершин
прямокутника, у який буде вписано цей еліпс. Ти хоч знаєш, що таке еліпс?
- Знаю, знаю. Еліпс — це якщо на гімнастичний круг натиснути з одного боку, то буде еліпс; це притиснуте коло. Це я знаю, а де дядько Микола бере координати точок? — не вгавав Барсик.
- Для цього він на аркуші в клітинку спочатку виконує ескіз якоїсь деталі, з нього зчитує координати, а потім пише програму, — відповів Маркіз, який не один раз бачив, як це все робиться. — Ось на цій сітці, що я намалював на піску, намалюй свою будку, а тоді поговоримо далі.
Барсик задумався лише на хвильку, соломинкою обережно виконав малюнок, потім навів зображення стеблом лободи і глянув на Маркіза.
- А тепер пронумеруй точки, які потрібно послідовно сполучити, щоб отримати твій малюнок, — порадив Кіт, що Барсик негайно виконав і знову поглянув на друга.
- Непогано, — оцінив роботу Маркіз. — А чому ти точку № 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,) — координати вершини А, а (х2,у2) — координати вершини С. Отже, якщо використати попередню умову, то для побудови цього прямокутника слід виконати процедуру Rectangle(х,у,х+а,у+Ь) або Rectangle (х, у+b, х+а, у) . Координати яких вершин записані аргументами в другому прикладі?
- Звичайно, DiB, — впевнено відповів Барсик і додав: — Л для побудови еліпса, вписаного в цей прямокутник, треба виконати процедуру Ellipse(х,у,х+а,у+Ь) або Ellipse(х,у+Ь,х+а,у). Тепер я вже все зрозумів, навіть зрозумів, що ти там говорив про габаритний прямокутник. Тепер і я скажу, що я молодець. Ось так!
- Зачекай. Ось тобі ще один приклад, — перебив його Маркіз. — Нехай центр кола (я його спеціально для тебе вписав у квадрат) має координати а Л Ь, а радіус кола — г. Запиши процедуру побудови зображення цього кола.'
- Легко! — запевнив був Барсик, але осікся й повільно, щось обдумуючи, вивів на піску Ellipse(a-r,b-r,а+r,Ь+г);
- Ось тепер бачу, що ти дійсно молодець, — похвалив його Маркіз.
До вечора Барсик намалював на піску ще й автомобіль дядька Андрія, і трактор дядька Сергія, але йому ніяк не вдавалося, як казав Маркіз, «прив’язати» свої малюнки до сітки. Якщо виконати малюнок, а потім креслити сітку, то не завжди кінці відрізків знаходилися на перетині ліній сітки, якщо ж накреслити спочатку сітку, то малюнок виходив якийсь незграбний. Невдачі Барсика, як виявилося, були не зовсім невдачами. Це він зрозумів, коли Маркіз запитав: «А чому ти хочеш, щоб координати виражалися обов’язково числами, кратними 10, досить того, щоб вони були натуральними числами». Це зауваження розв’язало, як кажуть люди, руки Барсику, але до програм справа не дійшла, бо плани Маркіза наступного дня змінилися, змінилися й обставини.