Ir ao conteúdo
  • Cadastre-se

C Elemento repetido na matriz


Posts recomendados

Bom dia, estou com problema com o seguinte exercício:

Escrever um algoritmo que lê uma matriz A(5,2) e a escreva. Verifique, a seguir, quais os elementos de A que estão repetidos e quantas vezes cada um está repetido. Escrever cada elemento repetido com uma mensagem dizendo que o elemento aparece X vezes em A.

 

Meu código ficou assim:

 

#include <stdio.h>

void main()
{


    int m[5][2];
    int ma[10][2];
    int l,c,contL, repetiu, valor =0;

    //Percorrendo a matriz
    for(l=0; l<5; l++)
    {
        for(c=0; c<2; c++)
        {
            printf("Informe um valor para linha [%d] e coluna [%d]: \n", l,c);
            scanf("%d", &m[l][c]);
            
    //Utilizando a matriz auxiliar "ma"
            repetiu=0;
            for(contL=0; contL<10; contL++)
            {
                if(ma[contL][0] == m[l][c])
                {
                    ma[contL][1] = ma[contL][1] +1;
                    repetiu = 1;
                }

            }
            if (repetiu == 0)
            {
                ma[valor][0] = m[l][c];
                ma[valor][1] = 1;
                valor = valor + 1;
            }

        }

    }
    for(contL=0; contL<10; contL++)
    {
        if(ma[contL][1] >= 1)
        {
            printf("Elemento %d repetiu %d vezes \n", ma[contL][0], ma[contL][1]);
        }
        else
        {
            printf("Não se repetem \n");
        }
    }
}


 

Link para o comentário
Compartilhar em outros sites

Olá, tudo bem?

 

Então, estou também examinando o código e encontrei algo que me fez parar.

Observe:

#include  <stdio.h>  /**< as rotinas de entrada & saída. */


/** Função principal do programa. É a primeira rotina do sistema */ 

int main  (int argc, const char *argv[]){

      int  m[5][2] =  {0};  /*  matriz principal */
      int  ma[10][2] =  {0};  /* matriz auxiliar */
      int  l, c, contL, repetiu, valor =  0;

      /* Percorrendo a matriz */
      for (l =  0; l  <  5; l ++){
            for (c =  0; c  <  2; c ++){
                  printf ("Informe um valor para linha "
                              "[%d] e coluna [%d]: \n", l, c);
                  scanf ("%d", &m[l][c]);

            /* Utilizando a matriz auxiliar "ma" */
            repetiu =  0;
            for (contL =  0; contL  <  10; contL ++){
                  if (ma[contL][0]  ==  m[l][c]) /*[ ! ] Qual o sentido nisso? */
            ...
      return  0; }

Qual o sentido desse comparação? Imagine que você acabou de entrar com a primeira informação (1 / 10 números). Por que é importante buscar esse único número agora? O que você acha que existe nas posições contL =  {9...0}, pois o vetor percorre esse mesmo índice para todas as entradas, inclusive quando existe apenas uma informação.

 

Recomendação: Divida a tarefa em três instâncias (Captura de dados, Processamento e Relatório), pois nesse momento de aprendizado é muito importante não fazer tudo de uma só vez, e dividir a tarefa de maneira mais digamos procedural.

 

Enfim acho que por conta do prazo você esta deixando de testar todas as partes do código.

Eu fui até esse ponto, e nada mais.

 

UPDATE:

Spoiler

#include  <stdio.h>  /**< as rotinas de entrada & saída */

#define TCOL      2  /**< total de colunas. Colunas na matriz principal */
#define TLIN      5  /**< total de linhas. Linhas na matriz principal */


/** Função principal do programa. É a primeira rotina do sistema */ 
int main (int argc, const char *argv[]) {

  /* subr. declaração de variáveis */
      int mp[TLIN][TCOL] =  {0};  /* matriz principal */
      int ma[TLIN][TCOL] =  {0};  /* matriz auxiliar */
      int ma_l =  0; /* mat. aux. indices: linha */
      int flg =  0;  /* bandeira que sinaliza ocorrencia e ~ocorrencia +
                        o número de ocorrencias */

  /* subr. captura dados */
      for (int l =  0; l  <  TLIN; l ++ ){
            for (int c =  0; c  <  TCOL; c ++){
                  printf ("  Digite o numero inteiro x[%u/%u] =  ", l, c);
                  scanf (" %d", &mp[l][c]); }}

  /* subr. processamento de dados */
      for (int l =  0; l  <  TLIN; l ++) {
            for (int c =  0; c  <  TCOL; c ++) {
                  /* subr. process. teste de ocorrencias: para não repetição */
                  flg =  1;
                  for (int al =  0; al  <  ma_l; al ++) {
                        if (mp[l][c]  ==  ma[al][0]){
                              al =  ma_l; 
                              flg =  0; }}
                  /* subr. process. contagem */
                  if (flg  ==  1){
                        /*subr. process. cont. teste de repetição */
                        flg =  0;
                        for (int lr =  0; lr  <  TLIN; lr ++){
                              for (int cr =  0; cr  <  TCOL; cr ++) {
                                    if (mp[l][c]  ==  mp[lr][cr]){
                                          flg ++; }}}
                        if (flg  >  1) {
                              ma[ma_l][0] =  mp[l][c];
                              ma[ma_l][1] =  flg - 1;
                              ma_l ++; }
                        flg =  0; }}}

  /* subr. exibir relatorio */
      if (ma_l  >  0) {
            printf ("\n\n");
            printf ("  Segue a lista de valores repedidos com numero de"
                        " repeticoes.\n\n");
            for (int l =  0; l  <  ma_l; l ++){
                  printf ("    %d : %u\n", ma[l][0], ma[l][1]); }
            printf ("\n\n");
            printf ("  Fim da lista.\n\n"); }
      else {
            printf ("\n\n");
            printf ("  Sem repeticoes para exibir.\n\n"); }

      return  0; }

 

Ok!? Tchau. 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!