暑期项目总结

暑期项目总结

项目背景

苹果的成功带来了一系列App开发的高潮。Objective-C也成为现今最流行的一门语言。本次暑期项目我们选择学习Objective-C这门语言,我们认为开始学习阶段应该先从简单入手,所以我们选择通过编写一个有图形界面的高精度计算器来加深我们对Objective-C的认知,一方面项目不会因为难度过大而导致我们难以完成。另一方面计算器是一个很好的平台,可以完成很多有意义的事情,在完成最基本的计算功能后可以很方便的进行功能上扩展,还有就是计算器的实现中可以学到一些新的算法对我们也有帮助。因此我们最后选择用Objective-C来写一个高精度计算器。

软件主要功能

我们的计算器主要特色是高精度,支持高精度浮点数的加减乘除。可以实现多达百位的数字运算。当然运算的精度还可以通过修改代码来进一步提高。

主要算法

目前,一般计算机都提供了符合IEEE754的单精度和双精度的计算。在此标准下, 对于单精度的浮点数,总位数为32位(4 bytes);对于双精度的浮点数,总位数占64位 (8 bytes).如果所计算数值超过以上的规定,则计算机无法表示,也无法计算,因此不能满足科学计算的需要。

另一方面,在一般情况下,对于相对较大或较小的数,可以使用科学数据格式来描述, 如 1.2345E+9 或 1.2345E-9,但这也只是一种近似。例如,对于 1.2345E+9 (=1234500000) 实际的数可能是1234567891。

迄今为止,在计算机领域,已有一些专门的用于实现高精度计算的库程序,如GMP、 MPFR等,另外Matlab等也提供了一些高精度计算的支持。如同使用其他库程序一样, 在使用这些库程序之前,需要按照一定的要求安装库程序。虽然这些库程序的开发为有些高精度的计算提供了方便,但有些计算方法并不是最佳的,还需要继续发展。了解高精度算法有利于独立编写高效率的科学计算程序。

高精度计算技术广泛应用于数论、密码学、天文、气象等科学领域,比如,最常见的非对称加密算法RSA就是以高精度运算为基础的。学习并掌握高精度的计算方法,设计高精度计算程序,可以避免计算硬件精度的限制,提高科学计算的精度。

在高精度计算中,有很多基本细节问题,如数字储存方法、存放顺序以及进制的转换等。在编写计算程序前,需要理清这些问题,只有这样,才能思路清晰。

(一)数据的存储

要设计超精度的计算程序,首先要做的是,如何储存超高精度的数。一般说来,对高精度的数可以使用字符串、数组和链表来储存。

1.使用宇符串

字符串是由一个一个的字符连接而成的,每个字符可以用于保存一个数位单元。可以把一个数字作为字符存放在字符串中,也可以把数字转换成ASCII码来保存。由于每个字符的最大ASCII码的值是255, 因此可以使用256进位制来保存数据。例如,把十进制数值456789变成一个字符串:

(456789)10 =(6,248,85)256 =chr(6)&chr(248)&chr(85)

若把数字作为字符来保存,则在计算时需要进行字符与数值转换。使用这种方法的好处是,能解决小数点的表示问题。

2.使用数组

如同字符串一样,若使用数组来储存超高精度的数,每个数组单元可以作为一个储存单元,并采用进位制的形式来构成一个超高精度数的储存空间。根据数据类型的不同,如单精度、双精度等,进位制的基数可以设置不同。

3.使用链表

这种储存方法与使用数组一样,所不同是使用链表。这种方法的好处是,每节链表可以储存更多的信息,并且可以使用链表的前后指针索引相邻数据。

高精度整数与小数

高精度数据表示

超高精度数包括整型和浮点型,在设计计算程序时,需要确定如何表示符号、整数、小数、小数点以及它们的长度。为了方便,可以定义一个数据结构类型来表示这些要素。

对于超高精度的浮点数,可以把它分解成整数和小数部分,分别进行计算。在计算时,使用不同的数组分别存放浮点数的各个部分。

高精度计算时要做的第一步是,如何把一个数据读入到一个用于表示高精度的数组、字符串中。我们使用字符串读入数据并进行数字的表示。

为了保存高精度数据的信息,首先定义一个表示髙精度的浮点数变量类型 Bigfloat,它也可以用于表示一个整数。在这个数据类型中,成员变量包括数值符号、整数数组及长度、小数数组及长度。虽然整数和小数的存放顺序都是从右到左,然而,整数位置排放需要从数组索引号i=0开始,而小数位置排放是从数组索引号i= nd-l开始。

#define MAXLEN 3000

typedef struct{

int sign; // O正 1 负

int ni; // 整数长度

int a[MAXLEN]; // 整数数字

int nd; // 小数长度

int d[MAXLEN]; // 小数数字

}Bigfloat;

(二)高精度加、减法计算

高精度加、减法计算可以采用传统的算术方法计算。

髙精度加法是最基本的高精度计算,在计算过程中需要注意以下几个问题。

(1)运算顺序:要进行数位对齐,先计算低位,再计算高位。使用字符串输入时它与数组的数字序号相反。

(2)运算规则:同位上的两个数相加,再加上前一个低位的进位,其和除以进制,得到进位;其和对进制的余数,得到本位的数。

(3)最后一位的进位处理:对于整数部分最后的进位,最大长度增加1;对于小数点

部分的最后进位,增加到整数部分。

(4)数据长度:两个相加的数最大长度不大于其中最大长度加1。

高精度减法是加法的反向操作,同样可以使用一个数组来保存差的绝对值,另外增加一个变量来保存计算差的符号。在计算时,先比较减数与被减数的大小,确定其差的符号,再用其中的大数减去小数,得到差的绝对值。

与加法相同,高精度减法也是从低位向高位逐渐进行,若当前数位上的被减数小于减数,则需要借位。根据进制的不同,借位数所表示的大小也不同,例如,100进制的借位所表示的是100。同时,被借位的数位需要减1。

(三)高精度乘法计算

高精度乘法的是高精度除法、乘方和开方等运算的基础,其实现的方法很多,可以直接采用乘法运算,也可以通过变换来进行运算。其中后者可以提高计算速度。

高精度乘法计算基础

由于高精度乘法不同于常规的乘法运算,因此其计算过程有一定的特点。

高精度浮点运算方法

高精度浮点运算可以转换成整数型运算。由于高精度浮点数可以看成是由整数部分与小数部分的组合,因此其乘法可以看成以下3种运算的组合,即整数X整数、整数X小数 和小数X小数。用表达式表示,则为

高精度浮点数 X高精度浮点数 = 整数 X整数 +(整数 X 小数 +整数 X 小数)+ 小数 X 小数 如 1.3 × 2.4 = 1×2 + 0.3×0.4 + 1×0.4 + 0.3×2 = 3.12

2 0.12 0.4 0.6

整数与整数 小数与小数整数与小数整数与小数

对于整数 X整数型运算,所得的结果仍然是整数。

对于小数 X 小数型计算,其运算结果仍然是小数。

对于整数 X 小数型计算,所得到的计算结果是一个浮点数,即可能包括整数和小数。此时,可以使用小数部分的每个单元分别乘以整数部分。这样,对于n位小数,可以得到拥有n个数字的字符串。把第d位乘以整数部分所得到的所有的数字向低位移动d位,则可以得到整数和小数部分的数字位,然后进行求和,即可以得到所需要的计算结果。 高精度与单精度整数相乘

这种乘法运算与髙精度加法类似

高精度与高精度整数乘法

因为当两个高精度整数相乘时,所得到的积的位数最多不会超过最长整数的两倍,所以保存计算结果的变量空间可以设置为最长整数位数的两倍。当i和j初始值从0开始,乘数的第i位a[i]与被乘数的第j位处b[j]相乘时,则其结果可以加入到c[i+j]中,然后再进行进位处理。

整数与小数乘积算法

在不考虑小数点的情况下,先计算整数与每个小数单元中的数字,每次可以得到一个长整数,再根据当前小数单元的位置,确定对这个长整数的缩小位数。第1位小数,缩小10倍(这里以十进制为例),相当于将此长整数整体向右移动1位。同理,对于第n位小数,相当于将此长整数整体向右移动n位。由此,每次计算都可以得到一个确定的整数和小数部分。对这些数值求和,即可以得到整数与小数部分的乘积。

(四)高精度除法计算

与乘法计算一样,计算高精度除法也有很多方法,可以直接进行计算,也可借助其他算法来提高计算速度。

直接进行高精度除法计算

对于髙精度除法,一般也可以分为两种情况来直接计算,一是髙精度与单精度相除:二是高精度与高精度相除。

高精度与单精度除法

在高精度除以单精度数时,从髙位到低位逐位相除。最需要注意的问題是,后一位继承前一位的余数问题。

高精度与高精度除法

对于两个高精度的除法直接计算,一般可用被除数减去除数的高精度来实现,在程序中设置一个计数器,用高精度加法来累加减了多少次即为最后的商。当被除数小于减数时,此时被减数即为余数。

我们的收获

通过编写高精度计算器我们亲身使用Objective-C,亲身感受到iOS开发的魅力,我们的编程能力也在不同程度得到提高。

通过寻找学习高精度计算的算法。我对高精度计算的实现有了更深的理解,我们手上简简单单的四则运算,为了在计算机中实现却需要不小的功夫。单是一个乘法就需要考虑这么多因素。为了提高乘法的性能,我们可以通过利用FFT、FNT等方法加快运算,计算中还可以借助移位运算等改进。而如何存储数据、如何更快的完成计算,如何让计算更准确,如何考虑可能出现的各种错误都有很深的学问,需要我们细细品味与思考。

虽然Objective-C是从C衍生出来的具有C++面向对象特点的一门有趣的语言。在我们接触了C、C++一年之后,我们仍发现在字符串的运用上仍然保留着使用C++提供的输入输出流以及封装好的string类的使用习惯,这使我们在代码的跨平台上花费了很大的精力。与此同时,这也让我们深刻体会到学习一门语言不仅仅要学习它的语法,更需要我们去深入理解的是它的思想,在当今几百门语言供我们选择的情况下,思想才是我们真正需要掌握的利器。

通过对一个实际的应用的测试和代码改进,我意识到以前所了解的代码风格和编码习惯的重要性,对于Objective-C的特性所带来的好处和“奇怪”的错误有了一定的了解。由于Objective-C的设计,很多工作在程序的运行时(Runtime)完成而不是编译链接阶段,这就使很多微妙的错误在编译链接阶段难以发现,而到了运行的时候才感到棘手。这提醒我们做一个有实际意义的应用需要事前良好的规划、事中清晰地思考和事后全面的分析。

我们相信我们在将来的开发中可以写出更好地程序。

我们的不足

尽管经过大一一年的编程学习与实践,我们的编程能力有了很大的提高。通过C++ 的学习,我们对面对对象的编程也有了一定的理解。但是因为初次接触Objective-C初次使用Xcode,我们在编写高精度计算器的过程中还是出现了一些问题,最终编写成的计算器还有很多的不足。一些期望的功能没有实现。像除法效率低下问题、括号问题等。

不管怎样我们还是受益匪浅。

 

第二篇:20xx年度吴家湾社区暑期托管项目总结

20xx年度吴家湾社区暑期托管项目总结 20xx年夏天,洪山区卓刀泉街吴家湾社区在时隔一年之后,再度申请承办了武汉市“小时候*HAPPY house”暑期社区青少年日间托管班,从7月x日至8月x日,在为期四周的项目开展过程之中,在武汉市青少年宫活动指导中心的统一部署和正确领导之下,在洪山区青教办的具体协调和大力支持下,在社区党支部、行政、大学生督导、项目负责人、大学生项目助理、安保同志、专业课程教师的相互配合和共同努力之下,圆满的完成了各项托管任务和要求,为了进一步对于其中的经验体会及时进行归纳小结,给予未来的相关工作提供更好的现实借鉴,现将一个月以来社区托管的工作内容简要总结记录如下:

一、“我与经典读书周”系列。

社区利用既有的图书阅览室、图书漂流点,以及市区青教办专门为此次暑期青少年托管班分发配备的相关图书资源,发动号召并且组织指导前来参加托管班的青少年居民进行好书品鉴和阅读的活动,通过活动的开展,不仅有力树立了社区青少年爱读书和读好书的习惯,而且培养了他们正确的读书方法,比如从情节的品读去体会主人翁或者是作者的写作或者是角色心理、怎样从书籍的精彩内容之中去获取真实的道理、怎样在读书中间提高人生的修为等等,让广大社区青少年涉猎到了很多平时不曾接触到的知识和方法,也为他们更加长远的业余文化生活提供了积极有益的借鉴。

二、“彩绘中国周”系列。

在小时候公司派出的专职美术老师和大学生项目助理的带领之下,通过前期的摸底调研,结合社区青少年美术功底的实际情况,社区托管班利用市区青教办提供的各种美术用具和一些手头上面合适运用的绘画材料为青少年居民开展了有针对性的素描、蜡笔、水彩、彩绘等基础性的美术教学活动,在活动过程之中,让平时不会绘画、不擅长绘画、不喜欢绘画的青少年积累起了对于美术绘画的浓厚兴趣;让平时爱好绘画、具有一定技术功底的青少年进一步增强了在美术方面的水平和实力,最终实现了大家一起为自己的梦想、为我们的中国梦做出了最美丽的勾勒和画卷。

三、“安全自护周”系列。

在大学生项目助理的带领之下,针对于近期内社会上面连续不断发生的诸如未成年女生被猥亵、爆燃事故、食品安全隐患等典型案例,社区托管班有针对性的在青少年群体中间利用通俗易懂的形式、寓教于乐的方法告诉大家如何在自身受到侵害的时候去积极面对、主动自救;如何在危险发生的时候更容易的获得帮助、有效处置;如何在生活之中养成良好的卫生健康习惯,这些简单易行的知识和方法也让青少年居民在未来的成长岁月之中,遇到任何紧急情况或者是盲目状态之下的时候,都能够在第一时间作出迅速和正确反应来应对身边的困难。

四、“城市创建我参与”系列。

社区青少年托管班充分结合武汉市广泛利用“全国文明城市”和“全国卫生城市”的契机,结合青少年居民的年龄和阅历的实际,通过邀请相关的社区志愿者和权威专家传授给了大家在日常生活之中可以领会、可以做到的一些城市创建方面的知识。比如在文明创建板块,对于文明内涵的解读;在卫生城市创建板块,对于卫生城市意义的分析;在城市环境板块,对于生态环境和绿色低碳生活的畅想,都为大家提供了很多的启迪和遐想。通过树立他们的城市主人翁精神来调动他们的参与城市创建的热情和兴趣,去为城市的发展和建设做出自己应有的贡献。

五、“缤纷夏令营”系列。

社区青少年托管班在结束了前面四周的常规活动之后,积极响应上级青教部门的要求,及时对于相关的活动内容和个人表现进行总结,严格结合平时每一位青少年居民在托管班中间的出勤和作为情况,民主集中之后推选出优秀突出的积极分子参加到8月x日由武汉市青教办组织实施的在武汉市青少年宫举办的夏令营活动,按时按量的完成了上级青教部门的交办的组织发动任务。

在一个月的社区青少年托管班的运营之中,社区高度重视、周到安排,充分利用多年来的社区青少年工作积累下来的宝贵基础,以及前年暑期托管班之中的良好经验,并且有力依托社区,尤其是青少年工作阵地的优势资源,持续对于社区青少年开展相关的教育活动,同时收获了理想的效果,当然,其中也多少会有一些不足之处需要在往后的实践工作之中去加以改进完善,同时,作为一个真正有责任心和使命感的托管室,为了我们共同的托管项目在未来能够朝着一个更加向上积极的方向发展壮大,让小朋友真正收益,甚至是让更多的小朋友受益,在此也要向小时候公司和市青教办就托管项目运营之中的一些问题力陈一些建议。一家之言,仅供参考。

首先,在社区托管班的星级评定之中,在人数要求方面和活动要求方面的条条框框是不是可以酌情删减一些,如果一味的生搬硬套,难免会流于形式、虚假浮夸,毕竟托管班的举办是一件方便家长、教育孩子的好事,人数再多、活动再多,关键还是要看含金量有多少;其次,对于大学生项目助理的招募之中,个人认为应该是全市一盘棋,如此既有利于人员把关,也有利于统筹安排,这项工作我觉得前两年就做得比较好,大学生的素质有所保障,可是今年似乎除了硬件配备方面还有一定进步之外,其它的工作都是十分仓促的,包括在申请开办、组织培训、大学生项目助理的分配方面,几乎就是在满打满算的十天之内完成的,有的部分甚至还是各区青教办和社区具体落实的,都是显得十分紧迫的,这不仅是原来的托管班的时候没有发生过的情况,也直接导致了一些托管室开班前期的不必要慌乱。尤其是在大学生主力方面,单就我社区托管室而言,今年的大学生项目助理相对于往届的大学生项目助理,虽然有专业上面的优势,但是基本上面没有服务意识和责任意识,那样的表现对于一个社区的青少年托管来说意义不愧是决定性的。如果不是出于对于上级的信任,我们也会选择清退他们。总而言之,社区托管项目是一个长期而又系统的工程,我们共同的目的也是希望他能够越办越好,那么我们也就需要一起为它尽好每一份责任和义务。

洪山区卓刀泉街吴家湾社区托管室

20xx年x月x日