NGÔN NGỮ LẬP TRÌNH C/C++fit.hnue.edu.vn/~trungnc/TextBookAndLectureNote/Nhap mon... · 2018-04-22 · • Khai báo và truy cập mảng • Nhập mảng, in mảng, duyệt
Post on 10-Jul-2018
228 Views
Preview:
Transcript
Fa
cu
lty o
f In
form
ati
on
Te
ch
no
log
y
NGÔN NGỮ LẬP TRÌNH C/C++
Nguyễn Chí Trung
Khoa Công nghệ thông tin
Đại học Sư Phạm Hà Nội
• Sử dụng mảng một chiều trong chương trình
• Truyền trực tiếp mảng một chiều vào hàm
Chương 3. Dữ liệu kiểu mảng
• Khai báo và truy cập mảng
• Nhập mảng, in mảng, duyệt mảng để tính toán
• Sắp xếp mảng
• Tìm kiếm nhị phân trên mảng
Sử dụng mảng một chiều trong chương trình
• Khai báo mảng
o kiểu_mảng tên_mảng[kíchthước]
• Ví dụ
o int a[n]; // n là hằng số xác định
o int b[5] = {3, 6, 12, 9, 2};
o float c[] = {3.14, 9.15, 2.718, 9.5};
• Truy cập mảng
– Phần tử thứ i được truy cập bởi a[i], với i = 0, 1, …, n-1.
• Địa chỉ của mảng
– Tên mảng là một hằng địa chỉ, đó là a hoặc &a[0]
• Địa chỉ và giá trị của một phần tử của mảng
– Địa của phần tử thứ i là &a[i] hoặc (a+i)
– Giá trị của phần tử thứ i là a[i]
Khai báo và truy cập mảng một chiều
NCT.FIT.HNUE 4
• Bài toán: Nhập mảng; In ra màn hình mảng; Đưa ra màn hình vị trí
và giá trị các phần tử lớn hơn giá trị trung bình của mảng.
Nhập mảng, in ra mảng và duyệt mảng để tính toán
NCT.FIT.HNUE 5
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
int main(){
float a[10];
int n,i;
float tb;
// nhap mang
cout<<"\n nhap n: "; cin>>n;
for(i=0;i<n;i++) {
cout<<"a["<<i<<"]= ";
cin>>a[i]; }
// In mang ra man hinh
cout<<"\n mang vua nhap:";
for(i=0;i<n;i++) cout<<setw(5)<<a[i];
cout<<"\n";
// In ra cac phan tu > TB
for(i=0,tb=0;i<n;i++)tb+=a[i];tb/=n;
for(i=0;i<n;i++)
if (a[i]>tb)cout<<i<< ":"<<a[i]<<"; ";
return 0;
}
• Bài toán: Nhập mảng; sắp xếp; In kết quả sắp xếp
Thuật toán sắp xếp mảng
NCT.FIT.HNUE 6
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
int main(){
float a[10];
int n,i,j;
float tg;
// nhap mang
cout<<"\n nhap n: "; cin>>n;
for(i=0;i<n;i++) {
cout<<"a["<<i<<"]= ";
cin>>a[i]; }
// sap xep mang
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[j]<a[i])
{tg=a[i]; a[i]=a[j]; a[j]=tg; }
// in mang ra man hinh
cout<<"\n sau khi sap xep :";
for(i=0;i<n;i++)
cout<<setw(5)<<a[i];
}
• Bài toán: Nhắc lại thuật toán sắp xếp chọn trực tiếp tối ưu
Thuật toán sắp xếp mảng
NCT.FIT.HNUE 7
for(i=0; i<n;i++){
k=i;
for(j=i+1;j<n;j++)
if (a[j]<a[k]) k=j;
if (k!=i) {
tg=a[k]; a[k]=a[i];a[i]=tg;
}
}
• Bài toán: Khi sắp xếp mảng của một dãy đối tượng thì tên đối
tượng cũng phải được đổi chỗ tương ứng (đổi áo thì phải đổi
mũ)
Thuật toán sắp xếp mảng
NCT.FIT.HNUE 8
for(i=0;i<n;i++)b[i]=i;
for(i=0;i<n;i++){
k=i;
for(j=i+1;j<n;j++)
if (a[j]<a[k]) k=j;
if (k!=i) {
tg=a[k]; a[k]=a[i];a[i]=tg;
tg2=b[k];b[k]=b[i];b[i]=tg2;
}
}
• Bài toán: Nhập mảng; Sắp xếp mảng; Kiếm tra xem trong mảng có
phần tử bằng x hay không?
Thuật toán tìm kiếm nhị phân
NCT.FIT.HNUE 9
...
int main(){
float a[10]; int n,i,j;
// nhap mang
cout<<"\n nhap n: "; cin>>n;
for(i=0;i<n;i++) {
cout<<"a["<<i<<"]= ";
cin>>a[i]; }
float x;
// sap xep mang
for(i=1;i<n;i++)
for(j=n-1;j>=i;j--)
if(a[j]<a[j-1])
{x=a[j]; a[j]=a[j-1]; a[j-1]=x; }
// thuat toan tim kiem nhi phan
int k, ok=0;
i=0;j=n-1;
cout<<"\n nhap x: "; cin>>x;
while (i<j&&!ok){
k=(i+j)/2; cout<<"\n"<<k;
if(x==a[k])ok=1;
else if(x>a[k])i=k+1;
else j=k-1;}
if(ok)cout<<"\n co x trong mang";
else cout<<"\n khong co x trong mang";
return 0;
}
• Khai báo và gọi hàm
• Nhập mảng, sắp xếp mảng, in mảng qua hàm
• Hàm tỉa mảng
Truyền trực tiếp mảng một chiều vào hàm
• Các thao tác cơ bản
Khai báo, định nghĩa và gọi hàm
NCT.FIT.HNUE 11
Khai báo, định nghĩa hàm
void Sample(float x[], int m) {
// Nội dung hàm: Viết x[i] để truy cập phần tử thứ i của mảng
// Giá trị của mảng x bị thay đổi trong hàm sẽ được giữ lại khi
// ra khỏi hàm
// Vậy không thể truyền mảng như tham số giá trị vào hàm.
}
Khai báo mảng thực sự
float a[100];
int n;
Gọi hàm
Sample(a,n);
• Ví dụ 1: Nhập mảng; Sắp xếp; In kết quả sắp xếp
Truyền trực tiếp mảng vào hàm
NCT.FIT.HNUE 12
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
void iarray(float x[],int m,char cx)
{
for(int i=0;i<m;i++)
{ cout<<cx<<"["<<i+1<<"]= ";
cin>>x[i]; }
}
void oarray(float x[],int m) {
for(int i=0;i<m;i++) {
cout<<x[i]<<", ";
}
cout<<endl;
}
void sort(float x[],int m){
int i,j; float tg;
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
if(x[j]<x[i]) {tg=x[i]; x[i]=x[j]; x[j]=tg; }
}
void main(){
float a[100]; int n;
cout<<setiosflags(ios::showpoint);
cout<<setprecision(3);
cout<<"\n nhap n: "; cin>>n;
iarray(a,n,'a');
cout<<"a: "; oarray(a,n);
sort(a,n);
cout<<"sort a: "; oarray(a,n);
}
• Ví dụ 2: Nhập mảng; Tỉa mảng; In kết quả sau khi tỉa mảng
Truyền trực tiếp mảng vào hàm
NCT.FIT.HNUE 13
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
void iarray(float x[],int m,char cx)
{
for(int i=0;i<m;i++)
{ cout<<cx<<"["<<i+1<<"]= ";
cin>>x[i]; }
}
void oarray(float x[],int m) {
for(int i=0;i<m;i++) {
cout<<x[i]<<", ";
}
cout<<endl;
}
void prune(float x[],int m,int &k){
int i,j;k=0;
for(i=1;i<m;i++){
int found=0;
for(j=i-1;j>=0;j--)
if(x[i]==x[j])found=1;
if (!found)x[++k]=x[i];}
}
int main(){
float a[100]; int n;
cout<<setiosflags(ios::showpoint);
cout<<setprecision(3);
cout<<"\n nhap n: "; cin>>n;
iarray(a,n,'a'); cout<<"a: "; oarray(a,n);
prune(a,n,k);
cout<<"\n array after prune: ";
oarray(a,k+1); return 0; }
• Khai báo, truy cập mảng, khởi tạo mảng khi khai báo
• Vào/ra mảng
• Tính TBC theo hàng và của cả mảng
• Tìm phần tử lớn nhất trong số các phần tử nhỏ nhất của
các hàng
Sử dụng mảng hai chiều trong chương trình
• Khai báo mảng
o kiểu_mảng tên_mảng[kíchthước1] [kíchthước2]
• Ví dụ
– float a[5][7];
• Truy cập mảng
– Truy cập dạng a[i][j]
• Khởi tạo mảng khi khai báo
– int a[2, 3] = { (3, 6, 12) , (1, 4, 5)};
– float b[][2] = { (1, 5) , (2, 7), (3, 8), (4, 2)};
Khai báo và truy cập mảng
NCT.FIT.HNUE 15
• Ví dụ
– float a[m][n]; //m , n là các hằng số xác định
• Bộ nhớ
– Dãy các byte liên tiếp chia thành m đoạn (thứ tự từ 0 trở đi),
mỗi đoạn gồm n ô nhớ (thứ tự từ 0 trở đi), mỗi ô nhớ chiếm 4
byte tương ứng với kiểu float.
• Vị trí của phần tử hàng i cột j
– Vị trí là i*n + j với i = 0, 1, …, m-1; j = 0, 1, …, n-1
• Địa chỉ của mảng
– Địa chỉ của mảng là (float*)a
• Địa chỉ và giá trị của một phần tử ở dòng i cột j
– Địa chỉ là ((float*)a + i*n+j)
– Giá trị là a[i][j] hoặc *((float*)a + i*n+j)
Địa chỉ của các phần tử của mảng hai chiều
NCT.FIT.HNUE 16
• Ví dụ 1: Nhập mảng và in mảng
Sử dụng trực tiếp mảng hai chiều trong chương trình
NCT.FIT.HNUE 17
#include <iostream, conio,
iomanip>
const int maxM = 10;
const int maxN = 20;
int main(){
float a[maxM][maxN];
int m,n,i,j;
cout<<"\n nhap m: "; cin>>m;
cout<<"\n nhap n: "; cin>>n;
for(i=0;i<m;i++)
for(j=0;j<n;j++){
cout<<"a["<<i<<","<<j<<"] = ";
cin>>a[i][j]; }
cout<<setiosflags(ios::showpoint)
<<setprecision(3);
cout<<"\n mang da nhap: \n";
for(i=0;i<m;i++) {
for(j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl; }
return 0;}
• Ví dụ 2: Nhập mảng; In mảng; Tính TBC theo hàng và cả mảng
Sử dụng trực tiếp mảng hai chiều trong chương trình
NCT.FIT.HNUE 18
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
const int maxsize = 10;
int main(){
float a[maxsize][maxsize];
int m,n,i,j;
cout<<"\n nhap m: "; cin>>m;
cout<<" nhap n: "; cin>>n;
for(i=0;i<m;i++)
for(j=0;j<n;j++){
cout<<"a["<<i<<","<<j<<"] = ";
cin>>a[i][j]; }
cout<<setiosflags(ios::showpoint)
<<setprecision(3);
cout<<"\n mang da nhap: \n";
for(i=0;i<m;i++) {
for(j=0;j<n;j++) cout<<a[i][j]<<" ";
cout<<endl;
}
float tb,s=0;
for(i=0;i<m;i++)
{ for(tb=0,j=0;j<n;tb+=a[i][j],j++);
s+=tb;
cout<<"\n TBC cua hang thu “
<<i<<": "<<tb/n;
}
cout<<"\n TBC cua ca mang la: "<<s/(m*n);
return 0;}
• Ví dụ 3: Nhập mảng; In mảng; Tìm max của min các hàng
Sử dụng trực tiếp mảng hai chiều trong chương trình
NCT.FIT.HNUE 19
#include <iostream, conio, iomanip>
const int maxsize = 10;
int main(){
float a[maxsize][maxsize];
int m,n,i,j;
cout<<"\n nhap m: "; cin>>m;
cout<<"\n nhap n: "; cin>>n;
for(i=0;i<m;i++)
for(j=0;j<n;j++){
cout<<"a["<<i<<","<<j<<"] = ";
cin>>a[i][j]; }
cout<<setiosflags(ios::showpoint)
<<setprecision(3);
cout<<"\n mang da nhap: \n";
for(i=0;i<m;i++) {
for(j=0;j<n;j++) cout<<a[i][j]<<" ";
cout<<endl; }
float max, min;
int i0,j0,i1,j1;
max=a[0][0]; i0=0; j0=0;
for(i=0;i<m;i++)
{ min=a[i][0]; i1=i; j1=0;
for(j=1;j<n;j++)
if (min>a[i][j]) {
min=a[i][j]; i1=i; j1=j; }
if (i==0 || max<=min){
max=min;
i0=i1; j0=j1; }
}
cout<<"\nphan tu lon nhat trong so cac
phan tu nho nhat cua cac hang: "
<<max;
cout<<"\n("<<i0<<","<<j0<<")";
return 0;}
• Ví dụ 3: Quan sát đoạn trình tìm //max{min}
Sử dụng trực tiếp mảng hai chiều trong chương trình
NCT.FIT.HNUE 20
float max, min;
int i0,j0,i1,j1;
max=a[0][0]; i0=0; j0=0;
for(i=0;i<m;i++)
{ min=a[i][0]; i1=i; j1=0;
for(j=1;j<n;j++)
if (min>a[i][j]) {
min=a[i][j]; i1=i; j1=j;
}
if (max<=min){
max=min;
i0=i1; j0=j1; }
}
cout<<"\nphan tu lon nhat trong so
cac phan tu nho nhat cua cac hang: "
<<max;
cout<<"\n("<<i0+1<<","<<j0+1<<")";
return 0;}
VD1: Tính TBC các hàng và toàn bộ mảng
MẪU DUYỆT MẢNG 2 CHIỀU
NCT.FIT.HNUE 21
• VD2: Tính min các hàng và max của các min
MẪU DUYỆT MẢNG 2 CHIỀU
NCT.FIT.HNUE 22
• Khai báo và gọi hàm
• Nhập mảng, sắp xếp mảng, in mảng qua hàm
• Hàm tỉa mảng
Truyền trực tiếp mảng hai chiều vào hàm
• Các thao tác cơ bản
Truyền trực tiếp mảng hai chiều vào hàm
NCT.FIT.HNUE 24
Khai báo, định nghĩa hàm
void Sample(float x[][n], int p, int q) {
// Nội dung hàm: Viết x[i][j] để truy cập phần tử thứ (i, j)
// Giá trị của mảng x bị thay đổi trong hàm sẽ được giữ lại khi
// ra khỏi hàm
}
Khai báo mảng thực sự
const int maxM = 100;
const int maxN = 100;
float a[maxM][maxN];
int m,n;
Gọi hàm
Sample(a,m,n);
• Ví dụ 1: Nhập mảng và In mảng;
Truyền trực tiếp mảng hai chiều vào hàm
NCT.FIT.HNUE 25
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
const int size = 10;
int a[size][size];
int m,n;
void Nhap(int x[][size],int p, int q);
void InMang(int x[][size],int p, int q);
int main() {
cout<<"nhap m,n = "; cin>>m>>n;
Nhap(a,m,n); InMang(a,m,n);
return 0;
}
void Nhap(int x[ ][size],int p, int q){
int i,j;
for (i=0;i<p;i++)
for (j=0;j<q;j++) {
cout<<"a["<<i<<","<<j<<"]= ";
cin>>x[i][j]; }
}
void InMang(int x[ ][size],int p, int q){
int i,j;
for (i=0;i<p;i++)
{ for (j=0;j<q;j++)
cout<<setw(3)<<x[i][j];
cout<<endl; }
cout<<"-------------\n";
}
• Ví dụ 2: Nhập mảng;In mảng; Tìm cột có nhiều số -1 nhất
Truyền trực tiếp mảng hai chiều vào hàm
NCT.FIT.HNUE 26
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
const int size = 10;
int a[size][size];
int m,n;
void Nhap(int a[][size],int m, int n);
void InMang(int a[][size],int m, int n);
void DuyetTheoCot(int a[][size],int m,
int n);
int main() {
cout<<"nhap m,n = "; cin>>m>>n;
Nhap(a,m,n); InMang(a,m,n);
DuyetTheoCot(a,m,n);
return 0;
}
void Nhap(int a[ ][size],int m, int n){
int i,j;
... }
void InMang(int a[ ][size],int m, int n){
...}
void DuyetTheoCot(int a[ ][size],int m,
int n){
int i,j,d,s=0,j0=0;
for (j=0;j<n;j++)
{for(d=0,i=0;i<m;i++)
if(a[i][j]==-1)d++;
if(s<d){s=d;j0=j; }
}
cout<<"\n Mon nhieu HS khong tham
gia la: "<<j0;
cout<<"\n So HS khong tham gia: "<<s;
}
• CHÚ Ý SỬ DỤNG FILE VĂN BẢN
• Khi xử lí mảng 2 chiều, dữ liệu nhiều, để tránh nhập nhiều lần từ
bàn phím, có thể từ file văn bản theo mẫu ở cột bên trái
• Dữ liệu cũng có thể in ra file văn bản khác theo mẫu cột bên phải
Truyền trực tiếp mảng hai chiều vào hàm
NCT.FIT.HNUE 27
Nhập dữ liệu từ file Dùng 2 file để nhập và xuất DL
int main() {
freopen("mang.inp","r",stdin);
cin>>m>>n;
Nhap(a,m,n); InMang(a,m,n);
DuyetTheoCot(a,m,n);
return 0;
}
int main() {
freopen("mang.inp","r",stdin);
freopen("mang.out",“w",stdout);
cin>>m>>n;
Nhap(a,m,n); InMang(a,m,n);
DuyetTheoCot(a,m,n);
return 0;
}
• CHÚ Ý: Khi nhập dữ liệu từ file văn bản thì không cần các câu
hướng dẫn nhập dữ liệu cho người chạy chương trình như khi nhập
dữ liệu từ bàn phím.
Truyền trực tiếp mảng hai chiều vào hàm
NCT.FIT.HNUE 28
Nhập dữ liệu từ file Nhập dữ liệu từ bàn phím
int main() {
freopen("mang.inp","r",stdin);
cin>>m>>n;
.....
}
void Nhap(int a[ ][size],int m, int
n){
int i,j;
for (i=0;i<m;i++)
for (j=0;j<n;j++) cin>>a[i][j];
}
int main() {
freopen("mang.inp","r",stdin);
cout<<"nhap m,n = ";
cin>>m>>n; ....
}
void Nhap(int a[ ][size],int m, int n){
int i,j;
for (i=0;i<m;i++)
for (j=0;j<n;j++) {
cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j]; }
}
• Ví dụ 3: Nhập mảng; Sắp xếp tăng các hàng; In mảng;
Truyền trực tiếp mảng hai chiều vào hàm
NCT.FIT.HNUE 29
#include <iostream, conio, iomanip>
const int size = 10;
int a[size][size];
int m,n;
void Nhap(int a[ ][size],int m, int n);
void InMang(int a[ ][size],int m, int n);
void Sapxep(int a[ ][size],int m, int n);
void main() {
cout<<"nhap m,n = "; cin>>m>>n;
Nhap(a,m,n); InMang(a,m,n);
Sapxep(a,m,n); InMang(a,m,n);
}
void Nhap(int a[ ][size],int m, int n){
int i,j;
for (i=0;i<m;i++)
for (j=0;j<n;j++) {
cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j];}
}
void InMang(int a[ ][size],int m, int n){
int i,j;
for (i=0;i<m;i++)
{ for (j=0;j<n;j++) cout<<setw(3)<<a[i][j];
cout<<endl; }
cout<<"-------------\n";
}
void Sapxep(int a[ ][size],int m, int n){
int k,i,j,tg;
for (k=0;k<m;k++)
{ for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (a[k][j]<a[k][i])
{tg=a[k][i];a[k][i]=a[k][j];a[k][j]=tg;}
}
}
• Ví dụ 3: Quan sát thuật toán sắp xếp theo từng hàng;
Truyền trực tiếp mảng hai chiều vào hàm
NCT.FIT.HNUE 30
void Sapxep(int a[ ][size],int m, int n){
int k,i,j,tg;
for (k=0;k<m;k++)
{ for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (a[k][j]<a[k][i])
{tg=a[k][i];a[k][i]=a[k][j];a[k][j]=tg;}
}
}
• Ví dụ 3: Nhập mảng điểm; Đưa ra điểm cao nhất và các môn
Truyền trực tiếp mảng hai chiều vào hàm
NCT.FIT.HNUE 31
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
const int size = 10;
int a[size][size];
int m,n;
void Nhap(int a[][size],int m, int n);
void InMang(int a[][size],int m, int n);
void DiemMax(int a[][size],int m, int n);
int main() {
freopen("bangdiem.txt","r",stdin);
freopen("ketqua.txt","w",stdout);
cin>>m>>n;
Nhap(a,m,n); InMang(a,m,n);
DiemMax (a,m,n);
return 0;
}
void Nhap(int a[ ][size],int m, int n){
... }
void InMang(int a[ ][size],int m, int n){
... }
void DiemMax (int a[ ][size],int m, int n){
int i,j,max;
cout<<"Diem cao nhat cua tung HS la:\n";
for (i=0;i<m;i++){
max=a[i][0];
for(j=1;j<n;j++)
if(max<a[i][j])max=a[i][j];
cout<<"HS "<<i+1<<": "<<max
<<". Do la cac mon: ";
for(j=0;j<n;j++)
if(a[i][j]==max) cout<<j+1<<", ";
cout<<endl;
}
BÀI TẬP
• Bài 1. Lập chương trình với các hàm và đối số phù hợp để tính giá
trị đa thức p(x)=anxn+an-1x
n-1+…+a1x+a0 tại điểm x0 theo lược đồ
Hoocner. Các giá trị x0, n, an, an-1, …, a1, a0 được nhập từ bàn
phím.
Lược đồ Hooner:
Hoặc
BÀI TẬP
NCT.FIT.HNUE 33
nk
cab
xbc
ab
kkk
kk ,101
00
a0 a1 … an x0
c1 … cn
b0 b1 … bn p(x0)=bn
• Bài 2. Lập chương trình với các hàm và đối số phù hợp để thực
hiện các công việc sau đây:
1) Nhập từ bàn phím số nguyên n, họ tên và điểm thi học kì môn
Toán của lớp 11A4 có n học sinh.
2) Tìm điểm cao nhất và cho biết đó là những học sinh nào?
3) Tính tỉ lệ học sinh đạt loại khá giỏi (điểm thi ≥ 8).
4) Tính tỉ lệ học sinh có điểm cao hơn điểm trung bình của lớp.
BÀI TẬP
NCT.FIT.HNUE 34
• Bài 3. Lập chương trình với các hàm và đối số phù hợp để thực
hiện các công việc sau đây:
1) Nhập từ file văn bản DIEM.TXT số n (ở dòng 1) biểu thị số
HS của lớp 11A2, và số báo danh cùng với điểm thi môn Tin
của n HS (bắt đầu từ dòng 2, mỗi cặp số trên một dòng).
2) Đưa ra file văn bản KQ.TXT các thông tin sau đây:
2.1) Số lượng và tỉ lệ HS ở mức ĐẠT (điểm thi >= 5.0)
2.2) Thống kê từng loại điểm theo số lượng, tần số và tần suất
2.3) Danh sách (theo cột) gồm số báo danh và điểm thi của các
HS được sắp xếp giảm dần theo điểm thi
BÀI TẬP
NCT.FIT.HNUE 35
• Bài 4 Lập chương trình với các hàm và đối số phù hợp để thực hiện
các công việc sau đây:
1) Nhập từ file văn bản CHAMCONG.TXT hai số m và n (ở dòng 1)
và bảng chấm công theo giờ làm việc ngoài hiện trường của m
công nhân tại n thời điểm (m hàng, mỗi hàng gồm n số 0 hoặc 1;
số thứ j trên hàng i là 0 hay 1 tương ứng biểu thị công nhân i Có
hay Không làm việc tại thời điểm j.)
2) Đưa ra file văn bản THONGKE.TXT các thông tin sau đây:
2.1) Các thời điểm có nhiều công nhân vắng mặt nhất, cụ thể là
vắng bao nhiêu công nhân
2.2) Số hiệu của các công nhân tham gia nhiều thời điểm làm việc
nhất, cụ thể là bao nhiêu thời điểm
BÀI TẬP
NCT.FIT.HNUE 36
End of chapter 3
NCT.FIT.HNUE
top related