Advertisement
golovanovd

mod_lab1_golovanov

Sep 22nd, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.94 KB | None | 0 0
  1. //  Лабораторная работа 1
  2. //  Модели и структуры данных
  3. //  Выполнил студент 525а гр
  4. //  Голованов Дмитрий
  5. //  4 вариант
  6.  
  7. #include "stdafx.h"
  8. #include <iostream>
  9. #include <locale.h>
  10. #include <time.h>
  11. #include <algorithm>
  12.  
  13. using namespace std;
  14.  
  15. #define MIN_EL 100 // {100, 300}
  16. #define MAX_EL 300 //
  17. #define MAX 100
  18.  
  19. int mass_max, mass_min,
  20.     mass[MAX], // массив чисел
  21.     mass_size, // размерность массива
  22.     mass_view=0, // вид массива
  23.     mass_sort=0, // метод сортировки
  24.     compare_num = 0, // сравнения
  25.     change_num = 0; // обмены
  26.  
  27. void BubbleSort(int a); // Метод  Пузырька
  28. void SimpleSelect(int a); // Метод простой сортировки
  29. void mass_gen(int a, int type); // type - качество массива    a - размерность массива
  30. int i, j; // счетчики
  31. void mass_show(int a); // вывод массива
  32. void info_show(int a, int b, int c); // Вывод параметров сортировки
  33.  
  34.  
  35. int main()
  36. {
  37.  
  38.     srand((unsigned)time(NULL));
  39.     setlocale(LC_ALL, "RUS");
  40.     cout << " Введите размерность массива: ";
  41.     cin >> mass_size;
  42.  
  43.     info_show(mass_size, mass_view, mass_sort); // вывод введенных параметров
  44.  
  45.     cout << "\n Выберите вид массива:" << endl;
  46.     cout << " 1. Ввести вручную" << endl;
  47.     cout << " 2. Упорядоченный по возрастанию" << endl;
  48.     cout << " 3. Упорядоченный по убыванию" << endl;
  49.     cout << " 4. Случайные числа" << endl;
  50.     cout << " Вид: ";
  51.  
  52.     cin >> mass_view;
  53.     mass_gen(mass_size, mass_view);// Заполнение массива
  54.  
  55.  
  56. reset:
  57.  
  58.     info_show(mass_size, mass_view, mass_sort); // вывод введенных параметров
  59.     cout << " Массив: ";
  60.     mass_show(mass_size);// вывод массива
  61.     cout << endl << endl;
  62.  
  63.     cout << " Тип сортировки:" << endl;
  64.     cout << " 1. Метод Пузырька" << endl;
  65.     cout << " 2. Метод простого выбора" << endl;
  66.     cout << " Тип: ";
  67.     cin >> mass_sort;
  68.  
  69.     info_show(mass_size, mass_view, mass_sort); // вывод введенных параметров
  70.     cout << endl;
  71.  
  72.     switch (mass_sort)
  73.     {
  74.     case 1:
  75.         BubbleSort(mass_size); break; // Пузырёк
  76.     case 2:
  77.         SimpleSelect(mass_size); break;// Простой обмен
  78.     default:
  79.         goto reset;
  80.     }
  81.  
  82.     cout << "\n Отсортированный массив: ";
  83.     for (size_t b = 0; b < mass_size; b++)//отсортированный массив
  84.     {
  85.         cout << mass[b] << " ";
  86.     }
  87.     cout << "\n Cравнения: " << compare_num << endl;
  88.     cout << " Обмены: " << change_num << endl;
  89.     cout << " Операций: " << compare_num + change_num << endl; // вывод общего кол-ва операций
  90.     system("pause");
  91.     return 0;
  92. }
  93.  
  94. void mass_gen(int a, int type)
  95. {
  96.     // Случайная генерация массива
  97.     for (i = 0; i<a; i++)
  98.     {
  99.         mass[i] = rand() % (MAX_EL - MIN_EL) + MIN_EL;
  100.     }
  101.  
  102.     switch (type)
  103.     {
  104.         // Ввести массив вручную
  105.     case 1:
  106.         system("cls");
  107.         for (i = 0; i < a; i++)
  108.         {
  109.             cout << " " << i + 1 << "-й элемент: ";
  110.             cin >> mass[i];
  111.         }
  112.         break;
  113.         // Упорядочить по возрастанию
  114.     case 2:
  115.         for (int i = 0; i < a - 1; i++)
  116.         {
  117.             mass_min = mass[i];
  118.             for (int j = i + 1; j < a; j++)
  119.             {
  120.                 if (mass_min > mass[j])
  121.                 {
  122.                     mass_min = mass[j];
  123.                     mass[j] = mass[i];
  124.                     mass[i] = mass_min;
  125.                 }
  126.             }
  127.         }
  128.         break;
  129.  
  130.         // Упорядочить по убыванию
  131.     case 3:
  132.         for (int i = 0; i < a - 1; i++)
  133.         {
  134.             mass_max = mass[i];
  135.             for (int j = i + 1; j < a; j++)
  136.             {
  137.                 if (mass_max < mass[j])
  138.                 {
  139.                     mass[i] = mass[j];
  140.                     mass[j] = mass_max;
  141.                     mass_max = mass[i];
  142.                 }
  143.             }
  144.         }
  145.         break;
  146.  
  147.     case 4:break;
  148.  
  149.  
  150.     default:
  151.         cout << "Ошибка ввода!" << endl;
  152.         break;
  153.     }
  154. }
  155.  
  156.  
  157. void SimpleSelect(int a)
  158. {
  159.     int c,
  160.         tmp = 0;  
  161.     cout << " 0| ";
  162.     mass_show(a);
  163.     for (int i = 0; i < a - 1; ++i)
  164.     {
  165.         c = i;
  166.         tmp = mass[i];
  167.         for (int j = i + 1; j < a; ++j)
  168.         {
  169.             compare_num++;
  170.             if (mass[j] < tmp) // выбор максимального элемента
  171.             {
  172.                 c = j;       // индекс максимального элемента
  173.                 tmp = mass[j]; // максимальный элемент
  174.             }
  175.         }
  176.         mass[c] = mass[i];
  177.         mass[i] = tmp;
  178.         change_num++;
  179.         cout<<" " << i << "| "; // вывод массива после каждого шага сортировки
  180.         mass_show(a);
  181.     }
  182. }
  183.  
  184. void BubbleSort(int a)
  185. {
  186.     int tmp;    
  187.     cout << " 0| ";
  188.     mass_show(a);
  189.     for (int i = 1; i < a; ++i)
  190.     {
  191.         for (int j = a - 1; j >= i; --j)
  192.         {
  193.             compare_num++;
  194.             if (mass[j - 1] > mass[j])// сравнение
  195.             {                     // обмен
  196.                 change_num++;
  197.                 tmp = mass[j - 1];
  198.                 mass[j - 1] = mass[j];
  199.                 mass[j] = tmp;
  200.             }
  201.  
  202.         }
  203.         cout <<" "<< i << "| ";// вывод массива после каждого шага сортировки
  204.         mass_show(a);
  205.     }
  206. }
  207.  
  208. void mass_show(int a) {
  209.  
  210.     for (int k = 0; k < a; k++)
  211.     {
  212.         cout << mass[k] << " ";
  213.     }
  214.     cout << endl;
  215. }
  216.  
  217. void info_show(int a, int b, int c) {
  218.     system("cls");
  219.     cout << " Размер: " << a << endl;
  220.         if (b>0&&b<5) {
  221.             cout << "    Вид: ";
  222.             switch (b) {
  223.             case 1: cout << "Введен вручную"; break;
  224.             case 2: cout << "Числа по возрастанию"; break;
  225.             case 3: cout << "Числа по убыванию"; break;
  226.             case 4: cout << "Случайные числа"; break;
  227.             }
  228.             cout << endl;
  229.         }
  230.  
  231.         if (c>0&&c<3) {
  232.             cout << "  Метод: ";
  233.             switch (c) {
  234.             case 1: cout << "Пузырёк"; break;
  235.             case 2: cout << "Простой выбор"; break;
  236.             }
  237.             cout << endl;
  238.         }
  239.  
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement