免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: OwnWaterloo
打印 上一主题 下一主题

[C] 思考题:语言是工具?重要是思想?那如何表达思想?(修改版) [复制链接]

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
71 [报告]
发表于 2011-10-26 17:09 |只看该作者
咳咳,最近去了三亚…………

我觉得吧,OW这个问题就不公平。为什么这些功能需要“函数”实现?为什么这些函数需求如此明确,只差问号所在地了?这样明显是在偏袒某种设计,换言之,你的语言已经将思想引入了死胡同。关键在于你想做什么,而不是你需要什么函数。函数是实现功能的部件,然而要实现功能并不仅仅只有你提出的这种构架。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
72 [报告]
发表于 2011-10-26 17:11 |只看该作者
回复 68# OwnWaterloo


     什么叫我没有什么兴趣?我都做了一半了,只是里面有些关键点很难实现罢了= =你忘了么……貌似是你没啥兴趣所以才不了了之的吧?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
73 [报告]
发表于 2011-10-26 17:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
74 [报告]
发表于 2011-10-26 17:15 |只看该作者
回复 70# starwing83

居然没有@就把你给招来了……   但是我知道其中原因,你闲得慌的原因,嘿嘿……
你在说哪个? 顶楼的还是后来说coroutine的?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
75 [报告]
发表于 2011-10-26 17:16 |只看该作者
回复 72# starwing83

不是cpp2lua/lua2cpp什么的东西哦?
要我查聊天记录吗?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
76 [报告]
发表于 2011-10-26 17:25 |只看该作者
回复 74# OwnWaterloo


    我说的coroutine。

我最近可不闲啊……只是今天闲而已。前几天可是喝够了水,哎……

谈到设计问题,我觉得最重要的是大局观,就是搞清楚你要的到底是什么。就你这个题目,我可以假设(或者不假设)这就是你经过详细讨论思考以后的,最终的设计方案。在这个(或不在这个)基础上,我们来讨论这个问题。

首先。第一个问题只与中心有关。那么我可以存储一个函数数组,专门用于求某图形的中心:

typedef point (*center_func)(int kind, void* p);
center_func funcs[] = {...};

然后爱咋地咋地了。这是假设你是真的想用这种数据结构求出这些问题的,换言之,数据结构设计成这个样子,有其不得不如此的原因。如果这只是生搬硬套的题目,或者只是想当然的结构设计,我建议可以修改数据结构,比如修改rect的定义,以专门为这种目标来优化(比如,每种图案有个专用的头,存储这个图案的中心)。

第二个问题,这里比较复杂,主要是结构问题。我不假设你是特地为了问题来设计不合适的数据结构了。我们换一种数据结构:这种数据结构将一个图形表示成一个多边形,这个多边形的每条边都是一条直线或者是一条贝塞尔曲线(或者是圆弧,按照你的目的,两者取其一),这样,你的题目就转换成了:设计一个函数,求两个上述定义的多边形的最近两点的距离。这样就是纯粹的算法题了。

注意,你的数据结构是要为你的目的去服务的。为了说明某种功能有用,特地设计不适合这个目的的数据结构,不是思维僵化就是故意刁难。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
77 [报告]
发表于 2011-10-26 17:28 |只看该作者
回复 75# OwnWaterloo


    是啊……可是貌似你很冷淡诶……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
78 [报告]
发表于 2011-10-26 17:40 |只看该作者
本帖最后由 OwnWaterloo 于 2011-10-26 17:41 编辑

回复 76# starwing83

我就是说的今天闲。因为昨天貌似扫到某人的某条状态了……

>> 关键在于你想做什么,而不是你需要什么函数。
我想要的就是single dispatch、 double dispatch以及multi dispatch。
第1个可以在C中比较容易的人肉出来; 而在C++中自动实现。
后面的……  想要人肉都不容易……
C++有提出支持multi dispatch —— 提出人是BS! —— 但没有被C++11采纳……

至于如何提出这个问题,且又不剧透,我已经尽力了……
我给出一些较为具体的东西是为了, 比如 rect 有人会 (top,bottom,left,right) 有人会 (top,left,height,width), 我想避免这种不必要的干扰。
但是,产生误导了?


后面还提到coroutine。
也许我的例子不恰当?
但适合用coroutine、single dispatch与double dispatch解决的问题很普遍的吧?


至于你说的改变shape的定义方式, 请看
你这个是直接把算法改了,和思想语言什么的没有什么关系。再说了,不是所有适合OO的问题都能这么通过改算法一劳永逸的解决的。
MMMIX 发表于 2011-10-26 11:12


你这是纯抬杠啊!

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
79 [报告]
发表于 2011-10-26 17:46 |只看该作者
回复 78# OwnWaterloo


    对于连问题是什么都不明白的人,我一向缺乏耐心……

反正,我对这些东西基本上不感冒。我只是想找出一个完美优雅的方案解决问题而已。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
80 [报告]
发表于 2011-10-26 17:50 |只看该作者
回复 76# starwing83

为什么你这是在抬杠, 我给你举个例子。

问题: 两人相距10km,相向而行;A速度3km/h, B速度2km/h; 在他们出发时有一只蚊子在A处,往B飞; 与B相遇后立即往A飞, 如此往复, 速度5km/h。
问两人相遇后, 蚊子飞了多远?

这问题,确实思路灵活的小学生就可以做出来。
但要求、或者说引导本科生用微积分去解,也不算过分吧?

为了例子尽可能短小以及容易实现,可能确实会被一些巧妙的方法解出来,而显得题目很蛋疼。
这是比较该尬的事情……
但感受到巧妙的成就感后不去思考题目本身想表达的含义,就亏了……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP