30/09/2018, 18:24
Không hiểu code trong C
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int s = 1;//tim kc nn tu s den tat ca cac dinh
int const max = 20;
int a[max];//day so cho truoc
int mtk[max][max], n;
int d[max][max];//d[i][j]:kcnho nhât tu ai den aj
int p[max][max];//p[i][j]:dinh truoc dinh j tren duong nn tu i den j
char *tenfile = "E:\daytang.txt";
int const avc = -100; //am vo cuc
void DocFile()
{
int x, i, j;
FILE *f = fopen(tenfile, "r");
if (f == NULL)
{
printf("
File %s khong co", tenfile);// exit(0);
}
n = 0;
while (fscanf(f, "%d", &x) != EOF) a[++n] = x;
fclose(f);
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (i == j) mtk[i][j] = 0;
else mtk[i][j] = avc;
for (i = 1; i<n; i++)
for (j = i + 1; j <= n; j++)
if (a[i] <= a[j]) mtk[i][j] = 1;
}
void Floyd()
{
int i, j, k;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
{
d[i][j] = mtk[i][j]; p[i][j] = i;
}
for (k = 1; k <= n; k++)
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (d[i][j]<d[i][k] + d[k][j])
{
d[i][j] = d[i][k] + d[k][j]; p[i][j] = p[k][j];
}
}
void main()
{
int i, j, k, i0, j0;
DocFile();
for (i = 1; i <= n; i++)
printf("%3c%d", 'a', i);
printf("
");
for (i = 1; i <= n; i++)
printf("%4d", a[i]);
Floyd();
printf("
Day con khong giam dai nhat: ");
k = avc;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (d[i][j]>k)
{
k = d[i][j]; i0 = i; j0 = j;
}
k = j0;
while (k != i0)
{
printf("a%d<--", k);
k = p[i0][k];
}
printf("a%d: chieu dai=%d", i0, d[i0][j0] + 1);
printf("
");
system("pause");
}
Mọi người có thể giải thích những câu lệnh trên với
Bài liên quan
Phải nói rõ xem đoạn nào ko hiểu chứ?
xl đây nè
Giải thích:
FILE *f = fopen(tenfile, "r");
mở file tenfile ở chế độ chỉ đọc “r” rồi gán việc mở file này cho con trỏ f.
kiểm tra xem file tenfile đã đc tạo hay đã tồn tại trước đó hay chưa. Nếu con trỏ
f == NULL
tức là chưa có file và in ra"\nFile %s khong co"
hàm fscanf để lấy giá trị trong một file, nên ở đây đoạn code này nghĩa là scan qua file tenfile rồi lấy giá trị kiểu int trong đó gán cho biến x.
và ý nghĩa toàn bộ đoạn này là scan qua file tenfile rồi đưa từng giá trị int trong file đó vào mảng a, cứ đưa cho đến khi hết file (EOF) thông qua biến x.
nếu vậy nếu chuyển qua C++ được không vậy
EOF là gì vậy bạn minh ko hiểu lắm
++n nghia là gì vậy
Cái này mình không biết, mình không tim hiểu về C++
EOF là End of file, kết thúc file ấy
để ++n trong mảng a làm chi vậy
Nghĩa là “End Of File”
Bạn cứ mặc định EOF là một giá trị mà nếu bạn muốn kểm tra file đã kết thúc hay chưa thì cứ cho nó bằng EOF.
Để nếu trong file tenfile có nhiều hơn 1 giá trị kiểu int thì nó sẽ gán vào những phần tử tiếp theo trong mảng a.
Nhưng ở đây dùng ++n tức là người ta muốn gán trị từ phần tử a[1] trở đi chứ ko phải là a[0] vì ++n tức là nó tăng n trước khi n được sử dụng còn n++ là sử dụng n rồi mới tăng.