delphi中怎么删除数组中的重复数据

zuoleiyongdan 2008-12-31 05:05:59
我现在已经定义了一个字符串数组n,n[122],但是里面有重复的元素,我想把重复的数据剔除掉,写了一个程序,执行没有错误,但是就是删除不了。达人们帮我看下啊

//剔除数组n中重复的数据,并赋值给数组b

b[1]:=n[1];
m:=0;
for i:=1 to 122 do
begin
for j:=1 to m do
begin
if n[i]=b[j] then
begin
break;
end
else
begin
continue;
end;
end;
m:=m+1;
b[m]:=n[i];
end;

...全文
633 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rcyboom 2009-01-02
  • 打赏
  • 举报
回复
使用tlist对象,用他得sort属性排序,然后删除前面得或后面的一截
kernel001 2008-12-31
  • 打赏
  • 举报
回复
var
existflag:boolean;

數組是以Index是以0開始
b[0]:=n[0];
m:=0;
for i:=1 to 122-1 do
begin
existflag:=false;
for j:=0 to m do
begin
if n[i]=b[j] then
begin
existflag:=true;
break;
end;
end;
if not existflag
begin
m:=m+1;
b[m]:=n[i];
end;
end;
kernel001 2008-12-31
  • 打赏
  • 举报
回复
var
existflag:boolean;


b[1]:=n[1];
m:=0;
for i:=1 to 122 do
begin
existflag:=false;
for j:=1 to m do
begin
if n[i]=b[j] then
begin
existflag:=true;
break;
end;
end;
if not existflag
begin
m:=m+1;
b[m]:=n[i];
end;
end;

僵哥 2008-12-31
  • 打赏
  • 举报
回复
var
N: array[0..122-1] of Integer;
i,J,K,Count: Integer;
begin
//仅用于生成测试数据
for I := 0 to Length(N) - 1 do begin
Randomize;
N[I] := Random(3124124);
end;

Count := Length(N);
for I := 0 to Count - 1 do begin
for J := I+1 to Count - 1 do begin
if N[I] = N[J] then begin
K := J + 1;
while K < Count do begin
N[K-1] := N[K];
Inc(K);
Dec(Count);
end;
end;
if J >= Count then Break;
end;
if I >= Count then Break;

end;

end;
函数由一句或多句代码组成,可以实现某个特定的功能。使用函数可以使代码更加易读、易懂,加快编程速度及减少重复代码。过程与函数类似,过程与函数最重要的区别在于,过程没有返回值,而函数能有返回值。   在Delphi 7.0,已为我们定义好了非常多的函数,大致分类有6种:数据类型转换函数、字符串、数组操作函数、文件、磁盘操作函数、内存、指针操作函数、数学运算函数、日期函数。   在Delphi调用函数,一般情况下可以直接使用函数即可,但由于有一些函数未包含在Uses列出的单元(默认单元有Windows,Messages,SysUtils,Variants,Classes,Graphics, Controls,Forms,Dialogs;),所以需要我们手动添加单元。比如,MidStr函数就未包含在这些单元,MidStr所属单元在 StrUtils,因此我们将StrUtils添加Uses即可。   在本手册,凡是未包含在默认列出的单元的函数,都标明了其所属的单元,使用时应当注意。   一、数据类型转换函数   在我们编写程序当,根据不同情况,会使用到多种数据类型。当要对不同的类型进行操作时,必须要将不同的类型转换成同样的类型。因此熟练地掌握数据类型的转换是非常重要的。   1.FloatToStr   功能说明:该函数用于将“浮点型”转换成“字符型”。   参考实例:   Edit1.Text := FloatToStr(1.981);
作者写点废话哈: 1、先是看到手机上有个小游戏,填字游戏,横竖相连,像个迷宫 2、就用Delphi 做了个由 panel 数组 组成的迷宫,墙都是方块,丑死了。 3、再查查网上有不少迷宫样式,其有的迷宫是单墙的,而且任意两处都是想通的。 4、再做了个四面墙都可打通的迷宫,甚至做了个斜线通道的。 5、觉得三角形迷宫更有挑战性,另外想试试以前学的数据结构指针、链表、树、连通图的知识是不是忘光了, 就做了个三角形迷宫,而且索性做成一个完善的 Delphi 控件,而且有不少属性。。。 6、有几个要解释下:1)迷宫是个连通图,每个正三角形与三个倒三角形相连,每个倒三角形与三个正三角形相连; 2)采用递归,从一个节点开始构造整个连通图;3)查找、遍历连通图时用外部二维数组标识来防止重复; 3)构造迷宫采用的是所谓 随机prim 算法;4)迷宫的宽与三角形边长、列数相互制约,迷宫的高由三角形的高 (正三角形的高通过边长计算的)与行数决定;5)使用指针时最容易丢掉 ^ 这个符号,例如某节点是 Pmm 指针型, 对其属性的引用就不能用 Pmm.Value 而必须用 Pmm^.Value ,机器编译时不会提示错误,但运行时老是出错! 6)绘图通过计算三角形的顶点坐标来构造;7)控件父类是 TGraphicControl ,试了好几种最后它最好, 要覆盖 paint 方法绘图;8)构造类时如 FGridWidth 的内部数据与属性 GridWidth 不要混淆使用, 记住 内部数据赋值,属性引用,属性(Published)是给运行期或者设计面板上别人使用的,内部数据是封装的; 9)发布自定义控件前先准备一个包含 类 一样名称的 ICO 的 DCR 文件,好像只有 Delphi7 里的 Image Editor 可以制作,这个工具包括两个文件 ImageEdit.exe 和 ImageD32.dll 两个文件 7、好像前后陆续花了近两个星期吧,终于基本完善了。该学点其他东西了 -- by chenxz
第1章 窗体与界面设计 1 1.1 菜单应用 2 实例001 在系统菜单添加菜单项 2 实例002 带历史信息的菜单 3 实例003 菜单动态合并 4 实例004 像“开始”菜单一样漂亮的菜单 5 实例005 多彩的菜单 6 实例006 可以拉伸的菜单界面 8 1.2 工具栏设计 9 实例007 带背景的工具栏 9 实例008 浮动工具栏 10 1.3 状态栏设计 11 实例009 在状态栏显示检查框 11 实例010 带进度条的状态栏 12 实例011 状态栏加入图标 13 1.4 导航菜单界面 14 实例012 OutLook界面 14 实例013 带导航菜单的主界面 15 实例014 图形化的导航界面 16 1.5 特色程序界面 18 实例015 类QQ的程序界面 18 实例016 类似Windows XP的程序界面 20 实例017 以图形按钮显示的界面 21 实例018 以树型显示的程序界面 23 实例019 以XPManifest组件显示界面 24 实例020 动态按钮的窗体界面 25 1.6 特殊形状的窗体 26 实例021 非矩形窗体 26 实例022 建立字体形状窗体 28 1.7 多媒体光盘 29 实例023 自动启动的多媒体光盘程序 29 实例024 为触摸屏程序添加虚拟键盘 30 实例025 触摸屏系统 31 1.8 窗体效果 33 实例026 半透明渐显窗体 33 实例027 窗口颜色的渐变 34 实例028 带背景的窗体 35 实例029 为窗体增加边框 36 1.9 窗体动画 37 实例030 窗体的滚动字幕 37 实例031 动画显示窗体 38 实例032 制作闪烁的窗体 39 实例033 直接在窗体上绘图 40 实例034 动画形式的程序界面 41 实例035 以时钟显示界面窗体 42 1.10 标题栏窗体 44 实例036 标题栏上的按钮 45 实例037 使窗体标题栏文字右对齐 47 实例038 没有标题栏但可以改变大小的窗口 48 1.11 设置窗体位置 49 实例039 不可移动的窗体 49 实例040 设置窗体在屏幕的位置 50 实例041 始终在最上面的窗体 51 1.12 设置窗体大小 52 实例042 限制窗体大小 52 实例043 获取桌面大小 53 实例044 组件大小随窗体的改变而改变 53 实例045 在窗口间移动按钮 54 实例046 如何实现Office助手 55 1.13 窗体控制技术 56 实例047 在关闭窗口前加入确认对话框 56 实例048 程序在循环响应界面操作 57 实例049 使用任意组件拖动窗体 58 实例050 动态创建窗体和释放窗体 59 实例051 修改提示字体及颜色 60 1.14 其他技术 61 实例052 窗口融合技术 61 实例053 给MDI窗体加背景 62 实例054 如何关闭MDI类型窗体的子窗体 63 实例055 向提示框添加图标 64 第2章 控件应用 67 2.1 TEdit控件应用典型实例 68 实例056 从右至左输入数据 68 实例057 为TEdit控件添加列表选择框 69 实例058 只允许输入数字的TEdit组件 70 2.2 TSpeedButton控件应用典型实例 71 实例059 在TSpeedButton按钮显示图标 71 实例060 折行显示按钮标题 72 2.3 TMemo控件应用典型实例 73 实例061 设置TMemo组件的边界 73 实例062 TMemo组件的光标定位 74 实例063 得到TMemo的可见行数 75 2.4 TListBox控件应用典型实例 76 实例064 在TListBox组件间交换数据 76 实例065 为TListBox添加水平滚动条 77 实例066 将数据数据添加到组合框 78 实例067 借助绑定控件实现数据选择录入 79 2.5 TListView控件应用典型实例 80 实例068 TListView列表拒绝添加重复信息 80 实例069 将数据数据添加到TListView控件 82 实例070 用TListView控件制作导航界面 83 实例071 在TListView控件数据排序或统计 84 实例072 在TListView组件绘制底纹 86 实例073 在列表视图拖动视图项 87 2.6 TTreeView控件应用典型实例 88 实例074 将数据数据显示到树视图 88 实例075 用TTreeView控件制作导航界面 90 实例076 TTreeView组件遍历磁盘目录 91 实例077 TTreeView组件在数据的应用 92 2.7 TStringGrid控件应用典型实例 94 实例078 程序运行时对
这是一个基于Delphi XE2的OpenCL控件。其使用到了Khronos Group Inc.的CL.pas单元。 OpenCL的设计思路和OpenGL类似,对于大部分Delphi的设计者来说,非常不习惯,而且使用起来并不十分方便 设计这个TOpenCL控件的目的不是替代OpenCL的原生使用方式,而是为了开发者能够快速对OpenCL进行应用并且可以 用来测试性能和功能。 使用TOpenCL控件,可以象使用数据库控件那样方便的去调用OpenCL程序,不需要太多代码就可以运行一个OpenCL 的Kernel。这对于学习和深入研究OpenCL的性能有一个很好的铺垫。 使用OpenCL做并行计算的一个主要因素就是提高大数据量计算的速度,这和通常的业务处理类程序大不相同,因 此提升OpenCL的运行效率是至关重要的,本控件附带的Demo程序,是对两个长度分别为8192和32的float数组,进行 一维卷积计算的。在选择不同的数据传递方式(如使用显存还是Host内存、使用只读方式还是可读写或者只写方式), 或者不同的Device(如在多核CPU上和GPU上运行Kernel程序)上运行,其效率相差是非常大的。 Demo程序缺省的使用不显示获取结果的方式运行,缺省的数据传输是使用显存(CPU作为Device的时候,其实还 是系统内存)并Copy数据的方式,因此显示结果始终是0。当输出的参数传递方式改为直接使用系统内存指针的方式时, 不使用显示获取计算结果则是可以得到运算结果的。这些参数之间的差异,读者自行测试并仔细体会,通过调整,相信 可以得到最佳的运行方式。 Demo包含了四个Kernel函数,分别是Convolution_Kernel_With_Barrier。这是一个带有同步函数Barrier的卷积 过程,并在卷积完成后,等待所有单元计算完毕,然后对结果进行微分(差商)处理,实际情况表明Barrier函数对GPU 的影响甚微,但如果使用CPU作为Device计算,则效率影响非常大,其耗时几乎和单核计算不相上下,估计是同步函数 在等候的过程,引起了CPU对Catch竞争访问的结果吧。对这种情况,反倒不如拆分成两个Kernel进行单独计算,其累 积的计算时间基本上为两个独立Kernel耗时只和。 Differ_Kernel是单独进行微分计算的,是为了验证上面计算耗时结果的。 Convolution_Kernel是只进行卷积计算的,可以认为和Differ_Kernel前后执行,其结果应该和Convolution_Kerne- l_With_Barrier单独执行是一样的。 Convolution则是一个简单的计算过程,用来测试启动Kernel、等候数据等操作会占用的时间情况的。 OpenCL其实并不是想象那么美妙,也不是想象的那么复杂,但要使用好OpenCL,就必须认真的对待每个细节, 甚至到每一个函数调用或者if控制等,大家可以参考“http://hi.baidu.com/fsword73”,上面涉及到的很多方面,都是 可以提升Kernel运行效率的。 目前这个TOpenCL控件只是作者为了测试OpenCL运行效率编写的一个小的工具,作为一个测试工具或者技术积累阶段 的工具足矣,但在实际工程,希望还是能够尽可能使用原生的调用方式,控件模式势必会带来一定的性能损失的,这是 无法克服的是一个实际情况,对于某些流式数据处理的计算而言,多次重复使用同一个Kernel对流式数据进行处理的,则 使用本控件应该不会造成太大的性能影响。 目前TOpenCL不支持多个Device同时工作,可以选择CPU、GPU或者APU作为首选设备, X86下运行正常,X64下运行仍有 问题,疑和cl.pas对context等处理的方式不支持X64或者其他原因。 目前支持的OpenCL版本为1.2。控件没有考虑OpenCL和OpenGL协同工作的情况,需要做这方面应用或者测试的读者,请 自行处理。 一下是控件几个主要类的引用关系图。供参考。 由于时间的关系,不可能提供详细的使用说明,往谅解,有问题可邮件与作者联系或者QQ联系。 Mail:18909181984@189.cn QQ:57440981 TOpenCL --| | |--TclKernels --| |--- TclKernel --| | |-- TclK

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧