8 : Viết chương cho phép nhập vào một mảng A gồm 7 phần tử, thực hiện các yêu cầu sau Giao diện tự thiết kế cho phù hợp, có thể tham khảo giao diện bên dưới:a.. Với yêu cầu giao diện như
Trang 2'nguoc lai n #0 thi lam buoc tinh tiep'
'co the dung 2 vong lap for voi buoc nhay la 2 (step 2) de tinh' 'vong for nay de tinh tong cac so le tu 1 den n'
Trang 33 : Viết chương trình nhập một số nguyên dương có 3 chữ số, viết ra màn hình dạng: trăm, chục, đơn vị Ví dụ, nhập vào số : 246, kết quả cho là : 2 Trăm 4 chục 6 Đơn vị Giao diện
tr = n \ 100 'lay gia tri chia nguyen cua n cho 100 ta duoc hang tram'
ch = (n - tr * 100) \ 10 'n-tr*100 ta duoc 2 chu so cuoi, lay 2 so do chi nguyen cho 10 taduoc hang chuc'
dv = n - tr * 100 - ch * 10
Else
'dua ra thong bao so n khong phai la so co 3 chu so bang msgbox'
MsgBox ("so " & Str(n) & " khong phai la so co 3 chu so" & vbCrLf & "ban hay nhap lai")
Trang 4'kiem tra so a, so 1 khong la so ng.to, 2 la so ng.to, so nguyen to la so chi chia het cho 1 va chinh no'
Trang 5Dim max As Integer
a = Val(txt1.Text)
b = Val(txt2.Text)
c = Val(txt3.Text)
max = a
'kiem tra max da la so lon nhat chua'
If b > max Then max = b
If c > max Then max = c
Trang 7Private Sub Command2_Click()
'tim phan so toi gian'
txtkq.Text = Str(a / i) & "/" & Str(b / i)End Sub
Private Sub Command3_Click()
Trang 88 : Viết chương cho phép nhập vào một mảng A gồm 7 phần tử, thực hiện các yêu cầu sau (Giao diện tự thiết kế cho phù hợp, có thể tham khảo giao diện bên dưới):
a Tính tổng mảng
b Tính giá trị lớn nhất
c Tính giá trị nhỏ nhất
d Đếm số lần xuất hiện của x (với x nhập từ bàn phím)
Dim A(4) As Integer
Dim x As Double
Private Sub Nhapmang()
'nhap mang, lay tu mang da nhap vao cac o nho'
Private Function tongmang() As Double
'tinh tong mang'
Private Function maxmang() As Double
'tim gia tri lon nhat cua mang'
Dim i As Integer
Dim max As Double
Trang 9Private Function minmang() As Double
'tim gia tri nho nhat cua mang'
Private Function solan() As Double
'dem so lan xuat hien cu so nhap tu ban phim'
Private Sub Chkpt_Click(Index As Integer)
'neu click vao o dem thi xuat hien mot o de nhap so can dem vao'
If (Index = 3) And (Chkpt(3).Value = 1) Then x = InputBox("x = ", "")End Sub
Trang 10Private Sub Cmdtinh_Click()
'xuat ket qua ra msgbox'
Private Sub cmdgiam_Click()
Dim a(6) As Integer
Trang 12'khai bao bien chung cho toan bo chung trinh'
Dim a(1 To 100) As Integer
Dim i As Integer
Dim n As Integer
Dim j As Integer
Trang 13Private Sub cmdkt_Click()
'kiem tra tinh doi xung'
For i = 1 To n
If a(i) = a(n + 1 - i) Then
lblkq.Caption = " mang da nhap la doi xung"
Dim i As Integer
Trang 14n = InputBox("nhap so phan tu cua mang: ", "nhap N")
'nhap cac phan tu cua mang'
Loop Until a(i) >= a(i + 1) Or i = n ' lap den khi nao dieu kien nay dung thi dung lai'
If i = n Then ' khi i = n thi vong lap dung lai, va dieu kien ten la dung => a(i)< a(i+1)'
kq = "mang da nhap la day tang"
Else
i = 1
Trang 15Do While a(i) > a(i + 1) And i < n 'lap khi dieu kien nay dung, va dung lai khi dieu kien nay sai'
i = i + 1
Loop
If i = n Then 'khi i = n thi dieu kien tren la sai va so a(i) do la cuoi cung => a(i) > a(i + 1), tuc la day giam'
kq = "mang da nhap la giam"
Else 'nguoc lai voi 2 truong hop tren'
kq = "mang da nhap la khong tang cung khong giam"
Trang 16If Right(a, 7) = " pascal" Then
Trang 17If b = "0" Then 'so 0 la ki tu so'
'in kq ra hop thong bao msgbox'
MsgBox ("trong cau da nhap co: " & Str(dem) & " ki tu so" & vbCrLf & "tong cac ki tu
so trong cau la: " & Str(t))
Dim hoa As Integer
Dim thuong As Integer
Trang 18có Giao diện tự thiết kế cho phù hợp.
Private Sub cmdtim_Click()
'kiem tra cau da nhap co tu em hay khong'
If Left(a, 3) = "em " Then
Trang 19For i = 2 To Len(a)
If Mid(a, i, 4) = " em " Then t = t + 1
Next i
If t = 0 Then MsgBox ("cau da nhap khong co tu EM, ban hay nhap lai")
'dung ham tim kiem va thay the relace(a, s1, s1) tim trong chuoi a co chuoi s1 thi thay tat
Trang 20Loop Until Mid(a, i, 1) = " "
b = b & " " & Left(a, i - 1)
a In mảng theo thứ tự ngược lại với thứ tự đã nhập
b In ra màn hình các giá trị nguyên dương chia hết cho 2
c Tìm và in ra các phần tử lớn nhất và nhỏ nhất của mảng
d Tìm các số nguyên tố trong khoảng từ min tới max
e Tính max!
f Tìm ucln và bcnn của min và max
Dim a(1 To 10) As Integer
Trang 21Private Sub cmdnhap_Click()
Dim max As Integer
Dim min As Integer
Trang 22If a(i) > 0 And a(i) Mod 2 = 0 Then
m = m & " " & Str(a(i))
Trang 23If a(i) < min Then min = a(i) Next i
Trang 24'dua ket qua ra man hinh'
MsgBox ("mang nguoc voi mang da cho: " & n & vbCrLf & "cac so nguyen chi het cho2: " & m & vbCrLf & "max la: " & Str(max)) & vbCrLf & "min la: " & Str(min) & vbCrLf
& "cac so nguyen to la: " & so & vbCrLf & "max! la: " & Str(t) & vbCrLf & "uoc chung lon nhat la: " & Str(uc) & vbCrLf & "boi chung nho nhat la: " & Str(bc)
End Sub
Trang 25Bài 19 : Viết chương trình giải phương trình bậc 2: ax2 + bx + c =0 Với yêu cầu giao diện như sau
- Cho phép nhập trực tiếp các giá trị a, b, c
- Cho phép thay đổi giá trị a, b, c (nguyên) bằng các thanh cuộn
- In kết quả giải tương ứng với tất cả các trường hợp
Private Sub Cmdgiai_Click()
'kiem tra cac he so a,b,c
If a = 0 And b = 0 And c = 0 Then
kl = "p.tr có vô số nghiệm"
ElseIf a = 0 And b = 0 And c <> 0 Then
kl = "p.tr vô nghiệm"
ElseIf a = o And b <> 0 Then 'neu a=0 thi ta co phuong trinh bac nhat
kl = "p.tr có nghiệm duy nhất"
Trang 26d = Val(b * b - 4 * a * c) 'tinh delta txtd.Text = d
'kiem tra dieu kien cua delta
Private Sub Cmdend_Click()
End 'cau lenh cho nut ket thuc
End Sub
Private Sub Command1_Click()
'cau lech cho nut nhap lai
Trang 27Private Sub txta_Change()
' kiem tra xem a co phai la so khong, neu khong phai thi thong bao loi
If Not IsNumeric(txta.Text) Then
MsgBox ("ban phai nhap vao mot so")
txta.Text = 0
txta.SetFocus
End If
End Sub
Private Sub txtb_Change()
'kiem tra b cho phai la so khong, neu khong phai thi thong bao loi
If Not IsNumeric(txtb.Text) Then
MsgBox ("ban phai nhap vao mot so, hay nhap lai")
Trang 28'kiem tra xem c co phai la so khong, neu khong phai thi thong bao loi
If Not IsNumeric(txtc.Text) Then
MsgBox ("ban phai nhap vao mot so")
txtc.Text = 0
txtc.SetFocus
End If
End Sub
Private Sub vsla_Change()
txta.Text = vsla.Value 'lay gia tri cho a tu thanh cuon
End Sub
Private Sub vslb_Change()
txtb.Text = vslb.Value 'lay gia tri cho b tu thanh cuon
End Sub
Private Sub vslc_Change()
txtc.Text = vslc.Value 'lay gia tri cho c tu thanh cuon
End Sub
21 : Viết chương trình nhập vào 2 số nguyên a, b, Giao diện tự thiết kế cho phù hợp :
a Tính tổng các số trong khoảng từ a tới b
b Tính tổng các số lẻ trong khoảng từ a tới b
c Tính tổng các số chẵn trong khoảng từ a tới b
Private Sub cmdtinh_Click()
Trang 29MsgBox ("tong cac so tu " & Str(k) & " den " & Str(j) & " la: " & Str(t) & vbCrLf &
"tong cac so chan tu " & Str(k) & " den " & Str(j) & " la: " & Str(ch) & vbCrLf & "tong cac
so le tu " & Str(k) & " den " & Str(j) & " la: " & Str(le))
Trang 30
End Sub
Private Sub Form_Load()
End Sub
Câu 22: Viết chương trình phân tích một số nguyên dương nhập vào ra các thừa số nguyên
tố của nó Giao diện tự thiết kế cho phù hợp
Private Sub cmdphantich_Click()
Dim i As Long, j As Long, n As Long, s As String, u As String
Trang 31Private Sub Label1_Click()
End Sub
Private Sub txtnhap_Change()
'kiem tra nhap vao co phai la so duong hay khong
If IsNumeric(txtnhap.Text) = flase Then
MsgBox ("ban phai nhap vao so duong' ban hay nhap lai")
txtnhap.Text = 1
txtnhap.SetFocus
ElseIf Val(txtnhap.Text) <= 0 Then
MsgBox ("ban phai nhap va so duong")
Trang 32Loop Until a = 0
kq = ""
'dao nguoc tap hop cac so du
For i = Len(t) To 1 Step -1
Trang 33Bài 1 : Viết chương trình tính tổng T = 1 + 2 + … + N, với N là số nguyên dương, nếu N=0 thì T=0 Giao diện tự thiết kế cho phù hợp.
Trang 34Private Sub CmdTinh_Click()
Dim nghin As Integer
Dim tram As Integer
Dim chuc As Integer
Dim dv As Integer
Dim n As Integer
n = Val(TxtN.Text)
Trang 35nghin = n / 1000
tram = (n - nghin * 1000) / 100
chuc = (n - nghin * 1000 - tram * 100) / 10
dv = (n - nghin * 1000 - tram * 100 - chuc * 10)
lblketqua.Caption = nghin & "nghin" & tram & "tram" & chuc & "chuc" & dv & "don vi"End Sub
Bài 4: Viết chương trình cho phép nhập vào một số và kiểm tra số đó có phải là số nguyên tố hay không Giao diện tự thiết kế cho phù hợp.
Trang 36Private Sub cmdTimmax_Click()Dim A As Double
Trang 39Private Sub Command3_Click()
If MsgBox("muon thoat khong ?", vbYesNo, "thong bao") = vbYes Then
End
End If
End Sub
Bài 8 :Viết chương trình cho phép nhập vào một mảng n phần tử và xắp xếp mảng A
đó theo thứ tự tăng dần , giảm dần Giao diện tự thiết kế cho phù hợp
Private Sub Command1_Click()
Dim test1() As Integer
For i = 0 To 5
Trang 41Vd: Line (-5,5)-(5,-5) , qbcolor(3)
Vẽ trực tiếp từ điểm vẽ trước
Line-(x,y), mã màu
Vẽ hình hộp
Line (x1,y1)-(x2,y2), mã màu, B
Vẽ hình hộp tô đặc bên trong
Line (x1,y1)-(x2,y2),mã màu, BF
Trang 42End sub
Private Sub VSCroll1_Change( )
Text1=Vscro111.Value
Picture1.Backcolor=RGB(Text 1,Text2,Text3)End Sub
Private Sub VSCroll2_Change( )
Text2=Vscro112.Value
Picture1.Backcolor=RGB(Text 1,Text2,Text3)End Sub
Private Sub VSCroll3_Change( )
Text3=Vscro113.Value
Picture1.Backcolor=RGB(Text 1,Text2,Text3)End Sub
Vẽ đường thẳng với 3 đường
Private Sub Command_Click ( )
Dim soA As Single
Dim soB As Single
Dim soC As Single
Picture1.Scale (-110,110)-(110,-100)
Picture1.Line (-105,0)-(105,0), QBColor(4)Picture1.Line(-0,105)-(0.-105) ,QBColor(4)Picture1.Line(105,0)-(100,5) ,QBColor(4)Picture1.Line(105,0)-(100,-5) ,QBColor(4)Picture1.Line(0,105)-(5,100) ,QBColor(4)Picture1.Line(0,105)-(-5,100) ,QBColor(4)
Trang 43For x=-10 to 10
Picture1.Line(-100,x*10)-(100,x*10), QBColor(4)Picture1.Line(x*10,-100)-(x*10,100), QBColor(4)Next
Trang 44Picture1.Pset ( x,y),QBColor (1)Next
For j= -3,14 to 3,14 Step 0,01R=Sin (n+j)
X= r * cos (j)
Y=r*sin (j)
Picture1.Pset(x,y),QBColor(3)Next
Ptivate Sub timer1_Timer ( )Text 5 = Now
Static bankinh As Single
If bankinh >10 Then bankinh =0Bankinh=bankinh+1
Picture1.Scale(-20,20)-(20,-20)Picture1.Cls
Timer1.Enabled=True
For j= -6,28 to 6,28 Step 0,001R=1+cos (j)
X= r * cos (j)
Trang 45Private Sub Command1_Click ( )
Text2.Text= Str(Inp (Val("&H"+ Text1.Text))
End Sub
Private Sub Command2_Click ( )
Out Val("&H" + Text1.Text), Val(Text2.Text)
End Sub
Lại 1 ví dụ khác:
Public Declare Function Inp Lib " Inpout.dll"
Alias"Inp32" ( ByVal Portaddress As Integer As integer) As Integer
Public Declare Sub Out Lib " Inpout.dll"
Alias"Out32" ( ByVal Portaddress As Integer As integer,ByVal Value As Integer)
Các bài thiếu:
1.2.3 khai báo biến
Trang 46+ không cần khai báo,chỉ cần viết tên biến và sử dụng như bình thường,vb tự hiểu
(mặc định)
+Bắt buộc phải khai báo (option exp licit)
-khai báo ở đầu chương trình chính ,đầu chương trình con
-khai báo trước khi sử dụng lần đầu tiên
*cách khai báo
-Dùng tiếp vị ngữ
-dùng từ khóa : Dim tên biến As kiểu biến
Vd :
Dim tieude As integer
*chú ý:có thể viết kết hợp khai báo nhiều biến trên 1 dòng.Khi khai báo nhiều biến trên 1 dòng có thể xảy ra lỗi định dạng.Mỗi biến chỉ được khai báo 1 kiểu biến nhất định
-khai báo kiểu varrian không cần định dạng sau tên biến
Dim tong As Single
*giá trị của biến
-các biến số: giá trị đầu là 0
-Biến String:giá trị đầu là null
Trang 47-Biến Variant:giá trị đầu là empty
-Nếu giá trị đầu của 1 biến không phải là giá trị mặc đinh trên thì phải gián giá ban đầu chobiến ở đầu chương trình
1.2.4 Phạm vi của biến
*Biến toàn cục
-có ý nghĩa tại mọi điểm của chương trình
-bị biến cục bộ che khuất trong phạm vi hoạt động của biến cục bộ
*Biến cục bộ
-Có ý nghĩa trong phạm vi xác định của mình (hàm,thủ tục)
-Các hàm,thủ tục khác nhau có thể có tên biến giống nhau
=> để chia sẻ các giá trị của biến qua các thủ tục khác nhau cần dùng biến mức biểu mẫuVD: Số A=10
Trang 48Text 1 = Tong
**Giá trị bền vững của biến ( biến tĩnh ,Static)
*khai báo = từ khóa static
*Static Tong as single
*khi chương trình con chạy lần đầu tiên ,biến tĩnh được khởi tạo.Khi chương trình con kết thúc,biến tĩnh có được lưu giữ,ở lần chạy tiếp theo của chương trình con giá trị lưu giữ sẽ được đem vào sử dụng
*các phép toán trên chuỗi
-Có thể dùng dấu cộng "+" hoặc dấu & cho việc cộng chuỗi
-Dấu & cộng chuỗi đơn thuần
-Dấu "+" có thể bao gồm có chuyển đổi số học
*Các mã ASCII/ANSI
-CMR(n):trả về mã ASCII tương ứng với vị trí n trong bảng mã
-ASC(ký tự): cho vị trí ký tự trong bảng mã
VD:tiêu đề = " chao cac ban"
Lop="ĐCN"
Hienthi=Tieu de + lop
*Một số hằng xây dựng sẵn
Ký tự rỗng Vbnullchar CHR(0)
Trang 49*Phương pháp biểu diễn số học
VD: kết quả= 10 Mod 3 =3,1…… lấy 1
-Mức ưu tiên
-hàm mũ,hàm âm,nhân chia,chia rõ nguyên,mod,cộng trừ
*các giả định số học khi gián đoạn giá trị
-Nếu số không có dấu chấm thập phân và trong khoảng số nguyên =>gián biến kiểu integer-Nếu số không có dấu chấm thập phân và trong khoảng số nguyên dài => gián biến kiểu long
-nếu có dấu chấm thập phân và trong khoảng số thực ngắn=>gán kiểu Single
-Nếu có dấu chấm thâp phân và trong khoảng số thực dài => gán kiểu double
Chuyển dổi giữa các kiểu dữ liệu
Trang 50Vd : viết chương trình sử dụng cấu trúc select Case
*câu lệnh go to: được dùng cho bẫy lỗi
On Error Goto ErrorHandler
Khi có lỗi,chương trình sẽ nhảy đến nhãn
Error handler và thi hành lệnh ở đó
*Exit for cho phép thoát khỏi vòng for
*Exit do cho phép thoát khỏi Do Loop
Ví dụ đặc biệt:
Ví dụ 1: Vẽ hàm y = Asin(x), với A là một số dương, x từ 02π
Đổi tọa độ trục hoành:
x: 0 => 2πs: 0 => width (width = PictureBox.ScaleWidth)
=> x/2π = s/width => x = s*2π/width
Đổi tọa độ trục tung:
y: -A A
Trang 51t: height 0 (height = PictureBox.ScaleHeight)
Ta thấy y tăng (-A A), t giảm (height 0), vì vậy ta nhân t với -1 để
y-A/-2A = -t/-height t =
(A-y)*height/2A Nếu ta chọn A = height/2 thì t = A-y
Ví dụ 2: Vẽ hàm y = -x3 + 3x2 - 2, với x từ -a a hoặc y từ -a a (tức là gốc tọa
độ Oxy nằm chính giữa PictureBox)
Đổi tọa độ trục hoành:
x: -a as: 0 width (width = PictureBox.ScaleWidth)
Bây giờ ta đưa một đầu mút của x và s về cùng một giá trị (trong bài này ta chọn đưa về 0), bằng cách cộng x với a:
a+x: 0 2as: 0 width
(a+x)/2a = s/width x = s*2a/width - a
Đổi tọa độ trục tung:
y: -a a
t: height 0 (height = PictureBox.ScaleHeight)
Ta thấy y tăng (-a a), t giảm (height 0), vì vậy ta nhân t với -1 để
t cũng tăng: y: -a a-t: -height 0
Bây giờ ta đưa một đầu mút của y và –t về cùng một giá trị (trong bài này ta chọn đưa về 0), bằng cách cộng y với -a: