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

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

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

> Односвязный кольцевой список, Требуется проверка и помощь!
Akella
сообщение 10.05.2009 7:48
Сообщение #1


Пионер
**

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

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


Вот задачка! Первый пункт я сделал, все работает, но я не уверен что я применял правильные процедуры, т.к. сначало я делал для простого односвязного! А второй пункт не работает, где-то зацикливается! может я вообще не правильно составил алгоритм!
1))) создать в динамической памяти односвязный кольцевой список из 2n элементов (число n больше либо равно 1, задается пользователем) заполнение информационных полей элементов списка можно провестит генератором случайных чисел в диапозоне [0..100]. реализовать процедуры добавление элементов в любую точку списка, удаление любого члена из списка, вывод на экран полученной в куче числовой последовательности. 2))) из полученной динамической числовой пос-ти X1, X2, ...X2n вычислить: s={X1+Xn+1,X2+Xn+2,...Xn+X2n} запрещается использовать массивы. , т.е. нужно получить новую последовательность
которая в два раза меньше по длине!

program lab_12_dinamika_odnosvyaz_kolc;
uses crt;

type
point=^element;
element=record
Data:integer;
Next:point;
end;

var
P,H,PBegin : point;
i,n,Dlina : integer;
MemBegin : longint;
Simvol : char;

procedure Vivod(P:point);
var
First : pointer;
Dlina : integer;
begin
Dlina:=0;
First:=P;
writeln('Tekushaya posledivatelnost:');
while P^.Next <> First do begin
write(P^.data,' ');
P:=P^.Next;
inc(dlina);
end;
writeln;
writeln;
writeln('*Dlina posledovatelnisti=',dlina,'*');
writeln;
end;

procedure Vstavka(var P:point; Nomer,Chislo:integer);
var
i : integer;
N,Z : point;
begin
Z:=P;
if Nomer=1 then begin
New(N);
N^.Data:=Chislo;
N^.Next:=Z;
while Z^.Next <> P do Z:=Z^.Next;
Z^.Next:=N;
P:=N;
end
else begin

for i:=1 to Nomer-2 do begin
Z:=Z^.Next;
end;
writeln(Z^.Data);
New(N);
N^.Data:=Chislo;
N^.Next:=Z^.Next;
Z^.Next:=N;
end;
end;

procedure Udalenie( P:point; Nomer:integer);
var
i,Chislo : integer;
U,Z,First : point;
begin
Z:=P;
if Nomer=1 then begin
U:=Z;
First:=Z^.Next;
while Z^.Next <> PBegin do Z:=Z^.Next;
Z^.Next:=First;
Chislo:=U^.data;
Dispose(U);
PBegin:=First;
end
else begin
for i:=1 to Nomer-2 do begin
P:=P^.Next;
end;
U:=P^.Next;
P^.Next:=P^.Next^.Next;
Chislo:=U^.Data;
Dispose(U);
end;
end;

procedure NovPosl(var P:point); {неработающая процедура, зацикливается=(}
var
N,Z,T,Index : point;
X,Y:integer;
begin
Z:=P;
new(N);
PBegin:=N;
for i:=1 to (Dlina div 2) do begin {Dlina должна быть четная!!}
X:=Z^.data;
Index:=Z;
for i:=1 to (Dlina div 2) do Z:=Z^.Next;
Y:=Z^.Data;
N^.Data:=X+Y;
Z:=Index^.Next;
New(T);
N^.Next:=T;
T^.Next:=PBegin;
N:=T;
end;
P:=PBegin;
end;



begin {----------------------------}
clrscr;
randomize;

New(P);
PBegin:=P;
MemBegin:=MemAvail;

write('Vvedite kol-vo elementov: '); readln(N);

for i:=1 to 2*n do begin
P^.Data:=random(100);
New(H);
P^.Next:=H;
H^.Next:=PBegin;
P:=H;
end;
p:=PBegin;
Vivod(PBegin);
N:=0;
writeln;
writeln;

repeat begin
writeln('Najmit:');
writeln('D - udalit element');
writeln('A - dobavit element');
writeln('F - preobrazovanie');
writeln('E - vihod');
Simvol:=readkey;
case Simvol of
'd': begin
write('Vvedite poziciu elementa: ');
read(N);
P:=PBegin;
Udalenie(PBegin,N)
end;
'a': begin
write('Vvedite poziciu novogo elementa: ');
read(n);
Vstavka(PBegin,N,0)
end;
'f': begin
P:=PBegin;
NovPosl(P);
end;
end;
clrscr;
Vivod(PBegin);
end;
until Simvol='e';



end.




Заранее СПАСИБО! rolleyes.gif

Сообщение отредактировано: Akella - 10.05.2009 7:51
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
volvo
сообщение 10.05.2009 8:31
Сообщение #2


Гость






Процедура NovPosl:
  PBegin:=N;
for i:=1 to (Dlina div 2) do begin {Dlina должна быть четная!!}
X:=Z^.data;
Index:=Z;
for i:=1 to (Dlina div 2) do Z:=Z^.Next; { <--- В принципе, дальше можно не смотреть }
, потому что изменение управляющей переменной цикла For собственноручно - запрещено. Этим занимается сам цикл.

Загляни в поиск, кстати. Там было несколько программ на тему кольцевых (циклических) списков... Что-то связанное с Ring...
 К началу страницы 
+ Ответить 
Akella
сообщение 10.05.2009 14:11
Сообщение #3


Пионер
**

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

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


Цитата(volvo @ 10.05.2009 16:31) *

Процедура NovPosl:
  PBegin:=N;
for i:=1 to (Dlina div 2) do begin {Dlina должна быть четная!!}
X:=Z^.data;
Index:=Z;
for i:=1 to (Dlina div 2) do Z:=Z^.Next; { <--- В принципе, дальше можно не смотреть }
, потому что изменение управляющей переменной цикла For собственноручно - запрещено. Этим занимается сам цикл.

Загляни в поиск, кстати. Там было несколько программ на тему кольцевых (циклических) списков... Что-то связанное с Ring...

ээээ? а как тогда делать?? blink.gif в поиске ничего полезного не нашел! извините unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.05.2009 14:24
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Akella @ 10.05.2009 15:11) *
ээээ? а как тогда делать?? blink.gif
Хороший вопрос!
а попробовать использовать другую буковку не хочешь? Например, j.. Или у тебя на клаве все клавиши, кроме "i", не работают?.. blink.gif (Программу не смотрел, но такое решение вопроса просто само напрашивается)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Akella
сообщение 11.05.2009 5:29
Сообщение #5


Пионер
**

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

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


ой я просто ошибся=)) но все равно что-то не хочет работать=((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Akella
сообщение 12.05.2009 14:25
Сообщение #6


Пионер
**

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

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


ну помогите плиз! не знаю в чем причина! я тупой=)))
Цитата

Процедура NovPosl:
PBegin:=N;
for i:=1 to (Dlina div 2) do begin
X:=Z^.data;
Index:=Z;
for j:=1 to (Dlina div 2) do Z:=Z^.Next; {исправил на др переменную, но все равно не хочет не понимаю=(((}


Сообщение отредактировано: Akella - 12.05.2009 16:21
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Akella
сообщение 12.05.2009 16:56
Сообщение #7


Пионер
**

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

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


все спасибо! не надо нашел свою ошибку!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.05.2009 17:04
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Akella @ 12.05.2009 17:56) *
все спасибо! не надо нашел свою ошибку!
Бальзам на сердце..))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Akella
сообщение 13.05.2009 16:34
Сообщение #9


Пионер
**

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

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


Цитата(Lapp @ 13.05.2009 1:04) *

Бальзам на сердце..))

дяяя.... smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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