Сведения о студентах организованы в виде односвязного списка
Сведения включают:
•Фамилия и инициалы;
•Номер зачетной книжки;
•Номер группы;
•Успеваемость (массив из пяти элементов) .
Написать программу, реализующую следующие действия:
•Начальное формирование списка;
•Добавление элементов в список;
•Удаление элемента списка с заданным номером зачетной книжки;
•Вывод сведений о студенте, номер зачетной книжки которого вводится с клавиатуры.
Другие языки программирования и технологии
Помогите, пожалуйста, написать программу на Паскале хотя бы примерно
Объявляем односвязный список:
type
tStudet = record
FIO : String[50];
NumZ, NumG : String[10];
Ocenky : array [1..5] of Byte;
end;
tSpis = ^rSpis;
rSpis = record
St : tStudent;
Next : tSpis;
end;
var
First : tSpis;
А дальше всё просто:
{ Добавление записи о студенте в список }
procedure AddSpis(St : tStudent);
var
Cur, Last : tSpis;
begin
New(Cur);
Cur^.St := St;
Cur^.Next := nil;
if First = nil then First := Cur
else begin Last := First; while Last^.Next <> nil do Last := Last^.Next; Last^.Next := Cur; end;
end;
{ Добавление студента к списку }
procedure AddSudent;
var
St : tStudent;
i : Byte;
begin
Write('Фамилия и инициалы: '); ReadLn(St.FIO);
Write('Номер зачётной книжки: '); ReadLn(St.NumZ);
Write('Номер группы: '); ReadLn(St.NumG);
WriteLn('Успеваемость: ');
for i := 1 to 5 do begin Write(i, ' оценка: '); ReadLn(St.Ocenky[ i ]); end;
AddSpis(St);
end;
{ Создание списка }
procedure CreateSpis;
var
St : tStudent;
Ch : Char;
i : Byte;
begin
First := nil;
repeat
AddStudent;
Write('Продолжить ввод студентов (Y/N) : '); ReadLn(Ch);
until Not (Ch in ['y', 'Y']);
end;
{ Удаление из списка по номеру зачётки }
procedure DeleteNumZ;
var
NumZ : String[10];
Cur, Pred : tSpis;
begin
Write('Введите номер зачётки: '); ReadLn(NumZ);
Cur := First;
while (Cur <> nil) and (Cur^.St.NumZ <> NumZ) do Cur := Cur^.Next;
if Cur = nil then begin WriteLn('Не найдено такого номера зачётки. '); Exit; end;
if Cur = First then begin First := First^.Next; Dispose(Cur); end
else begin Pred := First; while Pred^.Next <> Cur do Pred := Pred^.Next; Pred^.Next := Cur^.Next; Dispose(Cur); end;
end;
{ Вывод сведений по номеру зачётки }
procedure OutNumZ;
var
NumZ : String[10];
Cur : tSpis;
i : Byte;
begin
Write('Введите номер зачётки: '); ReadLn(NumZ);
Cur := First;
while (Cur <> nil) and (Cur^.St.NumZ <> NumZ) do Cur := Cur^.Next;
if Cur = nil then begin WriteLn('Не найдено такого номера зачётки. '); Exit; end;
WriteLn('Сведения о студенте с номером зачётки ', NumZ, ' :');
WriteLn('ФИО: ', Cur^.St.FIO);
WriteLn('Номер группы: ', Cur^.St.NumG);
Write('Оценки: '); for i := 1 to 5 do Write(Cur^.St.Ocenky[ i ]:3); WriteLn;
end;
Готово!
Осталось только реализовать вызов процедур из основной программы…
И уложился в 2400 символов ;-)
type
tStudet = record
FIO : String[50];
NumZ, NumG : String[10];
Ocenky : array [1..5] of Byte;
end;
tSpis = ^rSpis;
rSpis = record
St : tStudent;
Next : tSpis;
end;
var
First : tSpis;
А дальше всё просто:
{ Добавление записи о студенте в список }
procedure AddSpis(St : tStudent);
var
Cur, Last : tSpis;
begin
New(Cur);
Cur^.St := St;
Cur^.Next := nil;
if First = nil then First := Cur
else begin Last := First; while Last^.Next <> nil do Last := Last^.Next; Last^.Next := Cur; end;
end;
{ Добавление студента к списку }
procedure AddSudent;
var
St : tStudent;
i : Byte;
begin
Write('Фамилия и инициалы: '); ReadLn(St.FIO);
Write('Номер зачётной книжки: '); ReadLn(St.NumZ);
Write('Номер группы: '); ReadLn(St.NumG);
WriteLn('Успеваемость: ');
for i := 1 to 5 do begin Write(i, ' оценка: '); ReadLn(St.Ocenky[ i ]); end;
AddSpis(St);
end;
{ Создание списка }
procedure CreateSpis;
var
St : tStudent;
Ch : Char;
i : Byte;
begin
First := nil;
repeat
AddStudent;
Write('Продолжить ввод студентов (Y/N) : '); ReadLn(Ch);
until Not (Ch in ['y', 'Y']);
end;
{ Удаление из списка по номеру зачётки }
procedure DeleteNumZ;
var
NumZ : String[10];
Cur, Pred : tSpis;
begin
Write('Введите номер зачётки: '); ReadLn(NumZ);
Cur := First;
while (Cur <> nil) and (Cur^.St.NumZ <> NumZ) do Cur := Cur^.Next;
if Cur = nil then begin WriteLn('Не найдено такого номера зачётки. '); Exit; end;
if Cur = First then begin First := First^.Next; Dispose(Cur); end
else begin Pred := First; while Pred^.Next <> Cur do Pred := Pred^.Next; Pred^.Next := Cur^.Next; Dispose(Cur); end;
end;
{ Вывод сведений по номеру зачётки }
procedure OutNumZ;
var
NumZ : String[10];
Cur : tSpis;
i : Byte;
begin
Write('Введите номер зачётки: '); ReadLn(NumZ);
Cur := First;
while (Cur <> nil) and (Cur^.St.NumZ <> NumZ) do Cur := Cur^.Next;
if Cur = nil then begin WriteLn('Не найдено такого номера зачётки. '); Exit; end;
WriteLn('Сведения о студенте с номером зачётки ', NumZ, ' :');
WriteLn('ФИО: ', Cur^.St.FIO);
WriteLn('Номер группы: ', Cur^.St.NumG);
Write('Оценки: '); for i := 1 to 5 do Write(Cur^.St.Ocenky[ i ]:3); WriteLn;
end;
Готово!
Осталось только реализовать вызов процедур из основной программы…
И уложился в 2400 символов ;-)
тут чуть поболее – 4000 символов)) ) так что учение труд....
Похожие вопросы
- Помогите пожалуйста написать программу в Паскале )) Написать программу для вычисления суммы в массиве из 10 элементов
- Программирование на Паскале Помогите, пожалуйста , написать программу на паскале
- Помогите пожалуйста написать программу для Паскаля
- Помогите пожалуйста написать программу на паскале:
- помогите, пожалуйста, написать программу в паскале! сложные циклы.
- Срочно.Помогите пожалуйста написать программу на паскале.
- Помогите пожалуйста создать программу на Паскале. Заранее всем благодарен
- люди добрые помогите мне написать программу в паскале, метод Рунге Кутта. Математическое решение есть у меня
- помогите пожалуйста составить программу в паскале
- помогите, пожалуйста, написать программу на языке Паскаль