• 0
Sign in to follow this  
RS25

Ajuda - Matriz linhas e colunas nula

Question

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?

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!)

Share this post


Link to post
Share on other 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);

}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this