Лабораторная_работа_10_П.ppt
- Количество слайдов: 14
Лабораторная работа № 10 по дисциплине “Программирование” Тема. Динамические переменные 1
Двунаправленные линейные списки Задание. Разработать программу, которая вводит из текстового файла последовательность вещественных чисел; размещает эти числа в виде двунаправленного линейного списка; удаляет из списка элементы, значение которых превышает среднее арифметическое значение элементов списка. 2
Uses Crt; {Раздел описания типов} Type Tspisok = ^Spisok; {Тип “Указатель на элемент”} Spisok = Record Info : real; Next : Tspisok; {Указатель на следующий элемент списка} Prev : Tspisok; {Указатель на предыдущий элемент списка} End; 3
Раздел описания переменных Var {Указатель на певый элемент списка} Head : Tspisok; {Указатель на последний элемент списка} Tail : Tspisok; {Указатель на текущий элемент списка} P : Tspisok; {Описание файловой переменной} F : Text; {Сумма значений элементов списка} Sum : Real; {Среднее арифметическое значение элементов списка} Sar : Real; {Число элементов в списке} N : byte; 4
Создание списка Begin Clrscr; {Открытие файла данных} Assign(F, ‘Data. txt’); Reset (F); {Определение начальных значений переменных} Head: =Nil; Tail : =Nil; N: =0; {Количество элементов в списке} 5
Создание списка While Not EOF(F) Do Begin New (P) ; Readln ( F, P^. info) ; If Head = Nil Then Head : = P Else Tail^. Next: = P; P^. prev : = Tail; {Определение указателя на последний элемент спискаа} Tail : = P; End; Tail^. Next : = Nil; 6
Вывод элементов списка Writeln(‘Исходный список’); {Установить указатель на первый элемент списка} P: = Head; While P<> Nil do Begin Write(P^. Info : 6: 1); P: = P^. Next ; End; Writeln; 7
Определение среднего арифметического значения P: = Head; While P<> Nil do Begin Sum : =Sum +P^. info; P: = P^. Next; N: =N+1; End; Sar: = Sum/N; Writeln( ‘Среднее арифметическое равно’, Sar: 6: 1); 8
Удаление элементов из вершины списка While ( Head^. Info>Sar) and (Head<> Nil) Do Begin P: = Head; Head: =Head^. Next; Dispose(P); End; Head^. Prev : = Nil; 9
Удаление Then элементов из списка If Head<>Nil Begin P: = Head^. Next; While P<>Nil Do If P^. Info >Sar Then Begin {Значение указателя на предыдущий элемент} Prev : = P^. Prev; 10
Удаление элементов из списка { Изменение значений указателей} P^. Prev^. Next : =P^. Next; P^. Next^. Prev : =P^. Prev; Dispose(P); P: = Prev^. Next; End Else {Переход к следующему элементу списка} P : = P^. Next; 11
Вывод элементов списка после удаления Writeln(‘Преобразованный список’); {Установить указатель на первый элемент списка} P: = Head; While P<> Nil do Begin Write(P^. info : 6: 1); P: = P^. Next; End; 14
Лабораторная_работа_10_П.ppt