版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、使用文件輸入輸出數(shù)據(jù)任何程序都需要產(chǎn)生一些輸出,有時(shí)也需要接受若干個(gè)輸入。這些輸入、輸出實(shí)際上是可以用文件的方式來實(shí)現(xiàn)的,在Pascal中可以用標(biāo)準(zhǔn)文件“input”和“output”來實(shí)現(xiàn),它們分別對(duì)應(yīng)標(biāo)準(zhǔn)的輸入設(shè)備和標(biāo)準(zhǔn)輸出設(shè)備(可省略不寫),這也就是一些程序的首部如下書寫的原因:program ex(input,output);或:program ex;對(duì)于大量數(shù)據(jù)的輸入和輸出都是用文件來實(shí)現(xiàn)的,因此,這就要求我們必須熟練掌握在程序中實(shí)現(xiàn)對(duì)文件的操作。第1節(jié) 產(chǎn)生隨機(jī)數(shù)文件【問題描述】編寫一個(gè)程序,產(chǎn)生500個(gè)1000以內(nèi)的隨機(jī)正整數(shù),存放在data.out文件中,并同時(shí)統(tǒng)計(jì)從其中大于等
2、于500的數(shù)據(jù)個(gè)數(shù)。【問題分析】本題有兩個(gè)問題需要解決,一要掌握隨機(jī)數(shù)的生成原理,讓計(jì)算機(jī)自動(dòng)生成隨機(jī)數(shù);二是將計(jì)算機(jī)產(chǎn)生的隨機(jī)數(shù)據(jù)存入文件中?!境绦?qū)崿F(xiàn)】Program p4_1(input,output);const n=500; n為控制隨機(jī)數(shù)個(gè)數(shù)的變量vari,a,s:integer; i為循環(huán)變量、a為暫時(shí)存放隨機(jī)數(shù)的變量、s為=500的數(shù)的個(gè)數(shù)f:text;定義f為文本文件變量beginassign(f,data.out);關(guān)聯(lián)文件變量f到一個(gè)外部文件data.outrewrite(f);以新建寫文件的方式打開文件randomize;設(shè)置隨機(jī)種子s:=0;統(tǒng)計(jì)變量清零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個(gè)數(shù)換一行if a=500 then s:=s+1; 統(tǒng)計(jì)=500的數(shù)的個(gè)數(shù)end;close(f);關(guān)閉文件write(=500 :, s); 在屏幕上打印=500的數(shù)的個(gè)數(shù)s end.【相關(guān)知識(shí)】1pascal程序中寫文件的5個(gè)步驟在Pascal程序重創(chuàng)建文件并寫入數(shù)據(jù)要經(jīng)歷5個(gè)步驟,即:定義文件變量、關(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為實(shí)際磁盤上文件的文件名如: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)后,在程序中,如果對(duì)文本文件變量file1或f1的
5、操作,也就是對(duì)外部實(shí)際磁盤文件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ù)時(shí),就使用輸出語(yǔ)句write和writeln語(yǔ)句,寫入的效果就如同將屏幕上的數(shù)據(jù)原樣寫入文件中。只是在使用這兩條語(yǔ)句時(shí),必須先使用文件變量指明寫入對(duì)象。如:Write(f,s) 或 writeln(file1,a(5),a(6)前者含義為向文件f中寫入變量
6、s的值,后者的含義為向文件file1寫入數(shù)組變量a(5)、a(6)的值。注意,這些數(shù)據(jù)實(shí)際上是寫入這些文件變量所關(guān)聯(lián)的磁盤文件中。 關(guān)閉:文件寫完后,必須關(guān)閉,關(guān)閉的格式為:Close(f),即關(guān)閉文件變量f。2查看文本文件由于文本文件是以ASCII碼的方式存儲(chǔ),故查看文本文件的內(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文本文件的特點(diǎn) 行結(jié)構(gòu)文本文件由若干行組成,行與行之間用行結(jié)束標(biāo)記隔開,文件末尾有一個(gè)文件結(jié)束標(biāo)記。由于各行長(zhǎng)度可能不同,所以無法計(jì)算出給定行在文本文件中的確定位置,從而只能順序地處理文本文件,而且不能對(duì)一文本文件同時(shí)進(jìn)行輸入和輸出。 自動(dòng)轉(zhuǎn)換功能文本文件的每一個(gè)元素均為字符型,在將一個(gè)變量寫入文本文件時(shí),也會(huì)自動(dòng)轉(zhuǎn)移為字符型。與此相反,在將文件元素讀入到一個(gè)變量(整型,實(shí)型或字符串型)中時(shí),F(xiàn)ree Pascal會(huì)自動(dòng)將其轉(zhuǎn)換為與變量相同的數(shù)據(jù)類型。4計(jì)算機(jī)自動(dòng)生成隨機(jī)數(shù)隨機(jī)數(shù)是計(jì)算機(jī)程序中方便獲得大量模擬數(shù)據(jù)的一個(gè)重要手段。在pascal中,可以利
8、用random 函數(shù)自動(dòng)生成隨機(jī)數(shù),其格式為:random(range)不指定range時(shí),結(jié)果是0,1之間的隨機(jī)實(shí)數(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ù)列的前幾個(gè)數(shù)分別是0、1、1、2、3、5、8,編寫程序求此數(shù)列的前100項(xiàng),并將前100項(xiàng)輸出到一個(gè)文件中。問題分析:此問題的解決利用以前章節(jié)所學(xué)的知識(shí)完全可
9、以解決,只要掌握斐波那契數(shù)列從第3項(xiàng)開始,任意一項(xiàng)的值等于前兩項(xiàng)值的和,即:F(n)= F(n-1)+ F(n-2)需要注意的是循環(huán)的次數(shù)要控制準(zhǔn)確,因?yàn)榈?項(xiàng)是從0開始的,而不想通常的題目是從1開始的。本題中練習(xí)的重點(diǎn)是如何將這些數(shù)輸入到文件中,只要掌握的血文件的基本要領(lǐng),本題是不難完成的。程序設(shè)計(jì):略2照使用pascal語(yǔ)言程序?qū)懳募牟襟E有如下5步,請(qǐng)將它們正確排序: 用write或writeln向文件中寫入數(shù)據(jù)。 用close命令關(guān)閉文件。 在程序說明的var區(qū)用text類型標(biāo)志定義一個(gè)文件變量。 用rewrite或者用append命令以新建或追加方式打開文件,準(zhǔn)備存放數(shù)據(jù)。 用ass
10、igh命令設(shè)定要操作的磁盤文件。正確的步驟是:_第2節(jié) 對(duì)文件中的數(shù)據(jù)進(jìn)行排序【問題描述】在上一課由程序生成的文件data.out中,讀入500個(gè)隨機(jī)數(shù),將它們排序后存放到datasort.out中?!締栴}分析】本例中先要打開data.out文件,將其中的數(shù)據(jù)讀入到一個(gè)數(shù)組中,然后進(jìn)行排序,最后將排序的結(jié)果輸出到文件datasort.out 中。只要認(rèn)真仔細(xì)的按照文件數(shù)據(jù)的讀取和寫入的步驟來編程,程序的實(shí)現(xiàn)應(yīng)該是不成問題的?!境绦?qū)崿F(xiàn)】Program p4_2(input,output);const n=500; n為控制隨機(jī)數(shù)個(gè)數(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個(gè)數(shù)換一行end;close(f2);關(guān)閉文件end.程序運(yùn)行后,用記事本程序打開datasort.out文件,可以看到排列好的數(shù)據(jù)如圖4.2所示。圖4.2 排序后的數(shù)據(jù)文件內(nèi)容【相關(guān)知識(shí)】1pascal程序中讀文件的5個(gè)步驟在Pascal程序中讀入也要經(jīng)歷5個(gè)步驟,即:定義文件變量、關(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ù)時(shí),就使用讀語(yǔ)句read和readln語(yǔ)句。和寫文件數(shù)據(jù)一樣,讀數(shù)據(jù)時(shí)也要指定從那個(gè)文件變量中讀入數(shù)據(jù)。如:read(f,s) 或 readln(file1,a(5),a(6)即從文件f中讀入數(shù)據(jù),賦值給變量s;從文件file1中讀入兩個(gè)數(shù)據(jù),賦值給數(shù)組變量a(5)、a(6)。以讀文件方式時(shí)打開文件時(shí),實(shí)際上有一個(gè)文件指針指向第1個(gè)數(shù)據(jù),讀完一個(gè)數(shù)據(jù)后,指針自動(dòng)指向下一個(gè)數(shù)據(jù),當(dāng)程序中再有讀數(shù)據(jù)操作時(shí),將讀入指針?biāo)傅臄?shù)據(jù)。碰到readln語(yǔ)句時(shí),讀完read
14、ln語(yǔ)句所需數(shù)據(jù)后,文件指針自動(dòng)換行,指向下一行的第1個(gè)數(shù)據(jù)。2與文本文件相關(guān)的函數(shù):與文本文件相關(guān)的函數(shù)有兩個(gè),即eof(f)和eoln(f),它們的含義是:(1)eof(f) 布爾函數(shù),用于判斷文件結(jié)束否。其中f是文件變量,函數(shù)的返回結(jié)果為true時(shí),表示到達(dá)文件尾,反之則未到文件尾。eof是end of file的縮寫。(2)eoln(f) 布爾函數(shù),用于判斷行結(jié)束否。其中f是文件變量,函數(shù)的返回結(jié)果為true時(shí),表示到達(dá)本行結(jié)尾,反之則未到行尾。eoln是end of line的縮寫?!就骄毩?xí)】 1現(xiàn)有兩個(gè)已經(jīng)按從小到大排好序的整數(shù)文件f1和f2,請(qǐng)編寫程序?qū)1和f2合并成一個(gè)文件
15、f12,使得合并后的文件也是按從小到大排好序的。問題分析:解決本題需要處理好以下幾個(gè)方面的問題。 本文題涉及到同時(shí)對(duì)三個(gè)文件的操作,同時(shí)從f1和f2中讀取數(shù)據(jù),再向f3中寫數(shù)據(jù)。只要思路清晰,文件的讀寫部分難度不大。 由于數(shù)據(jù)量不定,讀取數(shù)據(jù)用while循環(huán),循環(huán)的條件由eof(f)函數(shù)來控制。 合并的算法可以采用如下思路:先從f1和f2各讀一個(gè)數(shù)a1、a2,比較大小,將小的(假如a2小)寫入f3;接著再在f2中讀一個(gè)數(shù),跟a1比,小的寫入f3,依此類推,直到某個(gè)文件中的數(shù)讀完,再將另外一個(gè)文件中剩下的數(shù)依次寫入f3。這個(gè)算法就好像兩個(gè)已經(jīng)按高矮排好隊(duì)的隊(duì)列合并成一個(gè)新隊(duì)列一樣。請(qǐng)你想象一下就
16、會(huì)明白這個(gè)算法的思路了。2編寫一程序,計(jì)算英文文章文本文件中,字母e出現(xiàn)了多少次。3編寫一程序,統(tǒng)計(jì)一個(gè)文本文件f中共有多少行和多少字符。4編寫程序從磁盤上讀取一個(gè)由100個(gè)實(shí)數(shù)組成的實(shí)型數(shù)據(jù)文件(indata.dat),以此文件中所有大于平均值的實(shí)數(shù)建立一個(gè)名為“above.dat”的文件,其余的建立一個(gè)名為“rest.dat”的文件。 第3節(jié) 利用文件測(cè)試程序【問題描述】某學(xué)習(xí)小組有10人,參加某次測(cè)驗(yàn),考核6門功課, 統(tǒng)計(jì)每人的總分及各門的平均分,將原始數(shù)據(jù)及結(jié)果數(shù)據(jù)放入文本文件中?!締栴}分析】本文題的程序設(shè)計(jì)部分所涉及的知識(shí)都是前面學(xué)習(xí)過的文件知識(shí),這里主要是討論如何編寫制作測(cè)試數(shù)據(jù)來
17、檢驗(yàn)程序的正確性。利用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ù)文件,求每人的總分及各門的平均分;同時(shí)建立結(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)知識(shí)】1手工測(cè)試的問題實(shí)際上,我們?cè)谖词褂梦募砭帉懗绦驎r(shí),通過read語(yǔ)句輸入數(shù)據(jù)時(shí),可以在運(yùn)行過程中換用不同的數(shù)據(jù)來測(cè)試程序,但是有些程序往往無法手工進(jìn)行測(cè)試,這是由于有時(shí)數(shù)據(jù)量較大時(shí),手工輸入測(cè)試費(fèi)時(shí)費(fèi)力,而且容易出錯(cuò),像本例中要測(cè)試一組數(shù)據(jù)要輸入60個(gè)數(shù)據(jù),非常麻煩;還有的時(shí)候,由于數(shù)據(jù)量太大,根本無法手工完成測(cè)試數(shù)據(jù),比如,本章第1課中測(cè)試一組數(shù)據(jù)要500個(gè)數(shù)據(jù),手工測(cè)試幾乎不可能。因此,必須使用文件來測(cè)試程序2測(cè)試文件的制作程序所需測(cè)試數(shù)據(jù)文件的制作一般采用兩種方法,一是利用“記事本”程序手工編寫的方法,另一種是利用程序來自動(dòng)生成。本章第2課問題中測(cè)試一組數(shù)據(jù)要500個(gè)隨機(jī)數(shù),這種情況往往需要另外編寫一段程序來自動(dòng)生成。這里我們重點(diǎn)討論第1種方法。“記事本”程序是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版高端住宅室內(nèi)裝飾施工合同2篇
- 職業(yè)病危害評(píng)價(jià)課程設(shè)計(jì)
- 2025年度緊急救援包機(jī)運(yùn)輸服務(wù)合同2篇
- 職業(yè)心態(tài)課程設(shè)計(jì)
- 2025版智能制造公司授權(quán)委托合同樣本3篇
- 幼兒小蝌蚪故事課程設(shè)計(jì)
- 二零二五年度東莞離婚協(xié)議書模板定制與婚姻法律援助及執(zhí)行合同3篇
- 編程穿戴技術(shù)課程設(shè)計(jì)
- 二零二五年度個(gè)人獨(dú)資企業(yè)股權(quán)變更及財(cái)務(wù)顧問合同5篇
- 2025版劇本改編游戲保密合同樣本3篇
- 智慧實(shí)驗(yàn)室智能化專項(xiàng)解決方案
- 國(guó)家開放大學(xué)電大《刑法學(xué)(1)》期末題庫(kù)及答案
- 【正版授權(quán)】 ISO 9073-1:2023 EN Nonwovens - Test methods - Part 1: Determination of mass per unit area
- CJT156-2001 溝槽式管接頭
- 張成福《公共管理學(xué)》(修訂版)課后習(xí)題詳解
- 便利店轉(zhuǎn)讓簡(jiǎn)單合同范本
- 腦卒中后吞咽障礙患者進(jìn)食護(hù)理試題及答案
- 中草藥產(chǎn)業(yè)園規(guī)劃方案
- 護(hù)理文書書寫規(guī)范
- MOOC 計(jì)量經(jīng)濟(jì)學(xué)-西南財(cái)經(jīng)大學(xué) 中國(guó)大學(xué)慕課答案
- 無人機(jī)測(cè)試與評(píng)估標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論