Мітки та переходи, Детальна інформація
Мітки та переходи
pnxn+pn-1xn-1+ … +p1x+p0=(... (pnx+pn-1)x+ … +p1)x+p0,
то значення v полінома можна подати як значення останнього члена послідовності: v0=0, v1=v0\xF0D7 x+pn, v2=v1\xF0D7 x+pn-1, … , vn+1=vn\xF0D7 x+p0. Неважко переконатися, що вона задається рекурентним співвідношенням
vi=vi-1\xF0D7 x+pn+1-i, i=1, 2, … n+1,
причому перед його першим застосуванням треба знати лише перший коефіцієнт, перед другим – другий тощо. Тому цикл має складатися з читання чергового коефіцієнта й застосування співвідношення. У будь-який момент виконання програми треба знати лише один, останній прочитаний коефіцієнт, тому для збереження коефіцієнтів достатньо однієї змінної.
Отже, спочатку прочитаємо значення x, потім степінь полінома n, потім n+1 коефіцієнт, застосовуючи "по дорозі" рекурентне співвідношення:
V:=0;
writeln('задайте точку дійсної прямої :'); readln(x);
writeln('задайте цілий невід'ємний степінь полінома :'); readln(n);
for i:=1 to n+1 do
begin
writeln( 'задайте ', n+1-i, '-й коеф-т :'); readln(p);
V:=V*x+p
end;
{прочитано n+1 коефіцієнт; значення V – шукане}
Оформлення алгоритму у вигляді підпрограми залишаємо вправою. \xF0E7
2. Відомо особливе значення, поява якого в послідовності вхідних значень позначає її кінець і як вхідне не розглядається. Для опису читання зручно скористатися repeat-оператором, тому що треба прчитати не менше, ніж одне значення перед тим, як з'явиться ознака кінця.
Приклад 2. На контрольно-пропускному пункті митниці працює одна бригада інспекторів. Автомобілі прибувають, стають у чергу (якщо вона є) і проходять контроль у порядку прибуття. Для кожного автомобіля відома тривалість його контролю t: автомобіль покидає митницю через t одиниць часу після початку його контролю. Прибуття першого автомобіля задано відносно початкового моменту часу, а прибуття кожного наступного – відносно моменту прибуття попереднього. Отже, вхідними даними є пари цілих чисел x1, t1, x2, t2, … , причому xi\xF0B3 0, ti>0, крім останнього: t=0 позначає кінець послідовності вхідних даних. За вхідною послідовністю треба визначити послідовність моментів виїздів автомобілів із контрольно-пропускного пункту.
Перше наближення до розв'язання очевидно:
t0:=0; {особливе значення}
repeat
readln(x, t);
if t>t0 then обробити x, t і обчислити момент від'їзду y
until t=t0.
Припустимо, що в контролі автомобілів немає пауз: контроль наступного автомобіля, якщо він уже прибув, починається відразу після від'їзду попереднього. За x1 і t1 можна обчислити момент від'їзду y1: y1=x1+t1. Введемо поняття "момент початку контролю автомобіля" і позначимо його bi: bi=max{yi-1,xi}. Тоді yi=bi+ti. Звідси очевидним є уточнення фрази "обробити x, t і обчислити момент від'їзду y":
if y
else b:=y; {y – момент від'їзду попереднього автомобіля}
y:=b+t; {тепер y – момент від'їзду чергового автомобіля}
Для першого автомобіля момент від'їзду попереднього відсутній, тому для нього повинно бути b:=x. Щоб не розглядати окремо випадки, перший або не перший автомобіль, будемо вважати початковий момент часом від'їзду "нульового" автомобіля. Тоді алгоритм набуває вигляду:
t0:=0; y:=0;
repeat
то значення v полінома можна подати як значення останнього члена послідовності: v0=0, v1=v0\xF0D7 x+pn, v2=v1\xF0D7 x+pn-1, … , vn+1=vn\xF0D7 x+p0. Неважко переконатися, що вона задається рекурентним співвідношенням
vi=vi-1\xF0D7 x+pn+1-i, i=1, 2, … n+1,
причому перед його першим застосуванням треба знати лише перший коефіцієнт, перед другим – другий тощо. Тому цикл має складатися з читання чергового коефіцієнта й застосування співвідношення. У будь-який момент виконання програми треба знати лише один, останній прочитаний коефіцієнт, тому для збереження коефіцієнтів достатньо однієї змінної.
Отже, спочатку прочитаємо значення x, потім степінь полінома n, потім n+1 коефіцієнт, застосовуючи "по дорозі" рекурентне співвідношення:
V:=0;
writeln('задайте точку дійсної прямої :'); readln(x);
writeln('задайте цілий невід'ємний степінь полінома :'); readln(n);
for i:=1 to n+1 do
begin
writeln( 'задайте ', n+1-i, '-й коеф-т :'); readln(p);
V:=V*x+p
end;
{прочитано n+1 коефіцієнт; значення V – шукане}
Оформлення алгоритму у вигляді підпрограми залишаємо вправою. \xF0E7
2. Відомо особливе значення, поява якого в послідовності вхідних значень позначає її кінець і як вхідне не розглядається. Для опису читання зручно скористатися repeat-оператором, тому що треба прчитати не менше, ніж одне значення перед тим, як з'явиться ознака кінця.
Приклад 2. На контрольно-пропускному пункті митниці працює одна бригада інспекторів. Автомобілі прибувають, стають у чергу (якщо вона є) і проходять контроль у порядку прибуття. Для кожного автомобіля відома тривалість його контролю t: автомобіль покидає митницю через t одиниць часу після початку його контролю. Прибуття першого автомобіля задано відносно початкового моменту часу, а прибуття кожного наступного – відносно моменту прибуття попереднього. Отже, вхідними даними є пари цілих чисел x1, t1, x2, t2, … , причому xi\xF0B3 0, ti>0, крім останнього: t=0 позначає кінець послідовності вхідних даних. За вхідною послідовністю треба визначити послідовність моментів виїздів автомобілів із контрольно-пропускного пункту.
Перше наближення до розв'язання очевидно:
t0:=0; {особливе значення}
repeat
readln(x, t);
if t>t0 then обробити x, t і обчислити момент від'їзду y
until t=t0.
Припустимо, що в контролі автомобілів немає пауз: контроль наступного автомобіля, якщо він уже прибув, починається відразу після від'їзду попереднього. За x1 і t1 можна обчислити момент від'їзду y1: y1=x1+t1. Введемо поняття "момент початку контролю автомобіля" і позначимо його bi: bi=max{yi-1,xi}. Тоді yi=bi+ti. Звідси очевидним є уточнення фрази "обробити x, t і обчислити момент від'їзду y":
if y
else b:=y; {y – момент від'їзду попереднього автомобіля}
y:=b+t; {тепер y – момент від'їзду чергового автомобіля}
Для першого автомобіля момент від'їзду попереднього відсутній, тому для нього повинно бути b:=x. Щоб не розглядати окремо випадки, перший або не перший автомобіль, будемо вважати початковий момент часом від'їзду "нульового" автомобіля. Тоді алгоритм набуває вигляду:
t0:=0; y:=0;
repeat
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021