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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2010, 13:29   #1
Zeir
Новичок
Джуниор
 
Регистрация: 08.10.2010
Сообщений: 5
Вопрос Болшая точность

Помогите решить на паскале
Дана рациональная дробь m / n. Запишите ее в виде десятичной дроби с точностью k знаков после запятой.

Входные данные

В одной строке записано 3 числа m, n, k. Причем 0 <m, n ? 100, 0 ? k ? 1000.

Выходные данные

Вывести k точных значащих цифр после десятичной точки искомого числа.

Пример

Входные данные Выходные данные
1 2 3 0,500
Zeir вне форума Ответить с цитированием
Старый 10.10.2010, 16:52   #2
q_proger
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 48
По умолчанию

Код:
var
    m, n, k, i: integer;
begin
    m := 3;
    n : =7;
    k := 9;

    Write('0,');
    for i := 1 to k do begin
        m := 10 * m;
        Write(m div n);
        m := m mod n;
    end;
end.
Как-то так, вот только компилятора pascal у меня нет, так что проверить не могу
q_proger вне форума Ответить с цитированием
Старый 10.10.2010, 17:06   #3
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

а может проще так:
Код:
var
  m, n, k: integer;
begin
  m:=3;
  n:=7;
  k:=3;
  writeln(m/n:1:k);
end.
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 10.10.2010, 17:48   #4
q_proger
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Don Karleone Посмотреть сообщение
а может проще так:
Код:
var
  m, n, k: integer;
begin
  m:=3;
  n:=7;
  k:=3;
  writeln(m/n:1:k);
end.
Да в том и дело, что нет, так как "K" может достигать 1000, это задача из темы "длинная арифметика"
q_proger вне форума Ответить с цитированием
Старый 10.10.2010, 18:38   #5
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от q_proger Посмотреть сообщение
Да в том и дело, что нет, так как "K" может достигать 1000, это задача из темы "длинная арифметика"
Ну все равно не работает. m=6, n=2 m/n=неверный результат.
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 10.10.2010, 18:47   #6
q_proger
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 48
По умолчанию

Не учел, что дробь может быть неправильной, или как там это называется..
Тогда так:

Код:
var
    m, n, k, i: integer;
begin
    m := 3;
    n : =7;
    k := 9;

    Write(m div n);
    m := m mod n;
    Write(',');
    for i := 1 to k do begin
        m := 10 * m;
        Write(m div n);
        m := m mod n;
    end;
end.

Последний раз редактировалось q_proger; 10.10.2010 в 18:51.
q_proger вне форума Ответить с цитированием
Старый 10.10.2010, 18:57   #7
ponchikpk
Пользователь
 
Аватар для ponchikpk
 
Регистрация: 09.03.2009
Сообщений: 63
По умолчанию

просто надо поставить условие если m<n то выполняем алгоритм господина q_proger а иначе сначала div потом ставим запятую и уже дробную часть опять аналогично считаем.. по моему должно верно работать

меня уже опередели)))) и даже попроще чем я предложил...
ponchikpk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Точность обработки БД в С++ Maks7482 Общие вопросы C/C++ 3 23.08.2010 13:34
Точность типа float HunterMan Общие вопросы C/C++ 6 07.02.2009 23:05
точность вывода переменной XeN0N Помощь студентам 6 21.01.2009 16:30
Точность Sour Помощь студентам 2 31.05.2007 21:08