Contagem de Inteiros Repetidos Em Um Array Bidimensional

israeltandrade  

Amigos programadores, uma ajuda por favor com contagem?


Contextualizando:

Tenho um vetor que só tem os inteiros 1 e 2 alocados aleatoriamente. Exemplo:

int vetor[10] = {1,1,1,2,2,1,1,2,2,2}


Tenho esse mesmo vetor na forma bidimensional:

 1, 1, 1, 2, 2

 1, 1 , 2, 2, 2


Note que há 5 colunas. Seria possível contar a quantidade do número 1 a cada 5 valores? (que é o número de colunas no caso do Array bidimensional)


Eu já sei contar a quantidade total do número 1 no vetor unidimensional, mas preciso dessa informação a cada cinco valores (ou a cada linha no Array bidimensional). A resposta seria

Linha 1 = 3

Linha 2 = 2

Obrigado pela atenção, um abraço!

israeltandrade  
Aos Moderadores: não consigo editar ou excluir o tópico. Vou colocar uma reformulação da pergunta para deixar mais claro. Se necessário algum procedimento é só falar. Obrigado!
israeltandrade  

Olá pessoal!

Tenho um vetor que só tem os inteiros 1 e 2 alocados aleatoriamente. Exemplo:

int vetor[15] = {1,1,1,2,2,1,1,2,2,2,1,1,1,2,1};
Como o vetor seria impresso:

    1 1 1 2 2 1 1 2 2 2 1 1 1 2 1
Tenho esse mesmo vetor na forma de tabela (matriz bidimensional):

int tabela[3][5] = {{1,1,1,2,2},{1,1,2,2,2},{1,1,1,2,1}};


Como a tabela seria impressa:

    [,0][,1][,2][,3][,4]
[0,]   1   1   1   2   2
[1,]   1   1   2   2   2
[2,]   1   1   1   2   1

Note que há (no exemplo) 3 linhas e 5 colunas, mas isso pode variar.

Seria possível  contar a quantidade do número 1  a cada 5 valores (no caso do vetor unidimensional) e  armazenar as respostas num vetor unidimensional? Ou seja, cada índice do vetor é a resposta da contagem de uma linha.

Vetor de resposta:

    int resposta[3];


OU contar a quantidade do número 1 a cada linha (que é o número de colunas no caso da tabela)  e armazenar as respostas num vetor unidimensional (ou bidimensional, dispondo linha e resposta ao lado)?

int     respostaTabela[3][2];


De qualquer maneira a atribuição dos valores armazenados no vetor resposta seria o mesmo que:

resposta[0] = 3

resposta[1] = 2

resposta[2] = 4


A impressão do vetor ficaria:

        3 2 4


A atribuição de valores a tabela resposta seria o mesmo que (primeira coluna para enumerar a linha e segunda coluna para mostrar a contagem):

int   respostaTabela[3][2] = {{1, 3}, {2, 2}, {3, 4}};


E a impressão ficaria:

            [,0][,1]
        [0,]   1   3
        [1,]   2   2
        [2,]   3   4



 A contagem no vetor total e a transformação deste em tabela via função for (duas vezes) eu já entendi, mas o procedimento que estou colocando aqui ainda é um mistério para mim.

Obrigado pela atenção, um abraço!

israeltandrade  

O código completo do script se ajudar:

void OnStart()
  {
//---
   int vetor[15] = {1,1,1,2,2,1,1,2,2,2,1,1,1,2,1};
   
   int tabela[3][5] = {{1,1,1,2,2},{1,1,2,2,2},{1,1,1,2,1}};
   
   Print("O vetor original:   ");
   
   ArrayPrint(vetor);
   
   Print("Como ficaria em tabela:   ");
   
   ArrayPrint(tabela);
   
   int   contadorVetor1 = 0;
   
   for(int i = 0;i < ArraySize(vetor); i++)
     {
      if(vetor[i] == 1)
        {
         contadorVetor1++;
        }
     }
   
   Print("Quantidade total de número 1:   ", contadorVetor1);
   
   int   respostaVetor[] = {3, 2, 4};
   
   Print("respotaVetor (número 1 a cada 5):  ");
   
   ArrayPrint(respostaVetor);
   
   int   respostaTabela[][2] = {{1, 3}, {2, 2}, {3, 4}};
   
   Print("respostaTabela (linha e quantidade de número 1 a cada linha):  ");
   
   ArrayPrint(respostaTabela);
  }
//+------------------------------------------------------------------+
israeltandrade  

Achei eu mesmo a resposta das três possibilidades:

   int contador5 = 0;
   
   int k = 5;
   
   int l = 0;
   
   for (int i = 0; i <= 10; i += 5)
      {
      for (int j = i; j < k; j++)
         {
            if(vetor [j] == 1)
               {
                 contador5++;
               }
         }
       respostaVetor[l] = contador5;
         
       contador5 = 0;
         
       k+=5;
         
       l++;
      }

Impressão do primeiro código:

        3 2 4
2ª (a partir da tabela armazenando as respostas em um vetor):

   int   respostaTabela[3];

        ZeroMemory(respostaTabela);
        
   int   numeroLinhas = 3;

   int   numeroColunas = 5;

   int   contador5_tabela = 0;

        for (int linha = 0; linha < numeroLinhas; linha++)
         {
                for (int coluna = 0; coluna < numeroColunas; coluna++)
                {
                   if(tabela[linha][coluna] == 1)
                     {
                      contador5_tabela++;
                     }
           	}
          	 respostaTabela[linha] = contador5_tabela;
           
           	contador5_tabela = 0;
         }

Impressão do 2º código:

        3 2 4

3ª (a partir da tabela armazenando as respostas em outra tabela, fazendo uso da 1ª coluna como índice de referência à linha da tabela original):

   int   respostaTabela_indice[3][2];
   
   ZeroMemory(respostaTabela_indice);

   for (int linha = 0; linha < numeroLinhas; linha++)
         {
                for (int coluna = 0; coluna < numeroColunas; coluna++)
                {
                   if(tabela[linha][coluna] == 1)
                     {
                      contador5_tabela++;
                     }
           	}
              
             	 respostaTabela_indice[linha][0] = linha;
              
              	respostaTabela_indice[linha][1] = contador5_tabela;
              
             	 contador5_tabela = 0;
           	} 

Impressão do 3º código:

            [,0][,1]
        [0,]   0   3
        [1,]   1   2
        [2,]   2   4
Agradeço a Deus e a todos os colegas que me ajudaram aqui e em outros lugares ou deram atenção à mensagem. Espero que sirva de ajuda a quem tiver dificuldades na mesma área Um abração!
Razão: