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

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

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

> нетипичная задача на списки, сложение и умножение чисел
сообщение
Сообщение #1


Гость






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

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

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

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

 





- Текстовая версия 8.09.2025 14:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name