请选择 进入手机版 | 继续访问电脑版

Lazarus中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

版权申明
查看: 1570|回复: 5

请教问题

[复制链接]

该用户从未签到

发表于 2015-4-15 19:39:36 | 显示全部楼层 |阅读模式
最近,我写了一个程序,不过这个程序到现在都没有完成。
那个程序是有关于使用扩展欧几里得算法求解多元线性丢番图方程,越写越伤脑筋,我想这里又没有范例可以参考。一下就是那个未完成的程序。
  1. PROGRAM EX1;
  2. USES SYSTEM;
  3. TYPE

  4.         RECORD1=RECORD
  5.                 A:INTEGER;
  6.                 NEXT:POINTER1;
  7.         RECORD2=RECORD
  8.                 CONSTANT:INTEGER;
  9.                 MINIMUM_DIFF:INTEGER;
  10.                 NEXT1:POINTER3;
  11.                 NEXT2:POINTER2;
  12.         RECORD3=RECORD
  13.                 ITEM=SET OF INTEGER;
  14.         POINTER1=^RECORD1;
  15.         POINTER2=^RECORD2;
  16.         POINTER3=^RECORD3;
  17. END;
  18. VAR CURRENT_VAR:POINTER1;{factor of lhs}
  19. VAR EXISTENCE:BOOLEAN;
  20. VAR RHS:INTEGER;
  21. VAR SOLUTION:POINTER2;{head pointer of the linked list of the solution}
  22. VAR P:POINTER2;
  23. VAR MULT:INTEGER;
  24. VAR STEP:INTEGER;
  25. VAR TEMP:POINTER2;
  26. PROCEDURE EUCLID(A,B: INTEGER;VAR X,Y,GCD:INTEGER);
  27.         VAR R,Q:INTEGER;VAR C,D:INTEGER;
  28.         VAR PTR:POINTER1;
  29. BEGIN
  30.         IF B=0 THEN BEGIN PTR:=CURRENT_VAR^.NEXT;CURRENT_VAR:=PTR; MVARIABLE(A) END
  31.                 ELSE BEGIN R:=A MOD B; Q:=A DIV B;EUCLID(B,R,X,Y,GCD); END;
  32.         IF EXISTENCE=TRUE THEN
  33.         BEGIN
  34.         C:=Y;D:=X-Q*Y;
  35.         X:=C;Y:=D;
  36.         END ELSE
  37.         HALT();
  38.         GCD:=A;
  39. END;

  40. PROCEDURE SUB1(A,B:INTEGER;VAR P1,P2:POINTER2);
  41.         VAR X,Y:INTEGER; VAR D:INTEGER;
  42. BEGIN
  43.         X:=1;Y:=0;EUCLID(A,B,X,Y,D);
  44.         MULT:=MULT/D;
  45.         P2^.MINIMUM_DIFF:=A/D*MULT;P2^.CONSTANT:=Y*MULT;
  46.         TEMP^.MINIMUM_DIFF:=-B/D*MULT;TEMP^.CONSTANT:=X*MULT;
  47.         STEP:=STEP+2;
  48. END;

  49. PROCEDURE MVARIABLE(GCD:INTEGER);
  50.         VAR P1,P2:POINTER2;
  51. BEGIN
  52.         IF CURRENT_VAR=NIL THEN BEGIN
  53.                 EXISTENCE:=(RHS MOD GCD=0);
  54.                 EXIT();
  55.                 END ELSE BEGIN
  56.                 P1:=P;TEMP:=P1;
  57.                 P2:=GETMEM(SIZEOF (POINTER2));
  58.                 P1^.NEXT:=P2;
  59.                 P:=P2;
  60.                 END;
  61.         IF CURRENT_VAR^.A>GCD THEN SUB1(CURRENT_VAR^.A,GCD,P1,P2)
  62.         ELSE SUB1(GCD,CURRENT_VAR^.A,P2,P1);
  63. END;

  64. BEGIN
  65.         STEP:=1;
  66.         P:=GETMEM(SIZEOF (POINTER2));SOLUTION:=P;
  67.         MULT:=RHS;TEMP^.MINIMUM_DIFF:=0;TEMP^.CONSTANT:=1;
  68. END.
复制代码
回复

使用道具 举报

该用户从未签到

发表于 2015-4-15 22:45:06 | 显示全部楼层
这个真心不会.看上去很厉害....希望有高手能帮帮这位兄弟!
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主 发表于 2015-4-25 14:12:27 | 显示全部楼层
我发现我写程序越写越思维越乱,然后这个程序就没有完成。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-3-1 22:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2015-4-26 09:45:56 | 显示全部楼层
    不知道你啥问题
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主 发表于 2015-4-26 12:18:30 | 显示全部楼层
    帮我写程序
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-1 22:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2015-4-26 18:52:55 | 显示全部楼层
    不懂解方程
    回复 支持 反对

    使用道具 举报

    QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1

    GMT+8, 2019-1-20 22:09 , Processed in 0.043835 second(s), 8 queries , Redis On.

    Powered by Discuz! F1.0 Build 20160930

    © 2001-2019 Comsenz Inc. & Discuz! Fans

    快速回复 返回顶部 返回列表