Вопрос задан 12.07.2023 в 06:05. Предмет Информатика. Спрашивает Бунчук Дмитрий.

Паскаль, создание списка. Подскажите, как сделать функцию сортировки учеников по алфавиту,

добавление нового ученика в середине программы и как удалять учеников? Желательно более простые способы. 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.
0 0
Перейти к ответам

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Сергеева Полина.

Ответ:

На 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.

Если будут вопросы, спрашивайте.

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для реализации функции сортировки учеников по алфавиту, добавления нового ученика в середине программы и удаления учеников вам понадобится внести некоторые изменения в вашу программу. Вот как это можно сделать:

  1. Сортировка учеников по алфавиту: Вы можете использовать встроенную процедуру Sort из модуля SysUtils, чтобы отсортировать массив k с учениками по алфавиту. Вот как это можно сделать:
pascal
uses 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. Добавление нового ученика в середине программы: Для добавления нового ученика в середину списка, вы должны сначала увеличить размер массива на 1 и сдвинуть элементы после вставляемого. Вот как это можно сделать:
pascal
procedure 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. Удаление учеников: Для удаления ученика, вы можете сдвинуть элементы после удаляемого элемента и уменьшить размер массива на 1. Вот как это можно сделать:
pascal
procedure 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;

Теперь вы можете добавить вызовы этих процедур в вашей программе в соответствии с вашими потребностями:

pascal
case 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;

Пожалуйста, обратите внимание, что код предоставлен вам для образовательных целей и может потребовать дополнительной настройки и обработки ошибок для более надежной работы.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос