Дан целочисленный массив размера n. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии — количество этих элементов (длина серии может быть равна 1). Требуется:а) вывести массив, содержащий длины всех серий исходного массива. б) преобразовать массив, уменьшив каждую его серию на один элемент — Pascal(Паскаль)

Модуль

unit seria;
interface
uses crt;
const nmax=100;
type mas=array[1..nmax] of integer;
procedure Vvod(var a:mas; var n:byte);{ввод массива}
procedure Serii(a:mas;n:byte;var b:mas; var m:byte);{создание массива длин серий}
procedure Compress(var a:mas; var n:byte);{сжатие массива- удаление последних элементов серий}
implementation
procedure Vvod;
var i:byte;
begin
repeat
write('Размер массива до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Введите ',n,' элементов массива-целых чисел:');
for i:=1 to n do
 begin
  write('a[',i,']=');
  readln(a[i]);
 end;
clrscr;
writeln('Исходный массив:');
for i:=1 to n do
write(a[i],' ');
writeln;
writeln;
end;
 
procedure Serii;
var i,j,k:byte;
begin
m:=0;
i:=1;
while i<n do
if a[i]=a[i+1] then
  begin
   j:=i;k:=1;
   while (a[j]=a[j+1])and(j<n) do{пока одинаковые}
    begin
     j:=j+1;
     k:=k+1;{считаем}
    end;
   m:=m+1;
   b[m]:=k;{в массив}
   i:=i+k;{перепрыгиваем}
  end
else
 begin
  m:=m+1;
  b[m]:=1;{если 1, то в массив 1}
  i:=i+1;
 end;
if a[n]<>a[n-1] then{если последний один}
 begin
  m:=m+1;
  b[m]:=1;{добавляем в конец массива}
 end;
writeln('Длины цепочек одинаковых элементов:');
for i:=1 to m do
write(b[i],' ');
writeln;
writeln;
end;
procedure Compress;
var i,j:byte;
begin
i:=1;
while i<n do
if a[i]<>a[i+1] then{если последний в цепочке}
 begin
  for j:=i to n-1 do
  a[j]:=a[j+1];{сдвигаем на него конец массива - влево}
  n:=n-1;{уменьшвем массив на 1}
 end
else i:=i+1;
n:=n-1;{удаляем последний элемент}
if n=0 then write('Все серии были по 1 элементу, массив пуст.')
else
 begin
  writeln('Уменьшение серий на 1:');
  for i:=1 to n do
  write(a[i],' ');
 end;
end;
end.

Программа

uses crt,seria;
var a,b:mas;
    n,m:byte;
begin
clrscr;
randomize;
Vvod(a,n);
Serii(a,n,b,m);
Compress(a,n);
readln
end.

Leave a Comment

51 + = 52