
pascal编译系统属于编程语言。它由瑞士Niklaus Wirth教授于六十年代末设计并创立的。Pascal语言语法严谨,层次分明,程序易写,可读性强,是第一个结构化编程语言。
Pascal语言广泛用于各种软件,程序分为名称(program后自拟)、设置(var后规定)、开始(begin)、程序(正文)、读取(read/read ln)、结束(end),结构层次强,严谨而又紧密。
具有丰富的数据类型和简洁灵活的 *** 作语句。高级语言发展过程中,Pascal是一个重要的里程碑。Pascal语言是第一个系统地体现了EWDijkstra和CARHoare定义的结构化程序设计概念的语言。
扩展资料
Pascal强调的结构化编程带来了非结构化语言如Fortran之流无法比拟的美和乐趣,Unix崇尚的“小即是美”、“没有消息就是好消息”。
正因为上述特点,Pascal语言可以被方便地用于描述各种算法与数据结构。尤其是对于程序设计的初学者,Pascal语言有益于培养良好的程序设计风格和习惯。
IOI(国际信息学奥林匹克竞赛)把Pascal语言作为三种程序设计语言之一,NOI(全国奥林匹克信息学竞赛)把Pascal语言和c语言、c++语言作为竞赛使用程序设计语言,在大学中Pascal语言也常常被用作学习数据结构与算法的教学语言。
高级语言发展过程中,PASCAL是一个重要的里程碑。1971年,瑞士联邦技术学院尼克劳斯·沃尔斯(NWirth)教授发明了另一种简单明晰的电脑语言,这就是以电脑先驱帕斯卡的名字命名的PASCAL语言。
PASCAL语言语法严谨,编程语言。沃尔斯一生还写作了大量有关程序设计、算法和数据结构的著作,因此,他获得了1984年度“图灵奖”。
很简单,在记事本里写完程序以后,把名字改成 pas (指的是程序名)然后。。把这个文件用鼠标左键拖拽到桌面上Free Pascal的快捷方式里,然后Free Pascal就把程序打开了。--------------------------------------(以上是废话)---------------------------------------------紧接着,在FREE PASCAL标题的正下方,有“ File Edit Search Run Compile ……………… ”点击Compile,然后点击第一个就编译了。。当然,最简单的方法是按下键盘上的ALT键,然后按F9就OK了。
空位用空格补齐(每用下划线)
可以文件输入(用编译好的程序打开文件),亦可键盘输入。
用打过CRT补丁的Turbo Pascal编译,或使用Free Pascal(这个不保证正常)
样例没有超时,但对于特殊数据可能超时(我还没有数据,自己写得太简单,但是,特殊数据基本不会不超过001s)
程序如下:
program sdjsq;{数独解算器}
{-------------调用库------------------------------------------------USES}
uses CRT,Dos;{使用CRT Dos库}
{-------------数据类型定义------------------------------------------TYPE}
type
sz=09;{数字,byte类型的子界占一byte}
sy=19;{same as sz}
sd=array [sy,sy] of sz;{数独,占8×8×1byte=81byte}
ss=set of sy;{数字的集合}
dot=
record
s:ss;
n,x,y:byte;
end;
{-------------变量定义-----------------------------------------------VAR}
var
a:sd;
x,y:byte;
list:record
num:byte;
dat:array [181] of dot;
end;
{=============打印边框============================================PRINTK}
procedure printk;
var
i, k : byte;
flag : boolean;
begin
gotoxy(1,1);textcolor(15);textbackground(0);
write(#218);for k:=1 to 8 do write(#196#194);writeln(#196#191);
for i := 1 to 9 do begin
write(#179);for k:=1 to 9 do begin
textbackground(1-ord(((i-1) div 3+(k-1) div 3) mod 2=0));
write(#32);textbackground(0);write(#179);
end;
writeln;
if i<>9 then begin
write(#195);for k:=1 to 8 do write(#196#197);writeln(#196#180);
end;
end;
write(#192);for k:=1 to 8 do write(#196#193);writeln(#196#217);
gotoxy(1,1);
end;
{=============可以填的数==============================================KY}
procedure ky(a:sd;x,y:byte;var s:ss);
var
i,j:byte;
begin
s:=[1,2,3,4,5,6,7,8,9];
for i:=1 to 9 do if i<>x then s:=s-[a[i,y]];
for i:=1 to 9 do if i<>y then s:=s-[a[x,i]];
for i:=1 to 3 do for j:=1 to 3 do
if ((x-1)div 33+i<>x) and ((y-1)div 33+j<>y)
then s:=s-[a[(x-1)div 33+i,(y-1)div 33+j]];
s:=s-[0];
end;
{=============打印数据=============================================PRINT}
procedure print(xn,yn,color:byte);
begin
gotoxy(2xn,2yn);
textcolor(color);
textbackground(5+ord(not ((x=xn)and(y=yn)))(-4-ord(((xn-1) div 3+(yn-1) div 3) mod 2=0)));
if a[xn,yn]<>0 then write(a[xn,yn]) else write(#32);
gotoxy(1,1);
end;
{=============用键盘读入数据===========================INPUT BY KEYBOARD}
procedure inputbkb(var a:sd);
label 1;
var
xi,yi:byte;
c:char;
s:ss;i:byte;
begin
printk;
fillchar(a,sizeof(a),0);x:=1;y:=1;print(1,1,0);
textcolor(15);textbackground(0);
s:=[19];gotoxy(1,20);for i:=1 to 9 do write(i:2);
repeat
c:=readkey;
xi:=x;yi:=y;
case c of
(#13{Enter}, #27{Esc})
#27:halt;
(#72{Up}, #75{Left}, #77{Right}, #80{Down})
#0:begin
c:=readkey;
case c of
#75:if x<>1 then x:=x-1 else write('');
#72:if y<>1 then y:=y-1 else write('');
#80:if y<>9 then y:=y+1 else write('');
#77:if x<>9 then x:=x+1 else write('');
#83:a[x,y]:=0;
end;
end;
#48#58:if (ord(c)-48 in s) or (c=#48)
then a[x,y]:=ord(c)-48 else write('');
end;
print(xi,yi,12);print(x,y,12);
ky(a,x,y,s);
gotoxy(1,20);
textcolor(15);textbackground(0);delline;
for i:=1 to 9 do if i in s then write(i:2);
until c=#13;
x:=0;y:=0;print(xi,yi,12);
end;
procedure noans;
begin
gotoxy(1,20);
textbackground(0);delline;textcolor(143);
write('No answer!');
readkey;
halt;
end;
{=============用文件读入数据===============================INPUT BY FILE}
procedure inputbf(var a:sd;const path:string);
function Exist(Path:string):boolean;
var
S: PathStr;
begin
S := FSearch(Path, GetEnv(''));
Exist := S <> '';
end;
var
x,y:byte;
c:char;
f:text;
begin
if not exist(path) then begin
inputbkb(a);
end else begin
assign(f,path);reset(f);printk;
for y:=1 to 9 do begin
for x:=1 to 9 do begin
read(f,c);
if not (c in [#48#58,#32]) then begin
inputbkb(a);exit;
end;
if c=#32 then a[x,y]:=0 else a[x,y]:=ord(c)-48;print(x,y,12);
end;
readln(f);
end;
end;
end;
{=============填入固定数据============================================TC}
procedure tc;
var
x,y,i,t,n,f:byte;
s:ss;
function tct:byte;
var
i,j,k,l:byte;
s1,s2,s3:ss;
n1,n2,n3:array [19] of byte;
begin
tct:=0;
for i:=1 to 9 do begin
fillchar(n1,sizeof(n1),0);fillchar(n3,sizeof(n3),0);fillchar(n2,sizeof(n2),0);
for j:=1 to 9 do begin
ky(a,i,j,s);if a[i,j]<>0 then begin s:=[a[i,j]]; n1[a[i,j]]:=10; end;
for k:=1 to 9 do if k in s then if n1[k]=0 then n1[k]:=j else n1[k]:=10;
ky(a,j,i,s);if a[j,i]<>0 then begin s:=[a[j,i]]; n2[a[j,i]]:=10; end;
for k:=1 to 9 do if k in s then if n2[k]=0 then n2[k]:=j else n2[k]:=10;
ky(a,((i-1) mod 3)3+((j-1) mod 3+1),((i-1) div 3)3+((j-1) div 3+1),s);
if a[((i-1) mod 3)3+((j-1) mod 3+1),((i-1) div 3)3+((j-1) div 3+1)]<>0 then begin
s:=[a[((i-1) mod 3)3+((j-1) mod 3+1),((i-1) div 3)3+((j-1) div 3+1)]];
n3[a[((i-1) mod 3)3+((j-1) mod 3+1),((i-1) div 3)3+((j-1) div 3+1)]]:=10;
end;
for k:=1 to 9 do if k in s then if n3[k]=0 then n3[k]:=j else n3[k]:=10;
end;
for k:=1 to 9 do begin
j:=n1[k];
if j in [19] then begin
a[i,j]:=k;print(i,j,6);tct:=1;exit;
end;
end;
for k:=1 to 9 do begin
j:=n2[k];
if j in [19] then begin
a[j,i]:=k;print(j,i,6);tct:=1;exit;
end;
end;
for k:=1 to 9 do begin
j:=n3[k];
if j in [19] then begin
a[((i-1) mod 3)3+((j-1) mod 3+1),((i-1) div 3)3+((j-1) div 3+1)]:=k;
print(((i-1) mod 3)3+((j-1) mod 3+1),((i-1) div 3)3+((j-1) div 3+1),6);
tct:=1;exit;
end;
end;
end;
end;
procedure check;
var
i,j,k:byte;
s,s1,s2,s3:ss;
begin
for i:=1 to 9 do begin
s1:=[];s2:=[];s3:=[];
for j:=1 to 9 do begin
if a[i,j]=0 then begin ky(a,i,j,s);s1:=s1+s; end else s1:=s1+[a[i,j]];
if a[j,i]=0 then begin ky(a,j,i,s);s2:=s2+s; end else s2:=s2+[a[j,i]];
if a[((i-1) mod 3)3+((j-1) mod 3+1),((i-1) div 3)3+((j-1) div 3+1)]=0 then begin
ky(a,((i-1) mod 3)3+((j-1) mod 3+1),((i-1) div 3)3+((j-1) div 3+1),s);s3:=s3+s;
end else s3:=s3+[a[((i-1) mod 3)3+((j-1) mod 3+1),((i-1) div 3)3+((j-1) div 3+1)]];
end;
for j:=1 to 9 do begin
if not (j in s1) then noans;
if not (j in s2) then noans;
if not (j in s3) then noans;
end;
end;
end;
begin
repeat
f:=0;
for x:=1 to 9 do
for y:=1 to 9 do
if a[x,y]=0 then begin
ky(a,x,y,s);t:=0;
if s=[] then
noans;
for i:=1 to 9 do if i in s then begin
t:=t+1;n:=i;
end;
if t=1 then begin a[x,y]:=n;print(x,y,14);f:=f+1; end;
end;
f:=f+tct;check;
until f=0;
end;
{=============递归求解===============================================TRY}
function answer:boolean;
var
ans:boolean;
procedure try(num:byte);
var
i,j,n,x,y:byte;
s:ss;
begin
if keypressed then case readkey of #27:halt;#0:if readkey=#107 then halt; end;
if num<=listnum then begin
x:=listdat[num]x;y:=listdat[num]y;
ky(a,x,y,s);if s=[] then exit;
n:=random(8)+1;
for j:=n to n+8 do begin
i:=j mod 9+1;
if i in s then begin
a[x,y]:=i;print(x,y,10);
try(num+1);
a[x,y]:=0;print(x,y,0)
end
end
end else begin
gotoxy(1,20);textcolor(15);textbackground(0);delline;write('Complete!');answer:=true;ans:=true;
case readkey of #27:halt;#0:if readkey=#107 then halt; end;
textcolor(15);textbackground(0);gotoxy(1,20);delline;writeln('Trying');
end;
end;
begin
answer:=false;ans:=false;
try(1)
end;
procedure crtinit;
var
OrigMode: Word;
begin
OrigMode:=LastMode; { Remember original video mode }
TextMode(Lo(LastMode)+Font8x8); { use 43 or 50 lines on EGA/VGA }
end;
procedure px;
var
l:array [19] of record
num:byte;
dat:array [181] of dot;
end;
i,j,k:byte;
d:dot;
begin
for i:=1 to 9 do l[i]num:=0;
for i:=1 to 9 do for j:=1 to 9 do if a[i,j]=0 then begin
dx:=i;dy:=j;ky(a,i,j,ds);dn:=0;for k:=1 to 9 do if k in ds then inc(dn);
inc(l[dn]num);l[dn]dat[l[dn]num]:=d;
end;
listnum:=0;
for i:=1 to 9 do for j:=1 to l[i]num do begin
inc(listnum);listdat[listnum]:=l[i]dat[j];
end;
end;
begin
randomize;
crtinit;
textbackground(0);clrscr;
if ParamCount=0 then inputbkb(a) else inputbf(a,ParamStr(1));
textcolor(15);textbackground(0);gotoxy(1,20);delline;writeln('Thinking');tc;
textcolor(15);textbackground(0);gotoxy(1,20);delline;writeln('Checking');px;
textcolor(15);textbackground(0);gotoxy(1,20);delline;writeln('Trying');gotoxy(1,1);
if not answer then noans;
textcolor(15);textbackground(0);gotoxy(1,20);delline;writeln('That''s all!');readkey;
end
呵呵 这很麻烦的 你可以参考 until 制作方法 估计你是不会采纳的
§111 单元的结构
一个单元有两部分组成——接口部分和实现部分。如:
unit <标识符>; {单元头}
interface {接口部分开始}
uses <单元列表> {可选项}
{公共说明部分}
implementation {实现部分开始}
{私有说明部分}
{过程或函数的定义}
begin {初始化部分开始}
{初始化代码}
end
1接口部分
单元的接口部分由保留字interface开始,在单元头和实现部分之间。在此部分,说明公用的常量、类型、变量与过程和函数的头部。一个程序如果使用了一个单元,那么它就能访问该单元的接口部分所定义的所有变量、数据类型、过程和函数。
接口部分仅包含过程和函数的头部。过程和函数的实现部分在单元的实现部分定义。在程序中使用一个单元只需要知道怎样调用单元中的过程,而不需要知道过程是怎样实现的。
2实现部分
实现部分是由保留字implementation开始。实现部分定义所有在接口部分声明的过程和函数的程序体。另外实现部分可以有自己的说明,这些说明是局部的,外部程序是不知道它们的存在的,也不能调用它们。
因为在实现部分中声明的一切对象在作用域上是局部的,所以实现部分的改变对其它单元和程序来讲是不可见的。因此,修改一个单元的实现部分,并不需要重新编译使用该单元的单元,只需要编译这个修改单元和使用此单元的程序。然而,如果接口部分做了修改,所有使用该单元的单元和程序,均需要重新编译,甚至需要修改。
在实现部分,如果有uses子句,则必须紧跟在保留字implementation之后。
如果过程说明为external类型,则需用{$L 文件名OBJ}编译指令将其连入程序。
在接口部分说明的函数或过程,除了inline类型之外,都必须在实现部分再现,它们的头部必须和接口部分一致或用简写格式。
3初始化部分
单元的整个实现部分通常包括在保留字implementation和end之间。然而,如果把保留字begin放在end之前,在它们中间写一些语句,这些语句就是单元的初始化部分。
在初始化部分可以初始化任何变量,这些变量可由单元使用,也可通过接口部分由程序使用。可以在这部分打开文件供程序使用。例如,标准单元Printer用它的初始化部分使所有输出调用都指向文本文件Lst,这样在write语句中就可以使用它。
当使用单元的程序执行时,在程序的主体执行之前,它所使用的所有单元的初始化部分按uses子句中说明的先后依次被调用。
§112 单元的使用
当使用单元时,需在uses语句中将使用的所有单元的名字列出来,单元与单元之间用逗号(,)隔开。如:
uses dos,crt;
当编译器扫描到uses子句时,它把每个单元的接口信息加到符号表中,同时又把实现部分的机器码与程序代码连接起来。
1单元的直接引用
一个模块(程序或单元)的uses子句只须列出该模块直接使用的单元名。例如:
program prog;
uses unit2;
const
a = b;
begin
writeln('a=',a);
end
unit unit2;
interface
uses unit1;
const
b = c;
implementaion
end
unit unit1;
interface
const
c = 1;
implementation
const
b = 2;
end
unit2用了unit1,主程序用了unit2,间接地使用了unit1。
单元的接口部分如果有改动,则所有使用该单元的单元或程序必须重新编译。但如果改动了单元的实现部分,则用到它的单元不必重新编译。在上例中,如果unit1的接口部分改动了(如C=2),unit2就必须重新编译;如果只改动实现部分(b=1),则unit2不必重新编译。
编译一个单元时,TURBO PASCAL计算出该单元的版本数,这个数是单元的接口部分的校验和。上例中,在编译unit2时,unit1的当前版本数存入unit2的编译版本中,编译主程序时,unit1的版本数就和存在unit2中的版本数比较,若二者不同,说明unit2编译后,unit1的接口部分改动过,编译器给出错误信息并重新编译unit2。
在FP界面下,按Alt + F5可以浏览程序运行结果。在仅仅打开这个程序时,则不能看到,不是他没出来,而是太快了,一闪而过。如果想看到结果,可在程序最后(“end”之前)加上“readln;”便可看到,然而按一下“Enter”键,就会退出程序。
以上就是关于pascal编译系统属于什么全部的内容,包括:pascal编译系统属于什么、Free Pascal 怎么编译、如何用PASCAL编写数独程序 SUDOKU等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)