Приветствуем читателей нашего сайта! Сегодня мы с вами решим задачи 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-ой.
Благодарю за внимательность 🙂