2007年4月6日 第四次pascal试验课 上机内容是函数及过程结构程序设计
以下是我课上写的几段代码,文件名就是课本上题目的位置,例如P14_1_2.PAS即为第14页的习题1.2。
P122_5_2.PAS
PROGRAM find(input,output);
{输入一个数n,返回其右数第k位数字}
VAR
n,k:integer;
{函数digit的说明}
FUNCTION digit(n,k:integer):integer;
VAR
residue,divisor:integer;
BEGIN
{取得右数第k位数字}
residue:=n MOD trunc(exp(k*ln(10)));
divisor:=trunc(exp((k-1)*ln(10)));
{向函数返回这位数字}
digit:=residue DIV divisor
END;
{主程序}
BEGIN
writeln('input a number and tell me the location from the right side...');
readln(n,k);
writeln('The NO.',k:1,' bit from the right is ''',digit(n,k),'''')
END.
(*经测试发现在TurboPascal环境中k最多只能输入5位整数否则会造成溢出,其表现为digit函数返回值为负数*)
{输入一个数n,返回其右数第k位数字}
VAR
n,k:integer;
{函数digit的说明}
FUNCTION digit(n,k:integer):integer;
VAR
residue,divisor:integer;
BEGIN
{取得右数第k位数字}
residue:=n MOD trunc(exp(k*ln(10)));
divisor:=trunc(exp((k-1)*ln(10)));
{向函数返回这位数字}
digit:=residue DIV divisor
END;
{主程序}
BEGIN
writeln('input a number and tell me the location from the right side...');
readln(n,k);
writeln('The NO.',k:1,' bit from the right is ''',digit(n,k),'''')
END.
(*经测试发现在TurboPascal环境中k最多只能输入5位整数否则会造成溢出,其表现为digit函数返回值为负数*)
P122_5_4.PAS
PROGRAM exam(input,output);
{用随机数函数产生2位数加减乘法算式并判断答案是否正确}
VAR
num1,num2,answer,temp,score:integer;
seed:real;
continue:char;
{函数rand的说明}
FUNCTION rand(VAR seed:real):real;
{函数rand是根据一固定数学模型编写的}
CONST
num1=93.0;
num2=8192.0;
num3=1.0;
BEGIN
seed:=num1*seed+num3;
seed:=round((seed/num2-trunc(seed/num2))*num2);
rand:=seed/num2
END;
{主程序}
BEGIN
{初始化变量}
seed:=0.7823;
REPEAT
{将得分置零}
score:=0;
{产生两个随机数}
num1:=trunc(rand(seed)*100);
num2:=trunc(rand(seed)*100);
{由于考虑到被减数应大于减数,下面将较大数放在num1中}
IF num1<num2
THEN BEGIN
temp:=num1;
num1:=num2;
num2:=temp
END;
{生成加法算式并判断结果是否正确并给分}
writeln('***** test 1 *****');
writeln('calculate: ',num1:2,'+',num2:2,'=?');
readln(answer);
IF answer=num1+num2
THEN BEGIN
writeln('right!');
score:=score+30
END
ELSE writeln('wrong!');
{生成减法算式并判断结果是否正确并给分}
writeln('***** test 2 *****');
writeln('calculate: ',num1:2,'-',num2:2,'=?');
readln(answer);
IF answer=num1-num2
THEN BEGIN
writeln('right!');
score:=score+30
END
ELSE writeln('wrong!');
{生成乘法算式并判断结果是否正确并给分}
writeln('***** test 3 *****');
writeln('calculate: ',num1:2,'*',num2:2,'=?');
readln(answer);
IF answer=num1*num2
THEN BEGIN
writeln('right!');
score:=score+40
END
ELSE writeln('wrong!');
{输出最后总得分}
writeln('***** result *****');
writeln('Your score is ',score:3);
{询问是否继续}
writeln('Do you want to test again? (Y/N)');
readln(continue);
UNTIL (continue='N') OR (continue='n')
END.
{用随机数函数产生2位数加减乘法算式并判断答案是否正确}
VAR
num1,num2,answer,temp,score:integer;
seed:real;
continue:char;
{函数rand的说明}
FUNCTION rand(VAR seed:real):real;
{函数rand是根据一固定数学模型编写的}
CONST
num1=93.0;
num2=8192.0;
num3=1.0;
BEGIN
seed:=num1*seed+num3;
seed:=round((seed/num2-trunc(seed/num2))*num2);
rand:=seed/num2
END;
{主程序}
BEGIN
{初始化变量}
seed:=0.7823;
REPEAT
{将得分置零}
score:=0;
{产生两个随机数}
num1:=trunc(rand(seed)*100);
num2:=trunc(rand(seed)*100);
{由于考虑到被减数应大于减数,下面将较大数放在num1中}
IF num1<num2
THEN BEGIN
temp:=num1;
num1:=num2;
num2:=temp
END;
{生成加法算式并判断结果是否正确并给分}
writeln('***** test 1 *****');
writeln('calculate: ',num1:2,'+',num2:2,'=?');
readln(answer);
IF answer=num1+num2
THEN BEGIN
writeln('right!');
score:=score+30
END
ELSE writeln('wrong!');
{生成减法算式并判断结果是否正确并给分}
writeln('***** test 2 *****');
writeln('calculate: ',num1:2,'-',num2:2,'=?');
readln(answer);
IF answer=num1-num2
THEN BEGIN
writeln('right!');
score:=score+30
END
ELSE writeln('wrong!');
{生成乘法算式并判断结果是否正确并给分}
writeln('***** test 3 *****');
writeln('calculate: ',num1:2,'*',num2:2,'=?');
readln(answer);
IF answer=num1*num2
THEN BEGIN
writeln('right!');
score:=score+40
END
ELSE writeln('wrong!');
{输出最后总得分}
writeln('***** result *****');
writeln('Your score is ',score:3);
{询问是否继续}
writeln('Do you want to test again? (Y/N)');
readln(continue);
UNTIL (continue='N') OR (continue='n')
END.
P123_5_7(1).PAS
PROGRAM calmax(input,output);
{根据公式计算并输出结果}
VAR
num1,num2,num3,result:real;
{函数max的说明}
FUNCTION max(num1,num2,num3:real):real;
VAR
maxnum:real;
BEGIN
{将这三个数中的最大值保存在maxnum中}
maxnum:=num1;
IF maxnum < num2
THEN maxnum:=num2;
IF maxnum < num3
THEN maxnum:=num3;
{向函数返回这三个数中的最大值}
max:=maxnum
END;
{主程序}
BEGIN
writeln('Please input three numbers...');
readln(num1,num2,num3);
result:=max(num1,num2,num3)/(max(num1+num2,num2,num3)*max(num1,num2,num2+num3));
writeln('The result is ',result)
END.
(*函数max法*)
{根据公式计算并输出结果}
VAR
num1,num2,num3,result:real;
{函数max的说明}
FUNCTION max(num1,num2,num3:real):real;
VAR
maxnum:real;
BEGIN
{将这三个数中的最大值保存在maxnum中}
maxnum:=num1;
IF maxnum < num2
THEN maxnum:=num2;
IF maxnum < num3
THEN maxnum:=num3;
{向函数返回这三个数中的最大值}
max:=maxnum
END;
{主程序}
BEGIN
writeln('Please input three numbers...');
readln(num1,num2,num3);
result:=max(num1,num2,num3)/(max(num1+num2,num2,num3)*max(num1,num2,num2+num3));
writeln('The result is ',result)
END.
(*函数max法*)
P123_5_7(2).PAS
PROGRAM calmax(input,output);
{根据公式计算并输出结果}
VAR
num1,num2,num3,maxnum,result:real;
{过程max的说明}
PROCEDURE max(num1,num2,num3:real;VAR maxnum:real);
BEGIN
{将这三个数中的最大值保存在maxnum中}
maxnum:=num1;
IF maxnum < num2
THEN maxnum:=num2;
IF maxnum < num3
THEN maxnum:=num3
END;
{主程序}
BEGIN
writeln('Please input three numbers...');
readln(num1,num2,num3);
{根据公式进行计算}
max(num1,num2,num3,maxnum);
result:=maxnum;
max(num1+num2,num2,num3,maxnum);
result:=result/maxnum;
max(num1,num2,num2+num3,maxnum);
result:=result/maxnum;
writeln('The result is ',result)
END.
(*过程max法*)
{根据公式计算并输出结果}
VAR
num1,num2,num3,maxnum,result:real;
{过程max的说明}
PROCEDURE max(num1,num2,num3:real;VAR maxnum:real);
BEGIN
{将这三个数中的最大值保存在maxnum中}
maxnum:=num1;
IF maxnum < num2
THEN maxnum:=num2;
IF maxnum < num3
THEN maxnum:=num3
END;
{主程序}
BEGIN
writeln('Please input three numbers...');
readln(num1,num2,num3);
{根据公式进行计算}
max(num1,num2,num3,maxnum);
result:=maxnum;
max(num1+num2,num2,num3,maxnum);
result:=result/maxnum;
max(num1,num2,num2+num3,maxnum);
result:=result/maxnum;
writeln('The result is ',result)
END.
(*过程max法*)
2007年4月8日 sch