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.