摘要: [software development] 需求分析checklist[software development] 需求分析checklistTable of Contents1 Specific Functional Requirements, 功能上的需求2 Specific Non-Func... 阅读全文
posted @ 2014-04-23 13:49 grassofsky 阅读(564) 评论(0) 推荐(0) 编辑
摘要: 软件开发基础软件开发基础Table of Contents1 引言2 软件开发的由来3 软件开发基本组成部份4 类推有助于理解软件开发4.1 软件开发中常用的类推5 软件开发流程图1 引言有多少新人在不同语言, 不同数据类型, 不同的选择, 循环等方式中游走, 一遍遍的书写着片断式的代码, 然后自认... 阅读全文
posted @ 2014-04-23 10:02 grassofsky 阅读(913) 评论(0) 推荐(1) 编辑
摘要: [python 译] 基于面向对象的分析和设计[python 译] 基于面向对象的分析和设计Table of Contents1 原文地址2 引言2.1 译者2.2 作者3 The Analysis of the Simple Game Engine3.1 Write or Draw About t... 阅读全文
posted @ 2014-04-22 10:22 grassofsky 阅读(911) 评论(0) 推荐(0) 编辑
摘要: [emacs] Drawing uml under emacs org-mode using plantUML - 类图 [emacs] Drawing uml under emacs org-mode using plantUML - 类图 Table of Contents 1 准备工作 1.1 阅读全文
posted @ 2014-04-21 16:10 grassofsky 阅读(1885) 评论(0) 推荐(0) 编辑
摘要: emacs: 文本输入中文件目录自动补全 UP | HOME emacs: 文本输入中文件目录自动补全 Table of Contents 1 引言 2 补全过程演示 3 实现代码 1 引言 由于在使用emacs进行文本处理过程以及数据处理的代码编写过程中, 经常需要输入对应的数据所在的目录以及文件 阅读全文
posted @ 2014-04-12 22:58 grassofsky 阅读(1316) 评论(0) 推荐(0) 编辑
摘要: RSA加密数学原理 UP | HOME RSA加密数学原理Table of Contents1 引言2 RSA加密解密过程2.1 加密2.2 解密3 收尾1 引言RSA加密算法,即是目前最有影响力的咬钥加密算法, 他能够抵抗到目前为止已知的绝大多数密码攻击, 已被ISO推荐为公钥数据加密标准.该算法基于一个十分简单的数论事实: 将两个大素数乘十分容易, 但相要对乘积进行因式分解却极其困难, ... 阅读全文
posted @ 2014-04-11 13:07 grassofsky 阅读(605) 评论(0) 推荐(0) 编辑
摘要: 利用python实现,眼睛强制休息的脚本程序, 适用于linux和windows 阅读全文
posted @ 2014-03-25 22:02 grassofsky 阅读(896) 评论(2) 推荐(3) 编辑
摘要: import randomcode_length = 8code_range = range(33,126)code = ''for i in range(code_length) : code += chr(random.choice(code_range)) 阅读全文
posted @ 2013-06-11 16:56 grassofsky 阅读(233) 评论(0) 推荐(1) 编辑
摘要: 问题来源:http://www.pythonchallenge.com/question:已知字符有下列的映射方式K->M; O->Q; E->G,破解一段文字:g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj. an 阅读全文
posted @ 2013-06-10 19:47 grassofsky 阅读(233) 评论(2) 推荐(0) 编辑
摘要: Built-in TypesBoolean假值:None, False, 零(0,0.0,0j),空值('',(),[],{})真值:除去假的,剩下的就是真的了,这是去伪存真科学中很多事情都是除去假的,剩下的就是真的了,但是在现实生活中如果将这么一套非真就假,非假就真的想法拿来运用,很明显会产生各种的不如意.而现实中应该将没有真假,没有对错,有的仅仅是让内心存有一份安宁产生布尔值的操作or(x or y), and(x and y), not(not x)&lt,&lt=,&gt,&gt=,=,!=,is,is notNumeric Typesi 阅读全文
posted @ 2013-06-10 11:02 grassofsky 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 很多时候对于一门语言总是学着学着,就陷入了一种困境,为了这种语言而学习这个语言。从这个时候起,其实你已经走偏了道路。其实,更重要的是思想,一门语言在创造之初,被赋予的思想,只有深刻的理解了这中背后的思想,才能够很好的和它成为朋友。 阅读全文
posted @ 2013-06-10 01:16 grassofsky 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 1. const指针总是指向相同的地址,该地址是不能被改变的. 1: int nValue = 5; 2: int *const pnPtr = &nValue;*pnPtr = 6; 这样的操作是可行的;而 int nValue2 = 2; pnPtr = &nValue2;这样的操作是不可行的。int *const pnPtr 可以这么理解,pnPtr当作地址,该指针有const地址,并且指向一个整型变量。2. 指向const变量(虽然这个变量本身可以不是const的)的指针 1: int nValue = 5; 2: const int *pnPtr = &nVa 阅读全文
posted @ 2012-05-22 20:48 grassofsky 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 摘要:举了几个动态内存分配过程中,发生内存泄漏的例子1. 分配了内存,却没有及时删除,导致泄漏 1: void doSomething() 2: { 3: int *pnValue = new int; 4: }2. 为指针变量分配了一个内存,然后又让指针变量指向其他的值,导致泄漏 1: int nValue = 5; 2: int *pnValue = new int; 3: pnValue = &nValue; // old address lost, memory leak results3. 连续分配了两次内存,第一次分配的内存由于没有delete,... 阅读全文
posted @ 2012-05-22 20:47 grassofsky 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 先来看一下一段代码: 1: char szString[255]; 2: cin >> szString; 3: cout << “You entered: ”<< szString << endl;这段代码在c++程序中是很常见的,但仔细想一下如果你输入的字符串长度大于255,就会出现溢出的现象,也许这个问题通常会被人忽略。其实我们可以选择一个更好的实现方法,如下 1: char szString[255]; 2: cin.getline(szString, 255); 3: cout << "Your entered: 阅读全文
posted @ 2012-05-22 20:46 grassofsky 阅读(211) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/59-random-number-generation/通常在游戏,统计模型程序和科学模拟中会用到随机事件。而由于计算机的本质结构决定计算机只能生成伪随机数据。伪随机生成器,设定一个初始值(seed),对它进行操作形成不同的数值,让它看上去与初始值没有联系。如果算法足够复杂,将同样的算法用到最后生成的数字,这样就能够产生一些列看上去随机的数值。下面是一个产生100个伪随机数的程序:1. 1: #include <stdafx.h> 2: #include <iostream> 3: us 阅读全文
posted @ 2012-05-22 20:45 grassofsky 阅读(293) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/44-type-conversion-and-casting/类型隐式转换类型隐式转换的步骤如下所示:Long double (highest)DoubleFloatUnsigned long intLong intUnsigned intInt (lowest) 最底层是int而不是short或是char,是因为char和short在求值时会被扩展为int。隐式转换会出现一些有趣的问题,如5u - 10。也许你会认为结果是-5.但是10为int型,发生隐式转换成unsigned int型,因此最后结果为uns 阅读全文
posted @ 2012-05-22 20:44 grassofsky 阅读(159) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/38-bitwise-operators/位操作符的由来主要是为了更充分的利用内存,如果使用bool型变量,它是一个字节大小,其中一个字节的内存中只有一个位被利用,其余的位都被浪费了。但是现在内存是充裕的,程序员发现往往将代码表达的更加让人理解,更加容易维护是一种更好的选择。因此,位操作符的使用不再像最初那么平常了,除了一些特殊的环境中,如需要巨型数据处理的科学计算,或需要超速执行的游戏中,仍然会被使用。不管怎么样,对它有个充分的认识和理解还是必须的。OperatorSymbolFormOperationlef 阅读全文
posted @ 2012-05-22 20:43 grassofsky 阅读(263) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/37-converting-between-binary-and-decimal/有符号二进制数最左边一位是符号位,0表示正,1表示负。有符号正数的存储方式与非符号数相同,负数的存储方式是相应的正数求反加1.如-76.其二进制是:0100,1100取逆:1011,0011加1:1011,0100为什么需要加一呢,让我们来看一下0,正数时0000,0000,取逆1111,1111。若不加1,0正负值有两种表述方式,因此通过加1的方式,使得0的表述唯一。 阅读全文
posted @ 2012-05-14 11:29 grassofsky 阅读(484) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/36-logical-operators/逻辑操作符使用的过程中需要注意的有:1. 将&&和||操作符混合使用时,应该清除地认识到两者的优先级是有差异的,&&的优先级高于||的优先级。所以当你需要一个逻辑判断顺序执行时,如 nValue1 || nValue2 && nValue3,因为你忽略了优先级的不同,它实际执行情况将如下:nValue1 || (nValue2 && nValue3)而不是(nValue1 || nValue2) & 阅读全文
posted @ 2012-05-14 11:10 grassofsky 阅读(142) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/35-relational-operators-comparisons/关系运算符的比较需要注意的就是浮点型数值的比较。小的舍入的误差可能会造成预料之外的结果。特别是在比较两个浮点数是否相等的情况下,使用==操作符进行比较就不被建议使用的。一种常用的解决方法是,考虑当两个数足够接近时,就认为它们是相等的。 1: bool IsEqual(double dX, double dY) 2: { 3: const double dEpsilon = 0.000001; // or some oth... 阅读全文
posted @ 2012-05-14 10:49 grassofsky 阅读(176) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/34-sizeof-comma-and-arithmetic-if-operators/sizeofOperatorSymbolFormOperationSizeofsizeofsizeof(type)sizeof(variable)Returns size of type or variable in bytessizeof操作符返回以字节为单位的变量或是类型的大小。如: 1: #include <iostream> 2: 3: int main() 4: { 5: using... 阅读全文
posted @ 2012-05-14 10:36 grassofsky 阅读(209) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/33-incrementdecrement-operators-and-side-effects/一个变量自增1与自减1是如此的平常,以至于在C中它们有了自己的操作符。每一个操作符都有两个版本——前缀与后缀。OperatorSymbolFormOperationPrefix increment++++xIncrement x, then evaluate xPrefix decrement––––xDecrement x, then evaluate xPostfix increment++x++Evaluat 阅读全文
posted @ 2012-05-12 09:08 grassofsky 阅读(266) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/32-arithmetic-operators/一元算术操作符有两种一元算术操作符,+和-。一元操作符只进行一次操作OperatorSymbolFormOperationUnary plus++xValue of xUnary minus--xNegation of x为了获得最好的效果,这些操作符最好与操作对象紧挨在一起(如,-x,不是- x)。不要将一元减操作符和二元减操作符相混淆。如x = 5 - -3;。二元操作符这里有5中二元算术操作符OperatorSymbolFormOperationAdditi 阅读全文
posted @ 2012-05-11 21:27 grassofsky 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 来自:http://www.learncpp.com/cpp-tutorial/31-precedence-and-associativity/为了正确的计算类似下面这样的式子,4 + 2 * 3,我们必须知道操作符做了什么,以及它们执行的顺序,也就是说首先要明白操作符的优先级。使用常规的数学上的优先级规则,我们知道上面的式子可以这么求解 4 + (2 * 3) = 10在C++中,所有的操作符都分配有自己的优先级。具有高优先级的步骤先被计算。你可以从下面的表中看出乘法与除法(优先级序列5)比加减法(优先级序列6)高。编译器通过这些标签确定如何对它遇到的算式求解。如果两个操作符具有相同的优先级 阅读全文
posted @ 2012-05-10 20:55 grassofsky 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 来自:http://www.learncpp.com/cpp-tutorial/210-comprehensive-quiz/快速回顾当使用整型变量时,要注意溢出与整型相除的问题。当使用浮点型时,需要注意精度,舍入,相互间比较的问题。当使用字符时,不要将ASCII和数值搞混,注意溢出整型相除的问题。使用const关键字比使用#define更加安全。选了一个问题:给下列数字给出一个合适的类型:1. 用户的年龄(以年为单位)2. 用户是否想要颜色3. pi(3.14159265)4. 书本的页数5. 股票的价格,两个小数位6. 从出生以来你眨眼数(数量超过数百万)7. 一个人出生的时间,年为单位 阅读全文
posted @ 2012-05-10 20:22 grassofsky 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 原文来自:http://www.learncpp.com/cpp-tutorial/29-hungarian-notation/匈牙利标记法是在命名变量是在变量名的前面加上表示变量类型或是作用域的前缀。 1: int value; // non-Hungarian 2: int nValue; // the n prefix denotes an integer 3: 4: double width; // non-Hungarian 5: double dWidth; // the d prefix denotes a double关于匈牙利标记法在现代程序语言与现代... 阅读全文
posted @ 2012-05-10 10:45 grassofsky 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 原文来自:http://www.learncpp.com/cpp-tutorial/28-constants/C++使用两种常量:字面常量和符号常量。字面常量通过展示几个例子进行说明 1: int x = 5; // 5 is a literal constant 1: unsigned int nValue = 5u; // unsigned constant 2: long nValue2 = 5L; // long constant默认情况下,浮点型字面常量是double类型的。把它们转化成float值,可以通过增加f或F的后缀。 1: float fValue = 5.... 阅读全文
posted @ 2012-05-07 17:20 grassofsky 阅读(316) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/27-chars/尽管char类型是一个整数,相比于整数,我们通常用另一种方式对char进行处理。字符能够存储一些小的数,或是ASCII字符集里的字符。ASCII表示American Standard Code for Information Interchange,它给出了美国标准的键盘与1到127数字之间的关系图。举例,'a'在关系图中的代号为97,'b'98。字符总是放在单引号里。 1: char chValue = 'a'; 2: char chValue 阅读全文
posted @ 2012-05-07 10:55 grassofsky 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 原文来自:http://www.learncpp.com/cpp-tutorial/26-boolean-values/布尔值只有两个可能的值:true(1)和false(0).用bool进行声明: 1: bool bValue;有两种方式进行赋值: 1: bool bValue1 = true; // explicit assignment 2: bool bValue2(false); // implicit assignment正如操作符-能够使得一个正数变成一个负数,逻辑操作符!能够将布尔型值取相反的一个。 1: 2: bValue1 = !true; // b... 阅读全文
posted @ 2012-05-06 23:34 grassofsky 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 原文form http://www.learncpp.com/cpp-tutorial/25-floating-point-numbers/当我们需要存储很大的数值,或有些数字具有小数部分时,可以使用浮点型。一个浮点型的变量能够存储一个实数,如4.0,2.5,3.33,0.1226。有三种不同的浮点数类型:float,double,long double。fload有4个字节,double有8个字节,这些并不是严格不变的。long double是在后来的版本中加入进去的。但是通常上来讲,它也是8个字节大小。浮点型数总是有符号的。下面是一些声明 1: float fValue; 2: d... 阅读全文
posted @ 2012-05-06 08:37 grassofsky 阅读(812) 评论(0) 推荐(0) 编辑
摘要: 原文 from http://www.learncpp.com/cpp-tutorial/24-integers/整型的变量如-1,0,3,4。C++中含有四种不同的整型变量,char,short,int和long。这些整型之间唯一的不同点是它们占有的内存大小,更大的整型能够保存更大的数值。你可以用sizeof操作符查看具体的大小。在这个教程中,我们假设:a char is 1 bytea short is 2 bytesan int is either 2 or 4 bytesa long is 4 bytes声明一些变量: 1: char chChar; 2: short int ... 阅读全文
posted @ 2012-05-04 14:13 grassofsky 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 原文from http://www.learncpp.com/cpp-tutorial/23-variable-sizes-and-the-sizeof-operator/正如你在基本寻址一节中学到的,现代计算机中的内存是有字节大小的片段组成的,每个片段都有属于自己的唯一的地址。基于这一点,我们可以将内容想象成一系列邮件夹或邮箱,我们可以通过它来放置或获取信息,通过命名的变量来与它们相关联。但是,这种类比并不总是合理的,很多的变量通常占据不止一个字节的内存。因此,一个独立的变量也许 会使用2,4或8个连续的内存地址。变量使用的内存的大小取决于变量的类型。幸运的是,我们通常通过变量的名字联系内存 阅读全文
posted @ 2012-05-03 14:38 grassofsky 阅读(353) 评论(0) 推荐(1) 编辑
摘要: C++保留了63个词。这些词被称作关键词,在C++中其中每一个关键词都有自己特殊的意义。15个以*开头的关键词都是在最初的版本后加上去的,因此,早期的参考书或资料也许没有这些关键词。下面是一些列所有的C++关键词:asmautobool *breakcasecatchcharclass constconst_cast *continuedefaultdeletedodoubledynamic_cast * elseenumexplicit *export *externfalse *floatfor friendgotoifinlineintlongmutable *namespace * n 阅读全文
posted @ 2012-05-02 13:47 grassofsky 阅读(827) 评论(0) 推荐(0) 编辑
摘要: http://grass-and-moon.cnblogs.comfrom http://www.learncpp.com/cpp-tutorial/21-basic-addressing-and-variable-declaration/在前面关于变量的课程中,我们已经了解了变量时能够存储一定信息的内存片段的命名。简言之,计算机具有随机存取存储器能够被程序中的变量使用。当变量被声明的时候,一片内存段分配给变量。内存的最小单元是用二进制数表示的,比特,能够存取0和1.你可以把一个比特考虑成传统的灯的开关——当灯开的时候为1,关的时候为0.除了0和1没有别的选择。如果你查看一段内存,你能看到的仅 阅读全文
posted @ 2012-05-01 00:01 grassofsky 阅读(295) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/1-10a-how-to-design-your-first-programs/将原文中的建议提到前面来讲了:{ //begin advise编写程序时的几个建议保持你的程序有一个简单的开始。新手通常对于它们想要编程实现的内容有很大的野心。“我想要写一个角色扮演的游戏,有图像,有声音,随机的怪物和地下城,有一个城镇,你能够访问并卖掉从地下城获取的东西”,如果你从一开始便尝试写一个复杂的东西,是将会被严重的打击到,从而失去信心。相反,将你的第一个目标设置成足够的简单,一些你能够完成的任务。举个例子,“我想要在屏幕 阅读全文
posted @ 2012-04-29 23:19 grassofsky 阅读(500) 评论(5) 推荐(2) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/预处理器是一个独立的程序,在编译器编译你的程序之前运行。这样做的目的是处理指令。这些指令是以#符号开始的,以新行结束而不是以分号结束的特殊的指令。存在几种不同的指令,我们在下面将会谈到。预处理器并不聪明,它不能理解C++语法;但是它在编译器读取之前巧妙的处理了文本。包含你已经看到了#include指令的使用。#include 告诉预处理器把包含的文件中的内容插入到当前指令所在的位置。当你有内容需要在很多不同的地方被调用的时候是很有用的(正 阅读全文
posted @ 2012-04-19 00:41 grassofsky 阅读(316) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/19-header-files/在程序中,.cpp扩展的文件并不是唯一一种常见的文件。另一种文件称为头文件,有时被称为include file。都文件基本都有一个.h扩展名。头文件的目的是将其它文件要用到的声明整合到一起。标准库头文件的使用看一下下面的程序: 1: #include <iostream> 2: int main() 3: { 4: using namespace std; 5: cout << "Hello, world!" << endl 阅读全文
posted @ 2012-04-17 16:38 grassofsky 阅读(369) 评论(0) 推荐(1) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/18-programs-with-multiple-files/当程序变得越来越大的时候,为了更好的组织,通常将它分为多个文件。使用IDE工作的一个优势在于利用它进行多文件项目的实施是很简单的。你已经知道了如何创建编译单文件项目。把新的文件加入到已经存在的项目中是很简单的。在Visual Studio 2005 Express,在解决方案的资源管理器中右键"source files",选择添加新的项目。给出新文件的名称,然后它将会添加到你的项目中。在Code::Blocks中也用类似的方式进 阅读全文
posted @ 2012-04-17 15:20 grassofsky 阅读(239) 评论(0) 推荐(0) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/17-forward-declarations/看一下下面这个表面上正确的add.cpp程序 1: #include <iostream> 2: 3: int main() 4: { 5: using namespace std; 6: cout << "The sum of 3 and 4 is: " << add(3, 4) << endl; 7: return 0; 8: } 9: 10: int add(int x, int y) .. 阅读全文
posted @ 2012-04-17 14:28 grassofsky 阅读(396) 评论(0) 推荐(1) 编辑
摘要: from http://www.learncpp.com/cpp-tutorial/16-whitespace-and-basic-formatting/空白符是被用于格式化的字符。在C++中,空白符主要有空格,制表符,换行。在C++编译器中往往使用一些小的处理将空白符忽略。因此,下面这些语句都是一样的: 1: cout << "Hello world!"; 2: 3: cout << "Hello world!"; 4: 5: cout << "Hello world!"; 6: ... 阅读全文
posted @ 2012-04-17 08:43 grassofsky 阅读(365) 评论(0) 推荐(0) 编辑