pascal高手赐教

问高手们几个问题,不要转载的,也不要从别的地方复制来的...只是用几句话简单的概括一下,要通俗1,子界和枚举2.函数(function)与过程(procedure)3.数... 问高手们几个问题,不要转载的,也不要从别的地方复制来的...

只是用几句话简单的概括一下,要通俗

1,子界和枚举
2.函数(function)与过程(procedure)
3.数组

请高手们用最容易理解最通俗的讲法和我说说..
无语了~~~都不看要求啊~?
展开
 我来答
xttts
2009-06-05 · TA获得超过2754个赞
知道小有建树答主
回答量:1295
采纳率:0%
帮助的人:1586万
展开全部
子界就是一个大的类型的一部分,一般只用于数组的声明
(如: a:array [1..100] of integer; 这里1..100就是子界)

函数和过程差不多,都是把需要重复使用的一大堆语句打包变成一条的工具,只不过函数还返回一个数值.

数组就是一大堆变量, 由于可以用下标来调用结合for while 等会比简单变量更容易调用一些.
120410999
2009-05-31 · TA获得超过865个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:236万
展开全部
子界类型是指从整数、字符两个类型中截取部分有序的值形成一个用户自定义的类型,而枚举是可以无序的,也没有类型限制,如“abcd”就可以成为一个枚举值。
函数和语句一样,是用于数据的处理所用的东西,其中,函数会把值传出来,而语句是不传值出来的。
有时候我们要在程序里使用一系列的数,那么就会用到数组,数组类型的功能就是把一串数用一个变量一口气保存起来。

定义:
1,子界:
一type 类型名=下界..上界;
如:
type atype=-100..99;
var a:atype;
二var 变量名:下界..上界;
如:
var a:-100..99;

2,枚举:
一type 类型名=(枚举值);
如:
type btype=(abcde,fghij);
var b:btype;
二var 变量名:(枚举值);
如:
var b:(abcde,fghji);

3,函数:
function 函数名(值表):函数类型;
函数专用变量定义;
begin
函数内容;
end;

4,语句:
procedure 语句名(值表);
语句专用变量定义;
begin
语句内容;
end;

5,数组:
var 数组名:array[下界..上界] of 数据类型;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6fa3859
2009-06-01 · TA获得超过3349个赞
知道小有建树答主
回答量:1148
采纳率:85%
帮助的人:425万
展开全部
8.1子界与枚举

1.子界类型:

当某些变量的取值范围很具体时,可用子界类型,它更符合实际、便于查错和节省内存。

定义如下:

type riqi=1..31;

zimu='A'..'Z';

var day:riqi;

ch1:zimu;

也可以直接定义:

day:1..31;

year:0..200;

ch1:'A'..'Z';

8.2 枚举类型:

通过预定义列出所有值的标识符来定义一个有序集合,这些值的次序和枚举类型说明中的标识符的次序是一致的。枚举类型的形式:
(标识符1,……,标识符n)
例如:
type daystype=(sunday,monday,tuesday,wednesday,thursday,friday,saturday)
枚举元素只能是标识符,而不能是数值常量或字符常量。例如以下的定义是错误的:<
type daystype=('sun','mon','tue','wed','thu','fri','sat')
枚举元素是标识符,不要把作为枚举元素的标识符视作变量名,它不能被赋值。同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。例如以下的定义是错误的:
type daytype1=(monday,tuesday);
daytype2=(monday,wednesday);
可以将枚举类型的定义和变量的定义结合在一起。例如:var a:(monday,tuesday,sunday)
枚举类型属于顺序类型。根据定义类型时各枚举元素的排列顺序确定它们的序列,序列号从0开始。
例如:已经定义daystype
ord(sunday)=0,succ(sunday)=monday,pred(friday)=thursday
但是枚举类型中的第一个元素没有前趋,最后一个元素没有后继。Turbo Pascal不允许直接读写枚举值,所以枚举值的输出常用case语句间接的输出。枚举值的输入,则要一一判断读入字符是否是枚举类型的标识符。若是才能赋给枚举变量,否则就会出错。
例如:枚举值的输出
case day of
sunday:write('sunday');
monday:write('monday');
tuesday:write('tuesday');
wednesday:write('wednesday');
thursday:write('thursday');
friday:write('friday');
saturday:write('saturday');
end;

8.1 过程

1.过程的定义

procedure 过程名(形式参数:参数说明);{也可以不带参数}
var
begin
...
end;

2.过程的调用

过程名(实在参数表);

例1:求n个自然数的最大公约数;

program gcd1;
const maxn=100;

var n,i,gcd:integer;
a:array[1..maxn] of integer;
procedure enter;
begin
write('n=(<100)');readln(n);
for i:=1 to n do
repeat
write('a[',i,']=');readln(a[i]);
until a[i]>0;
end;

procedure find_gcd(x,y:integer);{定义过程}
var r:integer;
begin
r:=x mod y;
while r<>0 do

begin x:=y;y:=r;r:=x mod y; end
gcd:=y;
end;

procedure print;
begin
writeln('GCD=' ,gcd);
end;
begin
enter;
gcd:=a[1];
for i:=2 to n do
find_gcd(gcd,a[i]);
print;
end.

8.2 函数

1.函数的定义
function 函数名(形参表):函数类型; { ————函数首部}
var {————局部变量说明部分}
begin {————函数体}
... {————函数语句}
...
函数名:=表达式
end;
2.函数的调用:

函数在语法上相当于一个表达式,所以,调用时,函数不能独立成为一个语句;它可以出现在任何表达式可以出现的地方。
例如赋值语句的右边:
X:=函数名(实在参数表); {————X的类型与函数类型必须一致}
又,如果函数类型是boolean,则还可以出现在条件语句中,充当条件表达式:
if 函数名(实在参数表) then ……
例3:编一程序,求从10名同学中选出3名代表,有几种不同的选法。

(公式:C(m,n)=m!/n!*(m-n)!从m中选n)

program zohe1;
var m,n:integer;
c:longint;
function factor(x:integer):longint;{定义}
var i:integer;
p:longint;
begin
p:=1;
for i:=1 to x do p:=p*i;
factor:=p;{这个语句必须}
end;
begin
write('m,n=');readln(m,n);
c:=factor(m) div (factor(n)*factor(m-n));{调用}
writeln('c(',m,',',n,')=',c);
end.

8.3全局变量和局部变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。全局变量作用域是整个程序;局部变量作用域是定义该变量的子程序。当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

例4:全局变量和局部变量。

program local_global;
var i,k:integer;
procedure sub1;
var i,j:integer;
begin
i:=17;
writeln('i in sub=',i);
writeln('k in sub=',k);
end;
begin
i:=2;k:=9;
writeln('i in main=',i);
writeln('k in sub=',k);
sub1;
writeln('i in main=',i);
writeln('j in main=',j);
readln;
end.

上述程序运行时将出现Unknown Identfier;因为变量j在主程序中没定义。

当删除本语句时。运行结果如下:

i in main=2

k in main=9

i in sub=17

k in sub=9

i in main=2

8. 4 值参和变量参数

值形参——传值:调用时可用表达式代替形参,不该变实在参数的值。
变量形参——传地址:调用时必须用变量代替行参变量,改变实在参数的值。

例4:请看下列程序的运行结果。

program li3_10;
var a,b,c:integer;
procedure sub(x,y:integer;var z:integer);
begin
x:=x+1;y:=y+1;z:=x+y;
writeln('sub:x=',x:2,'y=',y:2,'z=',z:2);
end;
begin
a:=1;b:=4;c:=9;
writeln('main:a=',a:2,'b=',b:2,'c=',c);
sub(a,b,c);
writeln('main:a=',a:2,'b=',b:2,'c=',c);
sub(c+5,b*b,a);
writeln('main:a=',a:2,'b=',b:2,'c=',c);
readln;
end.

main:a=1 b=4 c=9

sub:x=2 y=5 z=7

main:a=1 b=4 c=7

sub:x=13 y=17 z=30

main:a=30 b=4 c=7
6.1 一维数组

1、定义:
var
a:array [1..10] of integer;
其中:a是这一批数据的名称,称为数组名;array、of是定义数组的保留字;中括号中的数字是数据编号的下限和上限,财时也说明了数据的个数(上限-下限);最后一个是数据的基类型,如integer,char,real,boolean。
2、数组元素的输入:
数组名代表的并不是一个变量,而是一批变量,因而,不能直接整个数组读入,而是要逐个数组元素读入,通常用循环结构来完成这一功能。下面是几个常用输入数组元素的例子:
for i:=1 to 10 do read(a[i]);
{————从键盘读入数组元素的值;最常用的方法}
for i:=1 to 10 do a[i]:=i;
{————数组元素a[1]到a[10]的值分别为1到10;数据赋初值}
for i:=1 to 10 do a[i]:=0;
{————数组元素清0;最常用的数据初始化的方法}
for i:=1 to 10 do a[i]:=random(100);
{————随机产生10个100以内的数,赋给各数组元素}
3、数组元素的输出:
和数组元素的输入相同,数组元素的输出也不能由一个write语句直接完成。同样要逐个数组元素输出。通常也用循环结构来完成这一功能:
for i:=1 to 10 do write(a[i],' ');{————数组元素之间用空格分隔}
writeln;

4、数组的应用:
例1:从键盘输入10个数,将这10个数逆序输入,并求这10个数的和,输出这个和。
program p1;
var
a:array [1..10] of integer;
i,s:integer;
begin
for i:=1 to 10 do read(a[i]);
for i:=10 downto 1 do write(a[i],' ');
writeln;
s:=0;
for i:=1 to 10 do s:=s+a[i];
writeln('s=',s);
end.

例2:用筛法求100以内的素数(质数)。

分析:素数是除了1和它本身以外没有其它约数的数。用筛法求素数的方法是:用质数筛去合数:从第一个素数2开始,把它的倍数去掉;这样2以后的第一个非0数就一定也是素数,把它的倍数也删了……重复这个删数过程,直到在所找到的素数后再也找不到一个非0数。把所有非0数输出。
program p2;
var
a:array [1..100] of integer;
i,j,k:integer;
begin
for i:=1 to 100 do a[i]:=i;
a[1]:=0;i:=2;
while i<=100 do
begin
k:=i;
while k<=100 do
begin
k:=k+i;
a[k]:=0;
end;
{————上面将所有a[i]的倍数清0}
i:=i+1;
while a[i]=0 do i:=i+1;
{————查找接下来的第一个非0数}
end;
for i:=1 to 100 do if a[i]<>0 then write(a[i],' ');
end.

6.2 二维数组

一维数组在编程中多用于描述线性的关系:如一组数;一组成绩;一组解答等。数组元素只有一个下标,表明该元素在数组中的位置。二维数组在编程中多数用于描述二维的关系:如地图、棋盘、城市街道、迷宫等等。而二维数组元素有两个下标:第一个下标表示该元素在第几行,第二个下标表示在第几列。

1.二维数组的定义:
var
a:array[1..10,1..5] of integer;
其中:a是数组名,由程序员自定;array和of是定义数组的保留字;(这两点和一维数组定义的格式一样)中括号中的两个范围表示二维数组共有多少行、多少列(第一个范围表示行数,第二个范围表示列数);最后一个表示数组元素的类型,规定和一维数组一样。如上例,定义了一个二维数组a,共有10行5列。

2.使用二维数组:
1、数组元素的指称:数组名[行号,列号]。如第三行第四个元素:a[3,4]。
对某一行进行处理。如累加第4行的数据。则固定行号为4。如:for i:=1 to 5 do s:=s+a[4,i];
对某一列进行处理。如累加第4列的数据。则固定列号为4。如:for i:=1 to 10 do s:=s+a[i,4];

2、二维数组的输入输出要用双重循环来控制:
for i:=1 to 10 do{————控制行数}
begin
for j:=1 to 5 do read(a[i,j]){————第一行读入5个元素}
readln;{————读入一个换行符}
end;
{————最常用的方法:从键盘读入数据初始化二维数组}
for i:=1 to 10 do
for j:=1 to 5 do a[i,j]:=0;
{————最常用的方法:将二维数组清0}
for i:=1 to 10 do
begin
for j:=1 to 5 do write(a[i,j]:4);
writeln;
end;
{————最常用的输出方法:按矩阵形式输出二维数组的值}

例1:竞赛小组共有20位同学,这学期每位同学共参与了三项比赛,请统计每位同学的平均分。
分析:定义一个20行3列的二维数组来存放这些成绩。定义一个20个元素的一维数组来存放平均分。
program p1;
var
a:array [1..20,1..3] of integer;
b:array [1..20] of real;
i,j:integer;
begin
for i:=1 to 20 do
begin
for j:=1 to 3 do read(a[i,j]);
readln;
end;
{————从键盘上读入20个同学的三次竞赛成绩}
for i:=1 to 20 do b[i]:=0;
{————先将平均分数组清0}
for i:=1 to 20 do
begin
for j:=1 to 3 do b[i]:=b[i]+a[i,j];{————计算总分}
b[i]:=b[i]/3;{————计算平均分}
end;
for i:=1 to 20 do write(b[i]:5:1);
{————输出平均分}
writeln;
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友38eed4ee3
2009-06-01
知道答主
回答量:31
采纳率:0%
帮助的人:0
展开全部
子界:
一type 类型名=下界..上界;
如:
type atype=-100..99;
var a:atype;
枚举:
一type 类型名=(枚举值);
如:
type btype=(abcde,fghij);
var b:btype;
二var 变量名:(枚举值);
函数:
function 函数名(值表):函数类型;
函数专用变量定义;
begin
函数内容;
语句:
procedure 语句名(值表);
语句专用变量定义;
begin
语句内容;
end;

参考资料: http://www.baidu.com

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式