o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 1 
Ỹ UẬ LẬ Ì 
ài p 4 – ần 12 
ảng, ỗi và kiể dữ liệ ó ấ rú 
ài p bắ b ộ : 
Bài 1: 
Viết chương trình tính ma trận chuyển vị. 
Prototype: int[][] chuyen_vi(int[][] matran) 
#include<iostream> 
using namespace std; 
int main(){ 
cout<<"Nhap m,n, cho ma tran A(m x n):"; 
int m,n; 
cin>>m>>n; 
//Khoi tao (nhap) mang m x n 
int a[m][n]; 
for(int i=0;i<m;i++) 
for(int j=0;j<n;j++){ 
cout<<"Nhap A["<<i<<"]["<<j<<"]:"; 
cin>>a[i][j]; 
} 
//Thuc hien chuyen vi 
int b[n][m]; 
for(int i=0;i<n;i++) 
for(int j=0;j<m;j++){ 
b[i][j]=a[j][i]; 
} 
//In mang ra man hinh 
cout<<"Ma tran ban dau:n"; 
for(int i=0;i<m;i++){ 
for(int j=0;j<n;j++){ 
cout<<a[i][j]<<" "; 
} 
cout<<endl; 
} 
cout<<"Ma tran chuyen vi:n"; 
for(int i=0;i<n;i++){ 
for(int j=0;j<m;j++){ 
cout<<b[i][j]<<" "; 
} 
cout<<endl; 
} 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 2 
Bài 2: 
Viết chương trình nhân hai ma trận. 
Prototype: int[][] nhanmatran(int[][] matran1, int[][] matran2) 
#include<iostream> 
#include <stdlib.h> 
using namespace std; 
int main(){ 
cout<<"Nhap m,n,p cho ma tran A(m x n), B(n x p):"; 
int m,n,p; 
cin>>m>>n>>p; 
srand(time(NULL)); 
//Khoi tao mang A (m x n), B(n x p) phan tu nguyen ngau nhien 
0~4 
int a[m][n]; 
for(int i=0;i<m;i++) 
for(int j=0;j<n;j++){ 
a[i][j]=rand()%5; 
} 
int b[n][p]; 
for(int i=0;i<n;i++) 
for(int j=0;j<p;j++){ 
b[i][j]=rand()%5; 
} 
//Thuc hien nhan ma tran 
int c[m][p]; 
for(int i=0;i<m;i++) 
for(int j=0;j<p ;j++){ 
int total=0; 
for(int k=0;k<n;k++) 
total+=a[i][k]*b[k][j]; 
c[i][j]=total; 
} 
//In mang ra man hinh 
cout<<"Ma tran A (m x n) ban dau:n"; 
for(int i=0;i<m;i++){ 
for(int j=0;j<n;j++){ 
cout<<a[i][j]<<" "; 
} 
cout<<endl; 
} 
cout<<"Ma tran B (n x p) ban dau:n"; 
for(int i=0;i<n;i++){ 
for(int j=0;j<p;j++){ 
cout<<b[i][j]<<" "; 
} 
cout<<endl;
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 3 
} 
cout<<"A x B = C (n x p):n"; 
for(int i=0;i<m;i++){ 
for(int j=0;j<p;j++){ 
cout<<c[i][j]<<" "; 
} 
cout<<endl; 
} 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 4 
Bài 3: 
Viết chương trình trả về về kí tự thứ i trong chuỗi, kiểm tra tính hợp lệ của i nhập vào. 
Prototype: char ki_tu_tai(int i) 
#include<iostream> //Khong su dung thu vien string 
using namespace std; 
int main(){ 
char s[100]; 
int length=0; 
do{ 
cout<<"Nhap vao mot chuoi:"; 
cin.getline(s,100); 
while(s[length]!='0')length++; 
length--; 
}while (length==0) ; 
int vt; 
do{ 
cout<<"Nhap vi tri can trich ki tu:"; 
cin>>vt; 
}while (vt>length||vt<1); 
cout<<"Ki tu tai vi tri "<<vt<<" la "<<s[vt-1]; 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 5 
Bài 4: 
Viết chương trình tìm vị trí xuất hiện đầu tiên của một chuỗi con trong chuỗi hiện tại. 
Prototype: int xuat_hien(char* chuoi_hien_tai, char* chuoi_con) 
#include<iostream> //Khong su dung thu vien string 
using namespace std; 
int main(){ 
char s1[100],s2[100];//s1: chuoi hien tai, s2: chuoi con 
cout<<"Nhap vao mot chuoi 1:"; 
cin.getline(s1,100); 
cout<<"Nhap vao mot chuoi 2:"; 
cin.getline(s2,100); 
int lengths1=0,lengths2=0; 
while(s1[lengths1]!='0')lengths1++; 
lengths1--; 
while(s2[lengths2]!='0')lengths2++; 
lengths2--; 
int i; 
for(i=0;i<lengths1;i++){ 
if (s1[i]==s2[0]){ 
int j; 
for(j=1;j<lengths2;j++){ 
if (s1[i+j]!=s2[j]){ 
break; 
} 
} 
if (j==lengths2){ 
cout<<"Chuoi con xuat hien trong chuoi hien tai o vi 
tri:"<<i+1; 
break; 
} 
} 
} 
if (i==lengths1){ 
cout<<"Khong tim thay chuoi con trong chuoi hien tai"; 
} 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 6 
Bài 5: 
Viết chương trình để quản lý thông tin về thời tiết trong năm: 
Tạo cấu trúc Ngay chứa ngày, tháng, năm. 
Tạo cấu trúc Thoitiet chứa cấu trúc Ngay, nhiệt độ cao nhất trong ngày, nhiệt độ thấp 
nhất trong ngày, tốc độ gió lớn nhất. 
Tạo mảng các cấu trúc Thoitiet, mỗi phần tử lưu thông tin về thời tiết trong một ngày 
trong năm. 
Tìm ngày có nhiệt độ cao nhất trong tháng 8/2009, trong năm 2009. 
Prototype: Ngay nhiet_do_thap_nhat(Thoitiet[] arr_thoi_tiet) 
#include<iostream> 
#include <stdlib.h> 
#define MAX 360 //So ngay luu tru 
#define DAYS 30 
using namespace std; 
struct Date{ 
int day; 
int month; 
int year; 
}; 
struct Weather{ 
Date aday; 
float maxtemp; 
float mintemp; 
float maxwind; 
}; 
int main(){ 
Weather thoitietnam[MAX]; 
//khoi tao cac gia tri ngau nhien 
srand(time(NULL)); 
int nam=2009,thang=1,dayth=1; // Khoi tao tu ngay 1/1/2009, 
mac dinh 30ngay/1thang 
for(int i=0;i<MAX;i++){ 
thoitietnam[i].aday.day=dayth; 
thoitietnam[i].aday.month=thang; 
thoitietnam[i].aday.year=nam; 
thoitietnam[i].maxtemp=(rand()%350)/10.0; //Nhiet do 
maximum la 35.0 (oC) 
thoitietnam[i].mintemp=(rand()%350)/10.0; //Nhiet do 
maximum la 35.0 (oC) 
while (thoitietnam[i].mintemp>thoitietnam[i].maxtemp) 
thoitietnam[i].mintemp=(rand()%350)/10.0; 
thoitietnam[i].maxwind=(rand()%800)/10.0; //Toc do gio 
maximum la 80km/h 
dayth++; 
if (dayth>DAYS) { 
thang++; 
dayth=1; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 7 
if (thang>12){ 
nam++; 
thang=1; 
} 
} 
//Tim ngay co nhiet do thap nhat trong khoang thoi gian 
cout<<"Nhap thang, nam (nhap thang = 0 neu chi xet trong 
nam:"; 
int qmonth,qyear; 
Date result; 
float qmaxtemp=0;//-1000.0; //Khoi tao qmaxtemp co nhiet do - 
1000 (oC) 
cin>>qmonth>>qyear; 
for(int i=1;i<=MAX;i++){ 
if(thoitietnam[i].aday.year==qyear&&(qmonth==0?true:thoitietna 
m[i].aday.month==qmonth)&&thoitietnam[i].maxtemp>qmaxtemp){ 
qmaxtemp=thoitietnam[i].maxtemp; 
result=thoitietnam[i].aday; 
} 
} 
if (qmaxtemp!=-1000.0){ 
cout<<"Nhiet do maximum trong thoi gian do la "<<qmaxtemp; 
cout<<" vao ngay "<<result.day<<" thang "<<result.month<<" 
nam "<<result.year; 
}else{ 
cout<<"Khong do du lieu!"; 
} 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 8 
ài p làm thêm: 
Bài 6: 
Viết chương trình trả về một ma trận A (n*n) với phần tử a[i][j] bằng ‘true’ nếu như i và 
j là hai số nguyên tố cùng nhau và ngược lại thì bằng ‘false’. 
#include<iostream> 
using namespace std; 
int main(){ 
cout<<"Nhap n:"; 
int n; 
cin>>n; 
bool a[n][n]; 
for(int i=0;i<n;i++) 
for(int j=0;j<n;j++){ 
int p,q,r; 
p=i+1; 
q=j+1; 
do{ 
r=p%q; 
p=q; 
q=r; 
}while(q!=0); 
if (p==1){//Cung nguyen to 
a[i][j]=true; 
}else{ 
a[i][j]=false; 
} 
} 
//in ma tran 
for(int i=0;i<n;i++){ 
for(int j=0;j<n;j++){ 
cout<<a[i][j]<<" "; 
} 
cout<<endl; 
} 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 9 
Bài 7: 
Viết chương trình trả về chiều dài chuỗi ký tự (không sử dụng hàm strlen). 
#include<iostream> //Khong su dung thu vien string 
using namespace std; 
int main(){ 
cout<<"Nhap vao mot chuoi:"; 
char s[100]; 
cin.getline(s,100); 
int length=0; 
while(s[length]!='0')length++; 
length--; 
cout<<"Xau co do dai: "<<length; 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 
10 
Bài 8: 
Viết chương trình gán kí tự thứ i trong chuỗi bằng kí tự truyền vào. 
#include<iostream> 
using namespace std; 
int main(){ 
char s[100]; 
cout<<"Nhap vao mot chuoi:"; 
cin.getline(s,100); 
cout<<"Nhap vi tri can thay the ki tu:"; 
int vt; 
cin>>vt; 
cout<<"Nhap ki tu can thay the:"; 
char c; 
cin>>c; 
s[vt-1]=c; 
cout<<"Chuoi sau khi thay the:"<<s; 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 
11 
Bài 9: 
Viết chương trình so sánh hai chuỗi, có phân biệt chữ hoa chữ thường (không sử 
dụng hàm strcmp). 
//trả về: 
-1 :cho biết chuỗi 1 < chuỗi 2 
0 :cho biết 2 chuỗi giống nhau 
1 : cho biết chuỗi 1 > chuỗi 2 
#include<iostream> //Khong su dung thu vien string 
using namespace std; 
int main(){ 
char s1[100],s2[100];//s1: chuoi hien tai, s2: chuoi con 
cout<<"Nhap vao mot chuoi 1:"; 
cin.getline(s1,100); 
cout<<"Nhap vao mot chuoi 2:"; 
cin.getline(s2,100); 
int lengths1=0,lengths2=0; 
while(s1[lengths1]!='0')lengths1++; 
lengths1--; 
while(s2[lengths2]!='0')lengths2++; 
lengths2--; 
int max=(lengths1>lengths2)?lengths1:lengths2; 
int i; 
for(i=0;i<max;i++){ 
if (s1[i]<s2[i]){ 
cout<< -1; 
break; 
}else if(s1[i]>s2[i]){ 
cout<< 1; 
break; 
}else if (i==max-1){ 
cout<< 0; 
} 
} 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 
12 
Bài 10: 
Viết chương trình trả về chuỗi con có chiều dài ilength, bắt đầu từ vị trí istart. 
#include<iostream> 
using namespace std; 
int main(){ 
cout<<"Nhap xau:"; 
char s[100]; 
cin.getline(s,100); 
cout<<"Nhap vi tri, chieu dai xau can trich:"; 
int istart,ilength; 
cin>>istart>>ilength; 
char subs[ilength+1]; 
for(int i=0; i<ilength;i++){ 
subs[i]=s[istart-1+i]; 
} 
cout<<"Xau trich duoc:"<<subs; 
return 0; 
} 
Bài 11: 
Viết chương trình chuyển các ký tự trong chuỗi sang chữ in hoa. 
#include<iostream> 
using namespace std; 
int main(){ 
cout<<"Nhap xau:"; 
char s[100]; 
cin.getline(s,100); 
int i=0; 
while (s[i]!='0'){ 
if(s[i]>='a'&&s[i]<='z'){ 
s[i]=s[i]+'A'-'a'; 
} 
i++; 
} 
cout<<"Xau in hoa:"<<s; 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 
13 
Bài 12: 
Viết chương trình xóa các khoảng trắng ở đầu chuỗi và cuối chuỗi. 
#include<iostream> 
#include<string.h> 
using namespace std; 
int main(){ 
cout<<"Nhap xau:"; 
char s[100]; 
cin.getline(s,100); 
int begin=0,end=strlen(s)-1; 
while (s[begin]==' ') begin++; 
while (s[end]==' ') end--; 
char s2[100]; 
if (begin<=end){ 
for(int i=begin;i<=end;i++){ 
s2[i-begin]=s[i]; 
} 
s2[end-begin+1]='0'; 
}else{ 
strcpy(s2,""); 
} 
cout<<"Xau xoa khoang trang:"<<s2; 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 
14 
Bài 13: 
Viết chương trình mô phỏng các phép toán luận lý AND, OR, XOR trên hai chuỗi ký tự. 
Cho hai chuỗi ký tự a và b có chiều dài bằng nhau, chỉ chứa các ký tự ‘0’ và ‘1’. 
Thực hiện phép toán (a AND b), (a OR b), (a XOR b), kết quả là các phép AND, OR, và 
XOR trên từng ký tự. 
Chương trình cho phép nhập 2 chuỗi ký tự a và b chiều dài bằng nhau, chiều dài tối đa là 
100 ký tự. Kết quả phép toán lưu vào chuỗi ký tự c. 
Ví dụ: 
a = “001010111” 
b = “011110111” 
c = a AND b = “001010111” 
c = a OR b = “011110111” 
c = a XOR b = “010100000” 
#include<iostream> 
using namespace std; 
int main(){ 
char a[100], b[100], cOR[100],cAND[100],cXOR[100]; 
cout<<"Nhap chuoi A:"; 
cin>>a; 
cout<<"Nhap chuoi B:"; 
cin>>b; 
if (strlen(a)==strlen(b)){ 
unsigned int op1,op2,length=strlen(a); 
for(unsigned int i=0;i<length;i++){ 
op1=(a[i]=='1')?1:0; 
op2=(b[i]=='1')?1:0; 
cOR[i]=op1 or op2?'1':'0'; 
cAND[i]=op1 and op2?'1':'0'; 
cXOR[i]=op1 xor op2?'1':'0'; 
} 
cOR[length]='0'; 
cAND[length]='0'; 
cXOR[length]='0'; 
cout<<"OR:"<<cOR<<endl; 
cout<<"AND:"<<cAND<<endl; 
cout<<"XOR:"<<cXOR<<endl; 
} 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 
15 
Bài 14: 
Viết chương trình trả về độ dài lớn nhất của dãy con tăng và giảm của A và 
xuất ra dãy con tăng và giảm lớn nhất của A với A = (a1, a2,…, an) là dãy gồm n số 
phân biệt. Một dãy con k phần tử của A là dãy B gồm k số hạng phần tử của A xuất hiện 
theo đúng thứ tự mà chúng xuất hiện trong A. Có nghĩa là B = (ai1, ai2,…, aik) với i1 < i2 
< …< ik. Dãy con B được gọi là tăng nếu ai1 < ai2 <…< aik, và giảm nếu ai1 > ai2 
>…> aik. 
#include<iostream> 
using namespace std; 
int main(){ 
cout<<"Nhap so phan tu cua A:"; 
int n; 
cin>>n; 
int a[n]; 
for (int i=0;i<n;i++){ 
cout<<"Nhap phan tu thu "<<i+1<<": "; 
cin>>a[i]; 
} 
int tang=1,giam=1,maxtang=1,maxgiam=1; 
int i=0; 
while (i<n-1){ 
if (a[i+1]>a[i]){ 
tang++; 
i++; 
maxgiam=maxgiam<giam?giam:maxgiam; 
giam=1; 
}else{ 
giam++; 
i++; 
maxtang=maxtang<tang?tang:maxtang; 
tang=1; 
} 
} 
maxgiam=maxgiam<giam?giam:maxgiam; 
maxtang=maxtang<tang?tang:maxtang; 
cout<<"Day tang maximum: "<<maxtang; 
cout<<"Day giam maximum: "<<maxgiam; 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 
16 
Bài 15: 
Với tam giác Pascal như sau: 
1 (mảng a) 
1 1 (mảng b) 
1 2 1 (mảng a) 
1 3 3 1 (mảng b) 
1 4 6 4 1 (mảng a) 
…… 
Viết chương trình xuất ra dòng thứ n của tam giác Pascal, n nhập từ bàn phím, 0 < n < 
100. 
Lưu ý: Không dùng mảng 2 chiều. Chỉ dùng 2 mảng các số nguyên luân phiên chứa hàng 
thứ i và i+1. 
#include<iostream> 
using namespace std; 
int main(){ 
cout<<"Nhap n (0<n<100):"; 
int n; 
cin>>n; 
int a[100],b[100]; 
for(int i=0;i<100;i++){ 
a[i]=0; 
b[i]=0; 
} 
a[0]=1; 
for(int i=2;i<=n;i++){ 
if (i%2==0){ 
b[0]=1; 
for(int j=1;j<=i;j++){ 
b[j]=a[j-1]+a[j]; 
} 
}else{ 
a[0]=1; 
for(int j=1;j<=i;j++){ 
a[j]=b[j-1]+b[j]; 
} 
} 
} 
//In dong thu n 
if (n%2==0) { 
for(int i=0;i<n;i++) cout<<b[i]<<" "; 
}else{ 
for(int i=0;i<n;i++) cout<<a[i]<<" "; 
} 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 
17 
Bài 16: 
Viết chương trình tạo ra một mảng lưu trữ điểm số của học sinh. Tính trung bình điểm 
của tất cả học sinh. Xuất kết quả từng điểm và điểm trung bình. 
#include<iostream> 
using namespace std; 
int main(){ 
cout<<"Nhap so hoc sinh:"; 
int n; 
cin>>n; 
float diem[n]; 
for(int i=0;i<n;i++){ 
cout<<"Nhap diem hoc sinh thu "<<i+1<<": "; 
cin>>diem[i]; 
} 
float sumdiem=0,tbdiem; 
for(int i=0;i<n;i++){ 
sumdiem+=diem[i]; 
} 
tbdiem=sumdiem/n; 
//in ket qua 
cout<<"STT Diem"; 
for(int i=0;i<n;i++){ 
cout<<"n"<<i+1<<" "<<diem[i]; 
} 
cout<<"nDiem trung binh: "<<tbdiem; 
return 0; 
}
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 
18 
Bài 17: 
Viết chương trình sử dụng kiểu dữ liệu từ điển để quản lý thông tin của một lớp học. 
Trong đó khóa là chuỗi mã số học viên còn giá trị là tên của học viên. Viết chương trình 
minh họa cho phép nhập vào 10 học viên, và cho phép người dùng tìm kiếm tên của học 
viên thông qua mã số học viên. 
#include<iostream> 
#include<string.h> 
using namespace std; 
#define MAXARR 100 //mang structure luu tru 
#define MAXLIST 50 //So luong hoc sinh mot lop 
#define HTEN 50 //chieu dai ho ten 
#define MASO 3 //chieu dai ma so hoc sinh 
struct hocsinh{ 
char mshs[MASO]; 
char hoten[HTEN]; 
}; 
int main(){ 
//intial 
cout<<"Nhap so luong hoc sinh:"; 
int n; 
cin>>n; 
hocsinh hoso[MAXARR]; 
for(int i=0;i<MAXARR;i++){ 
strcpy(hoso[i].mshs,""); 
strcpy(hoso[i].hoten,""); 
} 
//Them hoc sinh, gia su nhap hop le, khong nhap trung mshs 
(duplicate), code moi xu ly don gian dung do (Collision) 
for(int i=0;i<n;i++){ 
int pos; 
cout<<"Nhap ma so hoc sinh thu "<<i+1<<": "; 
char masostr[MASO]; 
cin>>masostr; 
int masonum=atoi(masostr); //string to integer 
pos=masonum%MAXLIST; 
while (strlen(hoso[pos].mshs)!=0) pos++; 
cout<<"Ho ten hoc sinh:"; 
char hotenstr[HTEN]; 
cin.ignore(2); 
cin.getline(hotenstr,HTEN); 
strcpy(hoso[pos].mshs,masostr); 
strcpy(hoso[pos].hoten,hotenstr); 
} 
//Tim kiem hoc sinh 
cout<<"===============================================n";
o o n 
Kỹ thuật lập trình 501127 – HK2/2011-2012 
19 
cout<<"Nhap mshs can tim: "; 
char qmasostr[MASO]; 
cin>>qmasostr; 
int qmasonum=atoi(qmasostr); 
int pos=qmasonum%MAXLIST; 
while (strcmp(hoso[pos].mshs,qmasostr)!=0&&pos<MAXARR) pos++; 
if (pos<MAXARR){ 
cout<<"Maso: "<<hoso[pos].mshs<<" - Ho ten: 
"<<hoso[pos].hoten; 
}else{ 
cout<<"Khong tim thay!"; 
} 
return 0; 
} 
-- ế -

Tut4 solution

  • 1.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 1 Ỹ UẬ LẬ Ì ài p 4 – ần 12 ảng, ỗi và kiể dữ liệ ó ấ rú ài p bắ b ộ : Bài 1: Viết chương trình tính ma trận chuyển vị. Prototype: int[][] chuyen_vi(int[][] matran) #include<iostream> using namespace std; int main(){ cout<<"Nhap m,n, cho ma tran A(m x n):"; int m,n; cin>>m>>n; //Khoi tao (nhap) mang m x n int a[m][n]; for(int i=0;i<m;i++) for(int j=0;j<n;j++){ cout<<"Nhap A["<<i<<"]["<<j<<"]:"; cin>>a[i][j]; } //Thuc hien chuyen vi int b[n][m]; for(int i=0;i<n;i++) for(int j=0;j<m;j++){ b[i][j]=a[j][i]; } //In mang ra man hinh cout<<"Ma tran ban dau:n"; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ cout<<a[i][j]<<" "; } cout<<endl; } cout<<"Ma tran chuyen vi:n"; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cout<<b[i][j]<<" "; } cout<<endl; } return 0; }
  • 2.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 2 Bài 2: Viết chương trình nhân hai ma trận. Prototype: int[][] nhanmatran(int[][] matran1, int[][] matran2) #include<iostream> #include <stdlib.h> using namespace std; int main(){ cout<<"Nhap m,n,p cho ma tran A(m x n), B(n x p):"; int m,n,p; cin>>m>>n>>p; srand(time(NULL)); //Khoi tao mang A (m x n), B(n x p) phan tu nguyen ngau nhien 0~4 int a[m][n]; for(int i=0;i<m;i++) for(int j=0;j<n;j++){ a[i][j]=rand()%5; } int b[n][p]; for(int i=0;i<n;i++) for(int j=0;j<p;j++){ b[i][j]=rand()%5; } //Thuc hien nhan ma tran int c[m][p]; for(int i=0;i<m;i++) for(int j=0;j<p ;j++){ int total=0; for(int k=0;k<n;k++) total+=a[i][k]*b[k][j]; c[i][j]=total; } //In mang ra man hinh cout<<"Ma tran A (m x n) ban dau:n"; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ cout<<a[i][j]<<" "; } cout<<endl; } cout<<"Ma tran B (n x p) ban dau:n"; for(int i=0;i<n;i++){ for(int j=0;j<p;j++){ cout<<b[i][j]<<" "; } cout<<endl;
  • 3.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 3 } cout<<"A x B = C (n x p):n"; for(int i=0;i<m;i++){ for(int j=0;j<p;j++){ cout<<c[i][j]<<" "; } cout<<endl; } return 0; }
  • 4.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 4 Bài 3: Viết chương trình trả về về kí tự thứ i trong chuỗi, kiểm tra tính hợp lệ của i nhập vào. Prototype: char ki_tu_tai(int i) #include<iostream> //Khong su dung thu vien string using namespace std; int main(){ char s[100]; int length=0; do{ cout<<"Nhap vao mot chuoi:"; cin.getline(s,100); while(s[length]!='0')length++; length--; }while (length==0) ; int vt; do{ cout<<"Nhap vi tri can trich ki tu:"; cin>>vt; }while (vt>length||vt<1); cout<<"Ki tu tai vi tri "<<vt<<" la "<<s[vt-1]; return 0; }
  • 5.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 5 Bài 4: Viết chương trình tìm vị trí xuất hiện đầu tiên của một chuỗi con trong chuỗi hiện tại. Prototype: int xuat_hien(char* chuoi_hien_tai, char* chuoi_con) #include<iostream> //Khong su dung thu vien string using namespace std; int main(){ char s1[100],s2[100];//s1: chuoi hien tai, s2: chuoi con cout<<"Nhap vao mot chuoi 1:"; cin.getline(s1,100); cout<<"Nhap vao mot chuoi 2:"; cin.getline(s2,100); int lengths1=0,lengths2=0; while(s1[lengths1]!='0')lengths1++; lengths1--; while(s2[lengths2]!='0')lengths2++; lengths2--; int i; for(i=0;i<lengths1;i++){ if (s1[i]==s2[0]){ int j; for(j=1;j<lengths2;j++){ if (s1[i+j]!=s2[j]){ break; } } if (j==lengths2){ cout<<"Chuoi con xuat hien trong chuoi hien tai o vi tri:"<<i+1; break; } } } if (i==lengths1){ cout<<"Khong tim thay chuoi con trong chuoi hien tai"; } return 0; }
  • 6.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 6 Bài 5: Viết chương trình để quản lý thông tin về thời tiết trong năm: Tạo cấu trúc Ngay chứa ngày, tháng, năm. Tạo cấu trúc Thoitiet chứa cấu trúc Ngay, nhiệt độ cao nhất trong ngày, nhiệt độ thấp nhất trong ngày, tốc độ gió lớn nhất. Tạo mảng các cấu trúc Thoitiet, mỗi phần tử lưu thông tin về thời tiết trong một ngày trong năm. Tìm ngày có nhiệt độ cao nhất trong tháng 8/2009, trong năm 2009. Prototype: Ngay nhiet_do_thap_nhat(Thoitiet[] arr_thoi_tiet) #include<iostream> #include <stdlib.h> #define MAX 360 //So ngay luu tru #define DAYS 30 using namespace std; struct Date{ int day; int month; int year; }; struct Weather{ Date aday; float maxtemp; float mintemp; float maxwind; }; int main(){ Weather thoitietnam[MAX]; //khoi tao cac gia tri ngau nhien srand(time(NULL)); int nam=2009,thang=1,dayth=1; // Khoi tao tu ngay 1/1/2009, mac dinh 30ngay/1thang for(int i=0;i<MAX;i++){ thoitietnam[i].aday.day=dayth; thoitietnam[i].aday.month=thang; thoitietnam[i].aday.year=nam; thoitietnam[i].maxtemp=(rand()%350)/10.0; //Nhiet do maximum la 35.0 (oC) thoitietnam[i].mintemp=(rand()%350)/10.0; //Nhiet do maximum la 35.0 (oC) while (thoitietnam[i].mintemp>thoitietnam[i].maxtemp) thoitietnam[i].mintemp=(rand()%350)/10.0; thoitietnam[i].maxwind=(rand()%800)/10.0; //Toc do gio maximum la 80km/h dayth++; if (dayth>DAYS) { thang++; dayth=1; }
  • 7.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 7 if (thang>12){ nam++; thang=1; } } //Tim ngay co nhiet do thap nhat trong khoang thoi gian cout<<"Nhap thang, nam (nhap thang = 0 neu chi xet trong nam:"; int qmonth,qyear; Date result; float qmaxtemp=0;//-1000.0; //Khoi tao qmaxtemp co nhiet do - 1000 (oC) cin>>qmonth>>qyear; for(int i=1;i<=MAX;i++){ if(thoitietnam[i].aday.year==qyear&&(qmonth==0?true:thoitietna m[i].aday.month==qmonth)&&thoitietnam[i].maxtemp>qmaxtemp){ qmaxtemp=thoitietnam[i].maxtemp; result=thoitietnam[i].aday; } } if (qmaxtemp!=-1000.0){ cout<<"Nhiet do maximum trong thoi gian do la "<<qmaxtemp; cout<<" vao ngay "<<result.day<<" thang "<<result.month<<" nam "<<result.year; }else{ cout<<"Khong do du lieu!"; } return 0; }
  • 8.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 8 ài p làm thêm: Bài 6: Viết chương trình trả về một ma trận A (n*n) với phần tử a[i][j] bằng ‘true’ nếu như i và j là hai số nguyên tố cùng nhau và ngược lại thì bằng ‘false’. #include<iostream> using namespace std; int main(){ cout<<"Nhap n:"; int n; cin>>n; bool a[n][n]; for(int i=0;i<n;i++) for(int j=0;j<n;j++){ int p,q,r; p=i+1; q=j+1; do{ r=p%q; p=q; q=r; }while(q!=0); if (p==1){//Cung nguyen to a[i][j]=true; }else{ a[i][j]=false; } } //in ma tran for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout<<a[i][j]<<" "; } cout<<endl; } }
  • 9.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 9 Bài 7: Viết chương trình trả về chiều dài chuỗi ký tự (không sử dụng hàm strlen). #include<iostream> //Khong su dung thu vien string using namespace std; int main(){ cout<<"Nhap vao mot chuoi:"; char s[100]; cin.getline(s,100); int length=0; while(s[length]!='0')length++; length--; cout<<"Xau co do dai: "<<length; return 0; }
  • 10.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 10 Bài 8: Viết chương trình gán kí tự thứ i trong chuỗi bằng kí tự truyền vào. #include<iostream> using namespace std; int main(){ char s[100]; cout<<"Nhap vao mot chuoi:"; cin.getline(s,100); cout<<"Nhap vi tri can thay the ki tu:"; int vt; cin>>vt; cout<<"Nhap ki tu can thay the:"; char c; cin>>c; s[vt-1]=c; cout<<"Chuoi sau khi thay the:"<<s; return 0; }
  • 11.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 11 Bài 9: Viết chương trình so sánh hai chuỗi, có phân biệt chữ hoa chữ thường (không sử dụng hàm strcmp). //trả về: -1 :cho biết chuỗi 1 < chuỗi 2 0 :cho biết 2 chuỗi giống nhau 1 : cho biết chuỗi 1 > chuỗi 2 #include<iostream> //Khong su dung thu vien string using namespace std; int main(){ char s1[100],s2[100];//s1: chuoi hien tai, s2: chuoi con cout<<"Nhap vao mot chuoi 1:"; cin.getline(s1,100); cout<<"Nhap vao mot chuoi 2:"; cin.getline(s2,100); int lengths1=0,lengths2=0; while(s1[lengths1]!='0')lengths1++; lengths1--; while(s2[lengths2]!='0')lengths2++; lengths2--; int max=(lengths1>lengths2)?lengths1:lengths2; int i; for(i=0;i<max;i++){ if (s1[i]<s2[i]){ cout<< -1; break; }else if(s1[i]>s2[i]){ cout<< 1; break; }else if (i==max-1){ cout<< 0; } } return 0; }
  • 12.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 12 Bài 10: Viết chương trình trả về chuỗi con có chiều dài ilength, bắt đầu từ vị trí istart. #include<iostream> using namespace std; int main(){ cout<<"Nhap xau:"; char s[100]; cin.getline(s,100); cout<<"Nhap vi tri, chieu dai xau can trich:"; int istart,ilength; cin>>istart>>ilength; char subs[ilength+1]; for(int i=0; i<ilength;i++){ subs[i]=s[istart-1+i]; } cout<<"Xau trich duoc:"<<subs; return 0; } Bài 11: Viết chương trình chuyển các ký tự trong chuỗi sang chữ in hoa. #include<iostream> using namespace std; int main(){ cout<<"Nhap xau:"; char s[100]; cin.getline(s,100); int i=0; while (s[i]!='0'){ if(s[i]>='a'&&s[i]<='z'){ s[i]=s[i]+'A'-'a'; } i++; } cout<<"Xau in hoa:"<<s; return 0; }
  • 13.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 13 Bài 12: Viết chương trình xóa các khoảng trắng ở đầu chuỗi và cuối chuỗi. #include<iostream> #include<string.h> using namespace std; int main(){ cout<<"Nhap xau:"; char s[100]; cin.getline(s,100); int begin=0,end=strlen(s)-1; while (s[begin]==' ') begin++; while (s[end]==' ') end--; char s2[100]; if (begin<=end){ for(int i=begin;i<=end;i++){ s2[i-begin]=s[i]; } s2[end-begin+1]='0'; }else{ strcpy(s2,""); } cout<<"Xau xoa khoang trang:"<<s2; return 0; }
  • 14.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 14 Bài 13: Viết chương trình mô phỏng các phép toán luận lý AND, OR, XOR trên hai chuỗi ký tự. Cho hai chuỗi ký tự a và b có chiều dài bằng nhau, chỉ chứa các ký tự ‘0’ và ‘1’. Thực hiện phép toán (a AND b), (a OR b), (a XOR b), kết quả là các phép AND, OR, và XOR trên từng ký tự. Chương trình cho phép nhập 2 chuỗi ký tự a và b chiều dài bằng nhau, chiều dài tối đa là 100 ký tự. Kết quả phép toán lưu vào chuỗi ký tự c. Ví dụ: a = “001010111” b = “011110111” c = a AND b = “001010111” c = a OR b = “011110111” c = a XOR b = “010100000” #include<iostream> using namespace std; int main(){ char a[100], b[100], cOR[100],cAND[100],cXOR[100]; cout<<"Nhap chuoi A:"; cin>>a; cout<<"Nhap chuoi B:"; cin>>b; if (strlen(a)==strlen(b)){ unsigned int op1,op2,length=strlen(a); for(unsigned int i=0;i<length;i++){ op1=(a[i]=='1')?1:0; op2=(b[i]=='1')?1:0; cOR[i]=op1 or op2?'1':'0'; cAND[i]=op1 and op2?'1':'0'; cXOR[i]=op1 xor op2?'1':'0'; } cOR[length]='0'; cAND[length]='0'; cXOR[length]='0'; cout<<"OR:"<<cOR<<endl; cout<<"AND:"<<cAND<<endl; cout<<"XOR:"<<cXOR<<endl; } return 0; }
  • 15.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 15 Bài 14: Viết chương trình trả về độ dài lớn nhất của dãy con tăng và giảm của A và xuất ra dãy con tăng và giảm lớn nhất của A với A = (a1, a2,…, an) là dãy gồm n số phân biệt. Một dãy con k phần tử của A là dãy B gồm k số hạng phần tử của A xuất hiện theo đúng thứ tự mà chúng xuất hiện trong A. Có nghĩa là B = (ai1, ai2,…, aik) với i1 < i2 < …< ik. Dãy con B được gọi là tăng nếu ai1 < ai2 <…< aik, và giảm nếu ai1 > ai2 >…> aik. #include<iostream> using namespace std; int main(){ cout<<"Nhap so phan tu cua A:"; int n; cin>>n; int a[n]; for (int i=0;i<n;i++){ cout<<"Nhap phan tu thu "<<i+1<<": "; cin>>a[i]; } int tang=1,giam=1,maxtang=1,maxgiam=1; int i=0; while (i<n-1){ if (a[i+1]>a[i]){ tang++; i++; maxgiam=maxgiam<giam?giam:maxgiam; giam=1; }else{ giam++; i++; maxtang=maxtang<tang?tang:maxtang; tang=1; } } maxgiam=maxgiam<giam?giam:maxgiam; maxtang=maxtang<tang?tang:maxtang; cout<<"Day tang maximum: "<<maxtang; cout<<"Day giam maximum: "<<maxgiam; return 0; }
  • 16.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 16 Bài 15: Với tam giác Pascal như sau: 1 (mảng a) 1 1 (mảng b) 1 2 1 (mảng a) 1 3 3 1 (mảng b) 1 4 6 4 1 (mảng a) …… Viết chương trình xuất ra dòng thứ n của tam giác Pascal, n nhập từ bàn phím, 0 < n < 100. Lưu ý: Không dùng mảng 2 chiều. Chỉ dùng 2 mảng các số nguyên luân phiên chứa hàng thứ i và i+1. #include<iostream> using namespace std; int main(){ cout<<"Nhap n (0<n<100):"; int n; cin>>n; int a[100],b[100]; for(int i=0;i<100;i++){ a[i]=0; b[i]=0; } a[0]=1; for(int i=2;i<=n;i++){ if (i%2==0){ b[0]=1; for(int j=1;j<=i;j++){ b[j]=a[j-1]+a[j]; } }else{ a[0]=1; for(int j=1;j<=i;j++){ a[j]=b[j-1]+b[j]; } } } //In dong thu n if (n%2==0) { for(int i=0;i<n;i++) cout<<b[i]<<" "; }else{ for(int i=0;i<n;i++) cout<<a[i]<<" "; } return 0; }
  • 17.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 17 Bài 16: Viết chương trình tạo ra một mảng lưu trữ điểm số của học sinh. Tính trung bình điểm của tất cả học sinh. Xuất kết quả từng điểm và điểm trung bình. #include<iostream> using namespace std; int main(){ cout<<"Nhap so hoc sinh:"; int n; cin>>n; float diem[n]; for(int i=0;i<n;i++){ cout<<"Nhap diem hoc sinh thu "<<i+1<<": "; cin>>diem[i]; } float sumdiem=0,tbdiem; for(int i=0;i<n;i++){ sumdiem+=diem[i]; } tbdiem=sumdiem/n; //in ket qua cout<<"STT Diem"; for(int i=0;i<n;i++){ cout<<"n"<<i+1<<" "<<diem[i]; } cout<<"nDiem trung binh: "<<tbdiem; return 0; }
  • 18.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 18 Bài 17: Viết chương trình sử dụng kiểu dữ liệu từ điển để quản lý thông tin của một lớp học. Trong đó khóa là chuỗi mã số học viên còn giá trị là tên của học viên. Viết chương trình minh họa cho phép nhập vào 10 học viên, và cho phép người dùng tìm kiếm tên của học viên thông qua mã số học viên. #include<iostream> #include<string.h> using namespace std; #define MAXARR 100 //mang structure luu tru #define MAXLIST 50 //So luong hoc sinh mot lop #define HTEN 50 //chieu dai ho ten #define MASO 3 //chieu dai ma so hoc sinh struct hocsinh{ char mshs[MASO]; char hoten[HTEN]; }; int main(){ //intial cout<<"Nhap so luong hoc sinh:"; int n; cin>>n; hocsinh hoso[MAXARR]; for(int i=0;i<MAXARR;i++){ strcpy(hoso[i].mshs,""); strcpy(hoso[i].hoten,""); } //Them hoc sinh, gia su nhap hop le, khong nhap trung mshs (duplicate), code moi xu ly don gian dung do (Collision) for(int i=0;i<n;i++){ int pos; cout<<"Nhap ma so hoc sinh thu "<<i+1<<": "; char masostr[MASO]; cin>>masostr; int masonum=atoi(masostr); //string to integer pos=masonum%MAXLIST; while (strlen(hoso[pos].mshs)!=0) pos++; cout<<"Ho ten hoc sinh:"; char hotenstr[HTEN]; cin.ignore(2); cin.getline(hotenstr,HTEN); strcpy(hoso[pos].mshs,masostr); strcpy(hoso[pos].hoten,hotenstr); } //Tim kiem hoc sinh cout<<"===============================================n";
  • 19.
    o o n Kỹ thuật lập trình 501127 – HK2/2011-2012 19 cout<<"Nhap mshs can tim: "; char qmasostr[MASO]; cin>>qmasostr; int qmasonum=atoi(qmasostr); int pos=qmasonum%MAXLIST; while (strcmp(hoso[pos].mshs,qmasostr)!=0&&pos<MAXARR) pos++; if (pos<MAXARR){ cout<<"Maso: "<<hoso[pos].mshs<<" - Ho ten: "<<hoso[pos].hoten; }else{ cout<<"Khong tim thay!"; } return 0; } -- ế -