Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
1 ý tưởng mới cho những bạn ko thích sài con trỏ!!! kết nhất là cái bảng!!!hehe thanhks leo!!!
Sun May 30, 2010 12:40 am
Tổng điều hành
Regulus™
Join : 06/11/2009
Bài gửi : 758
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
thông báo: bị sai phần điểm .. khi swap thì điểm chạy lung tung.. ko đúng nữa... bà kon sửa tiếp đí :d
Sun May 30, 2010 8:57 am
Thành Viên Xây Dựng
kim_o
Join : 12/11/2009
Bài gửi : 148
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
cho hỏi: while (*(sv.hoten+i)) //xoa khoang trang thua if (*(sv.hoten+i)==32&&*(sv.hoten+i+1)==32) strcpy(sv.hoten+i,sv.hoten+i+1); else i++; va một số câu ì, Hình như sau While và Ì là một (bool sta.) sao ko thấy đau hết vậy??? Giải thích giùm cách chạy này,THx nghe
Sun May 30, 2010 10:29 am
IT Pro
superkid
Join : 06/11/2009
Bài gửi : 500
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
mẹ ơi đúng là quỷ đỡ...cái thằng leo này kinh thật pà kon há.à choi tui hỏi chút xíu.tui thì dở về viết mấy cái code nhưng tui xin góp ý cái này xíu.tui tính làm cái phần xóa khoảng trắng và viết hoa chữ cái đầu tiên như sau.mình nhập tên váo 1 mảng.sau đó cho nó chạy từng ô trong mảng.nếu thấy ở đâu kí tự có mã ASCII bằng mã của phím spacebar thì mình delete nó.và cho hàm viết hoa chữ cái ở ô tiếp theo.theo mọi người đây có phải là cách làm tối ưu chưa? thêm nữa là bài của ông leo sao tui copy về máy cho chạy thì nó báo là 5 lỗi.ông nói là nói chạy dc trên VC6 mà máy tui chạy VC6 nè.sao lỗi dữ thế? ------------------------------------------------------------------------ ông kiểm tra lại xem do code hay do máy dùm tui nhé.hix!
Sun May 30, 2010 11:19 am
IT Pro
qphuong07
Join : 06/11/2009
Bài gửi : 677
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
kim_o đã viết:
Trích dẫn :
cho hỏi: while (*(sv.hoten+i)) //xoa khoang trang thua if (*(sv.hoten+i)==32&&*(sv.hoten+i+1)==32) strcpy(sv.hoten+i,sv.hoten+i+1); else i++; va một số câu if, Hình như sau While và If là một (bool sta.) sao ko thấy đau hết vậy??? Giải thích giùm cách chạy này,THx nghe
cái phần điều kiện ở câu lệnh while là *(sv.hoten+i) nghĩa là phấn tử thứ i khác rỗng còn trong câu if thì *(sv.hoten+i)==32&&(sv.hotten+i+1)==32 là câu điều kiện có nghĩa là hai phần tử thứ i và i+1 đều bằng khoảng cách (mã ASCII của khoảng cách là 32) cách chạy thì khi mà phần tử thứ i khác rỗng thì kiểm tra tiếp phần tử thứ i có là khoảng cách ko nếu đúng thì kiểm tra tiếp phần thứ i+1 nếu là khoảng trắng thì copy phần tử thứ i+1 vào phần tử thứ i nghĩa là xóa bớt phần tử thứ i+1 còn không thì tăng i lên chỉ dậy thui!!!
rex đã viết:
Trích dẫn :
thông báo: bị sai phần điểm .. khi swap thì điểm chạy lung tung.. ko đúng nữa... bà kon sửa tiếp đí :d
cái câu lệnh của ông nó bị sai rùi
Code:
if (sv[i].Diem > sv[j].Diem) swap(sv[i] , sv[j]);
phải là
Code:
if (sv[i].Diem < sv[j].Diem) swap(sv[i] , sv[j]);
mới đúng!!! @superkid:ý tưởng của ông hay áh nhưng mà trong C++ ko có hàm nào để xóa hết nên khi làm sẽ gặp nhiều phiền phức nên ko thể làm cùng lúc cả hia việc đc!!!còn bài của leo báo lỗi là do C_free nên khi chạy trên VC6 nó báo lỗi linh tinh thui mấy bạn tự sửa đc mà!!!
Sun May 30, 2010 1:17 pm
Người Nhà
blackrose4s
Join : 10/11/2009
Bài gửi : 312
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
Các bạn đúng là Pro
À mà nói thêm với bạn kim_o là :Theo sách cấu trúc của while là "while(expression) statement" ( expression chứ không phải conditional như cấu trúc If, for, do .. while). Do đó , trong dấu ngoặc của while vừa có thể là biểu thức điều kiện hoặc một biểu thức có trị xác định(biểu hiện).
Sun May 30, 2010 2:09 pm
IT Pro
qphuong07
Join : 06/11/2009
Bài gửi : 677
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
void xoa1kitu(char a[], int vitri) { int n= strlen(a); for(int j=vitri; j<n;j++) a[j]=a[j+1]; a[n-1]='\0';
} void chuanhoa(char chuoi[]) {
while (chuoi[0]==' ') { xoa1kitu(chuoi,0); }
while (chuoi[strlen(chuoi)-1]==' ') { xoa1kitu(chuoi,strlen(chuoi)-1); } for (int i=0;i<strlen(chuoi);i++) { if ((int)chuoi[i]==32 && (int)chuoi[i+1]==32) { xoa1kitu(chuoi,i); i--; }
}
for (i=0;i<strlen(chuoi);i++) //Chuyen tat ca thanh chu thuong chuoi[i]=tolower(chuoi[i]);
chuoi[0]=toupper(chuoi[0]); //In hoa chu cai dau tien for ( i=0;i<strlen(chuoi);i++) if (chuoi[i-1]==' ' && chuoi[i]!=' ') chuoi[i]=toupper(chuoi[i]); }
bool Nhap1SinhVien(SinhVien &sv) { char HoTen[50],QueQuan[20]; cout<<"\n-------------------------------------------------------------------------\n"; cout<<"Nhap MSSV :"; cin.ignore(255,'\n'); cin.getline(sv.MaSV,11); cout<<"Nhap Ho ten Sinh vien :"; cin.getline(HoTen,50); chuanhoa(HoTen); strcpy(sv.HoTen,HoTen); cout<<"Nhap que quan :"; cin.getline(QueQuan,20); chuanhoa(QueQuan); strcpy(sv.QueQuan,QueQuan); cout<<"Nhap nam sinh :"; cin>>sv.NamSinh; cout<<"Nhap Diem : :"; cin>>sv.Diem; if(sv.Diem>=9) strcpy(sv.XepLoai,"xuat sac"); else if (sv.Diem>=8) strcpy(sv.XepLoai,"Gioi"); else if (sv.Diem>=6) strcpy(sv.XepLoai,"Kha"); else strcpy(sv.XepLoai,"TB"); int Tuoi=2010-sv.NamSinh; if((sv.NamSinh<1950)||(sv.NamSinh>2000)) return false; else if ((sv.Diem<5.0)||(sv.Diem>10.0)) return false; else if (Tuoi<18 || Tuoi>50 ) return false; else return true;
}
void NhapDSSinhVien(SinhVien ds[],int n) { SinhVien tmp; int i=0; while (i<n) { if(Nhap1SinhVien(tmp)) { ds[i++]=tmp; } else cout<<"\n !!! Thong tin Sinh Vien vua nhap ko hop le... Vui long nhap lai\n "<<endl; }
}
void XuatDS(SinhVien sv[],int n) { // Dong dau tien for (int i=1;i<=78;i++) cout<<"_"; cout<<endl; cout<<"| MSSV |"<<" Ho Ten |"<<" Nam Sinh |"<<" Que Quan |"<<" Diem |"<<" Xep Loai |\n"; for ( i=1;i<=78;i++) cout<<"_"; cout<<endl; //Cac dong hien thi du lieu for ( i=0;i<n;i++) { cout<<"|"<<setw(8)<<sv[i].MaSV<<"|" <<setw(20)<<sv[i].HoTen<<"|" <<setw(13)<<sv[i].NamSinh<<"|" <<setw(11)<<sv[i].QueQuan<<"|" <<setw(8)<<sv[i].Diem<<"|" <<setw(11)<<sv[i].XepLoai<<"|"; cout<<endl;
}
for ( i=1;i<=78;i++) cout<<"_"; cout<<endl;
}
void TimSinhVienTheoHoTen(SinhVien sv[], int n) { char keyword[100] ; cout<<"Nhap ten sinh vien can tim :"; cin.ignore(255,'\n'); cin.getline(keyword,100); chuanhoa(keyword); int dem=0; for (int i=0;i<n;i++) if (strcmp(sv[i].HoTen,keyword)==0) { dem++; cout<<"\n----------------------------------------------\n"; cout<<"MSSV :"<<sv[i].MaSV<<endl; cout<<"Ho ten :"<<sv[i].HoTen<<endl; cout<<"Nam Sinh :"<<sv[i].NamSinh<<endl; cout<<"Que quan :"<<sv[i].QueQuan<<endl; cout<<"Diem :" <<sv[i].Diem<<endl; cout<<"Xep loai :" <<sv[i].XepLoai<<endl; } if (dem>0) { cout<<"\n----------------------------------------------\n"; cout<<"Tim thay " <<dem<<" sinh vien co ten : "<<keyword<<endl; } else cout<<"Ko tim thay !!!"; } void SapXepTheoDiem(SinhVien sv[], int n) { for (int i=0;i<n;i++) for (int j=1;j<n;j++) { if (sv[i].Diem < sv[j].Diem) swap(sv[i] , sv[j]); else if (sv[i].Diem == sv[j].Diem) { if (strcmp(sv[i].MaSV , sv[j].MaSV)==1) swap(sv[i] , sv[j]); } } }
int main() { SinhVien sv[100];
int n; cout<<"Nhap so luong sinh vien :"; cin>>n; NhapDSSinhVien(sv,n); SapXepTheoDiem(sv,n); system("cls"); XuatDS(sv,n); TimSinhVienTheoHoTen(sv,n);
return 0;
}
bài của rex sau khi sửa lại đôi chút giờ có thể chạy tốt trên VC6 rùi đó mấy cái lỗi cũng ko còn và điểm cũng xếp ok và thêm cái xếp loại xuất sắc mà rex còn thiếu ở bài trên!!!
Số lần được cảm ơn :Message reputation : 100% (1 vote)
Sun May 30, 2010 2:49 pm
Ma Mới
luachonmotvisao_56
Join : 30/12/2009
Bài gửi : 3
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
sao minh copy hoai ko dc nhi
Sun May 30, 2010 4:15 pm
Người Nhà
blackrose4s
Join : 10/11/2009
Bài gửi : 312
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
luachonmotvisao_56 đã viết:
sao minh copy hoai ko dc nhi
Mong rằng Chúa sẽ giúp bạn
Sun May 30, 2010 9:13 pm
Tổng điều hành
Regulus™
Giới tính :
Đến từ : ...
Join : 06/11/2009
Bài gửi : 758
HUMOR : Nghe nhạc.. Computer
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
Code full nè pà kon.... No error... khắc phục lỗi bài của Phương ở trên...
Code:
// Code by IT K35 Zone ... (c) 2010... Regulus , QuyPhuong .... F5 club // Chuc moi nguoi thi tot... :D :D #include <iostream> using namespace std; #include <cstring> #include <cstdlib> #include <iomanip>
void xoa1kitu(char a[], int vitri) { int n= strlen(a); for(int j=vitri; j<n;j++) a[j]=a[j+1]; a[n-1]='\0';
} void chuanhoa(char chuoi[]) {
while (chuoi[0]==' ') { xoa1kitu(chuoi,0); }
while (chuoi[strlen(chuoi)-1]==' ') { xoa1kitu(chuoi,strlen(chuoi)-1); } for (int i=0;i<strlen(chuoi);i++) { if ((int)chuoi[i]==32 && (int)chuoi[i+1]==32) { xoa1kitu(chuoi,i); i--; }
}
for (int i=0;i<strlen(chuoi);i++) //Chuyen tat ca thanh chu thuong chuoi[i]=tolower(chuoi[i]);
chuoi[0]=toupper(chuoi[0]); //In hoa chu cai dau tien for (int i=0;i<strlen(chuoi);i++) if (chuoi[i-1]==' ' && chuoi[i]!=' ') chuoi[i]=toupper(chuoi[i]); }
bool Nhap1SinhVien(SinhVien &sv) { char HoTen[50],QueQuan[20]; cout<<"\n-------------------------------------------------------------------------\n"; cout<<"Nhap MSSV :"; cin.ignore(255,'\n'); cin.getline(sv.MaSV,11); cout<<"Nhap Ho ten Sinh vien :"; cin.getline(HoTen,50); chuanhoa(HoTen); strcpy(sv.HoTen,HoTen); cout<<"Nhap que quan :"; cin.getline(QueQuan,20); chuanhoa(QueQuan); strcpy(sv.QueQuan,QueQuan); cout<<"Nhap nam sinh :"; cin>>sv.NamSinh; cout<<"Nhap Diem : :"; cin>>sv.Diem; if(sv.Diem>=9) strcpy(sv.XepLoai,"Xuat sac"); else if (sv.Diem>=8) strcpy(sv.XepLoai,"Gioi"); else if (sv.Diem>=6) strcpy(sv.XepLoai,"Kha"); else strcpy(sv.XepLoai,"Trung binh"); int Tuoi=2010-sv.NamSinh; if((sv.NamSinh<1950)||(sv.NamSinh>2000)) return false; else if ((sv.Diem<5.0)||(sv.Diem>10.0)) return false; else if (Tuoi<18 || Tuoi>50 ) return false; else return true;
}
void NhapDSSinhVien(SinhVien ds[],int n) { SinhVien tmp; int i=0; while (i<n) { if(Nhap1SinhVien(tmp)) { ds[i++]=tmp; } else cout<<"\n !!! Thong tin Sinh Vien vua nhap ko hop le... Vui long nhap lai\n "<<endl; }
}
void XuatDS(SinhVien sv[],int n) { // Dong dau tien for (int i=1;i<=78;i++) cout<<"_"; cout<<endl; cout<<"| MSSV |"<<" Ho Ten |"<<" Nam Sinh |"<<" Que Quan |"<<" Diem |"<<" Xep Loai |\n"; for (int i=1;i<=78;i++) cout<<"_"; cout<<endl; //Cac dong hien thi du lieu for (int i=0;i<n;i++) { cout<<"|"<<setw(8)<<sv[i].MaSV<<"|" <<setw(20)<<sv[i].HoTen<<"|" <<setw(13)<<sv[i].NamSinh<<"|" <<setw(11)<<sv[i].QueQuan<<"|" <<setw(8)<<sv[i].Diem<<"|" <<setw(11)<<sv[i].XepLoai<<"|"; cout<<endl;
}
for (int i=1;i<=78;i++) cout<<"_"; cout<<endl;
}
void TimSinhVienTheoHoTen(SinhVien sv[], int n) { char keyword[100] ; cout<<"Nhap ten sinh vien can tim :"; cin.ignore(255,'\n'); cin.getline(keyword,100); chuanhoa(keyword); int dem=0; for (int i=0;i<n;i++) if (strcmp(sv[i].HoTen,keyword)==0) { dem++; cout<<"\n----------------------------------------------\n"; cout<<"MSSV :"<<sv[i].MaSV<<endl; cout<<"Ho ten :"<<sv[i].HoTen<<endl; cout<<"Nam Sinh :"<<sv[i].NamSinh<<endl; cout<<"Que quan :"<<sv[i].QueQuan<<endl; cout<<"Diem :" <<sv[i].Diem<<endl; cout<<"Xep loai :" <<sv[i].XepLoai<<endl; } if (dem>0) { cout<<"\n----------------------------------------------\n"; cout<<"Tim thay " <<dem<<" sinh vien co ten : "<<keyword<<endl; } else cout<<"Ko tim thay !!!"; } void SapXepTheoDiem(SinhVien sv[], int n) { for (int i=0;i<n;i++) for (int j=i;j<n;j++) { if (sv[i].Diem < sv[j].Diem) swap(sv[i] , sv[j]); else if (sv[i].Diem == sv[j].Diem) { if (strcmp(sv[i].MaSV , sv[j].MaSV)==1) swap(sv[i] , sv[j]); } } }
int main() { SinhVien sv[100];
int n; cout<<"Nhap so luong sinh vien :"; cin>>n; NhapDSSinhVien(sv,n); SapXepTheoDiem(sv,n); system("cls"); XuatDS(sv,n); TimSinhVienTheoHoTen(sv,n);
return 0;
}
Chúc các bạn thi tốt
Số lần được cảm ơn :Message reputation : 100% (2 votes)
Mon May 31, 2010 6:42 pm
Thành Viên Xây Dựng
khuongsps104
Giới tính :
Đến từ : Tiền Giang
Join : 11/12/2009
Bài gửi : 142
HUMOR : đọc sách y học và tìm hiểu văn hóa nghệ thuật
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
Thank Hải nhiều nha, VIP thật hihi.
Số lần được cảm ơn :Message reputation : 100% (1 vote)
Mon May 31, 2010 7:41 pm
Thành Viên Xây Dựng
kim_o
Giới tính :
Đến từ : An Giang
Join : 12/11/2009
Bài gửi : 148
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
cho MÌnh hỏi cái ,trong cái xuất của hàm void TimSinhVienTheoHoTen(SinhVien sv[], int n) khi điều kiện == 0; minh có thể thay bằng hàm xuất đã khai báo ở trên không, thay vì xuất trực tiếp thì hơi dài hơn chút xí???
Mon May 31, 2010 7:55 pm
IT Pro
qphuong07
Giới tính :
Đến từ : dong nai
Join : 06/11/2009
Bài gửi : 677
HUMOR : Ngủ là ok!!!
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
hỉu ý của kim_o nhưng mà vấn đề ở đây là mình xuất 1 sinh viên chứ ko phải là 1 danh sách sinh viên nên vòng lặp for ko thể sài trong trường hợp này!!! còn nếu muốn thì ông có thể viết thêm cái hàm xuất 1 sinh viên!!! nhưng mà tui nghĩ cái chỗ xuất này cũng khá là đơn giản ko có gì hết nên chịu khó 1 chút cũng đâu sao!!! mà cái phần này trong đề ko yêu cầu nên cũng ko cần wan trọng lắm đâu!!!
Mon May 31, 2010 8:01 pm
Người Nhà
blackrose4s
Giới tính :
Đến từ : không gian
Join : 10/11/2009
Bài gửi : 312
HUMOR : không rõ ràng
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
Cho mình hỏi trong cái cái hàm XuatDS(SinhVien sv[],int n) có sử dụng setw() , mình chưa hiểu cách sử dụng của nó! Ai bik chỉ mình với nó sử dụng để làm gì và đặt thông số bên trong dấu () ra sao không ?
Mon May 31, 2010 8:03 pm
Tổng điều hành
Regulus™
Giới tính :
Đến từ : ...
Join : 06/11/2009
Bài gửi : 758
HUMOR : Nghe nhạc.. Computer
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
kim_o đã viết:
cho MÌnh hỏi cái ,trong cái xuất của hàm void TimSinhVienTheoHoTen(SinhVien sv[], int n) khi điều kiện == 0; minh có thể thay bằng hàm xuất đã khai báo ở trên không, thay vì xuất trực tiếp thì hơi dài hơn chút xí???
ko dc vì các hàm void XuatDS(SinhVien sv[],int n)
là xuất danh sách của cả mảng, ko xuất danh sách lẻ tẻ dc
Mon May 31, 2010 8:06 pm
IT Pro
qphuong07
Giới tính :
Đến từ : dong nai
Join : 06/11/2009
Bài gửi : 677
HUMOR : Ngủ là ok!!!
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
cái hàm setw() dùng để cách khoảng cách. số ở trong ngoặc là số khoảng cách muốn cách ra có 1 điều đặc biệt nữa là có thể viết đè lên những khoảng cách này. vd:cout<<setw(5)<<2; thì chương trình sẽ in ra số 2 đc ghi ở dấu cách thứ 5, có nghĩa là trc số 2 có 4 dấu cách!!!
Mon May 31, 2010 8:25 pm
Tổng điều hành
Regulus™
Giới tính :
Đến từ : ...
Join : 06/11/2009
Bài gửi : 758
HUMOR : Nghe nhạc.. Computer
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
blackrose4s đã viết:
Cho mình hỏi trong cái cái hàm XuatDS(SinhVien sv[],int n) có sử dụng setw() , mình chưa hiểu cách sử dụng của nó! Ai bik chỉ mình với nó sử dụng để làm gì và đặt thông số bên trong dấu () ra sao không ?
Hàm setw(n) là tạo ra n khoảng trống cho phần dữ liệu sau nó ví dụ cout<<setw(10)<<12.34; đí thì nó sẽ tạo cho mình 10 khoảng trống để chứa số 12.34 số sẽ dc lấp đầy từ sau ra trước nó sẽ in ra 12.34 ở đây mới chỉ có 5 chỗ 12.34 vì vậy ở phía trước sẽ còn 5 chỗ nữa nghĩa là 5 khoảng trống cái này dc sử dụng trong các phép canh cho đẹp đó
PS: hàm đó giống như phần tạo thông số printf trong C đó
giống như cái %5d %5f thì cái này là setw(5)
Mon May 31, 2010 9:28 pm
Thành Viên Xây Dựng
kim_o
Giới tính :
Đến từ : An Giang
Join : 12/11/2009
Bài gửi : 148
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
mà cho hỏi luôn nè, trong hàm Void nhapdssinhvien ak, tui thay ham if nhap1sinhvien(tmp), nghĩa là sao vay?? hinh nhu dau phai dieu kien dau pk???
Mon May 31, 2010 9:32 pm
Tổng điều hành
Regulus™
Giới tính :
Đến từ : ...
Join : 06/11/2009
Bài gửi : 758
HUMOR : Nghe nhạc.. Computer
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
tương đương nhap1sinhvien(tmp)==true
Tue Jun 01, 2010 6:25 am
Người Nhà
blackrose4s
Giới tính :
Đến từ : không gian
Join : 10/11/2009
Bài gửi : 312
HUMOR : không rõ ràng
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
Code:
void SapXepTheoDiem(SinhVien sv[], int n) { for (int i=0;i<n;i++) for (int j=i;j<n;j++) { if (sv[i].Diem < sv[j].Diem) swap(sv[i] , sv[j]); else if (sv[i].Diem == sv[j].Diem) { if (strcmp(sv[i].MaSV , sv[j].MaSV)==1) swap(sv[i] , sv[j]); } } }
Đoạn này hình như bị sai hay sao ấy Hải ơi ! Thuật toán sắp xếp khi điểm i khác điểm j thấy kì kì, đáng lẽ lúc nào nó cũng phải so sánh phần tử ở trước với phần tử ở sau, lúc i = j nó tự so sánh chính nó hả ?
strcmp (string1, string2 ) so sánh 2 xâu, trả về 0 nếu giống nhau và trả về 1 nếu 2 xâu khác nhau, mà mã SV (kiểu char) thì luôn khác nhau vậy chỗ đó lúc nào cũng trả về 1. VD: Phương và Hải cùng 9 điểm, theo vần ABC thì mã SV của Hải có số thứ tự thấp hơn Phương giả sử là 031 và 056. Theo đoạn code trên thì nó so sánh xong đổi thứ tự 2 người lun mất rồi !
Tue Jun 01, 2010 9:51 am
IT Pro
qphuong07
Giới tính :
Đến từ : dong nai
Join : 06/11/2009
Bài gửi : 677
HUMOR : Ngủ là ok!!!
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
blackrose4s đã viết:
Trích dẫn :
Code:
void SapXepTheoDiem(SinhVien sv[], int n) { for (int i=0;i<n;i++) for (int j=i;j<n;j++) { if (sv[i].Diem < sv[j].Diem) swap(sv[i] , sv[j]); else if (sv[i].Diem == sv[j].Diem) { if (strcmp(sv[i].MaSV , sv[j].MaSV)==1) swap(sv[i] , sv[j]); } } }
Đoạn này hình như bị sai hay sao ấy Hải ơi ! Thuật toán sắp xếp khi điểm i khác điểm j thấy kì kì, đáng lẽ lúc nào nó cũng phải so sánh phần tử ở trước với phần tử ở sau, lúc i = j nó tự so sánh chính nó hả ?
strcmp (string1, string2 ) so sánh 2 xâu, trả về 0 nếu giống nhau và trả về 1 nếu 2 xâu khác nhau, mà mã SV (kiểu char) thì luôn khác nhau vậy chỗ đó lúc nào cũng trả về 1. VD: Phương và Hải cùng 9 điểm, theo vần ABC thì mã SV của Hải có số thứ tự thấp hơn Phương giả sử là 031 và 056. Theo đoạn code trên thì nó so sánh xong đổi thứ tự 2 người lun mất rồi !
code này ko sai đâu bạn ơi tại i=j thì nó so sánh với nhau cũng đâu có sao còn nếu ko muôn thì bạn có thể đổi lại là j=i+1 là đc chứ sao mà bạn nói sai đc!!! câu lệnh strcmp(s1,s2) sẽ trả về 1 khi s1 lớn hơn s2 chứ ko phải là s1 khác s2 đâu bạn nên khi nhập 031,056 như bạn nói ở trên nó sẽ ko đổi chỗ vì chuỗi 031 nhỏ hơn chuỗi 056!!!bạn có thể test thử!!!
Tue Jun 01, 2010 10:20 am
Thành Viên Thường Trực
congtu_ngaitu91
Giới tính :
Đến từ : ngãi tứ
Join : 12/12/2009
Bài gửi : 68
HUMOR : mọi thứ
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
ko no bao loi~ ngay bjen i
Tue Jun 01, 2010 10:26 am
Thành Viên Thường Trực
congtu_ngaitu91
Giới tính :
Đến từ : ngãi tứ
Join : 12/12/2009
Bài gửi : 68
HUMOR : mọi thứ
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
no' bao' loi~ o bien t nhieu lem'
Tue Jun 01, 2010 10:28 am
IT Pro
qphuong07
Giới tính :
Đến từ : dong nai
Join : 06/11/2009
Bài gửi : 677
HUMOR : Ngủ là ok!!!
Thú cưng .:
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
cái đó là do khai báo biến i nhiều lần àh. ông chỉ cần xóa chữ int trước biến i mà máy báo lỗi là ok!!!tại cái của Hải viết trên C-free nên nó ko báo lỗi còn trên VC6 thì ko cho khai báo biến i nhiều lần!!!
Sponsored content
Tiêu đề: Re: [HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010
[HOT] Giải ĐỀ THI MẪU trong đề cương ôn tập C++ 2010