Дана задача на С++. Нужно перевести ее на Pascal. Пожалуйста помогите.
#include <stdio.h>
int main() {
float a[] = {2.0, 3.2, 1.2, -12.0, 1.5, 6.2};
float d[] = {-1.0, 2.2, 4.1, 10.1, 1/5, 2.1};
float x, y;
printf("Введите значение x:\t");
scanf("%f", &x);
y = d[0] + (x - a[0])*(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]))))));
printf("%f\n", y);
return 0;
}
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.
Программы дают разный ответ. Не подскажете как это исправить.
Оззя, в С-версии и в Паскаль версии массивы d получились разные, С использует для 4-го элемента целочисленное деление, то есть, описывать массивы в Паскале надо так:
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, Trunc(1/5), 2.1);
float a[] = {2.0, 3.2, 1.2, -12.0, 1.5, 6.2};(если это вообще не 1.5, что еще более вероятно)
float d[] = {-1.0, 2.2, 4.1, 10.1, 1.0/5.0, 2.1};
А какие разные? Дайте ваши значения.
Добавлено через 1 мин.
Да!!!
volvo, вариант
float a[] = {2.0, 3.2, 1.2, -12.0, 1.5, 6.2};
float d[] = {-1.0, 2.2, 4.1, 10.1, 1.0/5.0, 2.1};
Я бы еще порекомендовал использовать нормальную адресацию, начинающуюся с 0, - тогда индексы в Си и Паскале будут совпадать.
И использовать single вместо real (на что есть две причины: 1. Аналог float именно single. 2. Real вообще лучше не использовать НИКОГДА.).