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

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

Форум «Всё о Паскале» _ Задачи _ Перевод с С++ на Pascal

Автор: Domin9es 25.12.2007 17:45

Дана задача на С++. Нужно перевести ее на 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;
}

Автор: Ozzя 25.12.2007 18:03

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.

Автор: Domin9es 25.12.2007 19:05

Программы дают разный ответ. wacko.gif Не подскажете как это исправить.

Автор: volvo 25.12.2007 19:18

Оззя, в С-версии и в Паскаль версии массивы 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};
float d[] = {-1.0, 2.2, 4.1, 10.1, 1.0/5.0, 2.1};

(если это вообще не 1.5, что еще более вероятно)

Автор: Ozzя 25.12.2007 19:19

А какие разные? Дайте ваши значения.

Добавлено через 1 мин.

Цитата
если это вообще не 1.5, что еще более вероятно)

Именно.
/ там же где и точка.
Автор? Опечатка?

Автор: Domin9es 25.12.2007 19:31

Да!!! yes2.gif
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};



Спасибо вам!

Ozzя, вам тоже спасибо!!! smile.gif smile.gif

Автор: andriano 25.12.2007 20:54

Я бы еще порекомендовал использовать нормальную адресацию, начинающуюся с 0, - тогда индексы в Си и Паскале будут совпадать.
И использовать single вместо real (на что есть две причины: 1. Аналог float именно single. 2. Real вообще лучше не использовать НИКОГДА.).