存档在 ‘pascal’ 分类

第9章“文件”讲课稿

2010年6月5日

一、复习

用键盘输入一段文字,在屏幕上输出这段文字。

思路:

Program   P9_01(input,output);

Var ch:char;

Begin

Read(ch);

While ch<>chr(10)  do

  begin

   Write(ch);

   Read(ch);

  End;

Readln;

Readln

End.

技巧:

回车换行的表示:chr(10)或者eoln,这两者的区别是一个是字符型,一个是返回值为布尔型的函数。同样,eof是返回值为布尔类型的函数。

二、新课

1、导入,将上题改为:从磁盘文件shuru.txt中读入字符,并显示在屏幕上。

(1)文件的概念:文件被定义为同一类型元素组成的顺序集合。

(2)在PASCAL中,文件可以分为:文本文件、类型文件、无类型文件。

(3)文本文件:是以字符(ASCII码)形式存储的。类型文件是以二进制代码的形式存放的。无类型文件是一个低层的I/O通道,信息学奥赛不用这样的文件。

(4)程序代码如下:

program p9_0_2(input,output);

uses dos;

var f:text;

   ch:char;

   str1:string[15];

begin

  writeln(‘please input file name’);

  readln(str1);

  assign(f,str1);

  reset(f);

  while not eof(f) do

     begin

       read(f,ch);

       write(ch);

     end;

  close(f);

  readln

end.

2、例1:从键盘输入一段正文,将它复制到指定的磁盘文件中,然后再在显示器上输出。

program p9_01(input,output);

var f:text;

    ch:char;

begin

  assign(f,’shuchu1.txt’);

  rewrite(f);

  writeln(‘Please input char’);

  while not eoln do

    begin

     read(ch);

     write(f,ch);

    end;

  close(f);

  writeln;

  reset(f);

  while not eoln(f) do

    begin

     read(f,ch);

     write(ch,’+++’);

    end;

  close(f);

  readln;

  readln

end.

3、例2:将文本文件f复制到文本文件g中。

program p9_2(input,output);

var f,g:text;

    f1,g1:string;

   ch:char;

begin

  write(‘Please input f name:’);

  readln(f1);

  write(‘Please input g name:’);

  readln(g1);

  assign(f,f1);

  assign(g,g1);

  reset(f);

  rewrite(g);

  while not eof(f) do

    begin

      read(f,ch);

      write(g,ch);

    end;

  close(f);

  close(g);

  writeln(‘The programm has successful!’);

  readln

end.

4、例3:产生n个随机数(500以内),存放在text 类型的文件file1中,再从此文件中读取所有数据进行排序,把排序好的数存放在text类型文件file2中,最后把file2中的文件在显示器上输出。

program p9_3(input,output);

var a:array[1..500] of integer;

   i,j,n,temp:integer;

   file1,file2:text;

begin

  assign(file1,’file1.txt’);

  assign(file2,’file2.txt’);

  randomize;

  write(‘Please input n:’);

  readln(n);

  rewrite(file1);

  for i:=1 to n do

      write(file1,random(500):6);

  close(file1);

  reset(file1);

  for i:=1 to n do

    read(file1,a[i]);

  close(file1);

  for i:=1 to n-1 do

    for j:=i+1 to n do

      if a[i]>a[j] then

        begin

          temp:=a[i];

          a[i]:=a[j];

          a[j]:=temp

        end;

  rewrite(file2);

  for i:=1 to n do

    write(file2,a[i]:6);

  close(file2);

  for i:=1 to n do

    write(a[i]:5);

  readln

end.

5、例4:将1到20这20个整数写到file类型文件f中。

program p9_4(input,output);

var f1:file of integer;

    str1:string;

    i:integer;

begin

   write(‘Please input f name:’);

   readln(str1);

   assign(f1, str1);

   rewrite(f1);

   for i:=1 to 20 do

     write(f1,i);

   close(f1);

end.

6、例5:将file类型文件f中的整数读入到数组中,并在屏幕上输出。

program p9_5(input,output);

var f1:file of integer;

    str1:string;

    a:array[1..500]of integer;

    i:integer;

begin

  write(‘Please input file name:’);

  readln(str1);

  assign(f1,str1);

  rewrite(f1);

  randomize;

  for i:=1 to 500 do

    begin

      a[i]:=random(500);

      write(f1,a[i]);

    end;

  close(f1);

  reset(f1);

  while not eof(f1) do

     begin

       read(f1,i);

       write(i:6);

     end;

  close(f1);

  readln

end.

7、例6:设有一个整数文件f,现要求将其中的偶数乘以2,奇数减1,形成一个偶数文件。

program p9_6(input,output);

var f1:file of integer;

    i,j:integer;

    str1:string;

begin

  write(‘Please input file name:’);

  readln(str1);

  assign(f1,str1);

  reset(f1);

  while not eof(f1) do

    begin

      read(f1,i);

      write(i:5);

    end;

  close(f1);

  writeln;

  writeln(‘++++++++++++’);

  reset(f1);

  j:=0;

  while not eof(f1) do

     begin

       read(f1,i);

       if odd(i) then i:=i-1

                 else i:=i*2;

       writeln(‘i=’,i);

       seek(f1,j);

       write(f1,i);

       j:=j+1;

     end;

  close(f1);

  reset(f1);

  while not eof(f1) do

    begin

      read(f1,i);

      write(i:5);

    end;

  close(f1);

  readln

end.

8、例7:设有两个已经排好序(从小到大)的整数文件t1和t2,请编程将t1和t2合并成一个新文件t,使得合并后的文件也是有序的。(从小到大)。

program p9_7_03(input,output);

var t1,t2,t:file of integer;

    i,j,temp,n:integer;

    a:array[1..500]of integer;

begin

   assign(t1,’t1.txt’);

   assign(t2,’t2.txt’);

   assign(t,’t.txt’);

   i:=1;

   reset(t1);

   while not eof(t1)  do

      begin

        read(t1,a[i]);

        i:=i+1;

      end;

   close(t1);

   for temp:=1 to i-1 do

     write(a[temp]:4);

   writeln;

   writeln(‘======================================’);

   reset(t2);

   j:=i;

   while not eof(t2) do

      begin

       read(t2,a[j]);

       j:=j+1;

      end;

   close(t2);

   for temp:=i to j-1 do

      write(a[temp]:4);

   writeln;

   writeln(‘=======================================’);

   n:=j-1;

   for i:=1 to n-1 do

     for j:=i+1 to n do

        if a[i]>a[j] then

           begin

             temp:=a[i];

             a[i]:=a[j];

             a[j]:=temp;

           end;

   rewrite(t);

   for i:=1 to n do

     begin

       write(t,a[i]);

       write(a[i]:4);

     end;

   close(t);

   readln

end.

第7章讲课稿第3课

2010年6月5日

一、复习

写一个计算阶乘的函数,并写一个主程序调用此函数,使用一些输入数据,验证函数的正确性。

Function fac(n:integer):integer;

Var s,i:integer;

Begin

S:=1;

For i:=1 to n do

S:=s*i;

Fac:=s;

End;

二、新课

1、递归函数

在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知。

使用递归解决问题,思路清晰,代码少。但是在主流高级语言中(如C语言、Pascal语言等)使用递归算法要耗用更多的栈空间,所以在堆栈尺寸受限制时(如嵌入式系统或者内核态编程),应避免采用。所有的递归算法都可以改写成与之等价的非递归算法。

2、例1:求n!。用递归法实现。

Function fac(n:integer):integer;

Begin

If  n=1 then fac:=1

       Else  Fac:=n*fac(n-1);

End;

3、例2:求Fibonacci数列(非波纳契)的第n项,该数列表示如下: 

Fibonacci 数列有如下特点:其第 1 , 2 项均为 1 , 1 。从第 3 个数开始,该数是其前两个数之和。

F1=1 (n=1)  

F2=1 (n=2)  

Fn=Fn-1+Fn-2 (n>=3)  

请你编写一个函数 fun ,它的功能是:对于一个给定的数N, 求Fibonacci 数列的第N项。

4、求两个数的最大公约数

以14和21、8和6为例,探索求最大公约数的方法。

5、用递归法求1+2+3+4+···+(n-1)+n的值。

6、讨论:

编写递归函数,必须考虑哪几个问题?

(1)这一项与前一项的共用点是什么?

(2)递归的终止条件是什么?

关于PASCAL编程的学习方法谈几点看法

2010年6月4日

很多学生在刚开始学习Pascal编程的时候,总是经历一个“兴奋”——“苦恼”的过程,不知道究竟该怎样学,才能学好pascal编程。下面谈谈我的一些体会。

第一个问题,必须明确编程的本质是什么?

从本质上来看,编程是解决问题,并用程序设计语言实现。从这一点来看,与木匠的学习过程类似,想像一下,假如一个木匠连斧头都用不好,他能用斧头来做出各种家俱吗?一样的道理,学习编程,必须将基本的编程工具学好,也就是要熟练掌握一门编程语言,而不是什么语言都会一点。这实际上是一个“编程匠”的过程,在经历了这个过程以后,再勤于反思,领悟编程过程中的各种“思想”,从而达到能将自己的思想变成代码,做到这一点,就能够称为“程序设计师”。这个从“匠”到“师”的过程并没有明显的界限,而是一个不断反复,螺旋上升的过程。

第二个问题,如何做好一个“编程匠”,如何成为一个优秀的“程序设计师”?

要想做一个“编程匠”,需要勤学苦练,多模仿,多练习。可以分阶段进行,先将别人的代码输入电脑调试,然后自己模仿写代码上机调试。在练习的过程中,必须掌握其中基本的模式、套路,要分“功能块”掌握——即,要实现什么功能,你就能写出什么样的代码。做到这一点,一般的程序也就会写了,但遇到新的、从未接触过的问题,可能还会无从下手。接下来的任务就是,在能写出代码的前提下,思考问题的本质是什么?别人是如何解决这些问题的,按什么样的步骤进行,其中的技巧是什么。经过不断的反思、积累,最终会由“量变”到“质变”,成为一个优秀的“程序设计师”,这个过程没有终点。

备案/许可证编号为: 苏ICP备09007150号