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

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

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

> Удаление элемента с начала списка
dream-x
сообщение 10.06.2008 10:33
Сообщение #1


Пионер
**

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

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


Здравствуйте!
Составить процедуру, определяющуювхождение списка L1 в список L2 и наоборот. Если один из списков длиннее, удалить лишние элементы из его начала. Используя процедуру, проанализировать пары списков М1 и М2, N1 и N2.

 
Program Spisok;
Uses CRT;
Type
    TData=integer;
    PLink=^TElement;
    TElement=Record
                  Data:TData;
                  Link:PLink;
            End;

Procedure InPutList(n: integer; Var List:PLink);
Var
   ElNew:PLink;
   Value:TData;
   i:Integer;
Begin

    { List:=NIL;}
     For I:=1 To n Do
         Begin
              WriteLn('vvedite ',i,' element');
              Read(value);
              New(ElNew);
              ElNew^.Data:=Value;
              ElNew^.Link:=List;
              List:=ElNew;


        End;
End;
{----------------}
Procedure OutPutList(List:PLink);
Var
   i:integer;
Begin
     WriteLn('element spiska ');
     While List <> NIL Do
           Begin
                Write(List^.Data,' ');
                List:=List^.Link;
           End;
     WriteLn;
End;
{----------------}

Var
   List1,List2,Elem,NewElem:PLink;
   o,i,n,p,m:Integer;
   ff:boolean;


Begin
     ClrScr;
     WriteLn('vvedite kol-vo elementov spiska ');
     ReadLn(n);
     WriteLn('vvedite kol-vo elementov spiska ');
     ReadLn(m);

     InPutList(n,List1);
     InPutList(m,List2);
     Writeln;
     OutPutList(List1);
     Writeln;
     OutPutList(List2);
     i:= 0;

     While List1 <> nil do
           Begin
                If List1^.Data <> List2^.Data then
                 Begin
                  Writeln('ne vhodit 1 v 2');
                  ff:= True;
                  break
                 End;
                List1:= List1^.Link;
                List2:= List2^.Link;
           End;

     While List2 <> nil do
           Begin
                If List2^.Data <> List1^.Data then
                 Begin
                  Writeln('ne vhodit 2 v 1');
                  ff:= False;
                  break
                 End;
                List1:= List1^.Link;
                List2:= List2^.Link;
           End;

     If m > n Then o:= m-n else o:= n-m;


{ вот с этого момента я не могу понять 
   в чем моя ошибка}

     New(NewElem);
     If ff = True Then
             for i:= 1 to o do
                 Begin
                     List1:= NewElem;
                     NewElem:= NewElem^.Link;
                      Dispose(NewElem);
                 end;
                 writeln('@@');
     Outputlist(List1);
     keypressed;
End.


Сообщение отредактировано: dream-x - 10.06.2008 10:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 

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