From 89cba32356c69b34a06068dadac5ba2871530d73 Mon Sep 17 00:00:00 2001 From: khiemhoangtruongUIT <137704231+truonghoangkhiem@users.noreply.github.com> Date: Mon, 13 Nov 2023 23:56:47 +0700 Subject: [PATCH] 057 062 completed --- Bai057/Source.cpp | 26 +++++++++++++ Bai062/Source.cpp | 94 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 117 insertions(+), 3 deletions(-) diff --git a/Bai057/Source.cpp b/Bai057/Source.cpp index 9e1927f..2b35f35 100644 --- a/Bai057/Source.cpp +++ b/Bai057/Source.cpp @@ -1,8 +1,34 @@ #include +#include +#include using namespace std; +float Tinh(float, int); + int main() { + int n; + float x; + cout << "Nhap x: "; + cin >> x; + cout << "Nhap n: "; + cin >> n; + cout << "\nKet qua cua S(" << n << ") la: " << setw(5) << Tinh(x, n) << endl; return 0; +} + +float Tinh(float x, int n) +{ + if (n == 0) + { + return 0; + } + if (n == 1) + { + return x; + } + float a = Tinh(x, n - 1); + float b = Tinh(x, n - 2); + return ((1 + x/n) * a - x/n * b); } \ No newline at end of file diff --git a/Bai062/Source.cpp b/Bai062/Source.cpp index 9e1927f..1e9f811 100644 --- a/Bai062/Source.cpp +++ b/Bai062/Source.cpp @@ -1,8 +1,96 @@ -#include -using namespace std; +#include +#include + +// Gộp hai mảng con arr[l...m] và arr[m+1..r] +void merge(int arr[], int l, int m, int r) +{ + int i, j, k; + int n1 = m - l + 1; + int n2 = r - m; + + /* Tạo các mảng tạm */ + int L[1000], R[1000]; + + /* Copy dữ liệu sang các mảng tạm */ + for (i = 0; i < n1; i++) + L[i] = arr[l + i]; + for (j = 0; j < n2; j++) + R[j] = arr[m + 1 + j]; + + /* Gộp hai mảng tạm vừa rồi vào mảng arr*/ + i = 0; // Khởi tạo chỉ số bắt đầu của mảng con đầu tiên + j = 0; // Khởi tạo chỉ số bắt đầu của mảng con thứ hai + k = l; // IKhởi tạo chỉ số bắt đầu của mảng lưu kết quả + while (i < n1 && j < n2) + { + if (L[i] <= R[j]) + { + arr[k] = L[i]; + i++; + } + else + { + arr[k] = R[j]; + j++; + } + k++; + } + + /* Copy các phần tử còn lại của mảng L vào arr nếu có */ + while (i < n1) + { + arr[k] = L[i]; + i++; + k++; + } + + /* Copy các phần tử còn lại của mảng R vào arr nếu có */ + while (j < n2) + { + arr[k] = R[j]; + j++; + k++; + } +} + +/* l là chỉ số trái và r là chỉ số phải của mảng cần được sắp xếp */ +void mergeSort(int arr[], int l, int r) +{ + if (l < r) + { + // Tương tự (l+r)/2, nhưng cách này tránh tràn số khi l và r lớn + int m = l + (r - l) / 2; + + // Gọi hàm đệ quy tiếp tục chia đôi từng nửa mảng + mergeSort(arr, l, m); + mergeSort(arr, m + 1, r); + + merge(arr, l, m, r); + } +} + + +/* Hàm xuất mảng */ +void printArray(int A[], int size) +{ + int i; + for (i = 0; i < size; i++) + printf("%d ", A[i]); + printf("\n"); +} + int main() { + int arr[] = { 12, 11, 13, 5, 6, 7 }; + int arr_size = sizeof(arr) / sizeof(arr[0]); + + printf("Given array is \n"); + printArray(arr, arr_size); + + mergeSort(arr, 0, arr_size - 1); - return 0; + printf("\nSorted array is \n"); + printArray(arr, arr_size); + return 0; } \ No newline at end of file