Також я помітив, що я не виконав самого завдання автора. Ось воно:
/*
* Yaroslav
* lun-bilyi@meta.ua
*/
#include <cstdlib>
#include <cstdio>
#include <iostream>
using namespace std;
/*
*
*/
/* create_matrix приймає в якості аргументу розмір сторони квадратної матриці
* і повертає покажчик на перший елемент створеної матриці */
int* create_matrix(int size);
/* sum_row_elements приймає покажчик на початок квадратної матриці, розмір сторони, номер
* рядка, в якому треба порахувати суму елементів, повертає суму ел. рядка */
int sum_row_elements(int *ptr, int size, int rowNumber);
/* sum_row_elements приймає покажчик на початок квадратної матриці, розмір сторони, номер
* стовпчика, в якому треба порахувати суму елементів, повертає суму ел. стовпчика */
int sum_column_elements(int *ptr, int size, int clmNumber);
/* sum_maindiag_elements приймає покажчик на початок матриці, розмір сторони
* і повертає суму елементів головної діагоналі*/
int sum_maindiag_elements(int *ptr, int size);
/* sum_maindiag_elements приймає покажчик на початок матриці, розмір сторони
* і повертає суму елементів побічної діагоналі*/
int sum_minordiag_elements(int *ptr, int size);
/* custom приймає покажчик на початок квадратної матриці, розмір сторони, і
* повертає номер стовпчика, в якому середнє арифметичне невід’ємних елементів
* мінімальне */
int custom(int *ptr, int size);
int main(int argc, char** argv) {
int *matrix_pointer; // Покажчик для матриці
int j = 0, // Лічильник
result = 0, //
size = 0; // Розмір матриці
while(size < 1 || size > 10){ // Визначення розміру матриці
cout << "Input matrix size: ";
cin >> size;
}
matrix_pointer = create_matrix(size); // Створюємо матрицю і встановлюємо
// покажчик на її початок
if(result >= 0){ // Виводимо утворену матрицю
cout << "Your matrix\n";
for(int i = 0; i < size*size; i++){
j++;
cout << matrix_pointer[ i ];
cout << " ";
if(j == size){
putchar('\n');
j = 0;
}
}
} else {
cout << "Error 1: Fail to create matrix\n";
}
/* Вивід суми рядків */
for(i = 0; i < size; i++){
cout << "Sum of the " << i << " row = ";
cout << sum_row_elements(matrix_pointer, size, i) << "\n";
}
/* Вивід суми колонок */
for(i = 0; i < size; i++){
cout << "Sum of the " << i << " column = ";
cout << sum_column_elements(matrix_pointer, size, i) << "\n";
}
/* Вивід суми елементів головної діагоналі */
cout << "Sum of the main diagonal elements = ";
cout << sum_maindiag_elements(matrix_pointer, size) << "\n";
/* Вивід суми елементів побічної діагоналі */
cout << "Sum of the minor diagonal elements = ";
cout << sum_minordiag_elements(matrix_pointer, size) << "\n";
/* Номер стовпчика, в якому під допоміжною діагоналлю
* сума невід’ємних елементів найменша */
cout << "In the " << custom(matrix_pointer, size) << " column";
cout << " sum of the positive elements is smallest\n";
return 0;
}
int* create_matrix(int size){
int *ptr; // Покажчик на перший елемент матриці
ptr = (int*) calloc(size*size, sizeof(int)); // Виділяємо пам’ять для матриці
if(ptr == NULL){ // Якщо щось пішло не так
return NULL; // Повертаємо нульове значення
}
for(int i = 0; i < size*size; i++){
ptr[ i ] = rand() % 21 - 10; // Заповнюємо матрицю числами від -10 до 10
}
return ptr; // Повертаємо покажчик на адресу першого елемента матриці
}
int sum_row_elements(int *ptr, int size, int rowNumber){
int current = size * rowNumber; // Розраховуємо позицію першого елемента
// в потрібному рядку
int last = current + size; // Розраховуємо останню позицію
// в потрібному рядку
int result = 0; // Результат
while(current < last){
result += ptr[ current ]; // Додажмо елементи
current++; // Просуваємось по рядку
}
return result; // Повертаємо результат
}
int sum_column_elements(int *ptr, int size, int clmNumber){
int i = 0; // Лічильник
int first = 0; // Перший елемент рядка
int result = 0; // Результат
while(i < size){
first = size * i; // Розраховуємо позицію першого елемента
// поточного рядка
result += ptr[ clmNumber + first ]; // Додаємо значення елемента із нашої колонки
// до result
i++; // Просуваємось до кінця матриці
}
return result; // Повертаємо результат
}
int sum_maindiag_elements(int *ptr, int size){
int current = 0, // Поточний елемент головної діагоналі
result = 0; // Результат
for(int i = 0; i < size; i++){
current = size * i + i; // Розраховуємо поточний елемент на головній діагоналі
result += ptr[ current ]; // Додаємо до результату
}
return result;
}
int sum_minordiag_elements(int *ptr, int size){
int i = 0, // Лічильник
j = 0, // Лічильник
first = 0, // Перший елемент поточного рядка
current = 0, // Поточний елемент побічної діагоналі
result = 0; // Результат
for(i = size-1, j = 0; i >= 0; i--, j++){
first = i * size; // Перший елемент поточного рядка
current = first + j; // Розраховуємо поточний елемент на побічній діагоналі
result += ptr[ current ]; // Додаємо до результату
}
return result;
}
int custom(int *ptr, int size){
bool positive = false; // Прапор свідчить про те, чи число додатнє
int i = 0, // Лічильник
j = 0, // Лічильник
column = 0, // Тут зберігається номер колонки, в якій сума додатніх
// елементів під побічною діагоналлю найменша
current = 0, // Поточний елемент, з яким ведемо роботу
result = 0, // Результат додавання елементів із поточної колонки
smallest; // Найменша сума
for(i = 1; i < size; i++){
j = i; // Поточний стовпчик
result = 0; //Обнуляємо результат для наступного рядка
while(j > 0){
current = size * (size - j) + i; // Поточний елемент
positive = (ptr[ current ] > 0) ? true : false;
if( positive ){
result += ptr[ current ]; // Додаємо поточний елемент
}
j--;
}
if(result < smallest && result != 0){
smallest = result; // Записуємо найменший результат
column = i; // Записуємо номер колонки
}
}
return column;
}