Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 1
Регистрация: 27.03.2019
Сообщений: 24
1

Сумма дробей массива

08.05.2019, 16:34. Показов 2322. Ответов 3

Author24 — интернет-сервис помощи студентам
Напишите программу, используя модуль, которая в одномерном массиве, состоящем из обыкновенных дробей, находит сумму всех элементов массива. Результат представить в виде несократимой дроби.

Можете помочь составить сам модуль нахождения суммы из данного кода?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
type frac=record
          p:integer;{числитель любое целое число}
          q:1..maxint;{знаменатель целое положительное число}
          end;
procedure summa(a,b:frac;var c:frac);
begin
c.p:=a.p*b.q+b.p*a.q;
c.q:=a.q*b.q;
end;
procedure sokr(var a:frac);
var i:integer;
begin
i:=2;
while(i<=abs(a.p))and(i<=a.q) do
 begin
  if(a.p mod i=0)and(a.q mod i=0) then
   begin
    a.p:=a.p div i;
    a.q:=a.q div i;
   end
  else i:=i+1
 end;
end;
var a:array[1..100] of frac;
    sm:frac;
    sr:real;
    n,i:byte;
begin
repeat
write('Размер массива от 2 до ',100,' n=');
readln(n);
until n in [2..100];
writeln('Введите массив дробей');
for i:=1 to n do
 begin
  repeat
    Write('Введите числитель (не равный нулю): ');
    ReadLn(a[i].p);
  until a[i].p<>0; {числитель <>0}
  repeat
    Write('Введите знаменатель (по модулю > ',a[i].p,'): ');
    ReadLn(a[i].q);
  until a[i].q>abs(a[i].p);{делаем правильные дроби}
 end;
writeln;
 begin
  summa(a[i],a[i-1],sm);{складываем текущее с предыдущим результатом}
  sokr(sm); {сокращаем результат}
  a[i]:=sm;{присваиваем предыдущему результат}
 end;
write('Сумма дробей=');
if sm.p=sm.q then writeln(1)
else if sm.p=-sm.q then writeln(-1)
else if abs(sm.p)<sm.q then writeln(sm.p:3,'/',sm.q:2)
else writeln(sm.p div sm.q,'+',sm.p mod sm.q,'/',sm.q:2);
sr:=sm.p/sm.q/n;
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2019, 16:34
Ответы с готовыми решениями:

Сумма дробей
Условие только такое S=1+2/3+3/4+4/5+...9/10 2/3-это дроби две третих например помогите:cry:

Сумма простых дробей.
Написать программу вычисления суммы 1 + 1/2 + 1/3 + … + 1/n для заданного числа n....

Сумма дробей
Нужно найти сумму дробей. 1+(1/2)+(1/3)....(1/n). Помогите составить программу

Сумма двух дробей
Даны две дроби a/b и c/d (числа a и c — целые, b и d — натуральные). Вычислите их сумму и запишите...

3
23 / 14 / 9
Регистрация: 08.05.2019
Сообщений: 17
08.05.2019, 16:51 2
Лучший ответ Сообщение было отмечено L1s1c1a как решение

Решение

Вот этот код выносите в модуль. Файл сохранить как Sum.pas и скомпилировать
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
unit Sum;
 
interface
    type frac = record
          p : integer;{числитель любое целое число}
          q : 1..maxint;{знаменатель целое положительное число}
    end;
    procedure summa(a,b:frac; var c:frac);
    procedure sokr(var a:frac);
implementation
 
procedure summa(a,b:frac;var c:frac);
begin
    c.p:=a.p*b.q+b.p*a.q;
    c.q:=a.q*b.q;
end;
 
procedure sokr(var a:frac);
var i:integer;
begin
i:=2;
while(i<=abs(a.p))and(i<=a.q) do
 begin
  if(a.p mod i=0)and(a.q mod i=0) then
   begin
    a.p:=a.p div i;
    a.q:=a.q div i;
   end
  else i:=i+1
 end;
end;
 
Begin
 
end.
А это код основной программы.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
program test;
uses Sum;
var a:array[1..100] of frac;
    sm:frac;
    sr:real;
    n,i:byte;
begin
repeat
write('Размер массива от 2 до ',100,' n=');
readln(n);
until n in [2..100];
writeln('Введите массив дробей');
for i:=1 to n do
 begin
  repeat
    Write('Введите числитель (не равный нулю): ');
    ReadLn(a[i].p);
  until a[i].p<>0; {числитель <>0}
  repeat
    Write('Введите знаменатель (по модулю > ',a[i].p,'): ');
    ReadLn(a[i].q);
  until a[i].q>abs(a[i].p);{делаем правильные дроби}
 end;
writeln;
 begin
  summa(a[i],a[i-1],sm);{складываем текущее с предыдущим результатом}
  sokr(sm); {сокращаем результат}
  a[i]:=sm;{присваиваем предыдущему результат}
 end;
write('Сумма дробей=');
if sm.p=sm.q then writeln(1)
else if sm.p=-sm.q then writeln(-1)
else if abs(sm.p)<sm.q then writeln(sm.p:3,'/',sm.q:2)
else writeln(sm.p div sm.q,'+',sm.p mod sm.q,'/',sm.q:2);
sr:=sm.p/sm.q/n;
end.
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
08.05.2019, 17:04 3
Модуль
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
unit drobi;
interface
type frac=record
          p:integer;{числитель любое целое число}
          q:1..maxint;{знаменатель целое положительное число}
          end;
procedure summa(a,b:frac;var c:frac);
procedure sokr(var a:frac);
implementation
procedure summa(a,b:frac;var c:frac);
begin
c.p:=a.p*b.q+b.p*a.q;
c.q:=a.q*b.q;
end;
procedure sokr(var a:frac);
var i:integer;
begin
i:=2;
while(i<=abs(a.p))and(i<=a.q) do
 begin
  if(a.p mod i=0)and(a.q mod i=0) then
   begin
    a.p:=a.p div i;
    a.q:=a.q div i;
   end
  else i:=i+1
 end;
end;
end.
Программа
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
uses crt,drobi;
var a:array[1..100] of frac;
    sm:frac;
    sr:real;
    n,i:byte;
begin
repeat
write('Размер массива от 2 до ',100,' n=');
readln(n);
until n in [2..100];
writeln('Введите массив дробей');
for i:=1 to n do
 begin
  repeat
    Write('Введите числитель (не равный нулю): ');
    ReadLn(a[i].p);
  until a[i].p<>0; {числитель <>0}
  repeat
    Write('Введите знаменатель (по модулю > ',a[i].p,'): ');
    ReadLn(a[i].q);
  until a[i].q>abs(a[i].p);{делаем правильные дроби}
 end;
writeln;
 begin
  summa(a[i],a[i-1],sm);{складываем текущее с предыдущим результатом}
  sokr(sm); {сокращаем результат}
  a[i]:=sm;{присваиваем предыдущему результат}
 end;
write('Сумма дробей=');
if sm.p=sm.q then writeln(1)
else if sm.p=-sm.q then writeln(-1)
else if abs(sm.p)<sm.q then writeln(sm.p:3,'/',sm.q:2)
else writeln(sm.p div sm.q,'+',sm.p mod sm.q,'/',sm.q:2);
sr:=sm.p/sm.q/n;
end.
1
0 / 0 / 1
Регистрация: 27.03.2019
Сообщений: 24
08.05.2019, 17:34  [ТС] 4
Спасибо большое
0
08.05.2019, 17:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2019, 17:34
Помогаю со студенческими работами здесь

Сумма дробей
Задано вещественное число X. Напишите программу, которая находит такое максимальное число N, что ...

Сумма дробей
Создать класс RatNum, который имеет два поля int — числитель и знаменатель. Создать конструктор...

Сумма дробей
задачка простейшая, найти сумму 1+1/2+1/3+...+1/k, до k&lt;1000000 public class P2 { public...

Сумма обыкновенных дробей
Вот задание, требуется сделать сумму с приведением общего знаменателя, и анализатор... Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru