В одномерном массиве, состоящем из обыкновенных дробей, находит среднее арифметическое всех элементов массива - Pascal

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

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

Напишите программу, используя модуль, которая в одномерном массиве, состоящем из обыкновенных дробей, находит среднее арифметическое всех элементов массива. Результат представить в виде несократимой дроби. Pascal ABC/Turbo Pascal

Решение задачи: «В одномерном массиве, состоящем из обыкновенных дробей, находит среднее арифметическое всех элементов массива»

textual
Листинг программы
const
  N = 5;
  
type
  tFract = record
    num, den : Integer;
  end;
 
function redFract(f : tFract) : tFract;
var d : Integer;
begin
  d := 2;
  repeat
    if (f.num mod d=0)and(f.den mod d=0) then
      begin
        f.num := f.num div d;
        f.den := f.den div d;
      end
    else
      inc(d);
  until d >= f.den;
  redFract := f;
end;
 
function rnd : tFract;
var f : tFract;
begin
  repeat
    f.num := 1 + Random(10);
    f.den := 1 + Random(10);
  until redFract(f).den > 1;
  rnd := redFract(f);
end;
 
function lenFract(f : tFract) : Integer;
var n, d : Integer;
begin
  n := 0; repeat f.num := f.num div 10; inc(n); until f.num = 0;
  d := 0; repeat f.den := f.den div 10; inc(d); until f.den = 0;
  if n > d then lenFract := n else lenFract := d;
end;
  
function addFract(a, b : tFract) : tFract;
var f : tFract;
begin
  f.num := a.num * b.den + a.den * b.num;
  f.den := a.den * b.den;
  addFract := redFract(f);
end;
  
var
  a : array [1..N] of tFract;
  s : tFract;
  i, dem : Integer;
  
begin
  Randomize;
  for i := 1 to N do a[i] := rnd;
  for i := 1 to N do begin dem := lenFract(a[i]); Write('  ', a[i].num:dem); end; WriteLn;
  for i := 1 to N do begin dem := lenFract(a[i]); Write('  '); repeat Write('-'); dec(dem); until dem = 0; end; WriteLn;
  for i := 1 to N do begin dem := lenFract(a[i]); Write('  ', a[i].den:dem); end; WriteLn;
  s.num := 0; s.den := 1;
  for i := 1 to N do s := addFract(s, a[i]);
  
  WriteLn('Сумма = ', s.num, ' / ', s.den);
  s.den := s.den * N; s := redFract(s);
  WriteLn('Среднее = ', s.num, ' / ', s.den);
end.

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

  1. В начале кода объявляются константы и типы данных.
  2. Функция redFract(f: tFract) преобразует дробь f к виду, в котором числитель и знаменатель не имеют общих делителей, кроме 1.
  3. Функция rnd: tFract) генерирует случайную дробь со знаменателем, большим 1, и возвращает её.
  4. Функция lenFract(f: tFract) вычисляет длину числа f в десятичных разрядах.
  5. Функция addFract(a, b: tFract) складывает дроби a и b, приводя их к общему знаменателю.
  6. В основной части программы создаётся массив a размером N из случайно сгенерированных дробей.
  7. Выводится список дробей из массива a с указанием их числителей и знаменателей.
  8. Выводится список знаменателей дробей из массива a.
  9. Вычисляется сумма всех дробей из массива a.
  10. Суммарная дробь приводится к виду, в котором знаменатель равен 1.
  11. Вычисляется среднее арифметическое всех дробей из массива a.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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