QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5133|回复: 89

编程大赛(试刊号)——计算器出来啦

[复制链接]
发表于 2003-7-5 23:10:15 | 显示全部楼层 |阅读模式
有人建议组织编程大赛,我就先来出一个题目给大家,作为活动的实验吧。为提高参与性,我出的这个题目相对比较简单,同时也具有一定的应用价值。不知大家对它感不感兴趣。

题目如下:
大家都用过P2P软件吧?这类软件为我们提供了一个分布式文件资源系统,我们可以方便地用它来共享软件、电影、音乐、电子书等等。如果用做分布式协同开发小组,协同开发小组可以不使用集中管理的CVS服务器就可以进行良好地合作。
好了,闲话少说。现在,我们来做一个通信决策程序,现在已经提供一个类CPPComm,封装了UDP协议和数据打包、数据压缩、加密等细节操作,参赛者不需要了解其内部技术细节,只需要设置回调函数指针和调用其方法即可。类的定义如下:
class CPPComm
{
private:
   .....
public:
    int SendMsg(int TargetAddr[4],char * msg);//阻塞模式。成功返回发送的字节数,失败返回0。
  int GetMsg(int FromAddr[4],char * msg);//阻塞模式。成功返回收到的字节数,失败返回0;
  int WriteMsg(int TargetAddr[4],char * msg);//非阻塞模式。成功返回发送的字节数,失败返回0。
  int ReadMsg(int FromAddr[4],char * msg);//阻塞模式。成功返回收到的字节数,失败返回0;   
   void (*OnGotMsg)(int FromAddr[4],char * msg);//收到数据后的响应事件,使用时用自己定义的函数指针设置它。
}
//以上int[4]均为目标主机的IP地址,例如202.101.102.103存储为数组{202,101,102,103}.假设用户的机器都直接和Internet连接,有独立的静态或动态IP.

编程要求:写一个程序,通过调用上面的CPPComm类来模拟P2P软件实现文件共享传输功能(提交共享、搜索文件、下载文件、查询对方资源情况)。可使用但不必编写文件信息索引服务器,只需定义数据和命令格式即可。参赛者主要任务是根据对方机器资源情况和文件存放位置来确定从哪些机器上下载或者自动分布到其他机器上。可以使用也可以不使用多线程。如果需要也可以使用CPPComm的派生类。程序的其他方面设计可以自由发挥。参赛的主题是算法的实现,对有关API不熟者可以使用定义了接口而未实现的类来代替。

欢迎大家讨论和参赛!
发表于 2003-7-5 23:51:44 | 显示全部楼层
hehe, a big one. u homework?      
回复

使用道具 举报

 楼主| 发表于 2003-7-6 17:24:59 | 显示全部楼层
[quote:07f3230ea5="Dragonfly"]hehe, a big one. u homework?      [/quote]
No.Is it big?
Just do it simply.
回复

使用道具 举报

发表于 2003-7-6 19:32:07 | 显示全部楼层
很实用,但工作内容太琐碎,容易让人提不起兴趣。
比如可以用这样的题目:
写一个程序,通过COM口或USB口给一个小电灯供电,并控制:开关、亮度、灯光闪烁模式    ;
写一个程序,实现计算器的基本功能;
写一个程序,在命令行模式下通过菜单提示来实现一些文件管理操作:复制、删除、改名、移动……;
总之,和Linux的关系最好小一点,不需要太多的API或需要的API都好学易懂,这样一些对Linux编程不熟悉的朋友能够上手,但也能学到一些Linux编程知识。
个人观点 ;)
回复

使用道具 举报

发表于 2003-7-6 19:48:59 | 显示全部楼层
whlvme的题有点麻烦

sjinny的1根本不会啊,呵呵
2计算器是简单的计算器,还是函数式的?
回复

使用道具 举报

发表于 2003-7-6 20:31:33 | 显示全部楼层
我觉得这个活动最重要的就是提起大家对编程、特别是在Linux下编程的兴趣。
回复

使用道具 举报

 楼主| 发表于 2003-7-6 20:32:46 | 显示全部楼层
同意計算器。先做簡單計算的,再做函數式的,我那個以後再說。 :-)
回复

使用道具 举报

发表于 2003-7-6 20:55:47 | 显示全部楼层
maybe i think it in a complex way. my stupid, slow brain      
回复

使用道具 举报

发表于 2003-7-6 21:04:47 | 显示全部楼层
我不会gtk,qt也不熟,只能在windows做啊。怎么办啊???
回复

使用道具 举报

发表于 2003-7-6 21:13:32 | 显示全部楼层
在哪做都可以呀,重在参与,呵呵
回复

使用道具 举报

发表于 2003-7-6 22:00:56 | 显示全部楼层
好,这几天我们考试,放假做
回复

使用道具 举报

发表于 2003-7-7 09:21:24 | 显示全部楼层
呵呵 这么个东西 为什么不实现了呢? 我们自己做一个bit torrent 算了(对了 bit torrent 有没有linux的版本?)
回复

使用道具 举报

 楼主| 发表于 2003-7-7 09:27:42 | 显示全部楼层
大家部必考慮界面了,就用命令方式吧。比如計算器,用scanf輸入公式,計算後再printf結果,然後繼續輸入公式;對於PP一題,只需發送簡單的消息就可以了,不必定義複雜的協議,不必考慮文件傳輸等等,只要體現出通信決策算法就可以了。
回复

使用道具 举报

发表于 2003-7-7 13:33:53 | 显示全部楼层
晕,竟然没法上传附件,我把代码贴出来吧:
[code:1]
#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
    double a,b,s=0.0;
    int state=1;
    char m='e';
   
    cout<<"请输入:"<<endl;
    cin>>a;
    s=a;
   
    while(state==1){
        cin>>m;
        switch(m){
                case '=':
                                cout<<"计算结果为: "<<s<<endl<<endl;
                                cout<<"请输入:"<<endl;
                                cin>>a;
                                s=a;
                                continue;
                                break;
                case 'e':
                                cout<<"计算结果为: "<<s<<endl;
                                cout<<"Bye~  ^_^"<<endl<<endl;
                                state=0;
                                continue;
                                break;
                default:
                                break;
        }
        cin>>b;
        switch(m){
                case '+':
                                s=a+b;
                                a=s;
                                break;
                case '-':
                                s=a-b;
                                a=s;
                                break;
                case '*':
                                s=a*b;
                                a=s;
                                break;
                case '/':
                                s=a/b;
                                a=s;
                                break;
                default:
                                break;
        }
    }

  system("PAUSE");       
  return 0;
}
[/code:1]
回复

使用道具 举报

发表于 2003-7-7 13:40:27 | 显示全部楼层
补充,我的程序是在win98里,用Dev-C++编译的
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-15 06:28 , Processed in 0.065723 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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