В одномерном массиве, состоящем из обыкновенных дробей, находит среднее арифметическое всех элементов массива - 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.
Объяснение кода листинга программы
- В начале кода объявляются константы и типы данных.
- Функция redFract(f: tFract) преобразует дробь f к виду, в котором числитель и знаменатель не имеют общих делителей, кроме 1.
- Функция rnd: tFract) генерирует случайную дробь со знаменателем, большим 1, и возвращает её.
- Функция lenFract(f: tFract) вычисляет длину числа f в десятичных разрядах.
- Функция addFract(a, b: tFract) складывает дроби a и b, приводя их к общему знаменателю.
- В основной части программы создаётся массив a размером N из случайно сгенерированных дробей.
- Выводится список дробей из массива a с указанием их числителей и знаменателей.
- Выводится список знаменателей дробей из массива a.
- Вычисляется сумма всех дробей из массива a.
- Суммарная дробь приводится к виду, в котором знаменатель равен 1.
- Вычисляется среднее арифметическое всех дробей из массива a.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д