Advertisement
Guest User

main

a guest
Apr 30th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.65 KB | None | 0 0
  1. //Отсортировать столбцы матрицы по неубыванию сумм положительных элементов.
  2. //Сортировка Шелла с заданной в виде локального константного массива последовательностью приращений.
  3. //Кнут - сортировки почитать, глава 5
  4.  
  5. #include "matrix.h"
  6. #include <stdio.h>
  7. #include <locale.h>
  8. #include <ctime>
  9. #include <stdlib.h>
  10. #include <conio.h>
  11. #include <iostream>
  12. #include <math.h>
  13. using namespace std;
  14. #pragma warning (disable:4996)
  15.  
  16. void isp1(matrix& SixHundredZeroThree, int Ii, int Jj)
  17. {
  18.     float fz = 0;
  19.     system("cls");
  20.     for (int I = 0; I < Ii; I++)
  21.     {
  22.         for (int J = 0; J < Jj; J++)
  23.         {
  24.             scanf_s("%f", &fz);
  25.             SixHundredZeroThree.Put(I, J, fz);
  26.         }
  27.     }
  28.     for (int I = 0; I < Ii; I++)
  29.     {
  30.         for (int J = 0; J < Jj; J++)
  31.         {
  32.             SixHundredZeroThree.Get(I, J, fz);
  33.             printf("%.0f ", fz);
  34.         }
  35.         printf("\n");
  36.     }; system("cls");
  37. }
  38. void isp2(matrix& SixHundredZeroThree, int Ii, int Jj)
  39. {
  40.     float fz = 0;
  41.     for (int I = 0; I < Ii; I++)
  42.     {
  43.         for (int J = 0; J < Jj; J++)
  44.         {
  45.             fz = float(rand() % 10);
  46.             SixHundredZeroThree.Put(I, J, fz);
  47.             printf("%.0f ", fz);
  48.         }
  49.         printf("\n");
  50.     };
  51. }
  52. void isp3(matrix& SixHundredZeroThree, int Ii, int Jj)
  53. {
  54.     float fz = 0;
  55.     system("cls");
  56.     for (int I = 0; I<Ii; I++)
  57.     {
  58.         for (int J = 0; J<Jj; J++)
  59.         {
  60.             SixHundredZeroThree.Get(I, J, fz);
  61.             printf("%.0f ", fz);
  62.         }
  63.         printf("\n");
  64.     }
  65. }
  66. void isp4(FILE*f, matrix& SixHundredZeroThree, int Ii, int Jj)
  67. {
  68.     float fz = 0;
  69.     fscanf(f, "%d %d", &Ii, &Jj);
  70.     for (int Timon = 0; Timon < Ii; Timon++)
  71.     {
  72.         for (int Pumba = 0; Pumba < Jj; Pumba++)
  73.         {
  74.  
  75.             fscanf(f, "%f", &fz);
  76.             printf("%.0f ", fz);
  77.         }
  78.         printf("\n");
  79.     }
  80. }
  81. void isp5(FILE*f, matrix& SixHundredZeroThree, int Ii, int Jj)
  82. {
  83.     float fz = 0;
  84.     system("cls");
  85.     fprintf(f, "%d %d\n", Ii, Jj);
  86.     for (int G = 0; G<Ii; G++)
  87.     {
  88.         for (int Z = 0; Z<Jj; Z++)
  89.         {
  90.             SixHundredZeroThree.Get(G, Z, fz);
  91.             fprintf(f, "%.0f ", fz);
  92.         }
  93.     }
  94. }
  95.  
  96. void isp6(matrix& SixHundredZeroThree, int &Ii, int &Jj)
  97. {
  98.     system("cls");
  99.     printf("Введите размеры таблицы\nКоличество стобцов :");
  100.     scanf("%d", &Jj);
  101.     printf("Количество строк :");
  102.     scanf("%d", &Ii);
  103.  
  104.     if ((Ii < 0) || (Jj < 0))
  105.     {
  106.         do {
  107.             printf("Неверные параметры , попробуйте еще:  ");
  108.             scanf_s("%d%d", &Ii, &Jj);
  109.  
  110.         } while ((Ii < 0) || (Jj < 0));
  111.     }
  112.     SixHundredZeroThree.Mtr(Ii, Jj);
  113. }
  114.  
  115. void FindStep(matrix &ma, matrix &ta)
  116. {
  117.     float azaza = 1, cza, h=1;
  118.     int N = ma.get_calls();
  119.     cza = float(floor(log2(N)) - 1);
  120.     float u = 0;
  121.     //cza = logb(N) - 1;
  122.     printf("%f\n", cza);
  123.     system("pause");
  124.     ta.Mtr(1, int(cza + 1));
  125.     ta.Put(0, int(cza), azaza);
  126.     /*for (int Polina = 0; Polina <= N; Polina++)
  127.     {
  128.         cza = logb(N) - 1;
  129.         ta.Put(0, Polina, cza);
  130.     }*/
  131.     for (int Polina = (int)cza - 1; Polina >= 0; Polina--)
  132.     {
  133.         h = 2 * h + 1;
  134.         ta.Put(0, Polina, h);
  135.         //printf("%.0f\n", h);
  136.     }
  137.     for (int n = 0; n <= cza; n++)
  138.     {
  139.         ta.Get(0, n, u);
  140.         printf("%.0f\n", u);
  141.     }
  142.     system("pause");
  143. }
  144.  
  145. /*void Negr(matrix &ma, int mas[])// It's Alive!!!
  146. {
  147.     int k = ma.get_calls(), g=1;
  148.     float temp, l, c, cz;
  149.     for (int i = 1; i < k; i++)
  150.     {
  151.         l = float(k + 2);
  152.         for (int r = k-1; r >= g; r--)
  153.         {
  154.             if (mas[r - 1] > mas[r])
  155.             {
  156.                 temp = mas[r - 1];
  157.                 mas[r - 1] = mas[r];
  158.                 mas[r] = temp;
  159.                 l = r;
  160.                 for (int g = 0; g < ma.get_lines(); g++)
  161.                 {
  162.                     ma.Get(g, r - 1, c);
  163.                     ma.Get(g, r, cz);
  164.                     ma.Put(g, r - 1, cz);
  165.                     ma.Put(g, r, c);
  166.                 }
  167.             }
  168.         }
  169.         g = l;
  170.  
  171.     }
  172. }*/
  173.  
  174. void ShellsSort(int Mass[], matrix & ma)
  175. {
  176.     int i, j;
  177.     int t[666], asf = 0, Vlad, unit;
  178.     float step;
  179.     int N = ma.get_calls();
  180.     int cza = 1;
  181.     if (floor(log2(N)) >= 1)
  182.     {
  183.         //cza = logb(N) - 1;
  184.         cza = int(floor(log2(N)));
  185.     }
  186.     matrix ta;
  187.     ta.Mtr(1, cza + 1);
  188.     //if (N > 3)
  189.  
  190.         FindStep(ma, ta);
  191.         while (cza != 0)
  192.         {
  193.             cza--;
  194.             ta.Get(0, asf, step);
  195.             asf++;
  196.             for (i = (int)step; i < N; i++)
  197.             {
  198.                 t[i] = Mass[i];
  199.                 for (j = i; j >= (int)step; j -= (int)step)
  200.                 {
  201.                     unit = (int)step;
  202.                     if (t[i] < Mass[j - unit])
  203.                     {
  204.                         Mass[j] = Mass[j - unit];
  205.                         Vlad = j - unit;
  206.                         /*for (int ggg = 0; ggg < ma.get_lines(); ggg++)
  207.                         {
  208.                             ma.Get(ggg, j, c);
  209.                             ma.Get(ggg, Vlad, cz);
  210.                             ma.Put(ggg, j, cz);
  211.                             ma.Put(ggg, Vlad, c);
  212.                         }*/
  213.                         ma.Andrey(j, Vlad);
  214.                     }
  215.                     else
  216.                         break;
  217.                 }
  218.                 Mass[j] = t[i];
  219.             }
  220.         }
  221.     }
  222.     //else Negr(ma, Mass);
  223.  
  224.  
  225.  
  226. void isp7(matrix &SixHundredZeroThree, int &Ii, int &Jj, int &N)
  227. {
  228.     int S = 0;
  229.     float S1 = 0;
  230.     int Mass[666];
  231.     for (int j = 0; j < Jj; j++)
  232.     {
  233.         for (int i = 0; i < Ii; i++)
  234.         {
  235.             SixHundredZeroThree.Get(i, j, S1);
  236.             if (S1 > 0)
  237.                 S = S + (int)S1;
  238.         }
  239.        
  240.         Mass[j] = S;
  241.         S = 0;
  242.     }
  243.     ShellsSort(Mass, SixHundredZeroThree);
  244. }
  245.  
  246. /*void No_Broblems(matrix matrica)
  247. {
  248.     int Aleksandr = 1;
  249.     for(;;)
  250.     {
  251.         switch (getch())
  252.         {
  253.         case 72:
  254.             {std::cout << "\nup"; Aleksandr = Aleksandr + 1; }
  255.             break;
  256.         case 80:
  257.             {std::cout << "\ndown"; Aleksandr = Aleksandr + 2; }
  258.             break;
  259.         case 75:
  260.             {std::cout << "\nleft"; Aleksandr = Aleksandr + 3; }
  261.             break;
  262.         case 77:
  263.             {std::cout << "\nright"; Aleksandr = Aleksandr + 4; }
  264.             break;
  265.         }
  266.     }
  267.     printf("%d", Aleksandr);
  268. }*/
  269.  
  270. void No_Broblems(matrix &matrica)
  271. {
  272.     system("cls");
  273.     int I=0, J=0; //J - столбцы
  274.     char c;
  275.     float elem;
  276.     printf("    Вверх\n");
  277.     printf("Влево"); printf("      Вправо\n");
  278.     printf("    Вниз\n");
  279.     printf("-----------------------\n");
  280.     printf("Выберите действие:\n");
  281.     printf("1. Изменить элемент таблицы\n");
  282.     printf("-----------------------\n");
  283.     for (int i = 0; i<matrica.get_lines(); i++)
  284.     {
  285.         for (int j = 0; j<matrica.get_calls(); j++)
  286.         {
  287.             matrica.Get(i, j, elem);
  288.             printf("%.0f ", elem);
  289.         }
  290.         printf("\n");
  291.     }
  292.     printf("-----------------------\n");
  293.     while (c=_getch() !=27)
  294.     {
  295.             switch (getch())
  296.             {
  297.             case 27:;
  298.                 break;
  299.             case 72:
  300.                 std::cout << "\nup "; I--; printf("%d\n", I);
  301.                 matrica.Get(I, J, elem); printf("%.0f", elem);
  302.                 break;
  303.             case 80:
  304.                 std::cout << "\ndown "; I++; printf("%d\n", I);
  305.                 matrica.Get(I, J, elem); printf("%.0f", elem);
  306.                 break;
  307.             case 75:
  308.                 std::cout << "\nleft "; J--; printf("%d\n", J);
  309.                 matrica.Get(I, J, elem); printf("%.0f", elem);
  310.                 break;
  311.             case 77:
  312.                 std::cout << "\nright "; J++; printf("%d\n", J);
  313.                 matrica.Get(I, J, elem); printf("%.0f", elem);
  314.                 break;
  315.             case 49:
  316.                 printf("Введите элемент: ");
  317.                 scanf_s("%f", &elem); matrica.Put(I,J,elem);
  318.                 break;
  319.             }
  320.  
  321.     }
  322. }
  323.  
  324.  
  325.  
  326. int main()
  327. {
  328.     setlocale(LC_ALL, "russian");
  329.     int I = 0, J = 0, res = 0, isp = 0, Ii = 0, Jj = 0, error = 0, N;
  330.     float  Number = 0;
  331.     int flagok = 0; char filename[100];
  332.     FILE*f;
  333.     printf("Введите название файла\n");
  334.     cin.getline(filename, 100);
  335.     srand((unsigned int)time(0));
  336.     f = fopen(filename, "w+");
  337.     if (f == NULL) { printf("Файл не открыт\n"); }
  338.     /*printf("Введите размер таблицы\n");
  339.     scanf("%d%d", &Ii, &Jj);*/
  340.     //printf("Введите размеры таблицы :\n");
  341.     printf("Введите размеры таблицы\nКоличество стобцов :");
  342.     scanf("%d", &Jj);
  343.     printf("Количество строк :");
  344.     scanf("%d", &Ii);
  345.     matrix SixHundredZeroThree;
  346.     SixHundredZeroThree.Mtr(Ii, Jj);
  347.     do
  348.     {
  349.  
  350.         system("cls");
  351.         system("color B0");
  352.         printf(" 1) Заполнить таблицу с клавиатуры\n 2) Заполнить таблицу случайными числами\n 3) Показать элементы таблицы\n 4) Прочитать таблицу из файла\n 5) Сохранить в файл\n 6) Создать новую матрицу\n 7) Сортировка\n 8) Редактор\n 9) Закончить работу\n Введите номер действия:  ");
  353.         scanf_s("%d", &isp);
  354.  
  355.         if (isp == 1) {
  356.             system("cls");
  357.             printf("Хотите сохранить удаляемую таблицу в файл?\nЕсли Да, то напишите 1, если Нет, то 0.\n");
  358.             scanf_s("%d", &flagok);
  359.             if (flagok == 1) { isp5(f, SixHundredZeroThree, Ii, Jj); }
  360.             {isp1 (SixHundredZeroThree, Ii, Jj); }
  361.         }
  362.         else if (isp == 2)
  363.         {
  364.             system("cls");
  365.             printf("Хотите сохранить удаляемую таблицу в файл?\nЕсли Да, то напишите 1, если Нет, то 0.\n");
  366.             scanf_s("%d", &flagok);
  367.             if (flagok == 1) { isp5(f, SixHundredZeroThree, Ii, Jj); }
  368.             isp2(SixHundredZeroThree, Ii, Jj);
  369.         }
  370.  
  371.         else if (isp == 3) { isp3(SixHundredZeroThree, Ii, Jj); _getch(); }
  372.  
  373.         else if (isp == 4)
  374.         {
  375.             system("cls");
  376.             printf("Хотите сохранить удаляемую таблицу в файл?\nЕсли Да, то напишите 1, если Нет, то 0.\n");
  377.             scanf_s("%d", &flagok);
  378.             if (flagok == 1) { isp5(f, SixHundredZeroThree, Ii, Jj); }
  379.             isp4(f, SixHundredZeroThree, Ii, Jj);
  380.             _getch();
  381.         }
  382.         else if (isp == 5) { isp5(f, SixHundredZeroThree, Ii, Jj); }
  383.         else if (isp == 6)
  384.         {
  385.             isp6(SixHundredZeroThree, Ii, Jj);
  386.         }
  387.         else if (isp == 7)
  388.         {
  389.             system("cls");
  390.             int *keys = new int[Jj];
  391.             for (int b = 0; b < Jj; b++)
  392.             {
  393.                 for (int a = 0; a < Ii; a++)
  394.                 {
  395.  
  396.                 }
  397.             }
  398.  
  399.             isp7(SixHundredZeroThree, Ii, Jj, N);
  400.             delete[] keys;
  401.         }
  402.         else if (isp == 8)
  403.         {
  404.             No_Broblems(SixHundredZeroThree);
  405.         }
  406.     } while (isp != 9);
  407.     fclose(f);
  408.     return (0);
  409. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement