Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

пустой кольцевой список

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 24.11.2024

Билет 17. Кольцевые списки.

Кольцевые списки, т.е. списки, у которых первый и последний элементы связаны непосредственной связью. Такие списки позволяют осуществлять просмотр (доступ к любому элементу) не только от головы списка, но и от любого элемента списка. При создании кольцевого списка обычно сначала создается "пустой кольцевой список", у которого имеется один элемент, указывающий сам на себя (замкнутый в кольцо). Остальные элементы включаются в этот список друг за другом. Проиллюстрируем работу с кольцевым двунаправленным списком на примере программы, вычисляющей кратчайший путь между станциями кольцевой линии метро.

       program RING_METRO; {Кольцевая линия Московского метро}

       type link=^nest;nest=record forw,back:link;inf:string end;

       var r,r1,start:link;f:text;c,c1,c2:string;dir:Boolean;L:byte;

       procedure insert(el1,el2:link);{вставка el2 после el1}

           begin el2^.forw:=el1^.forw;el2^.back:=el1;el1^.forw^.back:=el2;el1^.forw:=el2;

           end{insert};

       procedure dir_path(var d:Boolean;s1,s2:string);{направление}

       var g:link;j1,j2:byte;er1,er2:Boolean;

           begin j1:=0;j2:=0;g:=start;er1:=false;er2:=false;

            repeat g:=g^.forw;  if g^.inf=s1   then

              repeat g:=g^.forw;j1:=j1+1;er1:=(g^.inf=s1);d:=(2*j1<L);

              until (g^.inf=s2) or (g^.inf=s1)  else  if g^.inf=s2   then

              repeat g:=g^.forw;j2:=j2+1;er2:=(g^.inf=s2);d:=(2*j2>L);

              until (g^.inf=s1) or (g^.inf=s2);

            until (g=start) or (g^.inf=s1) or (g^.inf=s2);if er1 or er2 then

   begin write('Ошибка в названии ');

           if er1  then write('конечной') else write('начальной');writeln(' станции');halt

   end; if j1+j2=0 then begin writeln('Ошибка в названиях станций');halt end

           end {dir_path};

       procedure write_path(d:Boolean;s1,s2:string);{кратчайший путь}

       var p:link;

           begin p:=start; while not(p^.inf=s1) do p:=p^.forw;

             repeat writeln(p^.inf);if d then  p:=p^.forw else p:=p^.back;

             until (p^.inf=s2) ; writeln(p^.inf);

           end {write_path};

       BEGIN writeln('КОЛЬЦЕВАЯ  ЛИНИЯ  МОСКОВСКОГО МЕТРО');

             new(start);r:=start;r^.forw:=r;r^.back:=r;assign(f,'names_st');{$I-}reset(f);{$I+};

            if IOResult<>0 then begin writeln('Не найден файл names_st');halt end;

             L:=1;readln(f,r^.inf);while not eof(f) do{создание кольца }

             begin readln(f,c);new(r1);insert(r,r1);r1^.inf:=c;r:=r1;L:=L+1 end;

             writeln('Задайте начальную и конечную станции:');    readln(c1);readln(c2);            dir_path(dir,c1,c2); writeln('Кратчайший путь:');write_path(dir,c1,c2);

       END{ring_metro}.

Найти максимальный среди отрицательных и минимальный среди положительных элементов прямоугольной матрицы. если они отличаются по модолю меньше чем на заданную величину, заменить все отриц элементы их модулями.

program z_433_17;

program Z433_17;

uses Z433_17;

Var a:matr;

max,min,eps:real;

i,j:integer;

Begin

for i:=1 to n do

for j:=1 to t do

readln(a[i,j]);

readln(eps);

max(a,max);

min(a,min);

if abs(max-min)<eps then Begin

for i:=1 to n do

for j:=1 to t do

if a[i,j]<0

then a[i,j]:=abs(a[i,j]); end;

for i:=1 to n do

for j:=1 to t do

writeln(a[i,j]);

end.

unit Z433_17;

interface

Const n=5;

Const m=6;

Type matr=array[1..n,1..m]of real;

procedure max(a:matr;Var max:real);

procedure min(a:matr;Var min:real);

implementation

procedure max(a:matr;Var max:real);

Var i,j:integer;

Begin

for i:=1 to n do

for j:=1 to m do

if a[i,j]<0 then max:=abs(a[i,j]);

for i:=1 to n do

for j:=1 to m do

if a[i,j]<0 and abs(a[i,j])<max

then max:=abs(a[i,j]);

end;

procedure min(a:matr;Var min:real);

Var i,j:integer;

Begin

for i:=1 to n do

for j:=1 to m do

if a[i,j]>0 then min:=a[i,j];

for i:=1 to n do

for j:=1 to t do

if a[i,j]>0 and abs(a[i,j])<min

then min:=abs(a[i,j]);

end;

end.




1. Вплив дебіторської заборгованості на фінансовий стан підприємства
2. 0910 Общ
3. 001 ПЗ Изм Лист докум
4. Основные характеристики объектовых извещателей охранной сигнализации
5. Организация расчетов с бюджетом и внебюджетными фондами Задача 1
6. Бухгалтерский учет и анализ экономической деятельности предприятия.html
7. Дипломная работа- Анализ ассортимента и потребительских свойств весоизмерительного оборудования
8. Введение. Актуальность темы
9. Слово о полку Игореве
10. k~l где k ~ жёсткость пружины
11. власть в обыденной жизни и в научной литературе употребляется в разных смыслах
12. Фазы экономического цикла Цикличность экономического развития.html
13. Расчет специального высоковольтного усилителя
14. і 3 Спинка 2 Нитка основи проходить паралель
15. Общие сведения Грамматические категории имени существительного.
16. Введение Все большее распространение в современном транспорте получают газотурбинные двигатели.html
17. Теория государства и права Понятие и виды правонарушения
18. Свердловский областной медицинский колледж РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ПРАКТИКИ
19. е годы 20 века сформировался конструктивизм ~ одно из главных направлений авангарда
20. Дипломная работа- Отражение выручки