Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Bài tập lớn: kiểu unsigned char

470 views
Skip to first unread message

Đỗ Văn Tú

unread,
May 2, 2012, 7:07:15 AM5/2/12
to int2202ap
Mình không hiểu lắm tại sao lại dùng kiểu unsigned char ở đây vì mình
đọc trên magj thì thấy kiểu unsigned char cũng lưu 1 kí tự như kiểu
char.
Nhưng nếu như thế thì làm sao lưu được 2 kí tự trong mỗi phần tử của
vector, và khai báo nguyên mẫu của cô thì t thấy chỉ nhập được 1 kí tự
thôi.
mong các bạn giúp đỡ.

Phan Văn Thanh

unread,
May 2, 2012, 12:01:49 PM5/2/12
to int2202ap
Mình với tú cùng nhóm làm nhưng động đến hàm kiến tạo là mắc cái kia,
nhưng mà nếu thay là unsigned char thì dùng hàm gì nhập vào nhỉ? dùng
getline thì báo lỗi chẳng lẽ lại dùng cin rồi cin.ignore()......

Ngô Duy Nghĩa

unread,
May 2, 2012, 12:40:54 PM5/2/12
to int2202ap
Chắc 2 cậu chưa hiểu ý cô ^^. unsigned char ở đây hiểu là 1 kiểu số
nguyên. Bình thường chúng ta làm trên hệ cơ số 10 => xử lý từng chữ số
với các phép toán cơ bản. Trong ví dụ của cô làm trên hệ cơ số 100 =>
xử lý 2 chữ số. Tương tự hệ 10, có thế hiểu mỗi chữ số trong hệ 100 là
1 số không âm < 100. Vì thế dùng unsigned char là hợp lý ^^.
@Thanh: đọc vào string. Dùng hàm BigNumber(string value) để khởi tạo 1
số lớn.

Đỗ Văn Tú

unread,
May 2, 2012, 7:40:42 PM5/2/12
to int2202ap
cô gợi ý cách lưu trữ là : vector <unsigned char> digitpairs
đây mới là vấn đề mình nói
nếu khai báo như vậy, thì mỗi thành phần của vector đâu thể lưu được 2
chữ số đâu

Hoàng Văn Phụng

unread,
May 2, 2012, 11:45:15 PM5/2/12
to int2202ap
unsigned char chỉ có thể lưu 1 kí tự nhưng mà giá trị của nó thì có
thể lưu từ 0-255.bạn xem qua bảng mã ascii chắc sẽ hiểu đc
Message has been deleted

Phan Văn Thanh

unread,
May 2, 2012, 11:56:18 PM5/2/12
to int2...@googlegroups.com
tức là theo ý bạn thì kí tự tương đương với số nguyên đúng k?
nhưng nếu như thế thì mình phải tra bảng ascii để tìm giá trị số là gì sao?
vd 'A' chỉ 65 chẳng hạn.

Vào 10:45:15 UTC+7 Thứ năm, ngày 03 tháng năm năm 2012, Hoàng Văn Phụng đã viết:

Hiệp_K56CC

unread,
May 3, 2012, 12:23:24 AM5/3/12
to int2...@googlegroups.com
Mà trừ số nhỏ cho số to thì lưu kiểu gì đây.

Hoàng Văn Phụng

unread,
May 3, 2012, 12:25:06 AM5/3/12
to int2202ap
uh. mình nghĩ là như vậy.

On May 3, 10:56 am, Phan Văn Thanh <thanhpv...@vnu.edu.vn> wrote:
> tức là theo ý bạn thì kí tự tương đương với số nguyên đúng k?
> nhưng nếu như thế thì mình phải tra bảng ascii để tìm giá trị số là gì sao?
> vd 'A' chỉ 65 chẳng hạn.
>

> Vào 10:45:15 UTC+7 Thứ năm, ngày 03 tháng năm năm 2012, Hoàng Văn Phụng

Đỗ Văn Tú

unread,
May 3, 2012, 4:04:06 AM5/3/12
to int2202ap
hì hì. cuối cùng đã hiểu, ta sẽ dùng chính vị trí của các kí tự trong
bản mã ascii để lưu số. Không cần quan tâm nó là kí tự gì, chỉ cần
quan tâm nó có vị trí bao nhiêu thôi.

Đỗ Văn Tú

unread,
May 3, 2012, 7:24:46 AM5/3/12
to int2202ap
à đúng rồi, các thành phần của vector có bắt buộc phải dùng unsigned
char không? liệu có thể thay bằng int được không mình thấy dùng int sẽ
trực quan hơn rất nhiều

huyen...@vnu.edu.vn

unread,
May 3, 2012, 8:53:37 AM5/3/12
to int2...@googlegroups.com
Bạn nào biết chỉ giùm t với.
trong thuật toán tìm kiếm nhị phân,nếu t có mảng char z[] gom 10 phần tử đã xếp tăng dần như sau:
z: a b b b b b b c e g
chi so: 0 1 2 3 4 5 6 7 8 9
bây giờ cần tìm chi so cua phần tử có giá trị ='b' trong z va in ra thì thuật toán thế nào?


Hoang Anh Tu

unread,
May 3, 2012, 8:22:24 PM5/3/12
to int2202ap

Như ví dụ trên bạn có 10 phần tử, đầu tiên bạn tìm từ phần tử thứ 0
đến 9, sau đó 1 trong 2 trường hợp xảy ra
1. tìm tiếp từ phần tử 0-4 nếu phần tử thứ 5>'b'
2. tìm tiếp từ phần tử 5-9 nếu phần tử thứ 4<'b'
Việc chia để tìm kiếm sẽ lặp lại tiếp tục như vậy trong mỗi đoạn tìm
kiếm mới, bạn có thể dùng while, điều kiện dừng là khi phần tử ở giữa
đoạn tìm kiếm = 'b' (ta kiểm tra mỗi lần chia đoạn) hoặc là khoảng
tìm kiếm còn 1 phần tử, nếu phần tử này !='b' thì ko có b trong dãy.
nhớ luôn có 2 biến lưu 2 chỉ số đầu cuối của đoạn tìm kiếm.
Chúc bạn thành công.

thun...@vnu.edu.vn

unread,
May 4, 2012, 11:21:49 PM5/4/12
to int2...@googlegroups.com
-----------------------------------------------
theo mình hiểu thì thuật toán tìm kiếm nhị phân là kiểu so sánh giá trị cần tìm với giá trị giữa mảng
nếu nó bằng thì in ra chỉ số
nếu nó lớn hơn thì xét đoạn mảng phía sau số giữa đó
nếu nó nhỏ hơn thì xét đoạn mảng phía trước số giữa

nếu chạy cái trên và xác định chỉ só giữa là: (0+9)/2 = 4 thì chỉ số của b lúc này là 4

Nguyễn Thị Thu
Class: K55CD
Email: thun...@vnu.edu.vn
Mobile: 0988 299 003

Phan Văn Thanh

unread,
May 8, 2012, 8:07:55 AM5/8/12
to int2...@googlegroups.com
cho mình hỏi hàm kiến tạo mặc định không đối số thì có cần làm gì khác k?
tức là có gán các giá trị của vector không? hay là không làm gì cả?
vì dù sao mình cũng khai báo ở chỗ private rồi mà!

Vào 18:07:15 UTC+7 Thứ tư, ngày 02 tháng năm năm 2012, Đỗ Văn Tú đã viết:
Vào 18:07:15 UTC+7 Thứ tư, ngày 02 tháng năm năm 2012, Đỗ Văn Tú đã viết:
Vào 18:07:15 UTC+7 Thứ tư, ngày 02 tháng năm năm 2012, Đỗ Văn Tú đã viết:
Vào 18:07:15 UTC+7 Thứ tư, ngày 02 tháng năm năm 2012, Đỗ Văn Tú đã viết:
Vào 18:07:15 UTC+7 Thứ tư, ngày 02 tháng năm năm 2012, Đỗ Văn Tú đã viết:
Vào 18:07:15 UTC+7 Thứ tư, ngày 02 tháng năm năm 2012, Đỗ Văn Tú đã viết:

Khổng anh thắng

unread,
May 8, 2012, 1:47:08 PM5/8/12
to int2202ap
bạn ơi cái hàm kiến tạo BigNumber(string value) thì value là kiểu
string làm sao để gán cho vector kiểu unsigned char đk, hay là mình ép
kiểu?

Diep

unread,
May 8, 2012, 2:25:42 PM5/8/12
to int2202ap
@ThanhPV: Hàm kiến tạo mặc định dùng để khởi tạo giá trị mặc định cho
các biến thành viên của bạn. Nếu ngoài biến thành viên gợi ý kiểu
vector<unsigned char> bạn còn biến nào khác thì khởi tạo ở đó. Ở góc
độ người sử dụng thư viện BigNumber, bạn làm gì với các biến thành
viên của bạn người ta không cần biết, chỉ cần đảm bảo giao diện public
làm đúng tính năng đã mô tả.

@Thắng: Bạn làm sao xử lý xâu kí tự value (tạo bởi các kí tự '0',
'1',..., '9') và chuyển nó thành các chữ số trong vector<unsigned
char> digitpairs thì làm. Rõ ràng là ép kiểu không giải quyết được vấn
đề. Có thể ví dụ sau sẽ cho bạn câu trả lời.
Với value = "1234" thì
digitpairs[0] = 34 tức là = ('3' - '0') * 10 + ('4' - '0')
digitpairs[1] = 12 tức là = ('1' - '0') * 10 + ('2' - '0')

Khổng anh thắng

unread,
May 11, 2012, 5:54:22 AM5/11/12
to int2202ap
EM thưa cô sao phải là ('3'-'0' )*10 , sao ko để là ('3')*10 vậy thôi
ạ ?

Đỗ Văn Tú

unread,
May 11, 2012, 6:19:25 AM5/11/12
to int2202ap
mã của '3' hơn mã của '0' là 3 đơn vị.
mình cần một kí tự biêu diễn có mã là 3 chứ không cần kí tự '3' nên
phải là '3' - '0'
('3' - '0') * 10 + '4' - '0' ta sẽ được một kí tự có mã 34
còn nếu chỉ là '3' * 10 + '4' thì...
'3' có mã là 51
'4' có mã là 52
'3' * 10 + '4' ta sẽ được một kí tự có mã là 51 * 10 + 52 nhưng đó
chỉ là lí thuyết vì kết quả tất nhiên là lớn hơn 256 rồi
Reply all
Reply to author
Forward
0 new messages