FREEPASCAL入門文件輸入與輸出_第1頁
FREEPASCAL入門文件輸入與輸出_第2頁
FREEPASCAL入門文件輸入與輸出_第3頁
FREEPASCAL入門文件輸入與輸出_第4頁
FREEPASCAL入門文件輸入與輸出_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、使用文件輸入輸出數(shù)據(jù)任何程序都需要產(chǎn)生一些輸出,有時也需要接受若干個輸入。這些輸入、輸出實際上是可以用文件的方式來實現(xiàn)的,在Pascal中可以用標(biāo)準(zhǔn)文件“input”和“output”來實現(xiàn),它們分別對應(yīng)標(biāo)準(zhǔn)的輸入設(shè)備和標(biāo)準(zhǔn)輸出設(shè)備(可省略不寫),這也就是一些程序的首部如下書寫的原因:program ex(input,output);或:program ex;對于大量數(shù)據(jù)的輸入和輸出都是用文件來實現(xiàn)的,因此,這就要求我們必須熟練掌握在程序中實現(xiàn)對文件的操作。第1節(jié) 產(chǎn)生隨機(jī)數(shù)文件【問題描述】編寫一個程序,產(chǎn)生500個1000以內(nèi)的隨機(jī)正整數(shù),存放在data.out文件中,并同時統(tǒng)計從其中大于等

2、于500的數(shù)據(jù)個數(shù)?!締栴}分析】本題有兩個問題需要解決,一要掌握隨機(jī)數(shù)的生成原理,讓計算機(jī)自動生成隨機(jī)數(shù);二是將計算機(jī)產(chǎn)生的隨機(jī)數(shù)據(jù)存入文件中?!境绦?qū)崿F(xiàn)】Program p4_1(input,output);const n=500; n為控制隨機(jī)數(shù)個數(shù)的變量vari,a,s:integer; i為循環(huán)變量、a為暫時存放隨機(jī)數(shù)的變量、s為=500的數(shù)的個數(shù)f:text;定義f為文本文件變量beginassign(f,data.out);關(guān)聯(lián)文件變量f到一個外部文件data.outrewrite(f);以新建寫文件的方式打開文件randomize;設(shè)置隨機(jī)種子s:=0;統(tǒng)計變量清零for i:=

3、1 to n dobegina:=random(1001);產(chǎn)生隨機(jī)數(shù)write(f,a:5);將隨機(jī)數(shù)寫到文件里if i mod 10 =0 then writeln(f); 每寫10個數(shù)換一行if a=500 then s:=s+1; 統(tǒng)計=500的數(shù)的個數(shù)end;close(f);關(guān)閉文件write(=500 :, s); 在屏幕上打印=500的數(shù)的個數(shù)s end.【相關(guān)知識】1pascal程序中寫文件的5個步驟在Pascal程序重創(chuàng)建文件并寫入數(shù)據(jù)要經(jīng)歷5個步驟,即:定義文件變量、關(guān)聯(lián)、寫準(zhǔn)備、寫數(shù)據(jù)、關(guān)閉文件變量。 定義:在變量說明部分定義文件變量,變量名自己取,類型定義為text型

4、。 關(guān)聯(lián):將一外部磁盤文件名賦于文本文件變量,使該文本文件與一相應(yīng)外部磁盤文件相關(guān)聯(lián)。命令格式為:assign(f,name)其中f為定義的文本文件變量,name為實際磁盤上文件的文件名如:assign(file1, fileout.dat ) 或:assign(f1,e:aq2006a1.out )磁盤文件如包含路徑,如e:aq2006a1.out ,則表示將文件存放到e:aq2006文件夾中,文件名為a1.out,如果不加路徑,則存放在pascal工作目錄中,如果工作目錄沒有更改,F(xiàn)ree Pascal默認(rèn)的工作目錄一般為“C:”。經(jīng)過關(guān)聯(lián)后,在程序中,如果對文本文件變量file1或f1的

5、操作,也就是對外部實際磁盤文件fileout.dat或e:aq2006a1.out的操作。 寫準(zhǔn)備:如果要向文件中寫入數(shù)據(jù),則在寫入數(shù)據(jù)之前應(yīng)先以寫入方式打開。具體的寫打開方式有兩種:命令格式:rewrite(f)功能:創(chuàng)建并打開新文件準(zhǔn)備寫,若已有同名文件則刪除再創(chuàng)建命令格式:append(f)功能:打開已存在的文件并追加 寫數(shù)據(jù):寫入數(shù)據(jù)時,就使用輸出語句write和writeln語句,寫入的效果就如同將屏幕上的數(shù)據(jù)原樣寫入文件中。只是在使用這兩條語句時,必須先使用文件變量指明寫入對象。如:Write(f,s) 或 writeln(file1,a(5),a(6)前者含義為向文件f中寫入變量

6、s的值,后者的含義為向文件file1寫入數(shù)組變量a(5)、a(6)的值。注意,這些數(shù)據(jù)實際上是寫入這些文件變量所關(guān)聯(lián)的磁盤文件中。 關(guān)閉:文件寫完后,必須關(guān)閉,關(guān)閉的格式為:Close(f),即關(guān)閉文件變量f。2查看文本文件由于文本文件是以ASCII碼的方式存儲,故查看文本文件的內(nèi)容是極為方便,在DOS狀態(tài)可使用 DOS中TYPE等命令進(jìn)行查看,在Pascal中可以象取程序一樣取出文件進(jìn)行查看。而在windows操作系統(tǒng)中,最方便的方法是按下鍵盤上空格鍵兩邊的windows鍵,切換到桌面,再找到剛才程序生成的數(shù)據(jù)文件,用記事本查看該數(shù)據(jù)文件的內(nèi)容,如圖1.1圖4.1所示的就是用記事本打開示例數(shù)

7、據(jù)文件的效果。圖4.1 用記事本打開數(shù)據(jù)3文本文件的特點 行結(jié)構(gòu)文本文件由若干行組成,行與行之間用行結(jié)束標(biāo)記隔開,文件末尾有一個文件結(jié)束標(biāo)記。由于各行長度可能不同,所以無法計算出給定行在文本文件中的確定位置,從而只能順序地處理文本文件,而且不能對一文本文件同時進(jìn)行輸入和輸出。 自動轉(zhuǎn)換功能文本文件的每一個元素均為字符型,在將一個變量寫入文本文件時,也會自動轉(zhuǎn)移為字符型。與此相反,在將文件元素讀入到一個變量(整型,實型或字符串型)中時,F(xiàn)ree Pascal會自動將其轉(zhuǎn)換為與變量相同的數(shù)據(jù)類型。4計算機(jī)自動生成隨機(jī)數(shù)隨機(jī)數(shù)是計算機(jī)程序中方便獲得大量模擬數(shù)據(jù)的一個重要手段。在pascal中,可以利

8、用random 函數(shù)自動生成隨機(jī)數(shù),其格式為:random(range)不指定range時,結(jié)果是0,1之間的隨機(jī)實數(shù)(0,1表示0并且1)。如果指定了range,range必須是整型表達(dá)式,結(jié)果為0,range之間的隨機(jī)正整數(shù),如果range為0則,返回0。隨機(jī)數(shù)產(chǎn)生程序由randomize命令初始化,因此在使用random函數(shù)之前,應(yīng)先使用randomize命令進(jìn)行隨機(jī)種子的初始化?!就骄毩?xí)】1已知斐波那契(faibonacci)數(shù)列的前幾個數(shù)分別是0、1、1、2、3、5、8,編寫程序求此數(shù)列的前100項,并將前100項輸出到一個文件中。問題分析:此問題的解決利用以前章節(jié)所學(xué)的知識完全可

9、以解決,只要掌握斐波那契數(shù)列從第3項開始,任意一項的值等于前兩項值的和,即:F(n)= F(n-1)+ F(n-2)需要注意的是循環(huán)的次數(shù)要控制準(zhǔn)確,因為第1項是從0開始的,而不想通常的題目是從1開始的。本題中練習(xí)的重點是如何將這些數(shù)輸入到文件中,只要掌握的血文件的基本要領(lǐng),本題是不難完成的。程序設(shè)計:略2照使用pascal語言程序?qū)懳募牟襟E有如下5步,請將它們正確排序: 用write或writeln向文件中寫入數(shù)據(jù)。 用close命令關(guān)閉文件。 在程序說明的var區(qū)用text類型標(biāo)志定義一個文件變量。 用rewrite或者用append命令以新建或追加方式打開文件,準(zhǔn)備存放數(shù)據(jù)。 用ass

10、igh命令設(shè)定要操作的磁盤文件。正確的步驟是:_第2節(jié) 對文件中的數(shù)據(jù)進(jìn)行排序【問題描述】在上一課由程序生成的文件data.out中,讀入500個隨機(jī)數(shù),將它們排序后存放到datasort.out中。【問題分析】本例中先要打開data.out文件,將其中的數(shù)據(jù)讀入到一個數(shù)組中,然后進(jìn)行排序,最后將排序的結(jié)果輸出到文件datasort.out 中。只要認(rèn)真仔細(xì)的按照文件數(shù)據(jù)的讀取和寫入的步驟來編程,程序的實現(xiàn)應(yīng)該是不成問題的?!境绦?qū)崿F(xiàn)】Program p4_2(input,output);const n=500; n為控制隨機(jī)數(shù)個數(shù)的變量vari,j,p,t:integer;f1,f2:tex

11、t;定義f1、f2為文本文件變量a:array1.n of integer;定義數(shù)組abeginassign(f1,data.out);關(guān)聯(lián)文件變量f1到外部文件data.outreset(f1);復(fù)位文件指針,以讀方式打開文件for i:=1 to n do read(f1,ai);讀入數(shù)據(jù)存放到數(shù)組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);關(guān)聯(lián)文件變量f2到輸出文件datasor

12、t.outrewrite(f2);以新建寫文件的方式打開文件f2for i:=1 to n dobeginwrite(f2,ai:5);將數(shù)組中的數(shù)依次寫到文件里if i mod 10 =0 then writeln(f2); 每寫10個數(shù)換一行end;close(f2);關(guān)閉文件end.程序運(yùn)行后,用記事本程序打開datasort.out文件,可以看到排列好的數(shù)據(jù)如圖4.2所示。圖4.2 排序后的數(shù)據(jù)文件內(nèi)容【相關(guān)知識】1pascal程序中讀文件的5個步驟在Pascal程序中讀入也要經(jīng)歷5個步驟,即:定義文件變量、關(guān)聯(lián)磁盤文件、讀準(zhǔn)備、讀數(shù)據(jù)、關(guān)閉文件變量。定義文件變量、關(guān)聯(lián)磁盤文件、關(guān)閉文

13、件變量等幾步和寫文件操作類似,這里就不再贅述了。讀準(zhǔn)備是在讀數(shù)據(jù)之前,先以讀方式,復(fù)位文件指針,命令格式是reset(文件變量)。讀數(shù)據(jù)時,就使用讀語句read和readln語句。和寫文件數(shù)據(jù)一樣,讀數(shù)據(jù)時也要指定從那個文件變量中讀入數(shù)據(jù)。如:read(f,s) 或 readln(file1,a(5),a(6)即從文件f中讀入數(shù)據(jù),賦值給變量s;從文件file1中讀入兩個數(shù)據(jù),賦值給數(shù)組變量a(5)、a(6)。以讀文件方式時打開文件時,實際上有一個文件指針指向第1個數(shù)據(jù),讀完一個數(shù)據(jù)后,指針自動指向下一個數(shù)據(jù),當(dāng)程序中再有讀數(shù)據(jù)操作時,將讀入指針?biāo)傅臄?shù)據(jù)。碰到readln語句時,讀完read

14、ln語句所需數(shù)據(jù)后,文件指針自動換行,指向下一行的第1個數(shù)據(jù)。2與文本文件相關(guān)的函數(shù):與文本文件相關(guān)的函數(shù)有兩個,即eof(f)和eoln(f),它們的含義是:(1)eof(f) 布爾函數(shù),用于判斷文件結(jié)束否。其中f是文件變量,函數(shù)的返回結(jié)果為true時,表示到達(dá)文件尾,反之則未到文件尾。eof是end of file的縮寫。(2)eoln(f) 布爾函數(shù),用于判斷行結(jié)束否。其中f是文件變量,函數(shù)的返回結(jié)果為true時,表示到達(dá)本行結(jié)尾,反之則未到行尾。eoln是end of line的縮寫。【同步練習(xí)】 1現(xiàn)有兩個已經(jīng)按從小到大排好序的整數(shù)文件f1和f2,請編寫程序?qū)1和f2合并成一個文件

15、f12,使得合并后的文件也是按從小到大排好序的。問題分析:解決本題需要處理好以下幾個方面的問題。 本文題涉及到同時對三個文件的操作,同時從f1和f2中讀取數(shù)據(jù),再向f3中寫數(shù)據(jù)。只要思路清晰,文件的讀寫部分難度不大。 由于數(shù)據(jù)量不定,讀取數(shù)據(jù)用while循環(huán),循環(huán)的條件由eof(f)函數(shù)來控制。 合并的算法可以采用如下思路:先從f1和f2各讀一個數(shù)a1、a2,比較大小,將小的(假如a2?。懭雈3;接著再在f2中讀一個數(shù),跟a1比,小的寫入f3,依此類推,直到某個文件中的數(shù)讀完,再將另外一個文件中剩下的數(shù)依次寫入f3。這個算法就好像兩個已經(jīng)按高矮排好隊的隊列合并成一個新隊列一樣。請你想象一下就

16、會明白這個算法的思路了。2編寫一程序,計算英文文章文本文件中,字母e出現(xiàn)了多少次。3編寫一程序,統(tǒng)計一個文本文件f中共有多少行和多少字符。4編寫程序從磁盤上讀取一個由100個實數(shù)組成的實型數(shù)據(jù)文件(indata.dat),以此文件中所有大于平均值的實數(shù)建立一個名為“above.dat”的文件,其余的建立一個名為“rest.dat”的文件。 第3節(jié) 利用文件測試程序【問題描述】某學(xué)習(xí)小組有10人,參加某次測驗,考核6門功課, 統(tǒng)計每人的總分及各門的平均分,將原始數(shù)據(jù)及結(jié)果數(shù)據(jù)放入文本文件中?!締栴}分析】本文題的程序設(shè)計部分所涉及的知識都是前面學(xué)習(xí)過的文件知識,這里主要是討論如何編寫制作測試數(shù)據(jù)來

17、檢驗程序的正確性。利用Windows的“記事本”程序建立原始數(shù)據(jù)文件textin.dat存貯在磁盤中,其內(nèi)容如下: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程序讀入原始數(shù)據(jù)文件,求每人的總分及各門的平均分;同時建立結(jié)果數(shù)據(jù)文件,文件名為textou

18、t.dat?!境绦?qū)崿F(xiàn)】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); 從文本文件中讀取數(shù)據(jù) 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);將數(shù)組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顯示輸出數(shù)據(jù) 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); 將數(shù)據(jù)

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.【相關(guān)知識】1手工測試的問題實際上,我們在未使用文件來編寫程序時,通過read語句輸入數(shù)據(jù)時,可以在運(yùn)行過程中換用不同的數(shù)據(jù)來測試程序,但是有些程序往往無法手工進(jìn)行測試,這是由于有時數(shù)據(jù)量較大時,手工輸入測試費時費力,而且容易出錯,像本例中要測試一組數(shù)據(jù)要輸入60個數(shù)據(jù),非常麻煩;還有的時候,由于數(shù)據(jù)量太大,根本無法手工完成測試數(shù)據(jù),比如,本章第1課中測試一組數(shù)據(jù)要500個數(shù)據(jù),手工測試幾乎不可能。因此,必須使用文件來測試程序2測試文件的制作程序所需測試數(shù)據(jù)文件的制作一般采用兩種方法,一是利用“記事本”程序手工編寫的方法,另一種是利用程序來自動生成。本章第2課問題中測試一組數(shù)據(jù)要500個隨機(jī)數(shù),這種情況往往需要另外編寫一段程序來自動生成。這里我們重點討論第1種方法。“記事本”程序是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論