Написать програму на Си++ (C++). В каждой из матриц A (4х3), B (5х4) поменять местами две строки

13. Условие:

В каждой из матриц A (4×3), B (5×4) поменять местами две строки: в A вторую и третью строки, в B — первую и третью.

1) Функциональная

#include "pch.h"

#include <conio.h>

#include <iostream>

 

using namespace std;

void matrin(float a[][4], int n, int m, char c);

void matrout(float a[][4], int n, int m, char c);

void swap(float a[][4], int n1, int m1, int n, int m, char c);

 

void main()

{

setlocale(LC_ALL, "Russian");

float A[4][4], B[5][4];

// ввод матрицы

matrin(A, 4, 3, 'A');

matrin(B, 5, 4, 'B');

// вывод

matrout(A, 4, 3, 'A');

matrout(B, 5, 4, 'B');

// поменять местами строки

swap(A, 2, 3, 4, 3, 'A');

swap(B, 1, 3, 5, 4, 'B');

// вывод

matrout(A, 4, 3, 'A');

matrout(B, 5, 4, 'B');

_getch();

}

 

void matrin(float a[][4], int n, int m, char c)

{

int i, j;

cout << "Введите матрицу " << c << endl;

for (i = 0; i < n; i++)

            for (j = 0; j < m; j++)

                        cin >> a[i][j];

                        cout << endl;

}

void matrout(float a[][4], int n, int m, char c)

{

int i, j;

cout << "Матрица " << c << endl;

for (int i = 0; i < n; i++) {

            for (int j = 0; j < m; j++)

                        cout << a[i][j] << "\t";

                        cout << endl;

}

}

void swap(float a[][4], int n1, int m1, int n, int m, char c) {

int i, j, tmp;

for (int j = 0; j < m; j++) {

                        tmp = a[n1-1][j];

                        a[n1-1][j] = a[m1-1][j];

                        a[m1-1][j] = tmp;

}

}

2) Объектно-ориентированная

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <stdio.h>

using namespace std;

 

class matr {

protected:

float **a;

int n, m, x, y;

char c;

public:

matr(int n1, int m1, char c1, int x1, int y1);

~matr();

void vvod();

void vivod();

void swap();

};

matr::matr(int n1, int m1, char c1, int x1, int y1) {

n = n1; m = m1; c = c1; x = x1; y = y1;

a = new float*[n];

int i, j;

for (i = 0; i < n; i++) {

            a[i] = new float[m];

            for (j = 0; j < m; j++)

                        a[i][j] = 0;

}

}

matr::~matr() {

int i;

for (i = 0; i < n; i++) { delete[] a[i]; }

delete[] a;

cout << "ends!" << endl;

}

void matr::vvod() {

int i, j;

cout << "Введите матрицу " << c << " размером " << n << "*" << m << endl;

for (i = 0; i < n; i++) {

            for (j = 0; j < m; j++)

                        cin >> a[i][j];

}

}

void matr::vivod() {

int i, j;

cout << "Матрица " << c << endl;

for (int i = 0; i < n; i++) {

            for (int j = 0; j < m; j++)

                        cout << a[i][j] << "\t";

            cout << endl;

}

}

void matr::swap() {

int j, tmp;

for (int j = 0; j < m; j++) {

            tmp = a[x - 1][j];

            a[x - 1][j] = a[y - 1][j];

            a[y - 1][j] = tmp;

}

};

 

// наследование

class matr_nasl: public matr {

private:

public:

matr_nasl(int n1, int m1, char c1, int x1, int y1);

~matr_nasl();

};

matr_nasl::matr_nasl(int n1, int m1, char c1, int x1, int y1): matr(n1, m1, c1, x1, y1) {}

matr_nasl::~matr_nasl() { cout << "ends!" << endl; }

 

void main() {

setlocale(LC_ALL, "Russian");

matr *a; matr_nasl *b;

a = new matr(4, 3, 'A', 2, 3);

b = new matr_nasl(5, 4, 'B', 1, 3);

a->vvod();

b->vvod();

a->vivod();

b->vivod();

a->swap();

b->swap();

a->vivod();

b->vivod();

a->~matr();

b->~matr_nasl();

_getch();

}

14.  Условие:

Даны матрицы A (5×4), B (5×5), C (3×7). Найти значение выражения PA + 2PB – PC, где PA (PB, PC) — произведение положительных элементов матрицы A (B, C), не лежащих на главной диагонали.

1) Функциональная

#include <iostream>

using namespace std;

void FILLMATR(float matrix[][10], int k, int l) //функция заполнения матрицы

{

cout << "Введите значения матрицы:\n";

for (int i = 0; i < k; i++)

{

for (int j = 0; j<l; j++)

{

cin >> matrix[i][j];//ввод элементов матрицы

}

}

}

float CHECK(float matrix[][10], int k, int l) //функция обработки матрицы (проверка на главную диагональ и положительные элементы)

{

float pr = 0;

for (int i = 0; i < k; i++) //Цикл пробегается по всем элементам матрицы (кроме диагонали)

//проверяет, есть ли среди них хотя бы 1 положительное значение. Если есть,

//то присваивает переменной pr значение 1, чтобы можно было умножать на него без последствий получить 0

//или отрицательное число

{

for (int c = 0; c < l; c++)

{

if (i!= c && matrix[i][c] > 0)

{

pr = 1;

}

}

}

if (pr!= 0) //Если элементов, удовлетворяющих условию, нет, то произведение будет равно нулю

//Цикл for не запустится, а сразу вернётся произведение = 0

{

for (int i = 0; i < k; i++) //цикл произведения элементов

{

for (int j = 0; j < l; j++)

{

if (i!= j && matrix[i][j] > 0)

{

pr *= matrix[i][j]; //произведение элементов

}

}

}

return pr;

}

Else

{

return pr;

}

}

void main()

{

setlocale(LC_ALL, "Russian");

float A[10][10], B[10][10], C[10][10];

cout << "Матрица A\n";

FILLMATR(A, 5, 4); //вызов функции заполнения А

cout << "\nМатрица B\n";

FILLMATR(B, 5, 5);

cout << "\nМатрица C\n";

FILLMATR(C, 3, 7);

float prA = CHECK(A, 5, 4);//присваиваем произведению А значение возврата функции

float prB = CHECK(B, 5, 5);

float prC = CHECK(C, 3, 7);

cout << "\nПроизведение А: " << prA;

cout << "\nПроизведение B: " << prB;

cout << "\nПроизведение C: " << prC;

cout << "\nРезультат вычисления по формуле: " << prA + 2 * prB + prC<<endl;

system("pause");

}

2) Объектно-ориентированная

#include <iostream>

using namespace std;

class MAT

{

private:           

       float pr;

protected:

       int k, l;

       float** matrix;

public:

       MAT(int k, int l):k(k), l(l) {};

       void fillM()

       {

                  matrix = new float* [k];

                  for (int i = 0; i < k; i++)

                  {

                              matrix[i] = new float[l];

                              for (int j = 0; j < l; j++)

                              {

                                          cin >> matrix[i][j];

                              }

                  }

       }

       virtual float pM()

       {

                  float pr = 0;

                  for (int i = 0; i < k; i++) //Цикл пробегается по всем элементам матрицы (кроме диагонали)

                              //проверяет, есть ли среди них хотя бы 1 положительное значение. Если есть,

                              //то присваивает переменной pr значение 1, чтобы можно было умножать на него без последствий получить 0

                              //или отрицательное число

                  {

                              for (int c = 0; c < l; c++)

                              {

                                          if (i!= c && matrix[i][c] > 0)

                                          {

                                                      pr = 1;

                                          }

                              }

                  }

                  if (pr!= 0) //Если элементов, удовлетворяющих условию, нет, то произведение будет равно нулю

                              //Цикл for не запустится, а сразу вернётся произведение = 0

                  {

                              for (int i = 0; i < k; i++) //цикл произведения элементов

                              {

                                          for (int j = 0; j < l; j++)

                                          {

                                                      if (i!= j && matrix[i][j] > 0)

                                                      {

                                                                 pr *= matrix[i][j]; //произведение элементов

                                                      }

                                          }

                              }

                              return pr;

                  }

                  else

                  {

                              return pr;

                  }

       }

};

 

void task()

{

       MAT* A;

       MAT* B;

       MAT* C;

 

       A = new MAT(5, 4);

       B = new MAT(5, 5);

       C = new MAT(3, 7);

       cout << "Матрица А1 5x4:\n";

       A->fillM();

       cout << "\nМатрица B1 5x5:\n";

       B->fillM();

       cout << "\nМатрица C1 3x7:\n";

       C->fillM();

 

       float prA = A->pM();

       float prB = B->pM();

       float prC = C->pM();

       cout << "\nПроизведение А: " << prA;

       cout << "\nПроизведение B: " << prB;

       cout << "\nПроизведение C: " << prC;

       cout << "\nРезультат вычисления по формуле: " << prA + 2 * prB + prC << endl;

}

 

 

class MAT_2:public MAT //класс-наследник ищет среднее арифметическое положительных элементов

{

private:

       float aver;

       int num = 0;

public:

       MAT_2(int k, int l):MAT(k, l) {};

       void fillM()

       {

                  matrix = new float* [k];

                  for (int i = 0; i < k; i++)

                  {

                              matrix[i] = new float[l];

                              for (int j = 0; j < l; j++)

                              {

                                          cin >> matrix[i][j];

                              }

                  }

       }

       void averM()

       {

                  float sum = 0;

                  for (int i = 0; i < k; i++)

                  {

                              for (int j = 0; j < l; j++)

                              {

                                          if (matrix[i][j] > 0)

                                          {

                                                      num++;

                                                      sum += matrix[i][j];

                                          }

                              }

                  }

                  aver = sum / num;

       }

       void out()

       {

                  cout <<endl<< "Количество элементов больших нуля: "<<num;

                  cout << endl << "Среднее значение: "<<aver;

       }

};

 

void task2()

{

       MAT_2* A1;

       MAT_2* B1;

       MAT_2* C1;

       A1 = new MAT_2(5, 4);

       B1 = new MAT_2(5, 5);

       C1 = new MAT_2(3, 7);

 

       cout << "Матрица А1 5x4:\n";

       A1->fillM();

       cout << "\nМатрица B1 5x5:\n";

       B1->fillM();

       cout << "\nМатрица C1 3x7:\n";

       C1->fillM();

 

       A1->averM();

       B1->averM();

       C1->averM();

 

       cout << "\nA1: ";

       A1->out();

       cout << "\nB1: ";

       B1->out();

       cout << "\nC1: ";

       C1->out();

}

 

 

int main()

{

       setlocale(LC_ALL, "Russian");

       task();

       task2();

       return 0;

}


 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: