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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2011, 12:18   #1
lulia
Пользователь
 
Регистрация: 07.10.2011
Сообщений: 21
По умолчанию Написать программу деления 2-х чисел с заданной точностью в Pascal

Сама своим умом понимаю, что задача решается просто, но до меня не доходит. Помогите написать программу, которая делит дроби, заданные пользователем в виде числитель/знаменатель, а результат выдаёт в виде округлённого вещественного числа, с порядком точности, заданным пользователем.

Например:
Входные данные: 5/6, t=0.0001
Выходные данные:. 0,8333

Входные данные:. 1/37, t=0,00001
Выходные данные:. 0,02702
lulia вне форума Ответить с цитированием
Старый 07.10.2011, 13:31   #2
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

ну я бы сделал как-то так...

Код:
var
  ch, zn: integer;
  e: real;
  k: integer;

begin
  ch := 5;// числитель 
  zn := 6;// знаменатель
  e := 0.00001;// точность
  k := 1;
    while e < 1 do 
      begin
        e := e * 10;
        k := k * 10;
      end;
  writeln((round((ch / zn) * k) / k));
end.
принцип думаю понятен...

Последний раз редактировалось unbanned; 07.10.2011 в 19:03.
unbanned вне форума Ответить с цитированием
Старый 07.10.2011, 20:47   #3
lulia
Пользователь
 
Регистрация: 07.10.2011
Сообщений: 21
По умолчанию

ОГРОМНОЕ-ОГРОМНОЕ СПАСИБО!
Принцип решения очень понятен. Спасибо!
lulia вне форума Ответить с цитированием
Старый 08.10.2011, 07:48   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от unbanned Посмотреть сообщение
Код:
var
  ch, zn: integer;
  e: real;
  k: integer;

begin
  ch := 5;// числитель 
  zn := 6;// знаменатель
  e := 0.00001;// точность
  k := 1;
    while e < 1 do 
      begin
        e := e * 10;
        k := k * 10;
      end;
  writeln((round((ch / zn) * k) / k));
end.
принцип думаю понятен...
О_о
Принцип БОЛЕЕ, чем понятен. Цикл:
Код:
    while e < 1 do 
      begin
        e := e * 10;
        k := k * 10;
      end;
- эквивалентен выражению k:= round(1/e)
unbanned, ты всегда так единицу делишь на число? ))
Не надо подменять операцию деления загрублением точности. Ты ИСПОЛЬЗОВАЛ деление:
writeln((round((ch / zn) * k) / k));
- а тебя просили его имплементировать.
Если делать, как ты, то тогда уж как-то так:
var
ch,zn: integer;
e: double;
begin
ch:= 55;
zn:= 7;
e:= 0.0001;
Writeln(ch/zn:0:-round(ln(e)/ln(10)));
end.

2 lulia:
Цитата:
Сама своим умом понимаю, что задача решается просто, но до меня не доходит
Может, речь идет о воплощении деления уголком? Тогда я бы не стал называть это совсем уж простым.. Но не очень сложно.
Предпочитаю на "ты".

Последний раз редактировалось TinMan; 08.10.2011 в 08:02.
TinMan вне форума Ответить с цитированием
Старый 08.10.2011, 17:42   #5
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

мда)) с делением единицы дал маху

Код:
var
ch,zn: integer;
e: double;
begin
ch:= 55;
zn:= 7;
e:= 0.0001;
Writeln(ch/zn:0:-round(ln(e)/ln(10)));
end.
но ведь тут нет округления))
если при делении получиться 0.00067
с точностью 0.0001
в ответе должно получиться 0.0007
а получиться 0.0006

Цитата:
а результат выдаёт в виде округлённого вещественного числа, с порядком точности, заданным пользователем.
unbanned вне форума Ответить с цитированием
Старый 08.10.2011, 23:37   #6
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от unbanned Посмотреть сообщение
мда)) с делением единицы дал маху
Бывает ))
+1

Цитата:
но ведь тут нет округления))
если при делении получиться 0.00067
с точностью 0.0001
в ответе должно получиться 0.0007
а получиться 0.0006
А ты проверь - скажем, 20/3 )) Будешь немного удивлен ))

Форматированный вывод был бы почти бесполезен, не имей он округления. Приходилось бы делать его самому, а если так - то и вывести уже нетрудно.
Предпочитаю на "ты".

Последний раз редактировалось TinMan; 08.10.2011 в 23:44.
TinMan вне форума Ответить с цитированием
Старый 09.10.2011, 19:34   #7
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
А ты проверь - скажем, 20/3 )) Будешь немного удивлен ))
проверил. удивлен))
unbanned вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal ошибка при вычислении суммы ряда с заданной точностью RavenGuitarist Помощь студентам 4 23.08.2011 16:11
Pascal ABC. Вычислить сумму ряда с заданной точностью. 0kcanka Помощь студентам 0 16.05.2011 13:22
Составить графический алгоритм и программу для нахождения суммы ряда с заданной точностью ginfix Помощь студентам 1 30.03.2011 23:39
Pascal. Вычислить сумму S с заданной точностью E Саша Сказка Помощь студентам 8 19.10.2010 14:34