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

Квадратная матрица - C++

Восстановить пароль Регистрация
 
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
27.11.2011, 20:33     Квадратная матрица #1
Вариант 5
Дана целочисленная квадратная матрица. Определить:
1) сумму элементов в тех столбцах, которые не содержат отрицательных элементов;
2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.


подскажите каков алгоритм на 2 пункт?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2011, 20:33     Квадратная матрица
Посмотрите здесь:

C++ Квадратная матрица
C++ Квадратная матрица
Квадратная матрица.... C++
C++ Квадратная матрица
Квадратная матрица C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ВалентинАматор
2 / 5 / 0
Регистрация: 25.02.2011
Сообщений: 140
27.11.2011, 20:52     Квадратная матрица #2
да второй пункт впечатляет))а матрица все ровно какой размерности 4х4 подойдет?
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
27.11.2011, 20:55  [ТС]     Квадратная матрица #3
ВалентинАматор, неважно какая размерность)))) факт в том что алгоритм должен работать при любой размерности
alenka-46
16 / 16 / 2
Регистрация: 28.04.2011
Сообщений: 38
27.11.2011, 21:21     Квадратная матрица #4
Если матрица - это одномерный массив а[] следующего типа:

a[0] a[1] a[2] a[3] a[4]
a[5] a[6] a[7] a[8] a[9]
a[10] a[11] a[12] a[13] a[14]
a[15] a[16] a[17] a[18] a[19]
a[20] a[21] a[22] a[23] a[24]

например
1 2 3 4 5
7 8 9 1 2
3 4 5 6 7
8 9 1 2 3
4 5 6 7 8

то сумма элементов может быть получена так

a[0*n+0]
a[0*n+1]+a{1*n+0]
a[0*n+2]+a[1*n+1]+a[2*n+0]
a[0*n+3]+a[1*n+2]+a[2*n+1]+a[3*n+0]

Добавлено через 1 минуту
Вроде бы так, только осталось модули добавить и в циклы for запихать
ВалентинАматор
2 / 5 / 0
Регистрация: 25.02.2011
Сообщений: 140
27.11.2011, 21:28     Квадратная матрица #5
Насколько я понял задание здесь двухмерный массив.
alenka-46
16 / 16 / 2
Регистрация: 28.04.2011
Сообщений: 38
27.11.2011, 21:46     Квадратная матрица #6
for(i=0; i<n; i++)
for(j=0; j<=i; j++)
{
if( a[ j*n-(i-j) ] <0 )
sum-=a[ j*n-(i-j) ];
else
sum+=a[ j*n-(i-j) ];
}

Добавлено через 1 минуту
Это вычисление сумм модулей. Массив одномерный ( я уверена ) , мне с такими проще работать

Добавлено через 5 минут
Вот ещё что, эти циклы досчитают только до побочной диагонали (её саму тоже сосчитают), дальше будут нужны немного другие циклы
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
27.11.2011, 22:22     Квадратная матрица #7
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
    const int N = 5;
    int arr[ N ][ N ], min, sum, row = 0, coll = 1, i, j;
    srand(time(0));
 
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < N; ++j)
            arr[ i ][ j ] = rand() % (N * N) - N * N / 2;
 
    for (int i = 0; i < N; ++i)
    {
        puts("");
        for (int j = 0; j < N; ++j)
            printf("%2i ", arr[ i ][ j ]);
    }
 
    min = (arr[ 0 ][ 0 ] >= 0) ? arr[ 0 ][ 0 ] : ~arr[ 0 ][ 0 ] + 1;
 
    while (row < N - 1)
    {
        i = row; j = 0; sum = 0;
        while (i >= 0)
        {
            sum += (arr[ i ][ j ] >= 0 ) ? arr[ i ][ j ] : ~arr[ i ][ j ] + 1;
            --i; ++j;
        }
        if (min > sum)
            min = sum;
 
        i = N - 1; j = coll; sum = 0;
 
        while (j <= N - 1)
        {
            sum += (arr[ i ][ j ] >= 0) ? arr[ i ][ j ] : ~arr[ i ][ j ] + 1;
            --i; ++j;
        }
 
        if (min > sum)
            min = sum;
 
        ++row; ++coll;
    }
 
    printf("\n%i\n", min);
    return 0;
}
если матрица не квадратная, то надо немного переделать, разберетесь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 23:01     Квадратная матрица
Еще ссылки по теме:

C++ квадратная матрица
Квадратная матрица А называется ортогональной,если А^T=А^-1. Определить, является ли заданная матрица А(n,n) ортогональной. C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alenka-46
16 / 16 / 2
Регистрация: 28.04.2011
Сообщений: 38
27.11.2011, 23:01     Квадратная матрица #8
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
#include <iostream.h>
#include <limits.h>
#include <conio.h>
 
void main()
{
int i,j,                  // счётчики для циклов
    sum=0,            // сумма модулей элементов диагоналей
    n,                   // количество элементов в строке
    min=INT_MAX;  // минимум среди сумм
 
clrscr(); //очистка экрана
 
cout <<"\n Введите количество элементов в строке матрицы: ";
cin>>n;
 
int *a=new int [n*n]; // создание динамического массива для хранения элементов матрицы
 
// просим пользователя ввести элементы матрицы
for(i=0; i<n*n; i++)
{
  cout << "\n Введите следующий элемент матрицы: ";
  cin >> a[i]; 
}
clrscr(); // очистка экрана
 
//выводим матрицу
for(i=0; i<n; i++)
   {
   cout <<"\n ";
   for(j=0; j<n; j++)
      cout <<a[i*n+j] << "\t";
   }
 
//находим суммы элементов диагоналей в верхнем треугольнике 
for(i=0; i<n; i++)
{
  for(j=0; j<=i; j++)
  {
    if( a[ j*n-(i-j) ] <0 )
       sum-=a[ j*n-(i-j) ];
    else
       sum+=a[ j*n-(i-j) ];
  }
  if(sum < min)
    min=sum;
  
  sum=0;
}
 
//проверяем суммы элементов диагоналей в нижнем треугольнике
for(i=1; i<n; i++)
{
  for(j=i; j<n; j++)
  {
    if( a[ j*n+(n-j) ] <0 )
       sum-=a[ j*n+(n-j) ];
    else
       sum+=a[ j*n+(n-j) ];
  }
  if(sum < min)
    min=sum;
  
  sum=0;
}
 
cout <<"\n Минимум сумм модулей элементов диагоналей: " <<min;
}
Добавлено через 2 минуты
Вот какая программка получилась. Её стоит проверить на ошибки и протестировать.
Yandex
Объявления
27.11.2011, 23:01     Квадратная матрица
Ответ Создать тему
Опции темы

Текущее время: 02:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru