С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Для заданной матрицы найти минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ массивы http://www.cyberforum.ru/cpp-beginners/thread39673.html
Шахматная фигура конь перемещается на 1 клеточку по горизонтали и 2 по вертикали или на 2 клетки по горизонтали и 1 клетку по вертикали. Конь начинает свой путь с нижнего левого угла по шахматной...
C++ класс для представления понятия "контроллер видеомагнитофона" класс для представления понятия "контроллер видеомагнитофона"(обеспечивает програмное управление видеомагнитофоном, который может осуществлять запись,вставить, извлечь кассету и проверить наличие... http://www.cyberforum.ru/cpp-beginners/thread39646.html
C++ как опустить знак "-"?
первые дни учебы с++ задали задачу пользователь вводит 2 значения радиусов и координаты х и y. нужно определить принадлежит ли данная точка данной области (между большим и меньшими кругами) само...
C++ Лаба С++ Класс  однонаправленный список list
Задание по лабе Класс  однонаправленный список list. Дополнительно перегрузить следующие операции:  доступ к элементу в заданной позиции, например: int i; Type c; list L; c=L; +  ...
C++ Опpеделить значения вещественного массива по правилу http://www.cyberforum.ru/cpp-beginners/thread39510.html
через пару часов зачет а у меня много не сделанного 1 Дан вещественный массив C. Опpеделить значения вещественного массива D по следующему правилу: D=сумме i-й строки массива С, если C>0 и ...
C++ Задание со списками Есть задание со списками: В файловой системе каталог файлов организован как линейный список. Для каждого файла в каталоге содержатся следующие сведения: имя файла; дата создания; ... подробнее

Показать сообщение отдельно
Ёрик
46 / 46 / 2
Регистрация: 07.01.2009
Сообщений: 298
11.06.2009, 19:23
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <stdio.h> 
#include <math.h>
#include <time.h>
#include <stdlib.h>
 
#define N 8
 
void print_array(int arr[][N], int n)
{
int i = 0;
int j = 0;
 
for( i = 0; i < n; i++)
{
for( j = 0; j < n; j++)
printf("%d\t",arr[i][j]);
puts("\n");
}
}
 
 
void getSUM(int arr[][N], int n)
{
int i = 0;
int j = 0;
int has_negatives = 0; // Есть ли отрицательные элементы в текущем столбце 
long sum = 0;
 
for ( j = 0; j < n; j++ )
{
sum = 0;
has_negatives = 0;
for( i = 0; i < n; i++)
{
if ( arr[i][j] < 0 )
{
has_negatives = 1;
break;
}
else 
{
sum += arr[i][j];
}
}
 
// Выводим сумму только тех столбцов, в которых нет отрицательных элементов
if ( !has_negatives ) 
{
printf("\n");
printf("Sum of column %d = %d\t", j, sum);
}
}
}
 
void getMAX_among_diagonals(int arr[][N], int n)
{
int i = 0;
int j = 0;
int k = 0;
long currsum = 0;
long maxsum = 0;
 
puts("Processing diagonals:");
 
// Пробегаем левую верхнюю часть матрицы
for ( i = 0; i < n - 1; i++)
{
long currsum = 0;
for ( j = i, k = 0; (j >= 0) && (k <= i); j--, k++)
{
printf("[%d;%d]\t", j, k);
currsum += abs(arr[j][k]);
}
 
if (currsum > maxsum)
maxsum = currsum;
 
printf("Sum = %ld\n", currsum);
}
 
// Пробегаем правую нижнюю часть матрицы
for ( i = n - 1; i >= 1; i--)
{
long currsum = 0;
for ( j = i, k = n - 1; (j <= n - 1) && (k >= i); j++, k--)
{
printf("[%d;%d]\t", j, k);
currsum += abs(arr[j][k]);
}
 
if (currsum > maxsum)
maxsum = currsum;
 
printf("Sum = %ld\n", currsum);
}
 
printf("Max sum of absolute values in diagonals = %ld\n", maxsum);
}
 
void rand_array(int arr[][N], int n)
{
int i = 0;
int j = 0;
 
srand(time(0));
rand();
 
for ( i = 0; i < n; i++ )
for ( j = 0; j < n; j++ )
arr[i][j] = rand() % 30 - 3;
} 
 
int main() 
{ 
    int i;
    int **a = (int **)calloc(N,sizeof(int*));
    for (i = 0; i < N; i++)
        a[i] = (int*)calloc(N,sizeof(int));
 
rand_array(a, N);
 
print_array(a, N);
 
getSUM(a, N);
 
getMAX_among_diagonals(a, N);
 
for (i = 0; i < N; i++)
        free(a[i]);
 
free(a);
**a = NULL;
 
 
 
return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.