Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Исключение элементов списка



Цель задания:

1. Ознакомиться с возможностью выполнения операции исключения элементов из списка.

2. Закрепление навыков использования переменных ссылочных типов данных.

Постановка задачи:

Составить список учебной группы, содержащей 20 учащихся.

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

Обработать список согласно конкретному варианту.

Содержание отчета:

1. Постановка задачи.

2. Текст программы и результаты ее выполнения.

Вариант задания:

Одна оценка 4, а остальные 3.

Текст программы:

{Исключение элементов из списка}

Program ExludingelementsFromList;

Uses CRT;

Type

PStudents= ^TStudents;

TStudents= Record

Name: String[20];

Marks: Array [1..4] of ShortInt;

Next:PStudents;

End;

Var

PS:PStudents; {указатель на последний элемент списка в статической памяти}

{ Процедура заполнения списка }

Procedure Init;

Var

i,y:Integer;

pro:PStudents;

Label

Exits;

Begin

PS^.Next:=nil; {последний элемент списка}

y:=1;

While true Do Begin

New(pro); {выделяем память под переменную с указателем pro}

{Присваиваем значение переменной}

WriteLn('Введите Ф.И.О. ',y,'-го студента, "Enter" - завершение программы');

ReadLn(pro^.Name);

If pro^.Name='' Then GoTo Exits;

WriteLn('Введите оценки студента (всего 4)');

For i:=1 To 4 Do ReadLn(pro^.Marks[i]);

pro^.Next:=PS; {записываем в поле Next указатель на предыдущий элемент}

PS:=pro; {указателю на голову списка присваиваем новое значение

т.е значение текущего элемента}

Inc(y);

End;

Exits: End;

{Процедура удаления элементов из списка }

Procedure Removing;

Var

Head,p1,p2:PStudents;

i,e3,e4:ShortInt;

Label

Exits;

Begin

head:=PS; {первый элемент-голова списка}

p2:=PS; {текущий указатель}

p1:=PS; {указатель на предыдущий элемент}

While True Do Begin

e4:=0; e3:=0;

For i:=1 to 4 Do Begin {подсчет оценок}

If p2^.Marks[i]=4 Then inc(e4);

If p2^.Marks[i]=3 Then inc(e3);

End;

If (e4=1) And (e3=3) Then {проверка условия на удаление}

If (Head=P2) Then Begin {если удаляемый элемент - голова списка}

PS:=PS^.Next; {новая голова}

Dispose(p2); p2:=PS; p1:=PS; Head:=PS;

End

Else Begin {если элемент в середине списка}

p1^.Next:=p2^.Next; {полю Next предыдущего элемента

присваиваем указатель следующего за текущим}

Dispose(p2); p2:=p1^.Next; {уничтожаем ссылку на текущий элемент}

End

Else Begin

p2:=p2^.Next;{если ничего не удалялось

передвигаем указатель на следующий элемент}

p1:=p1^.Next; {передвигаем указатель предыдущего элемента}

End;

If (p2=nil) Then GoTo Exits;

End;

Exits:End;

{Процедура вывода на печать списка }

Procedure PrintOut;

var

p1:PStudents;

Label

Exits;

Begin

p1:=PS;

While True Do Begin

WriteLn(p1^.Name);

If p1^.Next=nil Then GoTo Exits;

p1:=p1^.Next;

End;

Exits:End;

{Тело программы }

Begin

Init;

Removing;

PrintOut;

WriteLn('Нажмите любую клавишу...');

Repeat Until KeyPressed;

End.

Результат работы программы:

Введите Ф.И.О. 1-го студента, "Enter" - завершение программы Иванов И.И. Введите оценки студента (всего 4) Введите Ф.И.О. 2-го студента, "Enter" - завершение программы Петров П.П. Введите оценки студента (всего 4) Введите Ф.И.О. 3-го студента, "Enter" - завершение программы Сидоров С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 4-го студента, "Enter" - завершение программы Иваненко И.И. Введите оценки студента (всего 4) Введите Ф.И.О. 5-го студента, "Enter" - завершение программы Петренко Введите оценки студента (всего 4) Введите Ф.И.О. 6-го студента, "Enter" - завершение программы Сидоренко С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 7-го студента, "Enter" - завершение программы Иванчук И.И. Введите оценки студента (всего 4) Введите Ф.И.О. 8-го студента, "Enter" - завершение программы Петрук П.П. Введите оценки студента (всего 4) Введите Ф.И.О. 9-го студента, "Enter" - завершение программы Сидорчук С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 10-го студента, "Enter" - завершение программы Самосадкин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 11-го студента, "Enter" - завершение программы Самоделкин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 12-го студента, "Enter" - завершение программы Самопалкин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 13-го студента, "Enter" - завершение программы Самохвалкин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 14-го студента, "Enter" - завершение программы Самострелкин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 15-го студента, "Enter" - завершение программы Самоедкин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 16-го студента, "Enter" - завершение программы Самогонкин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 17-го студента, "Enter" - завершение программы Самокаткин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 18-го студента, "Enter" - завершение программы Самолеткин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 19-го студента, "Enter" - завершение программы Самоходкин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 20-го студента, "Enter" - завершение программы Самоучкин С.С. Введите оценки студента (всего 4) Введите Ф.И.О. 21-го студента, "Enter" - завершение программы   Самоходкин С.С. Самолеткин С.С. Самокаткин С.С. Самострелкин С.С. Самоделкин С.С. Петрук П.П. Иванчук И.И. Петренко Петров П.П. Иванов И.И. Нажмите любую клавишу...  

Варианты задания.

Исключить из списка элементы, относящиеся к учащимся, у которых:

1) Средний балл меньше среднего балла группы.

2) Средний балл меньше 4,5.

3) Средний балл больше 4.

4) Все оценки 5.

5) Одна оценка 4, а остальные - 5.

6) Оценка, полученная на первом экзамене - 2.

7) Оценка, полученная на втором экзамене - 5.

8) Нет удовлетворительных и неудовлетворительных оценок.

9) Больше одной оценки 2.

10) Одна оценка 3, а остальные 4 и 5.

11) Одна оценка 5, а остальные 4.

12) Оценки только 4 и 5.

13) Больше одной оценки 3.

14) Две оценки 3.

15) Одна оценка 4, а остальные 3.

16) Все оценки 3.

17) Оценки 3 и 4.

18) Все оценки 4.

19) Оценка, полученная на первом экзамене - 3.

20) Оценки за первый и третий экзамен 3.

21) Одна оценка 5, а остальные 3.

22) Только одна оценка 5.

23) Две оценки 5, а остальные 2.

24) Одна оценка 2, а остальные 5.

Распечатать оставшийся список.





Дата публикования: 2015-02-22; Прочитано: 222 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.011 с)...