Tìm các phần tử khác nhau giữa 2 mảng 1 chiều (Thao tác trên tệp tin)
Đề bài: Cho một tệp tin input1.txt
dòng 1 chứa: số phần tử của mảng thứ nhất.
dòng 2 chưa: các phần tử của mảng thứ nhất.
dòng 3 chứa: số phần tử của mảng thứ hai.
dòng 4 chứa: Các phần tử của mảng thứ hai.
Yêu cầu: -Đọc 2 mảng số nguyên trên.
-
Tìm phần tử xuất hiện trong mảng thứ nhất mà không xuất hiện trong mảng thứ hai, tinh tổng các phần tử đó và ghi xuống tập tin output1.txt
#include <stdio.h>
#include <String.h>void ReadFile(int intArray1[], int intArray2[], int &dong1, int &dong2)
{
FILE* fp = fopen(“input1.txt”, “rt”);
if (fp == NULL)
{
printf(“Truy cap that bai !”);
}
fscanf(fp, “%d”, &dong1);for (int i = 0; i < dong1; i++) { fscanf(fp, "%d ", &intArray1[i]); } fscanf(fp, "%d", &dong2); for (int j = 0; j < dong2; j++) { fscanf(fp, "%d ", &intArray2[j]); }
}
void KiemTravaXuatFile(int intArray1[], int intArray2[], int &dong1, int &dong2, FILE* fp1)
{
int Sum = 0;
int C[100];
int count = 0;
for (int i = 0; i < dong1; i++)
for (int j = 0; j < dong2; j++)
if (intArray1[i] != intArray2[j])
{
C[count] = intArray1[i];
count++;
Sum += intArray1[i];
}
for (int i = 0; i < count; i++)
{
fprintf(fp1, "%d ", C[i]);
}
fprintf(fp1, “ %d”, Sum);
}void main()
{
FILE* fp1 = fopen(“output1.txt”, “wt”);
int intArray[100], intArray2[100];
int dong1, dong2;
ReadFile(intArray, intArray2, dong1, dong2);
WriteFile(intArray, intArray2, dong1, dong2, fp1);
}
File input1.txt là như thế này ạ4
10 8 5 11
5
4 8 6 5 15
Kết quả mong muốn ở file output1.txt:10 11
21
và file ouput.txt của em nó ra như thế này:10 10 10 10 10 8 8 8 8 5 5 5 5 11 11 11 11 11
157
Cho em hỏi em sai chỗ nào ạ ?
Thật sự là xưa giờ giải thuật em toàn dùng stdin stdout với freopen không à, nên gặp cái này em bối rối quá
Update:
Em thấy chỗ không ổn trong thuật toán của anh:
Update cái nữa, code em đây anh:
Và file input với output của em có kết quả đúng
Anh xem thử @Mark
mình làm mẫu trên C++. bạn tham khảo cho vui nhé
Có thể dùng các hàm xây dựng sẵn trong C: