pascalcc矿池
㈠ pascal函数过程表
1.算术函数
函数标识符 自变量类型 意义 结果类型
abs 整型、实型 绝对值 同自变量
arctan 整型、实型 反正切 实型
cos 整型、实型 余弦 实型
exp 整型、实型 指数 实型
frac 整型、实型 小数部分 实型
int 整型、实型 整数部分 实型
ln 整型、实型 自然对数 实型
pi 无自变量 圆周率 实型
sin 整型、实型 正弦 实型
sqr 整型、实型 平方 同自变量
sqrt 整型、实型 平方根 实型
例:abs(-4)=4 abs(-7.49)=7.49 arctan(0)=0.0
sin(pi)=0.0 cos(pi)=-1.0 frac(-3.71)=-0.71
int(-3.71)=-3.0 sqr(4)=16 sqrt(4)=2
2.标准函数
函数标识符 自变量类型 意义 结果类型
odd 整型 判断奇数 布尔型
pred 离散类型 求前趋 同自变量
succ 离散类型 求后继 同自变量
例:odd(1000)=false pred(2000)=1999 succ(2000)=2001
odd(3)=true pred('x')='w succ('x')='y'
3.转换函数
函数标识符 自变量类型 意义 结果类型
chr byte 自变量对应的字符 字符型
ord 离散类型 自变量对应的序号 longint
round 实型 四舍五入 longint
trunc 实型 截断取整 longint
例:chr(66)='B' ord('A')=65 round(-4.3)=-5 trunc(2.88)=2
4.杂类函数
函数标识符 自变量类型 意义 结果类型
random 无自变量 [0,1间的随机实数 real
random word [0,自变量间的随机整数) word
randomize 无自变量 初始化内部随机数产生器 longint
upcase 字符型 使小写英文字母变为大写 字符型
downcase 字符型 使小写英文字母变为大写 字符型
SYSTEM TP的运行库,包括常用的标准函数和过程,可以在程序中直接使用,不需USES语句说明。
DOS 具有日期、时间、目录查找、程序执行等功能
CRT 具有屏幕模式控制、扩展键盘码、颜色、窗口、声音等 功能
PRINTER 支持打印输出操作。
GRAPH 高级图形软件包,支持多种图形适配器。
GRAPH3 实现TP3.0的图形软件包。
TURBO3 兼容TP3.0的源程序。
OVERLAY 实现高级覆盖管理
SYSTEM单元常用过程与函数
ABS(X) F 求变量的绝对值
ADDR(X) F 测变量地址
APPEND(F) P 打开一个存在的文本文件,并将文件指 针指向文件末尾准备添加元素
ARCTAN(X) F 反正切
ASSIGN(F,C) P 将字符串C所表示的外部文件名赋给文 件变量F
ASSIGNED(X) P 测试程序当中的指针或变量是否为空
BLOCKREAD(F,D,NUM) P 读类型文件。
BLOCKWRITE(F,D,NUM) P 写无类型文件
BREAK P 中止或结束循环
CHDIR(PATH) P 改变当前目录
CHR(X) F 求ASCII码值为X的字符
CLOSE(F) P 关闭文件
CONCAT(S1,S2...S3) F 字符串合并
CONTINUE P 继续循环
COPY(S,POS,LEN) F 返回一个字符串的子串
COS(X) F 余弦函数
CSEG F 返回CS寄存器的当前值
DEC(X) F X:=X-1
DELETE(S,POS,LEN) P 删除一个字符串的子串
DISPOSE(P) P 释放一个动态变量
DSEG F 返回DS寄存器的当前值
EOF(F) F 判断文件是否结束
EOLN(F) F 判断文件类型中的一行是否结束
ERASE(F) P 删除一个存在的外部文件。
EXIT P 过程中止
EXP(X) F 以E为底的指数函数
FILEPOS(F) F 文件记录的当前位置
FILESIZE(F) F 文件记录数
FILLCHAR(D,LEN,DATE) P 填充数值或字符
FLUSH(F) P 清空文件缓存区
FRAC(X) F 取实形变量的小数部分
FREEMEM(P,I) P 释放变长动态变量
GETDIR(DRV,PATH) P 取当前盘,当前目录
GETMEM(P,I) P 分配变长的动态变量,并把块地址存放在一个指针变量中
HALT P 立即中止程序执行,返回TP编辑器或DOS
HI(I) F 返回一个变量的高位字节
INSERT(S,D,POS) F 在一个字符串中某一位置开始插入一个子串
INT F 取整数部分
IORESULT F 返回最后一次输入/出操作的结果状态
LENGTH(S) F 取字符串的长度
LN(R) F 求自然对数
LO(I) F 返回一个变量的低位字节
MAXAVAIL F 返回最大内存空间
MEMAVAIL F 返回可用内存数目
MKDIR(PATH) P 建立一个子目录
MOVE(S,D,LEN) P 快传送
NEW(P) P 建立一个新的动态变量
ODD(X) F 判断一个变量的值是否为奇数
OFS(X) F 侧变量偏移地址
ORD(CH) F 求一个字符的ASCII码值
PARAMCOUNT F DOS参数串长度
PARAMSTR(N) F DOS参数串
PI F 圆周率的值
pos(str1,str2) f 测一个字符串中包含的另一个子串的开始位置
pred(x) f 求前驱
ptr(i) f 指针赋值
random f 返回0~1之间的随机实数
randomize p 初始化随机数发生器
read/readln(f,x) p 读入/输入数据
rename(f,str) p 给一个外部文件改名
reset(f) p 打开文件,并将文件指针指向开始,并准备读数据
rewrite(f) p 打开文件,并将文件指针指向开始,准备写资料
rmdir(path) p 删除一个子目录
round(x) f 求实数的近似数
runerror p 停止程序的运行
scrollto p 滚动显示窗口的某部分内容
seek(f,n) p 将文件指针定位于文件f的第n个文件成分上
seekrof(f) f 定位到文件尾
seekroln(f) f 定位到行尾
seg(n) f 测变量段地址
settextbuf(f) p 将输入/出缓冲区与一个文本文件建立关联
sin(x) f 正弦函数
sizeof(x) f 测变量大小
sptr f 返回sp寄存器的当前值
sqr(x) f 平方
sqrt(x) f 平方根
sseg f 返回ss寄存器的当前值
str(i,s) f 将一个整数转换成字符串
succ(X) f 后继函数
swap(x) f 交换一个变量的高位和低位字节
trunc(x) f 截去实数的小数部分
truncate(f) p 截去文件当前指针以后的内容
upcase(ch) f 将小写字母转换成大写字母
val(s,r,p) p 将一个字符串转换成数值
writeln(f,x) p 输出
dos单元常用过程与函数
getdate p 返回系统当前日期
detftime p 返回最后一次写入的日期和时间
gettime p 返回系统当前时间
packtime p 转换系统日期和时间,封装成4个字节的长整形格式
setdate p 设置系统当前日期
setftime p 写入新的系统日期和时间,覆盖系统最后一次写入的 系统日期和时间文件
settime p 设置系统当前时间
uppacktime p 将系统日期和时间转换成纪录格式
diskfree f 返回指定磁盘可用剩余空间
disksize f 返回指定磁盘的总容量
get/setverity p 返回/设置dos状态下的磁盘读写标记
fexpand f 返回函数名的全称
fsearch f 在一个目录中查找文件
fsplit f 将一个文件名分成目录、文件名、扩展名
findfirst p 在当前目录或指定目录下查找第一个与给定属性相匹 配的文件名
作者: 巫山霏云 2005-2-7 16:49 回复此发言
--------------------------------------------------------------------------------
3 turbo pascal基本函数过程及解释
findnext p 返回下一个满足匹配条件的文件名
getfattr p 返回文件的属性
setfattr p 设置文件属性
gerintvec p 返回某个中断变量值
intr p 执行软中断
msdos p 执行dos 系统调用
setintvec p 设定中断值
exec p 通过一个特定命令行执行特定程序段
keep p 中断程序的执行但仍驻留在内存中
swapvectors p 用当前变量交换所有中断变量值
dosexitcode f 回到子程序出口
dosversion f 显示dos版本
crt单元
assigncrt(f) p 将文本文件f与显示器crt建立联系
clreol p 清除当前行光标所在位置以后的字符
clrscr p 清除当前窗口或屏幕,光标返回到左上角
delay(t) p 等待t毫秒
delline p 清除光标所在行上所有内容
gotoxy(x,y) p 将光标移到屏幕某处
highvideo p 选择高亮度显示字符
insline p 在当前光标位置插入空行
keypressed f 测定键盘输入状态
lowvideo p 低亮度显示字符
normvideo p 选择正常文本属性从光标所在位置开始显示字符
nosound p 关闭内部扬声器
readkey p 等待从键盘输入一个字符
sound(hz) p 以hz指定的频率发声
textbackground(soor) p 设置正文背景颜色
textcolor(color) p 设置正文前景颜色
textmode p 选择特定的文本显示模式
wherex/y f 返回当前光标位置的坐标值
window(x1,y1,x2,y2) p 在屏幕定义一个文本窗口
其他单元
chain(f) p 目标程序链接
execute(f) p 执行目标程序
mark(p) p 标记动态变量
release(p) p 释放动态变量区
srtinit p 屏幕初始化
crtline p 汉字屏幕方式转换
graphbackground(color) p 选择背景色
graphcolormode p 中分辨率彩色图形方式,320*200彩色
graphmode p 中分辨率黑白图形方式,320*200黑白
graphwindow(x1,y1,x2,y2,color)p 定义图形方式窗口
hires p 高分辨率单色图形方式,640*200黑白
hirescolor(color) p 高分辨率彩色图形方式,640*200彩色
palette(color) p 中分辨率彩色图形颜色组
ovrpath(path) p 指定覆盖文件路径
draw(x1,y1,x2,y2,color) p 画线
intr(n,m) p 8086中断调用
plot(x,y,color) p 画点
random(integer) f 产生随机整数
seg(x) f 测变量段地址
colortable(c1,c2,c3,c4) p 重定义颜色组
arc(x,y,radius,color) p 画圆弧
circle(x,y,radius,color) p 画圆
getpic(buffer,x1,x2,y1,y2) p 屏幕转储到屏幕
putpic(buffer,x,y) p 缓冲器转储到屏幕
getdotcolor(x,y) p 读点
fillscreen(color) p 填充屏幕
fillshape(x,y,fillcol,bordercol) p 填充一个区域
常用数学函数
求绝对值函数abs(x)
定义:function Abs(X): (Same type as parameter);
说明:X可以是整型,也可以是实型;返回值和X的类型一致例子:
取整函数int(x)
定义:function Int(X: Real): Real;
注意:X是实型数,返回值也是实型的;返回的是X的整数部分,也就是说,X被截尾了(而不是四舍五入)例子:
var R: Real;
begin
R := Int(123.567); { 123.0 }
R := Int(-123.456); { -123.0 }
end.
截尾函数trunc(x)
定义:function Trunc(X: Real): Longint;
注意:X是实型表达式. Trunc 返回Longint型的X的整数部分例子:
begin
Writeln(1.4, ' becomes ', Trunc(1.4)); { 1 }
Writeln(1.5, ' becomes ', Trunc(1.5)); { 1 }
Writeln(-1.4, 'becomes ', Trunc(-1.4)); { -1 }
Writeln(-1.5, 'becomes ', Trunc(-1.5)); { -1 }
end.
四舍五入函数round(x)
定义:function Round(X: Real): Longint;
注意:X是实型表达式. Round 返回Longint型的X的四舍五入值.如果返回值超出了Longint的表示范围,则出错. 例子:
begin
Writeln(1.4, ' rounds to ', Round(1.4)); { 1 }
Writeln(1.5, ' rounds to ', Round(1.5)); { 2 }
Writeln(-1.4, 'rounds to ', Round(-1.4));{ -1 }
Writeln(-1.5, 'rounds to ', Round(-1.5));{ -2 }
end.
取小数函数frac(x)
定义:function Frac(X: Real): Real;
注意:X 是实型表达式. 结果返回 X 的小数部分; 也就是说,Frac(X) = X - Int(_X). 例子:
var
R: Real;
begin
R := Frac(123.456); { 0.456 }
R := Frac(-123.456); { -0.456 }
end.
求平方根函数sqrt(x)和平方函数sqr(x)
定义:平方根:function Sqrt(X: Real): Real;
注意:X 是实型表达式. 返回实型的X的平方根. 平方:function Sqr(X): (Same type as parameter);
注意:X 是实型或整型表达式.返回值的类型和X的类型一致,大小是X的平方,即X*X.
例子:
begin
Writeln('5 squared is ', Sqr(5)); { 25 }
Writeln('The square root of 2 is ',Sqrt(2.0)); { 1.414 }
㈡ pascal[AOI2010]最大连续组长度
program aoi;
var
n,i,now,ans:longint;
c,last,ansc:char;
begin
readln(n);
read(last);
ans:=0;
ansc:=#0;
now:=1;
for i:=2 to n do
begin
read(c);
if c=last then inc(now) else
begin
if now>ans then
begin
ans:=now;
ansc:=last;
end;
now:=1;
end;
last:=c;
end;
readln;
if now>ans then
begin
ans:=now;
ansc:=last;
end;
writeln(ans);
writeln(ansc);
readln;
end.
㈢ pascal 利比亚问题
const maxn=2000;maxm=2000;
var a:array[1..maxn,1..maxm]of boolean;
q:array[1..maxn*maxm,1..3]of longint;
n,m,i,j,head,tail:longint;
x,y,z:longint;
cc:char;
procere go(x,y,z:longint);
begin
if (x<1) or (x>n) or (y<1) or (y>m) then exit;
if not a[x,y] then exit;
if (x=n) and (y=m) then begin
writeln(z);
close(output);close(input);
halt;
end;
inc(tail);
q[tail,1]:=x;q[tail,2]:=y;q[tail,3]:=z;
a[x,y]:=false;
end;
begin
assign(input,'libyan.in');reset(input);
assign(output,'libyan.out');rewrite(output);
readln(n,m);
fillchar(a,sizeof(a),false);
for i:=1 to n do begin
for j:=1 to m do begin
read(cc);
if cc<>'*' then a[i,j]:=true;
end;
readln;
end;
q[1,1]:=1;q[1,2]:=1;q[1,3]:=0;
a[1,1]:=false;
head:=1;tail:=1;
while head<=tail do begin
x:=q[head,1];y:=q[head,2];z:=q[head,3];
go(x-1,y,z+1); //up
go(x+1,y,z+1); //down
go(x,y-1,z+1); //left
go(x,y+1,z+1); //right
inc(head);
end;
end.
用的bfs可以改成dfs
㈣ 线段树的Pascal 语言实现。。
const
maxn=500010;
type
rec=record
l,r:longint;
ans:int64;
end;
var
c:array[0..500010] of longint;
tree:array[0..maxn*4] of rec;
i,a,b,n,m,cc,co,f,flag:longint;
aa:int64;
sc:char;
procere maketree(sum,x,y:longint);
var mid:longint;
begin
if x=y then begin
tree[sum].l:=c[x];
tree[sum].r:=c[y];
tree[sum].ans:=1;
exit;
end;
mid:=(x+y) shr 1;
maketree(sum*2,x,mid);
maketree(sum*2+1,mid+1,y);
tree[sum].l:=tree[sum*2].l;
tree[sum].r:=tree[sum*2+1].r;
tree[sum].ans:=tree[sum*2].ans+tree[sum*2+1].ans;
if tree[sum*2].r=tree[sum*2+1].l then dec(tree[sum].ans);
end;
procere color(sum,le,ri,x,y,z:longint);
var mid:longint;
begin
if (x=le)and(ri=y) then begin
tree[sum].ans:=1;
tree[sum].l:=z;
tree[sum].r:=z;
exit;
end;
if tree[sum].ans=1 then begin
tree[sum*2]:=tree[sum];
tree[sum*2+1]:=tree[sum];
end;
mid:=(le+ri) shr 1;
if x>mid then color(sum*2+1,mid+1,ri,x,y,z) else begin
if y<=mid then color(sum*2,le,mid,x,y,z) else begin
color(sum*2,le,mid,x,mid,z);
color(sum*2+1,mid+1,ri,mid+1,y,z);
end;
end;
tree[sum].l:=tree[sum*2].l;
tree[sum].r:=tree[sum*2+1].r;
tree[sum].ans:=tree[sum*2].ans+tree[sum*2+1].ans;
if (tree[sum*2].r=tree[sum*2+1].l) then dec(tree[sum].ans);
end;
function count(sum,le,ri,x,y:longint):longint;
var mid:longint;
begin
if (le=x)and(ri=y) then exit(tree[sum].ans);
if tree[sum].ans=1 then begin
tree[sum*2]:=tree[sum];
tree[sum*2+1]:=tree[sum];
end;
mid:=(le+ri) shr 1;
if y<=mid then exit(count(sum*2,le,mid,x,y));
if x>mid then exit(count(sum*2+1,mid+1,ri,x,y));
if tree[sum*2].r=tree[sum*2+1].l then
count:=count(sum*2,le,mid,x,mid)+count(sum*2+1,mid+1,ri,mid+1,y)-1
else
count:=count(sum*2,le,mid,x,mid)+count(sum*2+1,mid+1,ri,mid+1,y);
end;
function find(sum,le,ri,target:longint):longint;
var mid:longint;
begin
if le=ri then exit(tree[sum].l);
if tree[sum].ans=1 then begin
tree[sum*2]:=tree[sum];
tree[sum*2+1]:=tree[sum];
end;
mid:=(le+ri) shr 1;
if target<=mid then exit(find(sum*2,le,mid,target));
if target>mid then exit(find(sum*2+1,mid+1,ri,target));
end;
procere init;
begin
readln(n,m);
for i:=1 to n do read(c[i]);readln;
maketree(1,1,n);
end;
procere main;
begin
readln(m);
f:=1;
flag:=1;
for m:=1 to m do begin
read(sc);
if sc='F' then f:=-f
else begin
if (sc='C')and(eoln) then begin
aa:=tree[1].ans;
if (aa>1)and(tree[2].l=tree[3].r) then dec(aa);
writeln(aa);
end else begin
if sc='R' then begin
read(a);
flag:=(flag-f*a+n-1) mod n+1;
end else begin
if sc='C'then begin
read(sc);
read(a,b);
a:=(flag+f*a-f+n-1) mod n+1;
b:=(flag+f*b-f+n-1) mod n+1;
if f<0 then begin
a:=a+b;
b:=a-b;
a:=a-b;
end;
if a<=b then writeln(count(1,1,n,a,b)) else
begin
aa:=count(1,1,n,1,b)+count(1,1,n,a,n);
if (aa>1)and(tree[3].r=tree[2].l) then dec(aa);
writeln(aa);
end;
end else begin
read(a,b);
a:=(flag+f*a-f+n-1) mod n+1;
b:=(flag+f*b-f+n-1) mod n+1;
if sc='S' then begin
co:=find(1,1,n,a);
color(1,1,n,b,b,co);
co:=find(1,1,n,b);
color(1,1,n,a,a,co);
end else begin
read(cc);
if f<0 then begin
a:=a+b;
b:=a-b;
a:=a-b;
end;
if a<=b then color(1,1,n,a,b,cc) else
begin
color(1,1,n,1,b,cc);
color(1,1,n,a,n,cc);
end;
end;
end;
end;
end;
end;
readln;
end;
end;
begin
init;
main;
end.
LZ看下主要过程吧(构树、更新那块),这是神奇手链(jewels.pas/.c/.cpp)的AC code
㈤ 单词背诵 pascal
思想:用二分查找的方法,找出相连的包含最多要背的单词并且单词长度最短。
代码与题解:http://oj.luogu.org:8888/wiki?name=%E9%A2%98%E8%A7%A3+P1381
题目提交地址:http://oj.luogu.org:8888/problemshow.php?pid=1381
请理解后完成程序。
㈥ Pascal高精度加法
定义a,b表示两个待加数组,ans表示结果,x用于处理进位,total记录当时得到结果的位数。
total初始化为a,b之间最大的位数(其实也可以定义一个足够大的数为位数,相对耗点时间)
i,j用于循环变量,核心程序段:
x=0; 初始化
for i=1 to total do
begin
x=a[i]+b[i]+x; x代表的是进位及当前加法所得的值
ans[i]=x mod 10; 加法所得的当前位
x=x div 10; 进位
end;
while (x>0)
begin
inc(total);
ans[total]=x mod 10;
x=x div 10;
end; 处理最高位的进位
for i=total downto 1 do
write(ans[i]); 输出段
㈦ pascal如何实现文件加密
用哪种算法?AES安全性好,但代码很长,没法贴,你自己搜索下
一般的话用DES就足够了
㈧ Pascal P进制数的最小公倍数和最大公因数 (函数与过程做)
var
p:2..16;
a,b:string[32];
s:string;
words:array[1..3]ofstring[32];
i,j,k,code:integer;
aa,bb,x,y:longint;
xs,ys:string;
functionconvert10(c:string;a:integer):longint;
var
k,i,j:integer;
cc:longint;
ch:char;
begin
{以下a进制先转为10进制}
k:=length(c);
cc:=0;
fori:=1tokdobegin
ch:=c[i];
casechof
'A'..'F':j:=ord(ch)-ord('A')+10;
'a'..'f':j:=ord(ch)-ord('a')+10;
'0'..'9':j:=ord(ch)-ord('0');
end;
cc:=cc*a+j;
end;
convert10:=cc;
end;
functionconvert_b(cc:longint;b:integer):string;
var
k,i,j:integer;
bb:array[1..32]ofchar;
bbb,s:string;
begin
{以下10进制再转为b进制}
k:=1;
repeat
j:=ccmodb;
casejof
0..9:bb[k]:=chr(j+ord('0'));
10:bb[k]:='A';
11:bb[k]:='B';
12:bb[k]:='C';
13:bb[k]:='D';
14:bb[k]:='E';
15:bb[k]:='F';
end;
cc:=ccdivb;
ifcc>0theninc(k);
untilcc=0;
bbb:='';
fori:=kdownto1dobbb:=bbb+bb[i];
convert_b:=bbb;
end;
functiongcd(a,b:longint):longint;
begin
ifb=0thengcd:=a
elsegcd:=gcd(b,amodb);
end;
functionlcm(a,b:longint):longint;
varc:longint;temp:longint;
begin
ifa<bthenbeginc:=a;a:=b;b:=c;end;
temp:=a;
whiletempmodb>0dotemp:=temp+a;
lcm:=temp;
end;
begin
{readln(s);}
s:='21101001';
whiles[1]=''dos:=(s,2,length(s)-1);
s:=s+'';
k:=length(s);
j:=1;
words[j]:='';
fori:=1tokdobegin
ifs[i]<>''thenwords[j]:=words[j]+s[i]
elseifs[i-1]<>''thenbegininc(j);words[j]:='';end;
end;
val(words[1],p,code);
a:=words[2];
b:=words[3];
aa:=convert10(a,p);
bb:=convert10(b,p);
x:=gcd(aa,bb);
y:=lcm(aa,bb);
xs:=convert_b(x,p);
ys:=convert_b(y,p);
writeln('('+a+','+b+')=',xs);
writeln('('+a+','+b+')=',ys);
end.
㈨ pascal高精度加法
wikioi的都过了,望采纳
比楼上那位短多了
const max=2000;
var
sa,sb,sc:ansistring;
b:array[0..max] of integer;
a:array[0..max+1] of integer;
len,la,lb,i,p:integer;
begin
while not eof do
begin
readln(sc);
p:=pos(' ',sc);
sa:=(sc,1,p-1);
sb:=(sc,p+1,length(sc)-p);
fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),0); //数组初始化
la:=length(sa); lb:=length(sb);
for i:= la downto 1 do a[la-i+1]:=ord(sa[i])-ord('0'); //数据存储
for i:= lb downto 1 do b[lb-i+1]:=ord(sb[i])-ord('0'); //数据存储
if la>lb then len:=la else len:=lb;
for i:=1 to len do
begin
a[i+1]:=a[i+1]+(a[i]+b[i]) div 10; //计算与进位同时处理,
a[i]:=(a[i]+b[i]) mod 10;
end;
if a[len+1]>0 then len:=len+1;
for i:=len downto 1 do write(a[i]);
writeln;
end;
end.
㈩ Pascal运行时总出现variable identifier expected
var中没写ys这个变量...
在jc(ys,v1,x,b1,x1,b2);中没发现变量错误...