Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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

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

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

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

 

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

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

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

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

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

 

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

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

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

Образец выполнения работы.

Лабораторная работа № 13.

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

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

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.

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

 

Лабораторная работа № 14.

Работа со списками.

 

Цель работы:

1. Закрепить навыки работы с исключением элементов из списка.

2. Ознакомиться с возможностью добавления элементов в список.

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

Подготовить данные об абитуриентах, поступающих в институт. Информацию о каждом абитуриенте оформить в вид записи со следующими полями:

1.ФИО.

2. Год рождения.

3. Год окончания школы.

4. Оценки в аттестате.

5. Оценки вступительных экзаменов (3).

Оформить информацию в виде внешнего файла.

 

Занести информацию из внешнего файла в однонаправленный список.

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

1. Исключить из списка все элементы, удовлетворяющие условию, заданному в варианте и распечатать полученный список.

2. Добавить N элементов в начало (конец) списка согласно конкретному варианту и распечатать полученный список.

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

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

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

Образец выполнения работы.

Лабораторная работа № 14.

Работа со списками.

Цель работы:

1. Закрепить навыки работы с исключением элементов из списка.

2. Ознакомиться с возможностью добавления элементов в список.

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

Подготовить данные об абитуриентах, поступающих в институт. Информацию о каждом абитуриенте оформить в вид записи со следующими полями:

1.ФИО.

2. Год рождения.

3. Год окончания школы.

4. Оценки в аттестате.

5. Оценки вступительных экзаменов (3).

Оформить информацию в виде внешнего файла.

 

Занести информацию из внешнего файла в однонаправленный список.

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

1. Исключить из списка все элементы, удовлетворяющие условию, заданному в варианте и распечатать полученный список.

2. Добавить N элементов в начало (конец) списка согласно конкретному варианту и распечатать полученный список.

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

 

1. Все оценки 4.

2. Добавить в список элементы, относящиеся к абитуриентам, у которых :

все оценки 3 за экзамены и отличный аттестат.

 

 

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

{Заполнение внешнего файла данными, вводимыми с клавиатуры}

 

Program P8_5_2;

Uses CRT;

 

Const

GradMarks=5; {количество оценок в аттестате}

ExamenMarks=3; {количество оценок на экзамене}

 

Type

Data = Record

Name:String[20]; {Имя}

BirthDate,GradDate:Integer; {год рождения, год окончания школы}

SchoolGrad: Array[1..GradMarks] of Byte; {оценки в аттестате}

ExamGrad: Array[1..ExamenMarks] of Byte; {оценки на экзамене}

End;

 

Var

Telega: Data;

FileOfData: File of Data ;

 

(* Процедура заполнения файла 'data.dat' *)

 

Procedure Initialising;

Var i,y:Integer;

Label

Exits;

Begin

Assign(FileOfData,'data.dat');

ReWrite(FileOfData);

i:=1;

 

While True Do Begin

WriteLn('__________ Д А Н Н Ы Е ',i,' -ГО А Б И Т У Р И Е Н Т А___________');

WriteLn;

 

With Telega Do Begin

 

WriteLn('Введите Ф.И.О. абитуриента:');

WriteLn('"Enter"-завершение программы');

ReadLn(Name);

If (Name='') Then Goto Exits;

 

WriteLn('Введите год рождения абитуриента:');

ReadLn(BirthDate);

 

WriteLn('Введите год окончания школы абитуриентом:');

ReadLn(GradDate);

 

WriteLn('_______Введите оценки из аттестата абитуриента_______');

WriteLn('всего ',GradMarks,' штук');

WriteLn;

For y:=1 to GradMarks Do Begin

ReadLn(SchoolGrad[y]);

End;

 

 

WriteLn('Введите оценки, полученные абитуриентом на экзамене:');

WriteLn('Всего ',ExamenMarks,' штук');

WriteLn;

For y:=1 to ExamenMarks Do Begin

ReadLn(ExamGrad[y]);

End;

 

End;

Write(FileOfData,Telega);

inc(i);

End;

Exits: End;

 

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

Begin

Initialising;

Close(FileOfData);

End.

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

__________ Д А Н Н Ы Е 1 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Иванов И.И. Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 2 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Петров Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 3 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Сидоров С.С. Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 4 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Васильев В.В. Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 5 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Сергеев С.С. Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 6 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Юрьев Ю.Ю. Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 7 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Ильин И.И. Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 8 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Михайлов М.М. Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 9 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Савельев С.С. Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 10 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Николаев Н.Н. Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 11 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы  

 

 

Program T8_5_2_1;

Uses CRT;

 

Const

GradMarks=5; {количество оценок в аттестате}

ExamenMarks=3; {количество оценок на экзамене}

 

Type

Data = Record

Name:String[20]; {Имя}

BirthDate,GradDate:Integer; {год рождения, год окончания школы}

SchoolGrad: Array[1..GradMarks] of Byte; {оценки в аттестате}

ExamGrad: Array[1..ExamenMarks] of Byte; {оценки на экзамене}

End;

DataPointer=^DataList;

DataList = Record

Name:String[20]; {Имя}

BirthDate,GradDate:Integer; {год рождения, год окончания школы}

SchoolGrad: Array[1..GradMarks] of ShortInt; {оценки в аттестате}

ExamGrad: Array[1..ExamenMarks] of ShortInt; {оценки на экзамене}

Next: DataPointer;

End;

 

 

Var

Telega: Data;

P:DataPointer;

Stop:Boolean;

 

{**** Копирование записей из внешнего файла в однонаправленный список *****}

Procedure CopyToList;

Var i,ii:Integer;

P1:DataPointer;

DataFile: File of Data;

Begin

p1:=nil;

Assign(DataFile,'Students.dat');

Reset(DataFile);

 

While (Not EOF(DataFile)) Do Begin

Read(DataFile,Telega);

New(P1);

P1^.Name:=Telega.Name;

P1^.BirthDate:=Telega.BirthDate;

P1^.GradDate:=Telega.GradDate;

For i:=1 To GradMarks Do P1^.SchoolGrad[i]:=Telega.SchoolGrad[i] ;

For i:=1 To ExamenMarks Do P1^.ExamGrad[i]:=Telega.ExamGrad[i];

P1^.Next:=P; {ссылка на предыдущий элемент}

P:=P1 {новая голова списка}

End;

Close(DataFile);

End;

 

 

{***** Удаление элементов списка, удовлетворяющих условию *****}

 

Function Removing(Head:DataPointer):DataPointer;

var

i,e4: ShortInt;

Begin

e4:=0;

If Head=nil Then Removing:=nil {если список пустой}

Else Begin

For i:=1 to ExamenMarks Do If Head^.ExamGrad[i]=4 Then inc(e4);

If e4=3 Then Begin

Removing:=Head^.Next; {обработка головы списка}

Dispose(Head); Head:=nil;

End

Else Begin {если удаляемый элемент-не голова,тогда рекурсия}

Head^.Next:=Removing(Head^.Next); {по следующим за ним}

Removing:=Head;

If Head^.Next=nil Then Stop:=True; {выход из функции и из цикла}

End; {по достижении конца списка}

End;

End;

 

 

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

Procedure PrintOut;

var

p1:DataPointer;

s1,s2:string;

i,n:integer;

Label

Finita;

Begin

p1:=P;

WriteLn('_______ Ф.И.О. абитуриентов, оставшихся в списке ________');

WriteLn;

While True Do Begin

s1:='';

s2:='';

For i:=1 to ExamenMarks Do Begin

str(p1^.ExamGrad[i],s1);

s2:=s2+s1+', ';

End;

WriteLn('имя: ',p1^.Name,' (оценки: ',s2,')');

If p1^.Next=nil Then GoTo Finita;

p1:=p1^.Next;

End;

Finita:End;

 

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

Begin

P:=nil;

CopyToList;

Stop:=False;

While (Not Stop) Do P:=Removing(P); {вызов рекурсивной функции}

PrintOut;

WriteLn('Press any key...');

Repeat Until KeyPressed;

End.

 

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

  _______ Ф.И.О. абитуриентов, оставшихся в списке ________   имя: Савельев С.С. (оценки: 3, 3, 3, ) имя: Ильин И.И. (оценки: 3, 3, 3, ) имя: Юрьев Ю.Ю. (оценки: 3, 5, 5, ) имя: Сергеев С.С. (оценки: 3, 3, 3, ) имя: Сидоров С.С. (оценки: 3, 2, 4, ) имя: Петров (оценки: 3, 3, 3, ) Press any key...  

 

 

{Добавление в список элементов с условием}

 

Program T8_5_2_2;

Uses CRT;

 

Const

GradMarks=5; {количество оценок в аттестате}

 

 

ExamenMarks=3; {количество оценок на экзамене}

 

Type

Data = Record {тип элементов в файле}

Name:String[20]; {Имя}

BirthDate,GradDate:Integer; {год рождения, год окончания школы}

SchoolGrad: Array[1..GradMarks] of Byte; {оценки в аттестате}

ExamGrad: Array[1..ExamenMarks] of Byte; {оценки на экзамене}

End;

DataPointer=^DataList;

DataList = Record {тип элементов в списке}

Name:String[20]; {Имя}

BirthDate,GradDate:Integer; {год рождения, год окончания школы}

SchoolGrad: Array[1..GradMarks] of Byte; {оценки в аттестате}

ExamGrad: Array[1..ExamenMarks] of Byte; {оценки на экзамене}

Next: DataPointer;

End;

 

 

Var

Telega: Data;

P:DataPointer;

StopCondition:Boolean;

 

{**** Копирование записей из внешнего файла в однонаправленный список *****}

Procedure LoadFromFileToList;

Var i,y:Integer;

P1:DataPointer;

FileOfData: File of Data;

Begin

p1:=nil;

Assign(FileOfData,'data.dat');

Reset(FileOfData);

 

While (Not EOF(FileOfData)) Do Begin

Read(FileOfData,Telega);

New(P1);

P1^.Name:=Telega.Name;

P1^.BirthDate:=Telega.BirthDate;

P1^.GradDate:=Telega.GradDate;

For i:=1 To GradMarks Do P1^.SchoolGrad[i]:=Telega.SchoolGrad[i] ;

For i:=1 To ExamenMarks Do P1^.ExamGrad[i]:=Telega.ExamGrad[i];

P1^.Next:=P; {ссылка на предыдущий элемент}

P:=P1 {новая голова списка}

End;

Close(FileOfData);

End;

 

{***** Удаление элементов списка, удовлетворяющих условию *****}

{удалить всех кроме тех, у которых все оценки "3" за экзамены}

{и отличный аттестат}

Function Filtering(Head:DataPointer):DataPointer;

var

i,Mark_0,Mark_1: ShortInt;

Begin

Mark_0:=0;

Mark_1:=0;

If Head=nil Then Filtering:=nil {если список пустой}

Else Begin

For i:=1 to ExamenMarks Do If Head^.ExamGrad[i]=3 Then inc(Mark_0);

For i:=1 to GradMarks Do If Head^.SchoolGrad[i]=5 Then inc(Mark_1);

 

If not ((Mark_0=ExamenMarks) and (Mark_1=GradMarks)) Then Begin

Filtering:=Head^.Next; {обработка головы списка}

Dispose(Head); Head:=nil;

End

Else Begin {если удаляемый элемент-не голова,тогда рекурсия}

Head^.Next:=Filtering(Head^.Next); {по следующим за ним}

Filtering:=Head;

If Head^.Next=nil Then StopCondition:=True; {выход из функции и из цикла}

End; {по достижении конца списка}

End;

End;

 

 

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

Procedure PrintResult;

var

p1:DataPointer;

str1,str2,str3:string;

i,n:integer;

Label

Exits;

Begin

p1:=P;

HighVideo;

WriteLn(' _______ Ф.И.О. абитуриентов, оставшихся в списке ________');

NormVideo;

WriteLn;

While True Do Begin

str1:='';

str2:='';

str3:='';

For i:=1 to ExamenMarks Do Begin

str(p1^.ExamGrad[i],str1);

str2:=str2+str1+', ';

End;

For i:=1 to GradMarks Do Begin

str(p1^.SchoolGrad[i],str1);

str3:=str3+str1+', ';

End;

WriteLn('имя: ',p1^.Name,' (оценки в аттестате: ',str3,'на экзамене: ',str2,')');

If p1^.Next=nil Then GoTo Exits;

p1:=p1^.Next;

End;

Exits:End;

 

 

Function CheckOut:Boolean;

var

Mark_1,e3,i:ShortInt;

Begin

e3:=0; Mark_1:=0;

For i:=1 to ExamenMarks Do If Telega.ExamGrad[i]=3 Then inc(e3);

For i:=1 to GradMarks Do If Telega.SchoolGrad[i]=5 Then inc(Mark_1);

If ((e3=ExamenMarks) and (Mark_1=GradMarks)) Then CheckOut:=true

Else CheckOut:=false;

End;

 

Procedure AddictionToList;

var

P1:DataPointer;

i:ShortInt;

Begin

New(P1);

P1^.Name:=Telega.Name;

P1^.BirthDate:=Telega.BirthDate;

P1^.GradDate:=Telega.GradDate;

For i:=1 To GradMarks Do P1^.SchoolGrad[i]:=Telega.SchoolGrad[i] ;

For i:=1 To ExamenMarks Do P1^.ExamGrad[i]:=Telega.ExamGrad[i];

P1^.Next:=P; {ссылка на предыдущий элемент}

P:=P1 {новая голова списка}

End;

 

 

Procedure Initialising;

Var

i,y:Integer;

Label

Exits;

Begin

WriteLn(' Дополнение данного списка новыми элементами: ');

WriteLn;

i:=1;

 

While True Do Begin

WriteLn(' __________ Д А Н Н Ы Е ',i,' -ГО А Б И Т У Р И Е Н Т А___________');

WriteLn;

 

With Telega Do Begin

 

WriteLn('Введите Ф.И.О. абитуриента:');

WriteLn('"Enter"-завершение программы');

ReadLn(Name);

If (Name='') Then Goto Exits;

 

WriteLn('Введите год рождения абитуриента:');

ReadLn(BirthDate);

 

WriteLn('Введите год окончания школы абитуриентом:');

ReadLn(GradDate);

 

WriteLn(' _______Введите оценки из аттестата абитуриента_______');

WriteLn('всего ',GradMarks,' штук');

WriteLn;

For y:=1 to GradMarks Do Begin

ReadLn(SchoolGrad[y]);

End;

 

 

WriteLn(' Введите оценки, полученные абитуриентом на экзамене:');

WriteLn('Всего ',ExamenMarks,' штук');

WriteLn;

For y:=1 to ExamenMarks Do Begin

ReadLn(ExamGrad[y]);

End;

 

End;

If CheckOut Then AddictionToList;

inc(i);

End;

Exits: End;

 

 

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

Begin

ClrScr;

P:=nil;

LoadFromFileToList;

StopCondition:=False;

While (Not StopCondition) Do P:=Filtering(P); {вызов рекурсивной функции}

PrintResult;

WriteLn;

Initialising;

PrintResult;

WriteLn('Press any key...');

While not KeyPressed do;

End.


 

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

_______ Ф.И.О. абитуриентов, оставшихся в списке ________   имя: Савельев С.С. (оценки в аттестате: 5, 5, 5, 5, 5, на экзамене: 3, 3, 3, ) имя: Сергеев С.С. (оценки в аттестате: 5, 5, 5, 5, 5, на экзамене: 3, 3, 3, ) имя: Петров (оценки в аттестате: 5, 5, 5, 5, 5, на экзамене: 3, 3, 3, )   Дополнение данного списка новыми элементами:   __________ Д А Н Н Ы Е 1 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Смирнов В.В. Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 2 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы Пермяков Введите год рождения абитуриента: Введите год окончания школы абитуриентом: _______Введите оценки из аттестата абитуриента_______ всего 5 штук   Введите оценки, полученные абитуриентом на экзамене: Всего 3 штук   __________ Д А Н Н Ы Е 3 -ГО А Б И Т У Р И Е Н Т А___________   Введите Ф.И.О. абитуриента: "Enter"-завершение программы   _______ Ф.И.О. абитуриентов, оставшихся в списке ________   имя: Пермяков (оценки в аттестате: 5, 5, 5, 5, 5, на экзамене: 3, 3, 3, ) имя: Савельев С.С. (оценки в аттестате: 5, 5, 5, 5, 5, на экзамене: 3, 3, 3, ) имя: Сергеев С.С. (оценки в аттестате: 5, 5, 5, 5, 5, на экзамене: 3, 3, 3, ) имя: Петров (оценки в аттестате: 5, 5, 5, 5, 5, на экзамене: 3, 3, 3, ) Press any key...  

 

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

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

1) одна оценка 2;

2) все оценки 3;

3) средний балл меньше 4,5 и одна оценка 3 в аттестате;

 

4) средний балл больше 4 и одна оценка 3 в аттестате;

5) средний балл меньше 4;

6) возраст больше 18 лет;

7) нет ни одной оценки 5 в аттестате;

8) нет отличного аттестата, но все оценки за экзамены 5;

9) хотя бы одна оценка 3;

10) отличный аттестат;

11) больше одной оценки 3 в аттестате;

12) нет ни одной оценки 5 в аттестате;

13) хотя бы одна оценка 3 в аттестате;

14) отличный аттестат и больше одной оценки 3 за экзамены;

15) меньше 2-х оценок 5;

16) аттестат с хотя бы одной оценкой 3 и нет оценки 5 за экзамены;

17) оценки 3 и 4 за экзамены;

18) все оценки 3 за экзамены и отличный аттестат;

19) средний балл меньше 4,5;

20) средний балл больше 4 и оценки 3 в аттестате;

21) средний балл меньше 4;

22) отличный аттестат и возраст больше 18 лет;

23) отличный аттестат и возраст меньше 17 лет;

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

25) все оценки 4;

 

2. Добавить в список элементы, относящиеся к абитуриентам, у которых :

1) отличный аттестат;

2) одна оценка 4, а остальные 5;

3) средний балл в аттестате 4,5;

4) две оценки 4,а остальные 5;

5) средний балл меньше 4;

6) все экзамены сданы на 5;

7) все экзамены сданы на 4 и 5;

8) все экзамены сданы на 4;

9) одна оценка 4, а остальные 5;

 

10) одна оценка 5, а остальные 4;

11) две оценки 4, а остальные 5;

12) одна оценка 3;

13) одна оценка 3 в аттестате;

14) больше одной оценки 3 в аттестате;

15) средний балл в аттестате ниже 4,5;

16) две оценки 3 за экзамены и отличный аттестат;

17) нет ни одной оценки 5 в аттестате;

18) отличный аттестат и средний балл меньше 4;

19) средний балл больше 4 и оценки 3 в аттестате;

20) возраст больше 18 лет и все оценки 5 за экзамены;

21) средний балл больше 4,5 и одна оценка 3 в аттестате;

22) отличный аттестат и одна оценка 3 за экзамены;

23) одна оценка 3 за экзамены, а остальные 4;

24) одна оценка 3 за экзамены, а остальные 5;

25) все оценки 3 за экзамены и отличный аттестат.

 

 

Лабораторная работа № 15.

Последнее изменение этой страницы: 2016-03-15; Просмотров: 46; Нарушение авторского права страницы


lektsia.com 2007 - 2017 год. Все права принадлежат их авторам! (0.16 с.) Главная | Обратная связь