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

Ситуацію розрулив Маркіз, який звідкись, ско­ріше всього від Васі, притащив тоненьку книжеч­ку «Серйозні розваги для старшокласників і сту­дентів».

  • Раз так склалося — будемо розв’язувати за­дачі, — урочисто заявив він.
  • Та ти що? Того? — здивувався Барсик. — Ти що, не читав, що це для старшокласників і сту­дентів?
  • До чого тут студенти чи старшокласники? Ми що, по-твоєму, ні на що не здатні? Може, ми теж ого-го... — не вгавав Маркіз. Ось послухай, що каже задача № 1:

Якщо на одну шальку терезів посадити Даринку, яка важить п кілограмів, і Наталку, яка важить на 5 кілограмів менше, а на іншу насипа­ти т кілограмів цукерок, які набагато важчі за обох дівчаток, то скільки кілограмів цукерок  їм до­ведеться з’їсти, щоб шальки терезів урівноважились?

  • Якщо Даринка важить п кілограмів, то На­талка важить п — 5 кілограмів, — уголос почав міркувати Барсик, — тоді разом вони важать п + п-5 = 2п-5 кілограмів. Якщо цукерок т кі­лограмів, то дівчаткам потрібно з’їсти різницю величин  т і 2n-5, тобто т-(2п-5) кілограмів.
  • Ось тут ти і неправий, — посміхнувся Мар­кіз. — Якщо дівчатка з’їдять, як ти сказав, різни­цю між вагою мішка цукерок і обох дівчаток:

т - (2п - 5) кілограмів цукерок, то сумарна вага дівчаток стане т кілограмів, а вага решти цукерок — 2n-5 кілограмів. Як бачиш, тепер дівчатка переважують мішок з цукерками, хоча був момент, коли шальки терезів урівнова­жилися, але ти його проґавив і не зупинив нена­жерливих дівуль.

Тепер Барсик замислився надовго. Він то чу­хав потилицю (так роблять дядьки, коли напру­жено про щось думають), то перечитував задачу, але ні до чого нового не міг додуматися. Маркіз, спостерігаючи за марними силуваннями товари­ша, змилостивився і почав допомагати:

  • Давай перейдемо до конкретних чисел, — запропонував він. — Нехай Даринка важить 35 кі­лограмів. Скільки тоді важить Наталка?
  • Якщо на 5 кг менше, то 30 кг, а разом вони важать 35 + З0 = 65 кілограмів. І що з того?... — Барсик все ще ніяк не входив у колію.
  • Нехай на другу шальку терезів навалили 75 кг цукерок. То скільки кілограмів цукерок по­винні з’їсти дівчатка? — неспішно продовжував Маркіз. — Якщо вони з’їдять 75 - 65 = 10 кг цуке­рок, то самі стануть важити 65 + 10 = 75 кг, а цу­керок залишиться 75 - 10 = 65 кг. Так на числах ми змоделювали розв’язання задачі і твою помил­ку, — ще й пожартував: — Як бачиш, переїдати шкідливо, тим паче солодощі.
  • А якщо вони з’їдять не 10, а тільки 5 кг цу­керок, — знову невпевнено, майже наосліп, почав Барсик, — то цукерок залишиться 75-5 = 70 кг і дівчатка важитимуть 65 + 5 = 70 кг, — тріум­фуючи завершив такі важкі роздуми, — і терези врівноважаться!!!
  • А тепер порівняй число 10 (різниця ваг цу­керок і дівчаток) з числом 5, яке так вдало при­вело тебе до правильної відповіді, — продовжував наштовхувати Барсика на правильний висновок Маркіз.
  • П’ять — половина числа 10,   5 — половина різниці. Ура!!! — заволав Барсик. — Щоб отрима­ти відповідь, потрібно було різницю т-(2п-5) кілограмів поділити навпіл!
  • А ти забоявся — «для студентів і старшо­класників», — передражнив його Маркіз. — Пи­ши програму. Назвемо її N1. Я ж, напевно, піду пройдуся, кістки розімну.

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

т, — вага цукерок;

п — вага Даринки;

а=п-5 — вага Наталки;

b=п + а — вага обох дівчаток;

с=т-b — різниця у вазі цукерок і дівчаток; d = c: 2 — кілограмів цукерок треба з’їсти (ре­зультат).

  • Є дія ділення? Отже, змінна d типу Real. Вага теж може виражатися дробовим числом. Кі­лограм містить 1000 грамів, 1 грам — 0,001 кіло­грама, три десяткові знаки. Цікаво. Про всяк випа­док нехай усі змінні будуть типу Real, тоді все — можна писати. Щось таке, чи що:

Program N1;

var    n, m,a,b,с,d:Real;

begin

write('Яка вага Даринки?');

readln(n);

write('Скільки кілограмів цукерок?');

readln(m) ;

a:=n-5;

b:=n+a;

c:=m-b;

d:=c/2;

write('Дівчатка повинні з'їсти ',d:5:3,'Kr цукерок');

end.

 

  • Розв’яжемо ще одну задачу. Отже, задача № 2. Слухай і читай ра­зом зі мною:

Крутий учень Сашко сів виконувати домашнє завдання і просидів за столом 2 години. З них х хвилин він чухав потилицю і дивився у вікно,  у хвилин шукав гумку, щоб стерти у підручнику з англійської мови карикатуру па свого товари­ша, на малювання якої він витратив перед цим z хвилин. Решту часу Сашко перекладав англійські слова. Скільки слів переклав Сашко, якщо на пе­реклад одного слова у нього йшло 5 хвилин?

— По-перше, — через деякий час озвучив свої думки Барсик, — оскільки всі подальші дії Сашка тривали по кілька хвилин, а в годині 60 хвилин, то він просидів за столом t = 60· 2 = 120 хвилин. Далі будемо міркувати за текстом задачі:

  • після того як він почухав потилицю, дивля­чись у вікно, він сидів ще а = t хвилин;
  • після того як намалював карикатуру, просидів ще b = а-z хвилин;

після того як знайшов гумку, просидів ще с = b хвилин, протягом яких перекладав англійські слова. На переклад одного слова він витрачав 5 хвилин. Кожних 5 хвилин із цих с хвилин він видавав одне українське слово. Якщо поділити с на 5 — отримаємо кількість перекладених слів. Так, так..., але число с, наприклад 18, може і не поді­литися націло на 5, тоді виходить, що він пере­клав 3,6 слова. Так не буває. А як мені з цим бути, адже число слів повинно бути цілим?

Маркіз, який чекав саме цього питання, пишу­чи на піску, повільно, щоб Барсик точно сприйняв і запам’ятав, промовив:

  • Для цього випадку в Паскалі є операція «ді­лення націло». Знаком дії цієї операції є службове слово  div  — цілочисельна частка від ділення чис­ла с на 18 запишеться так: с div 18. Запам’ятав? Ось і добре, тільки змінних у тебе знову забагато. Як ти вважаєш?
  • Я вже дещо придумав. Ось дивись, — Бар­сик почав швидко писати:

 

Program N2;

Заголовок, ім’я програми

const n=2;

2 години на уроки

var x,у,z,t,c:Integer;

Опис змінних

begin

Початок програми

t:=n*60;

Час на уроки у хвилинах

write('Скільки хвилин Сашко чухав потилицю?');

Підказка для користувача

readln(х) ;

Ввести значення х

t:=t-x;

Залишилось часу на уроки

write('Скільки хвилин Сашко шукав гумку?');

Підказка для користувача

readln(у);

Ввести значення у

t:=t-y;

Залишилось часу на уроки

write('Скільки хвилин Сашко витирав малюнок?');

Підказка для користувача

readln(2);

Ввести значення г

t:=t-z;

Залишилось часу на уроки

c:=t div 5;

Ділення націло на 5

write('Сашко переклав ',c,' слів.');

Виведення результату

end.

Кінець програми

 

 

         Хоча останню команду присвоювання мож­на було б записати так:                t: =t div 5;,  тоді резуль­татом буде значення змінної t і на змінній с мож­на «зекономити». Скажи ж, що я маю рацію, — потираючи вуса, закінчив роботу Барсик.

  • Ти правильно міркуєш, — похвалив його Маркіз і додав: — Давай-но ще одну задачку — і перерва.

 

Отже, задача № 3:

Петрик задумав число і нікому його не на­звав. Друзі спіймали його і примусили подвоїти задумане число, а потім додати до нього 5. І тіль­ки після того як вони пообіцяли Петрусеві гума­нітарну допомогу на контрольній з математики, він зізнався, що вийшло число п. Яке число заду­мав і приховав від друзів Петрусь?

Як Барсик не старався, чомусь нічого путньо­го на думку так і не спадало. Маркіз, скільки міг, спостерігав за творчими муками майбутнього генія, врешті-решт не стримався і почав пояснювати свій метод розв’язання цієї задачі. Це звучало майже так:

  • Позначимо задумане Петриком число через х. Якщо його подвоїти, отримаємо 2х, а якщо ще й додати 5, то отримаємо число п. Отже, 2х + 5 = п, звідки 2х = п-5, х = (п-5):2. Попередні задачі ти розв’язував, слідуючи за умовою задачі, а в цій за­дачі потрібно було всього лише розв’язати рівнян­ня, де невідома величина (задумане число) — ре­зультат програми. Зможеш сам написати тест програми? Ти визначився, де аргумент, а де ре­зультат? Визначив їх типи? Тоді пиши.

Барсик невпевнено, долаючи сумніви, написав:

Program N3;

var n,x: Real;

begin

write('Яке число отримав Петрик?');

read(n);

x:=(n-5)/2;

write('Петрик задумав', x: 5 :1) ;

end.

  • І це все? — досі сумніваючись, запитав він.
  • А ти як думаєш? Усе ще сумніваєшся? — Маркіз намагався розвіяти сумніви друга: — Пе­ревір роботу цієї програми на числах. Наприклад, Петрик задумав число 5, подвоєне число — 10, а якщо ще додати 5, буде 15. Таким чином, Пе­трик здобув число п-15 . За формулою х: = (п-5) /2  якщо n = 15, то х = (15-5):2 = 10:2 = 5 — задума­не Петриком число. А тепер сам задумай число за формулою п = 2х + 5, де х — задумане тобою чис­ло, знайди п. За формулою х = (п-5):2 обчисли задумане тобою число.

Барсик кілька разів виконав зазначені дії. Він брав то 1, то 2, то 3, то ще якесь число, я вже й сам забув, і щоразу в результаті обчислень за цими двома формулами здобував ті ж числа, з яких по­чинав. «Наче фокус якийсь, — подумав Барсик. — Якби його записати на комп’ютері у вигляді програми, тоді можна буде організувати відгаду­вання чисел, наприклад, з господарями». Задума­но — зроблено:

Program Fokus;

var n,x: Real;

begin

writeln('Задумайте, будь ласка, чис­ло');

writeln('Помножте його на 2');

 writeln('До нового числа додайте 5');

write('Яке число Ви отримали?') ;

 read(n);

х: = (n—5)/2;

write('Ви задумалиx’ x:5:1);

end.

  • Це що за шедевр програмістського жан­ру? — здивовано запитав Маркіз, побачивши цей текст.
  • Це нова комп’ютерна гра! Я придумав! — з гордістю відповів Барсик…

   Минулі рази комп’ютер вмикав і вимикав Маркіз, навіть писати не завжди давав... «Але ж ти Пес. Ти все чудово пам’ятаєш. Спробувати чи ні?» — переконував себе Барсик. Урешті-решт спокуса взя­ла верх, а далі все пішло «як книжка пише». Бар­сик клацнув вмикачем — комп’ютер запрацював; клацнув по ярлику ALGO — середовище заванта­жилось; пововтузився з текстом своєї програми, за­пустив на виконання — вона працює!!! Протестує­мо при інших числах — усе «тік-так». Ось так.

   Слухай! Якщо ти не заперечуєш, сказав Маркіз, давай розв’яжемо ще одну задачу Тоді слухай:

Задача № 10. На одно­му маленькому квадратному безлюдному острові, довжина сторони якого — х м, мешкало у потер­пілих корабельну аварію робінзонів. На скільки квадратних метрів площі менше стало припадати па кожного робінзона після того, як на острів ви­брався ще один потерпілий корабельну аварію робінзон?

  • Якщо сторона квадрата — х  м, то площа квад­ратного острова —  S = x2 квадратних метрів, — розпочав уголос розмірковувати Барсик. — Тоді на одного робінзона припадало х2 /y квадратних метрів , а якщо число потерпілих збільшилось на 1,  то на кожного з них стало припадати  по х2/(y+1) квадратних метрів. Нас цікавить, на скільки останнє число менше від попереднього. Ось і все. Тепер типи змінних: змінна у — цілого типу, змінна х — результат вимірювання, тому дійсного типу, а величину житлової площі (я позначу її через s) визначаємо дією ділення, тому вона теж дійсного типу. Ти нічого не заперечуєш?
  • Воля ваша, — відмахнувся Маркіз, якому ці задачі за цілий день добряче набридли, а сам подумав: «Звідки в малого стільки терпіння і на­полегливості? Чи, може, йому насправді цікаво? Як же йому сказати так, щоб не образити, що вже досить? »
  •  Отже, пишемо, — з напускним пафосом за­явив Барсик і написав:

Program N10;

var

у: Integer; x,s: Real;

begin

write('Яка довжина острова в метрах? ‘)

readln(х);

write('Скільки на острові робінзонів? ') ;

.readln (у) ;

s:=sqr(х)/у - sqr(х)/(у+1);

writeln('Житлова площа зменшилась на ',s : 5 : 2,' кв.м');

end.

Але Маркізові цього разу не довелося щось придумувати — тітка Люда принесла вечерю.

Пізно ввечері, коли Маркіз мостився на сіновалі на нічліг, туди ж зі своїми проблемами при­чвалав і Барсик. Ні, він не прийшов побажати

приємного вечора чи спокійної ночі, його розпи­рало одне питання, тому він без стуку з порогу за­питав:

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

Барсик не розгледів такого прозорого натяку і продовжував своє:

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

Останнє зауваження Барсик так і не зрозумів. Не сумніватися, що Маркіз перевірить записи, чи писа­ти і не сумніватися, що вони комусь можуть стати в пригоді? А перепитувати вже було недоречно.

  • А щоб тобі не було нудно самому, ось тобі програма:

Program Загадка;

Var a,b: Real;

begin

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

read(a,b);

а:=а+b;

b:=а-b;

а:=a-b;

write(a:5:2,b:6:2);

end.

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

Добре, що собаки добре бачать уночі. Цей дар Божий став Барсикові в пригоді у його нічних справах...