Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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.
андреич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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