Определить длину периода десятичной дроби M/N и период данной десятичной дроби M/N - Pascal
Формулировка задачи:
Даны два натуральных числа M и N, M < N. Определить длину периода десятичной дроби M/N и период данной десятичной дроби M/N.
Как исправить чтоб выходила еще длина?
Листинг программы
- var
- ost,ch:array[1..1000]of integer;
- m,n,n1,i,j,k,konec:integer;
- begin
- readln(m,n);
- m:=m mod n;
- n1:=n;
- write('period=') ;
- repeat
- if n1 mod 2=0 then n1:=n1 div 2;
- if n1 mod 5=0 then n1:=n1 div 5;
- until (n1 mod 2<>0)and(n1 mod 5<>0);
- if n1=1 then writeln(0)else begin
- repeat
- repeat
- m:=m*10;
- until m>=n;
- inc(i);
- ost[i]:=m mod n;
- ch[i]:=m div n;
- m:=ost[i];
- for j:=1 to i-1 do
- if m=ost[j]
- then
- begin
- for k:=j to i-1 do
- write(ch[k]);
- konec:=1;
- end;
- until konec=1;
- end;
- readln;
- end.
Решение задачи: «Определить длину периода десятичной дроби M/N и период данной десятичной дроби M/N»
textual
Листинг программы
- var
- M, N, M0, P, i : Integer;
- aM : array [0..1000] of Integer;
- res,buf: string;
- begin
- ReadLn(M, N);
- //Write(m div n,',');
- str(m div n,res);
- res+=',';
- m:=m mod n;
- aM[0] := 0;
- i:=0;
- M := M * 10;
- repeat
- //Write( M div N,' ' );
- str(m div n,buf);
- res:=res+buf;
- M := M mod N * 10;
- if M > 0 then
- begin
- Inc(aM[0]);
- aM[aM[0]] := M;
- P := 0;
- repeat
- Inc(P);
- until (P > aM[0]) or (aM[P] = M);
- end;
- until (M = 0) or (P < aM[0]);
- //WriteLn;
- if M = 0 then
- WriteLn(res)
- else
- begin
- //Тут начинается костыль
- res+=' ';
- for i:=length(res) downto length(res)-aM[0]+P do
- begin
- res[i]:=res[i-1];
- end;
- res[length(res)-aM[0]+P]:='(';
- WriteLn(res,')');
- end;
- end.
Объяснение кода листинга программы
- Объявляются переменные:
M, N, M0, P, i
- целочисленные переменные.aM
- массив целых чисел размером 1001.res, buf
- строки.
- Считываются значения M и N.
- Вычисляется частное от деления M на N и преобразуется в строку, добавляя запятую к результату.
- Вычисляется остаток от деления M на N.
- Инициализируется массив
aM
и переменные для итераций. - M умножается на 10.
- Запускается цикл, в котором происходят следующие действия:
- Вычисляется частное от деления M на N и преобразуется в строку, добавляя к результату.
- Вычисляется остаток от деления M на N и умножается на 10.
- Если M больше 0, то запускается внутренний цикл:
- Увеличивается счетчик
aM[0]
. - Заполняется массив
aM
значениями M. - Вычисляется P - количество повторений до тех пор, пока P не станет равным aM[0] или aM[P] не станет равным M.
- Увеличивается счетчик
- Проверяется условие выхода из цикла - M равен 0, либо P меньше aM[0].
- Если M равен 0, то выводится результат.
- В противном случае, к строке
res
добавляются пробел и скобка. Затем происходит сдвиг символов в строкеres
и выводится результат вместе с скобкой. - Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д