Сжать одномерный массив, выбросив нулевые элементы. - Pascal
Формулировка задачи:
задан массив А размерности n, содержащий несколько нулевых элементов. сжать его, выбросив эти нулевые элементы.
Решение задачи: «Сжать одномерный массив, выбросив нулевые элементы.»
textual
Листинг программы
uses crt; var a:array[1..100] of integer; m,i,k:integer; begin Clrscr; Write('Vvedite k: '); Readln(k); for i:=1 to k do begin a[i]:=random(10)-6; Write(a[i],' '); end; Writeln; m:=0; for i:=1 to k do if a[i]=0 then inc(m) else a[i-m]:=a[i]; k:=k-m; for i:=1 to k do Write(a[i],' '); Readln; end.
Объяснение кода листинга программы
- Создается переменная
a
типаarray[1..100] of integer
, которая будет хранить одномерный массив целых чисел размером от 1 до 100. - Создаются три переменные
m
,i
иk
типаinteger
. Переменнаяm
будет использоваться для отслеживания количества нулей в массиве, переменнаяi
- для итерации по элементам массива, а переменнаяk
- для ввода пользователем. - Выводится сообщение «Введите k: », после чего считывается значение переменной
k
с помощью функцииReadln()
. - Запускается цикл
for
, который выполняетсяk
раз. В каждой итерации цикла значение переменнойi
устанавливается равным 1 и считывается значение переменнойa[i]
с помощью функцииReadln()
. Значениеa[i]
присваивается переменнойm
. - Если значение
a[i]
равно 0, то увеличивается значение переменнойm
на 1. В противном случае, значениеa[i]
присваивается переменнойa[i-m]
. - После завершения цикла
for
выводится сообщение «Writeln;», затем значение переменнойm
уменьшается на 1 (так как каждый нулевой элемент был удален из массива). - Снова запускается цикл
for
, который выполняетсяk
раз. В каждой итерации цикла выводится значениеa[i]
с помощью функцииWrite()
и пробел « ». - После завершения цикла
for
считывается значение переменнойk
с помощью функцииReadln()
. - Код завершается.