(共25张PPT)
集合类型作业:P188
8.1 编程序,且写出结果
定义集合st=set of 1..10
且编一个print的过程,
输出集合的元素
8.2 字母 ‘a’..‘z’
数字 ‘0’..‘9’
8.1 将集合a赋值成[1,2,3,4,5,7,9],集合b赋值成[4,5,6,7,8,10],计算c=a+b,d=a-b,e=a*b,以及a>=b的值,输出集合a,b,c,d,e及a>=b的值。
提示:为便于输出各集合的元素,可以定义一个输出集合元素的过程。
a=[1,2,3,4,5,7,9]
b=[4,5,6,7,8,10]
c=a+b=[1,2,3,4,5,6,7,8,9,10]
d=a-b=[1,2,3,9]
e=a*b=[4,5,7]
a>=b false
program ex81(input,output);
type
st=set of 1..10;
var
a, b, c, d, e : st;
procedure print(s:st);
var i:integer;
begin
for i:=1 to 10 do
if i in s
then write(i:2);
writeln
end;
begin
a:=[1..5,7,9];
b:=[4..8,10];
c:=a+b;
d:=a-b;
e:=a*b;
write('a='); print(a);
write('b='); print(b);
write('c='); print(c);
write('d='); print(d);
write('e='); print(e);
writeln('a>=b: ',a>=b)
end.
8.2 读入一串字符,以“?”结束,分别组成字母与数字两个集合,然后分别输出两个集合中的元素及元素个数。
program ex82(input,output);
var s1:set of '0'..'9';
s2:set of 'a'..'z';
s3:set of 'A'..'Z';
n1,n2:integer; ch:char;
begin
s1:=[];s2:=[];s3:=[];
n1:=0;n2:=0;
read(ch);write(ch);
while ch<>' ' do
begin
if ch in ['0'..'9']
then s1:=s1+[ch]
else if ch in ['a'..'z']
then s2:=s2+[ch]
else if ch in ['A'..'Z']
then s3:=s3+[ch];
read(ch);write(ch)
end;
writeln;
for ch:='0' to '9' do
if ch in s1
then begin
write(ch);
n1:=n1+1
end;
writeln;
writeln('n1=',n1);
for ch:='a' to 'z' do
if ch in s2
then begin
write(ch);
n2:=n2+1
end;
for ch:='A' to 'Z' do
if ch in s3
then begin
write(ch);
n2:=n2+1
end;
writeln;
writeln('n2=',n2)
end.
字符串类型格式:
TYPE
<字符串类型标识符> = string[n];
VAR
<字符串变量表>:<字符串类型标识符>;
或
VAR
<字符串变量表>:string[n];
VAR
<字符串变量表>:string[n];
字符串例子:
VAR
name : string[20];
BEGIN
name:=‘Zhang San’;
字符串运算:(连接运算)
运算符 运算名称 运算方法
+ 连接 将两个字符串连接成一个字符串
‘Turbo’ + ‘Pascal’ = ‘TurboPascal’
字符串运算:(关系运算)
‘ABC’ = ‘ABC’
‘ABC’ < > ‘abc’
‘ABC’ > ‘abc’
‘ABC’ < ‘ABc’
字符串函数
函数名 意义 结果类型 示例
concat(s1,s2,…,sn) 连接字符串 string s1:=‘123’; s2:=‘456’; s:=concat(s1,s2);
结果 s=‘123456’
copy(s,index,count) 返回字符串s中第index位置开始的长度为count的子串 string s:=‘123456’; s1:=copy(s,2,3);
结果 s=‘234’
字符串函数
函数名 意义 结果类型 示例
length( s ) 返回字符串s的长度 integer s:=‘123456’; l:=length(s);
结果 l=6
pos(subs,s) 返回子串subs在字符串s中的起始位置 integer s:=‘123.45’; i:=pos(‘.’,s);
结果 i=4
字符串过程
过程名 意义 示例
delete(s,index,count) 将字符串s中第index位置开始长度为count的子串删除 s:=‘Turbo Pascal’; delete(s,6,7);
结果 s=‘Turbo’
insert(s1,s,index) 在串s中第index位置前插入一个指定子串s1 s:=‘ Pascal’; insert(‘Turbo’,s,1);
结果
s=‘Turbo Pascal’
字符串过程
过程名 意义 示例
str(x:m:n,s) 把数值x转换成相应的字符串s,可以定义x的宽度和小数个数 i:=1234;
str(i,s);
结果 s=‘Turbo’
val(s,k,code) 在字符串s转换成相应的数值k,code为返回代码,为1表示转换成功,否则转换失败 s:=‘1234’; val(s,k,code);
结果 k=1234
例32 随机输入一个长度不超过255的字符串,使用copy函数、delete过程和insert过程将其倒置后输出。
program ch332;
var s,sub:string; k:integer;
begin
readln(s);
for k:=2 to length(s) do
begin
sub:=copy(s,k,1);
delete(s,k,1);
insert(sub,s,1)
end;
writeln(s)
end.
记录类型格式:
TYPE
<记录类型标识符> = RECORD
<域标识符表> : <类型>;
<域标识符表> : <类型>;
…
<域标识符表> : <类型>
END;
赋值
(1)直接引用
记录变量名.域名
TYPE
classmate = record
name:string[12];
sex:char;
…
end;
VAR
stud1:classmate;
BEGIN
stud1.name=‘John’;
stud1.sex:=‘M’;
赋值
(2)使用开域语句
with <记录变量名> do
语句;
with stud1 do
begin
name=‘John’;
sex:=‘M’;
…
end;
例9.1 输入全班学生的姓名及成绩,计算平均成绩,并按成绩给每个学生赋一个字母等级(高于平均成绩10分以上为A等,与平均成绩相差10分以内为B等,其余为C等)最后输出每个学生的姓名、成绩、字母等级。(记录数组)
program record1(input,output);
const n=10;
type student=record
name:string[10];
score:integer;
grade:char
end;
var s:array[1..n] of student; ave:real; i:integer;
begin
for i:=1 to n do
with s[i] do
readln(score,name);
ave:=0;
for i:=1 to n do
ave:=ave+s[i].score;
ave:=ave/n;
writeln(‘name’:10, ‘score’:10, ‘grade’:10);
for i:=1 to n do
with s[i] do
begin
if score>=ave+10
then grade:=‘A’
else if score>=ave-10
then grade:=‘B’
else grade:=‘C’;
writeln(name:10, score:10, grade:10)
end
end.
记录类型作业:P205
9.1 输入10个学生记录(每个记录包括学号、姓名、性别、年龄、成绩),组成记录数组,统计男、女生人数,计算平均年龄、平均成绩,并将低于平均成绩的学生记录输出。
(说明:s表示学生数组,student表示学生的记录类型,包括学号number(integer)、姓名name(string[10])、性别sex(char)、年龄age(integer)、成绩score(integer))
program ex91(input,output);
const n=10;
type student=record
number:integer;
name:string[20];
sex:char;
age:integer;
score:integer
end;
var s:array[1..n] of student;
ave1,ave2:real; n1,n2,i:integer;
begin
for i:=1 to n do
with s[i] do
readln(sex,number,age,score,name);
ave1:=0; ave2:=0; n1:=0; n2:=0;
for i:=1 to n do
begin
ave1:=ave1+s[i].age;
ave2:=ave2+s[i].score
end;
ave1:=ave1/n; ave2:=ave2/n;
writeln(‘ave1=’, ave1:6:2, ‘ ave2=’, ave2:6:2)
for i:=1 to n do
if s[i].sex=‘M’
then n1:=n1+1
else n2:=n2+1
writeln(‘n1=’, n1, ‘ n2=’, n2);
writeln(‘number’:10,‘name’:10,‘sex’:10,‘age’:10,‘score’:10)
for i:=1 to n do
with s[i] do
if score
then writeln(number:8,name:10,sex:10,age:10,score:10)
end.