Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream> // чтение файла
- #include <iostream> // cin, cout
- #include <iomanip> // setw() - установка длинны строки вывода
- #include <stdlib.h> // atoi() - перевод из строки в integer
- #include <string.h> // строки
- #include <math.h>
- // #include <stdio.h>
- using namespace std;
- void printArray(int rowNum, int colNum, float **array)
- {
- int i, j;
- for (i = 0; i < rowNum; i++) {
- cout << "|";
- for (j = 0; j < colNum; j++)
- {
- cout << setw(6) << array[i][j] ;
- }
- cout << setw(3) << "|";
- cout << endl;
- }
- }
- void replaceFloats(float &num1, float &num2)
- {
- float temp;
- temp = num1;
- num1 = num2;
- num2 = temp;
- }
- void replaceRows(int row1, int row2, int colNum, float** array)
- {
- int j;
- for (j = 0; j < colNum; j++) {
- replaceFloats(array[row1][j], array[row2][j]);
- }
- }
- void replaceCols(int col1, int col2, int rowNum, float** array)
- {
- int i;
- for (i = 0; i < rowNum; i++) {
- replaceFloats(array[i][col1], array[i][col2]);
- }
- }
- void sortArrayByRow(int rowNum, int colNum, int rowToSort, bool asc, float **array)
- {
- int i = rowToSort - 1;
- int j, temp;
- bool unSorted = true;
- while (unSorted == true) {
- unSorted = false;
- for (j = 1; j < colNum; j++) {
- if ( asc == true ) {
- if ( array[i][j] > array[i][j-1] ) {
- replaceCols(j, (j-1), rowNum, array);
- unSorted = true;
- }
- }
- else {
- if ( array[i][j] < array[i][j-1] ) {
- replaceCols(j, (j-1), rowNum, array);
- unSorted = true;
- }
- }
- }
- }
- }
- void sortArrayByCol(int rowNum, int colNum, int colToSort, bool asc, float **array)
- {
- int j = colToSort - 1;
- int i, temp;
- bool unSorted = true;
- while (unSorted == true) {
- unSorted = false;
- for (i = 1; i < rowNum; i++) {
- if ( asc == true ) {
- if ( array[i][j] > array[i-1][j] ) {
- unSorted = true;
- replaceRows(i, (i-1), colNum, array);
- }
- }
- else {
- if ( array[i][j] < array[i-1][j]) {
- unSorted = true;
- replaceRows(i, (i-1), colNum, array);
- }
- }
- }
- }
- }
- float** createArray(int n, int m)
- {
- int i;
- float** tmp = new float* [n];
- for (i = 0; i < n; i++) {
- tmp[i] = new float [m];
- }
- return tmp;
- }
- void readArray(int n, int m, float** array, fstream &file)
- {
- int i, j;
- char s[20];
- for (i = 0; i < n; i++) {
- for (j = 0; j < m; j++) {
- file >> s;
- array[i][j] = atoi(s);
- }
- }
- }
- float** getVectorByRows(int n, int m, float** array)
- {
- int i, j;
- float sum;
- float** array0 = createArray(1, m);
- for (j = 0; j < m; j++) {
- sum = 0;
- for (i = 0; i < n; i++) {
- sum += array[i][j];
- }
- array0[0][j] = sum;
- }
- return array0;
- }
- float** multipleArray(int &n0, int &m0, int n1, int m1, int n2, int m2, float** array1, float** array2)
- {
- /* Умножать друг на друга можно только те матрицы,
- для которых число столбцов первого сомножителя равно числу строк второго сомножителя.
- */
- if (m1 != n2) {
- cout << "Число столбцов первой матрицы не равно числу строк второй.";
- return NULL ;
- }
- int i, j, k;
- /* Результатом умножения является матрица,
- у которой число строк равно числу строк первого сомножителя,
- а число столбцов совпадает с числом столбцов второго сомножителя.
- */
- n0 = n1, m0 = m2; // n0 - кол-во строк полученной матрицы, m0 - кол-во её столбцов
- float **array0 = createArray(n0, m0);
- for (i = 0; i < n0; i++) {
- for (j = 0; j < m0; j++) {
- array0[i][j] = 0;
- for (k = 0; k < m1; k++) array0[i][j] += array1[i][k] * array2[k][j];
- }
- }
- return array0;
- }
- int main()
- {
- char s[20];
- int n1, m1, n2, m2; // n - кол-во строк, m - кол-во столбцов
- int i, j;
- fstream file("myfile.txt");
- file >> s;
- n1 = atoi(s);
- file >> s;
- m1 = atoi(s);
- cout << "Первая матрица: " << endl;
- float **massiv1 = createArray(n1, m1);
- readArray(n1, m1, massiv1, file);
- printArray(n1, m1, massiv1);
- cout << endl;
- // Читаем второй массив
- file >> s;
- n2 = atoi(s);
- file >> s;
- m2 = atoi(s);
- cout << "Вторая матрица: " << endl;
- float **massiv2 = createArray(n2, m2);
- readArray(n2, m2, massiv2, file);
- printArray(n2, m2, massiv2);
- cout << endl;
- cout << "Умноженная матрица: " << endl;
- int n0, m0; // n0 - кол-во строк умноженной матрицы, m0 - кол-во её столбцов
- // будут заданы после выполнения функции multipleArray()
- float **massiv0 = multipleArray(n0, m0, n1, m1, n2, m2, massiv1, massiv2);
- printArray(n0, m0, massiv0);
- cout << endl;
- cout << "Умноженная матрица, сортированная по первой строке: " << endl;
- sortArrayByRow(n0, m0, 1, true, massiv0);
- printArray(n0, m0, massiv0);
- cout << endl;
- cout << "Умноженная матрица, сортированная по первому столбцу: " << endl;
- sortArrayByCol(n0, m0, 1, true, massiv0);
- printArray(n0, m0, massiv0);
- cout << endl;
- cout << "Вектор матрицы: " << endl;
- float** vectorRows = getVectorByRows(n0, m0, massiv0);
- printArray(1, m0, vectorRows);
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement