第33周星期五小結及Delphi集合用法

2021-09-06 05:46:03 字數 4170 閱讀 3229

delphi中的booltostr,把boolean變數轉換為字串

//以前不知道 booltostr 還有乙個預設引數

procedure tform1.button1click(sender: tobject);

var

b: boolean;

s: string;

begin

b := true;

s := booltostr(b);

showmessage(s);

b := false;

s := booltostr(b);

showmessage(s);

b := true;

s := booltostr(b, true);

showmessage(s);

b := false;

s := booltostr(b, true);

showmessage(s);

end;

delphi——集合的使用

集合是p a s c a l特有的資料型別,在visual basic、c或c + +都沒有(雖然c++ builder提供了一種模板類稱為集合,它模仿p a s c a l集合的行為)。集合用一種有效的手段來表示一組有序數、字元和列舉值。宣告乙個集合用關鍵字set of,並在其後跟上有序型別或乙個集合可能值的有限子集。示例如下:

type

tcharset=set of char; // 可能的值:# 0 - # 2 5 5

tenum = ( monday, tuesday, wednesday, thursday, friday ) ;

tenumset=set of tenum; // 包含了t e n u m值的任何組合

tsubrangeset=set of 1..10; // 可能的值:1 - 1 0

talphaset=set of 'a'..'z'; // 可能的值:' a ' - ' z '

注意,乙個集合最多只能有2 5 5個元素。另外,只有有序的型別才能跟關鍵字 set of,因此下列的

**是非法的:

t y p e

tintset=set of integer; // 非法:太多的元素

tstrset=set of string; // 非法:不是有序的型別

集合在內部以位的形式儲存它的元素,這使得在速度和記憶體利用上更有效。集合如果少於 3 2個元

素,它就儲存在c p u的暫存器中,這樣效率就更高了,為了用集合型別得到更高的效率。記住,集合

的基本型別的元素數目要小於3 2。

一、 使用集合

當使用集合的元素時,使用方括號。下面**表明如何使用集合型別的變數並給它賦值。

1.直接在所在過程中var中定義:

var

subrangeset:set of 1..10;(可能是1到10中任何數)

begin

subrangeset:=[1,2,4..6];

end;

2.在type中定義:

type

tcharset=set of char;

var

charset:tcharset;

begin

charset:=['a'..'j','a','m'];

end;

二、集合的值

1、集合的值放在一對方括號中,中間各元素之間用逗號隔開。如:[1,2,5] 和 ['a','e','i'] 都是集合。

2、在集合中可以沒有任何元素,這樣的集合稱為空集。 空集

3、在集合中,如果元素的值是連續的,則可用子界型的表示方法表示。例如:[1,2,3,4,5, 10,15] 可以表示成: [1..5,10,15]  

4、集合的值與方括號內元素出現的次序無關。例如[1,5,8 ]和[5,1,8]的值相等。

5、在集合中同一元素的重複出現對集合的值沒有影響。例如,[1,8,5,1,8]與[1,5,8]的值相等。

6、每個元素可用基型別所允許的表示式來表示。如 [1,1+2,4]、[succ(ch)]。

三、集合的運算

集合型別變數不能進行算術運算,集合是無序的,不能使用ord、pred、succ等函式。

1、賦值運算

只能通過賦值語句給集合變數賦值,不能通過讀語句賦值,也不能通過寫語句直接輸出集合變數的值。如:

集合變數賦值: c:=['2']; i:=[5]; w:=;

集合變數賦子界值: c:=['a'..'z']; i:=[1..7];

集合變數賦列舉值: c:=['a','b','d','m']; i:=[2,4,6,8,10];

2、集合的並、交、差運算

可以對集合進行並(+)、交(*)、差 (-)三種運算,每種運算只有乙個運算子、兩個運算物件,運算結果仍為集合。注意它們與算術運算的區別。

① 並運算 (關係代數運算子∪)

a,b為兩個集合,由集合a中的元素加上集合b中的與a不重複的所有元素組成的集合,稱為集合a和b的並。即a+b,如:

[x,y,z]+[x] 為 [x,y,z]

[1]+[4] 為[1,4]

用+、-運算子或include( )和exclude( )過程,能對乙個集合變數增刪元素:

include(charset, 'a');/ /在集合中增加'a' ;

charset : = charset+['b'] ;/ /在集合中增加'b' ;

exclude(charset, 'x');/ /在集合中刪除'x' ;

charset:=charset-['y', 'z'];/ /在集合中刪除'y'和'z' ;

提示 盡可能地用include()和exclude()來增刪元素,盡可能地少用+、-運算子。因為include()和 exclude()僅需要一條機器指令,而+和-需要13+6n(n是集合的按位的長度)條機器指令。

② 交運算 (關係代數運算子∩)

a,b為兩個集合,由既屬於集合a中的元素又屬於集合b中的所有元素組成的集合,稱為集合a和b的交。即a*b,如:

[x,y,z]*[x] 為 [x]

[x,y,z]* 為

③差運算 (關係代數運算子-)

a,b為兩個集合,由集合a中的元素除去集合b中與a相同的元素組成的集合,稱為集合a和b的差。即ab,如:

[x,y,z]-[x] 為 [y,z ]

[x,y,z]- 為 [x,y,z]

3、集合的關係運算: 運算結果為布林值

關係運算子: = 相等、<> 不相等、

>= 包含,表示前者蘊含後者,相當於集合論中的 formulas>[img]mk:@msitstore:c:\documents%20and%20settings\administrator\桌面\pascal入門.chm::/setof.1.gif[/img]。

<= 包含於,表示前者蘊含於後者,相當於集合論中的 [img]mk:@msitstore:c:\documents%20and%20settings\administrator\桌面\pascal入門.chm::/setof.2.gif[/img]。

例如:[a,b,c]=[b,c,a] 為true,元素個數相同,內容相同,不管排列順序如何。 [a,b,c]>=[a] 為true;[a,b]<=[a,b,c] 為true。

in運算:in的右邊為集合,左邊為與集合基型別相同的表示式,為布林值。in測試乙個元素是否在集合中。相當於集合論中的∈。它們都是二目運算,且前4個運算子的運算物件都是相容的集合型別。例如:a in[b,c] 為false。

charset中是否有字母's':

if 's' in charset then

/ /繼續執行

下面的**判斷在enumset中是否沒有monday :

if not (monday in enumset) then

/ /繼續執行

設集合a:=[1..10]; x 為integer,如x在集合a中即刪除a中的元素x,否則把元素x新增到集合a中。程式段如下: if x in a then a:=a-[x] else a:=a+[x]

集合沒有的直接運算:集合中元素的個數以及列印輸出集合中每個元素。

鬱悶的星期五

今天真是鬱悶,昨夜同學電腦出問題,讓我幫忙。於是整個上午都在幫同學弄電腦,好像弄不好誓不罷休似的,結果十二點多的時候終於柳暗花明又一村了。呵呵。但是今天下午,我正在辦公室好好學習天天向上時,來了兩個女生。讓我幫忙看電腦,怎麼辦哪?人來總不好意思拒絕吧,於是乎又只能continue。乙個弄好後,沒想到...

2014 3 7 星期五 困

昨日進度 人工智慧 上課前作業完成,上課中複習離散 聽課 中 基本完成,要複習一下 體育 中午 完成數電作業 中上 數電 複習 聽課 優 基本複習一遍,完成任務 無課 去圖書館 晚飯在旁邊吃 還書 借書 複習 中下 太睏了,結果書看得有點少,書還了沒借 毛澤 看測控 結束那本書 下 上課是看電影 寢...

黑色星期五

在西方,星期五和數字 13都代表著壞運氣,兩個不幸的個體最後結合成超級不幸的一天。所以,不管哪個月的十三日又恰逢星期五就叫 黑色星期五 要求 輸入年份,輸出是 判斷該年是否包含黑色星期五,如包含,給出具體日期 includeint main int b 13 閏年時 int n 0,i,year s...