Разработка в среде Turbo Pascal программы формирования и обработки элементов одномерного массива

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, хотел бы попросить у Вас помощи в решение задач в turbo pascal:

Разработка в среде Turbo Pascal программы формирования и обработки элементов одномерного массива:

1) Сформируйте двухмерный целочисленный массив S(4x9), используя генератор случайных чисел на интервале (-10, 6). Элементы массива вывести на экран в виде матрицы. 2) Преобразуйте массив S в одномерный массив X. Полученный массив вывести на экран. 3) Вычислите среднегеометрическое значение каждых третьих элементов последней четверти массива X. 4) Среди четных по значению элементов массива X определите наименьший. 5) упорядочить принадлежащие интервалу [a/2;b/2] элементы первой половины массива X по возрастанию квадратов значений. Заранее благодарен за помощь.

Решение задачи: «Разработка в среде Turbo Pascal программы формирования и обработки элементов одномерного массива»

textual
Листинг программы
var s: array[1..4, 1..9] of integer;
    x: array[1..36] of integer;
    a, b, i, j, k, t, min: integer;
    sg: real;
    f: boolean;
begin
  {формирование матрицы s}
  randomize;
  for i := 1 to 4 do
    for j := 1 to 9 do
      s[i, j] := -10 + random(17);
  {печать матрицы s}
  writeln('Matrix S:');
  for i := 1 to 4 do
    begin
      for j := 1 to 9 do write(s[i, j]:4);
      writeln
    end;
  {копирование матрицы S в массив X}
  for i := 1 to 4 do
    for j := 1 to 9 do
      x[(i - 1) * 9 + j] := s[i, j];
  {печать массива x}
  writeln('Array X:');
  for i := 1 to 36 do write(x[i]:4);
  writeln;
  {вычисление среднего геометрического каждых третьих элементов последней четверти массива x}
  t := 1; {произведение элементов}
  k := 0; {количество элементов}
  for i := 28 to 36 do
    if (i - 28) mod 3 = 2 {на самом деле, будут приняты во внимание элементы 30, 33 и 36}
      then begin
        t := t * x[i];
        inc(k) {естественно, в конце концов будет k=3}
      end;
  {вычисление среднего геометрического по формуле sg = корень k-й степени из t}
  if t > 0
    then sg := exp(ln(t) / k)
    else if t < 0
      then sg := -exp(ln(-t) / k)
      else sg := 0;
  {печать среднего геометрического каждых третьих элементов последней четверти массива x}
  writeln('Average geometrical every third element of last quarter of array X = ', sg:0:7);
  {определение наименьшего из чётных по значению элементов массива x}
  min := 7; {любое, главное, больше 6, то есть, больше наибольшего}
  for i := 1 to 36 do
    if not odd(x[i]) and (x[i] < min)
      then min := x[i];
  {печать результата}
  if min = 7 {минимум среди чётных не найден?}
    then writeln('Even even elements aren''t found in array X') {чётных нет, минимум не найден}
    else writeln('Minimum even element of array X = ', min); {чётные есть, печать минимума}
  {упорядочение принадлежащих [a/2; b/2] элементов первой половины массива X по НЕУБЫВАНИЮ квадратов значений}
  {остальные элементы остаются на своих местах}
  write('a = '); {ввод a}
  readln(a);
  repeat {ввод b с проверкой}
    write('b >= a;  b = ');
    readln(b)
  until b >= a;
  a := a div 2;
  b := b div 2;
  f := false;
  {сортировка обменом по заданному условию}
  for i := 1 to 17 do
    if (x[i] >= a) and (x[i] <= b)
      then for j := i + 1 to 18 do
        if (x[j] >= a) and (x[j] <= b) and (sqr(x[j]) < sqr(x[i]))
          then begin
            f := true;
            t := x[i];
            x[i] := x[j];
            x[j] := t
          end;
  {печать результата сортировки}
  if f {обмены были?}
    then begin {обмены были, печатаем отсортированный массив}
      writeln('Elements of first half of array X of range [a/2, b/2] are sorted:');
      for i := 1 to 36 do write(x[i]:4);
      writeln
    end
    else writeln('In first half of array X there are no elements from range [a/2, b/2]'); {обменов не было, печатать массив нет смысла}
  {ожидание реакции пользователя перед закрытием программы}
  write('Press <Enter> to exit');
  readln
end.

Объяснение кода листинга программы

  1. Создается массив s размером 4x9, где каждый элемент представляет собой целое число. Значения элементов случайно генерируются в диапазоне от -10 до 10.
  2. Выводится матрица s с помощью команды writeln.
  3. Копируется массив s в массив x. Это делается путем перебора элементов массива s и записи соответствующих значений в массив x.
  4. Вычисляется среднее геометрическое для каждых третьих элементов последней четверти массива x. Для этого используется формула exp(ln(t) / k), где t - произведение элементов, а k - количество элементов.
  5. Определяется наименьший из четных элементов массива x. Для этого перебираются все элементы массива и проверяется условие: элемент должен быть четным и меньше текущего минимального значения. Если находится такой элемент, то он становится новым минимальным значением.
  6. Выводится результат упорядочивания элементов первой половины массива x по условию sqr(x[i]) <= sqr(x[j]). Элементы, которые не удовлетворяют этому условию, остаются на своих местах.
  7. Запрашивается ввод значения a и b.
  8. Выполняется сортировка элементов первой половины массива x по условию sqr(x[i]) <= sqr(x[j]). Если выполнены обмены, то выводится отсортированный массив. В противном случае выводится сообщение о том, что в первой половине массива нет элементов из заданного диапазона.
  9. Выводится сообщение о том, что нужно нажать , чтобы выйти из программы.

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы