Удалить из массива все одинаковые элементы, оставив их первые вхождения - 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. Примечание: В данном коде не используются вложенные списки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д