Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ массивы http://www.cyberforum.ru/cpp-beginners/thread39673.html
Шахматная фигура конь перемещается на 1 клеточку по горизонтали и 2 по вертикали или на 2 клетки по горизонтали и 1 клетку по вертикали. Конь начинает свой путь с нижнего левого угла по шахматной доске, что имеет nхn клеточек. Определить количество способов, которыми конь может попасть в верхнюю правую клетку за к шагов. Вывести один из маршрутов. незнаю с чего начать...
C++ класс для представления понятия "контроллер видеомагнитофона" класс для представления понятия "контроллер видеомагнитофона"(обеспечивает програмное управление видеомагнитофоном, который может осуществлять запись,вставить, извлечь кассету и проверить наличие кассеты, выполнять воспроизведение кассеты и осуществлть перемотку в указанном направлении как здесь объявить копирующий конструктор, перегруженный оператор присваивания, inline и const в объявлениях... http://www.cyberforum.ru/cpp-beginners/thread39646.html
C++ как опустить знак "-"?
первые дни учебы с++ задали задачу пользователь вводит 2 значения радиусов и координаты х и y. нужно определить принадлежит ли данная точка данной области (между большим и меньшими кругами) само решение написал... геометрически я понимаю как его решить...но компилятор (MS VS 2008) ругается на l=sqrt(x+y); error C2668: 'sqrt' : ambiguous call to overloaded function подскажите направление...
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 и D=0 в противном случае. Значение переменной i изменяется от 0 до 4. 1. С клавиатуры ввести данные в массив С. 2. Определить массив D. 3. Вывести на экран исходный (введенный с ...
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;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru