Ir ao conteúdo

Posts recomendados

Postado

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");
        }
    }
}


 

Postado

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

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...