注册 登录
编程论坛 C++教室

[开源]C++版联合程序制作一 算法演示

myajax95 发布于 2006-06-25 14:28, 3573 次点击

09/01更新:
准备继续增加算法演示的功能。这回准备增加一个排序的算法演示,可以比较bubble sort(冒泡)和qsort等N种算法的效率。图形单部演示。在主菜单上用户可以选演示什么算法。这当中包含了最近在C++/VC++区讨论过的N个问题:qsort,partition,递归,SDI分割两个区域来回切换界面,CListCtrl等等。大家谁有兴趣一起作,业可以复习一下这些东东。同时可以让自己的程序风格更标准一点。



06/24程序
目前参加人员:
组长: aogun
参加者(to 06/24/06) aogun, woodhead, myajax95
version 1.0

只有本站会员才能查看附件,请 登录

这是我结合woodhead的程序和aogun的建议写的一个基本框架。程序能演示10层以内的所以操作。
还有很多需要修改的地方,欢迎大家加入或者帮忙查错。



[此贴子已经被作者于2006-9-2 15:40:26编辑过]

49 回复
#2
stylev2006-06-25 16:23
  support
#3
woodhead2006-06-25 16:44
做出来了,
分步演示,用递归算法反而添麻烦了,没想到。
#4
myajax952006-06-25 16:47
分步演示用的也是递归算法呀。
#5
woodhead2006-06-25 16:56
这个我知道了,我看的不太懂,感觉分步演示每一步都是从头运行到要演示的那步,是吗?
#6
woodhead2006-06-25 19:21


忘了先支持一下。
以后再upgrade。
#7
myajax952006-06-25 22:39
以下是引用woodhead在2006-6-25 16:56:38的发言:
这个我知道了,我看的不太懂,感觉分步演示每一步都是从头运行到要演示的那步,是吗?

对,反正才几百次运算,不怎么花时间。

#8
song42006-06-26 10:01

哎,一定要加快步伐
#9
wfpb2006-06-26 11:58
哎,看你们写的都是MFC代码啊,我在看这快地方在,先看几天再跟着你们"爬"吧 ~呵呵!
#10
myajax952006-06-26 12:34
以下是引用wfpb在2006-6-26 11:58:28的发言:
哎,看你们写的都是MFC代码啊,我在看这快地方在,先看几天再跟着你们"爬"吧 ~呵呵!

写算法的那段程序和你写的几乎一样。只是开始我误以为塔可能前后都进(其实不需要),所以用了deque,而你用了vector。

#11
myajax952006-06-26 12:36
下面想写下半个窗口的程序代码显示。打算把代码存在一个text文件中,可以如果我不写installshield的话这个路径怎么找,暂时还没想出太好的主意。
#12
wfpb2006-06-26 13:07
打算把代码存在一个text文件中.
在第一次运行时(以后就不用拷贝),可以再在一个指定的路径下拷贝这个text文件(创建一个副本),然后这个指定的路径就是要找的路径.
#13
aogun2006-06-26 14:49

可以把代码直接读取存放到演示程序的最后,并做一个标记,然后演示程序中演示时读取程序的最后,根据标记来判断是否有演示代码,如果有则读取并显示,这样程序就还是一个单一的可执行文件,比较简洁

#14
myajax952006-06-26 16:09
以下是引用aogun在2006-6-26 14:49:49的发言:

可以把代码直接读取存放到演示程序的最后,并做一个标记,然后演示程序中演示时读取程序的最后,根据标记来判断是否有演示代码,如果有则读取并显示,这样程序就还是一个单一的可执行文件,比较简洁

怎么把代码直接读取存放到演示程序的最后?string array?

#15
aogun2006-06-26 16:25

可以不在编译程序的时候进行,在编译完之后用一个程序直接把代码文件写入演示程序后面,这个可以写到post-build命令中

#16
hterryslex2006-06-26 18:35
啥时候我的VC也能到这种水平啊,好羡慕LZ啊
#17
myajax952006-06-27 08:24
以下是引用aogun在2006-6-26 16:25:40的发言:

可以不在编译程序的时候进行,在编译完之后用一个程序直接把代码文件写入演示程序后面,这个可以写到post-build命令中

加在post build event 里面应该就比较充分了,运行是我去找.exe所在的目录下的这个text文件。这周加上这个。

#18
myajax952006-06-27 08:25
以下是引用wfpb在2006-6-26 13:07:20的发言:
打算把代码存在一个text文件中.
在第一次运行时(以后就不用拷贝),可以再在一个指定的路径下拷贝这个text文件(创建一个副本),然后这个指定的路径就是要找的路径.

问题是指定路径不好找,现在基本上想出来怎么解决了。

#19
myajax952006-06-27 08:26
以下是引用hterryslex在2006-6-26 18:35:41的发言:
啥时候我的VC也能到这种水平啊,好羡慕LZ啊

我的水平很烂,跟我们一起写吧,练几个月就差不多了。

#20
wfpb2006-06-27 09:32

我也想参加,只是你们说的语言有时候听不太明白,就好比两个日本人说话,我在旁边干瞪眼(比如post build命令)

#21
aogun2006-06-27 09:56
以下是引用wfpb在2006-6-27 9:32:55的发言:

我也想参加,只是你们说的语言有时候听不太明白,就好比两个日本人说话,我在旁边干瞪眼(比如post build命令)

首先我抗议wfpb将我们比作日本人,虽然只是比作,但是还是让我感觉受到了侮辱和歧视

post build是指编译完之后的添加指令,可以在Project->Settings->Post-uild step中添加,该处添加的指令将在编译器做完编译工作后执行

想参加可以直接按照ajax说的开始做啊,不会就问,如果做不出来或者做得不好正好等ajax做好后看ajax做好的代码

#22
myajax952006-06-27 10:07
以下是引用wfpb在2006-6-27 9:32:55的发言:

我也想参加,只是你们说的语言有时候听不太明白,就好比两个日本人说话,我在旁边干瞪眼(比如post build命令)

你的VC修好了吗?如果已经好了,你打开任何一个project,选porject->settings。post build step。在这里你可以写任何bat命令。一般在这里写把生成的dll,exe之类的copy到指定的目录下。这里说把文本文件copy到同一个目录是同样的道理。用VC用多了就熟了。我们作开始的第一个,以后你们考万试了可以在这个基础上作更复杂的,例如什么马踏棋盘之类的演示程序。

#23
myajax952006-06-27 10:08
昏,这回我回的好慢。。。
#24
woodhead2006-06-28 13:35
能自动播放就好了,一下一下按,累。
#25
myajax952006-06-28 23:38
这星期就加。
#26
myajax952006-06-29 11:42
加了很多零零碎碎的小程序。可执行文件也更新了,源程序就不更新了,全作完了之后传上来。
#27
lisypro2006-06-30 13:00

下下来看看能运行不,
以后,需要有几个有报酬的活

#28
baidu2006-06-30 19:40
噢,原来是这样,与我想象中的有点不同
#29
千里冰封2006-06-30 19:57
不错,下载了,支持一下
向楼主学习
学习ing
#30
wfpb2006-07-01 18:32
myajax95:你把两个command的操作搞反了,前面应该是自动,后面才应该是单步啊,还有,应该在自动播放的时候),就不应该再接受点个自动播放的命令了。不然就不叫自动播放了。
一点意见
#31
wfpb2006-07-01 18:42
我MSN老是在,大家都不在,郁闷,想问下,CDynViewSplitter这个类,可以用MFC程序自动生成吗?还是自己写的啊?为什么有3个view类啊?不是只看到代码和图形两个view吗?那个demo view是做什么的啊?是在code和hannuota之下吗?
#32
luoxian_20032006-07-02 11:22

我要仔细研究一下源代码,再发表意见

#33
myajax952006-07-03 06:23
以下是引用wfpb在2006-7-1 18:42:45的发言:
我MSN老是在,大家都不在,郁闷,想问下,CDynViewSplitter这个类,可以用MFC程序自动生成吗?还是自己写的啊?为什么有3个view类啊?不是只看到代码和图形两个view吗?那个demo view是做什么的啊?是在code和hannuota之下吗?

CDynViewSplitter这个类是自己写的,他的功能是把Window切成2半(MFC本身的class也能),同时可以随时更换其中任何一个(不知MFC本身是不是能作这个)。只有两个View是active的,即上面的Hanoi tower view和下面的code view。如果你在加新的算法只需写上面的一个view,然后把算法程序存成text文件,下面的code view自然会显示它。剩下的一个demo view还没有用,我想把他留下来作成页首,显示所有可演示的算法的类表。

#34
myajax952006-07-03 06:27
以下是引用wfpb在2006-7-1 18:32:49的发言:
myajax95:你把两个command的操作搞反了,前面应该是自动,后面才应该是单步啊,还有,应该在自动播放的时候),就不应该再接受点个自动播放的命令了。不然就不叫自动播放了。
一点意见

图标是选的不好,其它功能没什么错,应该再完善一下,一些时候灰掉一些按钮,没什么计数含量,所以没作干净。回头加上它。

#35
wfpb2006-07-03 08:09

我知道这个类的功能,就是不知道怎么写,以为可以自动生成,呵呵

#36
woodhead2006-07-03 09:57
算法2,按规律从上面挪,最小的一个不用判断是不是有比它还小的。
感觉递归象列方程。
直接操作栈象四则运算,一锅粥。

[CODE]#include <iostream>
#include "tower.h"
using namespace std;

void output(tower&, tower&, tower&);
void hnt(tower&, tower&, tower&, int);

int main()
{
int n;
while(cin>>n)
{
tower source('a',n), tmp('b'), dest('c');
output(source, tmp, dest);
hnt(source,tmp,dest,n);
}
system("pause");
return 0;
}

void hnt(tower &source, tower &tmp, tower &dest, int high)
{
// destination select , p[0] source
tower *p[3] = { &source,
(high%2 == 0 ? &tmp : &dest),
(high%2 == 0 ? &dest : &tmp) };

int i=0, prev=2, next=1; // index

while(1)
{
p[i]->move_top_to( *p[next] ); //move 1 from current to next tower
output(source, tmp, dest);

if(dest.size() == high)
break; // finish

i = (i+1)%3; // index + 1
prev = (prev+1)%3;
next = (next+1)%3;

if( p[prev]->size() == 0 )
p[next]->move_top_to( *p[prev] );
else if( p[next]->size() == 0 )
p[prev]->move_top_to( *p[next] );
else if( p[prev]->top() > p[next]->top() )
p[next]->move_top_to( *p[prev] );
else // if( p[a]->top() < p[b]->top )
p[prev]->move_top_to( *p[next] );

output(source, tmp, dest);
}
}

void output(tower &t1, tower &t2, tower &t3)
{
for(int i=0; i<t1.size(); i++)
cout<<t1[i]<<' ';
cout<<'\n';
for(int i=0; i<t2.size(); i++)
cout<<t2[i]<<' ';
cout<<'\n';
for(int i=0; i<t3.size(); i++)
cout<<t3[i]<<' ';
cout<<"\n--------------------"<<endl;
}
[/CODE]
#37
myajax952006-07-03 13:33
楼上的方法不错。
#38
myajax952006-09-02 15:38
准备继续增加算法演示的功能。这回准备增加一个排序的算法演示,可以比较bubble sort(冒泡)和qsort等N种排序。图形单部演示。在主菜单上用户可以选演示什么算法。这当中包含了最近在C++/VC++区讨论过的N个问题:qsort,partition,递归,SDI分割两个区域来回切换界面,CListCtrl等等。大家谁有兴趣一起作,业可以复习一下这些东东。同时可以让自己的程序风格更标准一点。
#39
cosmos2006-09-02 15:41
还是不会vc
#40
myajax952006-09-02 15:43
以下是引用cosmos在2006-9-2 15:41:20的发言:
还是不会vc

人家wfpb已经学的七七八八了

#41
cosmos2006-09-02 15:49
#42
wfpb2006-09-03 11:36

哪里,我还连一个点都没学会,我要参加,不过怕帮不上什么忙

#43
myajax952006-09-05 13:12

争取一两天之内作个框架,正好有人问如何把SDI切成两块再合起来。这个我没试过,先研究一下。

#44
wfpb2006-09-08 16:03

myajax95:
我看你的那个FormTest可以用来做整个程序的大框架啊~!相当于用这个方法来做导航的作用,主view用来描述程序中所有的应用,应用部分的view都有首页这个选项,这样可以把你的汉诺塔和我的贪吃蛇都放进一个程序里了,怎么样?

#45
myajax952006-09-09 07:00
wfpb:
I have no chinese input on this computer, so I have to use english. FormTest application is OK for single view application. but it does not support multiple views with splitter. Need a pretty deep change. The one I posted later supports multiple views with splitter. That might be a good one to start with. I don't think there is any problem of mixing these projects together.
#46
woodhead2006-09-09 10:31
我提议,下次做一个拼音输入汉字的程序。
#47
myajax952006-09-12 13:15
切窗口的部份搞定了,可以单切双,双切单,随便切都可以了。下面整我的ListReport。大家说愿意开始已经可以了。
https://www.bc-cn.net/bbs/dispbbs.asp?boardID=55&ID=85673&page=1
1