e mới tìm hiểu về c và có đề bài như sau: https://www.spoj.com/ITPTIT/problems/ITP0183I/
đây là bài e làm: http://codepad.org/5M2yRxBQ
khi e chạy trên ideone thì vẫn chạy nhưng khi nộp trên spoj thì bị lỗi.
Code bị lỗi sigsegv khi nộp trên spoj
đây là bạn đang khai báo mãng tĩnh, trong c thì bắt buộc phải , kích thước mảng phải là một hằng số, xác định trước.
Do vậy lỗi ở dòng 8 và dòng 27
Do vậy, ở đây bạn thể khai báo
#define max = 10
int a[max][max];
sau đó dùng như bạn bình thường.
Muốn dùng bao nhiêu, lấy bao nhiêu bô nhớ, thì dùng cấp pháp động.
27: int a[n][3]; // <--- lỗi đây bạn
Vì ma trận là n*n.
cảm ơn bác :v ngu ngơ quá =((
Bài của bạn nếu chịu phân tích và tìm công thức tí xíu là đủ rồi, không cần phải tạo matrix.
Đề bài cho tìm phần tử (x, y) trên ma trận n x n, bắt đầu tại giá trị v
- x = 0, lấy phần tử trên hàng đầu tiên
- y = n-1, lấy phần tử ở cột cuối cùng
- x = n-1, lấy phần tử ở hàng cuối cùng
- y = 0, lấy phần tử ở cột đầu tiên
- 0 < x < n-1, 0 < y < n-1, chuyển sang đề bài nhỏ hơn “tìm phần tử (x-1, y-1) trên ma trận (n-2) x (n-2), bắt đầu tại giá trị v + 4(n-1)” (v + n + (n-1) + (n-1) + (n-2))
Phần công thức bạn tự tính nhé.
3 posts were split to a new topic: Cần giúp đỡ tìm lỗi sai bài tập trên SPOJ PTIT
Không có tiện thể gì hết nhé :v
Bạn đang khai báo sai câu lệnh define. Đúng ra phải là
#define max 10
Với lại, người ta không khuyến khích dùng define để định nghĩa 1 số. Nên dùng const
const int max = 10;
cám ơn bạn, do mình lâu không code, nên có nhẫm lẫn xíu.
bạn có thể nói rõ hơn cho mình và mọi người hiểu tại sao lại không hiểu khích không?
Theo mình hiểu cơ bản như này:.
define thi giống macro, nghĩa là khi biên dịch thì nó sẽ bỏ qua-> không có lợi khi debug
còn const int max = 10. thì nó là biến hằng. đây mới là hằng số thực sự trong C. có gì bạn bổ sung thêm giúp mình
Bạn thử đoán xem kết quả của đoạn code này ra bao nhiêu:
#define ten 5+5
std::cout << ten*ten << endl;
cái này khắc phục bẳng cách thêm dấu ngoặc là được mà, còn tại sao lại cần thêm, thì do bản chất của nó, khi biên dịch gặp chỗ nào co ten thì nó thay thế = cái 5+5. Theo bạn đây là lý do, thì mình thấy chưa thực sự quan trọng.
Không phải lúc nào bạn cũng thêm dấu ngoặc vào. Bạn thêm nhưng người khác không thêm. Dùng const sẽ đảm bảo hơn là dùng define, vì define không đảm bảo về kiểu.
Từ khoá google: why const not define c++
1 số link liên quan:
https://cboard.cprogramming.com/cplusplus-programming/96595-static-const-vs-sharpdefine.html
ok cám ơn bạn vì một số thông tin bổ ích.