IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Длина периода 1/n
Artem7
сообщение 4.04.2012 14:46
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 54
Пол: Мужской

Репутация: -  0  +


Никак не могу придумать по которому бы определялось длина периода 1/n (n любое число)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 4.04.2012 15:06
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Попробую угадать, что требуется.
f := 0;
while f < 1 do begin
...
f := f + 1/n;
end;


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 4.04.2012 17:01
Сообщение #3


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Похоже, требуется узнать период числа 1/n записанного в виде десятичной дроби. Скажем, для n = 7 период равен 6, ибо 0.(142857), для n = 11 - двум, ибо 0.(09), и так далее. Выкладывалось на форуме точно, Artem7, напрягай поиск.

Сообщение отредактировано: IUnknown - 4.04.2012 17:01
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Artem7
сообщение 4.04.2012 17:37
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 54
Пол: Мужской

Репутация: -  0  +


Поюзал ничего подобного не нашёл(((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 4.04.2012 18:05
Сообщение #5


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Значит, неправильно использовал поиск. "+длин* +перио*" выдает всего десяток результатов (пройтись по всему десятку можно было вполне, это не сотня страниц результатов), четвертый сверху - тот, который я имел в виду: дроби
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Artem7
сообщение 4.04.2012 18:30
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 54
Пол: Мужской

Репутация: -  0  +


Цитата(IUnknown @ 4.04.2012 18:05) *

Значит, неправильно использовал поиск. "+длин* +перио*" выдает всего десяток результатов (пройтись по всему десятку можно было вполне, это не сотня страниц результатов), четвертый сверху - тот, который я имел в виду: дроби

спасибо)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Artem7
сообщение 5.04.2012 5:03
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 54
Пол: Мужской

Репутация: -  0  +


А это реализовать можно как нить попроще? а то мы ещё до массивов не дошли(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 5.04.2012 9:59
Сообщение #8


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Вот тут посмотри , никаких массивов (правда, придется чуть-чуть подкорректировать, там находится сам период, а не его длина, но как найти длину, думаю, разберешься...)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Artem7
сообщение 5.04.2012 10:41
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 54
Пол: Мужской

Репутация: -  0  +


Цитата(IUnknown @ 5.04.2012 9:59) *

Вот тут посмотри , никаких массивов (правда, придется чуть-чуть подкорректировать, там находится сам период, а не его длина, но как найти длину, думаю, разберешься...)

Спасибо щас бум разбераться)))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Artem7
сообщение 5.04.2012 11:07
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 54
Пол: Мужской

Репутация: -  0  +


Что то я не совсем понял как работает твой код не мог бы ты объяснить?!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Artem7
сообщение 5.04.2012 13:00
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 54
Пол: Мужской

Репутация: -  0  +


Вот сделал так чтоб длину периода находило
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.


Сообщение отредактировано: Artem7 - 5.04.2012 13:16
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 5.04.2012 13:22
Сообщение #12


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
Что то я не совсем понял как работает твой код не мог бы ты объяснить?!
По ссылке, которую я давал там, в теме "дроби", ходил? Там есть объяснение алгоритма. И для случая 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.
И не надо отказываться от констант. Переменные ни разу не лучше.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 5.04.2012 13:27
Сообщение #13


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Зачем приплетены строки? Зачем хранить дробь? Что, в моем коде есть где-то работа со строками, где-то хранится вещественное значение? Нет этого.

Это для универсальности. Задел на будущее.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Artem7
сообщение 5.04.2012 13:36
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 54
Пол: Мужской

Репутация: -  0  +


Да сперва что то замутил не то, а потом замутил нормально...а вещественную дробь храню чтоб было срау видно что считает правильно, мне же её сдавать надо будет)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 5.04.2012 13:39
Сообщение #15


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
чтоб было срау видно что считает правильно
Для этого не обязательно хранить информацию, достаточно ее отобразить (выведи на печать значение m/n и всё, зачем это запоминать?). Пойми, чем меньше у тебя в программе переменных и действий с ними - тем меньше вероятность совершить ошибку.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Artem7
сообщение 5.04.2012 14:55
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 54
Пол: Мужской

Репутация: -  0  +


Цитата(IUnknown @ 5.04.2012 13:39) *

Для этого не обязательно хранить информацию, достаточно ее отобразить (выведи на печать значение m/n и всё, зачем это запоминать?). Пойми, чем меньше у тебя в программе переменных и действий с ними - тем меньше вероятность совершить ошибку.

Учту)ещё раз спасибо)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ronaldkiz
сообщение 11.07.2014 12:17
Сообщение #17


Гость






соглашусь
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 5.11.2024 13:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"