Никак не могу придумать по которому бы определялось длина периода 1/n (n любое число)
TarasBer
4.04.2012 19:06
Попробую угадать, что требуется.
f := 0; while f < 1 do begin ... f := f + 1/n; end;
IUnknown
4.04.2012 21:01
Похоже, требуется узнать период числа 1/n записанного в виде десятичной дроби. Скажем, для n = 7 период равен 6, ибо 0.(142857), для n = 11 - двум, ибо 0.(09), и так далее. Выкладывалось на форуме точно, Artem7, напрягай поиск.
Artem7
4.04.2012 21:37
Поюзал ничего подобного не нашёл(((
IUnknown
4.04.2012 22:05
Значит, неправильно использовал поиск. "+длин* +перио*" выдает всего десяток результатов (пройтись по всему десятку можно было вполне, это не сотня страниц результатов), четвертый сверху - тот, который я имел в виду: дроби
Artem7
4.04.2012 22:30
Цитата(IUnknown @ 4.04.2012 18:05)
Значит, неправильно использовал поиск. "+длин* +перио*" выдает всего десяток результатов (пройтись по всему десятку можно было вполне, это не сотня страниц результатов), четвертый сверху - тот, который я имел в виду: дроби
спасибо)
Artem7
5.04.2012 9:03
А это реализовать можно как нить попроще? а то мы ещё до массивов не дошли(
IUnknown
5.04.2012 13:59
Вот тут посмотри , никаких массивов (правда, придется чуть-чуть подкорректировать, там находится сам период, а не его длина, но как найти длину, думаю, разберешься...)
Artem7
5.04.2012 14:41
Цитата(IUnknown @ 5.04.2012 9:59)
Вот тут посмотри , никаких массивов (правда, придется чуть-чуть подкорректировать, там находится сам период, а не его длина, но как найти длину, думаю, разберешься...)
Спасибо щас бум разбераться)))
Artem7
5.04.2012 15:07
Что то я не совсем понял как работает твой код не мог бы ты объяснить?!
Artem7
5.04.2012 17:00
Вот сделал так чтоб длину периода находило
Program dlina_perioda; var m,n,i,j,k,k1,p,dlina:integer; drob:real; begin write('Введите n ');readln(n); m:= 1;p:=10;j:=0;drob:=m/n;dlina:=0; writeln(drob:2:10); write('Длина периода= '); k := 1; while(k <= n) or (j <> m) do begin if k = n then j := m; i := p*m div n; m := p*m mod n; if k >= n then dlina:=dlina+1; k:=k+1; end; Write(dlina); readln; end.
IUnknown
5.04.2012 17:22
Цитата
Что то я не совсем понял как работает твой код не мог бы ты объяснить?!
По ссылке, которую я давал там, в теме "дроби", ходил? Там есть объяснение алгоритма. И для случая M=1 тоже
Цитата
Вот сделал так чтоб длину периода находило
Зачем приплетены строки? Зачем хранить дробь? Что, в моем коде есть где-то работа со строками, где-то хранится вещественное значение? Нет этого. И тебе не надо:
const p = 10; m = 1; var n, i, j, k: integer; len : integer; begin len := 0; n := 7; { <--- или Readln(n); } write(m, '/', n, ' длина периода :');
k := 1; while(k <= n) or (j <> m) do begin
if k = n then j := m; i := p*m div n; m := p*m mod n; if k >= n then inc(len); inc(k);
end; writeln(len); end.
И не надо отказываться от констант. Переменные ни разу не лучше.
TarasBer
5.04.2012 17:27
> Зачем приплетены строки? Зачем хранить дробь? Что, в моем коде есть где-то работа со строками, где-то хранится вещественное значение? Нет этого.
Это для универсальности. Задел на будущее.
Artem7
5.04.2012 17:36
Да сперва что то замутил не то, а потом замутил нормально...а вещественную дробь храню чтоб было срау видно что считает правильно, мне же её сдавать надо будет)
IUnknown
5.04.2012 17:39
Цитата
чтоб было срау видно что считает правильно
Для этого не обязательно хранить информацию, достаточно ее отобразить (выведи на печать значение m/n и всё, зачем это запоминать?). Пойми, чем меньше у тебя в программе переменных и действий с ними - тем меньше вероятность совершить ошибку.
Artem7
5.04.2012 18:55
Цитата(IUnknown @ 5.04.2012 13:39)
Для этого не обязательно хранить информацию, достаточно ее отобразить (выведи на печать значение m/n и всё, зачем это запоминать?). Пойми, чем меньше у тебя в программе переменных и действий с ними - тем меньше вероятность совершить ошибку.
Учту)ещё раз спасибо)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.