Lab10 câu 5

96 views
Skip to first unread message

Dân Phạm

unread,
Apr 21, 2012, 1:01:05 AM4/21/12
to int2202ap
Cho mình hỏi khi dùng hàm nhập sinh viên vào vector có bắt buộc phải
truyền tham chiếu ko ?
Và khi sắp xếp sinh viên thì mình làm thế nào nhỉ ?

Tuyến Nguyễn Trí

unread,
Apr 21, 2012, 1:36:59 AM4/21/12
to int2...@googlegroups.com
hàm nhập thông tin sinh viên cần tham chiếu. Sau đó chỉ cần push_back vào vector là xong.
Sắp xếp thì so sánh vtStudent[i].fullname và vtStudent[j].fullname --> swap thôi

Vào 12:01 Ngày 21 tháng 4 năm 2012, Dân Phạm <danu...@gmail.com> đã viết:

Phan Văn Thanh

unread,
Apr 21, 2012, 1:39:26 AM4/21/12
to int2...@googlegroups.com
hàm nhập phải truyền tham chiếu chứ bạn vì nó thay đổi giá trị của vector mà. hàm sắp xếp cũng phải truyền tham chiếu bạn ak
để làm bài sắp xếp tên thì mình viết hàm tách lấy tên từ tên và họ rồi sắp xếp như bt thôi.

Vào 12:01:05 UTC+7 Thứ bảy, ngày 21 tháng tư năm 2012, Dân Phạm đã viết:

Dân Phạm

unread,
Apr 21, 2012, 3:43:40 AM4/21/12
to int2202ap
Các bạn có thế nói rõ hơn về cách lấy tên ra khỏi tên đầy đủ và cách
so sánh được ko?

Dân Phạm

unread,
Apr 21, 2012, 5:15:38 AM4/21/12
to int2202ap
Cô yêu cầu là thực hiện xong cách tính năng 1-3 thì in lai menu, ai
biết cách này chỉ giúp mình với !

Tuyến Nguyễn Trí

unread,
Apr 21, 2012, 6:17:48 AM4/21/12
to int2...@googlegroups.com
Dạng bài này làm nhiều rồi mà
while(true) {
          cout << "các tính năng";
          cout << "Moi bạn chọn";
          cin >> n;
          swich(n) {
               case 1 :
               case 2 :
               case 3 :
               case 4 :
               default :
         }
}

Vào 16:15 Ngày 21 tháng 4 năm 2012, Dân Phạm <danu...@gmail.com> đã viết:

Thành Nguyễn

unread,
Apr 21, 2012, 8:32:58 AM4/21/12
to int2202ap

Theo Mình thì cậu khai báo thêm 1 mảng a[20] nữa sau đó tìm từ cuối
fullname đến khi nào gặp dấu space thì dừng lại và lưu vị trí đó lại.
Tiếp theo dùng hàm strcpy(a,student.fullname.c_str()+(i+1));
vậy là tách được phần tên

Phan Văn Thanh

unread,
Apr 21, 2012, 12:03:15 PM4/21/12
to int2...@googlegroups.com
cách lấy tên ra thì bạn dựa vào dấu cách ấy. gặp dấu cách thì cắt nó ra.
còn cách sắp xếp thì nếu sắp xếp tên trước, nếu 2 tên trùng nhau thì xét đến họ và cuối cùng là xét đến tên đệm....----> phải có 3 hàm dùng để tách tên, tách họ và tách tên đệm......@@

Vào 14:43:40 UTC+7 Thứ bảy, ngày 21 tháng tư năm 2012, Dân Phạm đã viết:

Đỗ Văn Tú

unread,
Apr 21, 2012, 8:00:03 PM4/21/12
to int2202ap
tên, chắc chắn phải tách ra rồi. Còn họ và đệm thì không cần thiết.
ví dụ 2 người cùng họ như
nguyễn văn a và nguyễn thị a
khi đó, kết quả của phép so sánh "văn" với "thị" cũng không khác kết
quả của phép so sánh "nguyễn văn" và "nguyễn thị"
nếu khác họ, cùng tên đệm cũng vậy thôi
do đó, theo mình, chúng ta chỉ cần tách tên ra thôi, họ và đệm để
chung và xét cùng 1 lần cũng được

Đỗ Văn Tú

unread,
Apr 21, 2012, 8:04:51 PM4/21/12
to int2202ap
có một điều, mình làm nhưng vẫn chưa thực sự hiểu:
khi gọi hàm muốn thay đổi giá trị của vector phải truyền tham chiếu
nhưng với mảng, xâu, việc này là không cần thiết.
lý giải cho trường hợp của mảng và xâu, mọi người bảo nó vốn là con
trỏ.
vậy vector là gì mà lại phải truyền tham chiếu.


On 21 Tháng Tư, 23:03, Phan Văn Thanh <thanhpv...@vnu.edu.vn> wrote:

Phan Văn Thanh

unread,
Apr 21, 2012, 8:50:05 PM4/21/12
to int2...@googlegroups.com
C hỏi thế thì làm sao biết được, chỉ biết vector là một class trong STL containers của c++ thôi. Mà là Class thì đương nhiên phải truyền tham số để thay đổi   các giá trị rồi. t nghĩ thế. hì vector chỉ được coi là 1 kiểu dữ liệu thôi, có thêm các hàm và quan trọng nhất là có nạp chồng toán tử [] để mình thấy giống với mảng thôi. Còn trên thực tế thì nó cũng chỉ như là kiểu int vậy.
còn cái có phải tách họ và đệm k ấy, ý kiến của c hay quá, hì t cứ nghĩ kiểu kia rồi làm một mạch mà chả nghĩ thêm có cách nào ngắn hơn k? hì.....ngu quá đi mất

Vào 07:04:51 UTC+7 Chủ nhật, ngày 22 tháng tư năm 2012, Đỗ Văn Tú đã viết:

Hoàng Văn Phụng

unread,
Apr 22, 2012, 3:44:27 AM4/22/12
to int2202ap
mình nghĩ là khi chúng ta thao tác trên mảng thì đã thao tác trực tiếp
lên bộ nhớ của mảng đó rồi nên các giá trị sẽ đc lưu lại.

Phan Văn Thanh

unread,
Apr 22, 2012, 1:55:14 PM4/22/12
to int2...@googlegroups.com
thao tác trên mảng là con trỏ bạn ak, cái này trong C có nói rõ mà.  khi bạn tuyền vào tên của mảng cho hàm thì tức là bạn truyền địa chỉ phần tử đầu tiên của mảng.


Vào 14:44:27 UTC+7 Chủ nhật, ngày 22 tháng tư năm 2012, Hoàng Văn Phụng đã viết:

Hoàng Văn Phụng

unread,
Apr 22, 2012, 2:18:13 PM4/22/12
to int2202ap
uh thì rõ ràng con trỏ trỏ trực tiếp đến vùng nhớ của mảng ấy mà.
vector thì chắc phải sao chép ra 1 biến trung gian rồi mới thực hiện
hàm

Việt Anh Nguyễn

unread,
Apr 23, 2012, 10:32:52 AM4/23/12
to int2...@googlegroups.com
  • Bạn có thể hiểu đơn giản vector là 1 kiểu dữ liệu tương đương với int, char, float, double có sẵn của C++ hay là Date, Student được người lập trình tự định nghĩa ra trong bài 5.
  • Còn mảng hay xâu (xâu cũng là 1 loại mảng) thì không phải là kiểu dữ liệu, mà là cách tổ chức dữ liệu có sẵn trong C++.
  • Tóm lại, khi đưa vào hàm mà muốn thay đổi giá trị, với kiểu dữ liệu thì fải có tham chiếu, còn riêng với mảng thì không cần tham chiếu vì mảng không phải là 1 kiểu dữ liệu.
Về bài 5, để sắp xếp thì mình làm theo cách: Viết hàm string reName(string name), đảo tên lên đầu, theo kiểu: reName("Nguyen Van A") => ANguyen Van. Khi so sánh 2 tên chỉ cần so sánh 2 cái reName với nhau bằng cách:
 reName(string1).compare(reName(string2)). Hàm này tương đương với hàm strcmp () đối với 2 xâu C, trả về:
  • 1 nếu reName(string1) đứng sau reName(string2) trong từ điển
  • 0 nếu  reName(string1) == reName(string2)
  •  -1 nếu reName(string1) đứng trước reName(string2)trong từ điển.

huyen...@vnu.edu.vn

unread,
May 23, 2012, 9:28:37 AM5/23/12
to int2...@googlegroups.com
Mọi người ơi,cho mình hỏi chút về phép trừ 2 số trong bài tập lớn
có phải lấy dấu âm không vậy?hay là mặc định số lớn trừ số bé?


Diep

unread,
May 23, 2012, 10:34:15 AM5/23/12
to int2202ap
Người dùng lấy số lớn trừ số bé thì tính hiệu, trường hợp ngược lại
chương trình có thể xuất 1 thông báo lỗi gì đó.
Reply all
Reply to author
Forward
0 new messages