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

Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы - C++

Восстановить пароль Регистрация
 
Fuuny
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 13
21.04.2014, 07:32     Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы #1
Дана действительная квадратная матрица порядка n. Найти количество неоулевых элементов, расположенных в заштрихованной части матрицы.
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2014, 07:32     Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы
Посмотрите здесь:

C++ Найти сумму элементов, расположенных в закрашенной части матрицы
C++ Найти сумму элементов, расположенных в закрашенной части матрицы на рисунке
Многомерные массивы. Найти наибольшее из элементов, расположенных в заштрихованной части матрицы C++
C++ Обработка массивов (Найти количество положительных элементов, расположенных в заштрихованной части матрицы)
Получить наибольшее из элементов, расположенных в заштрихованной части действительной квадратной матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soolitary
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 11
21.04.2014, 09:56     Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы #2
C++
1
2
3
4
5
6
7
int  findThis (int n, double a[][])
{ int i, j, c=0, k = (n+1)/2+1;
  for(i=0; i<n; i++)
   for(j=0; j<n; j++) 
    if( ( i%k+j%k < n ) && ( a[i][j] != 0. ) ) c++;
   return c;
}
Fuuny
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 13
21.04.2014, 11:31  [ТС]     Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы #3
Извините, так как я чайник в С++ можете описать что и как, в вашем коде.
soolitary
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 11
21.04.2014, 14:49     Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы #4
Хорошо, что Вы меня переспросили. На самом деле, код написанный выше делает не совсем то, что
Вы хотели. Я забыл про зеркальное отражение треугольников.

Сейчас, если запустить программу - получится проход по элементам вида
4х верхних левых треугольников с соответствующем смещением на половину матрицы.
х х х х х х
х х о х х о
х о о х о о
х х х х х х
х х о х х о
х о о х о о

Теперь:
1. чтобы пробежаться по верхнему левому треугольнику надо взять все элементы,
| индексы которых в сумме строго меньше порядка матрицы
| (i<k && j<k).
2. чтобы пробежаться по верхнему правому треугольнику
| надо сделать тоже самое со смещением на половину и
| с зеркальным отражением по горизонтали.
| ( i <k && (m-j)<k)
3. ((m-i)<k && j <k)
4. ((m-i)<k && (m-j)<k)
| , где m = (n-1), т.к. нумерация матрицы в Си начинается с 0,
| а k - середина целочисленного интервала (0,n).

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// a[i][j] - вещественная матрица, n - её порядок.
int  findThis (int n, double a[][])
{ int  i, j, c;
  int  k = (n+1)/2, m = (n-1);
 
  // Здесь проходим по всем элементам матрицы
  for(i=0, с=0; i<n; i++) // по строкам
   for(j=0; j<n; j++) // по столбцам
    // Я не знаю, как более красиво записать следующую строчку,\
       так что поправки приветствуются:
    if( ( (i<k)?(i):(m-i) + (j<k)?(j):(m-j) < n )  // Если элемент расположен в соотв. месте
        && ( a[i][j] != 0. ) )                     // и, если элемент не нулевой, 
     c++;                                          // тогда складываем его с общим количеством.
                
   return c; // количество ненулевых элементов возвращаем.
}
вот что получаем в итоге, с точки зрения обхода ячеек.

n=4
_ 0 1 2 3
0 х х х х
1 х о о х
2 х о о х
3 х х х х

n=5
_ 0 1 2 3 4
0 х х х х х
1 х х о х х
2 х о о о х
3 х х о х х
4 х х х х х

Успеха в изучении языка и программирования!
Fuuny
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 13
21.04.2014, 16:08  [ТС]     Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы #5
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
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#include<iostream>
#define N 5
void main()
{
    setlocale(LC_ALL, "Russian");
    int a[N][N], min, i, j, c;
    int  findThis(int n);
    for (i = 0; i<N; i++)
    {
        for (j = 0; j<N; j++)
            a[i][j] = rand() % 10;
    }
    printf("Сгенерированная матрица имеет вид");
    printf("\n");
    for (i = 0; i < N; i++)
    
        for (j = 0; j < N; j++)
            printf("%d  ", a[i][j]);
        printf("\n");
        {
            int  k = (N + 1) / 2, m = (N - 1);
 
            // Здесь проходим по всем элементам матрицы
            for (i = 0, c = 0; i < N; i++) // по строкам
            for (j = 0; j < N; j++) // по столбцам
                // Я не знаю, как более красиво записать следующую строчку,\
                                                           так что поправки приветствуются:
            if (((i < k) ? (i) : (m - i) + (j < k) ? (j) : (m - j) < N)  // Если элемент расположен в соотв. месте
                && (a[i][j] != 0.))                     // и, если элемент не нулевой, 
                c++;                                          // тогда складываем его с общим количеством.
 
        }
    _getch();
    
}
soolitary
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 11
21.04.2014, 16:27     Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы #6
Вопрос в чём?

Вызов функции findThis () зачем до заполнения матрицы? или что это вообще - прототип по среди кода?
Yandex
Объявления
21.04.2014, 16:27     Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы
Ответ Создать тему
Опции темы

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