Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda - Matriz linhas e colunas nula


RS25

Pergunta

Fazer um programa que dada uma matriz qualquer de n linhas e m colunas fazer um programa que imprima o número de linhas e o número de colunas nulas da matriz.

E este programa deverá ser feito sem alocação dinâmica de matrizes

Segue o que tentei fazer:

#include <stdio.h>
#include <stdlib.h>

int main( )
{
    int linhas,colunas, i, j;
    int ln, cn;
    
    //Inicialização das variáveis
    ln = 0;
    cn = 0;
  
    /*Entrar com a dminsão da matriz desejada*/
    printf("Entre com o numero de linhas: ");
    scanf("%d",&linhas);
    printf("Entre com o numero de colunas: ");
    scanf("%d",&colunas);

    /*declaração das matrizes que serão usadas no programa*/
    int A[linhas][colunas];
    
        /*laço de repetição para entrar com os valores da matriz 1*/
        for (i=0; i<linhas; i++) 
          for(j=0; j<colunas; j++)
          {
          printf(" Entre com os elementos da matriz 1 [%d][%d]:",i+1,j+1);
          scanf("%d",&A[i][j]);
          }
          
                       /*verificar linha nula*/                                
             if (A[i] == 0) 
             ln = ln + 1;

             /*verificar coluna nula*/
             if (A[j] == 0)
             cn = cn + 1;

               if (ln > 0 && cn >0) 
               printf("O número de linhas e colunas nulas é [%d] e [%d]\n\n",ln,cn);
               else
               printf("A matriz não apresenta linhas e colunas nulas\n\n");

      
           /*Mostra a matriz 1 criada*/
           printf("\n\nA matriz A criada é: \n\n");
             for (i=0; i<linhas; i++)
             {
                for(j=0; j<colunas;j++)
                printf("%3.d\t",A[i][j]);
                printf("\n\n");
             }

               printf("\n\n\n");
              getch();
              return 0;

}

A saida esperada e: A matriz apresenta 2 linhas nulas e 1 coluna nula.

No entanto se eu entro com uma matriz de ordem 2,3 e com uma linha nula o programa não informa se apresenta linha ou coluna nule e também

não paresenta a matriz impressa corretamente.

Alguém poderia me ajudar?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olha, isso que você colocou, "A" tipo não existe!

Pelo que eu entendi, linha nula seria ter todos os elementos da linha nulos, e "A" tipo... sei la, não faz muito sentido!

Sugiro, a titulo de curiosidade, que você faca um

printf("%d", A[i]);
só pra ver o que aparece! não sei dizer o que isso significa, mas não é o que voce estava querendo dizer! A ideia que eu sugiro aqui, é a mesma que eu coloquei ali no seu outro post. Vou postar um "codigo" explicado em linguagem normal, não em c.
For (percorrendo todas linhas)
{
       nulo = 1 // variavel indicadora de passagem que indica, a principio, que todos os elementos da linha ou coluna que eu irei analisar são nulos. 1 = sim
       for (percorrendo todas as colunas - aqui, alem de "j<colunas", pode ter um "j<colunas && nulo = 1")
            if (A[i][j] =! 0)
                nulo = 0 //aqui, achei um elemento não nulo, e posso parar de percorrer essa linha ( ou coluna)
       if (nulo==1) 
              cont = cont + 1;  //aqui, apos percorrer uma coluna inteira - nesse caso - e se nulo ainda vale 1, então toda a coluna é nula, e eu posso aumentar o contador de "elementos nulos"
}
for (percorrendo todas as colunas)
{
      nulo = 1
      for (percorrendo todas as linhas)
              if (A[i][j] =!0)
                     nulo = 0;
       if (nulo ==1)
             cont = cont + 1;
}
E... acho que é isso! imagino que de pra entender... qualquer coisa, pergunta ae! abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Felipe

Refiz o código utilizando a sua lógica e agora esta com erro no total de linhas e colunas nulas

#include <stdio.h>
#include <stdlib.h>

int main( )
{
    int linhas,colunas, i, j;
    int ln, cn;
    int nulo;
    int cont;
    
    //Inicialização das variáveis
    ln = 0;
    cn = 0;
  
    /*Entrar com a dminsão da matriz desejada*/
    printf("Entre com o numero de linhas: ");
    scanf("%d",&linhas);
    printf("Entre com o numero de colunas: ");
    scanf("%d",&colunas);

    /*declaração das matrizes que serão usadas no programa*/
    int A[linhas][colunas];
    
        /*laço de repetição para entrar com os valores da matriz 1*/
        for (i=0; i<linhas; i++)
          for(j=0; j<colunas; j++)
          {
          printf(" Entre com os elementos da matriz 1 [%d][%d]:",i+1,j+1);
          scanf("%d",&A[i][j]);
          }
          
          /*laço */
          for (i=0; i<linhas; i++)
             nulo = 1;
          for(j=0; j<colunas; j++)
          {
                  if (A[i][j] =! 0)
                  nulo = 0;
                  if (nulo==1) 
                  cont = cont + 1; 
          }
          
          /*laço 2*/
          for (i=0; i<linhas; i++)
          {
           nulo = 1;
           for(j=0; j<colunas; j++)
              if (A[i][j] =!0)
              nulo = 0;
               if (nulo ==1)
             cont = cont + 1;
           }

              
           /*Mostra a matriz 1 criada*/
           printf("\n\nA matriz A criada é: \n\n");
             for (i=0; i<linhas; i++)
             {
                for(j=0; j<colunas;j++)
                printf("%3.d\t",A[i][j]);
                printf("\n\n");
             }

              printf("A matriz apresenta %d nulas ",cont);

               printf("\n\n\n");
              getch();
              return 0;

}
Olha, isso que você colocou, "A" tipo não existe! Pelo que eu entendi, linha nula seria ter todos os elementos da linha nulos, e "A" tipo... sei la, não faz muito sentido! Sugiro, a titulo de curiosidade, que você faca um
printf("%d", A[i]);
só pra ver o que aparece! não sei dizer o que isso significa, mas não é o que voce estava querendo dizer! A ideia que eu sugiro aqui, é a mesma que eu coloquei ali no seu outro post. Vou postar um "codigo" explicado em linguagem normal, não em c.
For (percorrendo todas linhas)
{
       nulo = 1 // variavel indicadora de passagem que indica, a principio, que todos os elementos da linha ou coluna que eu irei analisar são nulos. 1 = sim
       for (percorrendo todas as colunas - aqui, alem de "j<colunas", pode ter um "j<colunas && nulo = 1")
            if (A[i][j] =! 0)
                nulo = 0 //aqui, achei um elemento não nulo, e posso parar de percorrer essa linha ( ou coluna)
       if (nulo==1) 
              cont = cont + 1;  //aqui, apos percorrer uma coluna inteira - nesse caso - e se nulo ainda vale 1, então toda a coluna é nula, e eu posso aumentar o contador de "elementos nulos"
}
for (percorrendo todas as colunas)
{
      nulo = 1
      for (percorrendo todas as linhas)
              if (A[i][j] =!0)
                     nulo = 0;
       if (nulo ==1)
             cont = cont + 1;
}
E... acho que é isso! imagino que de pra entender... qualquer coisa, pergunta ae! abraço

Link para o comentário
Compartilhar em outros sites

  • 0

/*laço */

for (i=0; i<linhas; i++)

nulo = 1;

for(j=0; j<colunas; j++)

{

if (A[j] =! 0)

nulo = 0;

if (nulo==1)

cont = cont + 1;

}

/*laço 2*/

for (i=0; i<linhas; i++)

{

nulo = 1;

for(j=0; j<colunas; j++)

if (A[j] =!0)

nulo = 0;

if (nulo ==1)

cont = cont + 1;

}

Bom, o problemas está nessa parte...

não sei se você entendeu o conceito, mas vou mostrar aonde tão os erros:

no "laço 1" falta a abertura de chaves do primeiro for! do jeito que está, dentro do primeiro for só tem o comando "nulo = 1" e o outro for não está dentro dele! então está eminentemente errado, tem que arrumar e colocar as chaves de abertura e fechamento

E depois, está certo, o laco 2 está perfeito!

é só arrumar a posição das chaves do primeiro laço que deve funcionar.

(pra conferir, pensa na execução do programa:

no primeiro laco, o primeiro for da conta de analizar todas as linhas, enquanto que o segundo varre as linhas por si só.

Antes de varrer cada linha, voce diz que nulo = 1, e varre a linha inteira, procurando por elementos não nulos. ->if (a[j] != 0)

Se depois de varrer uma linha inteira, voce não tiver encontrado nenhum elemento não nulo, voce então incrementa o contador.

Eu sei que não precisa, e muita gente não usa, mas, pelo menos quando usar os for, eu sugiro colocar as chaves, sempre! pra facilitar o entendimento... mas, enfim, no laço 2 você só usou as chaves onde precisava, e está correto!)

Link para o comentário
Compartilhar em outros sites

  • 0

fica aparecendo "A matriz não apresenta linhas e colunas nulas"....eu  não sei como resolver,alguém pode me ajudar??... foi assim que eu fiz

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void lermat(int lin, int col, int m[lin][col]){
    int i, j, ln=0, cn=0;
    for(i=0; i<lin; i++){
        for(j=0; j<col; j++){
            scanf("%d", &m[j]);
                if(m == 0) //VERIFICAR LINHA NULA
                    ln++;    
                else if(m[j] == 0) //VERIFICAR COLUNA NULA
                    cn++;
        }        
    }
            
    if(ln>0 && cn>0)
        printf("tem %d linha(s) nula(s) e %d coluna(s) nula(s)\n", cn, ln);
    else
        printf("A matriz não apresenta linhas e colunas nulas\n");        
}

int main(){
    int nl, nc, mat[nl][nc];    
    printf("digite o numero de linhas e colunas:\n");
    scanf("%d %d", &nl, &nc);
    lermat(nl, nc, mat);

}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...