• c++有理数类

    Forums: 

    img: 

    有理数其实就是分数,p/q形式的数。 c/c++ 虽然有整数,浮点数,却没有内置的有理数表示。 为了练习 c++ 类的书写, me 写了个一个简单的有理数类, 可以实现 + - * / 四则运算。

    写这个小程序完全是为了练手, 熟练 c++ 的使用。+ - * / 的思路都很简单,和平时 me 们手工计算的思路一样, 不过实现需要知道最大公约数 gcd 和最小公倍数 lcm 。 gcd 的求法使用的是众所周知的“辗转相除法”。

    处理 gcd 和 lcm 之外,程序更多的部分是重载 + - * / += -= *= /= 四则运算符, 和流输出 << 运算符, 以及在不够减的时候抛出异常。

    下面的代码仅供参考:

  • 自定义字面量

    Forums: 

    img: 

    字面量 literal 就是诸如 1234 、 0xfe、 3.14 、 2.71828f、 "hello,world"、 'x' 这样的量,这些都是对应类型的书写常量。 在数学或是物理中, 除了整数和浮点数表示外, me 们还常见诸如 1+2i 、32 kg 这样的表示,学汇编的恐怕还熟悉 10110011b 这样的表示(二进制形式)。 本来 c++ 从 c 那里只继承了一些基本类型的一些固有的表示方法,不过 c++11 对于这种功能进行了扩展,也就是 me 们可以自定义一些数据表示形式,比如 1+2i 表示复数, 1011b 是整数的二进制表示。

    c++ 的这种扩展是通过运算符 "" 的重载实现的。下面是一个复数 a+bi 表示的程序 demo :

  • 迭代法求平方根和立方根

    迭代法求值在数值计算中是一种常用的方法,思路也很简单:首先得有一个迭代公式,比如 $$ z = z - \frac{z^2-x}{2z} $$, 然后给一个初值比如 z = 1.0, 然后不断滴代入公式, 然后结果会不断滴趋近于要求的值,这里就是 x 的平方根。 下面是一些求平方根和立方根的迭代公式,这些公式是某些大家一不小心找出来的或是创造出来的,至于肿么找的或是创造的,这不是 me 关心的事,O__O"…

    Newton 算法

    平方根 : $$ z = z - \frac{z^2-x}{2z} $$

    Babylonian 算法

    平方根 : $$z = (z + \frac{x}{z})\cdot\frac{1}{2} $$

    立方根 : $$z = (2z + \frac{x}{z^2})\cdot\frac{1}{3} $$

    Tags: 

  • 手工开平方

    手工开平方

    现在有了计算器就是好,掏出计算器开平方完全不在话下,而且是高精度。比如 windows 下的 $$ \sqrt{3} $$= 1.7320508075688772935274463415059 。不过这里要介绍的是一种手工开平方的方法,可能以后永远都不会用上,但是方法就在那里,会不会不是方法的问题。

    先回顾一下试除法计算商,比如 $$ \frac{71}{3} = $$ ? 对齐位置,比如用 3 去除 7, 试着商 2, 余 1。余数添上后一位变成 11,然后除以 3, 试商 3, 余 2。再添加 0,变成 20, 除以 3, 商 6 ,... 所以,$$ \frac{71}{3} = 23.6... $$

    Tags: 

  • 元编程

    Forums: 

    img: 

    所谓的元编程(metaprogramming),就是编写能够操控其他程序的程序,或是编写编译期就能完成运行期任务的程序。编译器和解释器是前者的典型,而 c++ 的模板元编程是后者的典型。元编程在有些地方可以节省程序员不少时间,因为程序可以是“自动生成”的;有的时候可以提高运行效率,比如编译生成的可执行文件中已经完成了一些低级而耗时的工作;有时候可以提高程序的灵活性。

    能够用来编写元编程的语言叫元语言(metalanguage),也就是它们能够操控其他语言写的程序;被操控的语言叫对象语言(object language)。一门语言可以操控自己的技术叫做,反射(reflection)或是自反, Java、Golang 都提供放射功能。

    元编程一般的工作方式有三种:

  • 在sae上移植drupal7

    本篇文章介绍怎么从 drupal 官网的最新版本 —— drupal 7,进行修改让其可以在 sae 上安装,如果你只对安装感兴趣的话,请直接阅读这篇文章 http://www.lrj.name/node/1

    这里说明一点情况,关于 sae 的 storage 对本地 I/O 的移植代码,不是 me 写的,而是网上搜来的;这里 me 只是负责了整理;

    问题分析

    为神马官网最新的 drupal 7(.xx) 不能直接配置到 sae 上呢?因为 sae 是 sina 的东西,不是咱们的东西,所以,咱们在系统配置和文件创建、写上往往不具有某些权限,即权限问题是 drupal 不能直接安装到 sae 上的主要原因。

    Tags: 

  • 在sae上安装drupal7.19

    drupal 是个很好的 CMS 系统(me 现在对此持怀疑态度,主要是厌倦了它的频繁更新),sae 提供不错的主机服务(其实很垃圾, me 会告诉 u 这就是一个坑么 ! ),将 drupal 安装到 sae 上应该是很多人的想法,当然主要是使用 drupal 的人的想法。u 看到的这个博客系统就是使用的跑在 sae 上的 drupal。Sae 主要是提供主机服务,服务器 Apache、数据库 MySQL 和 PHP 都是提供好的,me 们只需要提交应用代码差不多就可以了。但是有个问题,sae 的主机,me 们往往没有创建和写文件的权限,所以将官网下载的 drupal 直接提交到 sae 上并不能正常安装。

    Tags: 

  • 可变参数模版

    Forums: 

    img: 

    通常 c 或是 c++ 函数的参数个数和类型都是固定的, 比如 int add(int a, int b); 带有两个 int 的参数 a、 b 。 为了处理传递任意个参数的情况, c 提供了一种方式,比如 printf 的方式。 然而 c 的这种方式是非类型安全的,当 me 们 printf("%d", i); 的时候, 编译器么法去检查 i 是否是整数类型;即使它不是, 这里的调用也是能编译通过的。 c++ 当然还可以使用 c 的技术,然而又提供新的处理方法:可变参数的模板, 也就是模板的参数可以任意多。 实际上 c++ 的可变参数模版和 c 的处理可变参数的某些写法有些类似。

    下面是一个 print 的例子, 使用 c++ 书写, 功能就是将传递的参数全部输出。

  • 统计单词个数

    Forums: 

    img: 

    统计单词个数

    这是一个描述灰常简单的题目,就是统计文件中的所有单词,以及出现的次数。这里不考虑标点符号等特殊字符的存在,认为文件中只有一个个的单词。题目说简单比较简单,就是统计一个文件中的单词数目,说复杂可能复杂些,比如单词数目很多,就应该考虑效率的问题;再者想象一下如果有成千上万个文件,这个时候的思路跟一个文件的思路就又大不一样勒。

    简单做法

    现在考虑简单的情形,统计一个文件中的单词数目。me 们线性组织一个单词薄,然后扫描文件;对于每个单词,首先在单词薄中顺序查找,如果找到那么对应的单词数目加 1,如果没有找到,在单词薄中添加一个新的单词并且数目置为 1 ,直到文件中的所有单词扫完。下面的程序就是采用这个思路,从 input.txt 中读取单词,统计,最后再对单词进行排序,然后按字母表顺序输出。

  • 为学

    为学

    清 彭端淑 《为学一首示子侄》

    天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。

    吾资之昏,不逮人也,吾材之庸,不逮人也;旦旦而学之,久而不怠焉,迄乎成,而亦不知其昏与庸也。吾资之聪,倍人也,吾材之敏,倍人也;屏弃而不用,其与昏与庸无以异也。圣人之道,卒于鲁也传之。然则昏庸聪敏之用,岂有常哉?

    蜀之鄙有二僧:其一贫,其一富。贫者语于富者曰:“吾欲之南海,何如?” 富者曰:“子何恃而往?” 曰:“吾一瓶一钵足矣。” 富者曰:“吾数年来欲买舟而下,犹未能也。子何恃而往!” 越明年,贫者自南海还,以告富者,富者有惭色。

    西蜀之去南海,不知几千里也,僧富者不能至而贫者至焉。人之立志,顾不如蜀鄙之僧哉?是故聪与敏,可恃而不可恃也;自恃其聪与敏而不学者,自败者也。昏与庸,可限而不可限也;不自限其昏与庸,而力学不倦者,自力者也。

    Tags: 

Pages