Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2019, 09:49   #1
L1s1c1a
Пользователь
 
Регистрация: 27.03.2019
Сообщений: 11
По умолчанию Сумма дробей в одномерном массиве Pascal

Можете помочь переделать массив, чтобы дроби нужно было вводить с клавиатуры, а не рандомно
Код:
const max=20;
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..max] of frac;
    sm:frac;
    sr:real;
    n,i:byte;
begin
randomize;
repeat
write('Размер массива от 2 до ',max,' n=');
readln(n);
until n in [2..max];
writeln('Массив дробей');
for i:=1 to n do
 begin
  repeat
  a[i].p:=-5+random(21);
  until a[i].p<>0; {числитель <>0}
  repeat
  a[i].q:=1+random(20);
  until a[i].q>abs(a[i].p);{делаем правильные дроби}
  write(a[i].p:3,'/',a[i].q:2);
 end;
writeln;
for i:=2 to n do
 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.
L1s1c1a вне форума Ответить с цитированием
Старый 08.05.2019, 10:13   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
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;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Pascal]: Задача о поиске одинаковых элементов в одномерном массиве чисел. IIo3uTuB Помощь студентам 1 15.12.2016 14:13
В целочисленном одномерном массиве A(N) найти номер последнего максимального значения среди нечетных элементов (Pascal) Vladimir Ryabov Помощь студентам 0 27.11.2011 13:59
max сумма в одномерном массиве nice4ertik Visual C++ 3 31.05.2011 20:27
[Pascal] Поиск минимума в одномерном массиве merch Паскаль, Turbo Pascal, PascalABC.NET 7 19.05.2011 02:35
Сумма дробей Xcopy Общие вопросы Delphi 1 05.09.2009 19:12