Tải bản đầy đủ (.pdf) (19 trang)

Tut4 solution

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (383.48 KB, 19 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính

KỸ THUẬT LẬP TRÌNH
Bài tập 4 – Tuần 12
Mảng, chuỗi và kiểu dữ liệu có cấu trúc
Bài tập bắt buộc:
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;ifor(int j=0;jcout<<"Nhap A["<cin>>a[i][j];
}
//Thuc hien chuyen vi
int b[n][m];
for(int i=0;ifor(int j=0;jb[i][j]=a[j][i];
}
//In mang ra man hinh
cout<<"Ma tran ban dau:\n";


for(int i=0;ifor(int j=0;jcout<";
}
cout<}
cout<<"Ma tran chuyen vi:\n";
for(int i=0;ifor(int j=0;jcout<";
}
cout<}
return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012

1


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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;ifor(int j=0;ja[i][j]=rand()%5;
}
int b[n][p];
for(int i=0;ifor(int j=0;jb[i][j]=rand()%5;
}
//Thuc hien nhan ma tran
int c[m][p];
for(int i=0;ifor(int j=0;j

int total=0;
for(int k=0;ktotal+=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


for(int j=0;jcout<";
}
cout<}
cout<<"Ma tran B (n x p) ban dau:\n";
for(int i=0;ifor(int j=0;jcout<";
}
cout<
Kỹ thuật lập trình 501127 – HK2/2011-2012

2


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
}
cout<<"A x B = C (n x p):\n";
for(int i=0;ifor(int j=0;jcout<";
}
cout<}

return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012

3


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
Bài 3:
Viết chương trình tìm ký tự xuất hiện i lần trong chuỗi (không dùng thư viện string). Nếu
khơng tìm thấy xuất ra màn hình ký tự ‘!’. Kiểm tra tính hợp lệ của i nhập vào (lớn hơn 0
và nhỏ hơn chiều dài của chuỗi).
Prototype: char tim_ky_tu(char* chuoi, int i)
#include <iostream> // Khong dung thu vien string
using namespace std;
void tim_ky_tu() {
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 solan;
do {
cout << "Nhap so lan xuat hien muon tim: ";
cin >> solan;

} while (solan > length || solan < 1);
int dem;
char ky_tu;
bool tim_thay = false;
for (int i = 0; i < length; i++) {
dem = 1;
if (s[i] == '\0')
continue;
ky_tu = s[i];
for (int j = 0; j < length; j++) {
if (s[j] == s[i] && i != j) {
dem++;
s[j] = '\0';
}
}
if (dem == solan) {
cout << "Ky tu xuat hien " << solan << " lan la: " <<
ky_tu << endl;
tim_thay = true;
}
}
if (!tim_thay)
cout << "!";
}

Kỹ thuật lập trình 501127 – HK2/2011-2012

4



TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ tḥt Máy tính
Bài 4:
Tìm vị trí xuất hiện cuối cùng 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>
using namespace std;
void xuat_hien() {
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=lengths1-lengths2;i>=0;i--){
if (s1[i]==s2[0]){
int j;
for(j=1;jif (s1[i+j]!=s2[j]){
break;
}
}
if (j==lengths2){
cout<<"Chuoi con xuat hien trong chuoi hien tai o vi
tri:"<

break;
}
}
}
if (i==-1){
cout<<"Khong tim thay chuoi con trong chuoi hien tai";
}
}

Kỹ thuật lập trình 501127 – HK2/2011-2012

5


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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 9/2012, trong năm 2012.
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;ithoitietnam[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;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012

6


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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 "<cout<<" vao ngay "<nam "<}else{
cout<<"Khong do du lieu!";
}
return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012

7


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
Bài tậ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;ifor(int j=0;jint 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;ifor(int j=0;jcout<}
cout<}

}

Kỹ thuật lập trình 501127 – HK2/2011-2012

8


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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: "<return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012

9


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM

Khoa Khoa ho ̣c & Kỹ tḥt Máy tính
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:"<return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012
10


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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;iif (s1[i]cout<< -1;
break;
}else if(s1[i]>s2[i]){
cout<< 1;
break;
}else if (i==max-1){
cout<< 0;
}
}
return 0;

}

Kỹ thuật lập trình 501127 – HK2/2011-2012
11


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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; isubs[i]=s[istart-1+i];
}
cout<<"Xau trich duoc:"<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:"<return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012
12


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ tḥt Máy tính
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:"<return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012
13


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ tḥt Máy tính
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 tố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;iop1=(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:"<cout<<"AND:"<cout<<"XOR:"<}

return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012
14


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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;icout<<"Nhap phan tu thu "<cin>>a[i];
}
int tang=1,giam=1,maxtang=1,maxgiam=1;
int i=0;
while (i

if (a[i+1]>a[i]){
tang++;
i++;
maxgiam=maxgiamgiam=1;
}else{
giam++;
i++;
maxtang=maxtangtang=1;
}
}
maxgiam=maxgiammaxtang=maxtangcout<<"Day tang maximum: "<cout<<"Day giam maximum: "<return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012
15


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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 (0int 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}else{
for(int i=0;i}
return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012
16

";
";


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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;icout<<"Nhap diem hoc sinh thu "<cin>>diem[i];
}
float sumdiem=0,tbdiem;
for(int i=0;isumdiem+=diem[i];
}
tbdiem=sumdiem/n;
//in ket qua
cout<<"STT Diem";
for(int i=0;icout<<"\n"<"<}
cout<<"\nDiem trung binh: "<return 0;
}

Kỹ thuật lập trình 501127 – HK2/2011-2012
17


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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
#define
#define
#define

MAXARR 100 //mang structure luu tru
MAXLIST 50 //So luong hoc sinh mot lop
HTEN 50 //chieu dai ho ten
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;istrcpy(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;iint pos;
cout<<"Nhap ma so hoc sinh thu "<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";

Kỹ thuật lập trình 501127 – HK2/2011-2012
18


TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa ho ̣c & Kỹ thuật Máy tính
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&&posif (poscout<<"Maso:
"<Ho
ten:
"<}else{
cout<<"Khong tim thay!";
}
return 0;
}

-- Hết -

Kỹ thuật lập trình 501127 – HK2/2011-2012
19



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×