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

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

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

 
 Ответить  Открыть новую тему 
> Динамическая память Указатели
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


задание такое : написать программу которая размещает в динамической памяти данные - действительные числа - в виде списка. Список создаётся путём последовательного добавления новых элементов в конец списка. Программа должна вывести список на экран и кроме того поменять местами первый и последний элементы списка и вновь вывести полученный список на экран.
Эту тему я понял неважно так что прогрмму полностью написать не смог.
Написал все процедуры по созданию списка, выводу на экран, поиска первого и последнего элемента списка. А вот как заменть первый и последний элемент я понять не могу. Подскажите пожалуйста.

Program pointers;
TYPE ElementPointer=^Element;

Element=record
datum:integer;
next:ElementPointer;
end;
VAR
list,l,k:ElementPointer;
n,x,a,b:integer;

Procedure NewElement(var l:ElementPointer; i:integer);
var q,p:ElementPointer;
begin
new(q);
q^.datum:=i;
q^.next:=nil;
if l=nil
then l:=q
else
begin
P:=l;
while p^.next<> nil do
p:=p^.next;
p^.next:=q;
end;
end;

Procedure PrintList(l:ElementPointer);
begin
if l=nil
then begin
writeln('<<< END >>>')
end
else begin
Writeln(l^.datum);
PrintList(l^.next)
end
end;

Procedure Poisk_poslednego(l:ElementPointer);
begin
if l<>nil
then begin
x:=l^.datum;
Poisk_poslednego(l^.next)
end
end;

Procedure Poisk_pervogo(l:ElementPointer);
begin
if l<>nil
then begin
b:=l^.datum;
end;
end;


BEGIN
list:=nil;
Writeln('Input numbers (input 0 for exit)');
readln(n);
while n<>0 do
begin
NewElement(list,n);
readln(n);
end;
Poisk_poslednego(list);
Poisk_pervogo(list);
Writeln('b= ',b,' x= ',x);
PrintList(list);
Readln
END.



--------------------
Мечта женщины - быть женщиной мечты. Э. Севрус
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Если придерживаться того стиля, который ты используешь - то вот так:
procedure change;
var p: ElementPointer;
begin
list^.datum := x;
p := list;
while p^.next <> nil do p := p^.next;
p^.datum := b;
end;


Вызывать, соответственно, так:
...
Writeln('b= ',b,' x= ',x);
PrintList(list); { <--- До этого момента все так же, как и у тебя }
change;
PrintList(list);
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Огромное спасибо. Всё замечательно работает. Алгоритм я немного упростил но суть не поменялась. Ещё раз спасибо.

Procedure change(l:ElementPointer);
begin
l^.datum := x;
while l^.next <> nil do
l := l^.next;
l^.datum := b;
end;



--------------------
Мечта женщины - быть женщиной мечты. Э. Севрус
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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