Удалить из массива все одинаковые элементы, оставив их первые вхождения - Pascal

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

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

Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их первые вхождения. Программа работает но криво: удаляет не повторяющиеся элементы или удаляет все повторяющиеся(это в процедуре lol), и выводит 0 в конце(нужно сделать n-{количество нулей} при втором вызове процедуры print)
type
  omas = array[1..100] of integer;//описание массива
 
var//описание глобальных переменных
  a: omas;//описание глобальных переменных
  n: integer;
 
procedure init(var a: omas; n: integer);//Название процедуры  и Описание формальных параметров переменных
var//Описание локальных переменных
  i: integer;//Описание локальных переменных
begin//начало процедуры
  for i := 1 to n do//Цикл
    a[i] := random(20)+1;//запилнение массива случйными числами
end;//конец процедуры
 
procedure print(var a: omas; n: integer);//Название процедуры  и Описание формальных параметров переменных
var//Описание локальных переменных
  i: integer;//Описание локальных переменных
begin//начало процедуры
  for i := 1 to n do//Цикл
    write(a[i], ' ');//вывод
end;//конец процедуры
 
procedure lol(var a: omas; n: integer);//Название процедуры  и Описание формальных параметров переменных
var//Описание локальных переменных
  i, x, c, z: integer;//Описание локальных переменных
begin//начало процедуры
  for i := 1 to n do 
  begin
    c := 2;//приравниваем *с* 2: тк сравнивать первый элемент нужно со вторым
    for x := 1 to n do
      if a[i] = a[c] then
      begin
      for z:= c to n-1 do begin //цикл с параметром
        a[z]:=a[z+1]; //элементу массива присваиваем предыдущий элемент
        a[n]:=0;    //последний заменяем на 0 
        end;
      inc(c){увеличиваем c для сравнения со следующим элементом}
      end
      else inc(c);
  end;
end;//конец процедуры
 
begin//начало программы
  writeln('Введите размерность массива');//Вывод текста
  Readln(n);
  writeln('Оригинальный массив');//Вывод текста
  init(a, n);//Вызов процедуры и указание фактических параметров
  print(a, n);//Вызов процедуры и указание фактических параметров
  writeln;//переход на следующую строку
  writeln('Изменённый массив');//Вывод текста
  lol(a, n);//Вызов процедуры и указание фактических параметров
  print(a, n);//Вызов процедуры и указание фактических параметров
end.

Решение задачи: «Удалить из массива все одинаковые элементы, оставив их первые вхождения»

textual
Листинг программы
type
  omas = array[1..100] of integer;//описание массива
 
var//описание глобальных переменных
  a: omas;//описание глобальных переменных
  n: integer;
 
procedure init(var a: omas;n:integer);//Название процедуры  и Описание формальных параметров переменных
var//Описание локальных переменных
  i: integer;//Описание локальных переменных
begin//начало процедуры
  for i := 1 to n do//Цикл
  a[i] := random(20)+1;//запилнение массива случйными числами
end;//конец процедуры
 
procedure print(a: omas;n:integer);//Название процедуры  и Описание формальных параметров переменных
var//Описание локальных переменных
  i: integer;//Описание локальных переменных
begin//начало процедуры
  for i := 1 to n do//Цикл
  write(a[i], ' ');//вывод
end;//конец процедуры
 
procedure lol(var a: omas; var n: integer);//Название процедуры  и Описание формальных параметров переменных
var//Описание локальных переменных
  i, x, c, z: integer;
begin//начало процедуры
i := 1;
while i<n do
 begin
  for x := n downto i+1 do
  if a[x] = a[i] then
   begin
    if x=n then dec(n)
    else
     begin
      for z:=x to n-1 do
      a[z]:=a[z+1]; //элементу массива присваиваем предыдущий элемент
      dec(n);
     end;
   end;
  inc(i){увеличиваем c для сравнения со следующим элементом}
 end;
end;//конец процедуры
 
begin//начало программы
  writeln('Введите размерность массива');//Вывод текста
  Readln(n);
  writeln('Оригинальный массив');//Вывод текста
  init(a,n);//Вызов процедуры и указание фактических параметров
  print(a,n);//Вызов процедуры и указание фактических параметров
  writeln;//переход на следующую строку
  writeln('Изменённый массив');//Вывод текста
  lol(a, n);//Вызов процедуры и указание фактических параметров
  print(a, n);//Вызов процедуры и указание фактических параметров
end.

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

Данный код на языке Pascal представляет собой программу для удаления повторяющихся элементов из массива, оставив только их первые вхождения. Переменные:

  • omas - это тип массива, который содержит целочисленные значения.
  • a - это глобальная переменная, которая представляет собой массив.
  • n - это глобальная переменная, которая указывает на размерность массива.
  • i - это локальная переменная, которая используется в процедуре lol для увеличения счетчика повторений элемента.
  • x - это локальная переменная, которая используется в процедуре lol для хранения текущего элемента массива.
  • c - это локальная переменная, которая используется в процедуре lol для сравнения со следующим элементом.
  • z - это локальная переменная, которая используется в процедуре lol для перенаправления элементов массива. Процедуры:
  • init - это процедура, которая заполняет массив случайными числами от 1 до 20.
  • print - это процедура, которая выводит содержимое массива на экран.
  • lol - это основная процедура, которая удаляет повторяющиеся элементы из массива, оставляя только их первые вхождения. Циклы:
  • for - используется в процедурах init, print и lol для выполнения повторяющихся операций. Функции:
  • random(20) - это функция, которая генерирует случайное число в диапазоне от 1 до 20. Примечание: В данном коде не используются вложенные списки.

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


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

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

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