Professional Documents
Culture Documents
Ôn Thi Gi A Kì
Ôn Thi Gi A Kì
Bài 4. Viết hàm đệ qui tính giá trị của xn ; Bài 8. Viết hàm đệ qui chuyển một số
với x, n là số nguyên. nguyên dương từ hệ thập phân sang nhị
int luythua(int x, int n) phân.
{ int cdTP(int n)
if (n == 0) {
return 1; if (n == 1)
if (n == 1) return 1;
return x; else
else {
return x * luythua(x, n - 1); return ( n % 2 + 10 *cdTP( n/2));
}
Bài 5. Viết hàm đệ qui đếm số chữ số của }
}
Bài : Số đảo ngược con trỏ Bài 5. Dùng con trỏ viết hàm xuất n
#include <iostream> giá trị của dãy số Fibonacci (n do
using namespace std;
người dùng nhập, là số nguyên > 1).
void reverse(int& num) { #include <iostream>
int rev_num = 0; using namespace std;
while (num > 0) { void Fibonacci(int* a, int n)
int digit = num % 10; {
rev_num = (rev_num * 10) + digit; for (int i = 0; i < n; i++)
num = num / 10; {
} if (i < 2)
num = rev_num; *(a + i) = 1;
} else
*(a + i) = *(a + i - 1) + *(a + i - 2);
int main() { }
int x = 12345;
int* ptr = &x; }
cout << "Number before reversing: " << *ptr << endl; void xuat(int* a, int n)
reverse(*ptr); {
cout << "Number after reversing: " << *ptr << endl;
return 0; for (int i = 0; i < n; i++)
} cout << *(a + i) << " \t";
}
Bài: Fibonaci con trỏ int main()
#include <iostream> {
using namespace std; int n;
do {
void fibonacci(int* arr, int n) { cout << "Nhap so gia tri Fibonacci muon xuat: ";
*arr = 0; cin >> n;
*(arr + 1) = 1; } while (n <= 1);
for (int i = 2; i < n; i++) { int* a;
*(arr + i) = *(arr + i - 1) + *(arr + i - 2); a = new int[n];
} Fibonacci(a, n);
} cout << endl<< n << " so Fibonacci la: ";
xuat(a, n);
int main() { delete[] a;
int n = 10; return 0;
int fib_arr[n];
int* fib_ptr = fib_arr; }
fibonacci(fib_ptr, n);
cout << "The Fibonacci sequence is: ";
for (int i = 0; i < n; i++) {
cout << *(fib_ptr + i) << " ";
}
return 0;
}
Bài 9. Viết chương trình dùng cấp phát động của con trỏ để viết: - Hàm nhập 1 mảng số
nguyên r hàng và c cột. - Hàm xuất 1 mảng số nguyên r hàng c cột. - Hàm dùng con trỏ để
tính tổng các phần tử nào là số nguyên tố trong mảng 2 chiều. - Hàm dùng để trả về các số
nguyên tố trong mảng 2 chiều. - Hàm main để kiểm chứng.
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
const int maxrow = 10, maxcol = 20;
void nhap(int** a, int r, int c)
{
for (int i = 0; i < r; i++)
{
cout << " Nhap " << c << " phan tu cho hang " << i + 1 << " : ";
for (int j = 0; j < c; j++)
cin >> a[i][j];
}
}
void xuat(int** a, int r, int c)
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
cout << a[i][j] << " \t ";
cout << endl;
}
}
bool SNT(int n)
{
if (n < 2)
return false;
else {
for (int i = 2; i <= sqrt(n * 1.0); i++)
{
if (n % i == 0)
return false;
}
return true;
}
int TongSNT(int** a, int r, int c)
{
int tong = 0;
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
if (SNT(a[i][j]))
tong += a[i][j];
}
return tong;
}
void XuatSNT(int** a, int r, int c, int* &p, int &size)
{
size = 0; p = new int(r * c);
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
if (SNT(a[i][j]))
{
p[size] = a[i][j];
size++;
}
}
}
}
int main()
{
int r,c;
do {
cout << " Nhap so hang: ";
cin >> r ;
if (r <= 0 || r > maxrow)
cout << " Nhap lai! \n";
} while (r <= 0 || r > maxrow );
do {
cout << " Nhap so cot: ";
cin >> c;
if (c <= 0 || c > maxcol)
cout << " Nhap lai! \n";
} while (c <= 0 || c > maxcol);
int** a;
a = new int* [r];
for (int i = 0;i < r; i++)
a[i] = new int[c];
nhap(a, r, c);
int chon;
do
{
system("pause");
cout << " _____MENU_____\n"
<< " 1. Nhap mang\n"
<< " 2. Xuat mang\n"
<< " 3. Tinh tong cac so nguyen to trong mang\n"
<< " 4. Xuat cac so nguyen to co trong mang\n"
<< " 5. Thoat\n"
<< " Ban chon: ";
cin >> chon;
switch (chon)
{
case 1:
cout << " ___Chuc nang: Nhap mang~\n";
break;
case 2:
cout << " ___Chuc nang: Xuat mang~\n";
{
cout << " Mang vua nhap la: \n";
xuat(a, r, c);
}
break;
case 3:
cout << " ___Chuc nang: Tinh tong cac so nguyen to trong mang~\n";
{
cout << " Tong cac so nguyen to trong mang vua nhap la: " << TongSNT(a, r, c)
<< endl;
}
break;
case 4:
cout << "___ Chuc nang: Xuat cac so nguyen to co trong mang~\n";
{
int* p = NULL;
int size = r * c;
XuatSNT(a, r, c, p, size);
for (int i = 0; i < size; i++)
cout << p[i] << "\t ";
}
break;
case 5:
cout << " Cam on ban da su dung chuong trinh\n";
return 0;
default:
cout << " Nhap lai!";
break;
}
system("pause");
} while (true);
//huycapphatdong
for (int i = 0; i < r; i++)
delete [] a[i];
delete [] a;
a = nullptr;
system("pause");
return 0;
}
Bài 10.Viết chương trình dùng cấp phát mt1 = new int* [r1];
for (int i = 0; i < r1; i++)
động để khởi tạo ngẫu nhiên giá trị của 2 mt1[i] = new int[c1];
mảng số nguyên theo dạng thức ma trận. mt2 = new int* [r2];
for (int i = 0; i < r2; i++)
Sau đó tính tổng và tích của 2 ma trận đó. mt2[i] = new int[c2];
#include <iostream> srand(time(0));
#include <cstdlib> nhap(mt1, r1, c1);
#include <ctime> nhap(mt2, r2, c2);
#include <conio.h> // xuat mang
using namespace std; cout << " Mang thu nhat la:\n ";
xuat(mt1, r1, c1);
void nhap(int** a, int r, int c) { cout << " Mang thu hai la:\n ";
for (int i = 0; i < r; i++) { xuat(mt2, r2, c2);
for (int j = 0; j < c; j++) system("pause");
a[i][j] = rand() % 100; int chon;
} do
} {
void xuat(int** a, int r, int c) { system("cls");
for (int i = 0; i < r; i++) { cout << " _____MENU_____\n"
for (int j = 0; j < c; j++) << " 1.Tinh tong 2 ma tran \n"
cout << a[i][j] << " \t "; << " 2.Tinh tich 2 ma tran \n"
cout << endl; << " 3.Thoat\n"
} << " Ban chon: ";
} cin >> chon;
switch (chon)
void tinhtong(int** a, int** b, int** tong, int r, int c) { {
for (int i = 0; i < r; i++) { case 1:
for (int j = 0; j < c; j++) {
tong[i][j] = a[i][j] + b[i][j];
} cout << "+++ Chuc nang: Tinh tong 2 ma
} tran \n";
int** tong = new int* [r1];
void tinhtich(int** a, int** b, int** tich, int r1, int c, int c2) { for (int i = 0; i < r1; i++)
for (int i = 0; i < r1; i++) { tong[i] = new int[c1];
for (int j = 0; j < c2; j++) { if (r1 == r2 && c1 == c2)
tich[i][j] = 0; {
for (int k = 0; k < c; k++) { tinhtong(mt1, mt2, tong, r1, c1);
tich[i][j] += a[i][k] * b[k][j]; cout << " Tong cua 2 mang la: \
} n";
} xuat(tong, r1, c1);
} }
} else
cout << " Khong the tinh tong cua
int main() { 2 mang ";
int r1, c1, r2, c2; for (int i = 0; i < r1; i++)
int** mt1, ** mt2; delete[] tong[i];
do { delete[] tong;
cout << " Nhap so hang va so cot cho mang thu tong = nullptr;
nhat : "; break;
cin >> r1 >> c1; }
} while (r1 <= 0 || c1 <= 0);
do {
cout << " Nhap so hang va so cot cho mang thu
hai : ";
cin >> r2 >> c2;
} while (r2 <= 0 || c2 <= 0);
Bài 10:
case 2:
{
cout << "+++ Chuc nang: Tinh tich 2
ma tran \n";
int** tich;
1. Viết chương trình gồm các hàm: -
tich = new int* [r1]; Nhập giá trị hệ số cho phương trình bậc
for (int i = 0; i < r1; i++) 2 - Tính nghiệm phương trình bậc 2 -
tich[i] = new int[c2];
if (c1 == r2) Hàm main kiểm chứng.
{ #include <iostream>
#include <cmath>
tinhtich(mt1, mt2, tich, r1, using namespace std;
c1, c2); void solve_equation(double a, double b, double c, double* x1, double*
cout << " Tich cua 2 mang x2) {
la:\n"; double delta = b * b - 4 * a * c;
xuat(tich, r1, c2); if (delta < 0) {
} *x1 = *x2 = NAN;
else }
cout << " Khong the tinh tich else if (delta == 0) {
cua 2 mang "; *x1 = *x2 = -b / (2 * a);
for (int i = 0; i < r1; i++) }
delete[] tich[i]; else {
delete[] tich; *x1 = (-b + sqrt(delta)) / (2 * a);
tich = nullptr; *x2 = (-b - sqrt(delta)) / (2 * a);
break; }
} }
case 3:
cout << "Cam on ban da su dung int main() {
chuong trinh\n"; double a, b, c, x1, x2;
return 0; do {
default: cout << "Nhap he so a( a khac 0): ";
cout << " Nhap lai!\n"; cin >> a;
} } while (a == 0);
system("pause");
} while (true); cout << "Nhap he so b: ";
for (int i = 0; i < r1; i++) cin >> b;
delete[] mt1[i]; cout << "Nhap he so c: ";
delete[] mt1; cin >> c;
mt1 = nullptr; solve_equation(a, b, c, &x1, &x2);
for (int i = 0; i < r2; i++) if (isnan(x1)) {
delete[] mt2[i]; cout << "Phuong trinh vo nghiem" << endl;
delete[] mt2; }
mt2 = nullptr; else if (x1 == x2) {
return 0; cout << "Phuong trinh co nghiem kep x = " << x1 << endl;
} }
else {
cout << "Phuong trinh co hai nghiem phan biet x1 = " << x1 << "
va x2 = " << x2 << endl;
}
return 0;
}
return 0;
}
Đề thi thử gk - Hàm đệ quy tìm số lượng bán ra lớn nhất trong các mặt hàng
đã bán ở 1 ngày nào đó (ngày do người dùng nhập). - Hàm đệ
- Nhập số lượng bán ra của nhiều sản phẩm trong nhiều
quy tìm tổng số lượng bán ra của 1 mặt hàng (do người dùng
ngày.
nhập) trong toàn bộ các ngày lưu trữ.
- Xuất số lượng bán ra của nhiều sản phẩm trong nhiều
- Hàm nhận vào số thứ tự sản phẩm thứ mấy trong danh sách
ngày.
lưu trữ( chẵn giảm lẻ tăng).
- Hàm trả về giá trị bán ra thấp nhất của mỗi sản phẩm
- Hàm trả về con trỏ chứa giá trị địa chỉ mặt hàng bán ra
trong suốt toàn bộ số ngày đã ghi nhận.
được nhiều nhất trong tất cả các ngày đã lưu trữ
- Hàm trả về thứ tự của mặt hàng nào có số lượng bán ra
thấp nhất trong tất cả các mặt hàng trong kết quả đã trả về
ở câu trên.
.
#include <iostream>
#include <conio.h>
using namespace std;
const int maxrow = 30, maxcol = 10;
void nhap(int** a, int r, int c);
void xuat(int** a, int r, int c);
int* minvaluePro(int** a, int r, int c);
int ordinal(int** a, int r, int c);
int max1day(int** a, int rn, int c);
int tongSP(int** a, int r, int cn);
void arrange(int** a, int r, int stt);
int* MaxValue(int** a, int r, int c);
void menu();
int main()
{
int r = 0, c = 0;
int** a = NULL;
int chon;
while (true)
{
system("cls");
menu();
cin >> chon;
switch (chon)
{
case 1:
{
cout << "***Nhap san pham, so ngay, so luong ban ra cua nhieu san pham trong nhieu ngay\n";
do
{
cout << " Nhap so ngay muon luu tru: ";
cin >> r;
} while (r <= 0 || r > maxrow);
do
{
cout << " Nhap so loai san pham: ";
cin >> c;
} while (c <= 0 || c > maxcol);
a = new int* [r];
for (int i = 0; i < r; i++)
a[i] = new int[c];
cout << "____Nhap du lieu____\n";
nhap(a, r, c);
break;
}
case 2:
{
if (r == 0)
{
cout << " Chua nhap du lieu. Hay chon 1\n";
}
else
{
cout << "***Xuat so luong ban ra cua nhieu san pham trong nhieu ngay\n";
cout << "___ Du lieu vua nhap la:\n";
xuat(a, r, c);
}
break;
}
case 3:
{
if (r == 0)
cout << " Chua nhap du lieu. Hay chon 1\n";
else
{
cout << "***Gia tri ban ra thap nhat cua moi san pham trong suot " << r << " ngay da ghi\n";
cout << "___Table:\n";
xuat(a, r, c);
int* p = minvaluePro(a, r, c);
cout << "Gia tri ban ra thap nhat cua moi san pham lan luot la: " ;
for (int i = 0; i < c; i++)
{
cout << p[i] << "\t";
}
cout << endl;
}
break;
}
case 4:
{
if (r == 0)
cout << " Chua nhap du lieu. Hay chon 1\n";
else
{
cout << " *** Thu tu cua mat hang co so luong ban ra thap nhat trong tat ca cac mat hang\n";
cout << "___ Table:\n";
xuat(a, r, c);
cout << " Thu tu mat hang co so luong ban ra thap nhat trong suot " << r << " ngay la: " <<
ordinal(a, r, c) << endl;
}
break;
}
case 5:
{
if (r == 0)
cout << " Chua nhap du lieu. Hay chon 1\n";
else
{
cout << " ***So luong ban ra lon nhat trong cac mat hang da ban o 1 ngay\n";
cout << "___ Table:\n";
xuat(a, r, c);
int rn;
do
{
cout << " Nhap ngay muon tim ra so luong ban lon nhat ";
cin >> rn;
if (rn <= 0 || rn > r)
cout << "Nhap sai. Nhap lai!\n ";
} while (rn <= 0 || rn > r);
cout << " Gia tri lon nhat trong ngay " << rn << " la: ";
cout << max1day(a, rn - 1, c) << endl;
}
break;
}
case 6:
{
if (r == 0)
cout << " Chua nhap du lieu. Hay chon 1\n";
else
{
cout << " ***Tong so luong ban ra cua 1 mat hang trong toan bo cac ngay luu tru\n";
cout << "___ Table:\n";
xuat(a, r, c);
int cn;
do
{
cout << " \nNhap thu tu san pham muon tinh tong so luong ban ra: ";
cin >> cn;
if (cn <= 0 || cn > c)
cout << "Nhap sai. Nhap lai!\n ";
} while (cn <= 0 || cn > c);
cout << " Tong so luong ban ra cua san pham thu " << cn << " la " << tongSP(a, r, cn - 1) <<
endl;
}
break;
}
case 7:
{
if (r == 0)
cout << " Chua nhap du lieu. Hay chon 1\n";
else
{
cout << " ***Sap xep so luong ban cua san pham \n";
cout << "___ Table:\n";
xuat(a, r, c);
int stt;
do
{
cout << " \nNhap so thu tu san pham muon sap xep trong danh sach luu tru: ";
cin >> stt;
if (stt <= 0 || stt > c)
cout << "Nhap sai. Nhap lai!\n ";
} while (stt <= 0 || stt > c);
cout << " San pham thu " << stt << " duoc sap xep lai la: \n";
arrange(a, r, stt - 1);
for (int i = 0; i < r; i++)
cout << a[i][stt - 1] << endl;
}
break;
}
case 8:
{
if (r == 0)
cout << " Chua nhap du lieu. Hay chon 1\n";
else
{
cout << " ***Vi tri cua phan tu co so luong ban duoc lon nhat trong bang\n";
cout << "___ Table:\n";
xuat(a, r, c);
int* p = MaxValue(a, r, c);
for (int i = 0; i < r; i++)
{
int VT = abs(int(p) - int(&a[i][0])) / sizeof(a[0][0]);
if (VT < c)
{
cout << "So luong ban duoc lon nhat trong bang la: " << endl
<< "ngay thu " << i + 1 << " san pham thu "
<< VT + 1 << endl;
}
}
}
break;
}
case 9:
{
cout << " ***Cam on ban da su dung chuong trinh\n";
for (int i = 0; i < r; i++)
delete[] a[i];
delete[] a;
a = nullptr;
return 0;
}
default:
cout << " Vui long chon lai!\n";
break;
}
system("pause");
}
}
void menu()
{
cout << "_______________________________MENU____________________________\n"
<< "1. Nhap san pham, so ngay, so luong ban ra cua nhieu san pham trong nhieu ngay\n"
<< "2. Xuat so luong ban ra cua nhieu san pham trong nhieu ngay\n"
<< "3. Gia tri ban ra thap nhat cua moi san pham trong suot toan bo so ngay da ghi\n"
<< "4. Thu tu cua mat hang co so luong ban ra thap nhat trong tat ca cac mat hang\n"
<< "5. So luong ban ra lon nhat trong cac mat hang da ban o 1 ngay\n"
<< "6. Tong so luong ban ra cua 1 mat hang trong toan bo cac ngay luu tru\n"
<< "7. Sap xep so luong ban cua san pham (do nguoi dung nhap) trong toan bo cac ngay luu tru\n"
<< " (gia tri giam dan theo ngay chan va tang dan theo ngay le)\n"
<< "8. Vi tri cua phan tu co so luong ban duoc lon nhat trong bang\n"
<< "9. Thoat\n"
<< " Ban chon: ";
}
void nhap(int** a, int r, int c)
{
for (int i = 0; i < r; i++)
{
cout << "*****Nhap so luong ban ra cua ngay thu " << i + 1 << " :\n ";
for (int j = 0; j < c; j++)
{
do
{
cout << "+ Nhap so luong ban ra cua san pham " << j + 1 << " ngay " << i + 1 << " : ";
cin >> a[i][j];
if (a[i][j] <= 0)
cout << " Nhap sai. Nhap lai!\n";
} while (a[i][j] <= 0);
}
}
void xuat(int** a, int r, int c)
{
for (int i = 0; i < r; i++)
{
cout << " Ngay " << i + 1 << ";
for (int j = 0; j < c; j++)
cout << a[i][j] << " \t ";
cout << endl;
}
}
int* minvaluePro(int** a, int r, int c)
{
int* b = new int[c];
for (int i = 0; i < c; i++) {
int min = a[0][i];
for (int j = 1; j < r; j++) {
if (a[j][i] < min)
{
min = a[j][i];
}
}
b[i] = min;
}
return b;
}
int ordinal(int** a, int r, int c)
{
int* p = minvaluePro(a, r, c);
float min = p[0];
int sp = 1;
for (int i = 1; i < c; i++) {
if (p[i] < min)
{
min = p[i];
sp = i + 1;
}
}
delete[] p;
return sp;
}
int max(int a, int b)
{
if (a > b)
return a;
else
return b;
}
int max1day(int** a, int rn, int c)
{
if (c == 1)
return a[rn][0];
else
return max(a[rn][c - 1], max1day(a,rn, c - 1));
Hàm chính phương và hoàn thiện
// Hàm đếm số lượng số chính phương trong mảng
int countPerfectSquares(int* arr, int size) {
int count = 0;
} for (int i = 0; i < size; i++) {
int tongSP(int** a, int r, int cn) if (sqrt(*(arr + i)) == floor(sqrt(*(arr + i)))) {
{ count++;
if (r == 1) }
return a[0][cn]; }
else return count;
return a[r - 1][cn] + tongSP(a, r - 1,cn); }
}
void swapInt(int a, int b) // Hàm kiểm tra mảng có số hoàn thiện hay không
{ bool hasPerfectNumber(int* arr, int size) {
int tmp = a; for (int i = 0; i < size; i++) {
a = b; int sum = 0;
b = tmp; for (int j = 1; j <= *(arr + i) / 2; j++) {
} if (*(arr + i) % j == 0) {
void arrange(int** a, int r, int stt) sum += j;
{ }
for (int i = 0; i < r; i++) }
{ if (sum == *(arr + i)) {
if (i % 2 != 0) return true;
{ }
for (int j = i + 2; j < r; j += 2) }
{ return false;
if (a[i][stt] < a[j][stt]) }
swap(a[i][stt], a[j][stt]);
} // Hàm kiểm tra mảng có số âm hay không
} bool hasNegativeNumber(int* arr, int size) {
else for (int i = 0; i < size; i++) {
{ if (*(arr + i) < 0) {
for (int j = i + 2; j < r; j += 2) return true;
{ }
if (a[i][stt] > a[j][stt]) }
swap(a[i][stt], a[j][stt]); return false;
} }
} // Hàm trả về địa chỉ số chính phương đầu tiên trong mảng. Nếu
} không có trả về NULL
int* getFirstPerfectSquare(int* arr, int size) {
} for (int i = 0; i < size; i++) {
int* MaxValue(int** a, int r, int c) { if (sqrt(*(arr + i)) == floor(sqrt(*(arr + i)))) {
int* maxVal = &a[0][0]; return (arr + i);
for (int i = 0; i < r; i++) }
{ }
for (int j = 0; j < c; j++) return NULL;
{ }
if (a[i][j] > *maxVal) // Hàm trả về địa chỉ số nhỏ nhất xuất hiện đầu tiên trong mảng
{ int* getFirstMinNumber(int* arr, int size) {
maxVal = &a[i][j]; int* result = arr;
} for (int i = 1; i < size; i++) {
} if (*(arr + i) < *result) {
} result = (arr + i);
return maxVal; }
} }
return result;
}