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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
#1

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

27.11.2011, 20:33. Просмотров 433. Ответов 7
Метки нет (Все метки)

Вариант 5
Дана целочисленная квадратная матрица. Определить:
1) сумму элементов в тех столбцах, которые не содержат отрицательных элементов;
2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.


подскажите каков алгоритм на 2 пункт?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2011, 20:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Квадратная матрица (C++):

квадратная матрица - C++
помогите написать ф-ию, переставляющую в обратном порядке элементы главной диагонали квадратной матрицы.

Квадратная матрица - C++
Переформировать квадратную матрицу размерностью N таким образом, чтобы ее столбцы располагались по возрастанию их первых элементов....

Квадратная матрица N*N - C++
Дано квадратную матрицу порядка N*N. Число N задается пользователем. Найти наибольшее среди элементов значение, расположенное в закрашенной...

Квадратная матрица - C++
Дана квадратная матрица А nxn. Вычислить сумму элементов матрицы расположенных выше главной диагонали.

квадратная матрица.С++ - C++
1. Дана действительная квадратная матрица порядка n, все элементы которой различны. Найти наибольший элемент среди стоящих на главной и...

Квадратная матрица - C++
Сегодня зачет, а я не могу написать следующую программу: Дана целочисленная квадратная матрица. Определить произведение элементов в тех...

7
ВалентинАматор
2 / 5 / 0
Регистрация: 25.02.2011
Сообщений: 140
27.11.2011, 20:52 #2
да второй пункт впечатляет))а матрица все ровно какой размерности 4х4 подойдет?
0
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
27.11.2011, 20:55  [ТС] #3
ВалентинАматор, неважно какая размерность)))) факт в том что алгоритм должен работать при любой размерности
0
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 запихать
1
ВалентинАматор
2 / 5 / 0
Регистрация: 25.02.2011
Сообщений: 140
27.11.2011, 21:28 #5
Насколько я понял задание здесь двухмерный массив.
0
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 минут
Вот ещё что, эти циклы досчитают только до побочной диагонали (её саму тоже сосчитают), дальше будут нужны немного другие циклы
1
alkagolik
Заблокирован
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;
}
если матрица не квадратная, то надо немного переделать, разберетесь.
1
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 минуты
Вот какая программка получилась. Её стоит проверить на ошибки и протестировать.
1
27.11.2011, 23:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 23:01
Привет! Вот еще темы с ответами:

Квадратная матрица - C++
Помогите решить: Дана квадратная матрица. Найти строчку с наибольшим и наименьшим произведением элементов. Вывести на печать полученные...

Квадратная матрица - C++
//Дана квадратная матрица порядка n (n строк, n столбцов). //Найти наибольшее из значений элементов, расположенных в тёмно-синих частях...

Квадратная матрица - C++
Дана квадратная матрица А(4,4) Выяснить верно ли, что наибольшее из значений элементов главной диагонали матрицы больше, чем наименьшее из...

Квадратная матрица - C++
Помогите с решением задачи: Дана действительная квадратная матрица порядка n. 1. Найти сумму элементов указанного пользователем...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru