Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Отсортировать столбцы матрицы по неубыванию сумм положительных элементов.
- //Сортировка Шелла с заданной в виде локального константного массива последовательностью приращений.
- //Кнут - сортировки почитать, глава 5
- #include "matrix.h"
- #include <stdio.h>
- #include <locale.h>
- #include <ctime>
- #include <stdlib.h>
- #include <conio.h>
- #include <iostream>
- #include <math.h>
- using namespace std;
- #pragma warning (disable:4996)
- void isp1(matrix& SixHundredZeroThree, int Ii, int Jj)
- {
- float fz = 0;
- system("cls");
- for (int I = 0; I < Ii; I++)
- {
- for (int J = 0; J < Jj; J++)
- {
- scanf_s("%f", &fz);
- SixHundredZeroThree.Put(I, J, fz);
- }
- }
- for (int I = 0; I < Ii; I++)
- {
- for (int J = 0; J < Jj; J++)
- {
- SixHundredZeroThree.Get(I, J, fz);
- printf("%.0f ", fz);
- }
- printf("\n");
- }; system("cls");
- }
- void isp2(matrix& SixHundredZeroThree, int Ii, int Jj)
- {
- float fz = 0;
- for (int I = 0; I < Ii; I++)
- {
- for (int J = 0; J < Jj; J++)
- {
- fz = float(rand() % 10);
- SixHundredZeroThree.Put(I, J, fz);
- printf("%.0f ", fz);
- }
- printf("\n");
- };
- }
- void isp3(matrix& SixHundredZeroThree, int Ii, int Jj)
- {
- float fz = 0;
- system("cls");
- for (int I = 0; I<Ii; I++)
- {
- for (int J = 0; J<Jj; J++)
- {
- SixHundredZeroThree.Get(I, J, fz);
- printf("%.0f ", fz);
- }
- printf("\n");
- }
- }
- void isp4(FILE*f, matrix& SixHundredZeroThree, int Ii, int Jj)
- {
- float fz = 0;
- fscanf(f, "%d %d", &Ii, &Jj);
- for (int Timon = 0; Timon < Ii; Timon++)
- {
- for (int Pumba = 0; Pumba < Jj; Pumba++)
- {
- fscanf(f, "%f", &fz);
- printf("%.0f ", fz);
- }
- printf("\n");
- }
- }
- void isp5(FILE*f, matrix& SixHundredZeroThree, int Ii, int Jj)
- {
- float fz = 0;
- system("cls");
- fprintf(f, "%d %d\n", Ii, Jj);
- for (int G = 0; G<Ii; G++)
- {
- for (int Z = 0; Z<Jj; Z++)
- {
- SixHundredZeroThree.Get(G, Z, fz);
- fprintf(f, "%.0f ", fz);
- }
- }
- }
- void isp6(matrix& SixHundredZeroThree, int &Ii, int &Jj)
- {
- system("cls");
- printf("Введите размеры таблицы\nКоличество стобцов :");
- scanf("%d", &Jj);
- printf("Количество строк :");
- scanf("%d", &Ii);
- if ((Ii < 0) || (Jj < 0))
- {
- do {
- printf("Неверные параметры , попробуйте еще: ");
- scanf_s("%d%d", &Ii, &Jj);
- } while ((Ii < 0) || (Jj < 0));
- }
- SixHundredZeroThree.Mtr(Ii, Jj);
- }
- void FindStep(matrix &ma, matrix &ta)
- {
- float azaza = 1, cza, h=1;
- int N = ma.get_calls();
- cza = float(floor(log2(N)) - 1);
- float u = 0;
- //cza = logb(N) - 1;
- printf("%f\n", cza);
- system("pause");
- ta.Mtr(1, int(cza + 1));
- ta.Put(0, int(cza), azaza);
- /*for (int Polina = 0; Polina <= N; Polina++)
- {
- cza = logb(N) - 1;
- ta.Put(0, Polina, cza);
- }*/
- for (int Polina = (int)cza - 1; Polina >= 0; Polina--)
- {
- h = 2 * h + 1;
- ta.Put(0, Polina, h);
- //printf("%.0f\n", h);
- }
- for (int n = 0; n <= cza; n++)
- {
- ta.Get(0, n, u);
- printf("%.0f\n", u);
- }
- system("pause");
- }
- /*void Negr(matrix &ma, int mas[])// It's Alive!!!
- {
- int k = ma.get_calls(), g=1;
- float temp, l, c, cz;
- for (int i = 1; i < k; i++)
- {
- l = float(k + 2);
- for (int r = k-1; r >= g; r--)
- {
- if (mas[r - 1] > mas[r])
- {
- temp = mas[r - 1];
- mas[r - 1] = mas[r];
- mas[r] = temp;
- l = r;
- for (int g = 0; g < ma.get_lines(); g++)
- {
- ma.Get(g, r - 1, c);
- ma.Get(g, r, cz);
- ma.Put(g, r - 1, cz);
- ma.Put(g, r, c);
- }
- }
- }
- g = l;
- }
- }*/
- void ShellsSort(int Mass[], matrix & ma)
- {
- int i, j;
- int t[666], asf = 0, Vlad, unit;
- float step;
- int N = ma.get_calls();
- int cza = 1;
- if (floor(log2(N)) >= 1)
- {
- //cza = logb(N) - 1;
- cza = int(floor(log2(N)));
- }
- matrix ta;
- ta.Mtr(1, cza + 1);
- //if (N > 3)
- FindStep(ma, ta);
- while (cza != 0)
- {
- cza--;
- ta.Get(0, asf, step);
- asf++;
- for (i = (int)step; i < N; i++)
- {
- t[i] = Mass[i];
- for (j = i; j >= (int)step; j -= (int)step)
- {
- unit = (int)step;
- if (t[i] < Mass[j - unit])
- {
- Mass[j] = Mass[j - unit];
- Vlad = j - unit;
- /*for (int ggg = 0; ggg < ma.get_lines(); ggg++)
- {
- ma.Get(ggg, j, c);
- ma.Get(ggg, Vlad, cz);
- ma.Put(ggg, j, cz);
- ma.Put(ggg, Vlad, c);
- }*/
- ma.Andrey(j, Vlad);
- }
- else
- break;
- }
- Mass[j] = t[i];
- }
- }
- }
- //else Negr(ma, Mass);
- void isp7(matrix &SixHundredZeroThree, int &Ii, int &Jj, int &N)
- {
- int S = 0;
- float S1 = 0;
- int Mass[666];
- for (int j = 0; j < Jj; j++)
- {
- for (int i = 0; i < Ii; i++)
- {
- SixHundredZeroThree.Get(i, j, S1);
- if (S1 > 0)
- S = S + (int)S1;
- }
- Mass[j] = S;
- S = 0;
- }
- ShellsSort(Mass, SixHundredZeroThree);
- }
- /*void No_Broblems(matrix matrica)
- {
- int Aleksandr = 1;
- for(;;)
- {
- switch (getch())
- {
- case 72:
- {std::cout << "\nup"; Aleksandr = Aleksandr + 1; }
- break;
- case 80:
- {std::cout << "\ndown"; Aleksandr = Aleksandr + 2; }
- break;
- case 75:
- {std::cout << "\nleft"; Aleksandr = Aleksandr + 3; }
- break;
- case 77:
- {std::cout << "\nright"; Aleksandr = Aleksandr + 4; }
- break;
- }
- }
- printf("%d", Aleksandr);
- }*/
- void No_Broblems(matrix &matrica)
- {
- system("cls");
- int I=0, J=0; //J - столбцы
- char c;
- float elem;
- printf(" Вверх\n");
- printf("Влево"); printf(" Вправо\n");
- printf(" Вниз\n");
- printf("-----------------------\n");
- printf("Выберите действие:\n");
- printf("1. Изменить элемент таблицы\n");
- printf("-----------------------\n");
- for (int i = 0; i<matrica.get_lines(); i++)
- {
- for (int j = 0; j<matrica.get_calls(); j++)
- {
- matrica.Get(i, j, elem);
- printf("%.0f ", elem);
- }
- printf("\n");
- }
- printf("-----------------------\n");
- while (c=_getch() !=27)
- {
- switch (getch())
- {
- case 27:;
- break;
- case 72:
- std::cout << "\nup "; I--; printf("%d\n", I);
- matrica.Get(I, J, elem); printf("%.0f", elem);
- break;
- case 80:
- std::cout << "\ndown "; I++; printf("%d\n", I);
- matrica.Get(I, J, elem); printf("%.0f", elem);
- break;
- case 75:
- std::cout << "\nleft "; J--; printf("%d\n", J);
- matrica.Get(I, J, elem); printf("%.0f", elem);
- break;
- case 77:
- std::cout << "\nright "; J++; printf("%d\n", J);
- matrica.Get(I, J, elem); printf("%.0f", elem);
- break;
- case 49:
- printf("Введите элемент: ");
- scanf_s("%f", &elem); matrica.Put(I,J,elem);
- break;
- }
- }
- }
- int main()
- {
- setlocale(LC_ALL, "russian");
- int I = 0, J = 0, res = 0, isp = 0, Ii = 0, Jj = 0, error = 0, N;
- float Number = 0;
- int flagok = 0; char filename[100];
- FILE*f;
- printf("Введите название файла\n");
- cin.getline(filename, 100);
- srand((unsigned int)time(0));
- f = fopen(filename, "w+");
- if (f == NULL) { printf("Файл не открыт\n"); }
- /*printf("Введите размер таблицы\n");
- scanf("%d%d", &Ii, &Jj);*/
- //printf("Введите размеры таблицы :\n");
- printf("Введите размеры таблицы\nКоличество стобцов :");
- scanf("%d", &Jj);
- printf("Количество строк :");
- scanf("%d", &Ii);
- matrix SixHundredZeroThree;
- SixHundredZeroThree.Mtr(Ii, Jj);
- do
- {
- system("cls");
- system("color B0");
- printf(" 1) Заполнить таблицу с клавиатуры\n 2) Заполнить таблицу случайными числами\n 3) Показать элементы таблицы\n 4) Прочитать таблицу из файла\n 5) Сохранить в файл\n 6) Создать новую матрицу\n 7) Сортировка\n 8) Редактор\n 9) Закончить работу\n Введите номер действия: ");
- scanf_s("%d", &isp);
- if (isp == 1) {
- system("cls");
- printf("Хотите сохранить удаляемую таблицу в файл?\nЕсли Да, то напишите 1, если Нет, то 0.\n");
- scanf_s("%d", &flagok);
- if (flagok == 1) { isp5(f, SixHundredZeroThree, Ii, Jj); }
- {isp1 (SixHundredZeroThree, Ii, Jj); }
- }
- else if (isp == 2)
- {
- system("cls");
- printf("Хотите сохранить удаляемую таблицу в файл?\nЕсли Да, то напишите 1, если Нет, то 0.\n");
- scanf_s("%d", &flagok);
- if (flagok == 1) { isp5(f, SixHundredZeroThree, Ii, Jj); }
- isp2(SixHundredZeroThree, Ii, Jj);
- }
- else if (isp == 3) { isp3(SixHundredZeroThree, Ii, Jj); _getch(); }
- else if (isp == 4)
- {
- system("cls");
- printf("Хотите сохранить удаляемую таблицу в файл?\nЕсли Да, то напишите 1, если Нет, то 0.\n");
- scanf_s("%d", &flagok);
- if (flagok == 1) { isp5(f, SixHundredZeroThree, Ii, Jj); }
- isp4(f, SixHundredZeroThree, Ii, Jj);
- _getch();
- }
- else if (isp == 5) { isp5(f, SixHundredZeroThree, Ii, Jj); }
- else if (isp == 6)
- {
- isp6(SixHundredZeroThree, Ii, Jj);
- }
- else if (isp == 7)
- {
- system("cls");
- int *keys = new int[Jj];
- for (int b = 0; b < Jj; b++)
- {
- for (int a = 0; a < Ii; a++)
- {
- }
- }
- isp7(SixHundredZeroThree, Ii, Jj, N);
- delete[] keys;
- }
- else if (isp == 8)
- {
- No_Broblems(SixHundredZeroThree);
- }
- } while (isp != 9);
- fclose(f);
- return (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement