30/09/2018, 16:27
Hỏi cách truyền tham trị cho mảng 2 chiều
#include <stdio.h>
#include <stdlib.h>
#define MAXARR 2001
#define fi "NKPALIN.INP"
#define fo "NKPALIN.OUT"
void input(char *s);
void output(int l[][], int i, int j);
int max(int a, int b);
int main()
{
char s[MAXARR] = {};
char kq[MAXARR] = {};
int l[MAXARR][MAXARR] = {};
int i,j,d;
input(s);
for (i = 0; i < sizeof (s) / sizeof (s[0]); i++ )
for (j = 0; j< sizeof (s) / sizeof (s[0]); j++) {
if (s[i] == s[j]) {
l[i][j] = l[i-1][j-1] + 1;
}
else {
l[i][j] = max(l[i-1][j], l[i][j-1]);
}
}
i = sizeof (s) / sizeof (s[0]);
j = sizeof (s) / sizeof (s[0]);
output(l[][], i, j);
return 0;
}
void input(char* s)
{
FILE *f = fopen(fi,"rt");
fscanf(f,"%s", s);
fclose(f);
}
void output(int l[][], int i, int j)
{
FILE *f = fopen(fo,"wt");
int d;
d = -1;
while (i>0 && j>0) {
if (s[i] == s[j]) {
d++;
kq[d] = s[i];
}
else {
if (l[i][j] == l[i-1][j]) {
i--;
}
else j--;
}
}
fclose(f);
}
int max(int a, int b)
{
if (a > b) return(a);
else return(b);
}
Trong hàm output mình truyền mảng l[][] như thế bị báo lỗi, thế có cách nào truyền mảng 2 chiều không ?
Bài liên quan
Truyền tham trị tức là chỉ truyền giá trị mà không thay đổi nội dung của mảng 2 chiều gốc đúng không?
Thế thì @Byn chỉ cần truyền const vào là được
truyền const ? ý anh là truyền int l vào thôi ấy hả ?
oh no, sorry anh nhìn không kỹ. Đối với mảng 2 chiều, em bắt buộc phải truyền vào kích thước của chiều thứ nhất. Tức là thay vì truyền
l[][]
, em hải truyền vàol[3][]
nếu mảng thứ nhất độ dài là 3.À rồi em cảm ơn
Hình như phải truyền vào l[độ dài][độ dài] chứ nhỉ, em thử truyền 1 cái nhưng nó vẫn báo lỗi, truyền 2 cái thì được ?
Lúc em định nghĩa cái hàm thì chỉ cần truyền cái đầu tiên thôi.
Em mới vừa xóa nhưng nó báo lỗi ?
Cho anh xem toàn bộ code lại xem nào?
Đây ạ
Ai chà, anh già rồi, nhầm lẫn. Em không cần phải truyền tham số đầu, nhưng phải truyền cái sau. Anh sửa lại
Em chú ý cách truyền vào như thế này là sai nhé
Chỉ cần truyền tên mảng thôi
Và quan trọng hơn hết là đừng đặt biến một ký tự nữa
I moved 5 posts to a new topic: Cách truyền mảng 3 chiều vào hàm
Cho em hỏi luôn, cách lấy độ dài của dãy s thế đã đúng chưa ?
Đoạn lấy độ dài nào vậy @Byn? Ý anh là dòng code nào
chắc là đúng rồi :)) thay vì s[0], dùng sizeof(char) cũng dc
Ý em là nhập vào một mảng char s[] nhưng không biết độ dài bao nhiêu, lấy độ dài bằng dòng này được không ?
Bạn chạy thử sẽ biết ngay.
nếu s = “Byn”
Thì kế quả trả về là 4.
Tại sao lại là 4? VÌ mỗi chuỗi đều có thêm 1 ký tự kết thúc ‘\n’ mà ta không nhìn thấy.
Nếu là mảng thì em dùng hàm strlen ấy.
@ltd vì sao phải ép kiểu
(unsigned)strlen(szInput)
Chương trình của em thế này vì sao nó không chạy được, khi built chương trình thì nó hiện ra màn hình console rồi hiện ra cửa sổ chương trình has stop working :’(
Anh copy từ trang [cplusplus][1] thôi. Thực tế không cần ép kiểu.
strlen
trả vềsize_t
, tương đương vớiunsigned
rồi.Kiêm tra lại mấy cái chỗ mở file, coi thử có mở file được hay không rồi mới xử lý tiếp.
Mấy cái lỗi dạng này là do truy xuất vùng nhớ tầm bậy.
[1]: http://www.cplusplus.com/reference/cstring/strlen/
Không thể debug được, thế làm sao để kiểm tra lỗi vậy ?