摘要:文章分析總結(jié)了Visual Basic程序設(shè)計(jì)中Tab函數(shù)在打印圖形時(shí),各字符位置的定位方法和技巧,利用Tab函數(shù)的定位特點(diǎn)打印輸出各種圖形。
關(guān)鍵詞:Visual Basic程序設(shè)計(jì);Tab函數(shù);定位函數(shù);雙重循環(huán);定位
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 15-0000-02
Visual Basic程序設(shè)計(jì)中,在對(duì)象上輸出信息的常用方法是Print方法,其語(yǔ)法形式為:[對(duì)象.]Print[{Spc(n)|Tab(n)}][表達(dá)式列表][;|,]。其中Spc(n)與Tab(n)是Print方法中的定位函數(shù):Spc(n)用于在輸入時(shí)插入n個(gè)空格;Tab(n)用于在輸出表達(dá)式列表前向右移動(dòng)n列。Spc函數(shù)與Tab函數(shù)的作用類(lèi)似,但是Tab函數(shù)從對(duì)象的左端開(kāi)始計(jì)數(shù),而Spc函數(shù)表示兩個(gè)輸出項(xiàng)之間的間隔。我們?cè)诰幊讨杏龅綀D形打印的問(wèn)題時(shí),一般采用循環(huán)控制每行打印的字符個(gè)數(shù),關(guān)于字符位置的確定,就可以用Tab函數(shù)進(jìn)行定位。
1 打印對(duì)齊圖形
例:打印5行5列的“*“圖形,且每行的每個(gè)“*”之間相隔兩個(gè)打印列,如圖:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
對(duì)齊圖形
我們可以利用雙重循環(huán),其中外循環(huán)控制打印的行數(shù),內(nèi)循環(huán)控制每行打印的字符個(gè)數(shù)。為了保證每個(gè)“*“之間相隔2個(gè)打印列,我們就可以利用Tab(n)函數(shù),使n=2*(內(nèi)層循環(huán)變量-1)+1。代碼如下:
Private Sub Form_Click()
Dim i%,j%
For i = 1 To 5 '打印五行
For j = 1 To 5 '每一行打印5個(gè)\"*\"
Print Tab(2 * (j - 1) + 1); \"*\";
Next j
Next i
End Sub
2 打印上三角圖形
例:打印5行5列“*”遞減圖形,且每行每個(gè)“*”之間相隔2個(gè)打印列,如圖
* * * * * * * * * *
* * * * * * * *
* * * * * *
* * * *
* *
左對(duì)齊上三角 右對(duì)齊上三角
上三角圖形與對(duì)齊圖形相比,上三角圖形每一行圖形比下一行多一個(gè)“*”,所以我們只要把內(nèi)層循環(huán)控制的打印的字符個(gè)數(shù)進(jìn)行遞減,便可以得到上三角圖形:每行打印位置定位在左端第一列,“*”個(gè)數(shù)逐行遞減,便得到左對(duì)齊上三角圖形;每行打印位置的定位比上一行多一列,“*”個(gè)數(shù)逐行遞減,便得到右對(duì)齊上三角圖形。代碼如下
左對(duì)齊上三角:
Private Sub Form_Click()
Dim i%, j%
For i = 1 To 5
For j = 1 To 5 - i + 1 '每行打印位置定位在左端第一列,“*”個(gè)數(shù)逐行遞減
Print Tab(2 * (j - 1) + 1); \"*\";
Next j
Next i
End Sub
右對(duì)齊上三角:
Private Sub Form_Click()
Dim i%, j%
For i = 1 To 5
For j = i To 5 '每行打印位置的定位比上一行多一列
Print Tab(2 * (j - 1) + 1); \"*\";
Next j
Next i
End Sub
3 打印下三角圖形
例:打印5行5列“*”遞增圖形,且每行每個(gè)“*”之間相隔2個(gè)打印列,如圖
* *
* * * *
* * * * * *
* * * * * * * *
* * * * * * * * * *
左對(duì)齊下三角 右對(duì)齊下三角
下三角圖形與對(duì)齊圖形相比,上三角圖形每一行圖形比下一行少一個(gè)“*”,所以我們只要把內(nèi)層循環(huán)控制的打印的字符個(gè)數(shù)進(jìn)行遞增,便可以得到上三角圖形:每行打印位置定位在左端第一列,“*”個(gè)數(shù)逐行遞增,便得到左對(duì)齊上三角圖形;每行打印位置的定位比上一行少一列,“*”個(gè)數(shù)逐行遞增,便得到右對(duì)齊上三角圖形。代碼如下
左對(duì)齊下三角:
Private Sub Form_Click()
Dim i%, j%
For i = 1 To 5
For j = 1 To i '每行打印位置定位在左端第一列,“*”個(gè)數(shù)逐行遞增
Print Tab(2 * (j - 1) + 1); \"*\";
Next j
Next i
End Sub
右對(duì)齊下三角:
Private Sub Form_Click()
Dim i%, j%
For i = 5 To 1 Step -1 '每行打印位置的定位比上一行少一列
For j = i To 5 '\"*\"個(gè)數(shù)逐行遞增'
Print Tab(2 * (j - 1) + 1); \"*\";
Next j
Next i
End Sub
4 打印中間對(duì)齊圖形
例:打印九行五列中間對(duì)稱(chēng)圖形,且每行每個(gè)“*”之間相隔2個(gè)打印列,如圖:
* *
* * * *
* * * * * *
* * * * * * * *
* * * * * * * * * *
* * * * * * * *
* * * * * *
* * * *
* *
左對(duì)齊中間對(duì)稱(chēng)圖形 右對(duì)齊中間對(duì)稱(chēng)圖形
根據(jù)圖形分析,上三角與下三角圖形的結(jié)合便可以構(gòu)成中間對(duì)稱(chēng)圖形:左對(duì)齊下三角與左對(duì)齊上三角組合,構(gòu)成左對(duì)齊中間對(duì)稱(chēng)圖形;右對(duì)齊下三角與右對(duì)齊上三角組合,構(gòu)成右對(duì)齊中間對(duì)稱(chēng)圖形。在代碼中,欲用循環(huán)表示出上三角與下三角圖形結(jié)合的特點(diǎn),可以使外層循環(huán)變量的初值與終值取一組對(duì)稱(chēng)的相反數(shù)(-4 to 4 表示打印九行),用內(nèi)層循環(huán)變量控制上三角到下三角的過(guò)渡。代碼如下:
左對(duì)齊中間對(duì)稱(chēng)圖形:
Private Sub Form_Click()
Dim i%, j%
For i = -4 To 4 '左對(duì)齊下三角與左對(duì)齊上三角組合
For j = 1 To 5 - Abs(i)
Print Tab(2 * j + 1); \"*\"; '每行定位左邊第一行
Next j
Next i
End Sub
右對(duì)齊中間對(duì)稱(chēng)圖形:
Private Sub Form_Click()
Dim i%, j%
For i = -4 To 4 '右對(duì)齊下三角與右對(duì)齊上三角組合
For j = 1 To 5 - Abs(i)
Print Tab(2 * (Abs(i) + j)); \"*\"; '每行定位右對(duì)齊
Next j
Next i
End Sub
在上述代碼中,還利用了Tab(n)函數(shù)特有的定位特點(diǎn):當(dāng)所給定位參數(shù)n的值小于當(dāng)前行的打印位置值時(shí),要轉(zhuǎn)到下一行的第n列打印輸出對(duì)象。因此,雖然上述例題中的圖形要求分多行打印輸出,但是代碼中雙重循環(huán)的兩個(gè)循環(huán)結(jié)束語(yǔ)句之間并沒(méi)有添加空Print語(yǔ)句進(jìn)行轉(zhuǎn)行。
綜合以上分析,Visual Basic程序設(shè)計(jì)中打印輸出任何一種圖形,應(yīng)先觀察圖形中每一行首字符位置的變化趨勢(shì),然后利用循環(huán)結(jié)構(gòu)與Tab(n)函數(shù)的結(jié)合,把Tab(n)函數(shù)置于循環(huán)之中,對(duì)圖形中的各字符進(jìn)行精準(zhǔn)定位,便能打印出準(zhǔn)確的圖形。
參考文獻(xiàn):
[1]吳鳳翔.Visual Basic 程序設(shè)計(jì)教程[M].北京:中國(guó)林業(yè)出版社,2002,11
[2]龔沛增.Visual Basic 程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2004
[3]譚浩強(qiáng).Visual BASIC程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2000
[4]劉新民.Visual Basic 6.0程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2004
[5]羅朝盛.Visual Basic 程序設(shè)計(jì)教程[M].北京:人民郵電出版社,2005
[6]劉炳文,許蔓舒.Visual Basic 程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2000