пʼятниця, 14 листопада 2014 р.

Алгоритми табуляції функції

Запис циклічних операторів мовою Паскаль 

Циклом називають послідовність дій (операторів), яку записують один раз, але вона може виконуватися багаторазово.
Саме слово "цикл" походить від грецького слова, яке в перекладі означає "коло", "обертання" і символізує, що у циклічних алгоритмах тіло циклу виконується ніби по колу. Це відбувається доти, доки не буде виконано заздалегідь визначену кількість повторів або доки не справдиться (чи не порушиться) умова, записана у циклічному операторі.
Цю умову можна записувати на початку або в кінці оператора повторення. Тому цикли поділили на цикли з передумовою (умову записують та перевіряють на початку циклу) та післяумовою (умову записують та перевіряють в кінці циклу).
Якщо нам буде відомо, скільки разів слід виконувати тіло циклу, то в цьому випадку слід використовувати цикл із заздалегідь відомою кількістю повторів.
Якщо ж ми не будемо знати, скільки разів треба виконати тіло циклу, то в цьому випадку слід скористатися циклом з умовою (передумовою або післяумовою).

Оператор циклу ПОКИ (While)

У цьому циклічному операторі умова виконання тіла циклу записана до послідовності дій, що мають багаторазово виконуватися. Тому цей оператор називають циклом з передумовою.
Перед кожним виконання тіла циклу обчислюється значення умови його виконання. Якщо результат є истинним, то тіло циклу виконується. Якщо ж результат приймає хибне значення, то переходять до виконання наступного за циклом оператора, не заходячи до тіла циклу. Тому цей циклічний оператор може не виконуватися жодного разу.
Запишемо конструкцію цього циклічного оператора мовою Паскаль:
<підготовка до виконання циклу>;
while <умова продовження> do
begin
<основна частина циклу>;
<підготовка до повторного виконання>
end ;
Описаний вид циклічного оператора можна зобразити за допомогою блок-схеми:

Оператор циклу ПОВТОРЮВАТИ (Repeat)
Цей оператор повторення отримав таку назву тому, що у ньому спочатку виконується тіло циклу, а лише потім перевіряється умова виходу з циклу. Якщо ця умова має хибне значення, то тіло циклу повторюється ще раз. Якщо ж умова істинна, здійснюється вихід з циклу та перехід до виконання наступного за циклом оператора. Тому цикл з післяумовою обовязково виконується хоча б один раз.
Структура циклу з післяумовою мовою Паскаль має такий вигляд:
<підготовка до виконання циклу>;
repeat
<основна частина циклу>;
<підготовка до наступного виконання циклу>
until <умова виходу з циклу>;


Задача  Tabulyazia1.  Алгоритмом,  написаному мовою  Pascаl, протабулювати  значення функції  f(х)=2x+1 на числовому проміжку (a; b) з кроком h.
Технічні умови.  З клавіатури ввести  ліву межу табуляції , як дійсне число а, праву межу  табуляції, як дійсне число b, крок табуляції, як дійсне число h. Вивести  у  усі дійсні значення функції f(х) 1 на числовому проміжку (a; b) з кроком h,  з вказівкою у порядку зростання дійсного значення аргументу  х.
Приклад. 
А)Введіть ліву межу табуляції a=3
Введіть праву межу табуляції b=8
Введіть крок табуляції h=1
Результати  табуляції:
x=3.000;  f(3.000)=  7.000;
x=4.000;  f(4.000)=  9.000;
x=5.000;  f(5.000)= 11.000;
x=6.000;  f(6.000)= 13.000;
x=7.000;  f(7.000)= 15.000;
x=8.000;  f(8.000)= 17.000;

Б)Введіть ліву межу табуляції a=-4.8
Введіть праву межу табуляції b=2.8
Введіть крок табуляції h=1.5
Результати  табуляції:
 x=-4.800;  f( -4.800)=  -8.600;
 x=-3.300;  f( -3.300)=  -5.600;
 x=-1.800;  f( -1.800)=  -2.600;
 x=-0.300;  f( -0.300)=   0.400;
 x=1.200;  f( 1.200)=   3.400;
 x=2.700;  f( 2.700)=   6.400;

Розв’язання.

program Tabulyazia1;
var x,a,b,h,f: real;
begin
write ('  Введіть ліву межу табуляції a='); read (a);
write (' Введіть праву межу табуляції b=');read (b);
writeln(' Введіть крок табуляції h=');readln (h);
writeln(' Результати  табуляції:');
x:=a;
while x<=b do
begin
f:=2*x+1;
writeln (' x= ',x:5:3,';  f( ',x:5:3,')= ',f :7:3,';');
x:=x+h;
 end;
end.


Задача 2A.  Value. Обчислити значення  функції  для заданого значення х:  
                  у=5х2 – 7, якщо х<=2;      
                  у = 1/ (2х – 4), якщо  2< х<5;      
                  у=(х – 5)0,5, якщо х>=5.
Результат вивести з 3-ма знаками після коми.

Технічні умови. Із клавіатури вводиться одне дійсне число х, а виводиться дійсне значення у (із трьома знаками після коми).

Приклад.  Введення: 0   Виведення:  -7.000
Розв'язання.
program  value;
var
f,x: real;
k, p,t: boolean;
begin
   read(x);
   t:=((x>2)and(x<5));
   p:=(x<=2);
   k:=(x>=5);
if p=true then  f:=5*x*x -7;
if t=true then  f:=1/(2*x -4);
if k=true then  f:=sqrt(x -5);
   writeln(f:10:3);
end.

Задача 2Б.  Value. .  Алгоритмом,  написаному мовою  Pascаl, протабулювати  значення  функції, що задана на різних числових проміжках різними формулами  на числовому проміжку (a; b) з кроком h.
                  у=5х2 – 7,   якщо х<=2;      
                  у = 1/ (2х – 4),   якщо  2< х<5;      
                  у=(х – 5)0,5,    якщо х>=5.
Результат вивести з 3-ма знаками після коми.
Технічні умови. З клавіатури ввести  ліву межу табуляції , як дійсне число а, праву межу  табуляції, як дійсне число b, крок табуляції, як дійсне число h. Вивести  у  усі дійсні значення функції f(х) 1 на числовому проміжку (a; b) з кроком h,  з вказівкою у порядку зростання дійсного значення аргументу  х.
Приклад.  A)Введіть ліву межу табуляції a=1
Введіть праву межу табуляції b=8
Введіть крок табуляції h=1
 x= 1.000;  f( 1.000)=  -2.000;
 x= 2.000;  f( 2.000)=  13.000;
 x= 3.000;  f( 3.000)=  38.000;
 x= 4.000;  f( 4.000)=  73.000;
 x= 5.000;  f( 5.000)= 118.000;
 x= 6.000;  f( 6.000)= 173.000;
 x= 7.000;  f( 7.000)= 238.000;
 x= 8.000;  f( 8.000)= 313.000;
Б)Введіть ліву межу табуляції a = -10
Введіть праву межу табуляції b = 10
Введіть крок табуляції h = 2
Результати  табуляції:
 x= -10.000;  f( -10.000)= 493.000;
 x= -8.000;  f( -8.000)= 313.000;
 x= -6.000;  f( -6.000)= 173.000;
 x= -4.000;  f( -4.000)=  73.000;
 x= -2.000;  f( -2.000)=  13.000;
 x= 0.000;  f( 0.000)=  -7.000;
 x= 2.000;  f( 2.000)=  13.000;
 x= 4.000;  f( 4.000)=  73.000;
 x= 6.000;  f( 6.000)= 173.000;
 x= 8.000;  f( 8.000)= 313.000;
 x= 10.000;  f( 10.000)= 493.000;
Розв'язання.
program  value;
var x,a,b,h,f: real;    k, p, t: boolean;
   begin   write ('  Введіть ліву межу табуляції a='); read (a);
write (‘ Введіть праву межу табуляції b=');read (b);
writeln(' Введіть крок табуляції h=');read(h);
writeln(' Результати  табуляції:');
  t:=((x>2)and(x<5));       p:=(x<=2);       k:=(x>=5);   x:=a;
while x<=b do  begin 
if p=true then  f:=5*x*x -7;
if t=true then  f:=1/(2*x -4);
if k=true then  f:=sqrt(x -5);
writeln (' x= ',x:5:3,';  f( ',x:5:3,')= ',f :7:3,';');
x:=x+h;   end;  end; end.


Задача 3. Протабулювати функцію дійсної змінної  функцію y=1/p e-x  в інтервалі значень [ab] з кроком Step.
Технічні умови. З клавіатури ввести  ліву межу табуляції , як дійсне число а, праву межу  табуляції, як дійсне число b, крок табуляції, як дійсне число h. Вивести  у  усі дійсні значення функції f(х) 1 на числовому проміжку (a; b) з кроком h,  з вказівкою у порядку зростання дійсного значення аргументу  х.
Приклад.  A)Введіть ліву межу табуляції a=-3
Введіть праву межу табуляції b=3
Введіть крок табуляції h=0.5
Результати  табуляції:
 x = -3   y = 6.39666780993238
 x = -2.5   y = 3.87977514672085
 x = -2   y = 2.35320257927728
 x = -1.5   y = 1.42728951284652
 x = -1   y = 0.865694849827721
 x = -0.5   y = 0.525070468375837
 x = 0   y = 0.318471337579618
 x = 0.5   y = 0.19316263048173
 x = 1   y = 0.117159057697912
 x = 1.5   y = 0.0710605605568248
 x = 2   y = 0.0431004086740805
 x = 2.5   y = 0.0261417193069741
 x = 3   y = 0.0158557542572815
Розв'язання.
Використаємо цикл з лічильником. Нехай  i - параметр циклу. Часто крок зміни аргументу, яка управляє циклом, змінюється від 1 або -1.
Програма табулює  функцію y=1/p e-x в інтервалі значень [ab] з кроком Step. Зверніть увагу на те, що перед входом у цикл обчислюється N - верхня межа параметра циклу, а в тілі циклу обчислюється наступне 

program Tabulation;
   const pi=3.141592;
   var      a,b,step, x, y : real;      i, n: integer;
 begin  
write ('  Введіть ліву межу табуляції a=');   read (a);
write (‘ Введіть праву межу табуляції b=');  read (b);
writeln(' Введіть крок табуляції h=');   read(h);
writeln(' Результати  табуляції:');
n:=round((b-a)/step)+1;
x:=a;
  for i:=1 to n  do
begin   
 y:=(1/pi)*exp(-x);
writeln(' x = ', x, '   y = ', y);
 x:=x+step;
end;
end.
Контрольні запитання.
1.    Наведіть синтаксис запису циклів з лічильником мовою Pascal?
2.    Наведіть синтаксис запису циклів з передумовою мовою Pascal?
3.    Наведіть синтаксис запису циклів з післяумовою мовою Pascal?
4.    Як записуються  розгалуження мовою Pascal?
5.    Як записуються  складені логічні  умови у форматі  if… then … else..;, що об'єднують декілька простих логічних умов?
6.    Наведіть синтаксис оператора одноальтернативного розгалуження.
7.    До яких типів даних не може належати значення виразу-селектора в операторі вибору?
8.    У чому полягає відмінність між циклами з передумовою та циклами з післяумовою?
9.    Якому типу даних може належати лічильник у циклі  for?
10.   Яке значення має лічильник після завершення циклу  for?
11.   Що може спричинити «зациклення» програми?
12.   За яких умов цикли while та for не виконаються жодного разу?
13.   Коли цикл виконується лише один раз?
14.   У чому полягає відмінність між такими операторами циклів, як  for...to...do  та for...downto...do?
15.   Яка структура працює ефективніше: вкладені оператори іf ...then...else чи серія операторів іf...then? Відповідь обґрунтуйте.
16.   Як можна пропустити деякі оператори програми, що належать тілу циклу, не видаляючи ці оператори?
17.   Як підвищити ефективність роботи вкладених структур if...then...else?


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

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