Другие языки программирования и технологии

Помогите, пожалуйста, написать программу на Паскале хотя бы примерно

Сведения о студентах организованы в виде односвязного списка
Сведения включают:
•Фамилия и инициалы;
•Номер зачетной книжки;
•Номер группы;
•Успеваемость (массив из пяти элементов) .
Написать программу, реализующую следующие действия:
•Начальное формирование списка;
•Добавление элементов в список;
•Удаление элемента списка с заданным номером зачетной книжки;
•Вывод сведений о студенте, номер зачетной книжки которого вводится с клавиатуры.
Объявляем односвязный список:

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 символов ;-)
Vasil Pankov
Vasil Pankov
52 924
Лучший ответ
тут чуть поболее – 4000 символов)) ) так что учение труд....
Rysbek Umurbekov
Rysbek Umurbekov
29 870