FreePascal备忘录_middlesch free pascal ide

Free Pascal新增数据类型

1.整型
名称 类型 表示范围 占用字节
Int64 整数类型 -9223372036854775808 ~ 9223372036854775807=2 -1 8
Qword Int64的无符号整数类型 0 ~ 18446744073709551615=2 -1 8
Cardinal Longint(-2147483648~2147483647)的无符号长整型 0 ~ 4294967295=2 -14
Smallint 几乎等同于类型Integer(-32768~32767) -32768 ~ 32767=2 -1 2
注意:int64不是有序类型,所以不能作为for循环的循环变量,如:
var i:int64;
begin
for I:=1 to 100 do writeln(i);
end.
编译不能通过,但word类型(integer类型的无符号整数类型,0~65535)可以。
另外,直接给一个int64类型的变量赋值一个超过longint范围的整数是不合法的,例如:定义a为int64类型,有如下语句:a:=8000000000;编译就通不过。类似的,以下三条语句也通不过编译:
a:=2*4000000000;
a:=800000*10000;
a:=a*8000000000;
这是因为fp在表达式的计算过程中用来存储整数的最大默认类型为longint,而不是int64。
当表达式的中间值超过longint时,fp会用实型来储存中间值,而实型是不能直接赋给整型的。
解决方法:
分成两步赋值,先执行 a:=1;然后执行a:=a*800000*10000;
需要强调的是,第二步赋值中一定要把8000000000拆成若干个不超过longint型的整数的和或乘积。
如嫌上述方法麻烦,还可以利用截尾函数trunc,代码如下:
var
tmp:double;
a:int64;
begin
tmp:=8000000000;
a:=trunc(tmp);
end.

2.实型
FP中的双精度实数类型Double,比TP中的Real精确度更高。

名称 类型 表示范围 占用字节 精度
Real 实数类型 3.4e38处理器是16位的,则占4个字节,即Single类型;如果是32位的处理器,则占8个字节,此时范围和精度都与double一样7-8位有效数字
Double 实数类型 1.7e308 8 15-16位有效数字
extended 实数类型 1.1e4932 10 19-20位有效数字

3.允许用户按以下方式定义枚举类型:
Type
EnumerateType=(Int,Long,Double:=100,Bool,……);
这是类似于C的定义方式,定义使得Double的值是100,而并非2;Bool的值为101,而并非3……以此类推。但Int和Long的值仍为0和1。

free pascal 字符串函数

1. 连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn.
例:concat(‘11’,’aa’)=’11aa’;
2. 求子串。 Copy(s,I,L) 从字符串s中截取第I个字符开始后的长度为l的子串。
例:copy(‘abdag’,2,3)=’bda’
3. 删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。
例:s:=’abcde’;delete(s,2,3);结果s:=’ae’
4. 插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置
例:s:=abc;insert(‘12’,s,2);结果s:=’a12bc’
5. 求字符串长度 length(s) 例:length(‘12abc’)=5
6. 搜索子串的位置 pos(s1,s2) 如果s1是s2的子串,则返回s1的第一个字符在s2中的位置,若不是子串,则返回0.
例:pos(‘ab’,’12abcd’)=3
FreePascal备忘录_middlesch free pascal ide
7. 字符的大写转换。Upcase(ch) 求字符ch的大写体。
例:upcase(‘a’)=’A’
8. 数值转换为数串。 过程 Str(x,s) 把数值x化为数串s.
例:str(12345,s); 结果s=’12345’
9. 数串转换为数值。 过程val(s,x,I) 把数串s转化为数值x,如果成功则I=0,不成功则I为无效字符的序数
例:val(‘1234’,x,I);结果 x:=1234


Free Pascal的新增功能

1. 函数可以返回复杂的类型,比如记录和数组。如:
type arrtype=array[1..100] of longint;{必须要先定义数组基类型,否则红色部分不合法}
var i,j,k,n:longint;
a:arrtype;

sort(a:arrtype;n:longint):arrtype;
var i,j,k:longint;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a>a[j] then begin
k:=a;
a:=a[j];
a[j]:=k;
end;
sort:=a;
end;

begin
read(n);
for i:=1 to n do read(a);
a:=sort(a,n);
for i:=1 to n do write(a,' ');
writeln;
end.

2.在函数中,函数的返回值可以作为一个变量来处理。比如:
a : longint;
begin
a:=12;
while a>4 do begin
{...}
end;
end;
这个例子在Turbo Pascal中,a>4会被认为是函数的递归调用,但是在FreePascal中会认为a只是一个变量。如果想在Free Pascal中实现递归调用,就要写成下面的形式:
a : longint;
begin
a:=12;
if a()>4 then { 递归调用 }
begin
{...}
end;
end;

3.exit可以接受一个参数作为函数的返回值。比如:
a : longint;
begin
a:=12;
if a>4 then begin
exit(a*67); { 函数的返回值就是a*67 }
end;
end;

4.FreePascal支持函数重载。可以用相同的名字定义不同的函数,只要这些函数的参数不同,就是不同的函数。比如:
procedure DoSomething (a : longint);
begin
{...}
end;
procedure DoSomething (a : real);
begin
{...}
end;
可以使用不同的参数类型longint或者real来调用不同的DoSomething过程。
由于这个功能,函数的提前声明必须有完整的参数声明:
procedure x (v : longint); forward;
{...}

procedure x;{这里定义的过程x重载了前面声明的过程x。因此的两个x是不同的}
begin
{...}
end;

5.Free Pascal容许运算符重载。比如,可以自己为矩阵运算定义一个“+”运算。
格式: operator 运算符 (运算数) 结果
例: operator +(x:datatype; y:datatype) z:datatype;
begin
……
end;

6. TurboPascal中定义了十六进制数的表示方法,即在十六进制数前添加符号$,如:
X:=$F0A;
Writeln(‘X=’,x);
输出结果是X=3850。
这种进制数的表述给编程者带来很多便捷,而FreePascal扩容了此优点,除十六进制数外,二进制数也有类似的表述(添加符号%),如:
X:=%101;
Writeln(‘X=’,x);
输出结果是X=5。

7.TurboPascal中注释部分可用(*comment*)或者{comment}表示,如:
Var I:integer;
Begin
(*for I:=1 to 100 do
write(i);*)
writeln(‘$’);
End.
或者:
Var I:integer;
Begin
{for I:=1 to 100 do
write(i)}
writeln(‘$’);
End.
Free Pascal除前面两种表述方法外,//comment也可以,但其中comment必须在同一行内,如:
将3、4行都括为注释部分:
Var I:integer;
Begin
//for I:=1 to 100 do
// write(i);
writeln(‘$’);
End.
只将第3行括为注释部分:
Var I:integer;
Begin
//for I:=1 to 100 do
write(i);
writeln(‘$’);
End.

8.在Free Pascal中,编译时使用 Fpc –Op3 *.pas (针对PⅡ以上的处理器进行了优化)。但实际比赛一般没有什么用(区别不大)。

9.利用指针实现动态开辟数组
var a:^longint;
n,i:longint;
begin
readln(n);
getmem(a,sizeof(longint)*n);
for I:=1 to n do a[I]:=I;
freemem(a);
end.
实际很少用,因为一般NOIP的比赛对空间没有限制,在程序开始时总是把数组定义的足够大。

10.强制类型转换
格式:数据类型(数据)
例如:var m:longint;
n:extended;
begin
m:=123456;
n:=extended(m);
writeln(n:0:6);
end.
注意:并不是任意两个基本数据类型之间都能进行强制转换。一般来说,fp允许两个整型之间的强制转换(实际意义不大,因为在赋值时fp会自动进行整型之间的类型转换),但需注意数据范围,例如,把p定义为integer,语句p:=integer(123456)虽然编译可以通过,但执行过程中p会溢出。fp也允许整型转换为实型,但有可能带来精度误差。至于实型转整型,需要满足整型所占字节数不小于实型,如double占8个字节,因此只能转换为int64。但实型转换为整型后,结果往往是错误的。把字符转换成整型,得到的是字符的Ascii码值,例如,writeln(longint('a'))输出的结果是97。

11.乘方x^y可以表示成x**y。
注意:
A、在x是实数但y是整数的时候是不能这样表示,其他都可以,但精度可能不符合要求。
B、x**y的结果如果是整型,不能超过longint的范围;如果是实型,不能超过extended的范围。
一般还是用换底公式(exp(y*ln(x)))来计算x^y。

12.布尔表达式不一定要全部进行计算。只要最终结果已经能够确定,FP就不再计算其它还没有计算的部分。比如布尔表达式exp1 ANDexp2 ANDexp3,如果已知exp1的结果是false,那么整个表达式的结果肯定是false,FP对exp2和exp3就不会再进行计算。

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/72841.html

更多阅读

硬盘跳线设置图解2 ide硬盘跳线设置图解

“Master w/Slave present”(表示当前盘为主盘,同时存在从盘)、“Single or Master”(表示设置硬盘为主盘或该通道上只单独连接一个硬盘,即该硬盘独占一个IDE通道,这个通道上不能有从盘)。(3)Maxtor(迈拓)硬盘图6Maxtor硬盘的跳线设置图示一般可

设计模式之备忘录模式Memento _阿- 备忘录模式 应用场景

简述备忘录模式的用意是在不破坏封装性的条件下,将对象的状态存储起来,从而在未来合适的时候将对象的状态恢复到从前(某个检查点)。角色1.备忘录(Memento)角色1)将发起人对象的内容状态存储起来。备忘录可以根据发起人对象的判断来决

声明:《FreePascal备忘录_middlesch free pascal ide》为网友酒畅饮分享!如侵犯到您的合法权益请联系我们删除