当前位置:首页 > 挺好的pascal教程
write(0:8,1:8); repeat c:=a+b; write(c:8); a:=b; b:=c;
geshu:=geshu+1;
if geshu mod 5=0 then writeln; until geshu=30; readln; end.
用while编写 program ex3;
Var a,b,c,geshu:longint; begin a:=0; b:=1; geshu:=2; write(0:8,1:8); while geshu<30 do begin c:=a+b; write(c:8); a:=b; b:=c;
geshu:=geshu+1;
if geshu mod 5=0 then writeln; end; readln; end.
用for编写: program ex3;
Var i,a,b,c,geshu:longint; begin a:=0; b:=1; geshu:=2; write(0:8,1:8); for i:=1 to 28 do begin c:=a+b; write(c:8); a:=b; b:=c;
geshu:=geshu+1;
if geshu mod 5=0 then writeln; end; readln; end.
这道题目充分说明,各种循环方法可以互换,只要懂得算法。语言只是表达算法的手段。 网上做的另一种方法: program ex3; Var
geshu,i,n,m:longint; begin
geshu:=2; write(0:8,1:8); n:=0; m:=1;
while geshu<30 do begin
i:=n; n:=m; m:=i+n; write(m:8); inc(geshu);
if geshu mod 5=0 then writeln; end; readln; end.
3.小球从100高处自由落下,着地后又弹回高度的一半再落下。求第20次着地时, 小球共通过多少路程? program ex3;
var i,cishu:longint; a,s:real; begin a:=100; s:=0; cishu:=0;
for i:=1 to 19 do begin
s:=s+a+a/2; a:=a/2;
cishu:=cishu+1; end;
writeln(s+a:0:4); readln; end.
答案:299.9996
说明:在思考时要考虑到小球每一次是v字形落地,第一次落地是100+反弹50,第二次是50+反弹25,最后一次落地只算落地,不算反弹。
4.某登山队员第一天登上山峰高度的一半又24米; 第二天登上余下高度的一半又24米;每天均如此。到第七天,距山顶还剩91米。求此山峰的高度? program ex3; var t,s:integer; begin s:=91;
for t:=1 to 6 do s:=(s+24)*2; writeln(s); readln; end.
答案:8848
5.给出某整数N,将N写成因数相乘的形式。如: N=12,输出: 12=1*2*2*3. 方法1: 思路:其实数学思路就是分解质因数,分解质因数的方法是首先用2来整除,如果不能整除,试试3能不能整除,不能的话,看看4能不能整除,这样累加来找第一个质因数,如果能整除,那么通过循环,来输出一个个质因数,直到除数为1说明已经整除完毕。
找质因数的方法是通过循环的,那么repeat..until直到型循环,直到什么时候不循环呢,肯定是m=n,比如,这个数是17,那么不能被2整除,肯定要1个个累加,到除数为17时候,才能找到d=1,才能输出这个因数。
这里提醒下,要熟练运用累加函数inc,在具体程序中肯定方便了,不需要先申明m为0。 因此在循环次数不确定的场合,repeat..until循环就发挥了大作用哦。 program t3; var
n,d,m:longint; begin
readln(n); m:=2; d:=n; write(n,'=1*');
repeat
if (d mod m)<>0 then inc(m) else begin
d:=d div m;
if (d=1) then write(m) else write(m,'*'); end; until m=n; readln; end.
6.外出旅游的几位朋友决定次日早晨共分一筐苹果。天刚亮,第一个人醒来,他先拿了一个,再把筐里的八分之一拿走;第二个人醒来,先拿两个,再把筐里的八分之一拿走;第三个人醒来,先拿三个,再拿走筐里的八分之一;?每个人依次照此方法拿出各人的苹果,最后筐里的苹果全部拿完,他们每人所拿到的苹果数正巧一样多。求原先筐里的苹果数和人数。
说明:当有些题目无法解答的时候,我们可以用枚举的方法,根据一定数量关系,设置一定区域的数量,然后根据题目所给的数量关系,比如这道题目中,每个人的苹果一样多,我们根据这个数量关系可以得出:(1+(p-1)/8=p/r,还可以知道,苹果数能整除人数。这样就能回答出问题。虽然这种解题方法不是十分好,也许要不断设置不同范围的数字,但不失为一种解题思路,尤其是无法解答时候的思路。 program ex7; var p,r:integer; begin
for p:=3 to 500 do for r:=1 to 100 do
if (1+(p-1)/8=p/r) and (p mod r=0) then writeln(p,' ',r); readln; end. 7、图中由6个圆圈构成三角形,每条边上有三个圈, 将自然数1--6 不重复地填入各圆圈位置上,使每条边圆圈上的数字之和相等,请编程输出所有的填法。
program ex7;
var a,b,c,d,e,f:integer; begin
for a:=1 to 6 do for b:=1 to 6 do if a<>b then
for c:=1 to 6 do
if (a<>c) and (b<>c) then for d:=1 to 6 do
if (a<>d) and (b<>d) and (c<>d) then for e:=1 to 6 do
if (a<>e) and (b<>e) and (c<>e) and (d<>e) then begin
f:=21-a-b-c-d-e;
if ((a+b+d)=(a+c+f)) and ((a+b+d)=(d+e+f)) then writeln('fangan:',a:3,b:3,d:3,',',a:3,c:3,f:3,',',d:3,e:3,f:3) end; readln; end.
8、出租车计费(算法训练时候做)
在生活中,我们经常乘坐出租车,出租车的计费是一个很有趣的问题。在某市,出租车的起价费是3公里之内8元;超过3公里后,15.1公里之内,每550米计费1元;而超过15.1
公里之后,每370米计费1元。这样,乘坐出租车的里程越远,花费就会越多。例如,行驶30公里时,就需要付费70元。但是有经验的老手告诉我们,实际上没有必要花那么多钱,如果从中途下车再打一辆车(相当于在中途结一次帐),就能够少花一些钱。 请验证老手的话,求出在行驶多少米时结一次帐是最便宜的。 输入: 总里程数。 输出:
第一行:中途结账地点距离起点的路程。 第二行:最少付费值。 9、《全国信息学竞赛》p98价格竞猜 10、《全国信息学竞赛》p98满载爱的代码
第四章 pascal的自定义数据类型
到现在为止,我们学习了4中数据类型(实型、整型、字符型、布尔型),他们是由pascal预先定义好的标准数据类型。
Pascal系统允许用户自定义的数据类型有:数组类型、子界类型、枚举类型、集合类型、记录类型、文件类型、指针类型。
一、数组类型
1、认识数组
输入3个整数,由程序计算它们的平均数,并将其中低于平均数的数显示出来。
那么,如果要输入100个整数,计算平均数呢?那就需要定义100个变量,写100个readln
语句,100个if语句和100个writeln语句,这是很繁琐的,也是不现实的。
通过分析程序中各个变量的用途,我们可以看出a、b、c都是用于待处理的数,而且都是相同的数据类型。在现实问题中,还有许多数据像a、b、c这样具有同等意义和相同的数据类型,例如班级名单上的50个姓名,课表中的30节课,一幢楼房里的60个门牌号,在编程时,将每组同类型数据用整体、统一的方式来存储和处理,则可大大简化程序。
在编程中,我们用数组(array)来表示这样的一组数据。
数组是同类型的一组数据按照一定关系排列成的表。数组中的每一个数据叫做数组元素,简称元素。每个数组都有确定的元素数目和下标范围。
数组类型是一种自定义数据类型,因此需要在程序中预先进行定义,规定数组的元素类型和下标范围。
在pascal中,数组的定义格式如下: 第一种:
program pjs; var
a,b,c,tot:integer; ave:real; begin
readln(a); readln(b); readln(c);
tot:=(a+b+c+d+e); ave:=tot/3;
if a
共分享92篇相关文档