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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、a(6)前者含義為向文件f中寫入變量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等命令進行查看,在Pascal中可以象取程 序一樣取出文件進行查看。而在windows操作系統(tǒng)中,最方便的方法是按下鍵盤 上空格鍵兩邊的windows鍵,切換到桌面,再找到剛才程序生成的數(shù)據(jù)文件, 用 記事本查看該數(shù)據(jù)文件的內(nèi)容

7、,如圖1.1圖4.1所示的就是用記事本打開示例數(shù) 據(jù)文件的效果。dal a. out 一記麥亦BMW-1QJ 2d文件婕)立件蟲)格式迎)査看雀)隨機數(shù)i1泗円干巳1 V V10忖496972438561臥占323621S685309705859301745427詢13312624997691036921534768bwtwtJ1739U914331U18Q9570038996590962787SS378985678671MH7095015 3717100636時675308159176U726699BB&7U968119B67116873989U92618744369813266131610

8、99715528889513253278USB98652K w rir* - ria126wrrwwK r r ri193 !砂2003 02riTHHB38B r r r78rLTHHKrriB 832r r w k r r r : w559 rraiHHHB zjj圖4.1 用記事本打開數(shù)據(jù)3 文本文件的特點 行結(jié)構(gòu)文本文件由若干行組成,行與行之間用行結(jié)束標記隔開,文件末尾有一個文件結(jié) 束標記。由于各行長度可能不同,所以無法計算出給定行在文本文件中的確定位 置,從而只能順序地處理文本文件,而且不能對一文本文件同時進行輸入和輸出。 自動轉(zhuǎn)換功能文本文件的每一個元素均為字符型, 在將一個變量寫

9、入文本文件時,也會自動轉(zhuǎn) 移為字符型。與此相反,在將文件元素讀入到一個變量(整型,實型或字符串型) 中時,F(xiàn)ree Pascal會自動將其轉(zhuǎn)換為與變量相同的數(shù)據(jù)類型。4 計算機自動生成隨機數(shù)隨機數(shù)是計算機程序中方便獲得大量模擬數(shù)據(jù)的一個重要手段。在pascal中,可以利用random函數(shù)自動生成隨機數(shù),其格式為:ran dom(ra nge)不指定range時,結(jié)果是0,1之間的隨機實數(shù)(0,1表示0并且w 1)。如 果指定了 range , range必須是整型表達式,結(jié)果為0 , range之間的隨機正整 數(shù),如果range為0則,返回0。隨機數(shù)產(chǎn)生程序由randomize命令初始化,因此

10、在使用random函數(shù)之前,應(yīng)先 使用randomize命令進行隨機種子的初始化。【同步練習】1. 已知斐波那契(faibonacci )數(shù)列的前幾個數(shù)分別是0、1、1、2、3、5、8, 編寫程序求此數(shù)列的前100項,并將前100項輸出到一個文件中。問題分析:此問題的解決利用以前章節(jié)所學的知識完全可以解決,只要掌握斐波那契數(shù)列從 第3項開始,任意一項的值等于前兩項值的和,即:F(n)= F(n-1)+ F( n-2)需要注意的是循環(huán)的次數(shù)要控制準確, 因為第1項是從0開始的,而不想通常的 題目是從1開始的。本題中練習的重點是如何將這些數(shù)輸入到文件中, 只要掌握 的血文件的基本要領(lǐng),本題是不難完

11、成的。程序設(shè)計:略2. 照使用pascaI語言程序?qū)懳募牟襟E有如下 5步,請將它們正確排序: 用write或writeln向文件中寫入數(shù)據(jù)。 用close命令關(guān)閉文件。 在程序說明的var區(qū)用text類型標志定義一個文件變量。 用rewrite或者用append命令以新建或追加方式打開文件,準備存放數(shù)據(jù)。 用assigh命令設(shè)定要操作的磁盤文件。正確的步驟是:第2節(jié) 對文件中的數(shù)據(jù)進行排序【問題描述】在上一課由程序生成的文件data.out中,讀入500個隨機數(shù),將它們排序后存放至U datasort.out中?!締栴}分析】本例中先要打開data.out文件,將其中的數(shù)據(jù)讀入到一個數(shù)組中,然

12、后進行排序, 最后將排序的結(jié)果輸出到文件datasort.out中。只要認真仔細的按照文件數(shù)據(jù)的 讀取和寫入的步驟來編程,程序的實現(xiàn)應(yīng)該是不成問題的?!境绦?qū)崿F(xiàn)】Program p4_2(i nput,output);const n=500;vari,j,p,t:i nteger;f1,f2:text;a:array1.n of integer;begi nassig n( f1,data.out);reset(f1);for i:=1 to n do read(f1,ai);close(f1);for i:=1 to n-1 don為控制隨機數(shù)個數(shù)的變量定義f1、f2為文本文件變量定義數(shù)組a

13、關(guān)聯(lián)文件變量f1到外部文件data.out復(fù)位文件指針,以讀方式打開文件讀入數(shù)據(jù)存放到數(shù)組a中選擇法排序beg inP:=i;for j:=i+1 to n doif ajap the n p:=j;t:=ai;ai:=ap;ap:=t;end;assign(f2,datasort.out);關(guān)聯(lián)文件變量 f2 到輸出文件 datasort.outrewrite(f2);以新建寫文件的方式打開文件f2for i:=1 to n dobegi nwrite(f2,ai:5);將數(shù)組中的數(shù)依次寫到文件里if i mod 10 =0 then writeln(f2);每寫 10 個數(shù)換一行end;c

14、lose(f2);關(guān)閉文件end.程序運行后,用記事本程序打開datasort.out文件,可以看到排列好的數(shù)據(jù)如圖4. 2所示。圖4.2 排序后的數(shù)據(jù)文件內(nèi)容【相關(guān)知識】在Pascal程序中讀入也要經(jīng)歷5個步驟,即:定義文件變量、關(guān)聯(lián)磁盤文件、 讀準備、讀數(shù)據(jù)、關(guān)閉文件變量。定義文件變量、關(guān)聯(lián)磁盤文件、關(guān)閉文件變量等幾步和寫文件操作類似,這里就 不再贅述了。讀準備是在讀數(shù)據(jù)之前,先以讀方式,復(fù)位文件指針,命令格式是reset(文件變量)。讀數(shù)據(jù)時,就使用讀語句read和readln語句。和寫文件數(shù)據(jù)一樣,讀數(shù)據(jù)時也 要指定從那個文件變量中讀入數(shù)據(jù)。如:read(f,s)或 readl n(f

15、ile1,a (5) ,a(6)即從文件f中讀入數(shù)據(jù),賦值給變量s;從文件filel中讀入兩個數(shù)據(jù),賦值給 數(shù)組變量a(5)、a(6)。以讀文件方式時打開文件時,實際上有一個文件指針指向第1個數(shù)據(jù),讀完一個 數(shù)據(jù)后,指針自動指向下一個數(shù)據(jù),當程序中再有讀數(shù)據(jù)操作時,將讀入指針所 指的數(shù)據(jù)。碰到readln語句時,讀完readln語句所需數(shù)據(jù)后,文件指針自動換 行,指向下一行的第1個數(shù)據(jù)。2. 與文本文件相關(guān)的函數(shù):與文本文件相關(guān)的函數(shù)有兩個,即 eof(f)和eoln(f),它們的含義是:eof(f) 布爾函數(shù),用于判斷文件結(jié)束否。其中f是文件變量,函數(shù)的返回結(jié)果為true時,表示到達文件尾,

16、反之則未到文件尾。 eof是end of file的縮寫。eoln(f)布爾函數(shù),用于判斷行結(jié)束否。其中f是文件變量,函數(shù)的返回 結(jié)果為true時,表示到達本行結(jié)尾,反之則未到行尾。eoln是end of line 的 縮寫?!就骄毩暋? 現(xiàn)有兩個已經(jīng)按從小到大排好序的整數(shù)文件fl和f2,請編寫程序?qū)l和f2合并成一個文件f12,使得合并后的文件也是按從小到大排好序的。問題分析:解決本題需要處理好以下幾個方面的問題。 本文題涉及到同時對三個文件的操作,同時從 fl和f2中讀取數(shù)據(jù),再向f3 中寫數(shù)據(jù)。只要思路清晰,文件的讀寫部分難度不大。 由于數(shù)據(jù)量不定,讀取數(shù)據(jù)用while循環(huán),循環(huán)的條

17、件由eof(f)函數(shù)來控制。 合并的算法可以采用如下思路:先從fl和f2各讀一個數(shù)al、a2,比較大小,將小的(假如 a2小)寫入f3;接 著再在f2中讀一個數(shù),跟al比,小的寫入f3,依此類推,直到某個文件中的數(shù) 讀完,再將另外一個文件中剩下的數(shù)依次寫入f3。這個算法就好像兩個已經(jīng)按高矮排好隊的隊列合并成一個新隊列一樣。請你想象一下就會明白這個算法的思路了。2 編寫一程序,計算英文文章文本文件中,字母e出現(xiàn)了多少次。3 編寫一程序,統(tǒng)計一個文本文件f中共有多少行和多少字符。4編寫程序從磁盤上讀取一個由100個實數(shù)組成的實型數(shù)據(jù)文件(indata.dat),以 此文件中所有大于平均值的實數(shù)建立

18、一個名為 “above.da的文件,其余的建立一 個名為“rest.da的文件。第3節(jié)利用文件測試程序【問題描述】某學習小組有10人,參加某次測驗,考核6門功課,統(tǒng)計每人的總分及各門的 平均分,將原始數(shù)據(jù)及結(jié)果數(shù)據(jù)放入文本文件中?!締栴}分析】本文題的程序設(shè)計部分所涉及的知識都是前面學習過的文件知識,這里主要是討論如何編寫制作測試數(shù)據(jù)來檢驗程序的正確性。利用Windows的“記事本”程序建立原始數(shù)據(jù)文件 textin.dat存貯在磁盤中,其內(nèi)容如下:10 61 78 89 67 90 98 672 90 93 86 84 86 933 93 85 78 89 78 984 67 89 76 67

19、 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ù)文件,文件名為textout.dat?!境绦?qū)崿F(xiàn)】program p4_3(i nput,output);varf:text;i,j, n, m,s:i nteger;data:array 1.11,0.7 of in teger;p:array 1.6 of in teger;beg in

20、assig n( f,text in. dat);從文本文件中讀取數(shù)據(jù)reset (f);read(f, n);read ln( f,m);for i:=1 to n dofor j:=0 to m doread(f,datai,j); close(f);fillchar(p,sizeof(p),0);for i:=1 to n do將數(shù)組p中元素全部賦值為0beg ins:=0;for j:=1 to m dobeg in s:=s+datai,j; pj:=pj+datai,j;end;datai,m+1:=s; end;for i:=1 to n dobeg infor j:=0 to

21、m+1 dowrite(datai,j:4);求每人總分,各科總分顯示輸出數(shù)據(jù)write In;end;write();for j:=1 to m do 求各科平均分beg inPj:=Pj div n; write(pj:4);end;write In;assign(f,textout.dat); 將數(shù)據(jù)寫入文件rewrite (f);for i:=1 to n dobegi nfor j:=0 to m+1 dowrite(f,datai,j:4);writel n(f);end;write(f,);for j:=1 to m dowrite(f,pj:4);writel n(f);clo

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

23、題中測試一組數(shù)據(jù)要500個隨機數(shù),這種情況往往需要另外編寫一段程序來自動生成。這里我們重點 討論第1種方法。“記事本”程序是 Windows自帶的文本文件編輯程序,利用它可以快速的編寫 我們想要的數(shù)據(jù)文件。具體的操作步驟是: 按鍵盤上空格鍵兩邊的 Windows鍵,切換回桌面。 進入需要建立測試數(shù)據(jù)的文件夾,如2005pas”,按如錯誤!未找到引用源所示操作,使Windows顯示文件的擴展名單和耳云葩Qi畫環(huán)盲文棹霰a? t0環(huán)護忙肝審伐玄枠JIW | 的a工跖站聲伽消扇IQ曲譽毎虞國* ms交轉(zhuǎn) 疋匚丄片毛燧住圖匸如苗刃丄梗. m古g二到圖4.3顯示文件的擴展名 在2005pas”文件夾中,

24、按如圖4.4所示操作,建立文本文件,并改名為textin .dat ”。!_! .?* 410諏.口 m W TF :,*: (ETk* J?J*i*l ihrrMf l 何辭啊 Jkctt iSB即耳yflirinwA hwvlMft !#!豪叫盤妙曲仮樺呼早擊j i !:*(電$ )申tt !jA fi hfef lit fit*P-* *4 工*IN熙tO|圖4.4 建立文本文件 新建的文件默認文件名為 新建文本文檔.txt ”,右擊該文件,選擇重命名 菜單,按如所示操作,將文件改名為程序所需的測試文件名,如texti n. dat ”在出現(xiàn)可能會導致文件不可用”提示時,確認更改。圖4.

25、5修改文件擴展名 按住鍵盤上的Shift (上檔)鍵不放,右擊該文件,選擇 打開方式”菜單命 令,在彈出的 打開方式”對話框中按如圖4.6A所示操作,將該文件關(guān)聯(lián)到 記事 本”程序。d諂冉當扌測出丼收祕衛(wèi)護mm打4切Iw Viibdwn*2 liiitfT-lbAmi Rii fl 睿*i 陽擔片粗誦;tut. 和Ed時EIL. E Ai Lex 生“ 1*4/* E7IPJ5S5|t問哎柯卉軒(n:u*柯f肌A調(diào)整打開方式B輸入數(shù)據(jù)圖4.6制作測試文本文件 雙擊該文件,在打開的記事本界面中輸入測試數(shù)據(jù),最后選擇 文件” 一保存” 菜單命令保存。 單擊桌面底端任務(wù)欄上的freepascal程序

26、,修改好程序中調(diào)用測試文件的路 徑和文件名,運行程序,測試程序的正確性?!就骄毩暋? 有兩個文本文件name.in和age.in,兩個文件的行數(shù)相同,其中第1個 文件中每行是人名,第2個文件中每行是年齡。編寫一程序生成一個新的文件 i nfo.out,它的每一行由name.in人名和age.in年齡的對應(yīng)行數(shù)據(jù)組成。利用記事本事先制作好name.in和age.in這兩個測試文件When you are old and grey and full of sleep,And no ddi ng by the fire, take dow n this book,And slowly read,

27、and dream of the soft lookYour eyes had once, and of their shadows deep;How many loved your mome nts of glad grace,And loved your beauty with love false or true,But one man loved the pilgrim soul in you,And loved the sorrows of your cha nging face;And bending dow n beside the glow ing bars,Murmur, a

28、 little sadly, how love fledAnd paced upon the mountains overheadAnd hid his face amid a crowd of stars.The furthest dista nee in the worldIs not betwee n life and deathBut whe n I sta nd in front of youYet you dont know thatI love you.The furthest dista nee in the worldIs not whe n I sta nd in front of youYet you cant see my loveBut whe n un doubtedly knowing the love from bothYet cannot be together.The furthest dista nee in the worldIs not being a

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論