
Паскаль, создание списка. Подскажите, как сделать функцию сортировки учеников по алфавиту,
добавление нового ученика в середине программы и как удалять учеников? Желательно более простые способы. const m=100; type Mass = array[1..m] of string; var k: mass; n,k: byte; procedure Creat; var i:integer; begin write('введите кол-во учеников: '); readln(n); for i:= 1 to n do begin write('введите ФИО:'); readln(k[i]); end; end; procedure out; var i:integer; begin writeln('Список класса:'); for i:= 1 to n do writeln(k[i]); end; procedure menu; begin writeln('1, Создание списка класса'); writeln('2, Вывод списка класса'); writeln('6, EXIT'); end; var kom: byte; begin repeat menu; readln(kom); case kom of 1: creat; 2: out; //3: sort; // 4: dobavit; // 5:delet; 6: exit; end; until kom = 6; end.

Ответы на вопрос

Ответ:
На PascalABC.NET можно так:
var k: array of string;
procedure CreatOrAdd(add: boolean);
begin
var i,n: integer;
write('введите кол-во учеников: ');
readln(n);
if (add) then
begin
setlength(k,k.Length+n);
for i:= 0 to n-1 do
begin
write('введите ФИО:');
readln(k[k.Length-n+i]);
end;
end
else
begin
setlength(k,n);
for i:= 0 to n-1 do
begin
write('введите ФИО:');
readln(k[i]);
end;
end;
end;
procedure out;
begin
try
writeln('Список класса:');
for var i:= 0 to k.Length-1 do writeln(k[i]);
except
on e: System.Exception do writeln(e.Message);
end;
end;
procedure menu;
begin
writeln('1, Создание списка класса');
writeln('2, Добавление');
writeln('3, Удаление');
writeln('4, Вывод списка класса');
writeln('5, EXIT');
end;
procedure delet;
begin
var n: integer;
write('введите номер удаляемого ученика: ');
readln(n);
try
if (n<=k.Length) then
k := k.Where(t -> t<>k[n-1]).ToArray()
else writeln('Ошибка');
except
on e: System.Exception do writeln(e.Message);
end;
end;
var
kom: byte;
begin
repeat
menu;
readln(kom);
case kom of
1: creatoradd(false);
2: creatoradd(true);
3: delet;
4: out;
5: exit;
end;
until kom = 5;
end.
Если будут вопросы, спрашивайте.



Для реализации функции сортировки учеников по алфавиту, добавления нового ученика в середине программы и удаления учеников вам понадобится внести некоторые изменения в вашу программу. Вот как это можно сделать:
- Сортировка учеников по алфавиту:
Вы можете использовать встроенную процедуру
Sort
из модуляSysUtils
, чтобы отсортировать массивk
с учениками по алфавиту. Вот как это можно сделать:
pascaluses SysUtils; ... procedure SortStudents; var i, j: Integer; begin for i := 1 to n - 1 do for j := i + 1 to n do if CompareText(k[i], k[j]) > 0 then Swap(k[i], k[j]); end;
- Добавление нового ученика в середине программы: Для добавления нового ученика в середину списка, вы должны сначала увеличить размер массива на 1 и сдвинуть элементы после вставляемого. Вот как это можно сделать:
pascalprocedure AddStudentInMiddle(newStudent: string; position: Integer); var i: Integer; begin if (position < 1) or (position > n + 1) then begin writeln('Некорректная позиция для добавления.'); Exit; end; Inc(n); for i := n downto position + 1 do k[i] := k[i - 1]; k[position] := newStudent; end;
- Удаление учеников: Для удаления ученика, вы можете сдвинуть элементы после удаляемого элемента и уменьшить размер массива на 1. Вот как это можно сделать:
pascalprocedure DeleteStudent(position: Integer); var i: Integer; begin if (position < 1) or (position > n) then begin writeln('Некорректная позиция для удаления.'); Exit; end; for i := position to n - 1 do k[i] := k[i + 1]; Dec(n); end;
Теперь вы можете добавить вызовы этих процедур в вашей программе в соответствии с вашими потребностями:
pascalcase kom of 1: Creat; 2: out; 3: SortStudents; 4: begin writeln('Введите ФИО нового ученика: '); readln(newStudent); writeln('Введите позицию для добавления: '); readln(position); AddStudentInMiddle(newStudent, position); end; 5: begin writeln('Введите позицию ученика для удаления: '); readln(position); DeleteStudent(position); end; 6: Exit; end;
Пожалуйста, обратите внимание, что код предоставлен вам для образовательных целей и может потребовать дополнительной настройки и обработки ошибок для более надежной работы.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili