ОСНОВНІ АЛГОРИТМІЧНІ СТРУКТУРИ | Логічні величини і вирази | умовний оператор | Оператор вибору CASE | Програмування рухомих об'єктів |

загрузка...
загрузка...
На головну

змішані алгоритми

  1. АЛГОРИТМИ
  2. алгоритми
  3. Алгоритми і величини
  4. Алгоритми і засоби їх опису. Основні елементи.
  5. Алгоритми звільнення пам'яті
  6. Алгоритми переведення чисел
  7. Алгоритми переведення чисел

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

 
 


приклади:

 Приклад 1. Потрібно забрати таблицю множення кожного натурального числа від 1 до 9 на 2, 3, 4, ..., 9 (таблиця Піфагора):
 ...  ...  ...  ...  ...  ...  ...  ...  ...

 Program Tablica; Var x, y: byte; Begin For x: = 1 to 9 do {1-й співмножник} BeginFor y: = 1 to 9 do {2-й співмножник} Write (x * y: 3); {висновок x * y} Writeln {перехід на новий рядок} End; End.

Приклад 2. Потрібно знайти кількість двозначних чисел, які діляться на суму своїх цифр.

Будемо розглядати шукані числа у вигляді сукупності цифр і, перебираючи їх різні можливі значення, формувати число х= 10а+b і суму цифр S = a + b. Нехай K - кількість шуканих чисел.


 
 

 Program Liki; Var a, b, x, S: Byte; K: Integer; BeginK: = 0; {a - старша цифра, b - молодша цифра} For a: = 1 to 9 do For b: = 0 to 9 doBeginx : = 10 * a + b; {x - двозначне число} S: = a + b; {S - сума цифр числа} If x mod S = 0 thenBegin {якщо число x ділиться на суммуціфр, вважаємо його} K: = K +1; {і виводимо на екран} Write (x, '') End End; {переклад курсору на новий рядок} Writeln; {висновок загальної кількості чисел} Writeln ( 'Всього чисел:', K) End.

 * Приклад 3. Господарство має розлити весь зібраний березовий сік в банки ємністю 3 л, 5 л, 10 л. Потрібно визначити, чи можна це зробити і скільки банок кожного виду знадобиться (вважати, що кількість банок необмежено). Отримати варіант розливу з найменшою кількістю використаних банок.

дано: L (Л) - обсяг зібраного соку

знайти: a, b, c - Кількість банок відповідно ємністю 3 л, 5 л, 10 л.

зв'язок:

Розлити весь сік в банки повністю не можна, якщо дане рівняння не має рішень в цілих невід'ємних числах.

при: L - ціле число

метод:

1. Для отримання варіанти розливу в десятилітрові банки будемо перебирати значення змінної z від мінімально можливого (0) до максимального ([L/ 10]). Залишиться нерозлитим Р = L-10z (Л) соку, які будемо намагатися розлити в банки ємністю 5 л; для цього будемо перебирати значення змінної y від 0 до [Р / 5]. Для розливу в трилітрові банки залишиться х= Р-5y (Л) соку. нехай t = х/ 3. якщо t - Ціле число, одне з рішень задачі отримано; його можна вивести на екран комп'ютера. Факт отримання рішення будемо фіксувати логічної змінної Yes, якій дамо значення True. За значенням Yes при завершенні роботи програми будемо судити, чи вивести повідомлення «Розлив неможливий».

2. Для отримання найкращого варіанту розливу будемо порівнювати загальна кількість використаних банок K=t+y+z зі значенням деякої змінної min. Цю змінну будемо використовувати для зберігання найменшого значення суми: min = K, Якщо справедливо нерівність: K < min. Одночасно запам'ятаємо в змінних a, b, c відповідні значення t, y, z. Спочатку будемо вважати значення min рівним досить великим цілому числу (MaxInt).


 Програма РазлівОпісаніеL, y, b, c, z, P, min, K, a, x: ЦелийХ3: ВещественнийYes: ЛогіческійКонец_опісаніяВвод (L, 'Всього соку =') Yes: = Ложьmin: = 32000Повторять_Для zОт 0до Целая_часть (L / 10) P: = L-10 * zПовторять_Для yОт 0до Целая_часть (P / 5) x: = P-5 * yx3: = x / 3Еслі х3 = Целая_часть (x3) ТоYes: = ІстінаВивод (Целая_часть (x3), ',', y , ',', z) Новая_строкаK: = Целая_часть (x3) + y + zЕслі K  Program Rasliv; Var L, y, z, P, min, K, t, a, b, c, x: Integer; x3: Real; Yes: Boolean; BeginWrite ( 'Всього соку ='); Readln (L); Yes: = False; min: = MaxInt; For z: = 0 To L div 10 doBeginP: = L -10 * z; For y: = 0 To P div 5 doBeginx: = P-5 * y; x3: = x / 3; t: = Trunc (x3); If x3 = t ThenBeginYes: = True; Writeln (t, ',', y, ',', z); K: = t + y + z; If K
 * Приклад 4. Розшифрувати ребус: РІК * 4 = ВЕК, де кожна буква є певною цифрі (різні літери - різним цифрам) .Смоделіруем алгоритм множення стовпчиком, починаючи множення з молодшого розряду (справа наліво). Так як Д ? К, то Д не дорівнює нулю. Нехай Pr = Д * 4, тоді К - залишок від ділення Pr на 10, р1 - перенесення в наступний розряд (розряд десятків) .В наступному розряді Про ? Д, О ? К, Pr1 = О * 4 + р1; Е - залишок від ділення Pr1 на 10, Е - цифра, що не рівна іншим, вже використаним в алгоритмі: Е ? О, Е ? Д, Е ? К; р2 - перенесення в наступний розряд (розряд сотень), Цифра, відповідна букві Г, може бути дорівнює 1 або 2, так як слово ВЕК складається з трьох букв; Г ? О, Г ? Д, Г ? Е, Р ? К. В = Г * 4 + р 2. Слід перевірити справедливість виконання умов: В <10, В - цифра, що не рівна використаним раніше ціфрам.В програмі змінним Г, О, Д, В, Е, К відповідають змінні g, o, d, v, e, k.  Program SHIFR; Var d, o, g, v, e, k, Pr, Pr1, p1, p2: Byte; Begin For d: = 1 To 9 doBeginPr: = d * 4; k: = Pr mod 10; p1: = Pr div 10; For o: = 0 To 9 doIf (o <> d) and (o <> k) ThenBeginPr1: = o * 4 + p1; e: = pr1 mod 10; If (e <> o) and (e <> d) and (e <> k) ThenBeginp2: = pr1 div 10; For g: = 1 To 2 doIf (g <> o) and (g <> d) and (g <> k) and ( g <> e) ThenBeginv: = g * 4 + p2; if (v <10) and (v <> o) and (v <> d) and (v <> k) and (v <> e) ThenWriteln ( g, o, d, '* 4 =', v, e, k) EndEndEndEndEnd.
 Приклад 5. Методом Монте-Карло обчислити значення числа ?. Нагадаємо, що модель і її реалізація на ІНТАЛЄВ вивчалася Вами в 10-му класі. Тут наведемо реалізацію моделі на мові програмування Паскаль.Сущность методу полягає у випадковому розміщенні точок в квадраті з вписаною окружністю одиничного радіуса. Для підрахунку кількості випробувань (генеруються точок) в алгоритмі використовується змінна i, Для якої відомі початкове значення (1), кінцеве значення (n) І величина кроку (1). Значить, в Паскалі доречно використання циклу з параметром.  Program PI_; Var n, i, k: LongInt; SF, a, x, y: Real; BeginRandomize; Write ( 'всього точок ='); Readln (n); a: = 2; k: = 0; For i: = 1 to n doBeginx: = 2 * Random-1; y: = 2 * Random-1; if x * x + y * y <= 1 then k: = k + 1End; SF : = a * a * k / n; Writeln ( 'Число ПІ =', SF) End.
 * Приклад 6. ( «Помножити на 3 та скласти з 1»). Задано деяке натуральне число. Піддамо його наступного випробування: якщо це число парне, розділимо його на 2, якщо непарна - помножимо на 3 і додамо 1. З отриманим числом виконаємо аналогічні дії. Наприклад, для числа 7 виходить послідовність чисел: 7, 22, 11, 34, 17, 52, 26, ... Помічено, що яке б натуральне число не було введено, через кілька кроків буде отримано число 1; потім спостерігається циклічне повторення деяких чисел. Визначте число кроків, необхідних для отримання першої одиниці в такій послідовності чісел.Одін крок - це одна дія над числом: поділ на 2, або множення на 3 та додаток 1.  Program Experiment; Var n, k: LongInt; BeginWrite ( 'n ='); Readln (n); k: = 0; While n <> 1 doBeginIf n mod 2 = 0 thenn: = n div 2else n: = n * 3 + 1; Write ( ',', n); k: = k +1; End; Writeln; Writeln ( 'K = ', k); End.
 В даному випадку кількість повторень циклу заздалегідь невідомо. Крім того, цикл може не виконуватися жодного разу (якщо n = 1), тому з відомих нам циклічних конструкцій обрана саме структура цикл While. Проведіть випробування програми, придивіться до отримуваних послідовностям при різних значеннях n: Можливо, Вам вдасться отримати формулу залежності k від n.
       

1. Які керуючі конструкції використовуються в Паскалі?

2. Що таке «умовний оператор» і як він застосовується?

3. Які оператори циклу Ви знаєте?

4. Коли і як застосовується оператор циклу for? while?

 * 1. Визначте, що буде виведено на екран комп'ютера після виконання послідовності операторів:

Readln (k); For n: = 1 to k do Begin

For m: = 1 to k do if n> = m then Write ( '1') else Write ( '2'); Writeln End;

 * 2. Визначте, яке значення слід ввести при запуску програми, фрагмент якої записаний нижче, щоб при виведенні було надруковано число 2:

Readln (n); k: = 0; for i: = n to 5 do if i> 0 then k: = k-1 else k: = k + 1; Writeln (k);

 * 3. Скільки разів виконуються зовнішній і внутрішній цикли в наступних фрагментах:

 1) x: = 0; While x <= 7 doWhile x = 0 dox: = x + 1;  2) x: = 0; While x <= 10 doWhile x <= 17 dox: = x + 1;  3) x: = 0; While x <= 17 doWhile x <= 10 dox: = x + 1;

 1. Вирішіть задачу про розлив соку в банки для випадку, коли ємності банок заздалегідь не відомі і вводяться з клавіатури.

2. Вирішіть задачу В (п. 11.3) про покупку зошитів і ручок в припущенні, що їх вартості заздалегідь не відомі і вводяться з клавіатури; можна купувати і ручки і зошити одночасно. Отримайте варіант покупки з найбільшою кількістю придбаних товарів.

3. Напишіть програми вирішення наступних завдань:

1) обчислити добуток всіх чисел (крім 0) заданого натурального числа;

2) перевірити, чи є парної перша цифра заданого натурального числа;

3) підрахувати кількість парних цифр заданого натурального числа;

 * 4) підрахувати, скільки в запису заданого натурального числа міститься нулів, парних і непарних чисел окремо;

 * 5) Розшифрувати ребуси:

а) БІТ х 8 = БАЙТ б) Спека х 3 = ЛІТО в) ТРИ х 6 = ДІРА

г) ВАНЯ х 4 = Івани д) ГРАЧ х 4 = СТАЯ е) ЛЮДИ х 4 = ЮРМА

ж) ШЛАК х 3 = БЛОК з) ПРАЦЯ х 5 = УСПІХ і) ВОГОНЬ х 8 = ПОЖЕЖА

к) ЛУНА х 4 = НОЧІ л) ДУБ х 7 = ГАЙ м) ГРАВ х 6 = ВТОМИВСЯ

н) ЛОБ + ТРИ = САМ о) ДО х РЕ + МІ = НОТИ

 * 6) Визначити числа, які є довжинами сторін прямокутного трикутника і зашифровані у вигляді слів: а) КУ, КА, РЕ; б) ОН, АЛЕ, НА; в) СОН, ЧНІ, НИЗ (тут однаковим буквах відповідають однакові цифри);

7) знайти найбільше значення функції y = sinx+ cos2x на відрізку [0; 1];

8) числа a, b, c називають піфагорових, якщо a2+ b2= c2. Складіть програму виведення на екран всіх піфагорових трійок з числового проміжку [1; 100] (трійки 3, 4, 5 і 5, 3, 4 вважаються однаковими; потрібно вивести тільки одну з них);

9) потрібно підрахувати кількість натуральних п'ятизначних чисел, що діляться на 23 і на свою останню цифру.

4. Відомі довжини трьох секцій огорожі на кожному з двох земельних ділянок. Визначити, який з них має більшу площу. Якщо площі рівні, вивести відповідне повідомлення.

 * 5. Напишіть програму для реалізації гри БАШЕЄВ: є певна кількість предметів (це кількість можна вводити з клавіатури або отримати випадковим чином); двоє гравців (учень і комп'ютер) ходять по черзі; за один хід гравець може взяти від одного до трьох предметів; програє той, хто візьме останній предмет.

Продумайте і реалізуйте в програмі стратегію виграшу.

6. Напишіть програму гри «Вгадай число»: комп'ютер випадковим чином загадує число в деякому діапазоні (наприклад, від 1 до 100) і пропонує вгадати його. Завдання користувача: за якомога меншу кількість спроб вгадати це число.

 * 7. Напишіть програму «Загадка жерців бога РА». Відома глибина води в деякому колодязі циліндричної форми. У нього опущені дві тростинки так, як зображено на малюнку. Довжини тростинок відомі. Потрібно допомогти кандидату на заміщення вакантної посади жерця визначити діаметр колодязя.

 * 8. Реалізуйте на мові програмування Паскаль модель замкнутої біосистеми, відомої Вам з 10 класу.

 * 9. Реалізуйте алгоритм екологічної моделі, здійснюючи контроль вихідних даних відповідно до алгоритму п. 9.3.

 * 10. Напишіть програму для контролю засвоєння усного рахунку користувачем. Програма повинна запросити два числа (доданків), вивести їх на екран, запропонувати ввести суму цих чисел; перевірити, чи правильна ця сума, і вивести на екран комп'ютера відповідне повідомлення ( «Правильно», «Неправильно»). Таким чином запропонувати для вирішення 10 прикладів. Потім вивести кількість правильних і неправильних відповідей.

 * 11. Напишіть програму рішення задачі про розміщення залізничного вокзалу (§ 11, 10 клас).



Алгоритмічна структура ПОВТОРЕННЯ | графічні побудови
загрузка...
© um.co.ua - учбові матеріали та реферати