Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 27.04.2019
Сообщений: 113

Pascal: программа для решения диофантового уравнения, нужен совет по реализации

01.10.2019, 20:01. Показов 1030. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код практически написан, однако столкнулся с одной проблемой. Реализую решение через разложение в цепную дробь, на одной из стадии необходимо для ответа найти P(k) и Q(k), как же можно написать код, чтобы допустим взять (как по формуле) P с индексом (k-2)?
Пытаюсь реализовать через цикл while, но что-то безуспешно :/
Вот сюда хочу закинуть таблицу подходящих дробей, чтобы на выходе получить те самые P и Q.
Pascal
1
2
3
4
5
6
7
8
9
10
11
write('Разлагаем в цепную дробь ',a1,'/',b1,'=['); 
r:=1; write (a1 div b1,','); P= a1 div b1;
while r>0 do 
   begin 
   m:=m+1; r:=a1 mod b1; q:=a1 div b1; a1:=b1; b1:=r;  
   if b1<>0 then 
    if (a1 mod b1<>0) then write(a1 div b1,',')
    else
   else write(q,']',' и находим ');
   end;
writeln('длину дроби m=',m,'.');
Миниатюры
Pascal: программа для решения диофантового уравнения, нужен совет по реализации  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2019, 20:01
Ответы с готовыми решениями:

Создать класс для реализации методов решения квадратного уравнения (Нужен максимально короткий код)
Нужен максимально короткий код линк использовать можно НА ВСЕ НЕ БОЛЕЕ 25 МИНУТ!!! 1.Пусть требуется создать класс для...

ПО для реализации интерактивных графических моделей. - Нужен совет
Добрый Вечер, Я новичёк в Python и также в ООП. Моя изначальная цель, это создание GUI, который будет выглядеть примерно так: ...

В голову пришла мысля-нужен совет для реализации
В общем товарищи форумчане надумал я одну вещь.Знакомый решил продать свой коматозный Apple Macintosh G4.Не знаю кому,как и с какой целью...

2
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
02.10.2019, 00:16
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
const n=10;
var
  p, q: array [0..n] of Integer;
begin
  ...
  p[0]:=1; p[1]:=a1;
  q[0]:=0; q[1]:=1;
  for k:=2 to ... do begin
    p[k]:=p[k-1]*a+p[k-2];
    q[k]:=q[k-1]*a+q[k-2];
    ...
  end;
Но в вашем случае это будет лишним. На каждом шаге вам нужна всего пара предыдущих значений, достаточно хранить только их:
Pascal
1
2
3
4
5
6
7
8
9
10
11
var
  p, p1, p2, q, q1, q2: Integer;
begin
  ...
  p2:=1; p1:=a;
  q2:=0; q1:=1;
  for k:=2 to ... do begin
    p:=a*p1+p2; p2:=p1; p1:=p;
    q:=a*q1+q2; q2:=q1; q1:=q;
    ...
  end;
1
0 / 0 / 0
Регистрация: 27.04.2019
Сообщений: 113
02.10.2019, 00:32  [ТС]
Вот такой код получился, понимаю что сырой, очень много лишних переменных, но все таки мне важен в моей ситуации результат), как думаете куда можно ваше предложение вместить? Спасибо за помощь!
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
var aa,bb,a_1, b_1,b,c,NOD,r,a1,b1,c1,q_1,m,x0,y0,x,y,P,Q,P2,P1,Q1,Q2,P0,Q0,a,a__1,b__1,i:integer; 
begin;
writeln('Введите коэффициенты уравнения: ');
write('a = '); read(a); write('b = '); readln(b); write('c = '); readln(c);
 if b>0 then writeln('ДУ: ',a,'x+',b,'y=',c) 
  else writeln('Дано уравнение: ',a,'x',b,'y=',c);
 if a<0 then a1:=a*(-1) else a1:=a;
 if b<0 then b1:=b*(-1) else b1:=b;
c1:=c; m:=0; 
 
// нахождение НОД чисел
 
if a1=0 then NOD:=b1 
  else if b1=0 then NOD:=a1 
   else r:=1;
while r>0 do  
 begin 
   r:=a1 mod b1; a1:=b1; b1:=r;
 end;
NOD:=a1;
 
// проверка на сократимость
 
if c mod NOD >1 then 
 begin;
  a:=a div NOD; b:=b div NOD; c:=c div NOD; 
   if b>0 then writeln('Оно разрешимо и равносильно уравнению: ',a,'x+',b,'y=',c) 
     else writeln('Оно разрешимо и равносильно уравнению: ',a,'x',b,'y=',c);
 end;
 
 if a<0 then a_1:=a*(-1) else a_1:=a;
 if b<0 then b_1:=b*(-1) else b_1:=b;
 aa:=a; bb:=b;
 
// перевод в цепную дробь
 
write('Разлагаем в цепную дробь ',a_1,'/',b_1,'=['); 
r:=1; write (a_1 div b_1,','); 
while r>0 do 
   begin 
   m:=m+1; r:=a_1 mod b_1; q:=a_1 div b_1; a_1:=b_1; b_1:=r;  
   if b_1<>0 then 
    if (a_1 mod b_1<>0) then write(a_1 div b_1,',')
    else
   else write(q,']',' и находим ');
   end;
writeln('длину дроби m=',m,'.');
 
 
// нахождение подходящих дробей
P0:=1; Q0:=0; Q1:=1; r:=1;
 if a<0 then a__1:=a*(-1) else a__1:=a;
 if b<0 then b__1:=b*(-1) else b__1:=b;
 
for i:=0 to m do 
begin;
 
 
 r:=a__1 mod b__1; q:=a__1 div b__1; a__1:=b__1; b__1:=r;  
 
P[i]:=P[i-1]*a[i]+P[i-2];
Q[i]:=Q[i-1]*a[i]+Q[i-2];
 
 
end;
 
 
 
// нахождение x0 и y0
{
x0:=((1)^m)*c*Q^(m-1); y0:=((1)^(m+1)*c*P^(m-1);
writeln('Найдем решение(x0,y0): x0=',x0,' y0=',y0);
 
// нахождение общее решение уравнения
 
writeln(' '); 
writeln('Общее решение уравнения имеет вид: x=',x,' y=',y);
 
 if bb>0 then write('x=',x0,'-', bb div NOD,'t  и  ') 
  else begin;  bb:=bb*(-1); writeln('x=',x0,'+', bb div NOD,'t'); end;
 if aa>0 then writeln('y=',y0,'+', aa div NOD,'t')
  else begin; aa:=ab*(-1); writeln('y=',y0, aa div NOD,'t'); end; 
 
 
}
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.10.2019, 00:32
Помогаю со студенческими работами здесь

Нужен совет для решения задачи
Задача. Написать программу которая читает последовательность слов с стандартного устройства ввода. И находит среди них...

Нужен совет для грамотного решения по организации 1С
Есть торговая организация. Три торговых точки. Первая точка - три рабочих места с УТ, одно с БП. Вторая, третья точки - по одному...

Нужен совет по подбору платы/платформы для решения
Приветствую всех! Подскажете, пожалуйста, какую платформу выбрать для такого решения. Нужна плата (возможно с модулями как на...

Нужен совет для решения задачки*(одномерные массивы)
Дана функция y=5sin(2x+1)+cos(x+1) на интервале от x1 до x2 с шагом h. Сформировать другой одномерный массив из элементов первой “впадины”...

Пустое множество решений диофантового уравнения
Форумчане, доброго времени суток! Подскажите, пожалуйста, как определить что диофантово уравнение ax+by=c, где a,b,c - числа имеет ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru