Advertisement
thienlang

Tham số dòng lệnh

Sep 29th, 2013
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.99 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <iomanip>
  6. #include <stack>
  7. #include <queue>
  8.  
  9. using namespace std;
  10.  
  11. /*******************************/
  12. //hàm mở file để đọc
  13. //biến name chứa tên file.
  14. void Open_File_Read( string name, fstream &file);
  15.  
  16. //Hàm đóng file
  17. void Close_File(fstream &file);
  18.  
  19. //hàm đọc file số nguyên, lưu vào biến số nguyên n.
  20. int Read_File_Int(fstream &file );
  21.  
  22. //hàm đọc file.
  23. //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
  24. //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.
  25. void Read_File( fstream &file, int n, int arr1[], int arr2[]);
  26.  
  27. //Hàm tạo mảng động lưu trữ dãy số nguyên gôm n phần tử.
  28. int* Creat_Array( int n);
  29.  
  30. //Hàm xóa mảng động arr[].
  31. void Delete_Array( int* arr);
  32.  
  33. //Hàm in mảng arr[] ra màn hình. Với n là số phần tử của mảng.
  34. void Print_Array( int* arr, int n);
  35.  
  36. //Tổng từng phần tử 2 mảng.
  37. int* Sum_Bin_Array (int* arr1, int* arr2, int n);
  38.  
  39. //Hàm mở file để viết vào.
  40. void Open_File_Write(fstream &file, string name);
  41.  
  42. //Hàm viết một số nguyên vào file.
  43. //với int i là số nguyên cần viết.
  44. void Write_File_Int ( fstream &file, int i);
  45.  
  46. //Hàm viết một mảng vào file
  47. //arr là mảng cần viết.
  48. //n là số phần tử của mảng.
  49. void Write_File_Array(fstream& file, int* arr, int n);
  50.  
  51. //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.
  52. void Option1 (string , int* arr1, int* arr2, int n);
  53.  
  54. //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.
  55. //n là số phần tử của mảng.
  56. void Option2 ( int* arr1, int n);
  57.  
  58. //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.
  59. //n là số phần tử của mảng.
  60. void Option3 ( int* arr2, int n);
  61.  
  62. //Hàm hoán đổi giá trị 2 số a , b.
  63. void Swap ( int &a, int& b);
  64.  
  65. // thuat toan quick-sort
  66. void QuickSort(int A[], int Left, int Right);
  67.  
  68. //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.
  69. //có thể in vào mảng.
  70. void Option4 (string ,  int *arr1, int n);
  71.  
  72. /****************************************************/
  73.  
  74. int main( int argc, char* argv[])
  75. {
  76.     if ( argc > 1 && argc < 5 )
  77.     {
  78.         if (argc == 3 )
  79.         {
  80.             cout <<" Khong duoc tao file xuat ma khong co chuc nang ( Option)" <<endl;
  81.             system("pause");
  82.             return 0;
  83.         }
  84.         fstream fileIn; //biến lưu file input.
  85.         string nameIn; //tên file Input
  86.         int n; //số lượng phần tử ở mỗi dòng trong file Input.
  87.  
  88.         //Yêu cầu 1 và 2.
  89. /*************************************************************/
  90.  
  91.         nameIn = nameIn + argv[1];
  92.         Open_File_Read(nameIn,fileIn);  //Gọi hàm mở file Input
  93.  
  94.         n = Read_File_Int(fileIn); //lấy phần tử mở mỗi dòng trong fileIn
  95.  
  96.         int* arr1 = Creat_Array(n); //tạo mảng arr1
  97.         int* arr2 = Creat_Array(n); //tạo mảng arr2
  98.  
  99.         Read_File(fileIn,n,arr1,arr2); //đọc các phần tử trong file vào 2 mảng.
  100.  
  101.         Close_File(fileIn); //Gọi hàm đóng file Input
  102.  
  103.         cout <<setw(4) << n << endl; //in số phần tử ra màn hình.
  104.  
  105.         Print_Array(arr1,n); //in mảng ra màn hình.
  106.         cout << endl;
  107.         Print_Array(arr2,n);
  108.  
  109. /*************************************************************/
  110.         if (argc == 4)
  111.         {
  112.             int key; //biến key dùng để đọc lệnh Option của người dùng qua tham số.
  113.             key = atoi(argv[3]);
  114.  
  115.             // Thực hiện Option 1. Tính tổng từng phần tử 2 mảng rồi in vào file.
  116.             if ( key == 1)
  117.             {
  118.                 //tạo tên file xuất là tham số thứ 3 mà người dùng đã nhập
  119.                 string nameOut;
  120.                 nameOut = nameOut + argv[2];
  121.                 Option1(nameOut,arr1,arr2,n);
  122.                 return 0;
  123.             }
  124.  
  125.             if ( key == 2)
  126.             {
  127.                 cout << endl;
  128.                 Option2(arr1,n); //gọi hàm thực hiện Option 2.
  129.                 cout << endl;
  130.                 return 0;
  131.             }
  132.  
  133.             if ( key == 3)
  134.             {
  135.                 cout << endl;
  136.                 Option3(arr2,n); //Gọi hàm thực hiện Option3
  137.                 cout <<endl;
  138.                 return 0;
  139.             }
  140.  
  141.             if ( key == 4)
  142.             {
  143.                 string nameOut;
  144.                 nameOut = nameOut + argv[2];
  145.                 cout << endl;
  146.                 Option4(nameOut,arr1,n);
  147.                 cout << endl;
  148.  
  149.                 return 0;
  150.             }
  151.  
  152.  
  153.         }
  154.  
  155.  
  156. /*************************************************************/
  157.  
  158.         Delete_Array(arr1); //Hàm xóa mảng.
  159.         Delete_Array(arr2);
  160.  
  161.     }
  162.     else
  163.         cout <<endl << "Nhap sai tham so dong lenh";
  164.  
  165.     return 0;
  166. }
  167.  
  168. //hàm mở file để đọc
  169. //biến name chứa tên file.
  170. void Open_File_Read( string name, fstream &file)
  171. {
  172.     file.open(name,ios::in);
  173. }
  174.  
  175. //Hàm đóng file.
  176. void Close_File(fstream &file)
  177. {
  178.     file.close();
  179. }
  180.  
  181. //hàm đọc file.
  182. //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
  183. //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.
  184. void Read_File( fstream &file, int n, int arr1[], int arr2[])
  185. {
  186.     for ( int i = 0; i < n; i++)
  187.         arr1[i] = Read_File_Int(file);
  188.  
  189.     for ( int i = 0; i < n; i++)
  190.         arr2[i] = Read_File_Int(file);
  191. }
  192.  
  193. //hàm đọc file số nguyên, lưu vào biến số nguyên n.
  194. int Read_File_Int(fstream &file)
  195. {
  196.     int n;
  197.     file >> n;
  198.     return n;
  199. }
  200.  
  201. //Hàm tạo mảng động lưu trữ dãy số nguyên gôm n phần tử.
  202. int* Creat_Array( int n)
  203. {
  204.     int *arr = new int[n];
  205.     return arr;
  206. }
  207.  
  208. //Hàm xóa mảng động arr.
  209. void Delete_Array( int* arr)
  210. {
  211.     delete []arr;
  212. }
  213.  
  214. //Hàm in mảng arr[] ra màn hình. Với n là số phần tử của mảng.
  215. void Print_Array( int* arr, int n)
  216. {
  217.     for ( int i = 0; i < n; i++)
  218.         cout  << setw(4) << arr[i];
  219. }
  220.  
  221. //Tổng từng phần tử 2 mảng.
  222. //arr1 và arr2 là mảng 1 và 2
  223. //n là số phần tử.
  224. int* Sum_Bin_Array (int* arr1, int* arr2, int n)
  225. {
  226.     int *ArrSum = Creat_Array(n);
  227.     for ( int i = 0; i < n; i++)
  228.         ArrSum[i] = arr1[i] + arr2[i];
  229.     return ArrSum;
  230.  
  231. }
  232.  
  233.  
  234. //Hàm mở file có tên là name để viết vào.
  235. void Open_File_Write(fstream &file, string name)
  236. {
  237.     file.open(name, ios::out);
  238. }
  239.  
  240. //Hàm viết một số nguyên vào file.
  241. //với int i là số nguyên cần viết.
  242. void Write_File_Int ( fstream &file, int i)
  243. {
  244.     file << i;
  245. }
  246.  
  247. //Hàm viết một mảng vào file
  248. //arr là mảng cần viết.
  249. //n là số phần tử của mảng.
  250. void Write_File_Array(fstream& file, int* arr, int n)
  251. {
  252.     for ( int i = 0; i < n; i++)
  253.     {
  254.         Write_File_Int(file,arr[i]);
  255.         file << setw(4);
  256.        
  257.     }
  258.  
  259. }
  260.  
  261. //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.
  262. void Option1 (string nameOut, int* arr1, int* arr2, int n)
  263. {
  264.     fstream fileOut;
  265.  
  266.     Open_File_Write(fileOut,nameOut);
  267.  
  268.  
  269.  
  270.     int* arrSum = Creat_Array(n); //tạo mảng arrSum
  271.     arrSum = Sum_Bin_Array(arr1,arr2,n); // có từng phần tử là tổng của 2 mảng arr1 và arr2
  272.  
  273.  
  274.     Write_File_Int(fileOut,n); //viết số phần tử vào file Output.
  275.     fileOut << endl;
  276.     Write_File_Array(fileOut,arrSum,n); //viết mảng số nguyên vào fileOut
  277.  
  278.     Close_File(fileOut);
  279.  
  280. }
  281.  
  282. //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.
  283. //n là số phần tử của mảng.
  284. void Option2 ( int* arr1, int n)
  285. {
  286.     stack <int> ST; //tạo biến ST là stack lưu các giá trị của mảng arr.
  287.  
  288.     //    Đưa mảng vào ngăn xếp
  289.     //**************************************************//
  290.  
  291.     for (int i = 0; i < n; i++) //đưa từng phần tử vào stack.
  292.         ST.push(arr1[i]);
  293.    
  294.     //Lấy từng phần tử ra khỏi stack và in ra màn hình.
  295.     //**************************************************//
  296.     cout << "Cac gia tri mang 1 sau khi lay ra khoi STACK" << endl;
  297.     while ( !ST.empty()) //trong khi stack chưa rỗng
  298.     {
  299.         cout << setw(4)  << ST.top();
  300.         ST.pop();
  301.     }
  302. }
  303.  
  304. //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.
  305. //n là số phần tử của mảng.
  306. void Option3 ( int* arr2, int n)
  307. {
  308.     queue <int> QE; //tạo biến QE là hàng đợi lưu các giá trị của mảng arr.
  309.  
  310.     //    Đưa mảng vào Hàng đợi
  311.     //**************************************************//
  312.  
  313.     for (int i = 0; i < n; i++) //đưa từng phần tử vào Queue
  314.         QE.push(arr2[i]);
  315.    
  316.     //Lấy từng phần tử ra khỏi queue và in ra màn hình.
  317.     //**************************************************//
  318.     cout << "Cac phan tu mang 2 sau khi lay ra khoi QUEUE" <<endl;
  319.     while ( !QE.empty()) //trong khi Queue chưa rỗng
  320.     {
  321.         cout  << setw(4) << QE.front();
  322.         QE.pop();
  323.     }
  324. }
  325.  
  326. //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.
  327. //có thể in vào mảng.
  328. void Option4 (string nameOut,  int *arr1, int n)
  329. {
  330.     int left = 0;
  331.     int right = n - 1;
  332.     QuickSort(arr1,left,right);
  333.  
  334.     cout << endl <<"Mang arr1 sau khi sap xep" <<endl <<endl;
  335.     //Xuất ra màn hình.
  336.     Print_Array(arr1, n);
  337.  
  338.     //****************************************/
  339.     //Xuất vào fileOut.
  340.  
  341.     fstream fileOut;
  342.  
  343.     //tạo tên file xuất là tham số thứ 3 mà người dùng đã nhập
  344.     Open_File_Write(fileOut,nameOut);
  345.  
  346.     Write_File_Int(fileOut,n); //viết số phần tử vào file Output.
  347.     cout <<endl;
  348.     Write_File_Array(fileOut,arr1,n); //viết mảng số nguyên vào fileOut
  349.  
  350.     Close_File(fileOut);
  351.    
  352. }
  353.  
  354. // thuat toan quick-sort
  355. void QuickSort(int A[], int Left, int Right)
  356. {
  357.     int i = Left, j = Right;
  358.     int pivot = A[(Left + Right) / 2];
  359.     /* partition */
  360.     while (i <= j)
  361.     {
  362.         while (A[i] < pivot)
  363.             i++;
  364.  
  365.         while (A[j] > pivot)
  366.             j--;
  367.  
  368.         if (i <= j)
  369.         {
  370.             Swap(A[i],A[j]);
  371.             i++;
  372.             j--;
  373.         }
  374.     }
  375.  
  376.      /* recursion */
  377.     if (Left < j)
  378.         QuickSort(A, Left, j);
  379.     if (i < Right)
  380.         QuickSort(A, i, Right);
  381. }
  382.  
  383.  
  384. //Hàm hoán đổi giá trị 2 số a , b.
  385. void Swap ( int &a, int& b)
  386. {
  387.     int Temp = a;
  388.     a = b;
  389.     b = Temp;
  390. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement