[pascal]第四次pascal试验课上机时写的小程序

本文记录了2007年4月6日的第四次Pascal试验课,内容聚焦于函数和过程结构程序设计。课堂上编写了几段代码,以课本题目位置命名,如P14_1_2.PAS代表第14页习题1.2。

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函数返回值为负数*)

 

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.

 

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法*)

 

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法*)

 

200748 sch

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值