Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Упростить программу

Автор: Domin9es 3.01.2008 19:14

Помогите упростить программу. Я сам не вижу как это можно сделать. Учитель не принимает

Даны действительные числа а0,..,а5, d0,..,d5. Получить многочлен шестой степени
d0+d1(x-a0)+d2(x-a0)(x-a1)+…+d5(x-a0)(x-a1)…(x-a5).


const
a : array [1..6] of real = (2.0, 3.2, 1.2, -12.0, 1.5, 6.2);
d : array [1..6] of real = (-1.0, 2.2, 4.1, 10.1, 1/5, 2.1);
var
x,y : real;
begin
WriteLn('Введите значение x:');
ReadLn(x);
y:=d[1] + (x - a[1])*(d[2] + (x - a[2])*(d[3] +
(x - a[3])*(d[4] + (x - a[4])*(d[5] +
(x - a[5])*(d[6] + (x - a[6]))))));

WriteLn(y);
end.



два раза создалась

Автор: volvo 3.01.2008 19:26

Цитата
Я сам не вижу как это можно сделать.
Запихать вычисление в цикл:
  y := 1;
for i := 6 downto 1 do
y := d[i] + (x - a[i])*y;

Автор: Domin9es 3.01.2008 19:38

Спасибо! А я думал через замену что-ли. I'm a stupid

А как это будет выглядеть на С++?



y := 1;
for i := 6 downto 1 do
y := d[i] + (x - a[i])*y;


Автор: мисс_граффити 3.01.2008 20:48

y=1;
for (int i=6;i>0;i--)
y=d[i]+(x-a[i])*y;

только скорее всего границы изменения i будут не 6..1, а 5..0 (я имею в виду, если переводить программу целиком, а не только этот фрагмент)

Автор: Domin9es 3.01.2008 21:26

Ответы не сходятся? unsure.gif

Автор: мисс_граффити 3.01.2008 21:32

какие ответы?
ты о чем?

Автор: Domin9es 3.01.2008 21:51

Эта же программа на с++ выдает другие ответы. Но они должны соввпадать. До сокращения все ответы совпадали.

Автор: volvo 3.01.2008 21:53

Приводи свои Сишные исходники до и после упрощения, посмотрим что ты наупрощал. Лучше - в раздел http://forum.pascal.net.ru/index.php?showforum=38

Добавлено через 1 мин.
P.S. Опять 1.0/5.0 забыл?

Автор: Domin9es 3.01.2008 22:10

http://forum.pascal.net.ru/index.php?showtopic=21035