Top Banner
Faculty of Information Technology 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 Nội
37

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

Jul 10, 2018

Download

Documents

vuongnhan
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 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

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

Page 2: 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

• 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

Page 3: 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

• 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

Page 4: 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

• 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

Page 5: 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

• 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;

}

Page 6: 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

• 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];

}

Page 7: 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

• 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;

}

}

Page 8: 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

• 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;

}

}

Page 9: 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

• 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;

}

Page 10: 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

• 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

Page 11: 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

• 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);

Page 12: 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

• 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);

}

Page 13: 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

• 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; }

Page 14: 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

• 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

Page 15: 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

• 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

Page 16: 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

• 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

Page 17: 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

• 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;}

Page 18: 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

• 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;}

Page 19: 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

• 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;}

Page 20: 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

• 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;}

Page 21: 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

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

Page 22: 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

• 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

Page 23: 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

• 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

Page 24: 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

• 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);

Page 25: 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

• 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";

}

Page 26: 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

• 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;

}

Page 27: 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

• 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;

}

Page 28: 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

• 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]; }

}

Page 29: 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

• 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;}

}

}

Page 30: 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

• 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;}

}

}

Page 31: 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

• 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;

}

Page 32: 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

BÀI TẬP

Page 33: 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

• 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

Page 34: 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

• 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

Page 35: 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

• 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

Page 36: 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

• 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

Page 37: 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

End of chapter 3

NCT.FIT.HNUE