|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.05.2010, 22:40 | #1 |
Регистрация: 08.05.2010
Сообщений: 5
|
представить обыкновенную дробь в виде десятичной
нужно было написать модуль для динамичеких списков, который помогает решить данную программу на паскале, я написал модуль и программу, помогите исправить ошибку, так как программа указывает период не верно
|
19.05.2010, 22:43 | #2 |
Регистрация: 08.05.2010
Сообщений: 5
|
модуль
unit idz4unit; interface type tc=integer; tLink=^tfrac; tfrac=record inf:tc; next:tLink; last:tLink; end; procedure createnew(var sp:tfrac); procedure IncludeInEnd(el:tc; var sp:tfrac); function SearcNth(j:tc; sp:tfrac):tc; implementation {========процедура создания нового списка=============} procedure createnew(var sp:tfrac); begin sp.next:=nil; sp.inf:=0; end; {=========процедура включения нового элемента в конец списка==========} procedure IncludeInEnd(el:tc; var sp:tfrac); var ss:tLink; begin new(ss); {ss^.inf:=el; ss^.next:=nil; sp.last:=ss; } ss^.inf:=el; ss^.next:=nil; if sp.next=nil then sp.next:=ss else sp.last:=ss; end; {===============функция возвращает значение Н-го элемента в списке=======} function SearcNth(j:tc; sp:tfrac):tc; var ss:tLink; i:tc; d:tc; begin if sp.next=nil then SearcNth:=sp.inf else begin ss:=sp.next; while (ss<>nil) and (i<=j) do begin SearcNth:=ss^.inf; ss:=ss^.next; inc(i); end; end; end; end. |
19.05.2010, 22:43 | #3 |
Регистрация: 08.05.2010
Сообщений: 5
|
сама программа
uses idz4unit; var a, b, r, v: longint; rem:tfrac; ss:tlink; i, j, k: integer; fl : boolean; begin rem.next:=nil; new(ss); ss^:=rem; rem.last:=ss; readln(a, b); write(a div b); // целая часть write('.'); r := a mod b; i := 1; rem.inf:=r; {createnew(rem)}; {создаем пустой список} while true do begin // ищем, не встречался ли уже такой остаток fl := false; for j := 1 to i - 1 do if SearcNth(j,rem) = r then begin fl := true; // встречался break; // выходим из цикла end; if (fl) then // есть повтор остатака break; // выходим r := (10 * r) mod b; IncludeInEnd(r,rem); // и делаем деление inc(i); end; // в этом месте программы у нас 1..j-1 - предпериод, а j..i-1 - период v := a mod b; // собственно тут вывод предпериода for k := 1 to j - 1 do begin write(10 * v div b); v := 10 * v mod b; end; write('('); // а тут выводится период for k := j to i-1 do begin write(10 * v div b); v := 10 * v mod b; end; write(')'); writeln; end. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DBGridEh. представить данные из таблицы в виде дерева | yellow87 | Компоненты Delphi | 0 | 19.02.2010 03:56 |
Необходимо представить десятичное число в двоичном виде | Xardas | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 26.01.2008 00:54 |
Как представить в виде цикла? | Борис2 | Компоненты Delphi | 9 | 30.09.2007 14:38 |
преобразование десятичной дроби в обыкновенную и обратно, Delphi | ИгорьОК | Помощь студентам | 4 | 04.04.2007 21:12 |