IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> нетипичная задача на списки, сложение и умножение чисел
alex-it
сообщение 4.12.2005 10:58
Сообщение #1


Гость






Условие: вводится последовательность натуральных чисел и создаётся из неё список. Длина последовательности n. Обеспечить с помощью списка вычисление сумм и произведений вида:

1) x1*xn + x2*xn-1 + ... + xn*x1

2)(x1+xn)*(x2+xn-1)* ... *(xn+x1)

собственно, идея у меня такая: создается еще один список(такой же, как первый), и в цикле перемножаются 1,2,3...(пока не дойдет до nil) X из первого списка на последний X из второго списка(каждый раз последний Х удаляется соответственно). все вспомогательные процедуры вроде работают, но вот сумму никак не могу посчитать! если кого-то заинтересует, подскажите, пожалуйста! заранее спасибо.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 4.12.2005 14:28
Сообщение #2


Гость






alex-it,
Ну, а вот так первое задание реализуется с двухсвязными списками:
type
pn=^mark;
mark=record
data: integer;
prev, next:pn;
end;

mas_i=array[1..100] of integer;


procedure input(var n:integer; var mas:mas_i);
var
i:integer;
begin
write('Input the size of array: '); readln(n);
write('initial sequence: ');
for i:=1 to n do begin
mas[i]:=Random(5)+1;
write(mas[i]:4);
end;
writeln;
end;

procedure print_list(first: pn);
begin
while first <> nil do begin
write(first^.data:4);
first := first^.next
end;
writeln;
end;

procedure make_list(var mas: mas_i;
var first, last: pn);
var
i: integer;
p: pn;
begin
first := nil; last := nil;

i := 1;
while mas[i] <> 0 do begin

new(p);
p^.data := mas[i];
p^.next := nil;
p^.prev := last;

if first = nil then first := p
else last^.next := p;

last := p;
inc(i);
end;
end;


function get_s(first, last: pn): integer;
var s: integer;
begin
s := 0;
while (first <> nil) and (last <> nil) do begin
s := s + first^.data * last^.data;

first := first^.next;
last := last^.prev;
end;
get_s := s;
end;

var
first, last: pn;
n: integer;
arr: mas_i;

begin
fillchar(arr, sizeof(arr), 0);
input(n, arr);
make_list(arr, first, last);

print_list(first);

writeln('sum = ', get_s(first, last));
end.

Выбирай, изобретать велосипед дальше, или решать саму задачу...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 6:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"