Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <iomanip>
- #include <stack>
- #include <queue>
- using namespace std;
- /*******************************/
- //hàm mở file để đọc
- //biến name chứa tên file.
- void Open_File_Read( string name, fstream &file);
- //Hàm đóng file
- void Close_File(fstream &file);
- //hàm đọc file số nguyên, lưu vào biến số nguyên n.
- int Read_File_Int(fstream &file );
- //hàm đọc file.
- //file gồm 3 dòng. dòng 1 là 1 số nguyên ( số phần tử của mỗi dòng sau) lưu vào biến n
- //dòng 2 và dòng 3 là các dãy số nguyên. lưu vào 2 mảng arr1 và arr2.
- void Read_File( fstream &file, int n, int arr1[], int arr2[]);
- //Hàm tạo mảng động lưu trữ dãy số nguyên gôm n phần tử.
- int* Creat_Array( int n);
- //Hàm xóa mảng động arr[].
- void Delete_Array( int* arr);
- //Hàm in mảng arr[] ra màn hình. Với n là số phần tử của mảng.
- void Print_Array( int* arr, int n);
- //Tổng từng phần tử 2 mảng.
- int* Sum_Bin_Array (int* arr1, int* arr2, int n);
- //Hàm mở file để viết vào.
- void Open_File_Write(fstream &file, string name);
- //Hàm viết một số nguyên vào file.
- //với int i là số nguyên cần viết.
- void Write_File_Int ( fstream &file, int i);
- //Hàm viết một mảng vào file
- //arr là mảng cần viết.
- //n là số phần tử của mảng.
- void Write_File_Array(fstream& file, int* arr, int n);
- //Hàm thực hiện chức năng 1. tính tổng 2 mảng và in vào file đã chọn.
- void Option1 (string , int* arr1, int* arr2, int n);
- //Hàm thưc hiện chức năng 2.Đưa các giá trị của mảng1 vào ngăn xếp rồi in ra màn hình.
- //n là số phần tử của mảng.
- void Option2 ( int* arr1, int n);
- //Hàm thưc hiện chức năng 2.Đưa các giá trị của mảng1 vào hàng đợi rồi in ra màn hình.
- //n là số phần tử của mảng.
- void Option3 ( int* arr2, int n);
- //Hàm hoán đổi giá trị 2 số a , b.
- void Swap ( int &a, int& b);
- // thuat toan quick-sort
- void QuickSort(int A[], int Left, int Right);
- //Hàm thực hiện chức năng 4. Sắp xếp mảng 1 bằng Quick Sort. rồi in ra màn hình.
- //có thể in vào mảng.
- void Option4 (string , int *arr1, int n);
- /****************************************************/
- int main( int argc, char* argv[])
- {
- if ( argc > 1 && argc < 5 )
- {
- if (argc == 3 )
- {
- cout <<" Khong duoc tao file xuat ma khong co chuc nang ( Option)" <<endl;
- system("pause");
- return 0;
- }
- fstream fileIn; //biến lưu file input.
- string nameIn; //tên file Input
- int n; //số lượng phần tử ở mỗi dòng trong file Input.
- //Yêu cầu 1 và 2.
- /*************************************************************/
- nameIn = nameIn + argv[1];
- Open_File_Read(nameIn,fileIn); //Gọi hàm mở file Input
- n = Read_File_Int(fileIn); //lấy phần tử mở mỗi dòng trong fileIn
- int* arr1 = Creat_Array(n); //tạo mảng arr1
- int* arr2 = Creat_Array(n); //tạo mảng arr2
- Read_File(fileIn,n,arr1,arr2); //đọc các phần tử trong file vào 2 mảng.
- Close_File(fileIn); //Gọi hàm đóng file Input
- cout <<setw(4) << n << endl; //in số phần tử ra màn hình.
- Print_Array(arr1,n); //in mảng ra màn hình.
- cout << endl;
- Print_Array(arr2,n);
- /*************************************************************/
- if (argc == 4)
- {
- int key; //biến key dùng để đọc lệnh Option của người dùng qua tham số.
- key = atoi(argv[3]);
- // Thực hiện Option 1. Tính tổng từng phần tử 2 mảng rồi in vào file.
- if ( key == 1)
- {
- //tạo tên file xuất là tham số thứ 3 mà người dùng đã nhập
- string nameOut;
- nameOut = nameOut + argv[2];
- Option1(nameOut,arr1,arr2,n);
- return 0;
- }
- if ( key == 2)
- {
- cout << endl;
- Option2(arr1,n); //gọi hàm thực hiện Option 2.
- cout << endl;
- return 0;
- }
- if ( key == 3)
- {
- cout << endl;
- Option3(arr2,n); //Gọi hàm thực hiện Option3
- cout <<endl;
- return 0;
- }
- if ( key == 4)
- {
- string nameOut;
- nameOut = nameOut + argv[2];
- cout << endl;
- Option4(nameOut,arr1,n);
- cout << endl;
- return 0;
- }
- }
- /*************************************************************/
- Delete_Array(arr1); //Hàm xóa mảng.
- Delete_Array(arr2);
- }
- else
- cout <<endl << "Nhap sai tham so dong lenh";
- return 0;
- }
- //hàm mở file để đọc
- //biến name chứa tên file.
- void Open_File_Read( string name, fstream &file)
- {
- file.open(name,ios::in);
- }
- //Hàm đóng file.
- void Close_File(fstream &file)
- {
- file.close();
- }
- //hàm đọc file.
- //file gồm 3 dòng. dòng 1 là 1 số nguyên ( số phần tử của mỗi dòng sau) lưu vào biến n
- //dòng 2 và dòng 3 là các dãy số nguyên. lưu vào 2 mảng arr1 và arr2.
- void Read_File( fstream &file, int n, int arr1[], int arr2[])
- {
- for ( int i = 0; i < n; i++)
- arr1[i] = Read_File_Int(file);
- for ( int i = 0; i < n; i++)
- arr2[i] = Read_File_Int(file);
- }
- //hàm đọc file số nguyên, lưu vào biến số nguyên n.
- int Read_File_Int(fstream &file)
- {
- int n;
- file >> n;
- return n;
- }
- //Hàm tạo mảng động lưu trữ dãy số nguyên gôm n phần tử.
- int* Creat_Array( int n)
- {
- int *arr = new int[n];
- return arr;
- }
- //Hàm xóa mảng động arr.
- void Delete_Array( int* arr)
- {
- delete []arr;
- }
- //Hàm in mảng arr[] ra màn hình. Với n là số phần tử của mảng.
- void Print_Array( int* arr, int n)
- {
- for ( int i = 0; i < n; i++)
- cout << setw(4) << arr[i];
- }
- //Tổng từng phần tử 2 mảng.
- //arr1 và arr2 là mảng 1 và 2
- //n là số phần tử.
- int* Sum_Bin_Array (int* arr1, int* arr2, int n)
- {
- int *ArrSum = Creat_Array(n);
- for ( int i = 0; i < n; i++)
- ArrSum[i] = arr1[i] + arr2[i];
- return ArrSum;
- }
- //Hàm mở file có tên là name để viết vào.
- void Open_File_Write(fstream &file, string name)
- {
- file.open(name, ios::out);
- }
- //Hàm viết một số nguyên vào file.
- //với int i là số nguyên cần viết.
- void Write_File_Int ( fstream &file, int i)
- {
- file << i;
- }
- //Hàm viết một mảng vào file
- //arr là mảng cần viết.
- //n là số phần tử của mảng.
- void Write_File_Array(fstream& file, int* arr, int n)
- {
- for ( int i = 0; i < n; i++)
- {
- Write_File_Int(file,arr[i]);
- file << setw(4);
- }
- }
- //Hàm thực hiện chức năng 1. tính tổng 2 mảng và in vào file đã chọn.
- void Option1 (string nameOut, int* arr1, int* arr2, int n)
- {
- fstream fileOut;
- Open_File_Write(fileOut,nameOut);
- int* arrSum = Creat_Array(n); //tạo mảng arrSum
- arrSum = Sum_Bin_Array(arr1,arr2,n); // có từng phần tử là tổng của 2 mảng arr1 và arr2
- Write_File_Int(fileOut,n); //viết số phần tử vào file Output.
- fileOut << endl;
- Write_File_Array(fileOut,arrSum,n); //viết mảng số nguyên vào fileOut
- Close_File(fileOut);
- }
- //Hàm thưc hiện chức năng 2.Đưa các giá trị của mảng1 vào ngăn xếp rồi in ra màn hình.
- //n là số phần tử của mảng.
- void Option2 ( int* arr1, int n)
- {
- stack <int> ST; //tạo biến ST là stack lưu các giá trị của mảng arr.
- // Đưa mảng vào ngăn xếp
- //**************************************************//
- for (int i = 0; i < n; i++) //đưa từng phần tử vào stack.
- ST.push(arr1[i]);
- //Lấy từng phần tử ra khỏi stack và in ra màn hình.
- //**************************************************//
- cout << "Cac gia tri mang 1 sau khi lay ra khoi STACK" << endl;
- while ( !ST.empty()) //trong khi stack chưa rỗng
- {
- cout << setw(4) << ST.top();
- ST.pop();
- }
- }
- //Hàm thưc hiện chức năng 3.Đưa các giá trị của mảng1 vào hàng đợi rồi in ra màn hình.
- //n là số phần tử của mảng.
- void Option3 ( int* arr2, int n)
- {
- queue <int> QE; //tạo biến QE là hàng đợi lưu các giá trị của mảng arr.
- // Đưa mảng vào Hàng đợi
- //**************************************************//
- for (int i = 0; i < n; i++) //đưa từng phần tử vào Queue
- QE.push(arr2[i]);
- //Lấy từng phần tử ra khỏi queue và in ra màn hình.
- //**************************************************//
- cout << "Cac phan tu mang 2 sau khi lay ra khoi QUEUE" <<endl;
- while ( !QE.empty()) //trong khi Queue chưa rỗng
- {
- cout << setw(4) << QE.front();
- QE.pop();
- }
- }
- //Hàm thực hiện chức năng 4. Sắp xếp mảng 1 bằng Quick Sort. rồi in ra màn hình.
- //có thể in vào mảng.
- void Option4 (string nameOut, int *arr1, int n)
- {
- int left = 0;
- int right = n - 1;
- QuickSort(arr1,left,right);
- cout << endl <<"Mang arr1 sau khi sap xep" <<endl <<endl;
- //Xuất ra màn hình.
- Print_Array(arr1, n);
- //****************************************/
- //Xuất vào fileOut.
- fstream fileOut;
- //tạo tên file xuất là tham số thứ 3 mà người dùng đã nhập
- Open_File_Write(fileOut,nameOut);
- Write_File_Int(fileOut,n); //viết số phần tử vào file Output.
- cout <<endl;
- Write_File_Array(fileOut,arr1,n); //viết mảng số nguyên vào fileOut
- Close_File(fileOut);
- }
- // thuat toan quick-sort
- void QuickSort(int A[], int Left, int Right)
- {
- int i = Left, j = Right;
- int pivot = A[(Left + Right) / 2];
- /* partition */
- while (i <= j)
- {
- while (A[i] < pivot)
- i++;
- while (A[j] > pivot)
- j--;
- if (i <= j)
- {
- Swap(A[i],A[j]);
- i++;
- j--;
- }
- }
- /* recursion */
- if (Left < j)
- QuickSort(A, Left, j);
- if (i < Right)
- QuickSort(A, i, Right);
- }
- //Hàm hoán đổi giá trị 2 số a , b.
- void Swap ( int &a, int& b)
- {
- int Temp = a;
- a = b;
- b = Temp;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement