Линейный список и удаление простых чисел - 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.
Объяснение кода листинга программы
В этом коде используется динамический список, который создается и заполняется числами. Затем из списка удаляются все простые числа. Вот список переменных и их значений:
- s, l, nn: list;
- s - указатель на последний элемент списка;
- l - текущий элемент списка;
- nn - переменная для хранения следующего элемента списка.
- x, y, e: integer;
- x - временная переменная для чтения числа из списка;
- y - текущее число, проверяемое на простоту;
- e - число, которое нужно удалить из списка.
- n, i: integer;
- n - количество элементов в списке;
- i - итератор для прохода по списку.
- Simple(n: LongInt): boolean;
- функция для проверки, является ли число n простым.
- Delete(var l: list; e: integer);
- процедура для удаления элемента с ключом e из списка l.
- out_spisok(l: list);
- процедура для вывода списка на экран.
- add_ell();
- процедура для добавления элементов в список.
- nn := l;
- инициализация указателя на первый элемент списка.
- while nn <> nil do
- цикл для прохода по всем элементам списка.
- y := nn^.info;
- сохранение значения текущего элемента списка.
- if Simple(y) then
- проверка, является ли текущее число простым.
- Delete(l, y);
- удаление текущего простого числа из списка.
- nn := s;
- переход к следующему элементу списка.
- out_spisok(l);
- вывод списка на экран после удаления простых чисел.
- while l <> nil do
- цикл для освобождения памяти, выделенной под элементы списка.
- s := l^.Next;
- сохранение ссылки на следующий элемент списка.
- dispose(l);
- освобождение памяти под текущим элементом списка.
- l := s;
- переход к следующему элементу списка.
- readln;
- чтение строки с клавиатуры для завершения работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д