鱼C论坛

 找回密码
 立即注册
查看: 3680|回复: 5

[学习笔记] 结构化程序设计 - 零基础入门学习Delphi 008,009,0012,013

[复制链接]
发表于 2017-6-17 23:06:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2017-6-17 23:26 编辑

为什么一下子把这么多课程放在一起呢,主要是这几节课都是讲述程序结构,虽然视频是将其分散在若干课程中,但笔记还是集中起来更合适。
程序中除了前面我们用到的顺序结构外,还有选择结构和循环结构。任何复杂的程序都可分解成这三种结构。
顺序结构
是最常用的,按照程序的自然顺序自上而下的执行,程序的流程不会发生跳转。即使是选择结构和循环结构中顺序结构也是贯穿其中的。
选择结构
是根据特定的条件来判断执行哪些语句,可以是符合条件执行一些语句,也可以不符合条件执行一些语句。选择结构分为单分支选择结构、双分支选择结构和多双分支选择结构。
<单分支选择结构>
If 条件 then
  语句1/语句体1;
分支后其他语句
如果条件成立执行语句1/语句体1,然后执行其他语句,如果条件成不成立则跳过语句1/语句体1,然后执行其他语句。
<双分支选择结构>
If 条件 then:
  语句1/语句体1
else
  语句2/语句体2;
注意语句2之前都不能有分号。
上述的语句体即复合语句,复合语句用beginend包围,在形式上可看作一个语句。Begin后面没有分号,end后面要有分号。End之前的一个语句可以没有分号,号称严谨的语言,在这里又不严谨了。
<多分支选择结构>
Case 表达式of
1: 语句1;
2: 语句2;
……
n: 语句n;
Else
  语句n+1;
End
表达式必须是整数,字符、布尔、子界和枚举型。语句后要有分号,这与if语句不同,每条语句可以是复合语句。Case语句可以用if语句实现,但反之可能不行,比如嵌套的if语句。
循环结构
循环语句分为whilerepeatfor
<while循环>
While 条件 do
Begin
  语句1;
  ….
  语句n;
end;
while在循环前判断,条件成立便执行
<repeat循环>
repeat
语句1;
….
语句n;
until 条件;
while的差别是至少进入循环一次,循环后再判断,条件成立便下次循环,强调一下为false时循环。不需要beginend来包围。
<for循环>
for 变量:=初值 to(downto)终值 do
Begin
  语句1;
  ….
  语句n;
end;
递增递减值只能为1
在三种循环中可以有breakcontinue语句,break为跳出循环,continue为跳过其后的语句,直接进入下次循环。
举例计算累加1100
  1. //while
  2. var
  3. i,j,s:integer;
  4. begin
  5.   i:=1;
  6.   j:=100;
  7.   s:=0;
  8.   while i <= j do
  9.     begin
  10.       s:=s+i;
  11.       i:=i+1;
  12.     end;
  13. end;

  14. //repeat
  15. var
  16. i,j,s:integer;
  17. begin
  18.   i:=1;
  19.   j:=100;
  20.   s:=0;
  21.   repeat
  22.     s:=s+i;
  23.     i:=i+1;
  24.   until i > j;
  25. end;

  26. //for1
  27. var
  28. i,s:integer;
  29. begin
  30.   s:=0;
  31.   for i:=1 to 100 do
  32.     s:=s+i;
  33. end;

  34. //for2
  35. var
  36. i,s:integer;
  37. begin
  38.   s:=0;
  39.   for i:=100 downto 1 do
  40.     s:=s+i;
  41. end;
复制代码

小甲鱼还讲到了一个调试方法,即在某个语句按F5下断点,当程序执行到断点时停下来,鼠标右键—debug—view cpu可以查看其汇编代码和寄存器的值,再按F8单步执行。不过这里让没学过汇编的我看的一头雾水,只好另想办法,在鼠标右键—debug--add watch at cursor(ctrl—F5),把需要观察的变量名加入,就可在F8单步执行时看到变量变化了。
再说说关系表达式和逻辑表达式
<关系运算符和关系表达式>
关系运算符是对两个表达式比较大小的,返回TrueFalse
  
运算符
  
名称
=
等于
<>
不等于
>
大于
<
小于
>=
大于等于
<=
小于等于
<=
包含于
>=
包含
in
属于
最后3个是对元素操作的,现在暂时不讲。
运算符两边的类型必须一致,优先级相同。
<逻辑运算符和逻辑表达式>
是对布尔变量操作的,返回TrueFalse
  
运算符
  
名称
说明
Not
逻辑非
单目运算符,逻辑取反
And
逻辑与
双目运算符,两个都为TrueTrue,否则为False
Or
逻辑或
双目运算符,两个都为FlaeFalse,否则为True
Xor
逻辑异或
双目运算符,两个不同时为True,否则为False
逻辑运算符优先级为:Not > And > Or / Xor
逻辑运算符与位运算符符号相同,对数值操作时为位运算符,对布尔值操作时为逻辑运算符。
设置程序的图标,菜单:Project—Options…--Application—Icon
如果报错是因为windows的操作系统的数据保护机制。计算机右键属性高级系统设置性能设置数据执行保护,将delphi.exe加入。
程序实例
1.      鱼C霓虹灯V1.0 程序窗口无规则的飘动,字体的大小也在随机变化。
1)  Form1的BorderStyle设置为bsNone,这样窗体就没有标题栏和边框了。
2)  加入Timer控件,设置Interval属性为n,即n毫秒引发一次事件。这里设置为1000,即每秒钟调用一次。
基本程序如下:
  1. procedure TForm1.Timer1Timer(Sender: TObject);
  2. begin
  3.   Label1.Font.Size := 20 + Random(30);
  4.   //随机改变字体大小从20到49,小甲鱼的是Random(50)从0开始过小了。
  5.   Form1.Left := Random(800);
  6.   Form1.Top := Random(600);
  7.   //随机设置窗体左上角的位置
  8. end;

  9. procedure TForm1.FormCreate(Sender: TObject);
  10. begin
  11.   Label1.AutoSize := True;
  12.   //使Label的大小适应字符串所占长和高
  13.   Form1.AutoSize := True;
  14.   //使Form1的大小适应Label所占长和高,即与Label同大小
  15.   //这两个语句也可以在对象观察器中设置
  16. end;
复制代码

这个程序由于没有标题栏,只能在任务栏鼠标右键结束,这里增加个按键事件,有按键时程序就结束了。
  1. procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
  2. begin
  3.   close;
  4. end;
复制代码

2.      鱼C验证系统V1.0
程序很简单,主要的知识点是:
ShowMessage为delphi弹出信息窗口的过程,但其标题为Project名,不可改变,更灵活的是用windows的一个API,MessageBox。
语法是:MessageBox(handle, ‘内容’, ‘标题’, MB_OK)
MB_OK为显示的按钮,当然也可以有其他的,如:
MB_ABORTRETRYIGNORE       The message box contains three pushbuttons: Abort, Retry, and Ignore.
MB_OK      The message box contains one push button:OK. This is the default.
MB_OKCANCEL         The message box contains two pushbuttons: OK and Cancel.
MB_RETRYCANCEL  The message box contains two push buttons:Retry and Cancel.
MB_YESNO        The message box contains two pushbuttons: Yes and No.
MB_YESNOCANCEL  Themessage box contains three push buttons: Yes, No, and Cancel.
小甲鱼还介绍了另一个弹出窗口的过程,MessageDlg,但我按照帮助中的例子编写时报错[Error]Too many actual parameters,不知是什么原因。
3.      霓虹灯V2.0

与V1.0的变化是字体和背景的颜色随机改变,主要利用case语句,先生成随机数,再case随机数,根据其不同设置颜色值。其实利用以后的枚举类型就简单多了。


评分

参与人数 2荣誉 +5 鱼币 +12 贡献 +3 收起 理由
小甲鱼 + 7 支持楼主!
朝闻夕死 + 5 + 5 + 3 热爱鱼C^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-8 08:53:32 | 显示全部楼层
辛苦版主了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-12-4 21:23:52 | 显示全部楼层
支持学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 20:49:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-6 21:42:11 | 显示全部楼层
谢谢版主,帮助很大!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-22 14:43:19 | 显示全部楼层
版主 霓虹灯那个TForm1.FormCreate(Sender: TObject)和TForm1.FormKeyPress(Sender: TObject; var Key: Char)是手写的还是可以通过像按钮一样双击自动生成的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 10:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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