powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа с матрицей
25 сообщений из 169, страница 1 из 7
Работа с матрицей
    #39961379
JustSomething
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток! Сразу оговорюсь, что мой первый вопрос довольно прост, но что-то все никак не могу разобраться, как бы прискорбно это не звучало. Итак, задача состоит вот в чем:
1) всего лишь нужно найти сумму элементов заштрихованной области матрицы nxn, где n - число нечетное, которая вводится вручную с клавиатуры (данное условие обязательное) (рисунок прилагаю).
(если найдется человек, который захочет и сможет помочь, очень прошу вписать код полностью с начала и до конца, а не его часть)
2) а вот вторая часть интересней (лично для меня, так как любопытно, это придумал такой бред мой мозг, либо это действительно можно сделать)
вопрос следующий: нужно эти же элементы матрицы отсортировать по возрастанию. Можно ли это как-то выполнить в одном коде вместе с 1 пунктом, но после того, как сумма была найдена, либо же это обязательно нужно делать отдельным кодом?
Заранее спасибо!
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961388
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) А в чём проблема-то? if (заштриховано) сумма += матрица[i][j];
2) Можно и одновременно. Третий том Кнута в помощь, сортировка вставками.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961408
JustSomething
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, упорно не доходит как делается 1 пункт, в отличии от второго, за что Вам спасибо)
А вот с первым совсем беда. Понимаю, что нужно задать условие отбора элементов, но в этом сама проблема, не соображу что нужно в if записать
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961413
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustSomething
Dimitry Sibiryakov, упорно не доходит как делается 1 пункт, в отличии от второго, за что Вам спасибо)
А вот с первым совсем беда. Понимаю, что нужно задать условие отбора элементов, но в этом сама проблема, не соображу что нужно в if записать

Ну давайте подумаем. Если размер матрицы нечётный то как найти координату по ширине верхнего (по X) угла?
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961422
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961431
JustSomething
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, да, спасибо, но прочла это еще до того как зарегистрироваться здесь)
С первым вопросом пытаюсь разобраться уже второй день, при этом пособие моего же преподавателя не помогло, а на второй вопрос получила грамотную подсказку, хотя впрочем как и на первый) Так что абсолютно не пыталась просто получить решение, не прилагая усилий со своей стороны)
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961433
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustSomething, подумайте как устроить циклы перебора элементов матрицы. Предположительно нарисован ромб .
Тогда перебираем все элементы справа от левой-верхней стороны ромба.
Левая вершина с координатами в матрице: y0=(n-1)/2, x>=1
Строчкой выше, y1=y0-1, x>=2
Строчкой выше y=y1-1, x>=3
........
Наконец, верхняя строка матрицы y=1, x>=(n-1)/2

Ограничения справа в каждой строке - сообразите сами.
Аналогично в нижней половине ромба.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961435
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustSomething
Dima T, да, спасибо, но прочла это еще до того как зарегистрироваться здесь)
С первым вопросом пытаюсь разобраться уже второй день, при этом пособие моего же преподавателя не помогло, а на второй вопрос получила грамотную подсказку, хотя впрочем как и на первый) Так что абсолютно не пыталась просто получить решение, не прилагая усилий со своей стороны)

Тут в основном высококвалифицированные программисты, мы плохо помним школьную арифметику, а задача не тривиальная. У меня за пять минут не получилось.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961476
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustSomething,

код писать точно не буду, но что можно сделать подскажу :)

1) рассматриваем тривильный случай M = {a11=25}, в данном случае матрица состоит из одного элемента
n = 1, sum = a11 = 25

2) рассматриваем следующий случай n = 3
Код: plaintext
1.
2.
3.
1  2  3
4  5  6
7  8  9

n=3, sum = a12 + a21 + a22 + a23 + a32 = 2 + 4 +5 + 6 + 8 = 25

3) дальше рассмотрите случай n=5,
ну и т.д, просто все нужно выписать на бумаге, и тогда все станет понятно

4) в коде нужно просто пройтись по выделенным элементам матрицы
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961547
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98, да что там ромб. Давай общий случай решим. Произвольный выпуклый многоугольник вписан в прямоугольник (матрица).
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961559
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustSomething, ну что, Данила-мастер, не выходит Аленький цветок? Ещё подсказки нужны?
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961657
JustSomething
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev, честно говоря, аж стыдно признаваться, что после стольких подсказок я все еще сижу над первым пунктом.
Даже решение нашла по моему условию, пусть и на C#.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
       public static int CalcRhomb(int[,] a)
        {
            var n = a.GetUpperBound(0)+1;
            var k = n/2;
            var s = 0;
            for (var i=0; i < n; i++) 
            {
                var d = i <= k ? i : n - i - 1;
                for (var j = k - d; j <= k + d; j++)
                {
                    s += a[i, j];
                }
            }
            return s;
        }


Все никак не доходит, а это ведь только 1/2 заданий. (код смещается, там он не так ужасно выглядит, а времени разбираться можно ли здесь вставлять код нормально, увы, нет)

Модератор: Оформляй исходники тегом SRC
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961672
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustSomething,

Работает?

Код: plaintext
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.
int const Size = 5;
int const Half = Size / 2;

int arr[Size][Size] =
{
     1,  2,  3,  4,  5,
     6,  7,  8,  9, 11,
    12, 14, 15, 16, 17,
    18, 19, 20, 21, 22,
    23, 24, 25, 26, 27
};

int calcSumm()
{
    int res = 0;

    for (int i=0; i<Half; ++i)
    {
        for (int j=Half-i; j<=Half+i; j++)
        {
            res += arr[i][j];
            res += arr[Size-i-1][j];
        }
    }
    for (int i=0; i<Size; ++i)
    {
        res += arr[Half][i];
    }

    return res;
}
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961684
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение двух пунктов сразу.

Код: plaintext
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.
#include <vector>
#include <numeric>
#include <algorithm>

int const Size = 5;
int const Half = Size / 2;

int arr[Size][Size] =
{
     1,  2,  3,  4,  5,
     6,  7,  8,  9, 11,
    12, 14, 15, 16, 17,
    18, 19, 20, 21, 22,
    23, 24, 25, 26, 27
};

int calcSumm()
{
    std::vector<int> vec;

    for (int i=0; i<Half; ++i)
    {
        for (int j=Half-i; j<=Half+i; j++)
        {
            vec.push_back(arr[i][j]);
            vec.push_back(arr[Size-i-1][j]);
        }
    }

    for (int i=0; i<Size; ++i)
    {
        vec.push_back(arr[Half][i]);
    }

    std::sort(vec.begin(), vec.end());

    return std::accumulate(vec.cbegin(), vec.cend(), 0);
}
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961691
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustSomething, задачка не стоит и выеденного яйца!
Смотрите, "серединку" (k) вы уже нашли. k определяет индекс элемент первой и последней строки двумерного массива, а также индекс строки, все элементы которой необходимо включить в сумму. Для первой строки индекс первого элемента для суммирования равен k, а кол-во элементов = 1. Для второй строки индекс первого элемента равен k-1, а кол-во элементов равно 2 и т.д. На лицо декремент на единицу индекса первого суммируемого элемента в строке и инкремент кол-ва суммируемых элементов в строке до тех пор, пока индекс строки < k или пока индекс первого суммируемого элемента > 0, после чего наоборот - инкремент индекса первого элемента и декремент кол-ва суммируемых элементов в строке, до тех пор, пока индекс первого элемента не равен k или пока индекс строки не равен n-1.

Для упрощения алгоритма я рекомендую сделать два последовательных цикла. Первый цикл для индексов строк от 0 до k-1 и индексов первых суммируемых элементов строк от k до 1, а второй цикл для индексов строк от k до n-1 и индексов первых суммируемых элементов от 0 до k. Так алгоритм будет даже быстрее, так как нет никакого дополнительного условия внутри цикла.

Соответственно:
1. Инициализация индекса первого суммируемого элемента (k) и кол-ва элементов (1);
2. Цикл по строкам от 0 до k-1 с декрементом индекса первого суммируемого элемента и инкрементом кол-ва элементов + вложенный цикл по соответствующим элементам (проще через while);
3. Реинициализация индекса первого суммируемого элемента (0) и кол-ва элементов (n);
4. Цикл по строкам от k до n-1 с инкрементом индекса первого суммируемого элемента и декрементом кол-ва элементов + вложенный цикл по соответствующим элементам;
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961692
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, и чему твой исходный код может научить? Здесь не принято давать готовые решения.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961693
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У автора-ж надо посчитать сумму элементов расположенных по "diamond". Как в бубновой масти.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961695
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И у меня есть некое недоверие к тестовым данным которые расположены слишком уж ... закономерно.
Можем получить некую авто-компенсацию суммм.

Давайте возьмем случайные числа.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961696
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
У автора-ж надо посчитать сумму элементов расположенных по "diamond". Как в бубновой масти.

А разве я не это посчитал?
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961698
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И у меня есть некое недоверие к тестовым данным которые расположены слишком уж ... закономерно.
Можем получить некую авто-компенсацию суммм.

Давайте возьмем случайные числа.

Возьмите. Нужно написать unit test-ы. Это мы вам поручим. :)
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961701
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, а сколько у тебя получилось?
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961703
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav, а сколько у тебя получилось?

186.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961706
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
petrav, а сколько у тебя получилось?

186.

Я прошу прощения. Да. Ты был прав. Я не заметил коррекцию цикла здесь.

Код: plaintext
1.
for (int j=Half-i; j<=Half+i; j++)



Так что твой код - корректен.

Кстати я хотел усугубить этот топик но несколько в другом направлении.

Ты читал Степанова (он по STL книжки писал) ?
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961710
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Кстати я хотел усугубить этот топик но несколько в другом направлении.

Ты читал Степанова (он по STL книжки писал) ?

Нет, Степанова не читал. Я что-то некорректно написал с точки зрения STL?
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961714
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет у тебя все корркетно. Я просто по инерции продолжаю топик https://www.sql.ru/forum/1280222/tyapnichnaya-hvostovaya-rekursiya

Мысль такая. У нас есть козырная бубновая функция которая чего-то считает в сях императивно.
Она - эффективна. В этом никто не сомневается исходя из нашего понимания компиллятора.

Далее. Я хочу ее транформировать в хвостовую функцию . И посмотреть как ее понял компиллятор
(хотя-бы 2 варианта GCC, Clang). И во что он свернул рекурсию.
...
Рейтинг: 0 / 0
25 сообщений из 169, страница 1 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа с матрицей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]