Массивы. Тексты программ: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
 
(не показано 14 промежуточных версий этого же участника)
Строка 112: Строка 112:
end.</source>
end.</source>


=== Максимальный элемент в массиве и его индекс ===
=== Минимальный элемент в массиве и его индекс ===
<source lang="Delphi">const  
<source lang="Delphi">
const  
   Sz = 100;
   Sz = 100;
var  
var  
Строка 215: Строка 216:
   a: array [1..aN] of integer := (1,5,12,15,47,89,98,112,171,180);
   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);
   b: array [1..bN] of integer := (13,44,58,71,73,111);
   c: array [1..aN+bN] of integer;
   c: array [1..сN] of integer;
   ai,bi,ci: integer;
   ai,bi,ci: integer;
begin
begin
Строка 257: Строка 258:
     ci += 1;
     ci += 1;
   end;
   end;
   
  writeln('Результат слияния: ');
  for var i:=1 to cN do
    write(c[i],' ');
end.</source>
====Способ 2. С барьерным элементом====
<source lang="Delphi">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('Результат слияния: ');
   writeln('Результат слияния: ');
Строка 264: Строка 310:


=== Сдвиг элементов влево===
=== Сдвиг элементов влево===
<source lang="Delphi">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.</source>
=== Сдвиг элементов вправо ===
=== Сдвиг элементов вправо ===
<source lang="Delphi">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.</source>
=== Удаление элемента===
=== Удаление элемента===
<source lang="Delphi">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.</source>
=== Вставка элемента===
=== Вставка элемента===
<source lang="Delphi">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.</source>
=== Подсчет количества элементов, удовлетворяющих условию ===
=== Подсчет количества элементов, удовлетворяющих условию ===
<source lang="Delphi">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.</source>
=== Есть ли элемент, удовлетворяющий условию===
=== Есть ли элемент, удовлетворяющий условию===
<source lang="Delphi">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.</source>
=== Сортировка пузырьком===
=== Сортировка пузырьком===
<source lang="Delphi">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.</source>
=== Сортировка выбором===
=== Сортировка выбором===
<source lang="Delphi">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.</source>


== Ссылки ==
== Ссылки ==
[[Алгоритмы_для_начинающих_на_примерах|Алгоритмы для начинающих]]
*[[Программы для начинающих]]
*[http://pascalabc.net/ru/programmyi-i-algoritmyi-dlya-nachinayuschih.html Сайт PascalABC.NET: Программы и алгоритмы для начинающих]

Текущая версия от 19:45, 12 апреля 2017

Ввод и вывод

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.

Ссылки