Массивы. Тексты программ: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Mikst (обсуждение | вклад) |
Mikst (обсуждение | вклад) |
||
(не показано 20 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
__NOTOC__ | |||
=== Ввод и вывод === | === Ввод и вывод === | ||
<source lang="Delphi">const Sz = 100; // Размер массива | <source lang="Delphi">const Sz = 100; // Размер массива | ||
Строка 89: | Строка 90: | ||
=== Инвертирование массива=== | === Инвертирование массива=== | ||
=== | <source lang="Delphi">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.</source> | |||
=== Минимальный элемент в массиве и его индекс === | |||
<source lang="Delphi"> | |||
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.</source> | |||
=== Минимальный четный элемент и его индекс === | === Минимальный четный элемент и его индекс === | ||
<source lang="Delphi">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.</source> | |||
=== Запись четных элементов массива в новый массив=== | === Запись четных элементов массива в новый массив=== | ||
<source lang="Delphi">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.</source> | |||
=== Слияние отсортированных массивов в отсортированный=== | === Слияние отсортированных массивов в отсортированный=== | ||
====Способ 1.==== | |||
<source lang="Delphi">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.</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('Результат слияния: '); | |||
for var i:=1 to cN do | |||
write(c[i],' '); | |||
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:=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.