Ủa, ko ai có câu trả lời cho em hay sao??? chẳng nhẽ mọi người cũnggiốn em??
![]()
Chào các bác, em mới bít đến cộng đồng C Việt wa ddth, em thấy khoái rồi. Em nhập mâm với chút thắc mắc mong các bác chỉ giáo:
Em có một đoạn code như sau:
Các bác cho em hỏi là tại sao khi em đặt breakpoint ở dòng (*) thì máy báo ko thỏa mãn và khi complie em thấy nó ko dịch dòng (*) mà nhảy luôn xuống dòng (**), thế là thế nào???Code:void LietKeHV(int a[],int n,int &m) { int i,h[50]; for(i=1;i<=n;i++) h[i]=i; printf("\nChinh hop thu %2d :",m++); View_CH(a,h,n);(*) while(!HvCuoi(h,n)) {HvKeTiep(h,n); printf("\nChinh hop thu %2d :",m++); View_CH(a,h,n);(**) } }, mong mọi người chỉ giáo.
Ủa, ko ai có câu trả lời cho em hay sao??? chẳng nhẽ mọi người cũnggiốn em??
![]()
bạn thử chèn
int abcdatdediia=0;
abcdatdediia++;
vào đầu hàm, xem nó có nhảy vào 2 hàng này không?
Thế nào là không thoả mãn hả bạn? bạn thử viết cả một chương trình minh họa lỗi trên thì mới giúp đc.Nguyên bản được gửi bởi chuma
Mọi người vào đây đều rất nhiệt tình đó, nhưng mà không hiểu được ý là gì, làm sao mà giúp đây.Ủa, ko ai có câu trả lời cho em hay sao??? chẳng nhẽ mọi người cũng giốn em??
Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
Phone: 0972 89 7667 (Office: 04 6329 2380)
Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)
Xin lỗi các bác nhé, chắc tại em viết khó hiểu quá+lười post toàn bộ code lên.
Đây là code của toàn bộ ctrinh, đoạn đánh dấu (*) và (**) tương ứng.
Mong mọi người bỏ chút thời gian giải thích hộ em!!!
Ah quên, em dùng TC(3.1), không biết trong VC có thế không nhỉ??
to nguyentuan2: em đã thử rồi, nhưng không thấy có ý nghĩa gì. ThanksCode://LK_TH.CPP Liet ke cac to hop n chap k int Nhap_TH(int a[],int &n) { int i,j,k,t; printf("\n Nhap n: "); scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); //Sap xep lai for(i=1;i<=n;i++) {k=i; for(j=i+1;j<=n;j++) if(a[j]<a[k]) k=j; if(k!=i) {t=a[i];a[i]=a[k];a[k]=t;} } return 1; } void View_TH(int a[],int h[],int k) { int i; for(i=1;i<=k;i++) {printf("%4d",a[h[i]]);} } void View_TH1(int a[],int n) { int i; printf("\nTAP HOP %d PHAN TU: ",n); for(i=1;i<=n;i++) {printf("%4d",a[i]);} printf("\n"); } int ThCuoi(int h[],int n,int k)//Tra ve True neu h[] la to hop cuoi { int i; for(i=1;i<=k;i++) if(h[i]!=n-k+i) return(0);//Chua phai la to hop cuoi cung return(1);//La to hop cuoi cung } void ThKeTiep(int h[],int n,int k) { if(ThCuoi(h,n,k)) return; int i,j; i=k; //Tim h[i] dau tien tu phai sang trai ma h[i]<n-k+i while(h[i]>=n-k+i) i--;//Dung lai khi a[i]<n-k+i h[i]=h[i]+1; for(j=i+1;j<=k;j++) h[j]=h[i]+j-i; } void LietkeTH(int a[],int n,int k) { int i,m,h[50]; m=1; for(i=1;i<=k;i++) h[i]=i;//To hop dau tien la:1,2,...,k printf("\nTo hop thu %2d :",m++); View_TH(a,h,k); //------------------>> (*) while(!ThCuoi(h,n,k)) {ThKeTiep(h,n,k); printf("\nTo hop thu %2d :",m++); View_TH(a,h,k); //----------------->>(**) } } void run() { clrscr(); int a[100],n,i,k; if(!Nhap_TH(a,n)) return; View_TH1(a,n); printf("\nLIET KE TO HOP %d CHAP k = ",n); scanf("%d",&k); printf("\nLIET KE CAC TO HOP %d CHAP %d:\n",n,k); LietkeTH(a,n,k); getch(); }
có 1 nguyên nhân gây ra hiện tượng này đó là code optimaztion
không biết trong TC có setting về cái này không, tui chỉ biết là trong VC thì có
code optimaztion là quá trình tối ưu code, hay loại bỏ những đoạn code dư thừa vô nghĩa, khiến cho code nhanh nhất và ngắn nhất.
Lý do khiến tui chỉ bạn chèn vào 2 dòng trên là như vậy (đó là 2 dòng dư thừa, nếu có optimaze thì 2 dòng trên sẽ bị loại bạn không thể debug tới đó được), nhưng theo trả lời của bạn "không có ý nghĩa gì" tui cũng không biết được con trỏ debug có vào được không nữa
Túm lại: nguyên nhân là do code optimaztion, bạn hãy thử chỉnh cấu hình TC sao cho loại bỏ quá trình này hoặc chuyển lên VC thì sẽ giải quyết được
oa, đúng rồi, cảm ơn bác, bác giải thích thế này thì em hiểu rồi. Để em thử lại trong VC xem. Thanks bro
Trong Turbo C++ for DOS không có cơ chế compile/link optimize.
Array trong C bắt đầu từ 0, sao code của cậu bắt đầu từ 1 hết vậy. Sữa lại đi đã.
Còn vấn đề bp chỉ là do cậu compile và link không đúng thôi, vd compile mà không link, nên khi debug nó vẫn dùng .exe cũ. Code không có vấn đề gì.
Đã được chỉnh sửa lần cuối bởi TQN : 06-10-2006 lúc 08:43 AM.
to nguyentuan2: "không có ý nghĩa gì" tức là nó vẫn debug bình thường bác ah. Em đặt breakpoint ở đó vẫn bình thường, ko bị báo invalid breakpoint như trường hợp kia khi dịch. Nhưng dù sao cũng phải thử trong VC đã. ^__^