четвер, 11 січня 2018 р.

Алгоритми на знаходження кількостей


Алгоритмом називається упорядкована послідовність дій (команд), які необхідно виконати для вирішення задачі. Упорядкованість досягається правилом про порядок запису команд.
         Існують два способи завдання алгоритму: блок-схемний та програмний (операторний).
         Блок-схемний спосіб завдання алгоритму – це графічне зображення алгоритму у вигляді окремих частин  - блоків. Кожен блок відповідає окремому етапу розв’язання задачі. Порядок виконання етапів (блоків) задається з’єднувальними лініями або номерами блоків.
    Лінійним є процес, в якому команди виконуються послідовно, у порядку їх запису, без розгалужень та повторень.
         Оператор присвоєння працює як обчислювальний: спочатку обчислює значення арифметичного виразу (правої частини), а потім – присвоює отримане значення змінній, яка знаходиться ліворуч.
         Вираз може складатися з констант, змінних, знаків операцій, круглих дужок та функцій.
         Нижче наведені знаки операцій у порядку зниження старшинства їх виконання:
         @, Not
         *, /, Div, Mod, And, Shl, Shr
         +, -, Or, Xor
         =, <>, , =, In
         Операція @ вживається частіше за все під час роботи з динамічною пам’яттю. При роботі з логічними даними виникає потреба брати протилежне (негативне) значення логічної величини. Для цього застосовують операцію Not.
         Знак * визначає операцію множення, а / - операцію ділення. Операції Div та Mod мають справу тільки з цілими операндами. Операція Div обчислює цілу частину частки, а Mod – залишок.
         Типове використання операцій And -  при роботі з логічними даними. Результат операції буде True тільки в тому випадку, коли обидва операнди мають таке ж значення.
         Операндами операції Shl та Shr можуть бути цілі числа. Ці операції забезпечують циклічні зсуви відповідно ліворуч та праворуч двійкових розрядів чисел.
         Операція Or реалізує логічну функцію диз’юнкції, її результат True, якщо принаймні один з операндів буде True.
Результатом операції Xor буде True, якщо значення операндів не збігаються, в протилежному випадку - False.
Операндами операції In являються: з одного боку, множина деяких елементів, а з другого, дані, які можуть входити в множину, або ні.
Для запису арифметичних виразів мовою PASCAL використовуються стандартні функції:
ABS(X) – |X|                                                     ARCTAN(X) – arctg x
COS(X) – cos x                                                 SIN(X) – sin x
EXP(X) – ex                                                       LN(X) – ln x
SQR(X) – x 2                                                     SQRT(X) –  квадратний корінь 
ROUND(X) – функція округлення дійсного числа до найближчого цілого.
ODD(X) – перевіряє парність аргументу. Якщо це парне число, результат функції False, інакше – TRUE.
RANDOM(X) - виробляє випадкове число від 0 до Х.

Приклад. Скласти програму обчислення функції:
Лінійний алгоритм, линейный алгоритм
Програма:
Var X, Y, Z, B : Real;
Begin
   Write(‘Введіть Х :’);
   ReadLn(X);
   Write(‘Введіть Y :’);
   ReadLn(Y);
   Write(‘Введіть Z :’);
   ReadLn(Z);
B:=SQR(SIN(X))+(SQR(Y)+SIN(SQR(Z))/COS(SQR(Z)))/(Z+EXP(-X));
   WriteLn(‘Значення B=’, B);
End.




Задачі на знаходження кількості, суми, добутку, середнього арифметичного

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

Знаходження суми

s:=0; початкове значення
s:=s+a; де а будь-які числа

Знаходження добутку

p:=1; початкове значення
p:=p*a; де а будь-які числа

Знаходження кількості

k:=0; початкове значення
k:=k+1; збільшення лічильника
У цих формулах перший оператор присвоєння (початкове значення) виконується один раз (перед циклом), другий оператор виконується декілька разів (у циклі), при цьому число а (це може бути й інша змінна) кожний раз інше.

Знаходження середнього арифметичного

sa:=0; початкове значення
if k<>0 then sa:=s/k;
де s – сума чисел, а k – їх кількість
Ця формула використовується один раз, після знаходження суми та кількості. Перевірка if k<>0 потрібна, бо серед всіх чисел може не бути чисел з потрібною ознакою, тому отримаємо ділення на 0, що не припустимо.
Для знаходження суми, добутку, кількості та середнього арифметичного чисел не з якогось інтервалу, а будь-яких, ці числа можна вводити з клавіатури. Причому, вони вводяться в одну і ту ж змінну по черзі (приклад 2).

Приклад 1

Знайдіть суму, кількість та середнє арифметичне всіх натуральних двохзначних чисел, у яких перша цифра менша другої.
Дано: У програму нічого не вводиться. Всі числа вибираються з інтервалу [10, 99]. Серед цих чисел вибираються такі, у яких перша цифра менша другої.
Знайти: суму вибраних чисел, їх кількість, та середнє арифметичне (знайдену суму поділити на кількість).

Змінні:

Вхідних даних немає

Вихідні дані:
  • s – сума чисел (ціле)
  • k – кількість чисел (ціле)
  • sa – середнє арифметичне (дійсне)
Проміжні дані:
  • i – двохзначне число(ціле)
  • c1 – перша цифра числа i
  • c2 – друга цифра числа i

Алгоритм

  1. Спочатку потрібно обнулити значення всіх змінних, що накопичуються: s, k, sa.
  2. Оператор циклу for i:=10 to 99 do автоматично змінює значення i від 10 до 99.
  3. У тілі циклу в операторних дужках виконуються такі дії:
    1. Оператор c1:=i div 10 обчислює першу цифру числа i;
    2. Оператор c2:=i mod 10 обчислює другу цифру числа i;
    3. Якщо перша цифра числа i менше другої цифри (c1< c2), то для такого числа в операторних дужках виконуються дії:
    • Число i додається до суми (оператор s:=s+i)
    • Збільшується лічильник таких чисел (оператор k:=k+1)
  4. Коли цикл закінчиться, тобто будуть перевірені всі двохзначні числа, знайдені такі, у яких перша цифра менша другої, знайдена сума таких чисел та їх кількість, можна знаходити їх середнє арифметичне оператором sa:=s/k.
  5. Потім всі знайдені вихідні дані виводяться на екран оператором writeln(s,' ',k,' ',sa:1:2). Вивід середнього арифметичного (як даного дійсного типу) виконується у форматі з двома знаками після крапки.

Програма

 var i,s,c1,c2,k:integer;sa:real;
begin
 s:=0;k:=0;sa:=0;
 for i:=10 to 99
 begin
   c1:=i div 10; c2:=i mod 10;
   if c1 < c2 then
     begin
       s:=s+i; k:=k+1;
     end;
 end;
 if k<>0 then sa:=s/k;
 writeln(s,' ',k,' ',sa:1:2);
end.

Результат роботи програми

На екрані
1440 36 40.00

Приклад 2

Ввести з клавіатури n дійсних чисел. Знайти добуток тих, що належать інтервалу [0, b].
Дано: – кількість введених чисел, самі дійсні числа та число b.
На відмінність від попередньої задачі, де необхідні вхідні числа генерувались самою програмою (оператором for), в цій програмі всі дані будуть вводитись з клавіатури, а тому можуть бути будь-якими.
Знайти: з цих введених чисел вибрати такі, які більші 0 та менші b, та знайти їх добуток.

Змінні:

Вхідні:
  • n – кількість чисел (ціле число)
  • b – права границя інтервалу [0, b] (дійсне число)
  • a – саме введене число (дійсне)
Вихідні:
  • p – добуток чисел, які 0<=a<=b (дійсний тип, бо самі числа дійсні)
Проміжні:
  • i – параметр циклу (ціле число)

Алгоритм

  1. Спочатку потрібно присвоїти початкове значення добутку (p:=1), що буде накопичуватись.
  2. Потім вводимо значення b оператором read(b).
  3. Вводимо n – кількість чисел, що будемо вводити. Це значення буде визначати кількість витків циклу.
  4. У циклі for i:=1 to n do у операторних дужках будемо виконувати такі дії:
    • Оператор read(a) вводить числове значення у змінну a. Чисел буде n. Але кожне наступне число ми будемо вводити в одну і ту ж змінну, затираючи попереднє число. Це не страшно, бо з попереднім числом, на попередньому витку цикли вже будуть виконані всі необхідні дії.
    • Якщо введене число задовольняє нерівності ((a>=0)and(a<=b)), то це число накопичується у добуток p:=p*a.
  5. Коли цикл закінчиться, тобто будуть введені всі n чисел, серед них будуть знайдені такі, що (a>=0)and(a<=b), та буде знайдено їх добуток. Цей добуток буде виведено на екран оператором writeln(p:1:1). Вивід добутку (як даного дійсного типу) виконується у форматі з одним знаком після крапки.

    Програма

     var i,n:integer; a,b,p:real;
    begin
     p:=1;
     read(b); read(n);
     for i:=1 to n do
     begin
        read(a);
        if (a>=0)and(a<=b) then p:=p*a;
     end;
     writeln(p:1:1);
    end.

    Результат роботи програми

    ВвідВивідПоясненняі
    110.5
    5
    12
    8.5
    15.2
    2
    10
    170.0Перше введене число - це значення змінної b=10.5. Друге число - це значення змінної n=5. Інші числа - це значення змінної a. Серед 5 чисел вибрані ті, що менші 10.5. Це числа 8.5, 2 та 10. Їх добуток 170.
    23
    4
    5
    2
    2.5
    -4
    5.0Перше введене число - це значення змінної b=3. Друге число - це значення змінної n=4. Інші числа - це значення змінної a. Серед 4 чисел вибрані ті, що менші 3. Це числа 2.5 та 2. Їх добуток 5.

    Варіанти задач

    1

    1. Знайти середнє арифметичне всіх натуральних двохзначних чисел,кратних 13.
    2. Ввести з клавіатури n будь-яких чисел. Знайти їх суму.

    2

    1. Знайдіть суму всіх натуральних двохзначних чисел, які закінчуються на цифру 3.
    2. Ввести з клавіатури n будь-яких чисел. Знайти кількість від'ємних.

    3

    1. Знайдіть суму, кількість та середнє арифметичне всіх натуральних двохзначних чисел, які складаються з парних цифр.
    2. Ввести з клавіатури n будь-яких чисел. Знайти добуток тих, що кратні 3.

    4

    1. Знайдіть добуток всіх натуральних двохзначних чисел, у яких перша цифра вдвічі більше другої.
    2. Ввести з клавіатури n будь-яких чисел. Знайти суму, кількість, середнє арифметичне та добуток двохзначних.

    5

    1. Знайдіть суму, кількість та середнє арифметичне всіх натуральних двохзначних чисел, що складаються з різних цифр.
    2. Ввести з клавіатури n будь-яких чисел. Знайти кількість додатних чисел та кількість від'ємних.

    6

    1. Знайдіть суму, кількість та середнє арифметичне всіх натуральних чисел від 30 до 100, що кратні 3 та закінчуються на 2, 4 або 8.
    2. Ввести з клавіатури n будь-яких чисел. Знайти подвоєний добуток всіх чисел, що більші 10 та менші 20.

    7

    1. Знайдіть кількість всіх натуральних трьохзначних чисел,в яких є хоча б дві однакові цифри.
    2. Ввести з клавіатури n будь-яких чисел. Знайти середнє арифметичне тих, що закінчуються цифрою 3.

    8

    1. Обчисліть добуток всіх цілих <>0 чисел з інтервалу [-6;5].
    2. Ввести з клавіатури n будь-яких чисел. Знайти середнє арифметичне однозначних.

    9

    1. Знайдіть суму, кількість та середнє арифметичне всіх натуральних трьохзначних чисел, що починаються та закінчуються однаковими цифрами.
    2. Ввести з клавіатури n будь-яких чисел та число p. Знайти добуток тих чисел,що кратні p.

    10

    1. Знайдіть суму, кількість та середнє арифметичне всіх цілих чисел з інтервалу [200,400], в записі яких є цифра 5.
    2. Ввести з клавіатури n будь-яких чисел. Знайти добуток всіх від'ємних.

    11

    1. Знайдіть суму, кількість та середнє арифметичне всіх цілих чисел з інтервалу [100;200], кратних 17.
    2. Ввести з клавіатури n будь-яких чисел. Знайти кількість та добуток тих, що належать інтервалу [a, b].

    12

    1. Знайдіть суму всіх цілих чисел від A до B, що закінчуються цифрою 5 або цифрою 0 (значення A та B введіть з клавіатури).
    2. Ввести з клавіатури n будь-яких чисел. Знайти суму, кількість, середнє арифметичне та добуток тих чисел, що більшi 10.

    13

    1. Знайдіть кількість натуральних чотирьохзначних чисел, у яких перша цифра дорівнює третій, а друга четвертій (наприклад, 1212, 4747).
    2. Ввести з клавіатури n будь-яких чисел. Знайти суму, кількість та середнє арифметичне всіх тих, що кратні b.

    14

    1. Знайдіть середнє арифметичне всіх натуральних трьохзначних чисел, які починаються та закінчуються на одну і ту ж цифру.
    2. Ввести з клавіатури n будь-яких чисел та число k. Знайти середнє арифметичне всіх чисел, крім числа з порядковим номером k.

    15

    1. Знайдіть кількість та середнє арифметичне всіх щасливих чотирьохзначних натуральних чисел. Щасливим називається число, у якого сума перших двох цифр дорівнює сумі останніх двох цифр. Наприклад, 3241.
    2. Ввести з клавіатури n будь-яких чисел та число k. Знайти суму всіх чисел з порядковими номерами >k.

    16

    1. Знайдіть кількість та середнє арифметичне натуральних чотирьохзначних чисел, у яких перша цифра дорівнює четвертій, а друга третій (наприклад, 1221, 4774).
    2. Ввести з клавіатури n будь-яких чисел та число k. Знайти середнє арифметичне всіх чисел, з порядковими номерами < k.

Немає коментарів:

Дописати коментар