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

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

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

 
 Ответить  Открыть новую тему 
> Чуть переделать действие
сообщение
Сообщение #1


Новичок
*

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

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


Вот я составил прогу, основываясь на материалах с этого форума по спискам.
Вот только в эти две процедуры мне надо переделать так, чтобы они добавляли элементы перед и после ЛЮБОГО элемента из списка соответственно, а не только в начало и в конец. Помогите, если не трудно
Procedure Dobnach(var L: TList; E:TElem); {Добавление элемента в начало списка}
var
N: TList;
Begin
new(N);
writeln('vvedite element');
readln(data);
if data='t' then E:=true;
if data='f' then E:=false;
N^.Info:=E;
N^.Next:=L;
L:=N
end;
procedure Dobend(L: TList; E: TElem);{Добавление элемента в конец списка}
begin
while L^.Next<>nil do L := L^.Next;
new(L^.Next );
L:=L^.Next;
writeln('vvedite element');
readln(data);
if data='t' then E:=true;
if data='f' then E:=false;
L^.Info:=E;
L^.Next:=nil
end;


Тегами пользуемся...

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Как будешь указывать, перед или после КАКОГО элемента надо добавить новый? Указатель на элемент, или значение?

Если указатель на элемент, то примерно вот так (было выдрано из ООП-реализации, так что здесь может глючить... Приведи свою программу полностью для того, чтобы ее можно было проверить...):

procedure insert_before(p: plist; x: telem);
var T: plist;
begin
new(T);
T^.info := p^.info; T^.next := p^.next;
p^.next := T;
p^.info := x
end;
procedure tlist.insert_after(p: plist; x: telem);
var T: plist;
begin
new(T);
T^.info := x; T^.next := p^.next;
p^.next := T
end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Вот программа. Кстати, сейчас еще думаю над удалением произвольного элемента. Поскольку элементы у меня типа boolean, то, я так считаю, поиск и удаление элемента производится путем указания его порядкового номера в списке
Код
program kurs83(input,output);
Type
TElem = boolean;
TList = ^TNode;
TNode = record
     Info: TElem;
     Next: TList
     end;
var
w:boolean;
data:char;
z:integer;
L:TList;
E:TElem;
Procedure ADD(var L: TList);
var
N: TList;
Begin
new(N);
writeln('vvedite element');
readln(data);
if data='t' then N^.Info:=true;
if data='f' then N^.Info:=false;
N^.Next:=nil;
L:=N
End;
Procedure Dobnach(var L: TList; E:TElem);
var
N: TList;
Begin
new(N);
writeln('vvedite element');
readln(data);
if data='t' then E:=true;
if data='f' then E:=false;
N^.Info:=E;
N^.Next:=L;
L:=N
end;
procedure Dobend(L: TList; E: TElem);
begin
while L^.Next<>nil do L := L^.Next;
new(L^.Next );
L:=L^.Next;
writeln('vvedite element');
readln(data);
if data='t' then E:=true;
if data='f' then E:=false;
L^.Info:=E;
L^.Next:=nil
end;
Procedure Del (Var L: Tlist);
Var r: Tlist;
Begin
writeln('kakoy element udalit?');
r:=L^.Next;
L^.Next:=L^.Next^.next;
r^.Next:=nil
End;
procedure Active(var L: TList);
var
H: TList;
P: TList;
begin
P := nil;
while L<>nil do
begin
  H := L^.Next;
  L^.Next := P;
  P := L;
  L:=H
end;
L :=P
end;
procedure Print(L: TList );
begin
write('< ');
while L <> nil DO
begin
  write( L^.Info );
  If L^.Next <> nil then write(',');
  L := L^.Next
end;
writeln(' >')
end;
begin
   w:=false;
   while w<>true do
   begin
      writeln('1-Noviy spisok');
      writeln('2-Dob elem v konec');
      writeln('3-Dob elem v nachalo');
      writeln('4-Deystvie');
      writeln('5-Print');
      writeln('6-del');
      writeln('7-Vihod');
      writeln('vvedite punkt menu:');
      readln(z);
      if z=1 then ADD(L);
      if z=2 then dobend(L,E);
      if z=3 then dobnach(L,E);
      if z=4 then Active(L);
      if z=5 then Print(L);
      if z=5 then del(L);
      if z=7 then w:=true;
   end;
end.

Так пойдет?

Сообщение отредактировано: Clon -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Я еще раз повторяю про ТЕГИ !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Ну, вот так тебя устроит? У тебя было много лишних действий, и даже лишняя процедура.
program kurs83(input,output);

Type
TElem = boolean;
TList = ^TNode;
TNode = record
Info: TElem;
Next: TList
end;

var
X: integer;
z:integer;
L:TList;
E:TElem;

function get_boolean: boolean;
var ch: char;
begin
write('enter [f, t]: '); readln(ch);
get_boolean := upcase(ch) = 'T';
end;

Procedure Insert(var L: TList; E: TElem);
var N: TList;
Begin
new(N);
N^.Info := E;
N^.Next:=L;
L:=N
End;

procedure Append(L: TList; E: TElem);
begin
while L^.Next <> nil do L := L^.Next;
new(L^.Next);
L:=L^.Next;
L^.Info := E;
L^.Next := nil
end;

procedure InsertAfter(L: TList; X: Integer; E: TElem);
Var N: TList;
begin
while (L^.next <> nil) and (X > 1) do begin
L := L^.next; Dec(X)
end;

if X = 1 then begin
New(N);
N^.info := E;
N^.next := L^.next;
L^.next := N;
end;

end;

Procedure Del (Var L: Tlist);
Var r: Tlist;
Begin
writeln('kakoy element udalit?');
r:=L^.Next;
L^.Next:=L^.Next^.next;
r^.Next:=nil
End;

procedure Active(var L: TList);
var
H: TList;
P: TList;
begin
P := nil;
while L<>nil do begin
H := L^.Next;
L^.Next := P;
P := L;
L:=H
end;
L :=P
end;

procedure Print(L: TList );
begin
write('< ');
while L <> nil DO begin
write( L^.Info );
If L^.Next <> nil then write(',');
L := L^.Next
end;
writeln(' >')
end;


begin
L := nil;
repeat
writeln('1-Noviy spisok');
writeln('2-Dob elem v konec');
writeln('3-Dob elem v nachalo');
writeln('4-Deystvie');
writeln('5-Print');
writeln('6-del');
writeln('7-insert before');
writeln('8-Vihod');
writeln('vvedite punkt menu:');
readln(z);
case z of
1, 3: Insert(L, get_boolean);
2 : Append(L, get_boolean);
4 : Active(L);
5 : Print(L);
6 : del(L);
7 :
begin
write('insert before element #'); readln(X);
if x = 1 then Insert(L, get_boolean)
else InsertAfter(L, X - 1, get_boolean);
end;
end;
until z = 8;
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


Спасибо большое за помощь! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Пытался вчера сделать удаление для любого элемента из списка, но что-то фигня какая-то выходит. Почему-то постоянно стирает как и нужный элемент и все те, что после него.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата(Clon @ 17.05.2006 19:54)
Пытался вчера сделать удаление для любого элемента из списка, но что-то фигня какая-то выходит.
blink.gif У меня вот что вышло:
Procedure DelAfter(Var L: Tlist; X: integer);
Var
T, r: Tlist;
Begin

if X = 0 then begin
T := L;
L := L^.next;
dispose(T);
end
else begin

r := L;
while (r^.next <> nil) and (X > 1) do begin
r := r^.next; Dec(X)
end;
if X = 1 then begin

T := r^.next;
if T <> nil then r^.next := T^.next
else r^.next := T

end;

end;

End;

...
{ Вызов: }
case z of
...
6 :
begin
write('delete element #'); readln(X);
DelAfter(L, X - 1);
end;
...
end;
Вроде, работает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


Спасибо, я кажется понял, где ошибся. Вот еще такой вопрос: что значит "навигация по списку с помощью итераторов?"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Итераторов? Ты с языком программирования не ошибся? Итераторы это в С++ smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


Дык мне тоже очень это интересно. В задании так и говорится - "Навигацию по списку следует реализовать с применением итераторов". Ну хорошо, а в C++ это что обозначает?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Wiki: Итератор
 К началу страницы 
+ Ответить 

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

 




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