Цель задания:
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.