LAB 8
Nguyễn Hồi Danh – 1610391
Câu 1:
a) Khơng cần phải copy cả hai hàm trên lên phía trước hàm main(): ta thêm 2 dòng này vào
trước hàm main().
void thay_doi1(int& x);
void thay_doi2(int* x);
b) Nếu bỏ dấu & trong phần định nghĩa hàm “thay_doi1” nói trên, thì kết quả của biến a trước
và sau khi gọi hàm thay_doi1(a); sẽ không khác nhau vì truyền bằng tham trị sẽ khơng làm
thay đổi giá trị của biến.
c) Thay 2 lời gọi hàm:
thay_doi1(a);
thay_doi2(&a);
bằng cách lời gọi khác cho phù hợp để thay đổi giá trị mà a chỉ đến:
thay_doi1(*a);
thay_doi2(a);
d) Bổ sung “thay_doi”, nhưng truyền thông số bằng trị. Biên dịch chương báo lỗi vì kiểu của a
khi ở câu c khai báo là biến con trỏ nên gọi hàm thay_doi(a); sẽ báo lỗi. Để hết lỗi thì ta phải
gọi bằng cách: thay_doi(*a) nhưng giá trị của a sẽ vẫn khơng bị thay đổi vì cơ chế truyền
bằng trị.
Câu 2:
#include <iostream>
using namespace std;
#define NUM 100
void doc_mang(const double arr1[], int n);
int main()
{
double arr[NUM];
int n;
cout << "nhap n: ";
cin >> n;
for (int i = 0; i < n; i++)
{
arr[i] = -10 + (float)rand() / (RAND_MAX / (20));
}// sinh ngau nhien cac so thuc -10--> 10
doc_mang(arr, n);
system("pause");
return 0;
}
void doc_mang(const double arr1[], int n)
{
float sum = 0, ph_sai = 0, tb=0;
int f[NUM] = { 0,0,0,0,0,0,0,0,0,0 }; //tan so
for ( int i = 0; i < n; i++)
{
sum += arr1[i];
}
tb = sum / n;
//////////////////////
for ( int i = 0; i < n; i++)
{
ph_sai += (arr1[i] - tb)*(arr1[i] - tb);
}
ph_sai = ph_sai / (n - 1);
////////////////////
cout << "Mang: " << endl;
for (int i = 0; i < n; i++)
{
cout << arr1[i] << " ";
}
cout << endl;
cout << "Trung binh: " << tb << endl << "Phuong sai: " << ph_sai << endl;
/////////////////////////
cout << "Tan suat" << endl;
//10 khoang, moi khoang L=2, Vmax=-Vmin=10
for (int j = 0; j < 10; j++)
{
float L = 2.0, Vmax = 10.0, Vmin = -10.0;
if (arr1[j] >= Vmin && arr1[j] <= Vmax)
if ((arr1[j] >= Vmin) && (arr1[j] < Vmin + L))
{
f[0]++;
}
else if (arr1[j] < Vmin + 2 * L)
{
f[1]++;
}
else if (arr1[j] < Vmin + 3 * L)
{
f[2]++;
}
else if (arr1[j] < Vmin + 4 * L)
{
f[3]++;
}
else if (arr1[j] < Vmin + 5 * L)
{
f[4]++;
}
else if (arr1[j] < Vmin + 6 * L)
{
f[5]++;
}
else if (arr1[j] < Vmin + 7 * L)
{
f[6]++;
}
else if (arr1[j] < Vmin + 8 * L)
{
f[7]++;
}
else if (arr1[j] < Vmin + 9 * L)
{
f[8]++;
}
else if (arr1[j] <= Vmax)
{
}
f[9]++;
}
int sumf = 0;
for (int i = 0; i < 10; i++)
{
sumf += f[i];
}
for (int i = 0; i < 10; i++)
{
cout << f[i] /double(sumf)<< " ";
}
cout << endl;
}
Câu 3:
#include <iostream>
#include<iomanip>
using namespace std;
#define N 3
typedef struct {
double data[N][N];
} Matrix;
void inmatran(Matrix C);
Matrix Tich(Matrix &A, Matrix &B);
Matrix cong_mot_so(Matrix &A, double x);
Matrix nhan_mot_so(Matrix &A, double x);
Matrix chia_mot_so(Matrix &A, double x);
Matrix hieu(Matrix &A, Matrix &B);
Matrix tong(Matrix &A, Matrix &B);
int main()
{
Matrix a, b, c, d;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
a.data[i][j] = -10 + (float)rand() / (RAND_MAX / (20));
b.data[i][j] = -10 + (float)rand() / (RAND_MAX / (20));
}
}
cout << "Ma tran a" << endl;
inmatran(a);
cout << endl;
cout << "Ma tran b" << endl;
inmatran(b);
cout << endl;
cout << "c = a + b + 0.5" << endl;
c = cong_mot_so(tong(a, b), 0.5);
inmatran(c);
cout << endl;
cout << "d = 1.5 + a*c" << endl;
d = cong_mot_so(Tich(a, c), 1.5);
inmatran(d);
cout << endl;
system("pause");
return 0;
}
Matrix Tich(Matrix &A, Matrix &B)
{
int i, j, k;
Matrix C;
for (i = 0; i < N; i++)
for (k = 0; k < N; k++)
{
C.data[i][k] = 0;
for (j = 0; j < N; j++)
C.data[i][k] = C.data[i][k] + A.data[i][j] * B.data[j][k];
}
return C;
}
Matrix tong(Matrix &A, Matrix &B)
{
int i, j, k;
Matrix C;
for (i = 0; i < N; i++)
for (k = 0; k < N; k++)
{
C.data[i][k] = A.data[i][k] + B.data[i][k];
}
return C;
}
Matrix hieu(Matrix &A, Matrix &B)
{
int i, j, k;
Matrix C;
for (i = 0; i < N; i++)
for (k = 0; k < N; k++)
{
C.data[i][k] = A.data[i][k] - B.data[i][k];
}
return C;
}
Matrix cong_mot_so(Matrix &A, double x)
{
int i, j, k;
Matrix C;
for (i = 0; i < N; i++)
for (k = 0; k < N; k++)
{
C.data[i][k] = A.data[i][k] + x;
}
return C;
}
void inmatran(Matrix C)
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
cout << setw(15) << C.data[i][j] << " ";
}
cout << endl;
}
}
Matrix nhan_mot_so(Matrix &A, double x)
{
int i, j, k;
Matrix C;
for (i = 0; i < N; i++)
for (k = 0; k < N; k++)
{
C.data[i][k] = A.data[i][k] * x;
}
return C;
}
Matrix chia_mot_so(Matrix &A, double x)
{
int i, j, k;
Matrix C;
for (i = 0; i < N; i++)
for (k = 0; k < N; k++)
{
C.data[i][k] = A.data[i][k] / x;
}
return C;
}
Câu 4:
#include <iostream>
#include<iomanip>
using namespace std;
typedef struct {
double thuc,ao;
} sophuc;
sophuc cong(sophuc a, sophuc b);
sophuc tru(sophuc a, sophuc b);
sophuc nhan(sophuc a, sophuc b);
sophuc chia(sophuc a, sophuc b);
void in(sophuc a);
int main()
{
sophuc sophuc1, sophuc2;
sophuc1 = { -10 + (float)rand() / (RAND_MAX / (20)),-10 + (float)rand() / (RAND_MAX /
(20)) };
sophuc2 = { -10 + (float)rand() / (RAND_MAX / (20)),-10 + (float)rand() / (RAND_MAX /
(20)) };
cout << "so phuc 1: ";
in(sophuc1);
cout << "so phuc 2: ";
in(sophuc2);
cout << "so phuc 1 + so phuc 2:" << endl;
in(cong(sophuc1, sophuc2));
cout << "so phuc 1 - so phuc 2:" << endl;
in(tru(sophuc1, sophuc2));
cout << "so phuc 1 * so phuc 2:" << endl;
in(nhan(sophuc1, sophuc2));
cout << "so phuc 1 / so phuc 2:" << endl;
in(chia(sophuc1, sophuc2));
system("pause");
}
sophuc cong(sophuc a,sophuc b)
{
sophuc c;
c.ao = a.ao + b.ao;
c.thuc = a.thuc + b.thuc;
return c;
}
sophuc tru(sophuc a, sophuc b)
{
sophuc c;
c.ao = a.ao - b.ao;
c.thuc = a.thuc - b.thuc;
return c;
}
sophuc nhan(sophuc a, sophuc b)
{
sophuc c;
c.ao = a.ao*b.thuc+a.thuc*b.ao;
c.thuc = a.thuc*b.thuc-a.ao*b.ao;
return c;
}
sophuc chia(sophuc a, sophuc b)
{
sophuc c;
c.ao = (a.ao*b.thuc - a.thuc*b.ao )/(b.ao*b.ao+b.thuc*b.thuc);
c.thuc =( a.thuc*b.thuc + a.ao*b.ao )/ (b.ao*b.ao + b.thuc*b.thuc);
return c;
}
void in(sophuc a)
{
cout << a.thuc << " + " << a.ao << "i"<
}
Câu 5:
#include <iostream>
#include<iomanip>
#include<math.h>
using namespace std;
#define num 100
double SUM(double arr[], int n);
void doinhiphan(int n);
void in_mang_thuan(double arr[], int n);
void in_mang_nghich(double arr[], int n);
double gt_bieu_thuc(double arr[], int n, int b,double x);
int main()
{
double arr1[num];
int n; double x;
cout << "nhap n: ";
cin >> n;
for (int i = 0; i < n; i++)
{
arr1[i]=-10+rand()%(21);
}
cout << "mang thuan: ";
in_mang_thuan(arr1, n);
cout << endl;
cout << "mang nghich: ";
in_mang_nghich(arr1, n);
cout << endl;
cout << "Nhap x: ";
cin >> x;
cout << "gia tri bieu thuc bac N: aX^N+bX^(N-1)+...
(voi arr1[N-1]=a, arr2[N-2]=b,...) :" << endl;
cout << gt_bieu_thuc(arr1, n, n - 1, x)<
cout << "doi sang nhi phan, nhap so can doi : ";
int y; cin >> y;
doinhiphan(y);
system("pause");
}
double SUM(double arr[], int n)
{
if (n == 1)return arr[0];
else return arr[n-1] + SUM(arr, n - 1);
}
void in_mang_thuan(double arr[], int n)
{
if (n > 0)
{
in_mang_thuan(arr, n - 1);
cout << arr[n-1] << " ";
}
}
void in_mang_nghich(double arr[], int n)
{
if (n == 0) return;
cout << arr[n - 1] << " ";
n--;
in_mang_nghich(arr, n);
}
void doinhiphan(int n)
{
double temp[num];
int i = 0;
if (n == 0);
else
{
temp[i]= n % 2;
i++;
n = n / 2;
doinhiphan(n);
}
in_mang_nghich(temp,i);
}
double gt_bieu_thuc(double arr[], int n, int b, double x)
{
double gt;
if (b == 0)gt=arr[0] ;
else
{
gt = arr[n - 1] * pow(x, b)+gt_bieu_thuc(arr, n - 1,b-1, x);
}
return gt;
}