Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Массивы и матрицы.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
345.09 Кб
Скачать

Удаление элементов в одномерном несортированном массиве по условию

{ Сама задача. Алгоритмы. Введение в разработку и анализ. Ананий Левитин

Упражнения 1.4.1. Поясните, как можно реализовать каждую из перечисленных ниже

операций над массивом так, чтобы время ее выполнения не зависело от

размера массива n. а) Удаление i-го элемента массива 1 <= i <= n). }

{ Усложненная модификация: удалить все элементы, которые делятся нацело на x }

{ PascalABC.NET. lamed, 14.07.2011 }

const

  MaxN = 30;

var

  a: array[1..MaxN] of integer;

  i, n: integer;

  x: integer;

  k: integer;

begin

  // Формирование одномерного массива

  randomize;

  n:=1+random(MaxN);

  for i:= 1 to n do

    a[i]:= random(MaxN+1);

   

  x:= 2+random(n-1);

 

  writeln('До обработки n=', n, '.');

  write('<');

  for i:= 1 to n do

    begin

      if i<>1 then write(',');

      write(a[i]);

    end;

  writeln('>');

 

  i:=1;

  k:= 0;

  while (i<=n) do

    begin

      while (i<=n) and (a[i] mod x=0) do

        begin // Если элемент требуется удалить

          a[i]:= a[n]; // Заменяем его последним использованным элементом массива

          // заменяющий элемент на следующем шаге тоже придется проверить

          dec(n); // уменьшаем счетчик числа используемых элементов

          inc(k); // увеличиваем счетчик удаленных элементов

        end;

      inc(i);

    end;

 

  writeln;

  writeln('n=', n, '. Удалено ', k, ' элементов, которые делятся на ', x, '.');

  write('<');

  for i:= 1 to n do

    begin

      if i<>1 then write(',');

      write(a[i]);

    end;

  writeln('>');

end.

Заполнение массива по спирали

uses crt;

var a: array [1..100,1..100] of integer;

    i,m,k,n: integer;

begin

writeln ('Vvesti chislo');

readln (n);

k:=0;

m:=0;

repeat

for i:= m+1 to n-m do

begin

inc (k);                      

a[i,m+1]:= k;

end;

for i:= m+2 to n-m do

begin                            

inc (k);

a[n-m,i]:= k;

end;

for i:= n-m-1 downto m+1 do

begin

inc (k);                                  

a[i,n-m]:= k;

end;

for i:= n-m-1 downto m+2 do

begin

inc (k);

a[m+1,i]:=k;

end;

inc (m);

until m+1=n div 2 + 2;

for i:= 1 to n do

begin

for k:= 1 to n do

write (a[i,k]:3,' ');

writeln;

end;

end.

Построение синусоиды на двумерном массиве(матрице) из точек(.)

program project1;

uses crt;

const w=79;{Ширина массива} h=22; {Высота массива}

var i,j,k: integer;

    arr: array [1..h,1..w] of char;

begin

    ClrScr; {Очищаем экран}

        {Заполняем массив точками '.'}

    for j:=1 to h do

        for i:=1 to w do

        begin

            arr[j,i]:='.';

        end;

        {Запоняем некоторые элементы массива,

            которые выявляются по формуле, звездочками '*'}

    for j:=1 to w do

    begin

         k:=round((sin(3.0*j*PI/w)+1)/2*h);

         arr[k,j]:='*';

    end;

        {Выводем массив}

  for j:=1 to h do

  begin

    writeln;

        for i:=1 to w do

            write(arr[j,i]);

   end;

 

   readln;

end.

Вставка нового столбца в матрицу со сдвигом исходных элементов

вставление нового столбца в матрицу со сдвигом исходных элементов, например: вставить столбец между 5 и 6 столбцом исходной матрицы.

uses crt;

var

a: array[1..10,1..12] of integer;

b: array[1..10] of integer;

i,k,n,j,q: integer;

 

begin

write('Введите размерность матрицы, не больше 10 и не меньше 6 : ');

repeat

read(n);

until (n>=6) and (n<11);

 

writeln('Введите элементы одномерного массива:');

for k:=1 to n do begin

read(b[k]);

end;

 

write('В какой столбец будут вставляться элементы: ');

repeat

read(q);

until (q>=1) and (q<=n);

 

writeln('Для вывода результата нажмите ENTER...');

readln;

clrscr;

 

write('Исходная матрица:');

writeln;

for i:=1 to n do begin

for j:=1 to n do begin

a[i,j]:=random(10);

write(a[i,j]:4);

end;

writeln;

end;

 

for j:=n+1 downto q do begin

for i:=1 to n do begin

a[i,j+1]:=a[i,j];

end;

end;

 

for i:=1 to n do begin

a[i,q]:=b[i];

end;

 

writeln;

writeln('Полученная матрица:');

for i:=1 to n do begin

for j:=1 to n+1 do begin

write(a[i,j]:4);

end;

writeln;

end;

end.

аналогично предыдущей программе, только вставление строки:

uses crt;

var

a: array[1..12,1..10] of integer;

b: array[1..10] of integer;

i,k,n,j,q: integer;

 

begin

write('Введите размерность матрицы, не больше 10 и не меньше 6 : ');

repeat

read(n);

until (n>=6) and (n<11);

 

writeln('Введите элементы одномерного массива:');

for k:=1 to n do begin

read(b[k]);

end;

 

write('В какую строку будут вставляться элементы: ');

repeat

read(q);

until (q>=1) and (q<=n);

 

writeln('Для вывода результата нажмите ENTER...');

readln;

clrscr;

 

write('Исходная матрица:');

writeln;

for i:=1 to n do begin

for j:=1 to n do begin

a[i,j]:=random(10);

write(a[i,j]:4);

end;

writeln;

end;

 

for i:=n+1 downto q do begin

for j:=1 to n do begin

a[i+1,j]:=a[i,j];

end;

end;

 

for i:=1 to n do begin

a[q,i]:=b[i];

end;

 

writeln;

writeln('Полученная матрица:');

for i:=1 to n+1 do begin

for j:=1 to n do begin

write(a[i,j]:4);

end;

writeln;

end;

end.