已经两天没和大家见面了,今天我们来学习Pascal语言和算法三大风水宝地之一的数组
三大风水宝地有:
1.循环
2.数组,字符串
3.递归
我们来看看一维数组的原理:
数组的定义是:A(随意改):array[1..10000(随意改)]of longint(随意改);
一维数组就是把数存入a[1],a[2],a[3]....a[n];
二维数组同理,定义是:
a:array[1..5000,1..5000]of longint;
举个栗子
(一维数组)
输入n个正整数,把这n个数按由大到小的顺序排列。(
选择排序
)
将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序是一种较简单的方法。
【分析】
假设是十个数据
要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,……。因此,我们第一步可将第一个数与其后的各个数依次比较,若发现,比它大的,则与之交换,比较结束后,则第一个数已是最大的数(最大的泡往上冒)。同理,第二步,将第二个数与其后各个数再依次比较,又可得出次大的数。如此方法进行比较,最后一次,将第九个数与第十个数比较,以决定次大的数。于是十个数的顺序排列结束。
如对5个进行排序,这个五个数分别为8 2 9 10 5。按选择排序方法,过程如下:
初始数据 :8 2 9 10 5
第一次排序:8 2 9 10 5
9 2 8 10 5
10 2 8 9 5
10 2 8 9 5
第二次排序:10 8 2 9 5
10 9 2 8 5
10 9 2 8 5
第三次排序:10 9 8 2 5
10 9 8 2 5
第四次排序:10 9 8 5 2
对于十个数,则排序要进行9次。
答案:
var
a:array[1..10000]of integer;
i,j,t,n:integer;
begin
for i:=1 to n do
read(a[i]); //读入n个初始数据
for i:=1 to n-1 do //进行9次排序
begin
for j:=i+1 to n do //将第i个数与其后所有数比较
if a[i]<a[j] then //若有比a[i]大,则与之交换
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
end;
for i:=1 to 10 do
write(a[i],' ');
end.
字符串:
说到字符串,就不得不用一些函数了,下面的函数请诸位记一记,尤其是蓝色的字
函数和过程名
|
功 能
|
说 明
|
copy(s,m,n)
|
取s中第m个字符开始的n个字符
|
若m大于s的长度,则返回空串;否则,若m+n大于s的长度,则截断
|
length(s)
|
求s的动态的长度
|
返回值为整数
|
pos(sub,s)
|
在s中找子串sub
|
返回值为sub在s中的位置,为byte型
|
insert(sour,s,m)
|
在s的第m个字符位置处插入子串sour
|
若返回串超过255,则截断
|
delete(s,m,n)
|
删除s中第m个字符开始的n个字符串
|
若m大于s的长度,则不删除;否则,若m+n大于s的长度,则删除到结尾
|
str(x[:w[:d]],s)
|
将整数或实数x转换成字符串s
|
w 和 d是整型表达式,意义同带字宽的write语句
|
val(s,x,code)
|
将字符串S 转换成整数或实数x
|
若S中有非法字符,则code存放非法字符在S中的下标;否则,code为零。code为整型
|
upcase(ch)
|
将字母ch转换成大写字母
|
若ch不为小写字母,则不转换
|
举个栗子让诸位运用一下
正确的邮箱地址格式是“用户名@服务器名”,输入一个邮箱地址判断它是不是合法的邮箱地址。
【分析】
此题的题意很简单,在判断邮箱地址合法性上需要考虑:
1.邮箱地址字符串中是否包括字符“@”;
2.@字符不能出现在第一个位置也不能出现字符的末尾。
答案
var
p : integer;
s : string;
begin
readln(s);
p := pos('@',s);
if
(p>1) and (p<length(s)) then
writeln('ok')
else
writeln('error');
end.
谢谢大家,求关注哦!!!