
Приветствуем читателей нашего сайта! Сегодня мы с вами решим задачи Array24-29.
Задачи Array24-29
Array24. Дан целочисленный массив размера N, не содержащий одинаковых чисел. Проверить, образуют ли его элементы арифметическую прогрессию (см. задание Array3). Если образуют, то вывести разность прогрессии, если нет — вывести 0.
program array24;
var
A: array[1..10] of integer;
i, N, d: integer;
flag: boolean;
begin
write('Введите N: ');
readln(N);
write('Введите элементы массива: ');
for i := 1 to N do
read(A[i]);
d := A[2] - A[1];
i := 2;
flag := true;
while flag and (i < N) do
begin
if A[i + 1] - A[i] <> d then flag := false;
inc(i);
end;
if flag then writeln(d) else writeln(0);
end.Array25. Дан массив ненулевых целых чисел размера N. Проверить, образуют ли его элементы геометрическую прогрессию (см. задание Array4). Если образуют, то вывести знаменатель прогрессии, если нет — вывести 0.
program array25;
var
A: array[1..10] of integer;
i, N: integer;
q: real;
flag: boolean;
begin
write('Введите N: ');
readln(N);
write('Введите элементы массива: ');
for i := 1 to N do
read(A[i]);
q := A[2] / A[1];
i := 2;
flag := true;
while flag and (i <= N) do
begin
if A[i] / A[i - 1] <> q then flag := false;
inc(i);
end;
if flag then writeln(q) else writeln(0);
end.Array26. Дан целочисленный массив размера N. Проверить, чередуются ли в нем четные и нечетные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.
Если решать эту задачу в лоб(то есть начать проверять каждый элемент), то придётся делать два условия(когда первое число — чётное и когда первое число — нечётное). Но можно решить эту задачу намного проще. Достаточно просто заметить, что если оба числа чётные или нечётные, то их разность чётная(например: 5 — 3 = 2; 4 — 2 = 2). Если же одно число чётное, а другое — нечётное, то разность нечётная(например: 5 — 2 = 3). Тогда программа пишется очень просто.
program array26;
var
A: array[1..10] of integer;
i, k, N: integer;
begin
write('Введите N: ');
readln(N);
write('Введите элементы массива: ');
for i := 1 to N do
read(A[i]);
k := 0;
for i := 1 to N - 1 do
if abs(A[i] - A[i + 1]) mod 2 = 0 then
begin
k := i;
break;
end;
writeln(k);
end. Array27. Дан массив ненулевых целых чисел размера N. Проверить, чередуются ли в нем положительные и отрицательные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.
Можно заметить, что если числа разного знака, то: |a| + |b| ≠ |a + b|(например, |-3| + |5| = 8, а |-3 + 5| = 2), а если числа одного знака, тогда: |a| + |b| = |a + b|(например, |-3| + |-5| = 8, |-3 + (-5)| = 8).
program array27;
var
A: array[1..10] of integer;
i, k, N: integer;
begin
write('Введите N: ');
readln(N);
write('Введите элементы массива: ');
for i := 1 to N do
read(A[i]);
k := 0;
for i := 1 to N - 1 do
if abs(A[i] + A[i + 1]) = abs(A[i]) + abs(A[i + 1]) then
begin
k := i;
break;
end;
writeln(k);
end.Array28. Дан массив A размера N. Найти минимальный элемент из его элементов с четными номерами: A2, A4, A6, ….
program array28;
var
A: array[1..10] of integer;
i, min, N: integer;
begin
write('Введите N: ');
readln(N);
write('Введите элементы массива: ');
for i := 1 to N do
read(A[i]);
min := MaxInt;
{Присвоим min максимальное значение,
тогда любое число из массива будет меньше. }
for i := 1 to N div 2 do
{N div 2 — количество элементов с чётными номерами}
if A[2 * i] < min then min := A[2 * i];
writeln(min);
end.Array29. Дан массив A размера N. Найти максимальный элемент из его элементов с нечетными номерами: A1, A3, A5, ….
program array28;
var
A: array[1..10] of integer;
i, min, N: integer;
begin
write('Введите N: ');
readln(N);
write('Введите элементы массива: ');
for i := 1 to N do
read(A[i]);
min := MaxInt;
{Присвоим min максимальное значение,
тогда любое число из массива будет меньше.}
i := 1;
while i <= N do
begin
if A[i] < min then min := A[i];
inc(i, 2)
end;
writeln(min);
end.На сегодня всё! Если у вас возникли вопросы, задавайте их в комментариях. И не забывайте рассказывать о нашем сайте своим друзьям!
В вашем решении задачи array24 выходит так, что последний элемент может не быть частью арифм. прогрессии, и в выводе будет не 0, а разница прогрессии.
Вот правильное решение:
program array24;
var
a: array[1..10] of integer;
n, i, d: integer;
flag: boolean;
begin
write(‘Введите N: ‘);
readln(n);
write(‘Введите элементы массива: ‘);
for i := 1 to n do
read(a[i]);
d := a[2] — a[1];
flag := true;
if n > 2
then
begin
i := 3;
while flag and (i <= N) do
begin
if a[i] — a[i — 1] d
then flag := false;
inc(i);
end;
end;
if flag
then writeln(‘Разница: ‘,d)
else writeln(0);
end.
Максим, обе программы написаны абсолютно верно — как ваша версия, так и наша. Попробуйте сравнить их и понять это
Задача array29 вообще неправильно решена.
Вот правильное решение:
program array29;
var
a: array[1..10] of integer;
n, i, max: integer;
begin
write(‘Введите N: ‘);
readln(n);
write(‘Введите элементы массива: ‘);
for i := 1 to n do
read(a[i]);
max := a[1];
i := 3;
while i max
then max := a[i];
inc(i, 2);
end;
writeln(max);
end.
Наверное, это потому, что вместо него там по ошибке скопирован код 28-ой.
Благодарю за внимательность 🙂