понеділок, 15 вересня 2014 р.

Складання алгоритмів з використанням функцій

Розв'язування задач на складання алгоритмів з використанням функцій
Задача № 1
За даними цілими числами a і b обчислити u = f (b, a) + 2* f (a+b, 4), де  .
Розв'язання
Зрозуміло, що обчислення значення f(х, у) потрібно описати як допоміжний алгоритм. У даному випадку зручно використовувати функцію, оскільки f(х, у) входить до складу виразу обчислення значення u. При чому формальними параметрами будуть х і у.
        Допоміжний алгоритм
алг дійсн f (ціл x, y)
      арг x, y
поч
      знач : = 2*x*y/(x*x + y*y + 1) - 7
кін
В основній частині програми описуємо формулу для u, яка викликається для фактичних параметрів a і b.
      Алгоритм основної програмиалг Обчислення (ціл a, b, дійсн u)
       арг a, b
       рез u
поч
      u : = f (b, a) + 2*f (a+b, 4)
кін

1. Сконструюйте програму, вказавши послідовність кроків за зразком: 123456789.
      1)      Readkey;
         END.
      2) BEGIN
               ClrScr;
               Write(‘a, b => ');
      3) function f (x, y: integer);
          begin
      4) Readln(a, b);
           u : = f (b, a) + 2*f (a+b, 4);
       5) Program Calculation;
               Uses Crt;
       6) u: real;
       7)      f : = 2*x*y/(x*x + y*y + 1) - 7
           end;
       8) Var
              a, b : integer;
        9) Write(‘u=', u : 4 : 2);
 
2. Чи можна замінити у функції
        function f (x, y : integer);
        begin
               f : = 2*x*y/(x*x + y*y + 1) - 7
        end;
команду  f:= 2*x*y/(x*x+y*y+1)-7 на  f(х, у):= 2*x*y/(x*x+y*y+1)-7 ?
1) так;
2) ні.
3. При заміні алг Обчислення (ціл a, b, дійсн u) на алг Обчислення (дійсн a, b, дійсн u) виникатиме помилка через:
1) невідповідність кількості формальних та фактичних параметрів;
2) неправильний опис заголовку алгоритму;
3) невідповідність типів формальних та фактичних параметрів.

Задача № 2
Обчислити значення функції y = -3x+ 4x - 10 на проміжку [a, b], де a, b - цілі числа, з кроком 0.5 і знайти максимальне з них.
Розв'язання
Як і в попередній задачі, обчислення значення заданої функції опишемо як допоміжний алгоритм. Якщо нам потрібно буде змінити задання функції (формулу), то достатньо буде внести зміни лише в тілі функції. Основна ж частина програми не буде залежати від внесених поправок.
Крім цього, опишемо функцію знаходження більшого з 2-ох елементів, яку будемо використовувати для знаходження максимального значення функції на проміжку.
алг дійсн f (дійсн t)
      арг t
поч
      знач : = -3*t*t*t + 4*t - 10
кін

4. Чи можна в допоміжний алгоритм
      алг дійсн f (дійсн t)
            арг t
      
поч            знач : = -3*t*t*t + 4*t - 10
      кін
внести такі зміни:
      алг дійсн f (дійсн t)
           арг t
      поч
           дійсн z
           z : = -3*t*t*t + 4*t - 10
           знач:= z
      кін
1) ні;
2) так.
5. Сконструюйте алгоритм знаходження більшого з 2-ох чисел, ввівши порядок кроків за зразком: 12345678
      1) арг t1, t2
      2) інакше знач:= t2
      3) якщо t1>t2
      4) кін
      5) алг дійсн Більше_2 (дійсн t1, t2)
      6) поч
      7) все
      8) то
             знач : = t1
 

В основній частині програми потрібно організувати цикл від x= a до х= b із кроком 0.5. Це не може бути цикл для, де крок становить 1 або-1. Тому використовуватимемо цикл поки. У циклі треба: 1) обчислити значення функції при заданому аргументу, 2) визначити, що більше: знайдене значення функції чи поточне максимальне значення; 3) збільшити аргумент на 0.5. Спочатку максимальним можна вважати значення функції в точці а.
      Алгоритм основної частини програми
алг Максим_значення (ціл a, b, дійсн max)
       арг a, b
       рез max
поч
     дійсн x, y
     max : = f(a)
     x : = a+0.5;
     поки x<= b
     пц
         y : = f(x)
         max : = Більше_2 (y, max)
         x : = x + 0.5
     кц
кін
Program Max_znach;
     Uses Crt;
     Var
          a, b : integer;
          x, y, max : real;
    function f (t : real) : real;
    begin
           f : = -3*t*t*t + 4*t - 10
    end;
    function Bilshe_2 (t1, t2 : real) : real;
    begin
         if   t1>t2
              then Bilshe_2 : = t1
              else Bilshe_2 : = t2;
   end;
BEGIN
      ClrScr;
      Write(‘a, b => ');
      Readln(a, b);
      max : = f(a);
      x : = a+0.5;
     While x<= b do
     begin
            y : = f(x);
            max : = Більше_2 (y, max);
            x : = x + 0.5;
     end;
     Write(‘max=', max : 4 : 2);
      Readkey;
END.

6. Чи рівносильною буде заміна фрагменту
      While x<=b do
      begin
             y : = f(x);
             max : = Більше_2 (y, max);
             x : = x + 0.5;
     end;
на
      While x<=b do
      begin
           x : = x + 0.5;
           y : = f(x);
           max := Більше_2 (y, max);
      end;
1) так;
2) ні.

Задача № 3
Юрко не переймався математичними формулами і тому весь час на уроки математики носив з собою довідник, в якому під номером 1 була написана формула обчислення периметра квадрата, під номером 2 - площі квадрата, під номером об'єму куба, під номером 4 - площі бічної поверхні куба. Допоможіть Юркові скласти для комп'ютера програму, яка за даним номером формули та довжиною сторони квадрата замінила б йому довідник для розв'язування домашніх завдань. Обчислення за кожною з формул оформити як функцію.
Розв'язання
Потрібно 4 допоміжних алгоритми (функцій) для знаходження периметра квадрату (p : = 4*a), площі (Skv : = a2), об'єму куба (V : = a3), площі бічної поверхні куба (Sbp : =6*a2).
        Допоміжні алгоритми
дійсн алг Периметр (дійсн х)
      арг x
поч
     знач : = 4*x
кін

дійсн алг Площа_кв (дійсн x)
       арг x
поч
      знач : = x2
кін
дійсн алг Об'єм (дійсн x)
        арг x
поч     знач : = x3
кін
дійсн алг Площа_пов (дійсн x)
      арг x
поч
      знач : = 6*x2
кін

У основній частині програми будемо викликати один із допоміжних алгоритмів залежно від введеного номеру к.
алг Довідник (ціл к, дійсн а, дійсн rez)
      арг к, а
      рез rez
поч
      вибір  к  з         при к=1
                rez : = Периметр (а)
         при к=2
                rez : = Площа_кв (а)
         при к=3
                rez : = Об'єм (а)
         при к=4
                rez : = Площа_пов (а)
      все
кін

7. Чи можна замінити оператор вибору на 4 оператори умови за зразком:
      якщо к=1
               то rez : = Периметр (а)
      все
      . . .
1) так;
2) ні.

Program Max_znach;
    Uses Crt;
     Var
          k : integer;
          a, rez : real;
    function Perumetr (x : real) : real;
    begin
          Perumetr : = 4*x;
    end;
    function Plosha_kv (x : real) : real;
    begin
          Plosha_kv : = x*x;
    end;
    function Objem (x : real) : real;
    begin
          Objem : = x*x*x;
    end;
    function Plosha_pov (x : real) : real;
    begin
           Plosha_pov : = 6*x*x;
    end;
BEGIN
      ClrScr;
      Write (‘k, a => ');
       Readln(k, a);
       Case k of
           1: begin
                   rez : = Perumetr(a);
                  Writeln (‘p=', rez : 4 : 2);
              end;
           2: begin
                  rez : = Plosha_kv (a);
                  Writeln (‘S_kv =', rez : 4 : 2);
              end;
          3: begin
                 rez : = Objem(a);
                Writeln (‘V=', rez : 4 : 2);
             end;
          4: begin
                rez : = Plosha_pov (a);
                Writeln (‘Sbp=', rez : 4 : 2);
             end;
        end;
       Readkey;
END.

8. Чи вплине на роботу програми зміна порядку опису процедур?
1) ні;
2) так.
9. Параметр а в програмі є:
1) глобальним фактичним;
2) локальним фактичним;
3) глобальним формальним;
4) глобальним формальним.

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

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