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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2011, 17:43   #1
druger
Пользователь
 
Регистрация: 18.09.2011
Сообщений: 31
По умолчанию несократимая дробь

Помогите составить прогу на паскале: дробь в виде m/n (m,n натуральные числа) сократить до несократимой дроби

Последний раз редактировалось druger; 01.10.2011 в 17:49.
druger вне форума Ответить с цитированием
Старый 01.10.2011, 17:52   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,871
По умолчанию

Код:
var: m,n:Integer;
begin
   n:=350;
   m:=239;//просто так взял
   for i:=1 to n do
   begin
      if(n mod i=0)and(m mod i=0)then//если их обоих можно сократить на какое-то число i,
      begin
         n:=n/i;//то сокращаем
         m:=m/i;
      end;
   end;
   WriteLn('n=',n);
   WriteLn('m=',m);
end;
остальное сам доработаешь
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 01.10.2011, 20:02   #3
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

алгоритм не совсем правильный
32/48 --- ?
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 01.10.2011, 20:35   #4
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

а если так ?
Код:
uses crt;
var m,n,n1,i:integer;
begin
clrscr;
   n:=48;
   m:=32;
n1:=n div 2;
   for i:=2 to n1 do

      if(n mod i=0)and(m mod i=0)then
      begin
         n:=n div i;
         m:=m div i;
         i:=1;
      end;

   WriteLn('n=',n);
   WriteLn('m=',m);
   readln;

end.
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 01.10.2011, 20:35   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Описываю алгоритм словами.
1. Найти МИНИМУМ(ЧИСЛИТЕЛЬ_ДРОБИ, ЗНАМЕНАТЕЛЬ_ДРОБИ)
2. Начиная с найденного, минимума двигаться до единицы, при этом проверяя, делятся ли числитель и знаменатель ОДНОВРЕМЕННО на то число, которое мы двигаем до единицы, и, если делится, то получить частные от деления числителя и знаменателя на это число и выйти из цикла.
Вадим Мошев вне форума Ответить с цитированием
Старый 01.10.2011, 21:51   #6
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

да, спасибо Вадим Мошев,
в коде выше тоже ошибка
еще одна попытка
/почему так, просто хотел вывести промежуточные значения/
Код:
uses crt;
var m,n,i:integer;
begin
clrscr;
   n:=48;m:=16;
   for i:=2 to n do
      if(n mod i=0)and(m mod i=0)then
      begin
         n:=n div i;
         m:=m div i;
            Writeln('n=',n,'    m=',m);
         i:=1;
      end;
   readln;
end.
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 02.10.2011, 18:53   #7
druger
Пользователь
 
Регистрация: 18.09.2011
Сообщений: 31
По умолчанию

всем спасибо
druger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Может ли PHP вычитать дробь Rost93 PHP 7 07.06.2011 20:05
представить обыкновенную дробь в виде десятичной андреич Помощь студентам 2 19.05.2010 22:43
Несократимая дробь strateg66 Помощь студентам 1 20.12.2009 15:34
Переделать дробь в натуральное число pro100-delphi Паскаль, Turbo Pascal, PascalABC.NET 2 26.09.2009 08:24