Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример выполнения заданий на Pascale.doc
Скачиваний:
17
Добавлен:
15.02.2015
Размер:
421.89 Кб
Скачать

Тема 14. Списки

Задача 3 б

Задание:Даны натуральное число n, действительные числа x1, ..., x[n]. Вычислить:

б) (x1+x[n])(x2+x[n-1])...(x[n]+x1);

Для решения этой задачи полезен список, изображенный на рис.27.

Алгоритм:

Вводим новый тип данных – запись из трех полей : поля, где содержится число, указатель на предыдущий элемент, указатель на следующий элемент.

  1. Вводим натуральное n – число элементов массива

  2. В цикле создаем список, изображенный на рис 27

  3. С помощью двух указателей передвигаемся по списку одновременно с его начала и с его конца, полученные значения подставляем в формулу б)

  4. Выводим результат на экран

  5. Уничтожаем полученный список

Реализация:

program t14_num3b;

type

Pel=^Tel;

Tel=record

x:real;

p1,p2:Pel; {указатели на предыдущий и следующий элементы соответственно}

end;

var

n:integer;

x:real;

beg_,end_:Pel;

{процедура добавления в список нового элемента}

procedure new_el(x:real);

var new_:Pel;

begin

new(new_);

new_^.x:=x;

new_^.p1:=end_;

new_^.p2:=nil;

end_^.p2:=new_;

end_:=new_;

end;

{процедура построения списка}

procedure build(n:integer);

var i:integer;

begin

new(beg_);

Write('x[1]=');

Readln(x);

beg_^.x:=x;

beg_^.p1:=nil;

beg_^.p2:=nil;

end_:=beg_;

for i:=2 to n do

begin

Write('x[',i,']=');

Readln(x);

new_el(x);

end;

end;

{функция расчета (x[1]+x[n])*(x[2]+x[n-1])*...*(x[n]+x[1])}

function raschet(n:integer):real;

var

i:integer;

s:real;

n1,n2:Pel;

begin

n1:=beg_;

n2:=end_;

s:=1;

for i:=1 to n do

begin

s:=s*(n1^.x+n2^.x);

n1:=n1^.p2; {}

n2:=n2^.p1;

end;

raschet:=s;

end;

{процедура удаления списка}

procedure Delete_sp(n:integer);

var

new_:Pel;

i:integer;

begin

While beg_<>end_ do

begin

new_:=beg_;

beg_:=new_^.p2;

dispose(new_);

new_:=nil;

end;

dispose(beg_);

beg_:=nil;

end_:=nil;

end;

{основная программа}

begin

Writeln('Введите натуральное n');

Readln(n);

Build(n);

Writeln('Ответ :',raschet(n):8:4);

Delete_sp(n);

Readln;

end.

Блок-схема:

Основная программа: Функция вычисления :

Протокол:

  1. В процессе диалога вводим n=2

  2. x[1]=1,x[2]=2, получаем список:

  1. Печать «Ответ:»

  2. Передаем управление функции raschet, при этом формальному параметру n передается значение 2

4.1 s:=1, n1:=beg_, n2:=end_

4.2 I=1

4.3 s=1*(1+2)=3

4.4 I=2

4.5 s=3*(2+1)=9

4.6 raschet:=s=9

  1. Печать «9.0000»

  2. Удаление списка