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