NickAndNick

Шаблоны функций

Dec 19th, 2012
80
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. enum ui { INT10 = 1, FLOAT, EXIT = 9 };
  7.  
  8. template<typename A> A * create_array(A *, const size_t _size = 10);
  9. template<typename A> void input_array(A *, const size_t _size = 10);
  10. template<typename A> void show_array(A *, const size_t _size = 10);
  11. template<typename A> void delete_array(A *);
  12. void ru();
  13.  
  14. int main() {
  15.     ru();
  16.     int * array_int = NULL;
  17.     float * array_float = NULL;
  18.     bool my_int = false, my_float = false;
  19.     while (true) {
  20.         wcout << endl << L" 1 - Создать целочисленный массив на 10 элементов"
  21.               << endl << L" 2 - Создать массив типа float, заданного размера"
  22.               << endl << L" 9 - Выход из программы" << endl
  23.               << endl << L"\t\tВаш выбор: ";
  24.         unsigned choice;
  25.         cin >> choice;
  26.         switch (choice) {
  27.             case INT10:
  28.                 if (!my_int) {
  29.                     array_int = create_array(array_int);
  30.                     my_int = true;
  31.                 }
  32.                 wcout << L"\n Введите ваш массив:\n\n";
  33.                 input_array(array_int);
  34.                 wcout << L"\n Вы ввели:\n\n";
  35.                 show_array(array_int);
  36.                 break;
  37.             case FLOAT:
  38.                 size_t size;
  39.                 if (!array_float) {
  40.                     wcout << L" Введите размер массива: ";                
  41.                     cin >> size;
  42.                     array_float = create_array(array_float, size);
  43.                     my_float = true;
  44.                 }
  45.                 wcout << L"\n Введите ваш массив:\n\n";
  46.                 input_array(array_float, size);
  47.                 wcout << L"\n Вы ввели:\n\n";
  48.                 show_array(array_float, size);
  49.                 break;
  50.             case EXIT:
  51.                 if (my_int) delete_array(array_int);
  52.                 if (array_float) delete_array(array_float);
  53.                 return 0;
  54.             default:
  55.                 wcout << L"\a\tОшибка! Повторите ввод\n";
  56.         }
  57.     }
  58. }
  59.  
  60. template<typename A> A * create_array(A * _array, const size_t _size) {
  61.     _array = new A [_size];
  62.     return _array;
  63. }
  64.  
  65. template<typename A> void input_array(A * _array, const size_t _size) {
  66.     for (size_t n = 0; n < _size; n++) {
  67.         cout << "array[" << n << "] -> ";
  68.         cin >> _array[n];
  69.     }
  70. }
  71.  
  72. template<typename A> void show_array(A * _array, const size_t _size) {
  73.     for (size_t n = 0; n < _size; n++) cout << _array[n] << ' ';
  74.     cout << endl;
  75. }
  76.  
  77. template<typename A> void delete_array(A * _array) {
  78.     delete[] _array;
  79. }
  80.  
  81. void ru() {
  82.     wcout.imbue(locale("rus_rus.866"));
  83.     wcin.imbue(locale("rus_rus.866"));
  84. }
RAW Paste Data