鱼C论坛

 找回密码
 立即注册
查看: 4861|回复: 6

新人求助,计算类程序数值大后卡死?

[复制链接]
发表于 2017-3-3 20:07:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
   
   各位前辈高手,写了个数值计算程序,发现输入的数值过大就会出错或程序卡死,请问是什么原因?(见附件程序及源码)

  


附上源码:

  unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Label3: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    procedure Button1Click(Sender: TObject);
     private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Num:Array of Integer;
sl,s,i,max,max_i:Integer;
begin
  sl:=StrToInt(Edit2.text);
  s:=StrToInt(Edit1.Text);
  SetLength(Num,sl);
  For i:=1 to sl do
  begin
   Edit4.Text:=Edit4.Text+IntToStr(s)+',';
  Num[i]:=s;
  s:=s+1;
  While( Pos(Edit3.Text,IntToStr(s)) >0 ) do   //Pos:取出子串在父串中第一次出现的位置
   begin
    s:=s+1;
   end;
   While( Pos(Edit7.Text,IntToStr(s)) >0 ) do   //Pos:取出子串在父串中第一次出现的位置
   begin
    s:=s+1;
   end;

  end;

  max:=Num[1];
  max_i:=1;
   For i:=2 to sl do
     begin
      If (max < Num[i]) then
      begin
      max:=Num[i];
      max_i:=i;
      end;
      Edit5.Text:=IntToStr(max);
      Edit6.Text:=IntToStr(max_i);
     end;

end;
end.
QQ图片20170303200622.png
QQ图片20170303200625.png

打码求号.zip

168.27 KB, 下载次数: 0

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-3 21:10:23 | 显示全部楼层
是不是数值大小有限制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-4 08:10:44 | 显示全部楼层
新手·ing 发表于 2017-3-3 21:10
是不是数值大小有限制

试过把变量基类Integer换成LongInt,Int64,结果还是一样!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-1 11:31:21 | 显示全部楼层
写法不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 13:04:54 | 显示全部楼层
调试看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-14 17:41:10 | 显示全部楼层
While( Pos(Edit3.Text,IntToStr(s)) >0 ) do   //Pos:取出子串在父串中第一次出现的位置
   begin
    s:=s+1;
   end;

两个while语句, 改成if。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-14 17:42:04 | 显示全部楼层
用循环语句,又不设置跳出的条件,无限循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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