Переделать код С++ в Pascal - Free Pascal
Формулировка задачи:
Есть рабочий код на С++, помогите переделать на Паскаль. Сделал программу на Паскале, похожую на эту, но у нее всегда Y в конце принимает различные значения, и они не совсем с этими сходятся.
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
const int n = 6;
double x[n] = {0.1,0.5,0.8,1.3,1.8,2.6};
double y[n] = {0.904837,0.606531,0.449329,0.272532,0.165299,0.0742736};
double s,xx,u;
cout << " x\t y" << endl;
for (int i = 0; i < n; i++)
cout << x[i] <<"\t"<<y[i]<< endl;
for (int i = 0; i < 3; i++)
{
cout << "Input xx"<< i+1 << ": ";
cin >> xx;
s = 0;
for (int k = 0; k < n; k++)
{
u = 1;
for (int k2 = 0; k2 < n; k2++)
if (k != k2)
u = u*((xx-x[k2])/(x[k]-x[k2]));
s = s+u*y[k] ;
}
cout << "at x = " << xx << " y = " << s << " (real = " << exp(-xx) << ")" << endl;
}
getch();
return 0;
}Решение задачи: «Переделать код С++ в Pascal»
textual
Листинг программы
const
n = 6;
x: Array[0..n - 1] Of Single = (0.1, 0.5, 0.8, 1.3, 1.8, 2.6);
y: Array[0..n - 1] Of Single = (0.904837, 0.606531, 0.449329, 0.272532, 0.165299, 0.0742736);
var
i, j, k: Byte;
xx, s, u: Double;
begin
WriteLn(' x', #9, ' y');
for i := 0 to n - 1 do
WriteLn(x[i]:3:1, #9, y[i]:9:7);
for i := 0 to (n - 1) div 2 do
begin
Write('Input xx', i + 1, ':'); ReadLn(xx);
s := 0;
for j := 0 to n - 1 do
begin
u := 1;
for k := 0 to n - 1 do
if (j <> k)
then
u := u * (xx - x[k]) / (x[j] - x[k]);
s := s + u * y[j];
end;
WriteLn('at x = ', xx:0:4, ' y = ', s:0:4, ' (real = ', Exp(-xx):0:4, ')');
end;
end.
Объяснение кода листинга программы
- Объявлены две константы: n = 6 и x, y = массивы из 6 элементов каждый, с разными значениями.
- Введены переменные i, j, k типа Byte; xx, s, u типа Double.
- Выводится шаблон вывода: ' x y'.
- В цикле for выводятся значения x и y по одному на каждой строке.
- В цикле for (от 0 до n/2) пользователю предлагается ввести значение xx.
- В цикле for (от 0 до n-1) вычисляется значение u для каждого элемента y, используя формулу: u = (xx - x[k]) / (x[j] - x[k]).
- Значение u умножается на y[j] и добавляется к сумме s.
- Выводится значение xx и значение s.
- Значение xx и s вычисляются с использованием ScientificConstant, функция Exp(-xx) возвращает экспоненту от -xx.
- Значение xx и s выводятся в научной нотации с 4 знаками после запятой.