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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2010, 20:53   #1
@lenk@
Пользователь
 
Регистрация: 20.10.2009
Сообщений: 29
По умолчанию массивы

даны два массива натуральных чисел а1,а2,а3,....,аn и b1,b2,b3,...,bn. найти несократимую обыкновенную дробь, равную (a1/b1)-(a2/b2)+(a3/B3)-(a4/b4)+...+или-(an/bn). ума не приложу как сделать. помогите пожалуйста!!!
@lenk@ вне форума Ответить с цитированием
Старый 04.03.2010, 22:12   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Зачем столько тем то создавать? Причем подряд
держите код:
Код:
program zad1;
type mas=array[1..100] of real;
var a,b:mas;
y:real;
i,n:integer;
begin
writeln('введите кол-во элементов');
readln(n);
y:=0;
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
write('b[',i,']=');
readln(b[i]);
end;
for i:=1 to n do
begin
y:=(a[i]/b[i])-y;
if i<>1 then
y:=y*(-1);
end;
writeln('Ответ=',y:8:3);
end.
Базиля вне форума Ответить с цитированием
Старый 04.03.2010, 23:50   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от @lenk@ Посмотреть сообщение
найти несократимую обыкновенную дробь
Мне кажется, что надо не вычислить, а сократить. Например, дробь 10/12 сократить до 5/6.
Код:
type
  drob = record//создадим дробный тип
    chisl: integer;
    znam: integer
  end;

function NOD(a, b: integer): integer;//наибольший общий делитель
begin
  if a = 0 then NOD := b
  else NOD := NOD(b mod a, a)
end;

function NOK(a, b: integer): integer;//наименьшее общее кратное
begin
    NOK := (a div NOD(a, b)) * b;
end;

function SumDrob(a, b: drob): drob;//сумма дробей (школьная формула)
var
  y: drob;
begin
  y.znam := NOK(a.znam, b.znam);//знаменатель суммы = НОК знаменателей слагаемых
  y.chisl := a.chisl * (y.znam div a.znam) + b.chisl * (y.znam div b.znam);//числители умножаем на добавок
  SumDrob := y;
end;

function sekir(x: drob): drob;//сокращение дроби
var
  y: integer;
begin
  y := NOD(x.chisl, x.znam);//ищем НОД
  while y <> 1 do begin//если можно сокращать
    x.chisl := x.chisl div y;//то сокращаем числитель
    x.znam := x.znam div y;// и знаменатель на их НОД
    y := NOD(x.chisl, x.znam)
  end;
  sekir := x
end;

const
  n = 5;
var
  k, D: drob;
  i: integer;
  a, b: array[1..n] of integer;
begin
  for i := 1 to n do
  begin
    write('a/b ');
    readln(a[i], b[i])//ввод массива
  end;
  k.chisl := 0;
  k.znam :=1;//переменной k присвоим значение ноль (0 делить на 1 будет 0)
  for i := 1 to n do
  begin
    D.chisl := a[i];
    D.znam := b[i];//берём i-ую дробь из массивов
    if i mod 2 = 0 then D.chisl := -D.chisl;//чётные вычитаем, нечётные складываем
    k := sekir(SumDrob(k, D));//вычисляем сумму и сокращаем
    writeln(k.chisl, '/', k.znam);//промежуточные результаты
  end;
  readln
end.
eoln вне форума Ответить с цитированием
Старый 05.03.2010, 07:16   #4
@lenk@
Пользователь
 
Регистрация: 20.10.2009
Сообщений: 29
По умолчанию

EOLN,БАЗИЛЯ спасибо огромное)))) вы меня просто спасли!!!!!
@lenk@ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Массивы в Си iggor Помощь студентам 2 09.12.2009 13:19
Массивы Sasuke-sama Общие вопросы C/C++ 25 29.05.2009 22:36
Массивы JulLy Паскаль, Turbo Pascal, PascalABC.NET 2 16.05.2009 02:46