Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Комбинированная обработка матрицы





Напоследок объединим задачи вычисления суммы и поиска максимума с целью определения номера строки, сумма элементов в которой максимальна.

 

//Вычисляем сумму элементов в первой строке

int i_max=0, sum_max = 0;

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

sum_max += matrix[i_max][j];

}

 

for (int i=1; i<size; i++) {

//Вычисляем сумму в строке номер i

int sum = 0;

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

sum += matrix[i][j];

}

 

//Если сумма в очередной строке больше текущей

//максимальной, то текущую максимальную сумму

//заменяем новой суммой.

if (sum_max < sum) {

sum_max = sum;

i_max = i;

}

}

 

cout << "Максимальная сумма = " << sum_max << endl;

cout << "Номер строки = " << i_max << endl;

 

Программа для определения номера столбца с максимальной суммой:

 

int j_max=0;

int sum_max = 0;

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

sum_max += matrix[i][j_max];

}

 

for (int j=1; j<size; j++) {

int sum = 0;

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

sum += matrix[i][j];

}

if (sum_max < sum) {

sum_max = sum;

j_max = j;

}

}

 

cout << "Максимальная сумма = " << sum_max << endl;

cout << "Номер столбца = " << j_max << endl;

 

 

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Задача 1. Матрица называется нулевой, если все ее элементы равны нулю. Напишите программу, которая принимает с клавиатуры число N, создает нулевую матрицу размера N на N и выводит ее на экран.

 

#include "stdafx.h"

#include <iostream>

using namespace std;

 

int matrix[100][100];

int N;

 

void fillZeroMatrix() {

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

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

matrix[i][j] = 0;

}

}

}

void printMatrix() {

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

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

cout.width(2);

cout << matrix[i][j];

}

cout << endl;

}

}

 

int main() {

setlocale(LC_ALL, "Russian");

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

cin >> N;

fillZeroMatrix();

printMatrix();

system("pause");

return 0;

}

Задача 2. Напишите программу, которая принимает с клавиатуры число N, создает матрицу размера N на N, заполненную случайными числами, и выводит ее на экран. Затем найдите номер строки, в которой расположен максимальный элемент этой матрицы.

 

#include "stdafx.h"

#include <iostream>

#include <ctime>

using namespace std;

 

int matrix[100][100];

int N;

 

int rnd(int min, int max) {

return rand()%(max-min) + min;

}

void randomize() {

srand(time(0));

}

 

void fillRandomMatrix() {

randomize();

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

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

matrix[i][j] = rnd(-50, 50);

}

}

}

 

void printMatrix() {

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

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

cout.width(4);

cout << matrix[i][j];

}

cout << endl;

}

}

int getRowOfMax() {

int max = matrix[0][0];

int row_max = 0;

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

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

if (matrix[i][j] > max) {

max = matrix[i][j];

row_max = i;

}

}

}

return row_max;

}

 

int main() {

setlocale(LC_ALL, "Russian");

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

cin >> N;

fillRandomMatrix();

printMatrix();

cout << getRowOfMax() << endl;

system("pause");

return 0;

}

 

Задача 3. Квадратная матрица A называется симметричной, если она симметрична относительно главной диагонали, другими словами, для всех ее элементов выполняется равенство Aij=Aji. Напишите программу, которая принимает с клавиатуры число N, создает симметричную матрицу размера N на N, заполненную случайными числами, и выводит ее на экран.

 

#include "stdafx.h"

#include <iostream>

#include <ctime>

using namespace std;

 

 

int matrix[100][100];

int N;

 

int rnd(int min, int max) {

return rand()%(max-min) + min;

}

 

void randomize() {

srand(time(0));

}

 

void fillSymmetricMatrix() {

randomize();

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

for (int j=i; j<N; j++) {

matrix[i][j] = rnd(-50, 50);

}

}

 

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

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

matrix[i][j] = matrix[j][i];

}

}

}

 

void printMatrix() {

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

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

cout.width(4);

cout << matrix[i][j];

}

cout << endl;

}

}

 

int main() {

setlocale(LC_ALL, "Russian");

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

cin >> N;

fillSymmetricMatrix();

printMatrix();

system("pause");

return 0;

}

 

Задача 4. Квадратная матрица называется трехдиагональной, если все ее элементы равны нулю, за исключением тех, которые расположены на главной диагонали и двух соседних с ней диагоналях. Напишите программу, которая принимает с клавиатуры число N и создает трехдиагональную матрицу размера N на N, ненулевые элементы которой заполните случайными числами. Затем выведите матрицу на экран.

 

#include "stdafx.h"

#include <iostream>

#include <ctime>

using namespace std;

 

int matrix[100][100];

int N;

 

int rnd(int min, int max) {

return rand()%(max-min) + min;

}

 

void randomize() {

srand(time(0));

}

 

void fill3DiagonalMatrix() {

randomize();

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

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

matrix[i][j] = abs(i-j)<2? rnd(-50, 50): 0;

}

}

}

 

void printMatrix() {

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

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

cout.width(4);

cout << matrix[i][j];

}

cout << endl;

}

}

 

int main() {

setlocale(LC_ALL, "Russian");

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

cin >> N;

fill3DiagonalMatrix();

printMatrix();

system("pause");

return 0;

}

 

Задача 5. Норма Фробениуса для матрицы вычисляется как корень квадратный из суммы квадратов элементов матрицы. Напишите программу, которая принимает с клавиатуры число N, создает матрицу размера N на N, заполненную случайными числами, и выводит ее на экран. Затем вычислите норму Фробениуса этой матрицы.

 

#include "stdafx.h"

#include <iostream>

#include <ctime>

using namespace std;

 

int matrix[100][100];

int N;

 

int rnd(int min, int max) {

return rand()%(max-min) + min;

}

 

void randomize() {

srand(time(0));

}

 

void fillRandomMatrix() {

randomize();

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

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

matrix[i][j] = rnd(-50, 50);

}

}

}

 

float getFrobeniusNorm() {

float sum = 0;

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

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

sum += matrix[i][j]*matrix[i][j];

}

}

return sqrt(sum);

}

 

void printMatrix() {

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

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

cout.width(4);

cout << matrix[i][j];

}

cout << endl;

}

}

 

int main() {

setlocale(LC_ALL, "Russian");

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

cin >> N;

fillRandomMatrix();

printMatrix();

cout << getFrobeniusNorm() << endl;

system("pause");

return 0;

}

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Как представляется матрица в программировании?
  2. Как объявить и инициализировать матрицу?
  3. Как заполнить матрицу случайными числами?
  4. Опишите алгоритм вычисления суммы элементов матрицы.
  5. Опишите алгоритм вычисления суммы элементов в заданном столбце или в заданной строке.

 

 

Date: 2015-09-02; view: 251; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию