Advertisement
Guest User

Header 1

a guest
Oct 13th, 2015
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.79 KB | None | 0 0
  1. #include <iostream>     // Библиотека ввода-вывода
  2. #include <vector>       // Библиотека для работы с векторами
  3. #include <ctime>        // Библиотека для работы со временем
  4. #include <iterator>     // Подключаем итераторы
  5. #include <string>       // Библиотека для работы со строками
  6. #include <cmath>        // Библиотека для использования математических функций
  7. #include <map>          // Библиотека для работы с ассоциативными массивами
  8. #include <list>         // Библиотека для работы со списками
  9. #include <set>          // Множества
  10. #include <fstream>      // Библиотека для чтения информации из файла
  11. #include <deque>        // Библиотека для работы с очередями
  12.  
  13. using namespace std;
  14.  
  15. // Прототипы функций для работы с массивами
  16. void array_function();
  17. void output_array(double *mas, int n);
  18. void arithmetic_average(double *mas, int n);
  19.  
  20. // Прототип функции для работы с векторами
  21. void vector_function();
  22.  
  23. // Прототип функции для работы со списком
  24. void list_function();
  25.  
  26. // Прототипы функций для работы с ассоциативными массивами
  27. void read_from_file_map(map<string, double> &glass, const string& filename);
  28. void map_function();
  29.  
  30. // Прототипы функций для работы с очередями и мноествами
  31. void deque_set_function();
  32.  
  33. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  34. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  35. // 1. МАССИВ
  36. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  37. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  38.  
  39. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  40. // Функция вывода значений массива на экран
  41. // В функцию передается массив (mas []) и кол-во элементов этого массива (n)
  42. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  43. void output_array(double *mas, int n)
  44. {
  45.     // Приветствие
  46.     cout<<"Hello! There is an array of 10:"<<endl<<endl;
  47.     // Обход элементов массива от 0 до 10
  48.     for(int i=0; i<n; i++)
  49.     {
  50.         // Вывод элемента и его значения
  51.         cout<<"mas["<<i<<"] = "<<mas[i]<<endl;
  52.     }    
  53. }
  54.  
  55. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  56. // Функция считает среднее арифметическое элементов массива
  57. // В функцию передается массив (mas []) и кол-во элементов этого массива (n)
  58. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  59.  
  60. void arithmetic_average(double *mas, int n)
  61. {
  62.     double sum = 0; // Переменная для храниния суммы
  63.     for(int i=0; i<n; i++)
  64.     {
  65.         sum += mas[i];
  66.     }
  67.     // Информируем пользователя
  68.     cout<<endl<<"The arithmetic mean of the elements: "<<sum / n<<endl<<endl;
  69. }
  70.  
  71. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  72. // Основная функция
  73. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  74. void array_function()
  75. {
  76.     int n=10;    // Кол-во элементов
  77.     double *mas; // Указатель на массив
  78.     mas = new double[n]; // Указатель на 0-й элемент массива, состоящего из n элементов
  79.    
  80.     // Инициализация всех элементов массива с помощью цикла
  81.     // Значение каждого элемента больше его индекса в 10 раз
  82.     for(int i=0; i<10; i++)
  83.     {
  84.         mas[i] = i*10;
  85.     }
  86.  
  87.     // Вывод массива на экран
  88.     output_array(mas, 10);
  89.     // Вывод среднего арифметического на экран
  90.     arithmetic_average(mas, 10);
  91.  
  92.     delete [] mas; // Освобождение памяти
  93. }
  94.  
  95. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  96. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  97. // 2. ВЕКТОР
  98. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  99. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  100.  
  101. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  102. // Основная функция
  103. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  104. void vector_function()
  105. {
  106.     vector<double> myVector(10); // Создали новый вектор из 10 элементов (каждый элемент равен 0)
  107.     srand(time(0)); // Необходимо, чтобы каждый раз числа были случайными
  108.     // Заполняем в цикле вектор случайными числами в диапазоне от -20 до 20
  109.     for(int i=0; i<10; i++)
  110.     {
  111.         myVector[i] = (rand()%40 - 20);
  112.     }
  113.  
  114.     // Вывод вектора на экран
  115.     cout<<endl<<"There is a vector of 10:"<<endl;
  116.     for(int i=0; i<myVector.size(); i++)
  117.     {
  118.         cout<<myVector[i]<<" ";
  119.     }
  120.  
  121.     double s = 0; // В переменной s будет храниться сумма квадратов элементов вектора
  122.     // Вычисляем сумму квадратов элементов с помощью цикла
  123.     for(int i=0; i<myVector.size(); i++)
  124.     {
  125.        s+=myVector[i]*myVector[i];
  126.     }
  127.     s = sqrt(s/10); // Среднее квадратическое
  128.     cout<<endl<<endl<<"The average quadratic: "<<s<<endl;
  129. }
  130.  
  131. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  132. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  133. // 3. СПИСОК
  134. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  135. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  136.  
  137. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  138. // Основная функция
  139. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  140. void list_function()
  141. {
  142.     list<double> myList; // Создаем список
  143.  
  144.     // В цикле организуем ввод элементов списка пользователем
  145.     string s="Y";
  146.     while ((s == "Y") || (s == "y"))
  147.     {
  148.         // Выводим на экран поясняющее сообщение
  149.         cout<<endl<<"Enter the item of the list: ";
  150.         // Создаем переменную типа double
  151.         double x = 0;
  152.         // Считываем очередное число, введенное пользователем, в переменную типа double
  153.         cin>>x;
  154.         // Помещаем это число в конец нашего списка
  155.         myList.push_back(x);
  156.        
  157.         // Запрос на продолжение ввода данных
  158.         cout<<endl<<"One more item? Y/N"<<endl;
  159.         cin>>s;
  160.     }
  161.  
  162.     // Вывод списка на экран
  163.     copy(myList.begin(), myList.end(), ostream_iterator<double>(cout," "));
  164.  
  165. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  166. // Альтернативный код для поиска максимального по модулю элемента
  167. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  168. /*
  169.     list<double>::iterator it; // Создаем итератор
  170.     double max = abs(*myList.begin());
  171.     for(it=myList.begin(); it != myList.end(); it++)
  172.     {
  173.        if  (max < abs(*it))
  174.        {
  175.            max = abs(*it);
  176.        }
  177.     }
  178.     cout<<endl<<"MAX = "<<max<<endl;
  179. */
  180. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  181.  
  182.     myList.sort(); // Сортируем стандартным методом
  183.     if (abs(myList.front()) > abs(myList.back()))  // Если модуль первого элемента больше модуля последнего элемента
  184.     {
  185.         cout<<"Maximum modulus: "<<myList.front(); // Выводим первый элемен (но не его модуль!)
  186.     }
  187.     else
  188.     {
  189.         cout<<"Maximum modulus: "<<myList.back();  // Иначе выводим последний элемент
  190.     }
  191. }
  192.  
  193. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  194. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  195. // 4. АССОЦИАТИВНЫЙ МАССИВ
  196. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  197. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  198. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  199. // Функция для ввода из файла в контейнер map
  200. // В качестве первого параметра выступает контейнер, в который будут записываться данные
  201. // В качестве второго параметра выступает строковая константа - имя файла с данными
  202. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  203. void read_from_file_map(map<string, double> &glass, const string& filename)
  204. {
  205.     ifstream ifile(filename); // создание потока ввода из файла по его имени
  206.  
  207.     while(!ifile.eof())       // пока не достигнут конец файла
  208.     {
  209.         string key;
  210.         double n;
  211.         ifile >> key >> n;    // считываем очередную марку стекла и показатель преломления
  212.         glass[key] = n;       // создаем пару ключ-значение в нашем контейнере Map
  213.     }
  214. }
  215.  
  216. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  217. // Основная функция
  218. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  219. void map_function()
  220. {
  221.     setlocale(LC_ALL, "rus");           // Для корректного отображения кирилицы
  222.     map<string, double> glass;          // Объявление контейнера map для хранения марок стекла и
  223.                                         // показателей преломления
  224.     map<string, double>::iterator it;   // Создаем итератор - "указатель" на элемент, хранящийся в map
  225.     read_from_file_map(glass, "glass.txt"); // Считывание из файла каталога оптических стекол
  226.  
  227.     // Вывод каталога оптических стекол на экран
  228.     for(it = glass.begin(); it != glass.end(); it++)
  229.     {
  230.         cout<< it->first<<" : "<< it->second<<endl;
  231.     }
  232.  
  233.     // Поиск максимального и минимального показателей преломления и соответствующих этим показателям
  234.     // марок стекол
  235.     double max = 0;
  236.     double min = 1000;
  237.     string maxname;
  238.     string minname;
  239.  
  240.     for(it = glass.begin(); it != glass.end(); it++)
  241.     {
  242.         if (max < it->second)
  243.         {
  244.             max = it->second;
  245.             maxname = it->first;
  246.         }
  247.  
  248.         if (min > it->second)
  249.         {
  250.             min = it->second;
  251.             minname = it->first;
  252.         }
  253.     }
  254.  
  255.     // Вывод максимального и минимального показателей преломления на экран пользователя
  256.     cout<<endl<<endl<<"MAX:"<<endl<<maxname<<" "<<max<<endl;
  257.     cout<<"MIN:"<<endl<<minname<<" "<<min;
  258. }
  259.  
  260. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  261. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  262. // 5. ОЧЕРЕДЬ И МНОЖЕСТВО
  263. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  264. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  265.  
  266. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  267. // Основная функция
  268. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  269. void deque_set_function()
  270. {
  271.     srand(time(NULL));                   // Инициализация генератора случайных чисел
  272.     int dequeSize = 15;                  // Размер очереди
  273.     deque<double> myDeque(dequeSize);    // Создали очередь
  274.     set<double> mySet;                 // Создали множество
  275.     for(int i=0; i<myDeque.size(); i++)  // Заполняем очередь
  276.     {
  277.         myDeque[i] = rand()%20-10;
  278.     }
  279.     copy(myDeque.begin(), myDeque.end(), ostream_iterator<double>(cout," ")); // Вывод очереди на экран
  280.  
  281.     for(int i=0; i<myDeque.size(); i++)
  282.     {
  283.         mySet.insert(myDeque[i]);
  284.     }
  285.    
  286.     cout<<endl<<endl;
  287.     // Вывод множества на экран
  288.     copy(mySet.begin(), mySet.end(), ostream_iterator<double>(cout," ")); // Вывод очереди на экран
  289. }
  290.  
  291. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  292. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement