欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    一天学会Free-Pascal.ppt

    • 资源ID:4875555       资源大小:480KB        全文页数:147页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    一天学会Free-Pascal.ppt

    一天学会Free Pascal,制作者:ax_pokl,前言,第一章一向是很重要的,无论你是否学过Pascal语言都请看一下。本教程不是为了NOIP的人写的,本教程不会过多涉及算法。那些脑残学很牛逼的牛群们请立即退散。本教程是为了使那些学了C语言(或其它编程语言)能够瞬间看懂pascal语言程序的人写的。本教程也适合初学者观看。本教程是本人写的第一个教程,吐槽是可以的但吐得太多会伤身体。如果有什么问题,欢迎QQ:395838203。发现任何错别字或程序bug,也请联系:395838203。,目录,目录,第一章 Pascal语言介绍第二章 编译写好的程序第三章 编写简单的程序第四章 子程序第五章 单元库第六章 编译指令第七章 子界和枚举第八章 数组集合文件记录指针附录,封面,第一章 Pascal语言介绍,什么是Pascal?好吃么?Pascal语言是什么语言?什么又是机器语言呢?机器语言都是相同的吗?X86指令集包括哪些指令?什么是计算机程序?汇编语言又是什么傻逼东西?为什么需要Pascal语言?如何让计算机读懂Pascal语言?编译器是如何运作的?,目录,什么是Pascal?好吃么?,Pascal的取名是为了纪念十七世纪法国脑残学家BlaisePascal(不来色帕斯卡)。所以Pascal并不好吃。,program hello_world;beginwriteln(Hello World!);end.,一个好看的Pascal语言程序很可能长得像这样:,第一章,Pascal语言是什么语言?,Pascal语言是计算机程序语言(简称程序语言),使用这种语言不仅能让我们编写计算机程序,例如:Windows操作系统、猜数字小游戏、魔兽争霸3,皮卡丘沙滩排球等等,还可以使我们变得更加脑残。计算机俗称电脑,是一种糟糕物。它通常是一个屏幕,一个鼠标,一个键盘,和一个黑箱子。有时候人们说的计算机仅仅指它的黑箱子。这个黑箱子过去曾经是为了帮助脑残学家研究脑残学才被发明的,它的效果就是帮那些懒惰的脑残学家在研究脑残学时减少运动量。事实上八成的计算机并不能够读懂Pascal语言。计算机只能读懂机器语言,对机器语言作出反应。,第一章,什么又是机器语言呢?,机器语言是一种只有计算机才读得懂的语言,也是计算机唯一能够直接读懂的语言。这种语言只有两个字母:0和1。,人类阅读机器语言时会发生眼残:,第一章,什么又是机器语言呢?,世界上只有个别脑残学家看得懂机器语言,所以我们才需要其它容易看得懂的计算机程序语言来告诉计算机我们要它做什么。机器语言所有的“单词”的集合,叫做计算机的指令集。指令集也就是计算机黑箱子能做的事。,第一章,机器语言都是相同的吗?,有些计算机不仅能够在屏幕上画白点,还可以画红点、绿点和蓝点。不是所有计算机懂得的机器语言都是相同的,它们的能力有高低。通常的家用计算器和笔记本计算机都懂得X86指令集。这是一个古老的通用的指令集,即使是今天大多数计算机都认得它。,第一章,X86指令集包括哪些指令?,1.数据传送指令就是把数据传来传去,比如传给屏幕。2.算术运算指令就是做一些0-255内的简单加减法。3.逻辑运算指令就是做一些傻逼的逻辑运算。4.串指令顾名思义,就是一串一串执行指令。5.程序转移指令就是转移去执行其它的指令。6.伪指令计算机不认识的假的指令-_-!7.其它指令比如空指令,高级指令,等等。原来计算机只会做这些傻逼事情。虽然计算机只能够做这些事情,计算机已经显得足够伟大了。,第一章,什么是计算机程序?,计算机程序(Computer Program,简称程序)是语句的集合。语句是单词的集合。为了编写一个机器语言程序,人类发明了汇编语言。汇编语言的词语是一些英文单词的缩略语和一些数字。每条缩略语和一些数字的组合与机器语言指令相对应。这样,人们就不用书写0和1的机器语言代码了。写完程序后对照书本把英文单词和数字翻译成0、1的代码就能完成机器语言程序了。,第一章,汇编语言又是什么傻逼东西?,事实上,即使有了汇编语言(ASM语言),能够使用英文表达自己的意思,计算机也只能做些很傻逼的事。如果要它在屏幕上输出“你好,妈妈”几个汉字,你也许需要让它发送无数个指令给屏幕让屏幕画很多很多点。于是就诞生了更加高级的语言,比如Pascal语言。,一个经过反编译的EXE程序至少不再是乱码了,第一章,为什么需要Pascal语言?,计算机编程语言分三类:机器语言,低级语言,高级语言。机器语言就是0、1构成的语言。之前我们说的汇编语言就是低级语言,它唯一的好处就是使用了英文作为记注符而不是数字。高级语言就多了,最有名的莫过于C语言了。Pascal语言也算一种,除此之外还有:FORTAN,C+,Java,VB,Delphi,Lisp,prolog,等等。还有一些脚本语言虽然不是编程语言,但是也是计算机语言如:bat,vbs,HTML,asp。,第一章,为什么需要Pascal语言?,正因为机器语言、低级语言可读性差,所以我们需要形如Pascal语言的高级语言来编写程序。一个Windows操作系统的程序代码重达1G,它的代码位于%SYSTEMROOT%System32下包含几亿条指令。即使一个人一秒能够写一条指令,它也一辈子都写不完啊!使用Pascal语言我们可以快速准确方便地书写程序,但是计算机并不能够直接读懂Pascal语言,所以我们需要一样很重要的东西。,第一章,如何让计算机读懂Pascal语言?,编译器(Complier)是一个由某个超级脑残编写出来的机器语言程序,它能够让计算机自动将一个Pascal语言程序转换成机器语言程序。,program hello_world;begin writeln(Hello World!);end.,编译器Complier,囧!,第一章,编译器是如何运作的?,将一个高级语言程序转换成机器语言程序的过程叫做编译。将一个高级语言程序转换成机器语言程序的原理叫做编译原理(感觉像是废话)。例如编译器获得“writeln(Hello World!);”这条语句后就会分析这条语句的语法,然后将得知这条语句其实就是在屏幕上输出一些白点而已,便把需要做的事转换成乱七八糟的东西。编译原理十分复杂,因为要理解人类的语言并非易事,所以只有一些脑残人士才能写的出编译器来。有很多人写过编译器,最有名的莫过于Trubo Pascal编译器,它的Inline-Complie技术曾震惊全世界。,第一章,在哪里能够得到编译器?,当然是网上下载啦!由于Trubo Pascal编译器已经过时,这里推荐Free Pascal编译器:http:/,如果使用的不是Windows32位操作系统,也可以去这里下:http:/www.freepascal.org/download.var不同的编译器理解Pascal语言略有不同,这造就了略有不同的Pascal语言语法(语言是随着时代变迁的嘛)。以后讲到的的Pascal语言语法都是基于Free Pascal编译器的。,第一章,第二章 编译写好的程序,编写你的第一个Pascal程序如何查看程序运行结果?程序出错了怎么办?部分中文计算机用户遇到的问题常用快捷键(请熟记!)大致了解你写的第一个程序编译Pascal程序用到文件的类型调试,目录,编写你的第一个Pascal程序,第一步:打开fp.exe(请确定你已经正确安装了free pascal)然后你会看到形如右边的界面:,第二步:点击File,New然后在蓝色的背景中按照左边的图打字。切记:不可错一字,不可倒一字,不可漏一字,不可多一字!,第二章,编写你的第一个Pascal程序,第三步:按F9开始编译会弹出一个对话框叫你保存。输入hello_world后按Ok。如果正常,此时你会看到如下界面:,第四步:按Ctrl+F9运行程序你会发现屏幕闪了一下,这表示你编译并运行成功了。,第二章,如何查看程序运行结果?,想知道刚才程序做了什么事,你可以按Alt+F5查看,或者点击Debug,User Screen来查看。原来傻逼计算机只是在屏幕上输出了一些白点点。,第二章,程序出错了怎么办?,当你编译了程序后如果有错误,会出现以下提示:这时候你按回车,光标会停在错误出现的后一个字符(没准是下一行)上。你必须修改错误的部分直到程序能够正确编译为止。,如图,最常见的错误莫过于分号漏加。图中的“;”except but“BEGIN”found 意思就是分号漏加了。,第二章,程序出错了怎么办?,在编译的时候出的错叫做编译错误,还有种错误是在运行的时候出错的,叫做运行时错误。比如你让计算机去计算3除以0,语法上是没有错误但是不符合逻辑。不同的错误有不同的出错代码,具体请参见附录里的“Pascal错误码表”。,出错提示中的(2,1)是出错的行数和列数。,第二章,部分中文计算机用户遇到的问题,有时候你家的free pascal看上去像这样:请别紧张,这只是脑残计算机在和你看玩笑。这表现出你家计算机逻辑混乱的另一面。,事实上,出现这种情况是因为你的计算机使用了错误的代码页。你可以建立一个bat脚本输入以下内容后再运行:chcp 437 nulfp.exe,第二章,常用快捷键(请熟记!),Alt+EnterAlt+XF2F3F9Alt+F9Ctrl+F9Alt+F5F8F7 Ctrl+F8Ctrl+F7,全屏退出保存打开编译并连接编译编译连接并运行看结果单步步过运行单步步入运行加断点加跟踪变量,第二章,大致了解你写的第一个程序,program hello_world;程序总是以program和一串英文字母开始单词之间用空格隔开begin程序的语句部分开始writeln(Hello World!);输出一个字符串end.程序总是以end和一个英文半角句号结束大括号里写的都是注释注释会被编译器忽略(*除此之外,你还可以用一个半圆左括号加一个星号和一个星号加一个半圆右括号表示一段注释*)1+1=3/程序结束以后加什么内容编译器/都懒得鸟你,一行内的两根斜杠后面的/内容也会被认为是注释。你甚至还可以用/嵌套的方法/表示这是注释!原来一个pascal语言程序就是这么写的。,栗子:hello_world.pas,第二章,编译Pascal程序用到文件的类型,.pas程序源代码.bak程序源代码的备份.o目标文件(经过编译的源代码).exe编好的程序(经过连接的目标文件).pp单元库文件.ppu经过编译的单元库文件.inc源代码的一部分(头文件),.pas.ppu,.o.pp,.exe,编译,连接,第二章,调试,你可以在学习编写简单的程序以后再来看这一节。调试是一种检查程序运行时错误的重要手段。当你学会了一些编程方法并能够熟练书写程序以后,编译错误已经不再是你畏惧的东西了,但运行时错误将永远陪伴你。世界上最讨厌的事不是程序中有错,而是不知程序的错出在哪里。一个程序编写完以后进行运行。如果运行的结果和期望的不同,那就需要调试修改。,第二章,调试,按F8进行一句一句执行。如果错误出线在某个子程序内,可以按F7进入子程序一句一句执行,F7也会跟进其它文件内的子程序。按CTRL+F7输入变量名称,随时查看变量的值。所有的调试功能都在菜单中的debug中。除了F8和F7以外,你还可以使用F4直接执行到某一条语句后停止。除此之外,使用CTRL+F8添加程序断点以后再用CTRL+F9也是一种可取的调试方法。,第二章,第三章 编写简单的程序,语句和程序段最简单的程序更高级的程序常量和变量关键字和标识符数据类型定义常量和变量操作符运算符,优先级让计算机进行简单的数学运算赋值交换两个变量的值条件让计算机求解一元二次方程循环嵌套猜数字游戏空语句,目录,语句和程序段,一条语句就是一个句子(俗称一句话,-_-!我不知道该怎么解释)。除了begin和end.外,Pascal的每条语句都是以;结尾的。一个程序段就是一段程序,程序段又称为复合语句。程序段是由begin,一些语句和end;构成的。语句的种类可多了,在以后的学习中你将一一接触不同的语句。之前我们能遇到的writeln(Hello World!)是条语句,它其实是调用了SYSTEM单元库中的一个叫做writeln();的过程(过程是子程序的一种)。,第三章,最简单的程序,一个最简单的程序包含一个程序说明和一个主程序段:program program1;主程序说明定义主程序的各种变量和常量begin 主程序段开始writeln(我是一个语句);主程序段内容end.主程序段结束主程序段也是程序段,只不过它结尾的最后一个end是以英文半角句号而非分号结束的。也就是说,pascal语言程序的最后一条语句一定是end.。,第三章,更高级的程序,如果你认为Pascal语言只不过是只能在屏幕上输出“Hello World!”的傻逼语言,那么你就错了,因为其实它还能输出更多东西,比如:“caonima!”。因为,认真你就输了。,program input_output;var s:string;beginreadln(s);writeln(s);end.,栗子:input_output.pas,第三章,常量和变量,虽说魔兽争霸3也只不过是屏幕上的一些白点点,但是要完成魔兽争霸3,我们还需要更多的手段。上面一段程序和hello_world.pas不同的是,它使用了var s:string定义了一个字符串变量。一个变量(或常量)可以用来储存信息,例如一串文字(字符串类型),一个数字(整数类型、实数类型)。貌似只有这些功能。,第三章,常量和变量,使用const关键字来定义常量。使用var关键字来定义变量。var s:string;,中的s就是一个变量,string是它的数据类型(字符串类型)。通过readln(s);语句,我们可以在屏幕里输入一串文字并保存到变量s中,下次就可以直接用writeln(s);输出字符串s了。别忘了,定义一个变量以后也需要加分号。,第三章,关键字和标识符,不是随便一串英文字母都可以用来定义变量的。一个变量(或常量)的名称叫做变量(或常量)的标识符。标识符不能是关键字(又称保留字)。标识符不能重复定义。你可以假定关键字是已经被定义的标识符。标识符不能以数字开头,并且必须由英文字母、数字和下划线组成。标识符是不区分大小写的。关键字就是Pascal语言预定好的有特殊含义的单词,如program,const,var,begin,end等等。如果你打入了一个单词是白色的,那他就是关键字了,所以别把关键字用作标识符。(常用的关键字见附录中的“常用关键字列表”),第三章,数据类型,每个变量或常量都有它自己的数据类型。数据类型决定了数据是如何存储在内存中的。除了字符串类型(string)以外,还有很多数据类型:整数类型(integer)字符类型(char)实数类型(real)布尔类型(boolean)数组类型(array)集合类型(set)枚举类型(())子界类型(.)文件类型(file)指针类型()记录类型(record)对象类型(object)这些类型都有自己的定义和使用方法,将在之后的章节一一介绍。,第三章,常用数据类型(整数类型),整数类型能表示的数字范围占用内存Shortint-1281271Integer-32768327672Longint-23121474836474Int64-263263-18Byte02551Word0655362Cardinal042949679264能表示的数字范围越大,占用的内存也就越多。,第三章,常用数据类型(实数类型),实数类型能表示的数字范围占用内存RealSingel或Double4或8Single1.5E-45.3.4E384Double5.0E-324.1.7E3088Exended1.9E-4951.1.1E493210Comp-2E64+1.2E63-18 内存,又称主存,是你计算机中的一个配件,需要花钱购买。内存越大则价格越高。如果内存不够用了,你的程序就会崩溃。内存使用的单位叫做字节,一个字节相当于八个开关。,第三章,常用数据类型(布尔、字符类型),布尔类型能表示的数字范围占用内存Booleanfalse或true1字符类型能表示的数字范围占用内存Char#001#1281具体1到128号数字表示什么字符,请参见附录中的“ASCII码表”。其它表示方法:Integer$7F23A8D2Chara,第三章,常用数据类型(字符串类型),字符串类型能表示的数字范围占用内存String#0 x?8字符串类型其实是一个引用类型,它的值指向内存中的一个地址。字符串类型是一种特殊的类型。输出的字符串必须用单引号括起来,否则计算机会把它当成一个变量,例如writeln(abc);和writeln(abc);的含义是完全不同的。,第三章,定义常量和变量,program pi_const;其实是个有理数var d:integer;beginwrite(请输入直径);readln(d);writeln(周长,PI*d);end.,使用=定义常量。使用:定义变量常量的值是不可修改的。虽说可以用变量来代替常量,但是常量的使用可以使程序更简洁并。程序中过多的数字(硬编码)的出现不易于程序的修改和维护。常量先于变量而定义,在定义某些变量时甚至可以直接使用到常量(如数组)。,栗子:pi_const.pas,第三章,操作符,对变量进行运算、赋值的符号叫做操作符(Operator)。运算符是操作符的一种。数学运算符关系运算符逻辑运算符加法:+等于:=且:and减法:-大于:或:or乘法:*小于:=异或:xor整除:div小于等于:,第三章,运算符,第三章,优先级,学过小学数学的小朋友都知道,数学运算都是从左往右进行的。乘除法的优先级高于加减法。()not,*,/,div,mod,and,&,as,shl,shr|,!,+,-,or,xor=,=,in,iselse then,第三章,让计算机进行简单的数学运算,program a_plus_b_1;var a:integer;b:integer;beginreadln(a);readln(b);writeln(a+b);end.,program a_plus_b_2;var a,b:integer;定义两个变量时,可以把它们写在一起。beginreadln(a);readln(b);语句也是如此writeln(a+b);end.,栗子:a_plus_b_1.pas,栗子:a_plus_b_2.pas,第三章,字符串连接操作符*,program a_b_s1_s2;var a,b:integer;s1,s2:string;beginreadln(a);readln(b);writeln(a+b);readln(s1);readln(s2);writeln(s1+s2);end.不同的数据类型之间,操作符的效果也是不同的。,输入:12输出:3输入:12输出:12,栗子:a_b_s1_s2.pas,第三章,赋值,变量和常量的区别在于,变量的值是可以改变的。赋值符号::=赋值符号也是一种操作符。,program set_i;var i:integer;begini:=1024;writeln(i);end.,栗子:set_i.pas,第三章,交换两个变量的值(低级),利用第三变量c来交换两个变量的值。这个程序的优点是简单,缺点是需要用到第三个变量。-_-!,program a_b_c_easy;var a,b,c:integer;beginreadln(a,b);c:=a;a:=b;b:=c;writeln(a,b);end.,栗子:a_b_c_easy.pas,第三章,交换两个变量的值(中级),利用数学运算操作符来交换两个变量的值。第一行a变成了一开始的a+b。第二行b变成了a。第三行,由于a是a+b,b是a,相当于a+b-a=b。这个程序的优点不需要用到第三变量,缺点是有可能会溢出,例如输入a=20000,b=20000。,program a_b_c_normal;var a,b:integer;beginreadln(a,b);a:=a+b;a变成了和b:=a-b;a+b-b=aa:=a-b;a+b-a=bwriteln(a,b);end.,栗子:a_b_c_normal.pas,第三章,交换两个变量的值(高级),利用位运算操作符来交换两个变量的值。这个程序的优点就是一个字:牛逼。(xor是对整型的每位进行异或运算,不懂的问老师吧,反正xor平时不需要。使用位运算还可以加快程序执行速度。),program a_b_c_hard;var a,b:integer;beginreadln(a,b);a:=a xor b;b:=a xor b;a:=a xor b;writeln(a,b);end.,栗子:a_b_c_hard.pas,第三章,条件(if),尽管我们已经能让计算机进行一些简单的数学运算并将结果输出出来,但是要完成魔兽争霸3,我们还需要一种很重要的语句:条件语句。if a=b then c:=512;a=b可以是任何一个布尔变量,还记得运算符号一节中有说关系运算符“=”的输出结果是布尔类型么?如果使用多个布尔变量,切记用括号括起来:if(a=b)and(c=d)then e:=128;下面一条语句将永远不会被执行:if false then writeln(I am stipud.);,第三章,条件(程序段),then之后跟的语句可以是一条语句,也可以是一个程序段:if c=d then begin a:=b;b:=b+b;end;切记,如果要写两条语句,必须将这两条语句写在程序段的begin和end;之间,否则第二条语句将不在条件语句的判定内(一定会被执行)。,第三章,条件(if-else),if-else语句:if a=b then c:=512 else d:=215;相当于:if a=b then c:=512;if not(a=b)then d:=215;切记,无论else前的语句是一条语句还是一个程序段,else前的那一个分号必须删掉!if a=b then begin c:=d;e:=f;end else g:=h;,第三章,让计算机求解一元二次方程,program yi_yuan_er_ci;var a,b,c,d:real;beginwrite(请输入a:);readln(a);write(请输入b:);readln(b);write(请输入c:);readln(c);d:=b*b-4*a*c;,if d0 then writeln(方程无解!)else begin write(第一个解是:);writeln(-b+sqrt(d)/2/a);write(第二个解是:);writeln(-b-sqrt(d)/2/a);end;end.,栗子:yi_yuan_er_ci.pas,第三章,循环,例如我们要一下子重复输出1000句话,一种方法是把writeln(我是剑圣);复制1000遍。但是这种办法十分坑爹而且写出来的程序十分庞大。另一种方法就是使用循环语句。加入你在魔兽争霸中需要显示1000个剑圣,这1000个剑圣分别叫做“剑圣1”,“剑圣2”,“剑圣3”“剑圣1000”,这时候你就不得不使用循环语句了。循环语句有三种:while语句,repeat-until语句和for语句。,第三章,循环(while),理论上说,使用while语句可以完成其它循环语句所能做到的所有的事。while语句用起来是这样的:a:=1;while a=1000 do begin writeln(我是第,a,句话);a:=a+1;end;和if语句一样,当while后的布尔值是true时就执行后面的语句或程序段,只不过执行完一遍以后还会重新判断是否再次执行。,第三章,循环(repeat-until),a:=1;repeatwriteln(我是第,a,句话);a:=a+1;until a=1000;这段程序和右边的程序效果是一样的。无论如何,repeat-until之间的语句一定会执行一遍,因为判断是在until执行的。当until后的布尔值为true时就跳出循环。,a:=1;while a=1000 do begin writeln(我是第,a,句话);a:=a+1;end;和repeat-until不同的是,repeat-until之间可以是多条语句,而while后必须是一条语句或者一个程序段。until前可不加分号。,第三章,循环(for),for a:=1 to 1000 do writeln(我是第,a,句话);这段程序的效果和右边的是一样的。for语句总是很简洁,但是并非所有循环都能用for语句表示出来。for语句的循环体变量(这里是a)的值是不可改变的。,a:=1;while a=1000 do begin writeln(我是第,a,句话);a:=a+1;end;总能把for语句用while语句表达出来。学会把for用while写出是很重要的,因为有时候你没法把循环用for表达出来。,第三章,循环(for-downto),可惜的是,for语句不支持C语言中的步长功能,每次循环循环体变量的值只会加一。尽管如此,for语句提供了另一种方法来表达减一:for b:=1000 downto 1 do writeln(我是第,b,句话);,program goto_10086;label 10086;定义一个标记beginb:=1000;10086:在这里标记10086writeln(我是第,b,句话);b:=b-1;if b=1 then goto 10086;跳转到标记10086end.使用goto语句来达到目的,第三章,循环(goto),使用goto语句虽然有时候能使书写程序变得简便,但是通常情况下它会破坏程序结构。它会让程序不止一个出口,所以应该避免使用。理论上所有的循环都可以用while语句来完成。同样道理,break和continue这些会破坏循环结构的语句也应该避免使用,它们是万恶之源,因此在此不再介绍此类语句的使用方法。(就不告诉你,就不告诉你,就不告诉你!),第三章,嵌套,举个栗子你就明白了:if ab then if cd then begin while e=f do g:=g+1;if(1+1)=3 then writeln(好的);end;else后面也可加嵌套,即else if,分号加不加自己多试试就知道了。,第三章,猜数字游戏,好了,现在你已经有能力让计算机在屏幕上持续得画一大堆点了,虽说离写出魔兽争霸3还有很长的一段路要走,但是凭借这点知识写一些小游戏已经不成问题了。如果你能理解这个程序,并且正确预料这个程序运行后将会发生什么,那么恭喜你,你已经学会编写一个简单的Pascal语言程序了!,program cai_shu_zi;var a,b,i,n:integer;begina:=1;最大值b:=100;最小值writeln(请输入一个1-100的整数:);,栗子:cai_shu_zi.pas(上半部分),第三章,猜数字游戏,for i:=5 downto 1 do begin write(你还有,i,次机会:);readln(n);输入的数 if(b-n)-(n-a)0)then begin write(数字太小了傻逼!);a:=n;endif,else begin write(数字太大了傻逼!);b:=n;end;else end;forwriteln(你已经没有机会了。);writeln(你真是个大傻逼!);readln();end.,栗子:cai_shu_zi.pas(下半部分),第三章,空语句,一个典型的空语句:;空语句用在条件语句上:if a=b then;空语句用在循环语句上:while true do;死循环加了空语句不会怀孕:;writeln(加了空语句不会怀孕);,第三章,空语句,program hello_world_void;begin;writeln(Hello World!);end.除了程序名外仔细观察这段程序和之前的hello_world程序有什么不同这段程序能否通过编译?为什么?答案:能。begin之后的那个分号相当于空语句。,栗子:hello_world_void.pas,第三章,条件(case)*,虽然本作者一向不推荐使用case语句,但是作为一个优秀的程序员必须对所有可能出现的语句做一个了解,因为你不用不代表别人不会用,到时你看到case语句说这不是pascal语言因为我没教过我就傻眼了:case i of这里不加分号 1:writeln(ok);2:a:=b;3.5:if(1+1)=3 then writeln(yes!);3.5是子界,有关子界的内容请参看后面几章 else:while true do;这里的分号可以不加,只不过这里用了空语句 end;,第三章,循环(break)*,我不推荐大家使用case语句是出于两个原因,第一是因为case语句局限性很大,第二是因为begin和end;不是对称的,case语句中没有begin。在这里顺便也把break的用法说了吧,还是举栗子:a:=1;while true do begin a:=a+1;if a1000 then break;end;就是这样,看不懂也别来问我,只能说你学艺不佳。,第三章,第四章 子程序,函数与过程参数返回值局部变量和全局变量实际参数和形式参数重载递归超前引用(forward),writeln();和readln();场宽(:操作符)使用其它子程序程序也是子程序操作符也是子程序,目录,函数与过程,细心的小朋友已经发现,在求解一元二次方程中,我们使用了sqrt();来求解一个实数的平方。sqrt();就是一个子程序。Pascal的子程序分为两种,一种叫做函数(Function),如sqrt();,另一种叫做过程(Procedure),如writeln();。函数于过程的区别在于,函数是有返回值的。例如:a:=sqrt(b);但是这样是错误的:c:=writeln(d);这是错误的因为writeln();只是一个过程,它并没有返回值。,第四章,函数与过程,子程序可以理解为“一个独立的程序段”。它的结构就和一个程序一样。子程序名是一个标识符,例如一个过程:procedure procedure1();过程说明定义各种变量和常量begin 过程程序段开始writeln(我是一个语句);过程程序段内容end;过程程序段结束,第四章,参数,参数其实就是变量。在使用writeln();时,你会键入writeln(大傻逼);,这个“大傻逼”就是一个参数,如果没有这个参数,writeln();只会在屏幕上输出一个空行。参数的出现使得子程序的效果产生各种变化。一个参数可以是一个变量。使用参数是主程序将变量的值传给子程序的一种手段。,第四章,返回值,只有函数有返回值。你可以把函数本身看成一个变量,例如:function inc(i:integer):integer;begininc:=i+1;end;在定义函数inc的同时,你就同时已经定义了一个叫inc的整数类型变量。当你把参数传递给函数时,就可以使用它返回的值了,例如:b:=inc(a);,第四章,局部变量和全局变量,program bian_liang;var a,b:integer;procedure procedure1();var a,c:integer;begin过程开始a:=a+1;b:=b+1;c:=c+1;end;过程结束begin主程序开始procedure1();a:=a+1;b:=b+1;end.主程序结束,局部变量c是在子程序内定义的,所以在主程序段不能使用变量c,否则会报错。全局变量b在子程序内也能使用。变量a在子程序外和子程序内都有定义。被定义的是两个不同的变量。过程段内改变的是局部变量a的值,主程序段改变的是全局变量a的值。,第四章,实际参数和形式参数,program can_shu;var a,c:integer;b:real;function abc(i:integer):real;var q:integer;begini:=i+1;a:=a+5;abc:=i;q:=q+2;end;beginb:=abc(c);end.,a,b,c是实际参数,它们的值无论在子程序内还是子程序外都会被改变。q是变量参数,只在子程序内起效果,用完就结束了,其中i是形式参数,调用结束时值会返回给c。i和c是两个不同的变量,你不能在子程序外使用i。无论是何种参数,本作者都不建议通过参数来传递返回值。最好的方法还是使用abc:=i;的方式传递。,第四章,重载,writeln(abc);和writeln();其实是两个不同的子程序。参数不同的同名子程序不是同一个子程序,同名参数不同的子程序叫做子程序的重载,一个子程序可以有无数个重载:procedure procedure1(a:integer);begin a:=a+1;end;procedure procedure1(a,b:integer);begin a:=a+2;b:=a+3;writeln(我是重载);end;procedure procedure1(s:string);begin writeln(s);writeln(即使类型不同也可以重载);end;,第四章,递归,递归其实就是子程序调用它自己调用自己难道不会出现死循环么?看这个:function jie_cheng(canshu:integer):longint;beginif canshu0 then jie_cheng:=jie_cheng(canshu-1)*canshuelse jie_cheng:=1;end;递归是一种常用算法,它通常可以大大优化程序,提高程序运行效率,节省内存和钞票。,第四章,超前引用(forward),有时候子程序需要相互调用,但是pascal子程序必须先定义才能调用,怎么办?看这里:procedure play();forward;procedure menu();var a:integer;begin readln(a);if a=1 then play();end;procedure play();var a:integer;begin readln(a);if a=5 then menu();end;,第四章,writeln();和readln();,writeln();和readln();都是过程。writeln();和readln();都可以使用多个参数。write();和writeln();的用法我就不说了,自己试。虽然read();和readln();都是以回车来结束读取的,但是read();读取是按空格为分隔符来的。反正我只支持使用readln();来读数据,并且每次最好只读一个。其实更好的方式是使用其它单元库的其它子程序来读数据,例如keypress(),getMouseEvent()等等。,第四章,场宽(:操作符),输出的数据不够整齐?场宽能够帮助你!for i:=1 to 100 do write(i:5);场宽也能够限制输出数据的长度:for i:=10000 to 10100 do write(i:3);还有一种双场宽用于输出实数:writeln(1111.222222:3:4);前一个冒号后是整数部分长度,后一个冒号后是小数部分长度。输出实数时小数部分是四舍五入的。,第四章,使用其它子程序,SYSTEM单元库中除了writeln();和readln();以外,系统中其实还有许多其它可用的子程序,例如ord();,chr();,sqr();,sqrt();,abs();,trunc();,round();等等,详细请见附录中的“常用子程序列表”。除了SYSTEM单元库外,你还可以使用其它单元库,例如CRT单元库,这个单元库里有delay();,sound();等子程序。有关单

    注意事项

    本文(一天学会Free-Pascal.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开