Bài 46 : Tạo file văn bản có tên là:"INPUT.TXT" có cấu trúc như sau :

Tải code tại đây
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168

/* Bài 46/128/SBT trường CNTP : Tạo file văn bản có tên là:"INPUT.TXT" có cấu trúc như sau :
 - Dòng đầu tiên ghi N (N là số nguyên dương nhập từ bàn phím) .
 - Trong các dòng tiếp theo ghi N số nguyên ngẫu nhiên trong phạm vi từ 0 đến 100,mỗi dòng 10 số (các số cách nhau ít nhất một khoảng trắng) .
Hãy đọc dữ liệu của file "INPUT.TXT" và lưu vào mảng một chiều A.Thực hiện các công việc sau :
 - Tìm giá trị lớn nhất của mảng A .
 - Đếm số lượng số chẵn,số lượng số lẻ của mảng A .
 - Hãy sắp xếp các phần tử theo thứ tự tăng dần .
Hãy ghi các kết quả vào file văn bản có tên OUTPUT.TXT theo mẫu sau :
  INPUT.TXT |  OUTPUT.TXT
18    |Cau a:99
87 39 78 19 89 4 40 98 29 65 |Cau b:9 9
20 43 1 99 38 34 58 4  |Cau c:
    |1 4 4 19 20 29 34 38 39 40
           |43 58 65 78 87 89 98 99 
              577.cpp */

// Khai báo các thư viện sử dụng trong chương trình .
#include<stdio.h>    
#include<conio.h>
#include<time.h>
#include<Windows.h>
#define MAX 100

// Hàm nhập số lượng phần tử của mảng .
void NhapN(int &n)
{
 quaylai:printf("\nNhap vao so luong phan tu cua mang:n=");
 scanf("%d",&n);
 if(n<1||n>MAX)
 {
  printf("\nSo ban nhap vao khong hop le!Xin vui long nhap lai!");
  goto quaylai; // Dùng hợp ngữ thay cho vòng lặp chức năng nếu người dùng nhập vào số không thỏa thì chương trình cho phép nhập lại đến khi nào nhập đúng thì thôi .
 }
}

// Hàm ghi File INPUT.TXT
void GhiFile(int a[],int n)
{
 FILE*pFile;
 pFile=fopen("C:\\INPUT.TXT","wt"); // File được tạo nằm trong ổ C .
 fprintf(pFile,"So Luong Cac Phan Tu:%d\n",n); // Ghi giá trị số lượng phần tử vào file .
 for(int i=0;i<n;i++)
 {
  a[i]=rand()%101; // tạo ngẫu nhiên trong đoạn [0,100] .
  fprintf(pFile,"%4d",a[i]); // Ghi giá trị các phần tử trong mảng vào file .
 }
 fclose(pFile); // Đóng file .
}

// Hàm đọc file INPUT.TXT vào chương trình
void DocFile(int a[],int n)
{
 FILE*pFile;
 pFile=fopen("C:\\INPUT.TXT","r+t"); // Mở file ra .
 if(pFile==NULL)
 {
  printf("\nKhong doc duoc File INPUT.TXT");
 }
 else
 {
  for(int i=0;i<n;i++)
  {
   fscanf(pFile,"%d\t",&a[i]); // Đọc các giá trị phần tử trong file vào chương trình .
   printf("a[%d]=%d\n",i,a[i]); // Xuất các giá trị ra màn hình .
  }
 }
 fclose(pFile); // Đóng file .
}

// Hàm tìm giá trị lớn nhất trong mảng và ghi vào file .
void TimMax(int a[],int n)
{
 int max=a[0]; // khởi tạo max = phần tử đầu tiên trong mảng .
 FILE*pFile;
 pFile=fopen("C:\\OUTPUT.TXT","wt"); // Mở file ra .
 for(int i=1;i<n;i++)
 {
  if(a[i]>max)
  {
   max=a[i];
  }
 }
 fprintf(pFile,"Cau a:%d\n",max); // Ghi giá trị max tìm được vào file .
 fclose(pFile); // Đóng file .
}

// Hàm đếm số lượng các phần tử chẵn,phần tử lẻ trong mảng và ghi vào file .
void DemChanLe(int a[],int n)
{
 int dem=0,dem1=0;
 FILE*pFile;
 pFile=fopen("C:\\OUTPUT.TXT","at"); // Mở file ra . Ở đây ta phải để định dạng file là "at" hay là để "a" cũng được . Chức năng là mở tập tin và ghi tiếp dữ liệu cần nạp vào cuối tập tin . Ta không thể xài lại định dạng "wt" vì khi dữ liệu mới vào thì tất cả dữ liệu cũ sẽ bị xóa đi hết .
 for(int i=0;i<n;i++)
 {
  if(a[i]%2==0)
  {
   dem++; // Đếm số lượng các giá trị chẵn trong mảng .
  }
  else
  {
   dem1++; // Đếm số lượng các giá trị lẻ trong mảng .
  }
 }
 fprintf(pFile,"Cau b:%d\t%d\n",dem,dem1); // Ghi dữ liệu vào file .
 fclose(pFile); // Đóng file .
}

// Hàm hoán vị 2 số nguyên .
void HoanVi(int &x,int &y)
{
 int temp=x;
 x=y;
 y=temp;
}

// Hàm sắp xếp mảng tăng dần bằng thuật toán Interchange Sort .
void SapTangDan(int a[],int n)
{
 for(int i=0;i<n-1;i++)
 {
  for(int j=i+1;j<n;j++)
  {
   if(a[i]>a[j])
   {
    HoanVi(a[i],a[j]);
   }
  }
 }
}

// Hàm xuất mảng sau khi đã được sắp tăng dần và ghi vào file .
void XuatMang(int a[],int n)
{
 FILE*pFile;
 pFile=fopen("C:\\OUTPUT.TXT","at"); // Mở file ra . Ở đây ta phải để định dạng file là "at" hay là để "a" cũng được . Chức năng là mở tập tin và ghi tiếp dữ liệu cần nạp vào cuối tập tin . Ta không thể xài lại định dạng "wt" vì khi dữ liệu mới vào thì tất cả dữ liệu cũ sẽ bị xóa đi hết .
 fprintf(pFile,"Cau c:\n"); // Ghi vào file .
 for(int i=0;i<n;i++)
 {
  fprintf(pFile,"%4d",a[i]); // Ghi vào file .
 }
 fclose(pFile); // Đóng file .
}

// Hàm MeNu gom hết mọi dữ liệu làm ở trên vào .
void MeNu()
{
 int a[MAX],n,tieptuc;
 quaylai:NhapN(n);
 GhiFile(a,n);
 DocFile(a,n);
 TimMax(a,n);
 DemChanLe(a,n);
 SapTangDan(a,n);
 XuatMang(a,n);
 // Thông báo .
 printf("\nBan co muon tiep tuc thuc hien chuong trinh hay khong ? Neu co bam phim C,nguoc lai bam bat ky 1 phim nao khac de ket thuc!");
 tieptuc=getch(); // Lấy key từ bàn phím .
 if(tieptuc=='c'||tieptuc=='C') // Xác nhận khi người dùng nhấn phím C thì sẽ quay lại chương trình .
 {
  system("cls"); // Được hỗ trợ bởi thư viện "Windows.h" chức năng để xóa hết mọi dữ liệu cũ cho phép người dùng nhập vào dữ liệu mới .
  goto quaylai; // Dùng hợp ngữ thay cho vòng lặp . Chức năng để bắt đầu lại chương trình mới . 
 }
}

// Hàm chính .
void main()
{
 MeNu(); // Gọi lại hàm MeNu.
}

Nhận xét

Bài đăng phổ biến từ blog này

Bài 17 : Viết chương trình nhập số nguyên lớn N (khai báo:long N) có k chữ số

Bài Tập Cây Nhị Phân Tìm Kiếm

Bài 22 : Viết chương trình nhập vào số nguyên dương n gồm 5 chữ số,kiểm tra xem các chữ số n có phải là số đối xứng hay không ?