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

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

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

 
 Ответить  Открыть новую тему 
> Динамическая память Указатели
Tonny_Bennet
сообщение 12.05.2007 15:50
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.05.2007 16:18
Сообщение #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);
...
 К началу страницы 
+ Ответить 
Tonny_Bennet
сообщение 12.05.2007 16:46
Сообщение #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

 



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