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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2013, 18:37   #1
Fredy90
Новичок
Джуниор
 
Регистрация: 09.05.2013
Сообщений: 1
По умолчанию Всем добра

Доброго времени суток уважаемые форумчане.. Надежда на вашу помощь. Практическое задание по курсу Теория Чисел

Задание написать программу, переводящую квадратичную иррациональность в бесконечную цепную дробь и обратно. В целом код работает. Но проблема в отображении ответа во втором случае. На выходе у меня получается число(корень из). Если число не целое, мне по хорошему нужно представить его в виде (k+n*корень из L)/d, где k,n,k,d -целые числа, d - не равно нулю и l - не является квадратом целого числа.. В этом загвоздка.

Помогите написать алгоритм, который будет раскладывать число, если оно не целое в вид, описанный выше. (Все это во второй программе). Спасибо.

Да написана в среде Pascal ABC

Код:
var
//Описание переменных
a: array [1..10] of integer; //массив целых чисел
i,n,k: integer; // переменная для цикла
x,z,c: real; // переменные служащие для ввода данных и учавствующие при обработке данных

begin
repeat
writeln('Введите квадратичную иррациональность (без знака корня): ');
//Ввод данных
readln(x);
until frac(sqrt(x))<>0;
repeat
writeln('Введите первое слогаемеое(целое число)');
readln(n);
until (n mod 1) =0;
repeat
writeln('Введите делитель(целое число, не равное нулю)');
readln(k);
until k<>0;
c:=(n+sqrt(x))/k;

//Проверка, квадратичной иррациональности. Если квадратный корень из данного числа является целым числом, то это число не является
//Квадратичной иррациональностью

begin
 for i:=1 to 10 do
 begin
  a[i]:=trunc(c); //Выделение целого, аналогично функции div, но из-за различных типов данных используется функции int и round
                               // служащих для округления
  z:=frac(c);            //Нахождение остатка от округления
  c:=1/z;                      //Переворачиваем дробь
  end;
  writeln('Первые десять чисел бесконечной цепной дроби от числа: (',n,' корень из ', x,')/',k,':'); //Вывод данных
  write('[',a[1],';');
  for i:=2 to 9 do
  begin
  write(a[i],',');
  end;
  writeln(a[10],']');
  end;
  end.
Обратная
Код:
var
a: array[1..10] of real;
b: array[1..10] of string;
i,n,m,k:integer;
c,x,y:real;
begin
b[1]:='первый';
b[2]:='второй';
b[3]:='третий';
b[4]:='четвертый';
b[5]:='пятый';
b[6]:='шестой';
b[7]:='седьмой';
b[8]:='восьмой';
b[9]:='девятый';
b[10]:='десятый';
for i:=1 to 10 do
begin
repeat
writeln('Введите ',b[i], ' член последовательности');
readln(a[i]);
until a[i]>=0
end;
for i:=10 downto 3 do
begin
a[i-1]:=a[i]/sqr(a[i])+a[i-1];
end;
a[2]:=a[2]/sqr(a[2]);
x:=a[1]+a[2];
c:=(sqr(x));
if frac(c)<0.000001 then
begin
c:=trunc(c);
writeln('Квадратичная иррациональность - корень из ',c);
end
else
writeln('Квадратичная иррациональность - корень из ',c);
end.

Последний раз редактировалось Fredy90; 09.05.2013 в 18:40.
Fredy90 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Всем привет) TokkyDog Помощь студентам 0 23.05.2010 12:39