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

Работа с матрицей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Указатели и динамические массивы http://www.cyberforum.ru/cpp-beginners/thread1146912.html
Подсчитать кол-во участков, которые образуют непрерывные последовательности чисел с неуменьшающимися значениями
C++ Одномерный динам массив вычислить количество элементов больших C вычислить произведение элементов расположенных после максимального по модулю элемента Добавлено через 1 час 39 минут первую часть сделал вот код using namespace std; int _tmain(int argc, _TCHAR* argv) http://www.cyberforum.ru/cpp-beginners/thread1146910.html
C++ Странности поведения матриц
При реализации класса матриц магия C++ проявила себя уже на сложении. При сложении каким-то образом портится правый операнд (внутренняя перегрузка унарного плюса). Вылетает даже на простой модели с ошибкой обращения к памяти. Заголовочный класса: #ifndef MATRIX_H #define MATRIX_H #include <string> #include <sstream> using namespace std;
Написать функции, которые принимают массив и размер массива, и возвращают: - позицию, в которой находится самое большое C++
Написать функции, которые принимают массив и размер массива, и возвращают: - позицию, в которой находится самое большое число в массиве; - количество нечетных чисел в массиве; Добавлено через 1 минуту И пожалуйста, поймите, мне надо чтобы код начинался вот так обязательно: #include <iostream> using namespace std; void magic1 (const int n, const int m) // или как как нибудь по...
C++ Распечатать анкетные данные студентов, получивших одну оценку "С" за все время обучения http://www.cyberforum.ru/cpp-beginners/thread1146894.html
Распечатать анкетные данные студентов, получивших одну оценку "С" за все время обучения
C++ Написать функцию, которая принимает массив, размер массива и два числа m и n. - Заполнить массив случайными числами, в Написать функцию, которая принимает массив, размер массива и два числа m и n. - Заполнить массив случайными числами, в диапазоне от m до n. Добавлено через 1 минуту И пожалуйста, поймите, мне надо чтобы код начинался вот так обязательно: #include <iostream> using namespace std; void magic1 (const int n, const int m) // или как как нибудь по другому вот эта строка (мне нужен самый... подробнее

Показать сообщение отдельно
rya
0 / 0 / 0
Регистрация: 13.04.2014
Сообщений: 2
13.04.2014, 21:20     Работа с матрицей
Сразу прошу прощения за "говнокод", только начал изучать си.

Задача: Есть матрица NxN. Она заполнена числами от 0 до 2 рандомным образом. Если в (любых)диагоналях есть три и более (параметр) подряд одинаковых чисел,то мы это фиксируем в массиве.(нужно найти кол-во таких комбинаций, для каждого числа)

Пример:

0 1 0 2 1
1 0 1 1 1
2 1 0 0 2
2 2 1 1 1

тогда в новом массиве A[0]++


2 1 1 2 2
2 0 2 1 2
1 2 0 1 0
0 1 2 0 1
2 2 0 1 2

тогда в новом массиве A[2]++ и A[0]++


Пусть дана матрица game[N][N] заполненная числами от 0 до 2.
Сама проверка диагональных элементов:
p - параметр ( сколько элементов одинаковых должно быть подряд )
A[0...2] -массив, который фиксирует совпадения
А1[0...2] - вспомогательный массив

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
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
 
<
....
генерируем рандомную матрицу
....
>
int A[3] = {0,0,0}, A1[3];
for(int i=0;i<N-1;i++)   /*элементы вдоль побочной диагонали*/
    {
        for(int j=N-1;j>0;j--)
          {
                   
          for(int h=1;h>=p-1;h++)
          {
        if(game[i][j]==game[i+h][j-h])
         A1[game[i][j]]++;
        
        for (int k=0;k<3;k++)
            if (A1[k]==p-1)
            A[k]++;
          }
           }
        
    }
    /*вдоль главной диагонали */
        for(int i=0;i<N-1;i++)
    {
    for(int j=0;j<N-1;j++)
          {           
          for(int h=1;h>=p-1;h++)
          {
        if(game[i][j]==game[i+h][j+h])
                  A1[game[i][j]]++;
        
        for (int k=0;k<3;k++)
              if (A1[k]==p-1)
              A[k]++;
           }
       }
    }
 for (int k=0;k<3;k++)
        printf("A[%d]=%d\n",k,A[k]);
 
    return 0;
}
Видимо я чего то не понимаю, но вся это проверка не работает.
Подскажите, где я неправильно мыслю.

Добавлено через 4 часа 46 минут
Призываются местные гуру

Добавлено через 2 часа 38 минут
неужели никто не может посмотреть, где ошибка, или хотя бы подсказать как можно реализовать данную задачу другим способом?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru