Các câu hỏi ôn tập cho kỳ thi giữa kỳ 1. Hàm đệ quy int Factorial(int N) tính N! 2. Hàm đệ quy double Pow(double x, int n) tính x n 3. Hàm đệ quy USCLN (int a, int b) tìm ước số chung lớn nhất của a và b 4. Viết hàm double Value(double a[], int n, double x0) để tính giá trị của hàm f(x) = a n x n + a n-1 x n-1 +…+a 1 x + a 0 tại x0 5. Viết hàm double Root(double a[], int n, double x1, double x2) để tìm giao điểm của f(x) = a n x n + a n-1 x n-1 +…+a 1 x + a 0 giữa [x1, x2] với trục hoành bằng phương pháp chia đôi với độ chính xác 1e-10 6. Viết hàm void InsertionSort(int A[], int N, int Indies[]) // A – mảng dữ liệu, N – số phần tử của mảng // Indies – mảng các chỉ số sao cho A[Indies[i]] | i = 0…N – 1 có thứ tự tăng dần 7. Viết hàm void SelectionSort(int A[], int N, int Indies[]) // A – mảng dữ liệu, N – số phần tử của mảng // Indies – mảng các chỉ số sao cho A[Indies[i]] | i = 0…N – 1 có thứ tự tăng dần 8. Viết hàm void BubbleSort(int A[], int N, int Indies[]) // A – mảng dữ liệu, N – số phần tử của mảng // Indies – mảng các chỉ số sao cho A[Indies[i]] | i = 0…N – 1 có thứ tự tăng dần 9. Viết hàm int Part(int A[], int lb, int ub, int Indies[]) // A – mảng dữ liệu, N – số phần tử của mảng // Indies – mảng các chỉ số // lb – chỉ số đầu đoạn, ub – chỉ số cuối đoạn sao cho (A[Indies[l]] | l = lb … j – 1 < A[Indies[j]] < A[Indies[r]] | r = j + 1 … ub ) | j – giá trị trả về của hàm 10. Viết hàm void BuildHeap(int A[], int N, int i, int Indies[]) // A – mảng dữ liệu, N – số phần tử của mảng // Indies – mảng các chỉ số // i – chỉ số của nút gốc sao cho A[Indies[j]] | j = i…N – 1 là một Heap 11. Viết hàm int BinarySearch(int A[], int N, int Indies[], int X) // A – mảng dữ liệu, N – số phần tử của mảng // Indies – mảng các chỉ số, A[Indies[i]] | i = 0…N – 1 có thứ tự tăng dần // giá trị trả về: vị trí của X trong mảng A hoặc –1 nếu không tồn tại X 12. Cho đoạn khai báo class sau: class Int32 { int value; public: Int32(int v) : value(v) {} // hàm tạo từ giá trị v void Parse(const char *s); }; Viết mã cho hàm void Int32::Parse(const char *s) để gán giá trị cho Int32::value từ xâu đầu vào s 13. Cho đoạn khai báo class sau: class Array { int * data, len; // data – mảng số nguyên, len – độ dài của mảng public: Array(int A[], int N); // hàm tạo từ mảng A với N phần tử ~Array(); // hàm hủy int Sum(); // hàm tính tổng các phần tử của mảng double Avg(); // hàm tìm giá trị trung bình của mảng int Max(); // hàm tìm giá trị lón lớn nhất trong mảng int Min(); // hàm tìm giá trị nhỏ nhất trong mảng void GetRange(int &min, int &max);// hàm tìm giá trị lớn nhất và // nhỏ nhất của mảng }; Viết mã cho các hàm của class Array. 14. Xây dựng class Stack để có thể thực hiện đoạn thuật toán sau: Stack s; // khai báo Stack s có thể chứa 20 phần tử kiểu int int x = 25; do { s.Push(x & 1); x >>=1; } while (x); while (!s.IsEmpty()) cout << s.Pop(); Trên màn hình phải thể hiện: Tao stack 11001 Huy stack 15. Cho đoạn khai báo class sau: class TamGiac { double _a, _b, _c; // ba cạnh của tam giác private: int Kieu(); // hàm tìm kiểu của tam giác (thường, vuông, cân, // vuông cân hoặc đều) public: TamGiac(double a, double b, double c); void Print(); }; Viết mã cho các hàm của class TamGiac sao cho kết quả của đoạn mã: TamGiac tg(2, sqrt(2), sqrt(2)) tg.Print(); cho hiện trên mà hình kết quả là “vuong can” Ví dụ đề thi Cho trước các file trong project ThiGiuaKy: // main.cpp #include “ThuVien.h” #include <iostream> using namespace std; int showMenu() { cout << “0. Thoat\n”; cout << “1. Stack\n”; cout << “2. Array\n”; cout << “3. InsertionSort”; cout << “> ”; char c = cin.get(); return (c – 48); } void main() { int menu; int A[] = { 66, 33, 44, 77, 99, 11, 55, 22, 88 }; while (menu = showMenu()) { if (menu == 1) { Stack s; int x = 25; do { s.Push(x & 1); x >>=1; } while (x); while (!s.IsEmpty()) cout << s.Pop(); } if (menu == 2) { int min, max; Array arr(A, 9); cout << “min = “ << arr.Min() << endl; cout << “max = “ << arr.Max(); } if (menu == 3) { int N = 9, i; int *indies = new int[N]; for (i = 0; i < N; i++) indies[i] = i; InsertionSort(A, N, indies); for (i = 0; i < N; i++) cout << A[indies[i]] << ‘ ‘; } cout << endl; } } // ThiGiuaKy.h #pragma once double Value(int a[], int n, double x0); double Root(int a[], int n, double x1, double x2); void swap(int &a, int &b); void SelectionSort(int A[], int N, int Indies[]); void InsertionSort(int A[], int N, int Indies[]); void BubbleSort(int A[], int N, int Indies[]); int Part(int A[], int lb, int ub, int Indies[]); void BuildHeap(int A[], int N, int i, int Indies[]); class Array {…}; class Stack {…}; class Int32 {…}; class TamGiac {…}; // ThiGiuaKy.cpp #include “ThiGiuaKy.h” void swap(int &a, int &b) { int t = a; a = b; b = t; } // mã của các hàm cần thiết khác Yêu cầu đối với sinh viên có số hiệu 2008003 Thêm file 2001003.cpp vào project và viết mã cho các hàm để hàm main có thể cho kết quả đúng. . Các câu hỏi ôn tập cho kỳ thi giữa kỳ 1. Hàm đệ quy int Factorial(int N) tính N! 2. Hàm đệ quy double Pow(double. _c; // ba cạnh của tam giác private: int Kieu(); // hàm tìm kiểu của tam giác (thường, vuông, cân, // vuông cân hoặc đều) public: TamGiac(double a, double b, double c); void Print(); }; Viết mã. A[Indies[i]] | i = 0…N – 1 có thứ tự tăng dần // giá trị trả về: vị trí của X trong mảng A hoặc –1 nếu không tồn tại X 12. Cho đoạn khai báo class sau: class Int32 { int value; public: Int32(int v) : value(v)