дроби, перевести дробь |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
дроби, перевести дробь |
Bard |
15.03.2007 22:59
Сообщение
#1
|
Учиться, учиться еще раз учиться Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: 3 |
Помогите мне перевести обычную дробь в десятичную ...вот кое что есть.
но эта прога не определяет место запятой и если есть повторяющиеся числа после запятой то их не записывает в таком виде: 1/3=0.(3) 2/3=0.(6) 1/7=0.(142857) и т.д Большое спс за ранее... -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
klem4 |
16.03.2007 9:23
Сообщение
#2
|
Perl. Just code it! Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Как вариант, переводить число в троку, и искать есть ли после запятой постоянно повторяющиеся последовательности. Сначала смотреть есть ли постоянное посторение первого символа, если нет, первых двух, если нет, первых трех и так далее до длины length(s) div 2, где s содержит только дробную часть.
добавлено Только пожалуй немного сложнее, придется сделать еще один цикл, с какого символа от начала начинать искать повторения, ведь наверное возможны случаи 1.487(3) Lapp наверное об этом сечас пишет ?)) не угадал -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Lapp |
16.03.2007 10:13
Сообщение
#3
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Запятую ставить просто.. Сначала выводишь первый элемент массива, за ним ставишь запятую, а потом все остальные (начиная со второго в цикле).
А вот отслеживать период - это посложнее.. Не обязательно переводить в строку, можно отслеживать момент, когда переменная a повторится. И еще - у тебя ошибочка. Знак > замени на >=. Добавлено через 4 мин. Lapp наверное об этом сечас пишет ?)) не угадал сколько программистов - столько и подходов! Интересно бы устроить решение задачи (несложной), но не показывать до некоторого времени, а потом сравнить.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Bard |
16.03.2007 12:51
Сообщение
#4
|
Учиться, учиться еще раз учиться Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: 3 |
Спасибо за помощь ...проблему с запятой я уже решил но с повторениями ни как не могу разобраться... -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
volvo |
16.03.2007 13:37
Сообщение
#5
|
Гость |
arximed, я бы делал так: сначала находим для дроби период вот по этому алгоритму: Период бесконечной дроби N/M по основанию P
А вот потом начинается самое интересное: при заполнении массива Ar просто просматриваем последние N заполненных ячеек (где N = длине периода), и если их содержимое совпадает с самим периодом - то все, заканчиваем цикл, и распечатываем значения... Программу для проверки этого способа я написал, конечно, ее не покажу, но способ работает. Вот результаты прогона для дробей 1/7, 1/3, 2/3, 2/7, 7/30 и 3/8 соответственно (сначала печатается только период, а потом- результат): Running "f:\vlady documents\programs\pas\__drb.exe a.txt a2.txt" |
hiv |
16.03.2007 15:14
Сообщение
#6
|
Профи Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: 11 |
Начал писать прогу - volvo как всегда опередил...
Спасибо ему за ссылку, если бы я раньше выложил, код был бы неправильный! и если их содержимое совпадает с самим периодом - то все, заканчиваем цикл, и распечатываем значения... Вот этого я не понял...Я делал так - сравнивал последний полученный остаток со всеми остальными, полученными ранее - если совпадает, то найдена периодичность. Вот код: Спойлер (Показать/Скрыть)
-------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
volvo |
16.03.2007 15:20
Сообщение
#7
|
Гость |
Цитата Вот этого я не понял... Я вот так делал:Спойлер (Показать/Скрыть)
|
Bard |
16.03.2007 17:01
Сообщение
#8
|
Учиться, учиться еще раз учиться Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: 3 |
Volvo,извини но я не понял что твоя прога вычисляетjava script:add_smilie(":!4:","smid_46")?почему что не вводишь она всегда выдает 3 и 2.(3)?
-------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
volvo |
16.03.2007 17:14
Сообщение
#9
|
Гость |
А ты убери строку
a := 7; b := 30;, иначе у тебя всегда будет вычисляться 7/30, независимо, от того, что ты введешь... |
hiv |
16.03.2007 17:20
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: 11 |
-------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
Bard |
16.03.2007 17:23
Сообщение
#11
|
Учиться, учиться еще раз учиться Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: 3 |
А ты убери строку a := 7; b := 30;, иначе у тебя всегда будет вычисляться 7/30, независимо, от того, что ты введешь... Спс я понял... -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
Текстовая версия | 28.04.2024 7:20 |