![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
alex-it |
![]()
Сообщение
#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 |
![]()
Сообщение
#2
|
Гость ![]() |
alex-it,
списки односвязные, или двухсвязные... И, если можно, покажи, как ты пытался делать, вместе с реализацией списков... |
alex-it |
![]()
Сообщение
#3
|
Гость ![]() |
вроде в условии не оговаривается, так что по идее можно делать как угодно... я пытался делать с односвязными
Код type pn=^mark; mark=record a:integer; 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 massive: '); readln(n); for i:=1 to n do begin mas[i]:=Random(5)+1; end; write('Ishodnaya posledovatelnost: '); for i:=1 to n do write(mas[i], ' '); writeln(''); end; {Здесь создается список} procedure add(var lp:pn; n:integer; mas:mas_i); var p:pn; i:integer; begin for i:=1 to n do if mas[i]<>0 then begin new(p); p^.a:=mas[i]; p^.next:=lp; lp:=p; end; end; {Функция возвращает последний элемент списка} function getlast(p:pn):pn; begin if (p<>nil) then begin while (p^.next<>nil) do p:=p^.next; getlast:=p; end else getlast:=nil; end; {Функция возвращает предпоследний элемент списка} function getprelast(p:pn):pn; var p1:pn; begin if (p<>nil) then begin p1:=p; repeat p:=p1; if (p^.next<>nil) then p1:=p^.next; until (p1^.next=nil); getprelast:=p; end else getprelast:=nil; end; {В этой процедуре происходит удаление последнего элемента списка} procedure getdell(var p:pn); var p1:pn; begin if (p<>nil) then if (p^.next=nil) then begin p1:=p; p:=p^.next; dispose(p1); end else begin p1:=getprelast(p); dispose(p1^.next); p1^.next:=nil; end; end; {Здесь происходит вычисление суммы(1). Собственно, здесь и проблема. При таком варианте программа просто вылетает.} procedure summ(lp:pn; sum:integer); var ls,p:pn; begin new(ls); ls:=lp; sum:=0; while (lp<>nil) do begin p:=getlast(ls); sum:=sum+(lp^.a)*(p^.a); lp:=lp^.next; getdell(ls); end; writeln('Summa ravna ', sum); end; |
Дож |
![]()
Сообщение
#4
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 179 Пол: Мужской Репутация: ![]() ![]() ![]() |
alex-it, зачем здесь эта строка?
Код ls:=lp; Наверно ты хотел сделать так: ls^:=lp^; -------------------- Доброго времени суток.
:nnn: |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
alex-it,
Ну, а вот так первое задание реализуется с двухсвязными списками: type Выбирай, изобретать велосипед дальше, или решать саму задачу... |
alex-it |
![]()
Сообщение
#6
|
Гость ![]() |
спасибо за помощь! действительно, так гораздо проще.
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 6:41 |