




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、使用文件輸入輸出數據任何程序都需要產生一些輸出,有時也需要接受若干個輸入。這些輸入、輸出實際上是可以用文件的方式來實現的,在Pascal中可以用標準文件“input”和“output”來實現,它們分別對應標準的輸入設備和標準輸出設備(可省略不寫),這也就是一些程序的首部如下書寫的原因:program ex(input,output);或:program ex;對于大量數據的輸入和輸出都是用文件來實現的,因此,這就要求我們必須熟練掌握在程序中實現對文件的操作。第1節 產生隨機數文件【問題描述】編寫一個程序,產生500個1000以內的隨機正整數,存放在data.out文件中,并同時統計從其中大于等
2、于500的數據個數。【問題分析】本題有兩個問題需要解決,一要掌握隨機數的生成原理,讓計算機自動生成隨機數;二是將計算機產生的隨機數據存入文件中。【程序實現】Program p4_1(input,output);const n=500; n為控制隨機數個數的變量vari,a,s:integer; i為循環變量、a為暫時存放隨機數的變量、s為=500的數的個數f:text;定義f為文本文件變量beginassign(f,data.out);關聯文件變量f到一個外部文件data.outrewrite(f);以新建寫文件的方式打開文件randomize;設置隨機種子s:=0;統計變量清零for i:=
3、1 to n dobegina:=random(1001);產生隨機數write(f,a:5);將隨機數寫到文件里if i mod 10 =0 then writeln(f); 每寫10個數換一行if a=500 then s:=s+1; 統計=500的數的個數end;close(f);關閉文件write(=500 :, s); 在屏幕上打印=500的數的個數s end.【相關知識】1pascal程序中寫文件的5個步驟在Pascal程序重創建文件并寫入數據要經歷5個步驟,即:定義文件變量、關聯、寫準備、寫數據、關閉文件變量。 定義:在變量說明部分定義文件變量,變量名自己取,類型定義為text型
4、。 關聯:將一外部磁盤文件名賦于文本文件變量,使該文本文件與一相應外部磁盤文件相關聯。命令格式為:assign(f,name)其中f為定義的文本文件變量,name為實際磁盤上文件的文件名如:assign(file1, fileout.dat ) 或:assign(f1,e:aq2006a1.out )磁盤文件如包含路徑,如e:aq2006a1.out ,則表示將文件存放到e:aq2006文件夾中,文件名為a1.out,如果不加路徑,則存放在pascal工作目錄中,如果工作目錄沒有更改,Free Pascal默認的工作目錄一般為“C:”。經過關聯后,在程序中,如果對文本文件變量file1或f1的
5、操作,也就是對外部實際磁盤文件fileout.dat或e:aq2006a1.out的操作。 寫準備:如果要向文件中寫入數據,則在寫入數據之前應先以寫入方式打開。具體的寫打開方式有兩種:命令格式:rewrite(f)功能:創建并打開新文件準備寫,若已有同名文件則刪除再創建命令格式:append(f)功能:打開已存在的文件并追加 寫數據:寫入數據時,就使用輸出語句write和writeln語句,寫入的效果就如同將屏幕上的數據原樣寫入文件中。只是在使用這兩條語句時,必須先使用文件變量指明寫入對象。如:Write(f,s) 或 writeln(file1,a(5),a(6)前者含義為向文件f中寫入變量
6、s的值,后者的含義為向文件file1寫入數組變量a(5)、a(6)的值。注意,這些數據實際上是寫入這些文件變量所關聯的磁盤文件中。 關閉:文件寫完后,必須關閉,關閉的格式為:Close(f),即關閉文件變量f。2查看文本文件由于文本文件是以ASCII碼的方式存儲,故查看文本文件的內容是極為方便,在DOS狀態可使用 DOS中TYPE等命令進行查看,在Pascal中可以象取程序一樣取出文件進行查看。而在windows操作系統中,最方便的方法是按下鍵盤上空格鍵兩邊的windows鍵,切換到桌面,再找到剛才程序生成的數據文件,用記事本查看該數據文件的內容,如圖1.1圖4.1所示的就是用記事本打開示例數
7、據文件的效果。圖4.1 用記事本打開數據3文本文件的特點 行結構文本文件由若干行組成,行與行之間用行結束標記隔開,文件末尾有一個文件結束標記。由于各行長度可能不同,所以無法計算出給定行在文本文件中的確定位置,從而只能順序地處理文本文件,而且不能對一文本文件同時進行輸入和輸出。 自動轉換功能文本文件的每一個元素均為字符型,在將一個變量寫入文本文件時,也會自動轉移為字符型。與此相反,在將文件元素讀入到一個變量(整型,實型或字符串型)中時,Free Pascal會自動將其轉換為與變量相同的數據類型。4計算機自動生成隨機數隨機數是計算機程序中方便獲得大量模擬數據的一個重要手段。在pascal中,可以利
8、用random 函數自動生成隨機數,其格式為:random(range)不指定range時,結果是0,1之間的隨機實數(0,1表示0并且1)。如果指定了range,range必須是整型表達式,結果為0,range之間的隨機正整數,如果range為0則,返回0。隨機數產生程序由randomize命令初始化,因此在使用random函數之前,應先使用randomize命令進行隨機種子的初始化。【同步練習】1已知斐波那契(faibonacci)數列的前幾個數分別是0、1、1、2、3、5、8,編寫程序求此數列的前100項,并將前100項輸出到一個文件中。問題分析:此問題的解決利用以前章節所學的知識完全可
9、以解決,只要掌握斐波那契數列從第3項開始,任意一項的值等于前兩項值的和,即:F(n)= F(n-1)+ F(n-2)需要注意的是循環的次數要控制準確,因為第1項是從0開始的,而不想通常的題目是從1開始的。本題中練習的重點是如何將這些數輸入到文件中,只要掌握的血文件的基本要領,本題是不難完成的。程序設計:略2照使用pascal語言程序寫文件的步驟有如下5步,請將它們正確排序: 用write或writeln向文件中寫入數據。 用close命令關閉文件。 在程序說明的var區用text類型標志定義一個文件變量。 用rewrite或者用append命令以新建或追加方式打開文件,準備存放數據。 用ass
10、igh命令設定要操作的磁盤文件。正確的步驟是:_第2節 對文件中的數據進行排序【問題描述】在上一課由程序生成的文件data.out中,讀入500個隨機數,將它們排序后存放到datasort.out中。【問題分析】本例中先要打開data.out文件,將其中的數據讀入到一個數組中,然后進行排序,最后將排序的結果輸出到文件datasort.out 中。只要認真仔細的按照文件數據的讀取和寫入的步驟來編程,程序的實現應該是不成問題的。【程序實現】Program p4_2(input,output);const n=500; n為控制隨機數個數的變量vari,j,p,t:integer;f1,f2:tex
11、t;定義f1、f2為文本文件變量a:array1.n of integer;定義數組abeginassign(f1,data.out);關聯文件變量f1到外部文件data.outreset(f1);復位文件指針,以讀方式打開文件for i:=1 to n do read(f1,ai);讀入數據存放到數組a中close(f1);for i:=1 to n-1 do選擇法排序beginp:=i;for j:=i+1 to n doif ajap then p:=j;t:=ai;ai:=ap;ap:=t;end;assign(f2,datasort.out);關聯文件變量f2到輸出文件datasor
12、t.outrewrite(f2);以新建寫文件的方式打開文件f2for i:=1 to n dobeginwrite(f2,ai:5);將數組中的數依次寫到文件里if i mod 10 =0 then writeln(f2); 每寫10個數換一行end;close(f2);關閉文件end.程序運行后,用記事本程序打開datasort.out文件,可以看到排列好的數據如圖4.2所示。圖4.2 排序后的數據文件內容【相關知識】1pascal程序中讀文件的5個步驟在Pascal程序中讀入也要經歷5個步驟,即:定義文件變量、關聯磁盤文件、讀準備、讀數據、關閉文件變量。定義文件變量、關聯磁盤文件、關閉文
13、件變量等幾步和寫文件操作類似,這里就不再贅述了。讀準備是在讀數據之前,先以讀方式,復位文件指針,命令格式是reset(文件變量)。讀數據時,就使用讀語句read和readln語句。和寫文件數據一樣,讀數據時也要指定從那個文件變量中讀入數據。如:read(f,s) 或 readln(file1,a(5),a(6)即從文件f中讀入數據,賦值給變量s;從文件file1中讀入兩個數據,賦值給數組變量a(5)、a(6)。以讀文件方式時打開文件時,實際上有一個文件指針指向第1個數據,讀完一個數據后,指針自動指向下一個數據,當程序中再有讀數據操作時,將讀入指針所指的數據。碰到readln語句時,讀完read
14、ln語句所需數據后,文件指針自動換行,指向下一行的第1個數據。2與文本文件相關的函數:與文本文件相關的函數有兩個,即eof(f)和eoln(f),它們的含義是:(1)eof(f) 布爾函數,用于判斷文件結束否。其中f是文件變量,函數的返回結果為true時,表示到達文件尾,反之則未到文件尾。eof是end of file的縮寫。(2)eoln(f) 布爾函數,用于判斷行結束否。其中f是文件變量,函數的返回結果為true時,表示到達本行結尾,反之則未到行尾。eoln是end of line的縮寫。【同步練習】 1現有兩個已經按從小到大排好序的整數文件f1和f2,請編寫程序將f1和f2合并成一個文件
15、f12,使得合并后的文件也是按從小到大排好序的。問題分析:解決本題需要處理好以下幾個方面的問題。 本文題涉及到同時對三個文件的操作,同時從f1和f2中讀取數據,再向f3中寫數據。只要思路清晰,文件的讀寫部分難度不大。 由于數據量不定,讀取數據用while循環,循環的條件由eof(f)函數來控制。 合并的算法可以采用如下思路:先從f1和f2各讀一個數a1、a2,比較大小,將小的(假如a2小)寫入f3;接著再在f2中讀一個數,跟a1比,小的寫入f3,依此類推,直到某個文件中的數讀完,再將另外一個文件中剩下的數依次寫入f3。這個算法就好像兩個已經按高矮排好隊的隊列合并成一個新隊列一樣。請你想象一下就
16、會明白這個算法的思路了。2編寫一程序,計算英文文章文本文件中,字母e出現了多少次。3編寫一程序,統計一個文本文件f中共有多少行和多少字符。4編寫程序從磁盤上讀取一個由100個實數組成的實型數據文件(indata.dat),以此文件中所有大于平均值的實數建立一個名為“above.dat”的文件,其余的建立一個名為“rest.dat”的文件。 第3節 利用文件測試程序【問題描述】某學習小組有10人,參加某次測驗,考核6門功課, 統計每人的總分及各門的平均分,將原始數據及結果數據放入文本文件中。【問題分析】本文題的程序設計部分所涉及的知識都是前面學習過的文件知識,這里主要是討論如何編寫制作測試數據來
17、檢驗程序的正確性。利用Windows的“記事本”程序建立原始數據文件textin.dat存貯在磁盤中,其內容如下:10 6 1 78 89 67 90 98 67 2 90 93 86 84 86 933 93 85 78 89 78 984 67 89 76 67 98 745 83 75 92 78 89 746 76 57 89 84 73 717 81 93 74 76 78 868 68 83 91 83 78 899 63 71 83 94 78 9510 78 99 90 80 86 70程序讀入原始數據文件,求每人的總分及各門的平均分;同時建立結果數據文件,文件名為textou
18、t.dat。【程序實現】program p4_3(input,output); var f:text; i,j,n,m,s:integer; data:array 1.11,0.7 of integer; p:array 1.6 of integer;begin assign(f,textin.dat); 從文本文件中讀取數據 reset(f); read(f,n);readln(f,m); for i:=1 to n do for j:=0 to m do read(f,datai,j); close(f);fillchar(p,sizeof(p),0);將數組p中元素全部賦值為0 for
19、i:=1 to n do begin s:=0; for j:=1 to m do 求每人總分,各科總分 begin s:=s+datai,j; pj:=pj+datai,j; end; datai,m+1:=s; end; for i:=1 to n do顯示輸出數據 begin for j:=0 to m+1 do write(datai,j:4); writeln; end; write( ); for j:=1 to m do 求各科平均分 begin pj:=pj div n; write(pj:4); end; writeln; assign(f,textout.dat); 將數據
20、寫入文件 rewrite(f); for i:=1 to n do begin for j:=0 to m+1 do write(f,datai,j:4); writeln(f); end; write(f, ); for j:=1 to m do write(f,pj:4); writeln(f); close(f);end.【相關知識】1手工測試的問題實際上,我們在未使用文件來編寫程序時,通過read語句輸入數據時,可以在運行過程中換用不同的數據來測試程序,但是有些程序往往無法手工進行測試,這是由于有時數據量較大時,手工輸入測試費時費力,而且容易出錯,像本例中要測試一組數據要輸入60個數據,非常麻煩;還有的時候,由于數據量太大,根本無法手工完成測試數據,比如,本章第1課中測試一組數據要500個數據,手工測試幾乎不可能。因此,必須使用文件來測試程序2測試文件的制作程序所需測試數據文件的制作一般采用兩種方法,一是利用“記事本”程序手工編寫的方法,另一種是利用程序來自動生成。本章第2課問題中測試一組數據要500個隨機數,這種情況往往需要另外編寫一段程序來自動生成。這里我們重點討論第1種方法。“記事本”程序是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論