Массивы. Тексты программ

Материал из Вики проекта PascalABC.NET
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Ввод и вывод

const Sz = 100; // Размер массива

var 
  a: array [1..Sz] of integer;
  N: integer; // Количество элементов в массиве
  i: integer;
  
begin
  write('Введите количество элементов в массиве: ');
  readln(N);
  write('Введите элементы массива: ');
  for i:=1 to N do
    read(a[i]);
  write('Вывод элементов массива: ');
  for i:=1 to N do
    write(a[i],' ');
end.

Заполнение случайными числами

const Sz = 100; // Размер массива

var 
  a: array [1..Sz] of integer;
  N: integer; // Количество элементов в массиве
  i: integer;
  
begin
  N := 20;
  for i:=1 to N do
    a[i] := Random(100);
  writeln('Элементы массива: ');
  for i:=1 to N do
    write(a[i],' ');
end.

Заполнение арифметической прогрессией

const 
  Sz = 100;
  a0 = 5; // Первый элемент арифметической прогрессии
  d = 3;  // Разность арифметической прогрессии

var 
  a: array [1..Sz] of integer;
  N: integer; // Количество элементов в массиве
  
begin
  N := 20;
  a[1] := a0;
  for var i:=2 to N do
    a[i] := a[i-1] + d;
  writeln('Арифметическая прогрессия: ');
  for var i:=1 to N do
    write(a[i],' ');
end.

Заполнение степенями двойки

const 
  Sz = 100;
var 
  a: array [1..Sz] of integer;
  N: integer;   
begin
  N := 20;
  a[1] := 2;
  for var i:=2 to N do
    a[i] := a[i-1] * 2;
  writeln('Степени двойки: ');
  for var i:=1 to N do
    writeln(i:3,a[i]:9);
end.

Заполнение числами Фибоначчи

const 
  Sz = 100;
var 
  a: array [1..Sz] of integer;
  N: integer;   
begin
  N := 20;
  a[1] := 1; 
  a[2] := 1;
  for var i:=3 to N do
    a[i] := a[i-2] + a[i-1];
  writeln('Числа Фибоначчи: ');
  for var i:=1 to N do
    write(a[i],' ');
end.

Инвертирование массива

const 
  Sz = 100;
var 
  a: array [1..Sz] of integer;
  N: integer;   
begin
  N := 20;
  for var i:=1 to N do
    a[i] := Random(100);
  writeln('Элементы массива: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  
    
  for var i:=1 to N div 2 do
    Swap(a[i],a[N-i+1]);
    
  writeln('После инвертирования: ');
  for var i:=1 to N do
    write(a[i],' ');
end.

Минимальный элемент в массиве и его индекс

const 
  Sz = 100;
var 
  a: array [1..Sz] of real;
  N: integer;   
  min: real;
  minind: integer;
begin
  N := 20;
  for var i:=1 to N do
    a[i] := Random(100);
  writeln('Элементы массива: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  
  
  min := a[1];
  minind := 1;
  for var i:=2 to N do
    if a[i]<min then 
    begin
      min := a[i];
      minind := i;
    end;
    
  writeln('Минимальный элемент: ',min);
  writeln('Индекс минимального элемента: ',minind);
end.

Минимальный четный элемент и его индекс

const 
  Sz = 100;
var 
  a: array [1..Sz] of integer;
  N: integer;   
  min: integer;
  minind: integer;
begin
  N := 20;
  for var i:=1 to N do
    a[i] := Random(100);
  writeln('Элементы массива: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  
  
  min := integer.MaxValue;
  for var i:=1 to N do
    if (a[i]<min) and (a[i] mod 2 = 0) then 
    begin
      min := a[i];
      minind := i;
    end;
    
  if min = integer.MaxValue then
    writeln('Четных элементов нет')
  else  
  begin
    writeln('Минимальный четный элемент: ',min);
    writeln('Индекс минимального четного элемента: ',minind);
  end;
end.

Запись четных элементов массива в новый массив

const 
  Sz = 100;
var 
  a,b: array [1..Sz] of integer;
  aN: integer; // Количество элементов в массиве a  
  bN: integer; // Количество элементов в массиве b  
begin
  aN := 20;
  for var i:=1 to aN do
    a[i] := Random(100);
  writeln('Элементы массива: ');
  for var i:=1 to aN do
    write(a[i],' ');
  writeln;  
  
  bN := 0;
  for var i:=1 to aN do
    if a[i] mod 2 = 0 then 
    begin
      bN += 1;
      b[bN] := a[i];
    end;
    
  writeln('Четные элементы массива: ');
  for var i:=1 to bN do
    write(b[i],' ');
end.

Слияние отсортированных массивов в отсортированный

Способ 1.

const 
  aN = 10;      // Количество элементов в массиве a 
  bN = 6;       // Количество элементов в массиве b 
  cN = aN + bN; // Количество элементов в массиве c 

var 
  a: array [1..aN] of integer := (1,5,12,15,47,89,98,112,171,180);
  b: array [1..bN] of integer := (13,44,58,71,73,111);
  c: array [1..сN] of integer;
  ai,bi,ci: integer;
begin
  writeln('Элементы массива a: ');
  for var i:=1 to aN do
    write(a[i],' ');
  writeln;  
  writeln('Элементы массива b: ');
  for var i:=1 to bN do
    write(b[i],' ');
  writeln;  
  
  ci := 1;
  ai := 1;
  bi := 1;
  
  while (ai<=aN) and (bi<=bN) do
  begin
    if a[ai]<b[bi] then
    begin
      c[ci] := a[ai];
      ai += 1;
    end
    else 
    begin
      c[ci] := b[bi];
      bi += 1;
    end;
    ci += 1;
  end;
  while ai<=aN do
  begin
    c[ci] := a[ai];
    ai += 1;
    ci += 1;
  end;
  while bi<=bN do
  begin
    c[ci] := b[bi];
    bi += 1;
    ci += 1;
  end;
    
  writeln('Результат слияния: ');
  for var i:=1 to cN do
    write(c[i],' ');
end.

Способ 2. С барьерным элементом

const 
  aN = 10;      // Количество элементов в массиве a 
  bN = 6;       // Количество элементов в массиве b 
  cN = aN + bN; // Количество элементов в массиве c 

var 
  a: array [1..aN+1] of integer := (1,5,12,15,47,89,98,112,171,180,0); // последний элемент - барьерный
  b: array [1..bN+1] of integer := (13,44,58,71,73,111,0);
  c: array [1..cN] of integer;
  ai,bi,ci: integer;
begin
  writeln('Элементы массива a: ');
  for var i:=1 to aN do
    write(a[i],' ');
  writeln;  
  writeln('Элементы массива b: ');
  for var i:=1 to bN do
    write(b[i],' ');
  writeln;  

  a[aN+1] := integer.MaxValue; // барьерный элемент - самый большой
  b[bN+1] := integer.MaxValue;
  
  ci := 1;
  ai := 1;
  bi := 1;
  
  for ci:=1 to cN do
    if a[ai]<b[bi] then
    begin
      c[ci] := a[ai];
      ai += 1;
    end
    else 
    begin
      c[ci] := b[bi];
      bi += 1;
    end;
    
  writeln('Результат слияния: ');
  for var i:=1 to cN do
    write(c[i],' ');
end.

Сдвиг элементов влево

const N = 10;

var a: array [1..N] of integer;

begin
  for var i:=1 to N do
    a[i] := Random(100);
  writeln('Элементы массива a: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  

  for var i:=1 to N-1 do
    a[i] := a[i+1];
  a[N] := 0;
  
  writeln('После сдвига влево: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  
end.

Сдвиг элементов вправо

const N = 10;

var a: array [1..N] of integer;

begin
  for var i:=1 to N do
    a[i] := Random(100);
  writeln('Элементы массива a: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  

  for var i:=N downto 2 do
    a[i] := a[i-1];
  a[1] := 0;
  
  writeln('После сдвига влево: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  
end.

Удаление элемента

const N = 10;

var 
  a: array [1..N] of integer;
  K: integer;

begin
  for var i:=1 to N do
    a[i] := Random(100);
  writeln('Элементы массива a: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  

  K := Random(1,N);

  for var i:=K to N-1 do
    a[i] := a[i+1];
  
  writeln('После удаления элемента с индексом ',K,':');
  for var i:=1 to N-1 do
    write(a[i],' ');
  writeln;  
end.

Вставка элемента

const 
  N = 10;
  Elem = 666;

var 
  a: array [1..N+1] of integer;
  K: integer;

begin
  for var i:=1 to N do
    a[i] := Random(100);
  writeln('Элементы массива a: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  

  K := Random(1,N);

  for var i:=N downto K do
    a[i+1] := a[i];
  a[K] := 666;  
  
  writeln('После вставки элемента ',Elem,' в позицию ',K,':');
  for var i:=1 to N+1 do
    write(a[i],' ');
  writeln;  
end.

Подсчет количества элементов, удовлетворяющих условию

const N = 20;

var 
  a: array [1..N] of integer;
  K,Count: integer;

begin
  for var i:=1 to N do
    a[i] := Random(10);
  writeln('Элементы массива a: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  

  K := Random(10);

  Count := 0;
  for var i:=1 to N do
    if a[i] = K then 
      Count += 1;
  
  writeln('Количество элементов, равных ',K,': ',Count);  
end.

Есть ли элемент, удовлетворяющий условию

const N = 10;

var 
  a: array [1..N] of integer;
  K: integer;
  IsFound: boolean;

begin
  for var i:=1 to N do
    a[i] := Random(15);
  writeln('Элементы массива a: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  

  K := Random(15);

  IsFound := False;
  for var i:=1 to N do
    if a[i] = K then 
    begin
      IsFound := True;
      break
    end;
  
  if IsFound then
    writeln('Элемент ',K,' найден')
  else writeln('Элемент ',K,' не найден')  
end.

Сортировка пузырьком

const N = 10;

var 
  a: array [1..N] of integer;

begin
  for var i:=1 to N do
    a[i] := Random(100);
  writeln('Элементы массива a: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  

  for var i:=n downto 2 do
  for var j:=1 to i-1 do
    if a[j+1]<a[j] then
      Swap(a[j+1],a[j]);
  
  writeln('После сортировки пузырьком: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  
end.

Сортировка выбором

const N = 10;

var 
  a: array [1..N] of integer;
  K: integer;
  IsFound: boolean;

begin
  for var i:=1 to N do
    a[i] := Random(100);
  writeln('Элементы массива a: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  

  for var i:=1 to N-1 do
  begin
    var min := a[i]; 
    var ind := i;
    for var j:=i+1 to N do
      if a[j]<min then
      begin
        min := a[j];
        ind := j;
      end;
    a[ind] := a[i];
    a[i] := min;
  end;

  writeln('После сортировки выбором: ');
  for var i:=1 to N do
    write(a[i],' ');
  writeln;  
end.

Ссылки