Линейный список и удаление простых чисел - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста. Построить линейный список из входной последовательности чисел. Удалить из него все простые числа.

Решение задачи: «Линейный список и удаление простых чисел»

textual
Листинг программы
program dyn_list;
 
type
  list = ^node;
 
  node = record
    info: integer;
    Next: list
  end;
 
var
  s, l, nn: list;
  x, y, e: integer;
  n, i: integer;
 
function Simple(n: LongInt): boolean;
var
  i: LongInt;
begin
  if n <= 0 then
  begin
    Simple := false;
    exit;
  end;
  if n = 1 then
  begin
    Simple := true;
    exit;
  end;
 
  for i := 2 to Round(Sqrt(n)) do
    if n mod i = 0 then
      break;
  Simple := n mod i <> 0;
end;
 
procedure Delete(var l: list; e: integer);
var
  p, nn: list;
begin
  if l^.info = e then
  begin
    p := l;
    l := l^.Next;
    dispose(p);
    exit;
  end;
  nn := l^.next;
  p := l;
  while nn <> nil do
  begin
    if nn^.info = e then begin
      p^.Next := nn^.Next;
      Dispose(nn);
      exit;
    end;
    p := nn;
    nn := nn^.Next;
  end;
 
end;
 
procedure out_spisok(l: list);
begin
  if l = nil then
    writeln(('Список пуст'));
  while l <> nil do
  begin
    s := l^.Next;
    Write(l^.info, ' ');
    l := s;
  end;
  writeln;
end;
 
procedure add_ell();
 begin
  s := nil;
  writeln(('элементы'));
   for i := 1 to n do
   begin
    new(l);
    l^.Next := s;
    readln(x);
    l^.info := x;
    s := l;
   end;
  writeln(('список'))
 end;
 
 begin
  writeln(('Количество элементов:'));
  readln(n);
  add_ell();
  out_spisok(l);
 
  nn := l;
  while nn <> nil do
  begin
    s := nn^.Next;
    y := nn^.info;
    if Simple(y) then
      Delete(l, y);
    nn := s;
  end;
  writeln;
  writeln(('результат: '));
  out_spisok(l);
 
  while l <> nil do
  begin
    s := l^.Next;
    dispose(l);
    l := s;
  end;
  readln;
end.

Объяснение кода листинга программы

В этом коде используется динамический список, который создается и заполняется числами. Затем из списка удаляются все простые числа. Вот список переменных и их значений:

  1. s, l, nn: list;
    • s - указатель на последний элемент списка;
    • l - текущий элемент списка;
    • nn - переменная для хранения следующего элемента списка.
  2. x, y, e: integer;
    • x - временная переменная для чтения числа из списка;
    • y - текущее число, проверяемое на простоту;
    • e - число, которое нужно удалить из списка.
  3. n, i: integer;
    • n - количество элементов в списке;
    • i - итератор для прохода по списку.
  4. Simple(n: LongInt): boolean;
    • функция для проверки, является ли число n простым.
  5. Delete(var l: list; e: integer);
    • процедура для удаления элемента с ключом e из списка l.
  6. out_spisok(l: list);
    • процедура для вывода списка на экран.
  7. add_ell();
    • процедура для добавления элементов в список.
  8. nn := l;
    • инициализация указателя на первый элемент списка.
  9. while nn <> nil do
    • цикл для прохода по всем элементам списка.
  10. y := nn^.info;
    • сохранение значения текущего элемента списка.
  11. if Simple(y) then
    • проверка, является ли текущее число простым.
  12. Delete(l, y);
    • удаление текущего простого числа из списка.
  13. nn := s;
    • переход к следующему элементу списка.
  14. out_spisok(l);
    • вывод списка на экран после удаления простых чисел.
  15. while l <> nil do
    • цикл для освобождения памяти, выделенной под элементы списка.
  16. s := l^.Next;
    • сохранение ссылки на следующий элемент списка.
  17. dispose(l);
    • освобождение памяти под текущим элементом списка.
  18. l := s;
    • переход к следующему элементу списка.
  19. readln;
    • чтение строки с клавиатуры для завершения работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы