Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все вопросы..docx
Скачиваний:
13
Добавлен:
25.09.2019
Размер:
158.31 Кб
Скачать

16.Ссылочные типы данных, формирование списка студентов из файла.

Program  список;

Type    ссылка=^элсписка;

              элсписка=record

                                   фам:string;

                                   адрес:ссылка;

                               end;

var      F:file of string;

начало, конец, очередэл, новэл, вспомэл: ссылка;

искфам, новфам:  string;

begin   

            assign(F,’досье’);

            reset(F);

            начало:= NIL;

            конец:=NIL;                                                                                                       

while    not eof(F) do

            begin

            if  начало=NIL then {создание 1-ого элемента}

                       begin

                       New(очередэл);

                       read(F,очередэл^.фам);

                       очередэл^.адрес:=конец;

                       начало:=очередэл;

                       end;

                

                             else {очередной элемент}

                                  begin

                                        New(вспомэл);

                                        read(F, вспомэл^.фам);

                                        очередэл^.адрес:=вспомэл;

                                        вспомэл^.адрес:=конец;

                                        очередэл:=вспомэл;

                                        end;

end; {от while}

end.

17.Поиск элемента в списке.

Считываем адрес и проверяем, не NIL ли он.

{закончили создание списка, переходим к поиску фамилии в списке}

read(искфам);  {эту фамилию будем искать}

очередэл:=начало;

while  (искфам< >очередэл^.фам) and 

(очередэл< >NIL) do 

{спускаемся вниз по списку}

очередэл:=очередэл^.адрес; 

{когда мы вышли из цикла у нас 2варианта}              

if очередэл^.фам=искфам    then

     writeln(‘есть’)

                           else

                           writeln(‘нет’);

end.

18.Исключение и добавление

Исключение:

{закончили создание списка, переходим к поиску фамилии в списке и ее исключению из рассмотрения}

read(искфам);  

очередэл:=начало;

while  (искфам<>очередэл^.фам) and (очередэл<>NIL) do

очередэл:=очередэл^.адрес; 

if очередэл^.фам=искфам    then

                           очередэл:=очеред^.адрес;

{«перепрыгиваем» через найденный элемент}

end.

Добавление:

{закончили создание списка}

read(новфам); 

очередэл:=начало;

while  очередэл< >конец  do

очередэл:=очередэл^.адрес; 

{спустились по списку до конца}

New(вспомэл);

очередэл^.адрес:=вспомэл;

{создали новый элемент и обеспечили на него ссылку предыдущего}

вспомэл^.фам:=новфам;

{записали введенную фамилию}

вспомэл^.адрес:=конец;

очередэл:=вспомэл;

end.

19.Включение в список.

Включение элемента в нужное место (на пример после искомой фамилии)

·Найдём место, то есть адрес элемента с искомой фамилией.

· Создание нового элемента.

·Организуем ссылку нового элемента на следующий за очередным

(оба элемента теперь ссылаются на один и тот же).

· Организуем ссылку очередного на новый.

{закончили создание списка}

readln(новфам);

readln(искфам); 

очередэл:=начало;

while (очередэл< >конец) and 

(очередэл^.фам<>искфам) do

очередэл:=очередэл^.адрес; 

if очередэл^.фам=искфам    then

        begin

               New(новэл);

{пока он без всяких связей}

               новэл^.адрес:=очеред^.адрес;  

{оба ссылаются на один и тот же элемент}

               очеред^.адрес:=новэл;

               новэл^.фам:=новфам;

               очередэл:=новэл;

         end;

else    writeln(‘нет такой’)

end.