Решение задач. Array24-29


array24-29

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

На сегодня всё! Если у вас возникли вопросы, задавайте их в комментариях. И не забывайте рассказывать о нашем сайте своим друзьям!

  1. В вашем решении задачи 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.

  2. Максим, обе программы написаны абсолютно верно — как ваша версия, так и наша. Попробуйте сравнить их и понять это

  3. Задача 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.

  4. Наверное, это потому, что вместо него там по ошибке скопирован код 28-ой.
    Благодарю за внимательность 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *