PDA

View Full Version : [Q] Help me more!!!!



Bryan_kid
27-04-2003, 14:04
Chào mọi người!!!!!
Mình học môn kiến trúc máy tính thầy có ra đề là thiết lập một bộ nhân hoặc chia bằng Visual Basic!!! Mình không biết làm sao cả vì mình chỉ vừa mới nhập môn VB thôi, mà thời gian lại gấp quá!!! Mong các bạn giúp đỡ!!!
Nhưng điều kiện của thầy đưa ra là khi bộ fận nào làm việc thì bộ fận đó fải nhấp nháy. Chẳng hạn như khi bộ fận dịch chuyển bit làm việc thì bộ fận đó nhấp nháy, còn khi bộ fận cộng bit làm việc thì bộ fận đó sẽ nhấp nháy!!!!
Mong các bậc tiền bối giúp Bryan. Bryan hứa sẽ hậu tạ xứng đáng!!!
Thanks a lot!!!
Bryan!!!!

dtt_vn
27-04-2003, 19:56
cái này khó à nghen. nếu bạn học kiến trúc máy tính, tức là đang theo học song song ASM đúng không? xem mấy cuốn ASM đi. cái này dtt_vn cũng không được rành lắm, nào là nhớ bít, bit chẳng, bit lẻ, rồi còn kiểu này kiểu kia. rất phức tạp. mà mệt nhất là viết bằng VB nữa. Nhưng không sao. Cứ tìm mấh cuốn ASM thử đi. có gì thì mình trao đổi thêm

Bryan_kid
28-04-2003, 10:34
Hic..hic.... Nếu có thời gian đọc ASM thì đâu nhờ mọi người làm gì!!! Thật lòng thời gian cấp bách lắm rồi mà mình thì chưa biết gì nhiều về VB cả. Nên mong mọi người co' thương thì thương cho trót!!!!!!!!!! Thanks a lot!!!!
Bryan!!!

dtt_vn
28-04-2003, 14:50
bi giờ bạn post lên những yêu cầu của thầy bạn đi. có thể liên lạc với mình bằng YM. thật sự thì bi giờ dtt_vn cũng bận lắm ( cuối năm học rồi ) nhưng cũng sẽ cố giúp bạn vậy

Bryan_kid
30-04-2003, 16:29
Dear!!!
Cám ơn bạn rất nhiều!!! Thế bạn đang học ĐH hay phổ thông??
Đề bài của thầy mình ra là: Thiết lập một bộ nhân hoặc bộ chia 2 số bất kỳ. Khi nhập thì mình nhập 2 số hệ mười, nhưng khi nhấp nút "cộng" hay "chia" thì tự động đổi sang nhị fân ở ô bên cạnh, kết quả cũng vừa co' nhị fân vừa có hệ mười!!! Mình cũng không rõ ở chỗ thầy bảo nhấp nháy, nhưng mình nghĩ mãi không ra là fải làm nhấp nháy chỗ nào và như thế nào!!! Nói thật với bạn là khi thầy ra đề thì mình không hiểu gì cả!! Nếu bạn giúp mình thì ráng đoán giùm mình ý của ông thầy là gì nhé!!!
Mình biết là thật quá đáng vì đã nhờ giúp đỡ mà kể cả dề bài cũng không biết rõ ràng, nhưng thật sự mình không biết nhờ vào ai cả. Có bạn đồng ý giúp mình, mình thật sự cảm ơn lắm lắm!!!

dtt_vn
30-04-2003, 21:08
theo dtt_vn hiểu, th2i thầy của bạn muốn là : chia làm nhiều bộ phận, khi nào bộ phận nào làm việc, thì cái đó nhấp nháy. có thể ăn gian được không? nếu được thì nhân chia trước ở hệ 10, phần còn lại là việc đổi ra hệ 2 thôi

White_Rose
01-05-2003, 00:13
To Bryan_Kid:
Mình không học toán rời rạc lâu rồi, vả lại cũng chẳng thích nên không còn nhớ cụ thể nữa. Đại khái sẽ phải làm như sau (cho rằng tất cả đã được chuyển về hệ cơ số 2 rồi, mình cũng giả sử bạn thao tác với số 8 bit cho đơn giản).
Số 1: ******xx (x7-x0)
Số 2: yyyyyyyy (y7-x0)
Bạn để một cái "đèn" là cờ nhớ (F)
Dùng thêm 8 đèn là kết quả (R7-R0)
Sau đấy, bạn dùng cách tính như cộng = tay. Mình sẽ ví dụ với hai giá trị ******xx và yyyyyyyy thực sự là 00101011 và 10011000.
Các đèn: 0 = tắt, 1 = sáng
Ban đầu:
X7-X0 (X) = 00101011
Y7-Y0 (Y) = 10011000
F = 0
R7-R0 (R) = 00000000
B1:
1 + 0 = 1 nhớ 0
F = 0
R = 00000001
B2:
1 + 0 = 1 nhớ 0
F = 0
R = 00000011
B3:
0 + 0 = 0 nhớ 0
F = 0
R = 00000011
B4:
1 + 1 = 0 nhớ 1
F = 1
R = 00000011
B5:
0 + 1 + 1 = 0 nhớ 1
F = 1
R = 00000011
B6:
1 + 0 + 1 = 0 nhớ 1
F = 1
R = 00000011
B7:
0 + 0 + 1 = 1 nhớ 0
F = 0
R = 01000011
B8:
0 + 1 = 1 nhớ 0
F = 0
R = 11000011

White_Rose
01-05-2003, 00:17
Với cách nhân, sử dụng thuật toán nhân Ấn đọ và phép cộng để tính. Sorry mình không làm cụ thể được, cũng bận lắm, hic.

Bryan_kid
02-05-2003, 16:22
Chào bạn!!
Mình vừa mới hỏi lại bạn bè về đề bài thầy cho rồi!!! Ý của ổng có nghĩa là mọi công việc mình thao tác bằng tay cho fép tính đó như thế nào thì được tường thuật lại đầy đủ thông qua chương trình của mình!!! Chẳng hạn như khi 2*2, giả sử như đổi mỗi số ra 4 bit: A*B:
0010
* 0010
--------
0000
0010
0000
0000
--------
0100
Chẳng hạn như với fép tính như trên, đầu tiên bit 0 của B sẽ lần lượt nhân với từng bit của A. Công việc của mình sẽ lập trình sao cho khi 2 bit nào nhân với nhau thì 2 bit đó sẽ báo hiệu cho người sử dụng biết (chẳng hạn như nhấp nháy hay đổi màu gì đó...). Rồi khi bước nhân đã hoàn thành thì tiếp đến bước cộng cũng tương tụ như vậy, 2 bit nào cộng nhau thì cũng báo hiệu cho người dùng biết!!!! Bây giờ thì chắc bạn đã rõ hơn rồi fải không?
Chân thành cảm ơn bạn đã đồng ý giúp mình!!!!
Bryan!!!
P/S: Ráng giúp mình sớm sớm nghen!!!!

dtt_vn
02-05-2003, 20:42
u có thể nhân trên chuỗi ( quét trên chuỗi )

Bryan_kid
02-05-2003, 23:52
Là sao, không giúp mình mà chỉ nói có 1 câu vậy thôi hả???? Buồn thế!!!!!!!

dtt_vn
03-05-2003, 01:47
dtt_vn thật sự cũng chưa hiểu hết nội dung. nếu bạn muốn nhân bằng tay, có thể sử dụng phương pháp cổ điển là ; dùng vòng lặp for ngược từ phải sang traí, ứng với ký tự thứ i thì bắt đầu nhân với chuỗi 2, nhớ kiểm tra độ dài trước khi nhân. dtt_vn không có học chuyên toán tin ( dốt toán vô cùng :D )

KEM_WALL
04-05-2003, 10:14
Trung phải hướng dẫn kĩ hơn nữa, người ta mới học vb mà
bạn đặt lên form 3 cái text box, text3 đặt thuộc tính textalign = right, thuộc tính multiline= true, 1 cái command có caption = "cal"
gõ code

option explicit
dim arr2() as byte
sub text2_change()
redim arr2(len(text1)-1)
dim i as integer
for i = 0 to len(text1)-1
arr2(i)=mid( text1,i,1)
next
end sub
sub command1_click()
dim Flag as boolean, i as integer, j as integer
for j = 0 to ubound(arr2)
text3= text3 & val(TEXT1)*arr2(i) & space(j)
text3= text3 & vbcrlf
next
text3= text3 & val(text1)*val(text2)
end sub

code này walls viết ngoài tiệm, hổng biết có chạy được kô (ở đây kô có VB)

dtt_vn
12-05-2003, 16:10
Chào bạn.
Mình đã viết cái ct cho bạn theo lời mình hứa. Nhưng cái phần chia khó quá, đọc hoài không hiểu ( Kỹ Thuật Vi Xử Lý - Văn Thế Minh - Nhà Xuất Bản Giáo Dục ) nên dtt_vn lại chọn hướng khác để thực hiện ( tức là không giống cách của máy ) thì thành công. Nhưng cuối cùng thấy không giống cái đề bài nên bỏ mất tiêu rồi :D

Đây là thuật toán chia của máy
Phép chia là phép tính ngược của phép nhân. Từ đó suy ra phép chia có thể thực hiện bằng phép trừ và phép dịch liên tiếp các bit sang trái cho tới khi không còn trừ được nữa do không còn gì để trừ hoặc số dư bé thua số chia.
Thuật toán chia:
1. Đổi số chia ra số bù 2 ( là đổi các số 0 thành 1 và 1 thành 0 của số hệ 2 có dấu và cộng thêm 1 )
2. Lấy số bị chia trừ đi số chia
a. Nếu kết quả này có bit dấu bằng 0 ( có nghĩa là phần này của số bị chia chia được cho số chia ) thì bit tương ứng của thương bằng 1
b. Nếu kết quả này có bit dấu bằng 1 ( có nghĩa là phần này của số bị chia không chia được cho số chia ) thì bit tương ứng của thương bằng 0 và a buộc phải khôi phục lại giá trị ban đầu của số bị chia bằng cách cộng kết quả này với số chia ở hệ 2
3. Dịch trái kết quả thu được ở bước trên và làm lại bước 2 cho đến khi nhận được kết quả cuối cùng là 0 ( chia hết ) hoặc nhỏ hơn số chia ( chia còn dư ).


Kèm theo cho bạn là phần demo của phép nhân. Bảo đảm là đúng cách máy xử lý. Xin lỗi vì không thể làm hết được. dtt_vn đã cố gắng lắm rồi.

Bryan_kid
17-05-2003, 16:49
Trung ơi!!!
Sao đuôi tập tin lạ vậy? ".rar" !!!!
Mình cho chạy tập tin trong VB không được!!!
Trả lời giùm mình sớm sớm nghen!!!!!
Bryan!!

dtt_vn
26-05-2003, 18:34
Đây là phiên bản tiếp theo. Đúng theo yêu cầu của Bryan. Tuy nhiên, do hạn chế về mặt thuật toán ( dtt_vn dốt thuật toán) do đó, đừng để nó nhân với số quá lớn nhé. Lúc trước viết được rồi, chạy tốt lắm. Rồi sau del mất tiêu :( Bây giờ viết lại không được :( Dùng tạm vậy. để dtt_vn chỉnh lại thêm nhé. Test trước đi

trungnt88
26-05-2003, 19:45
rar mở = winrar

dtt_vn
26-05-2003, 20:23
xong rồi. sửa lỗi toàn bộ. chạy tốt.