Усі плани Барсика порушила погода. Є в селі такий погодний фактор, як дощ. Він ішов уночі, на ранок теж мрячило, тому годі було сподіватися, що друзям вдасться потрапити не те що до комп’ютера (з мокрими ж і не зовсім чистими лапами!), а й до хати їх ніхто не пустить. Та й що робити на комп’ютері, якщо немає жодного тексту програми? Увімкнути комп’ютер і дивитись на нього, поки щось на думку не спаде, чи що? Малюнки на піску розмив дощ, а нові ідеї в Барсика чомусь не народжувалися, ні натще, ні після сніданку.
Ситуацію розрулив Маркіз, який звідкись, скоріше всього від Васі, притащив тоненьку книжечку «Серйозні розваги для старшокласників і студентів».
- Раз так склалося — будемо розв’язувати задачі, — урочисто заявив він.
- Та ти що? Того? — здивувався Барсик. — Ти що, не читав, що це для старшокласників і студентів?
- До чого тут студенти чи старшокласники? Ми що, по-твоєму, ні на що не здатні? Може, ми теж ого-го... — не вгавав Маркіз. Ось послухай, що каже задача № 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.
Протестуй її, будь ласка, при різних значеннях змінних і додатних, і від’ємних, коли перше число більше за друге і навпаки, а потім розкажеш, що робить ця програма, — ще додав замороки Маркіз.
Добре, що собаки добре бачать уночі. Цей дар Божий став Барсикові в пригоді у його нічних справах...