欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
pascal


  Pascal是一種計算機通用的高級程序設計語(yǔ)言。它由瑞士Niklaus Wirth教授于六十年代末設計并創(chuàng )立。 
  以法國數學(xué)家命名的Pascal語(yǔ)言現已成為使用最廣泛的基于DOS的語(yǔ)言之一,其主要特點(diǎn)有:嚴格的結構化形式;豐富完備的數據類(lèi)型;運行效率高;查錯能力。 
  正因為上述特點(diǎn),Pascal語(yǔ)言可以被方便地用于描述各種算法與數據結構。尤其是對于程序設計的初學(xué)者,Pascal語(yǔ)言有益于培養良好的程序設計風(fēng)格和習慣。IOI(國際奧林匹克信息學(xué)競賽)把Pascal語(yǔ)言作為三種程序設計語(yǔ)言之一, NOI(全國奧林匹克信息學(xué)競賽)把Pascal語(yǔ)言定為唯一提倡的程序設計語(yǔ)言,在大學(xué)中Pascal語(yǔ)言也常常被用作學(xué)習數據結構與算法的教學(xué)語(yǔ)言。 
  在Pascal問(wèn)世以來(lái)的三十余年間,先后產(chǎn)生了適合于不同機型的各種各樣版本。其中影響最大的莫過(guò)于Turbo Pascal系列軟件。它是由美國B(niǎo)orland公司設計、研制的一種適用于微機的Pascal編譯系統。該編譯系統由1983年推出1.0版本發(fā)展到1992年推出的7.0版本,其版本不斷更新,而功能更趨完善。 
  下面列出Turbo Pascal編年史 
  出版年代 版本名稱(chēng) 主要特色
  1983 Turbo Pascal 1.0 
  Turbo Pascal 2.0 
  Turbo-87 Pascal 提高實(shí)數運算速度并擴大值域 
  1985 Turbo Pascal 3.0 增加圖形功能 
  Turbo BCD Pascal 特別適合應用于商業(yè) 
  1987 Turbo Pascal 4.0 提供集成開(kāi)發(fā)環(huán)境(IDE),引入單元概念 
  1988 Turbo Pascal 5.0 增加調試功能 
  1989 Turbo Pascal 5.5 支持面向對象的程序設計(OPP) 
  1990 Turbo Pascal 6.0 提供面向對象的應用框架和庫(Turbo Vision) 
  1992 Turbo Pascal 7.0 面向對象的應用系統、更完善的IDE 
  Turbo Vision 2.0 
  1993 Borland Pascal 7.0 開(kāi)發(fā) Object Windows庫、
  __(For Windows) 提供對OLE多媒體應用開(kāi)發(fā)的支持 
  1995 Delphi (Object Pascal) 
  Visual Pascal 
  Turbo Pascal語(yǔ)言是編譯型程序語(yǔ)言,它提供了一個(gè)集成環(huán)境的工作系統,集編輯、編譯、運行、調試等多功能于一體
  ps:高級語(yǔ)言發(fā)展過(guò)程中,PASCAL是一個(gè)重要的里程碑。PASCAL語(yǔ)言是第一個(gè)系統地體現了E.W.Dijkstra和C.A.R.Hoare定義的結構化程序設計概念的語(yǔ)言。1971年,瑞士聯(lián)邦技術(shù)學(xué)院尼克勞斯·沃爾斯(N.Wirth)教授發(fā)明了另一種簡(jiǎn)單明晰的電腦語(yǔ)言,這就是以電腦先驅帕斯卡的名字命名的PASCAL語(yǔ)言。PASCAL語(yǔ)言語(yǔ)法嚴謹,層次分明,程序易寫(xiě),具有很強的可讀性,是第一個(gè)結構化的編程語(yǔ)言。它一出世就受到廣泛歡迎,迅速地從歐洲傳到美國。沃爾斯一生還寫(xiě)作了大量有關(guān)程序設計、算法和數據結構的著(zhù)作,因此,他獲得了1984年度“圖靈獎”。
  Pascal有5個(gè)主要的版本,分別是Unextended Pascal、Extended Pascal、Object-Oriented Extensions to Pascal、Borland Pascal和Delphi Object Pascal。其中,Unextended Pascal、Extended Pascal和Object-Oriented Extensions to Pascal是由Pascal標準委員會(huì )所創(chuàng )立和維護的,Unextended Pascal類(lèi)似于瑞士Niklaus Wirth教授和K.Jensen于1974年聯(lián)名發(fā)表的Pascal用戶(hù)手冊和報告,而Extended Pascal則是在其基礎上進(jìn)行了擴展,加入了許多新的特性,它們都屬于正式的Pascal標準;Object-Oriented Extensions to Pascal是由Pascal標準委員會(huì )發(fā)表的一份技術(shù)報告,在Extended Pascal的基礎上增加了一些用以支持面向對象程序設計的特性,但它屬于非正式的標準。Borland Pascal和Delphi Object Pascal是由Borland公司專(zhuān)門(mén)為其開(kāi)發(fā)的編譯工具設計的Pascal語(yǔ)言,前者是用于DOS的Turbo Pascal系列和Windows 3.x的Turbo Pascal for Windows的傳統高級語(yǔ)言,后者是用于Windows的Delphi和Linux的Kylix的面向對象程序設計語(yǔ)言,它們都不是正式的Pascal標準,具有專(zhuān)利性。但由于Turbo Pascal系列和Delphi功能強大并且廣為流行,Borland Pascal和Delphi Object Pascal已自成為一種標準,為許多人所熟悉。
  看到這里,你可能會(huì )發(fā)覺(jué)我的回答與你最初的設想不同。你原來(lái)可能是想問(wèn)Turbo Pascal有幾個(gè)版本,然而我卻回答了Pascal語(yǔ)言有幾個(gè)版本。這就是初學(xué)者常有的一個(gè)錯誤認識:Pascal是一種編程工具。實(shí)際上,Pascal是一種程序設計語(yǔ)言的名稱(chēng)(從一般意義上說(shuō),Pascal也可以是指人名,它的取名原本就是為了紀念十七世紀法國著(zhù)名哲學(xué)家和數學(xué)家Blaise Pascal),而不是編程工具。剛才我是純粹從字面意思上來(lái)回答這個(gè)問(wèn)題。
  “在turbo pascal中不能使用標準pascal的緊縮字符型數組!turbo pascal建立文件也有自己的語(yǔ)法規則!assign!!! ” 
  PASCAL是一門(mén)編程語(yǔ)言,而TURBO PASCAL是PASCAL程序的編譯系統. 
  用pascal編輯的程序能在turbopascal中運行 
  Pascal只是一門(mén)語(yǔ)言,而Turbo Pascal是編譯器 
  這兩個(gè)是不能比較的 
  你可以把兩個(gè)語(yǔ)言放在一起比較,或者兩個(gè)編譯器放在一起比較 
  而一切編譯器都是基于語(yǔ)言的,因此不會(huì )有某個(gè)編譯器不能適應語(yǔ)言 
  在中國的信息學(xué)奧林匹克競賽中,過(guò)去比較常用的Pascal編程工具是Turbo Pascal。Turbo Pascal是DOS下的一種16位編程工具,在Delphi出現之前,它是世界上最多人使用的Pascal編程工具,擁有編譯速度極快的先進(jìn)編譯器和功能強大而又簡(jiǎn)便易用的集成開(kāi)發(fā)環(huán)境(IDE),在微機程序員中廣為流行,正是它的出現奠定了Pascal在DOS/Windows平臺上不可動(dòng)搖的根基,現在常見(jiàn)的版本有Turbo Pascal 5.5、Turbo Pascal 6.0和Borland Turbo Pascal with Objects 7.0。Turbo Pascal 6.0與Turbo Pascal 5.5相比,主要是IDE更為強大,而其程序設計功能改變不大,只是增加了一些新的功能,例如可以?xún)惹禷sm匯編語(yǔ)句等。而B(niǎo)orland Turbo Pascal with Objects 7.0(簡(jiǎn)稱(chēng)Borland Pascal 7.0)則有了新的飛躍,首先是IDE進(jìn)一步加強,提供了程序瀏覽器,然后是程序設計功能有了很大的提升,新增了一些十分有用的標準子程序,支持比較完善的面向對象程序設計功能,并提供了DOS實(shí)模式、DOS保護模式和Windows模式三種程序編譯模式,能夠編寫(xiě)出可以使用擴充內存(XMS)的保護模式應用程序或者在Windows 3.x下運行的Windows程序,另外還提供了一個(gè)對象窗口庫(OWL),使用它可以快速的開(kāi)發(fā)出具有一致的視窗界面(DOS或Windows 3.x)的應用程序。Borland Pascal 7.0在1992年推出,是Turbo Pascal系列在DOS下的最后版本。
  現在,隨著(zhù)Turbo Pascal逐漸被淘汰,全國信息學(xué)奧林匹克競賽決賽(NOI)和國際信息學(xué)奧林匹克競賽(IOI)已經(jīng)指定Free Pascal為比賽使用的Pascal編程工具。Free Pascal是由一個(gè)國際組織開(kāi)發(fā)的32位Pascal編程工具,屬于共享軟件,可用于各種操作系統。根據編譯選項的不同,它可以使用Borland Pascal兼容語(yǔ)法、Delphi 2 Object Pascal語(yǔ)法或者其它語(yǔ)法進(jìn)行編寫(xiě)程序。由于它擁有32位的編譯器,而且一直在更新發(fā)展中,因此它的功能比Borland Pascal更加強大,擁有許多現代程序設計的特征,但同時(shí)也很不成熟,存在很多漏洞。Free Pascal正處于發(fā)展初期,相應的函數庫十分少,對程序員的吸引力遠比不上擁有VCL和CLX的Delphi和Kylix。
  Pascal中基本符號以及保留字:
  pascal語(yǔ)言只能使用一下幾類(lèi)基本符號:
 ?。?)大小寫(xiě)英文字母
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  a b c d e f g h i j k l m n o p q r s t u v w x y z
 ?。?)數字
  1 2 3 4 5 6 7 8 9 0
 ?。?)其他符號
  + - * / = <> <= >= < > ( ) [ ] { } := , . ; : .. ' 
  注意,pascal語(yǔ)言除了可以使用以上規定的字符外,不得使用其他任何符號。
  補充說(shuō)明FreePascal(FP):
  Free Pascal是一個(gè)在多種版本Pascal和Delphi下的產(chǎn)物,目前比較成熟的版本是由FreePascal.org發(fā)布的1.0.10版本,由于是Pascal上的改版,在FP里加入了很多以前沒(méi)有的東西,例如:FillChar系列內存塊賦值語(yǔ)句,用Power代替了**(乘方),但是**還是可以使用。
  另外FP加強了與內存的互容性,增大對內存的支持,FP里的內存限制是TP和BP里的將近上萬(wàn)倍。
  FP還進(jìn)一步加強了單元支持、面向對象程序設計的支持、顯卡(聲卡)的支持、圖形高級覆蓋的支持、Windows\Linux\OS/2\..等眾多系統的支持。在FP的較穩定版本中,可以方便的利用Win32編譯模式,編譯出Windows應用程序,與Delphi的功能相當。同時(shí)對動(dòng)態(tài)連接庫、控件、數據庫、文件、網(wǎng)絡(luò )、OpenGL的深入支持,使得FP脫穎而出。
  更值得提出的是,FP支持Delphi及C++的部分語(yǔ)言,例如:A+=2這樣的C Style語(yǔ)言,在FP里完美支持。
  FP中支持單目、雙目操作符,即所有版本的Pascal的符號和“@”等特殊符號。
  FreePascal.org現在正在修訂FP 2.0的版本,但使用起來(lái)并沒(méi)有1.0.10那樣輕松,穩定性也下降不少。
  截止09年頭,版本到了2.2.4.

pascal教材

  第一節 Pascal語(yǔ)言的特點(diǎn)
  信息學(xué)奧林匹克競賽是一項益智性的競賽活動(dòng),核心是考查參賽選手的智力和使用計算機編程解題的能力。信息學(xué)奧林匹克競賽要求參賽選手有如下能力:針對競賽題目中的要求構建數學(xué)模型,構造出有效的算法和選用相應的數據結構,寫(xiě)出高級語(yǔ)言程序,上機調試通過(guò)。程序設計是信息學(xué)奧林匹克競賽的基本功,因此,青少年參與競賽活動(dòng)的第一步是必須掌握一門(mén)高級語(yǔ)言及其程序設計方法。
  以紀念法國數學(xué)家而命名的Pascal語(yǔ)言是使用最廣泛的計算機高級語(yǔ)言之一,被國際上公認為程序設計教學(xué)語(yǔ)言的典范。其主要特點(diǎn)有:嚴格的結構化形式;豐富完備的數據類(lèi)型;運行效率高;查錯能力強。正因為這些特點(diǎn),Pascal語(yǔ)言可以被方便地用于描述各種數據結構和算法,編寫(xiě)出高質(zhì)量的程序。尤其是對于青少年程序設計初學(xué)者,Pascal?語(yǔ)言有利于順利入門(mén),有益于從一開(kāi)始培養良好的程序設計風(fēng)格和習慣,越來(lái)越多的各類(lèi)學(xué)校都把Pascal語(yǔ)言作為程序設計教學(xué)的第一語(yǔ)言。IOI(國際奧林匹克信息學(xué)競賽)把Pascal語(yǔ)言規定為二種程序設計語(yǔ)言之一,?NOI(全國信息學(xué)奧林匹克競賽)把Pascal語(yǔ)言定為唯一提倡的程序設計語(yǔ)言,NOIp(全國信息學(xué)奧林匹克聯(lián)賽)把Pascal定為最主要的程序設計語(yǔ)言。
  Pascal語(yǔ)言有多種版本,本教材采用的Turbo Pascal 7.0(或Borland Pacsal 7.0) 是目前PC機上使用最多的一種高效Pascal,是迄今為止DOS環(huán)境下的最高版本。Turbo Pascal 7.0 所需硬件環(huán)境是任意型號的PC機,并且僅需一臺1.44M軟盤(pán)驅動(dòng)器(?當然有其它條件更好);最小軟件系統包括Turbo.exe(集成環(huán)境)和Turbo.tpl(標準單元庫)兩個(gè)文件,如果包括Turbo.hlp(求助文件)則更有利于學(xué)習。Turbo Pascal 7.0可以工作在DOS操作系統或Windows操作系統環(huán)境下。
  第一課 Pascal語(yǔ)言知識
  一、Pascal 語(yǔ)言概述 
  PASCAL語(yǔ)言是一種算法語(yǔ)言,它是瑞士蘇黎世聯(lián)邦工業(yè)大學(xué)的沃思教授于1968年設計完成的,1971年正式發(fā)表。PASCAL語(yǔ)言是在A(yíng)LGOL60的基礎上發(fā)展而成的。它是一種結構化的程序設計語(yǔ)言。它的功能強、編譯程序簡(jiǎn)單,是70年代影響最大一種算法語(yǔ)言。 
  從使用者的角度來(lái)看,PASCAL語(yǔ)言有以下幾個(gè)主要的特點(diǎn): 
 ?、?結構化
  PASCAL可以方便地書(shū)寫(xiě)出結構化程序。這就保證程序的正確性和易讀性。在結構化這一點(diǎn)上,比其它算法語(yǔ)言更好一些。 
 ?、?數據類(lèi)型豐富
  PASCAL提供了整數型、實(shí)型型、字符型、布爾型、枚舉型、子界型以及由以上類(lèi)型構成的數組類(lèi)型、集合類(lèi)型、記錄類(lèi)型和文件類(lèi)型。此外,還提供了其它許多語(yǔ)言中所沒(méi)有的指針類(lèi)型。豐富的數據結構和上述的結構化性質(zhì),使得PASCAL可以被方便地用來(lái)描述復雜的算法。 
 ?、?適用性好
  既適用于數值運算,也適用于非數值運算領(lǐng)域。有些語(yǔ)言只適用于數值計算,有些語(yǔ)言則適用于商業(yè)數據處理和管理領(lǐng)域。PASCAL的功能較強,能廣泛應用于各種領(lǐng)域。 
 ?、?書(shū)寫(xiě)較自由
  不象有些算法語(yǔ)言那樣對程序的書(shū)寫(xiě)格式有嚴格的規定。PASCAL允許一行寫(xiě)多個(gè)語(yǔ)句,一個(gè)語(yǔ)句可以分寫(xiě)在多行上,這樣就可以使PASCAL程序寫(xiě)得象詩(shī)歌格式一樣優(yōu)美,便于閱讀。 
  由于以上特點(diǎn),許多學(xué)校選PASCAL作為程序設計課程中的一種主要的語(yǔ)言。它能給學(xué)生嚴格而良好的程序設計的基本訓練。培養學(xué)生結構化程序設計的風(fēng)格。 
  二、Pascal語(yǔ)言程序的基本結構 
  任何程序設計語(yǔ)言都有一定的規則。使用PASCAL語(yǔ)言必須遵循其本身所規定的規則來(lái)編寫(xiě)程序。盡管不同版本的PASCAL語(yǔ)言所采用的符號的數量、形式不盡相同,但其基本成分一般都符合標準PASCAL的規定。下面我們首先來(lái)了解Pascal語(yǔ)言的程序基本結構。 
  為了明顯起見(jiàn),先舉一個(gè)最簡(jiǎn)單的PASCAL程序例子: 
  【例1】 
  program li1(input,output); {程序首部}
  const pi=3.1415926; {程序體 說(shuō)明部分}
  var r,l,s:real;
  begin {執行部分}
  write(‘input r:’); 
  readln(r);
  s:=pi*r*r;
  l:=2*pi*r;
  writeln(‘s=’,s);
  writeln(‘l=’,l);
  readln;
  end.{ 程序體}
  從這個(gè)簡(jiǎn)單的程序可以看到: 
 ?、?一個(gè)PASCAL程序分為兩個(gè)部分:程序首部和程序體(或稱(chēng)分程序)。 
 ?、?程序首部是程序的開(kāi)頭部分,它包括: 
 ?、懦绦驑酥?。用"program"來(lái)標明這是一個(gè)PASCAL 程序。PASCAL規定任何一個(gè)PASCAL程序的首部都必須以此字開(kāi)頭。在free pascal語(yǔ)言中,首部也可省略。 
 ?、瞥绦蛎Q(chēng)。由程序設計者自己定義,如例中的li1。在寫(xiě)完程序首部之后,應有一個(gè)分號。
 ?、?程序體是程序的主體,在有的書(shū)本里也稱(chēng)"分程序"。程序體包括說(shuō)明部分(也可省略)和執行部分兩個(gè)部分。
 ?、耪f(shuō)明部分用來(lái)描述程序中用到的變量、常量、類(lèi)型、過(guò)程與函數等。本程序中第二行是"變量說(shuō)明",用來(lái)定義變量的名稱(chēng)、類(lèi)型。
  PASCAL規定,凡程序中用到的所有變量、符號常量、數組、過(guò)程與函數、記錄、文件等數據都必須"先說(shuō)明,再使用"。
 ?、茍绦胁糠值淖饔檬墙o出需要計算機執行的操作。
  執行部分以"begin"開(kāi)始,以"end"結束,其間有若干個(gè)語(yǔ)句,語(yǔ)句之間以分號隔開(kāi)。執行部分之后有一個(gè)句點(diǎn),表示整個(gè)程序結束。
 ?、?PASCAL程序的書(shū)寫(xiě)方法比較靈活。書(shū)寫(xiě)程序應結構清晰、容易閱讀理解。在編寫(xiě)程序時(shí)希望讀者盡量模仿本書(shū)中例題程序格式。
 ?、?在程序中,一對大括號間的文字稱(chēng)為注釋。注釋的內容由人們根據需要書(shū)寫(xiě),可以用英語(yǔ)或漢語(yǔ)表示。注釋可以放在任何空格可以出現的位置。執行程序時(shí)計算機對注釋不予理睬。 
  三、Free Pascal語(yǔ)言系統的使用
  目前,信息學(xué)競賽使用的Pascal語(yǔ)言系統是free Pascal,下面我們就來(lái)學(xué)習free Pascal的使用。
  1. 系統的啟動(dòng)
  在運行系統目錄下的啟動(dòng)程序fp.EXE,即可啟動(dòng)系統。屏幕上出現如圖1所示的集成環(huán)境。
  2.free Pascal系統集成環(huán)境簡(jiǎn)介
  最頂上一行為主菜單。中間藍色框內為編輯窗口,在它個(gè)編輯窗口內可以進(jìn)行程序的編輯。最底下一行為提示行,顯示出系統中常用命令的快捷鍵,如打開(kāi)一個(gè)文件的快捷鍵為F3,將當前編輯窗口中文件存盤(pán)的快捷鍵為F2,獲得系統幫助的快捷鍵為F1,等等。 
  3. 新建程序窗口
  按F10進(jìn)行主菜單,選擇FILE菜單,執行其中New命令。就可建立一個(gè)新的程序窗口(默認文件名為Noname00.pas或Noname01.pas等)。
  4. 程序的輸入、編輯與運行
  在當前程序窗口中,一行一行的輸入程序。程序窗口是一個(gè)編輯器。所以對程序的編輯與其它編輯器相似,類(lèi)似記事本程序。
  當程序輸入完畢之后,一般要先按Alt+F9(或執行compile菜單中compile命令)對程序進(jìn)行編譯。如果程序有語(yǔ)法錯誤,則會(huì )在程序窗口的下方顯示錯誤信息。若無(wú)語(yǔ)法錯誤,則窗口正中央會(huì )出現一個(gè)對話(huà)框,提示編譯成功。接下來(lái),我們可以運行程序了。
  程序的運行可以通過(guò)按ALT+R打開(kāi)RUN菜單中的RUN命令,或直接按快捷鍵CTRL+F9。則可以在用戶(hù)窗口中輸出運行結果。通常在程序運行結束后系統回到Pascal系統的集成環(huán)境,因此要查看運行結果,要按ALT+F5將屏幕切換到用戶(hù)屏幕。
  5.程序的保存與打開(kāi)
  當我們想把程序窗口中的程序存入磁盤(pán)時(shí),可以通過(guò)按F2鍵(或執行File菜單中的save命令)來(lái)保存程序。第一次保存文件時(shí)屏幕上會(huì )出現一個(gè)對話(huà)框要求輸入文件名(默認擴展名為.pas)。
  當我們要將磁盤(pán)上的程序文件中的PASCAL程序裝入窗口時(shí),可按F3(或執行File菜單中的Open命令)來(lái)裝入程序,此時(shí)系統也會(huì )彈出一個(gè)對話(huà)框要求輸入要打開(kāi)的文件名,或直接在文件對話(huà)框列表中選擇所要的文件,然后回到打開(kāi)文件。 
  四、第一個(gè)程序
  下面程序在運行時(shí),會(huì )提示輸入一個(gè)數N,然后會(huì )在屏幕上打出用“*”號排列成的菱形,菱形的行數是2N-1行,按回車(chē)后程序結束回到程序窗口。 Program tu;
  Var n,i,j:integer;
  Begin
  Write('Please enter the n:');readln(n);
  For I:=1 to n do
  Begin
  Write('':(n+1-i));
  For j:=1 to 2*I-1 do
  Write('*');
  Writeln;
  end;
  for i:=n-1 downto 1 do
  begin
  write('':(n+1-i));
  for j:=1 to 2*i-1 do
  write('*');
  writeln;
  end;
  Readln;
  End.
  請輸入上面的程序,并練習將其存盤(pán)、打開(kāi)與運行上面程序。
  六,pascal基本程序語(yǔ)句以設計方法小節
  1 輸入語(yǔ)句:
  Read ( a, b ) :讀入a,b兩個(gè)變量的值,注意變量類(lèi)型與輸入數據類(lèi)型要一致 
  Readln(xp) :讀入一行數據
  2 計算或賦值語(yǔ)句:
  A:=100*C+d :直接計算賦值語(yǔ)句,注意 “:=”的寫(xiě)法,等號前不能丟冒號
  3 輸出語(yǔ)句:
  Write (a, b:5); :輸出a,b兩個(gè)變量的值,其中規定b變量的值占5個(gè)字符寬度
  Writeln(a); :輸出a變量的值,并自動(dòng)將光標換到下一行
  Write( ‘a(chǎn)=’,a); :輸出a變量的值,并在值的前面增加提示,顯示為 a=****
  4判斷語(yǔ)句:
  簡(jiǎn)單判斷語(yǔ)句:
 ?。?) If 條件 then 一個(gè)語(yǔ)句; 
  如:IF cj>60 then write ( ‘考試及格了’);
 ?。?) if 條件 then 
  Begin
  多個(gè)語(yǔ)句( 復合語(yǔ)句 );
  …………
  End;
  如: if cj >60 then 
  Begin
  n:=n+1; 
  write ( ‘考試及格了’);
  end; 
  兩路分支語(yǔ)句:
  If 條件 then 語(yǔ)句1 else 語(yǔ)句2; 語(yǔ)句可以是復合語(yǔ)句;
  如 if cj>60 then write(‘及格了’)
  Else 
  Write( ‘不及格’); 
  多路分支語(yǔ)句:
  Case 表達式 of 
  值1:語(yǔ)句1;
  值2:語(yǔ)句2;
  值3:語(yǔ)句3;
  ……
  End;
  如:
  Case xm of 
  'l': lp:=lp+1;
  'z': zp:=zp+1;
  'w': wp:=wp+1;
  End ;
  5 循環(huán)語(yǔ)句:三種
 ?。?)計數循環(huán):按照設定的次數循環(huán)
  For 變量:=循環(huán)初值 TO 循環(huán)終值 DO
  循環(huán)體語(yǔ)句;
  如:
  for i:=1 to 10 do
  begin
  a:=trunc(random*900)+100;
  write (a:6);
  end;
 ?。?)直到型循環(huán):一直循環(huán),直到給定條件成立時(shí),退出循環(huán)
  Repeat
  循環(huán)體語(yǔ)句
  until 條件
  如:
  repeat
  r:=m mod n;
  m:=n;
  n:=r;
  until r=0;
 ?。?)當型循環(huán):當條件成立時(shí),就循環(huán),否則不循環(huán)
  while 條件 do 
  循環(huán)體語(yǔ)句;
  如:
  While i<=100 do 
  S:=s+I ; 
  6 定義變量時(shí)常用的數據類(lèi)型:
 ?。?)整數型孌量: integer ; 這種變量只能用于存放整數 -32768 ~ +32768
 ?。?)實(shí)數型變量: real ; 這種變量可用于存放整數或小數 -10~+10
 ?。?)字符型變量: char ; 這種變量只能用于存放一個(gè)字符
 ?。?)字符串變量: string ; 這種變量可用于存放一串多個(gè)字符
 ?。?)布爾型變量: boolean ; 這種變量只能存放邏輯值fals或true
  7 基本運算方法:
 ?。?)整數累加: s:=s+n ;
 ?。?)計數 : n:=n+1; 
 ?。?)求余運算: C:=A mod B; 要會(huì )判斷兩數能否整除
 ?。?)取整數商: C:=A div B; 
 ?。?)交換A和 B兩變量的值 :
  C:=A;A:=B;B:=C;
  8 重要的基本運算函數
 ?。?)隨機函數: Random(N) :產(chǎn)生一個(gè) [0,N)之間的隨機整數,使用前必須先用 randomize 激活隨機數發(fā)生器
  例如 begin
  Randomize
  ……
  A:= 100+Random(900) 產(chǎn)生一個(gè)三位的隨機整數
 ?。?)取整函數 TRUNC ( 實(shí)數變量或表達式 ) :只截取整數部分
  例如:
  B:=123.56
  A:=TRUNC(B);
  結果A的值為123
 ?。?)四舍五入取整函數: ROUND (表達式)
  例如: A:=ROUND(123.56)
  結果A的值為124
 ?。?)平方根函數: SQRT(X) :取X的平方根
 ?。?)正弦和余弦函數 :SIN(X) COS(X)
  9 關(guān)于數組的使用
  數組就是一組帶下標的變量,它與簡(jiǎn)單變量的區別就是在變量名稱(chēng)后面帶有下標,這種下標變量規定必須先定義后使用,下標必須是正整數,且下標值不能超過(guò)設定的范圍,下標變量的類(lèi)型與簡(jiǎn)單變量的類(lèi)型規定一致。
 ?。?)一維數組:用于存放一行或一列的線(xiàn)性數據
  定義: 數組名 array [最小下標,最大下標] of 類(lèi)型;
  如: Var 
  A array [1..100] of integer; 定義了A[1],A[2]……A[100]
 ?。?)二維數組:用于存放二維表格形式的數據
  定義:數組名 array [行下標范圍,列下標范圍] of 類(lèi)型;
  如: Var 
  A array [1..4,1..5] of integer; 定義了4行5列的二維數組
  

Pasal的單元

  Turbo Pascal提供八大類(lèi)型標準單元
  標注庫單元及功能
  SYSTEM 
  TP的運行庫,包括常用的標準函數和過(guò)程,可以在程序中直接運行使用,不需USES語(yǔ)句說(shuō)明
  DOS
  具有日期,時(shí)間,目錄的查找,程序執行等功能
  CRT
  具有屏幕模式控制,擴展鍵盤(pán)碼,顏色,窗口,聲音等功能
  PRINTER
  支持打印輸入操作
  GRAPH
  高級圖形軟件包,支持多種圖形適配器
  GRAPH3
  實(shí)現TP3.0的圖形軟件包
  TURBO3
  兼容TP3.0的源程序
  OVERLAY
  實(shí)現高級覆蓋管理
  程序標志符
  program 定義一個(gè)程序名,放在程序最開(kāi)頭
  var 定義一個(gè)字符變量
  const 定義一個(gè)字符常量
  type 定義一個(gè)范圍
  procedure 定義一個(gè)過(guò)程
  function 定義一個(gè)函數
  PASCAL教程
  初識PASCAL
  程序框架
  一個(gè)完全的PASCAL程序結構框架如下:
  PROGRAM 程序名(程序參數表);
  CONST
  常量聲明;
  TYPE
  類(lèi)型聲明;
  VAR
  變量聲明;
  FUNCTION 函數名(參數表):函數類(lèi)型;
  函數聲明;
  PROCEDURE 過(guò)程名(參數表);
  過(guò)程聲明;
  BEGIN
  程序主體;
  END. 
  變量定義 
  一、變量定義方法
  VAR
  變量名1:變量類(lèi)型1;
  變量名2:變量類(lèi)型2;
  變量名3,變量名4:變量類(lèi)型3;
  二、變量命名規則
  1、首字符必須是英文
  2、只能由英文、數字和下劃線(xiàn)組成。
  三、變量類(lèi)型
  常用的幾個(gè)變量類(lèi)型如下表:
  類(lèi)型名 含義 取值范圍 占字節數 
  shortint 短整型 -128~127 1 
  integer 整型 -32768~32767 2 
  longint 長(cháng)整型 -231~231-1 4 
  real 實(shí)數 2.9×10-39~1.7×1038 6 
  single 單精度 1.5×10-45~3.4×1038 4 
  double 雙精度 5.0×10-324~1.7×10308 8 
  extended 擴展實(shí)數 1.9×10-4951~1.1×104932 10 
  char 字符 單個(gè)ASCII字符 1 
  string 字符串 最多255個(gè)字符 字符個(gè)數 
  ansistring 超長(cháng)字符串 長(cháng)度不限,最大可產(chǎn)生占用1G內存的字符串
  boolean 布爾型 True, False 1 
  輸入輸出語(yǔ)句 
  一、輸出語(yǔ)句格式
  Writeln(項目1,項目2,……,項目n); {輸出內容后換行}
  Write(項目1,項目2 ,……,項目n); {輸出內容后不換行}
  二、輸入語(yǔ)句格式
  Read(變量1,變量2,……,變量n); {從鍵盤(pán)輸入n個(gè)數據,以空格格開(kāi)}
  Readln(變量1,變量2 ,……,變量n); {從鍵盤(pán)輸入n個(gè)數據,以空格格開(kāi),讀完后換行}
  三、賦值語(yǔ)句用法
  變量名:=表達式; {把右邊表達式的值計算出來(lái),結果賦給左邊的變量}
  舉例: 
  a:=3; 
  a:=a+1; 
  s:=(a+b)*(c+d);
  文件輸入輸出方法 
  一、裝配文件
  assign(input,’文件路徑’); {文件路徑一般為相對路徑,相對程序的工作目錄}
  reset(input);
  assign(output,’文件路徑’);
  rewrite(output);
  二、輸入輸出方法
  read(x);
  write(x);
  三、關(guān)閉文件
  close(input);
  close(output); {輸出文件必須關(guān)閉,否則可能不能正確保存}
  程序的基本控制結構
  順序結構
  一、順序結構的程序按照書(shū)寫(xiě)順序依次執行
  begin
  語(yǔ)句1;
  語(yǔ)句2;
  end;
  二、實(shí)例
  輸入兩個(gè)整數x,y,計算x,y的差并輸出。
  Program example;
  var
  x,y,s:integer;
  begin
  read(x,y);
  s:=x-y;
  writeln(s);
  end.
  分支結構
  一、分支結構又叫選擇結構或條件結構
  If 條件
  then 語(yǔ)句1 {注意這里不可以加分號,因為IF語(yǔ)句到這里沒(méi)有結束,后面還有ELSE語(yǔ)句}
  else 語(yǔ)句2;
  二、沒(méi)有ELSE的IF語(yǔ)句
  If 條件
  then 語(yǔ)句1;
  三、實(shí)例
  輸入3個(gè)整數,輸出最大的數。
  Program bijiao;
  var
  a,b,c,max:integer;
  begin
  readln(a,b,c);
  if a>=b
  then max:=a
  else max:=b;
  if c>max then max:=c;
  writeln(max);
  end.
  四、IF 語(yǔ)句的嵌套
  If 條件
  Then Begin
  If 條件
  Then 語(yǔ)句1
  Else 語(yǔ)句2;
  End
  Else Begin
  If 條件
  Then 語(yǔ)句3
  Else 語(yǔ)句4;
  End;
  一、For循環(huán)
  For 循環(huán)變量:=初值 to 終值 do
  循環(huán)體;
  若循環(huán)體有多條語(yǔ)句,則必須用begin…end復合語(yǔ)句括起來(lái)。
  【典型例題1】計算s=1+2+3+...+n,n由鍵盤(pán)輸入。
  Program example;
  var
  s,i,n:integer;
  begin
  readln(n);
  s:=0;
  For i:=1 to n do
  s:=s+i;
  writeln(s);
  end. 
  【典型例題2】從鍵盤(pán)輸入一個(gè)數,判斷它是不是素數。
  PROGRAM sushu;
  VAR
  a,i:integer;
  flag:boolean;
  BEGIN
  readln(a);
  flag:=true;
  FOR i:=2 to trunc(sqrt(a)) do
  IF a mod i=0
  THEN BEGIN flag:=false;BREAK;END;
  IF flag
  THEN writeln(‘Y’)
  ELSE writeln(‘N’);
  END.
  二、While循環(huán)
  While 條件 Do
  循環(huán)體; 
  同樣,若循環(huán)體有多條語(yǔ)句,則必須用begin…end復合語(yǔ)句括起來(lái)。
  【典型例題】求最大公約數
  program HCF;
  var
  a,b,r:integer;
  begin
  r:=a mod b;
  while r<>0 do
  begin
  a:=b;
  b:=r;
  r:=a mod b;
  end;
  writeln(b);
  end.
  三、Repeat循環(huán)
  Repeat
  循環(huán)體;
  Until 條件; 
  即使循環(huán)體有多條語(yǔ)句,也不必用begin…end復合語(yǔ)句。
  【典型例題】求自然對數e的近似值,直到最后一項小于10-5為止。
  program e1;
  var
  i:integer;
  e,s,t:real;
  begin
  e:=1;
  t:=1;
  i:=1;
  repeat
  t:=t*i;
  e:=e+1/t;
  i:=i+1;
  until 1/t<=10e-5;
  writeln(e);
  end.
  函數和過(guò)程
  函數
  一、標準函數(內置函數)
  函數名 含義 
  abs(a) 求a的絕對值 
  sqr(a) 求a的平方 
  sqrt(a) 求a的平方根 
  sin(a) 求a的正弦值,a是弧度 
  cos(a) 求a的余弦值,a是弧度 
  arctan(a) 求a的反正切值,結果為弧度 
  exp(a) 自然對數e的a次方 
  ln(a) 求a的自然對數值 
  trunc(a) 求a的整數部分 
  round(a) 四舍五入取整 
  ord(a) 求字符a的ASCII碼 
  chr(a) 根據ASCII碼換成相應的字符 
  random(a) 求小于a的隨機整數 
  二、自定義函數
  Funtion 函數名(參數1:參數類(lèi)型,參數2:參數類(lèi)型,...):函數值類(lèi)型;
  VAR
  函數內變量定義;
  BEGIN
  函數體;
  END;
  【典型例題】自定義一個(gè)判斷素數的函數
  Function prime(a:longint):Boolean;
  Var
  i:longint;
  Begin
  prime:=true;
  for i:=2 to trunc(sqrt(a)) do
  if a mod i=0
  then begin prime:=false;break;end;
  End;
  過(guò)程
  一、標準過(guò)程
  inc(a) {等價(jià)于a:=a+1}
  inc(a,i) {等價(jià)于a:=a+i}
  dec(i) {等價(jià)于a:=a-1}
  dec(a,i) {等價(jià)于a:=a-i}
  二、自定義過(guò)程
  Procedure 過(guò)程名(參數1:參數類(lèi)型,參數2:參數類(lèi)型,...);
  VAR
  過(guò)程內變量定義;
  BEGIN
  過(guò)程體;
  END;
  【典型例題】隨機產(chǎn)生10個(gè)100以?xún)炔恢貜偷碾S機數存入數組并輸出,然后從小到大排序再輸出。
  Program example;
  Const
  n=10;
  Var
  a:array[1..n] of integer;
  i,x,temp:integer;
  Function find(x:integer):boolean; {自定義查找函數}
  var
  i:integer;
  begin
  find:=false;
  for i:=1 to n do
  if a=x then begin find:=true;exit;end;
  end;
  Procedure writea; {自定義輸出數組元素的過(guò)程}
  var
  i:integer;
  begin
  for i:=1 to n do
  write(a,' ');
  writeln;
  end;
  Procedure selectsort;
  var
  i,j,k:integer;
  begin
  for i:=1 to n-1 do
  begin
  k:=i;
  for j:=i+1 to n do
  if a[k]>a[j] then k:=j;
  if k<>i then begin temp:=a;a:=a[k];a[k]:=temp;end;
  end;
  end;
  Begin {主程序開(kāi)始}
  randomize;
  x:=random(100);
  for i:=1 to n do
  begin
  while find(x) do
  x:=random(100);
  a:=x;
  end;
  writea; {調用輸出數組過(guò)程}
  selectsort; {調用選擇排序過(guò)程}
  writea; {調用輸出數組過(guò)程}
  end.
  【典型例題1】求階乘n!
  n! 1:n*(n-1)(n>0) 2:1(n=0)
  求n!我們可以使用For循環(huán)來(lái)做,這里我們換一個(gè)思路,使用遞歸的方法來(lái)做??聪旅娴臄祵W(xué)遞推表達式。
  我們可以看出為求n!,必先求出(n-1)!,同理,要求出(n-1)!,必先求出(n-2)!,則如此遞推下去,最終當n=0時(shí)我們就可以馬上得出結果1,然后我們從1開(kāi)始再逐步返回到n來(lái)求出n!
  【演示課件】請用右鍵[目標另存為]命令保存下來(lái)再觀(guān)看
  Program jiecheng;
  Var
  n:integer;
  Function jc(n:integer):longint;
  Begin
  If n = 0 
  Then jc = 1
  Else jc = n * jc(n - 1)
  End;
  Begin
  readln(n);
  writeln(jc(n));
  End.
  【典型例題2】漢諾塔問(wèn)題
  有三根柱A、B、C,在柱A上有N塊盤(pán)片,所有盤(pán)片都是大的在下面,小片能放在大片上面?,F要將A上的N塊盤(pán)片移到C柱上,每次只能移動(dòng)一片,而且在同一根柱子上必須保持上面的盤(pán)片比下面的盤(pán)片小,輸入任意的N,輸出移動(dòng)方法。
  (注意:這是一個(gè)古老的傳說(shuō),傳說(shuō)是如果把64個(gè)盤(pán)子由A柱移到了C柱的話(huà),那么世界末日就到了,事實(shí)上如果要把64個(gè)盤(pán)子從A柱移到C柱的話(huà),即使用計算機運算,也要計算數億年,所以這個(gè)預言未必不是真實(shí)。)
  【分析】
  我們可以這樣考慮,當n=1時(shí),我們只要直接將A柱的盤(pán)子移到C柱,當n>1時(shí),我們可以先把n-1個(gè)盤(pán)子由A柱通過(guò)C柱移到B柱,此時(shí)就可以把A柱剩下的最后一個(gè)盤(pán)子直接移到C柱,這樣接下來(lái)只要把n-1個(gè)盤(pán)子通過(guò)A柱移到C柱即可,如果就構成了遞歸的思路,我們可以定義個(gè)移動(dòng)過(guò)程mov(n,a,b,c)表示將n個(gè)盤(pán)子從a通過(guò)b移到c
  【程序】
  Program hannuota;
  Var
  n:integer;
  Procedure move(n,a,b,c:integer);
  begin
  if n=1
  then writeln(a,'->',c)
  else begin
  move(n-1,a,c,b); {把n-1個(gè)盤(pán)子從a柱經(jīng)由c柱移到b柱}
  writeln(a,'->',c); {把剩下的第n個(gè)盤(pán)子直接移到c柱}
  move(n-1,b,a,c); {把在b柱上的n-1個(gè)盤(pán)子經(jīng)由a柱移到c柱}
  end;
  end;
  Begin
  readln(n);
  move(n,1,2,3);
  End.
  【典型例題3】求公約數問(wèn)題
  利用遞歸函數的方法求a,b的公約數。
  Program gongyueshu;
  Var
  a,b:longint;
  Function hcf(a,b:longint):longint;
  Begin
  if a mod b=0
  then hcf:=b
  else hcf:=hcf(b,a mod b);
  End;
  Begin
  readln(a,b);
  writeln('hcf=',hcf(a,b));
  End.
  數組
  數組定義
  一、數組定義方法
  VAR
  數組名:Array[下標起點(diǎn)..下標終點(diǎn)] Of 數組元素類(lèi)型;
  例如:定義一個(gè)存儲10個(gè)整數的數組a
  a:array[1..10] of integer;
  賦值方法:a[1]:=0;
  定義數組后計算機會(huì )在系統內存內劃出一塊連續的區域供存放數組元素
  一、鍵盤(pán)輸入數據存入數組過(guò)程
  PROCEDURE reada;
  VAR
  i:INTEGER;
  BEGIN
  FOR i:= 1 TO n DO
  READ(a);
  END;
  二、隨機產(chǎn)生n個(gè)數據存入數組過(guò)程
  PROCEDURE randoma(max:integer;);
  VAR
  i:INTEGER;
  BEGIN
  RANDOMIZE;
  FOR i:= 1 TO n DO
  a:=RANDOM(max);
  END;
  三、輸出數組過(guò)程
  PROCEDURE writea;
  VAR
  i:INTEGER;
  BEGIN
  FOR i:=1 TO n DO
  WRITE(a,' ');
  WRITELN;
  END;
  一、自定義查找函數,在數組中查找x,若有返回x的下標, 若無(wú)則返回0。
  FUNCTION find(x:INTEGER):INTEGER;
  VAR
  i:INTEGER;
  BEGIN
  find:=0;
  FOR i:=1 TO n DO
  IF a=x
  THEN BEGIN find:=i;break;END;
  END;
  二、在數組的p位置插入一個(gè)元素x
  PROCEDURE inserta(p,x:INTEGER);
  VAR
  i:INTEGER;
  BEGIN
  FOR i:= n DOWNTO p DO
  a[i+1]:=a;
  a[p]:=x;
  n:=n+1;
  END;
  注意:因為要插入一個(gè)元素,所以首先必須保證數組有空余的單元,否則會(huì )出現下標越界錯誤。
  三、從數組中把下標為p的元素刪除掉
  PROCEDURE deletea(p:INTEGER);
  VAR
  i:INTEGER;
  BEGIN
  FOR i:=p TO n DO
  a:=a[i+1];
  n:=n-1;
  END;
  約瑟夫問(wèn)題
  【約瑟夫問(wèn)題】
  編號為1,2,......,n的n個(gè)人按照順時(shí)針?lè )较驀蝗?。從第一個(gè)人開(kāi)始順時(shí)針?lè )较蜃?開(kāi)始報數,報到m時(shí)停止報數。報m 的人出列,從他在順時(shí)針?lè )较虻南乱粋€(gè)人開(kāi)始重新報數,如此下去,直到所有人全部出列為止。設計一個(gè)程序來(lái)求出出列順序。其中n,m由鍵盤(pán)輸入。
  【思路1】
  利用數組存放n個(gè)人,數組下標等于他的編號,然后模擬報數過(guò)程,報到m時(shí)輸出該位置的人編號,然后該位置的值清0,繼續報數并判斷是否為0,是0則跳過(guò)。直到n個(gè)人全部出列為止。
  【參考程序】
  Program yueshefu;
  Var
  a:array[1..100] of integer;
  n,m,i,j,p:integer;
  Begin
  write('Input n,m:');
  readln(n,m);
  for i:=1 to n do
  a:=i;
  p:=1; {p用于記錄報數的位置}
  for i:=1 to n do
  begin
  j:=0; {j用于記錄報到的人數}
  while j<m do
  begin
  if a[p]<>0 then j:=j+1;
  if p=n then p:=1 else p:=p+1; {處理邊界情況}
  end;
  if p<>1
  then begin write(a[p-1],' ');a[p-1]:=0;end {處理邊界情況}
  else begin write(a[n],' ');a[n]:=0;end;
  end;
  end.
  --------------------------------------------------------------------------------
  【思路2】
  建立一個(gè)循環(huán)數組,數組元素的每一個(gè)值保存的是它的下一個(gè)元素的編號,如果報到m后只要修改m前面的元素的編號為m后面的元素的編號,這樣就跳過(guò)了第m個(gè)元素,如此下去直到n個(gè)人全部出列。
  【參考程序】
  Program yuesefu;
  Var
  a:array[1..100] of integer;
  n,m,p,i,j:integer;
  Begin
  readln(n,m);
  for i:=1 to n-1 do
  a:=i+1;
  a[n]:=1;
  p:=n;
  for i:=1 to n do
  begin
  for j:=1 to m-1 do
  p:=a[p];
  write(a[p],' ');
  a[p]:=a[a[p]];
  end;
  End.
  自定義數據類(lèi)型
  枚舉類(lèi)型
  TYPE
  枚舉類(lèi)型標識符=(枚舉值1,枚舉值2 ,枚舉值3,… );
  VAR 
  枚舉類(lèi)型變量表:枚舉類(lèi)型標識符;
  【實(shí)例】 
  TYPE
  weekday=(Sun,Mon,Tue, Wed,Thu,Fri,sat);
  month=(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug, Sep,oct,nov,dec);
  VAR
  d:weekday; m:month;
  子界類(lèi)型
  TYPE
  子界類(lèi)型標識符=常量1..常量2;
  VAR
  子界類(lèi)型變量表:子界類(lèi)型標識符;
  【實(shí)例】 
  TYPE
  age=0..100;
  letter=’a’..’z’; 
  VAR 
  a:age; l:letter;
  集合類(lèi)型
  TYPE
  集合類(lèi)型標識符=SET OF 基類(lèi)型;
  VAR
  集合類(lèi)型變量表:集合類(lèi)型標識符;
  【實(shí)例】 
  TYPE
  digit=Set of 0..10;
  VAR
  a,b:digit;
  Begin
  a:=[1,3,5,7,9];
  b:=[0,2,4,6,8];
  End.
  【集合運算】
  1.空集合:[]
  2.集合并交差
  并:用+表示,例如[1,3,4]+[1,2,4]=[1,2,3,4]
  交:用*表示,例如[1,3,4]*[1,2,4]=[1,4]
  差:用-表示,例如[1,3,4]-[1,2,4]=[3]
  3.關(guān)系運算:集合可以進(jìn)行>,<,=,<>等運算,規則是元素多的大于元素少的。
  4.包含判斷:IN,例如1 in [1,3,4]是True; 2 in [1,3,4]是False。
  5.集合運算中元素的次序是不重要的。 
  ]
  記錄類(lèi)型
  TYPE
  記錄類(lèi)型標識符=RECORD
  域標識符表:類(lèi)型; 
  域標識符表:類(lèi)型;
  …
  End;
  VAR
  記錄類(lèi)型變量表:記錄類(lèi)型標識符;
  【實(shí)例】 一個(gè)學(xué)生包括學(xué)號、姓名、性別、年齡、成績(jì)五個(gè)域。
  TYPE
  student=RECORD
  num:integer;
  name:string;
  sex:(male,female);
  age:0..100;
  score:real;
  END;
  VAR
  s:student;
  a:array[1..100] of stuent;
  【賦值方法】
  s.num=9601;
  s.name=‘li min’;
  s.sex=male;
  s.age=18;
  s.score=91;
  a[1].num=9601;
  a[1].name=‘li min’;
  a[1].sex=male;
  a[1].age=18;
  a[1].score=91;
  字符串類(lèi)型
  1、字符串用于存放整批的字符數據。字符串可以看作是特殊的字符串數組來(lái)處理。
  字符串定義的格式:
  var
  s:string;
  s1:string[15]; {字符串長(cháng)度固定為15}
  字符串定義時(shí),如不指定長(cháng)度,則按該類(lèi)型的最大長(cháng)度(255個(gè)字符)分配空間,使用時(shí)最大可用長(cháng)度為255個(gè);如果在中括號中給出一個(gè)具體的值(1—255之間),則按這個(gè)值的大小分配空間。使用時(shí),最大的可用長(cháng)度即為該值。 
  2、字符串的輸入、輸出:
  字符串類(lèi)型既可按數組方式輸入、輸出,也可直接輸入、輸出:readln(s);writeln(s);多個(gè)字符串輸入時(shí)以回車(chē)作為數據間的分隔符;每個(gè)readln語(yǔ)句只能讀入一個(gè)字符串。 
  3、有關(guān)字符串的操作: 
  操作 類(lèi)型 作用 返回值 例子 
  length(s) 函數 求字符串s的長(cháng)度 整型 s:='123456789';
  l:=length(s);
  {l的值為9} 
  copy(s,w,k) 函數 復制s中從w開(kāi)始的k位 字符串 s:='123456789';
  s1:=copy(s,3,5);
  {s1的值是'34567'} 
  val(s,k) 過(guò)程 將字符串s轉為數值,存在k中; s:='1234';
  val(s,k);
  write(k);
  {k=1234} 
  str(i,s) 過(guò)程 將數值i轉為字符串s i:=1234;
  str(i,s);
  write(s);{s='1234'} 
  Delete(s,w,k) 過(guò)程 在s中刪除從第w位開(kāi)始的k個(gè)字符 s := 'Honest Abe Lincoln';
  Delete(s,8,4);
  Writeln(s); 
  { 'Honest Lincoln' } 
  Insert(s1,S,w) 過(guò)程 將s1插到s中第w位 S := 'Honest Lincoln';
  Insert('Abe ', S, 8);
  { 'Honest Abe Lincoln' } 
  Pos(c, S) 函數 求字符c在s中的位置 整型 S := ' 123.5';
  i :=Pos(' ', S);
  {i的值為1} 
  + 運算符 將兩個(gè)字符串連接起來(lái) s1:='1234';
  s2:='5678';
  s:=s1+s2;
  {'12345678'} 
  指針類(lèi)型
  一、指針類(lèi)型是一種動(dòng)態(tài)數據結構,它隨著(zhù)程序的執行而改變長(cháng)度。
  定義方法:
  TYPE 
  point=^node;
  node=RECORD
  data:<數據類(lèi)型>;
  link:point;
  End;
  VAR
  p,q,r:point;
  二、空間分配 
  new(p); 
  new(q);
  三、賦值方法
  p^.data:=10;
  p^.link:=q;
  q^.data:=100;
  q^.link:=NIL; {NIL表示空指針}

基本算法模塊

  對于NOIP,基礎是相當重要的,一些簡(jiǎn)單的、常用的算法模塊,一定要要熟練掌握并靈活運用。
  一、 排序
  1. 選擇排序
  2. 插入排序
  3. 冒泡排序
  4. 快速排序
  5. 歸并排序
  二、 高精度
  1. 高精度比較
  2. 高精度加法
  3. 高精度減法
  4. 單精度乘法
  5. 高精度乘法
  6. 單精度除法
  7. 高精度除法
  三、 排列組合
  1. 排列生成算法
  2. 組合生成算法
  3. 排列按序生成法
  一、 排序算法
  var
  a:array[1..maxn]of longint;——排序對象
  1. 選擇排序——Select_sort
  procedure select_sort;
  begin
  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;
  end;
  2. 插入排序——Insert_sort
  procedure insert_sort;
  begin
  for i:=2 to n do
  begin
  key:=a[i];j:=i-1;
  while (key<a[j])and(j>0) do begin a[j+1]:=a[j];dec(j);end;
  a[j+1]:=key;
  end;
  end;
  3. 冒泡排序——Bubble_sort
  procedure bubble_sort;
  begin
  for i:=1 to n-1 do
  for j:=n downto i+1 do 
  if a[j]<a[j-1] then
  begin temp:=a[j];a[j]:=a[j-1];a[j-1]:=temp;end;
  end;
  4. 快速排序——Quick_sort
  procedure qsort(s,t:longint);
  var
  i,j,x:longint;
  begin
  i:=s;j:=t;x:=a[(i+j)div 2];
  repeat
  while a[i]<x do inc(i); {找左邊比他大的}
  while a[j]>x do dec(j);{找右邊比他小的}
  if i<=j then{交換}
  begin
  temp:=a[i];a[i]:=a[j];a[j]:=temp;
  inc(i);dec(j);
  end;
  until i>j;
  if s<j then qsort(s,j);
  if i<t then qsort(i,t);
  end;
  5. 歸并排序——Merge_sort
  procedure mergesort(s,t:longint);
  var
  m,i,j,k:longint;
  begin
  if t-s=0 then exit;
  m:=(s+t)div 2;
  mergesort(s,m);
  mergesort(m+1,t);
  for i:=1 to m-s+1 do b[i]:=a[s+i-1];
  for j:=m+1 to t do c[j-m]:=a[j];
  i:=1;j:=1;b[m-s+2]:=max;c[t-m+1]:=max;
  for k:=s to t do
  if b[i]<c[j]
  then begin a[k]:=b[i];inc(i);end
  else begin a[k]:=c[j];inc(j);end;
  end;
  二、 高精度算法——High_precision
  const
  maxcount=進(jìn)制位
  maxlen=記錄高精度數組大小
  type
  bignum=array[0..maxlen]of longint;0為位數
  1. 高精度比較
  function compare(a,b:bignum):longint;
  begin
  while a[a[0]]=0 do dec(a[0]);{檢查位數是否正確}
  while b[b[0]]=0 do dec(b[0]);
  while a[a[0]+1]>0 do inc(a[0]);
  while b[b[0]+1]>0 do inc(b[0]);
  if a[0]>b[0] then exit(1);
  if a[0]<b[0] then exit(-1);
  for i:=a[0] downto 1 do
  begin
  if a[i]>b[i] then exit(1);
  if a[i]<b[i] then exit(-1);
  end;
  exit(0);
  end;
  2. 高精度加法
  procedure add(a,b:bignum;var c:bignum);
  var
  i:longint;
  begin
  fillchar(c,sizeof(c),0);c[0]:=1;
  if a[0]>b[0] 
  then c[0]:=a[0]
  else c[0]:=b[0];
  for i:=1 to a[0] do inc(c[i],a[i]);
  for i:=1 to b[0] do inc(c[i],b[i]);
  for i:=1 to c[0] do
  begin
  inc(c[i+1],c[i] div maxcount);
  c[i]:=c[i] mod 10;
  end;
  while c[c[0]+1]>0 do
  begin
  inc(c[0]);
  inc(c[c[0]+1],c[c[0]] div maxcount);
  c[c[0]]:=c[c[0]] mod maxcount;
  end;
  end;
  3. 高精度減法
  procedure minus(a,b:bignum;var c:bignum);
  var
  i:longint;
  begin
  fillchar(c,sizeof(c),0);c[0]:=a[0];
  for i:=1 to c[0] do c[i]:=a[i]-b[i];
  for i:=1 to c[0] do
  if c[i]<0 then
  begin
  dec(c[i+1]);
  inc(c[i],maxcount);
  end;
  while (c[0]>1)and(c[c[0]]=0) do dec(c[0]);
  end;
  4. 單精度乘法
  procedure mulnum(a:bignum;x:longint,var c:bignum);
  var
  i:longint;
  begin
  fillchar(c,sizeof(c),0);c[0]:=a[0];
  for i:=1 to c[0] do c[i]:=a[i]*x;
  for i:=1 to c[0] do
  begin
  inc(c[i+1],c[i] div maxcount);
  c[i]:=c[i] mod 10;
  end;
  while c[c[0]+1]>0 do
  begin
  inc(c[0]);
  inc(c[c[0]+1],c[c[0]] div maxcount);
  c[c[0]]:=c[c[0]] mod maxcount;
  end;
  end;
  5. 高精度乘法
  procedure mul(a,b:bignum;var c:bignum);
  var
  i,j:longint;
  begin
  fillchar(c,sizeof(c),0);c[0]:=a[0]+b[0]-1;
  for i:=1 to a[0] do
  for j:=1 to b[0] do
  inc(c[i+j-1],a[i]*b[j]);
  for i:=1 to c[0] do
  begin
  inc(c[i+1],c[i] div maxcount);
  c[i]:=c[i] mod 10;
  end;
  while c[c[0]+1]>0 do
  begin
  inc(c[0]);
  inc(c[c[0]+1],c[c[0]] div maxcount);
  c[c[0]]:=c[c[0]] mod maxcount;
  end;
  end;
  6. 單精度除法
  function divnum(a:bignum;x:longint;var c:bignum):longint;
  var
  i,temp:longint;
  begin
  fillchar(c,sizeof(c),0);c[0]:=a[0];
  temp:=0;
  for i:=a[0] downto 1 do
  begin
  temp:=temp*maxcount+a[i];
  c[i]:=temp div x;
  temp:=temp mod x;
  end;
  while (c[o]>1)and(c[c[0]]=0) do dec(c[0]);
  exit(temp);
  end;
  7. 高精度除法
  procedure div(a,b:bignum;var c,d:bignum);
  var
  i:longint;
  begin
  fillchar(c,sizeof(c),0);c[0]:=a[0]-b[0]+1;
  fillchar(d,sizeof(d),0);d[0]:=1;
  for i:=c[0] downto 1 do
  begin
  c[i]:=maxcount;
  repeat
  dec(c[i]);mul(c,b,temp);
  until compare(a,temp)>=0;
  end;
  while (c[o]>1)and(c[c[0]]=0) do dec(c[0]);
  minus(a,temp,d);
  end;
  三、 排列組合算法
  1. 排列生成算法——m的n排列
  var
  a:array[0..maxn]of longint;——排列方案
  b:array[0..maxm]of boolean;——每個(gè)數是否被用過(guò)
  遞歸(recursion):
  procedure make_permutation_recursion(t:longint)
  var
  i:longint;
  begin
  if t=n+1 then
  begin
  write(a[1]);for i:=2 to n do write(‘ ‘,a[i]);writeln;
  exit;
  end;
  for i:=1 to m do
  if not b[i] then
  begin
  b[i]:=true;a[t]:=i;
  make(t+1);
  b[i]:=false;
  end;
  end;
  非遞歸(iterative):
  procedure make_permutation_iterative(m,n:longint);
  var
  i,j:longint;
  begin
  i:=1;a[1]:=0;
  repeat
  j:=a[i]+1;
  while (j<=m)and(b[j]) do inc(j);
  if j<=m
  then begin
  a[i]:=j;b[j]:=true;
  if i=n
  then begin
  write(a[1]);for j:=2 to n do write(‘ ‘,a[j]);writeln;
  b[a[n]]:=false;
  end
  else begin
  inc(i);a[i]:=0;
  end;
  end
  else begin
  dec(i);b[a[i]]:=false;
  end;
  until i=0;
  end;
  2. 組合生成算法——m的n組合
  procedure make_combination(t:longint)
  var
  i:longint;
  begin
  if t=n+1 then
  begin
  write(a[1]);for i:=2 to n do write(‘ ‘,a[i]);writeln;
  exit;
  end;
  for i:=a[t-1] to m do
  if not b[i] then
  begin
  b[i]:=true;a[t]:=i;
  make(t+1);
  b[i]:=false;
  end;
  end;
  3. 排列按序生成法
  const
  power:array[1..maxn]of longint=(…);power[i]為i的階乘
  type
  permutationnode=array[1..maxn]of longint;——排列方案
  求n的全排的字典序:
  function get_number(n:longint;a:permutationnode):longint;
  var
  b:array[1..maxn]of longint;
  i,j,s:longint;
  begin
  for i:=1 to n do b[i]:=i-1;
  s:=0;
  for i:=1 to n-1 do
  begin
  inc(s,b[a[i]]*power[n-i]);
  for j:=a[i]+1 to n do dec(b[j]);
  end;
  exit(s+1);
  end;
  求字典序為m的n的全排:
  function get_permutation(m,n:longint;):permutationnode;
  var
  use:array[1..maxn]of boolean;
  a:array[0..maxn]of longint;
  temp:permutationnode;
  begin
  dec(m);
  for i:=1 to n-1 do
  begin
  a[i]:=m mod (i+1);
  m:=m div (i+1);
  end;a[0]:=0;
  for i:=1 to n do
  begin
  j:=0;
  for k:=1 to a[n-i]+1 do
  begin
  inc(j);
  while use[j] do inc(j);
  end;
  temp[i]:=j;use[j]:=true;
  end;
  exit(temp);
  end;
  

百度百科中的詞條內容僅供參考,如果您需要解決具體問(wèn)題
(尤其在法律、醫學(xué)等領(lǐng)域),建議您咨詢(xún)相關(guān)領(lǐng)域專(zhuān)業(yè)人士。
本詞條對我有幫助796

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Object Pascal 過(guò)程與函數
Delphi的程序單元
Pascal精要筆記
awk命令
第一講:?Pascal語(yǔ)言概述與?Pascal程序的組成
delphi編程規范1.0.0.0
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久