pascal編程
A. pascal編程
下面的pascal演示程序,是一個命令行程序,由一個主程序+2子程序構成。需要uses strutils。
programIPv4_Validation;
usesstrutils;
//isoctet,子函數,calledbyisipaddress()
functionisoctet(constipsubstr:string):boolean;
var
retcode:boolean;
ipnum,errcode:integer;
begin
retcode:=false;
//規則1
Val(ipsubstr,ipnum,errcode);
//規則3
if(errcode=0)and(ipnumin[0..255])thenretcode:=true;
isoctet:=retcode;
end;
//isipaddress,子函數,calledbymain().
functionisipaddress(constipaddr:string):boolean;
var
i,prev,curr,strlen:Integer;
retcode:boolean;
substr:string;
begin
retcode:=false;
strlen:=Length(ipaddr);
if(strlen>=7)and(strlen<=15)then//0.0.0.0~255.255.255.255
begin
prev:=1;//1stcharinstring.
fori:=1to3do//規則2
begin
curr:=PosEx('.',ipaddr,prev);
if(curr=0)thenbreak;
substr:=Copy(ipaddr,prev,curr-prev);
if(substr='')thenbreak;
ifnotisoctet(substr)thenbreak;
prev:=curr+1;
if(prev>=strlen)thenbreak;
end;
end;
ifi=3then//規則2-滿足,需要校驗剩餘的字元串。
begin
substr:=Copy(ipaddr,prev,strlen-prev+1);//totheend.
if(substr<>'')andisoctet(substr)then
retcode:=true;
end;
isipaddress:=retcode;
end;
//mainroutinestartshere!!!
var
ipaddr:string;
begin
writeln('TypeanIPv4ipaddress:');
readln(ipaddr);
ifisipaddress(ipaddr)then
writeln('yes.')
else
writeln('no.');
end.
運行:
TypeanIPv4ipaddress:
10.76.248.2
yes.
TypeanIPv4ipaddress:
1.1.1a.1
no.
TypeanIPv4ipaddress:
1.2.3.256
no.
TypeanIPv4ipaddress:
111111.2222222
no.
B. Pascal是什麼編程語言
Pascal是一種計算機通用的高級程序設計語言。它由瑞士Niklaus Wirth教授於六十年代末設計並創立。
以法國數學家命名的Pascal語言現已成為使用最廣泛的基於DOS的語言之一,其主要特點有:嚴格的結構化形式;豐富完備的數據類型;運行效率高;查錯能力強。
正因為上述特點,Pascal語言可以被方便地用於描述各種演算法與數據結構。尤其是對於程序設計的初學者,Pascal語言有益於培養良好的程序設計風格和習慣。IOI(國際奧林匹克信息學競賽)把Pascal語言作為三種程序設計語言之一, NOI(全國奧林匹克信息學競賽)把Pascal語言定為唯一提倡的程序設計語言,在大學中Pascal語言也常常被用作學習數據結構與演算法的教學語言。
在Pascal問世以來的三十餘年間,先後產生了適合於不同機型的各種各樣版本。其中影響最大的莫過於Turbo Pascal系列軟體。它是由美國Borland公司設計、研製的一種適用於微機的Pascal編譯系統。該編譯系統由1983年推出1.0版本發展到1992年推出的7.0版本,其版本不斷更新,而功能更趨完善。
下面列出Turbo Pascal編年史
出版年代 版本名稱 主要特色
1983 Turbo Pascal 1.0
Turbo Pascal 2.0
Turbo-87 Pascal 提高實數運算速度並擴大值域
1985 Turbo Pascal 3.0 增加圖形功能
Turbo BCD Pascal 特別適合應用於商業
1987 Turbo Pascal 4.0 提供集成開發環境(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 開發 Object Windows庫、
__(For Windows) 提供對OLE多媒體應用開發的支持
1995 Delphi (Object Pascal)
Visual Pascal
Turbo Pascal語言是編譯型程序語言,它提供了一個集成環境的工作系統,集編輯、編譯、運行、調試等多功能於一體
ps:高級語言發展過程中,PASCAL是一個重要的里程碑。PASCAL語言是第一個系統地體現了E.W.Dijkstra和C.A.R.Hoare定義的結構化程序設計概念的語言。1971年,瑞士聯邦技術學院尼克勞斯·沃爾斯(N.Wirth)教授發明了另一種簡單明晰的電腦語言,這就是以電腦先驅帕斯卡的名字命名的PASCAL語言。PASCAL語言語法嚴謹,層次分明,程序易寫,具有很強的可讀性,是第一個結構化的編程語言。它一出世就受到廣泛歡迎,迅速地從歐洲傳到美國。沃爾斯一生還寫作了大量有關程序設計、演算法和數據結構的著作,因此,他獲得了1984年度「圖靈獎」。
Pascal有5個主要的版本,分別是Unextended Pascal、Extended Pascal、Object-Oriented Extensions to Pascal、Borland Pascal和Delphi Object Pascal。其中,Unextended Pascal、Extended Pascal和Object-Oriented Extensions to Pascal是由Pascal標准委員會所創立和維護的,Unextended Pascal類似於瑞士Niklaus Wirth教授和K.Jensen於1974年聯名發表的Pascal用戶手冊和報告,而Extended Pascal則是在其基礎上進行了擴展,加入了許多新的特性,它們都屬於正式的Pascal標准;Object-Oriented Extensions to Pascal是由Pascal標准委員會發表的一份技術報告,在Extended Pascal的基礎上增加了一些用以支持面向對象程序設計的特性,但它屬於非正式的標准。Borland Pascal和Delphi Object Pascal是由Borland公司專門為其開發的編譯工具設計的Pascal語言,前者是用於DOS的Turbo Pascal系列和Windows 3.x的Turbo Pascal for Windows的傳統高級語言,後者是用於Windows的Delphi和Linux的Kylix的面向對象程序設計語言,它們都不是正式的Pascal標准,具有專利性。但由於Turbo Pascal系列和Delphi功能強大並且廣為流行,Borland Pascal和Delphi Object Pascal已自成為一種標准,為許多人所熟悉。
看到這里,你可能會發覺我的回答與你最初的設想不同。你原來可能是想問Turbo Pascal有幾個版本,然而我卻回答了Pascal語言有幾個版本。這就是初學者常有的一個錯誤認識:Pascal是一種編程工具。實際上,Pascal是一種程序設計語言的名稱(從一般意義上說,Pascal也可以是指人名,它的取名原本就是為了紀念十七世紀法國著名哲學家和數學家Blaise Pascal),而不是編程工具。剛才我是純粹從字面意思上來回答這個問題。
「在turbo pascal中不能使用標准pascal的緊縮字元型數組!turbo pascal建立文件也有自己的語法規則!assign!!! 」
PASCAL是一門編程語言,而TURBO PASCAL是PASCAL程序的編譯系統.
用pascal編輯的程序能在turbopascal中運行
Pascal只是一門語言,而Turbo Pascal是編譯器
這兩個是不能比較的
你可以把兩個語言放在一起比較,或者兩個編譯器放在一起比較
而一切編譯器都是基於語言的,因此不會有某個編譯器不能適應語言
在中國的信息學奧林匹克競賽中,過去比較常用的Pascal編程工具是Turbo Pascal。Turbo Pascal是DOS下的一種16位編程工具,在Delphi出現之前,它是世界上最多人使用的Pascal編程工具,擁有編譯速度極快的先進編譯器和功能強大而又簡便易用的集成開發環境(IDE),在微機程序員中廣為流行,正是它的出現奠定了Pascal在DOS/Windows平台上不可動搖的根基,現在常見的版本有Turbo Pascal 5.5、Turbo Pascal 6.0和Borland Turbo Pascal with Objects 7.0。Turbo Pascal 6.0與Turbo Pascal 5.5相比,主要是IDE更為強大,而其程序設計功能改變不大,只是增加了一些新的功能,例如可以內嵌asm匯編語句等。而Borland Turbo Pascal with Objects 7.0(簡稱Borland Pascal 7.0)則有了新的飛躍,首先是IDE進一步加強,提供了程序瀏覽器,然後是程序設計功能有了很大的提升,新增了一些十分有用的標准子程序,支持比較完善的面向對象程序設計功能,並提供了DOS實模式、DOS保護模式和Windows模式三種程序編譯模式,能夠編寫出可以使用擴充內存(XMS)的保護模式應用程序或者在Windows 3.x下運行的Windows程序,另外還提供了一個對象窗口庫(OWL),使用它可以快速的開發出具有一致的視窗界面(DOS或Windows 3.x)的應用程序。Borland Pascal 7.0在1992年推出,是Turbo Pascal系列在DOS下的最後版本。
現在,隨著Turbo Pascal逐漸被淘汰,全國信息學奧林匹克競賽決賽(NOI)和國際信息學奧林匹克競賽(IOI)已經指定Free Pascal為比賽使用的Pascal編程工具。Free Pascal是由一個國際組織開發的32位Pascal編程工具,屬於共享軟體,可用於各種操作系統。根據編譯選項的不同,它可以使用Borland Pascal兼容語法、Delphi 2 Object Pascal語法或者其它語法進行編寫程序。由於它擁有32位的編譯器,而且一直在更新發展中,因此它的功能比Borland Pascal更加強大,擁有許多現代程序設計的特徵,但同時也很不成熟,存在很多漏洞。Free Pascal正處於發展初期,相應的函數庫十分少,對程序員的吸引力遠比不上擁有VCL和CLX的Delphi和Kylix。
Pascal中基本符號以及保留字:
pascal語言只能使用一下幾類基本符號:
(1)大小寫英文字母
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
(2)數字
1 2 3 4 5 6 7 8 9 0
(3)其他符號
+ - * / = <> <= >= < > ( ) [ ] { } := , . ; : .. '
注意,pascal語言除了可以使用以上規定的字元外,不得使用其他任何符號。
補充說明FreePascal(FP):
Free Pascal是一個在多種版本Pascal和Delphi下的產物,目前比較成熟的版本是由FreePascal.org發布的1.0.10版本,由於是Pascal上的改版,在FP里加入了很多以前沒有的東西,例如:FillChar系列內存塊賦值語句,用Power代替了**(乘方),但是**還是可以使用。
另外FP加強了與內存的互容性,增大對內存的支持,FP里的內存限制是TP和BP里的將近上萬倍。
FP還進一步加強了單元支持、面向對象程序設計的支持、顯卡(音效卡)的支持、圖形高級覆蓋的支持、Windows\Linux\OS/2\..等眾多系統的支持。在FP的較穩定版本中,可以方便的利用Win32編譯模式,編譯出Windows應用程序,與Delphi的功能相當。同時對動態連接庫、控制項、資料庫、文件、網路、OpenGL的深入支持,使得FP脫穎而出。
更值得提出的是,FP支持Delphi及C++的部分語言,例如:A+=2這樣的C Style語言,在FP里完美支持。
FP中支持單目、雙目操作符,即所有版本的Pascal的符號和「@」等特殊符號。
FreePascal.org現在正在修訂FP 2.0的版本,但使用起來並沒有1.0.10那樣輕松,穩定性也下降不少。
截止09年頭,版本到了2.2.2.
C. pascal編程
var
f,a:array[0..101] of longint;
n,i,j,t,k:longint;
begin
readln(n);
for i:=1 to n do
begin
for j:=1 to 4 do
begin
read(t);
f[i]:=f[i]+t;
end;
readln;
a[i]:=i;
end;
for i:=1 to n-1 do
begin
k:=i;
for j:=i+1 to n do
if f[j]>f[k] then k:=j;
t:=f[k];f[k]:=f[i];f[i]:=t;
t:=a[k];a[k]:=a[i];a[i]:=t;
end;
for i:=1 to n do writeln(a[i],' ',f[i]);
end.
D. pascal編程
你可以調用 system的單元
uses system;
初學者用不到。單元操作是Pascal高級編程技術。您學習到深層的時候自然會明白的。^_^
弄一些簡單的出來吧
(1)assign過程
形式:assign(f,str);
功能:將文件名字元串str賦給文件變數f,程序對文件變數f的操作代替對文件str的操作。
(2)rewrite過程
形式:rewrite(f);
功能:建立並打開一個新的允許寫磁碟文件,其文件名必須先由assign過程賦給變數f。這時,指向文件元素的指針指向第一個元素,rewrite過程所建立的文件為空文件。
(3)reset過程
形式:reset(f);
功能:打開一個已經存在的磁碟文件,其文件名必須先由assign過程賦給變數f,該文件只能讀,指向文件元素的指針指向第一個元素。
(4)close過程
形式:close(f);
功能:關閉和f關聯的磁碟文件,在寫操作時自動產生一個文件結束標志。
(5)形式:append(f);
功能:打開一個已經存在的磁碟文件,其文件名必須和assign過程中的變數名f相對應,該文件只能寫,此時文件指針指向文件尾。
E. Pascal編程
遞歸演算法,n較大時會超時,供參考:
{$m,65520,0,655360}
procerenext(m,u2,u1:integer;varn,num:longint);
{分別為已走步數、上上步、上步、總步數、路徑數}
begin
ifm=ntheninc(num)
elseifm=0thenbegin
{以下用1、2、3分別代表紅、黃、藍三種顏色}
next(1,0,1,n,num);
next(1,0,2,n,num);
next(1,0,3,n,num);
end
elseifm=1thenbegin
next(2,u1,1,n,num);
next(2,u1,2,n,num);
next(2,u1,3,n,num);
end
elseifm>1thenbegin
ifu1<>u2thenbegin
next(m+1,u1,u1,n,num);
next(m+1,u1,u2,n,num);
end;
ifu1=u2thenbegin
next(m+1,u1,1,n,num);
next(m+1,u1,2,n,num);
next(m+1,u1,3,n,num);
end;
end;
end;
var
n,num:longint;
i:integer;
begin
fori:=1to20dobegin
n:=i;
num:=0;
next(0,0,0,n,num);
writeln(n:3,num:15);
end;
end.
{TurboPascalVersion7.1Copyright(c)1983,97BorlandInternational
C:PASIDE穿越懸崖.PAS(1)
C:PASIDE穿越懸崖.PAS(1)
C:PASIDE穿越懸崖.PAS(41)
C:PASIDE穿越懸崖.PAS(41)
41lines,2720bytescode,680bytesdata.
13
29
321
451
5123
6297
7717
81731
94179
1010089
1124357
1258803
13141963
14342729
15827421
161997571
174822563
1811642697
1928107957
2067858611}
F. pascal編程
var n:longint;
begin
read(n);
if n mod 8=0 then write('H');
if n mod 8=1 then write('A');
if n mod 8=2 then write('B');
if n mod 8=3 then write('C');
if n mod 8=4 then write('D');
if n mod 8=5 then write('E');
if n mod 8=6 then write('F');
if n mod 8=7 then write('G');
end.
G. 學校考試用pascal語言編程 怎麼編
一、pascal的基本語法單位
1、基本符號
A——Z;a——z;0——9;+,-,*,/,=,<>,<=,>=,<,>,(,),[,],{,},:=,,,;,.,:,..,',^
注意:pascal語言除了能使用以上規定的基本符號外,不得使用任何其它符號。
2、保留字
AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DIWNTO,ELSE,END,FILE,FOR,FUNTION,GOTO,IF,LABEL,MOD,NIL,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,VAR,WHILE,WITH。
注意:所起的文件名不能與保留字相同。
3、標識符
以字母打頭的字母數字串,長度小於等於8。
標准標識符(共三十九個):
標准常量:
false,true,maxint
標准類型:
integer,real,char,boolean,text
標准文件:
input,output
標准函數:
abs,arctan,chr,cos,eof,eoln,exp,ln,odd,ord,ored,round,sin,sqr,
sqrt,succ,trunc
標准過程:
get,new,pack,page,put,read,readln,reset,rewrite,unpack,write, writeln
二、程序結構
1、由三大部分組成:程序首部,說明部分,語句部分。
PROGRAM 程序名(input,output);
{……} 解釋
CONST
pi=3.14159;
VAR
r,l,s:real;
BEGIN
write('input r:');
read(r);
l:=2*pi*r;
write('l=',l,'s=',s);
END;
2、大量使用標點符號,保留字後不加標點符號(END除外)。
H. pascal編程
我只寫核心代碼吧:
基本定義:type tree=^node;node=record data:char;lc,rc:tree;end;
(2):
procere search(t:tree); begin
前序:writeln(t^.data);search(t^.lc);search(t^.rc);end;
中序:search(t^.lc);writeln(t^.data);search(t^.rc);end;
後序:search(t^.lc);search(t^.rc);writeln(t^.data);end;
(3):
var leaves:byte; // 自己初始化為0
procere GetLeaves(t:tree);
begin
if (t^.lc=nil)and(t^.rc=nil) then inc(leaves)
else
begin
if (t^.lc<>nil) then GetLeaves(t^.lc);
if (t^.rc<>nil) then GetLeaves(t^.rc);
end;
end;
{之後全局變數leaves儲存葉結點數}
(4):
function GetDepth(t:tree):byte;
var ld,rd:integer;
begin
ld:=-1;rd:=-1;
if (t^.lc<>nil) then ld:=GetDepth(t^.lc);
if (t^.rc<>nil) then rd:=GetDepth(t^.rc);
if (ld>rd) then GetDepth:=ld else GetDepth:=rd;
inc(GetDepth);
end;
(5):
很明顯的廣搜,如果連廣搜都不會建議先別學二叉樹
I. pascal編程
pascal對字元串的比較就是按字典序比較的,所以直接排一遍序即可,我用的是快排。
const
maxn=1000;
var
i,n:longint;
a:array[1..maxn] of string;
procere qsort(s,t:longint);
var i,j:longint;
x,tmp:string;
begin
i:=s; j:=t; x:=a[(i+j)>>1];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then begin
tmp:=a[i]; a[i]:=a[j]; a[j]:=tmp;
inc(i); dec(j);
end;
until i>j;
if s<j then qsort(s,j);
if i<t then qsort(i,t);
end;
begin
readln(n);
for i:=1 to n do readln(a[i]);
qsort(1,n);
for i:=1 to n do writeln(a[i]);
end.
J. Pascal編程
2、 a,b,c分別等於1、12、123,把它們按向左對齊、向右對齊的方式列印出來。
program Noname15;
var i,p:integer;
begin
for i:=1 to 3 do begin
for p:=1 to i do
write (p);
writeln;
end;
writeln ('*****');
for i:=1 to 3 do begin
write (1:4-i);
for p:=2 to i do
write (p:2);
writeln;
end;
writeln ('*****');
for i:=1 to 3 do begin
write (1:4-i);
for p:=2 to i do
write(p);
writeln;
end;
end.
3、 輸入一個四位整數,把它的各位數字倒序輸出。(提示:用MOD和DIV運算完成)
program Noname11;
uses crt;
var a:longint;
procere print(c:longint);
begin
if c>99 then begin
write (c mod 10);
print (c div 10);
end else begin
write (c mod 10);
write (c div 10);
end;
end;
begin
Readln(a);
print (a);
readkey
end.
4、 從鍵盤上讀入小寫的"pascal",利用CHR()和ORD()函數,輸出大寫的"PASCAL"。
program Noname10;
uses crt;
var c:packed array[1..10]of char;p:integer;
begin
read (c);
p:=1;
while ord(c[p])<> 0 do
begin
write(chr(ord (c[p])-32));
inc(p);
end;
readkey;
end.
5、 從鍵盤上讀入一個實數,利用ROUND()和TRUNC()函數,輸出該實數本身、整數部分、小數部分、四捨五入後的值。
program Noname12;
uses crt;
var a:real;
begin
Readln(a);
writeln;
writeln (a);
writeln (trunc(a));
writeln (a-trunc(a));
writeln (round(a));
readkey
end.
6、 從鍵盤上讀入長方形的邊長a,b,計算它的面積和周長,輸出
program Noname13;
uses crt;
var a,b:real;
begin
readln (a,b);
writeln ('s=',a*b);
writeln ('c=',(a+b)*2);
readkey
end.
7、 輸入一個時、分、秒,把它轉換為一個秒數。
program Noname14;
uses crt;
var s,m,h:integer;
begin
write ('H=');
Readln(h);
write ('M=');
readln (m);
write ('S=');
readln (s);
writeln;
if h*m<>0 then
writeln (s+60*(h*m))
else if h=0 then
writeln (s+60*m)
else if m=0 then
writeln (s+3600*h);
readkey
end.