Ir ao conteúdo
  • Cadastre-se

C Algoritmo com matriz 4 x 4 em linguagem C


Posts recomendados

Pessoal, eu preciso fazer um algoritmo que leia uma matriz 4 x 4 e coloque o número 0 nos valores negativos encontrados fora da diagonal principal e fora da diagonal secundária. Só que eu não estou conseguindo fazer isso. O máximo que consegui foi colocar o número 0 nos valores (positivos inclusive, sendo que deveria ser só nos negativos) fora da diagonal principal. Não sei como fazer para colocar o número 0 só nos valores negativos fora da diagonal principal e também não sei como fazer para colocar o número 0 nos valores negativos fora da diagonal secundária.

 

Alguém pode me ajudar?

 

Vou deixar abaixo o que consegui fazer até agora:

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


int main() {
    setlocale(LC_ALL,"portuguese");
    int tam = 4; matriz[tam][tam], i, j;
    printf ("Preenchimento da matriz 4 x 4:\n");
    for (i = 0; i < tam; i++){
        for (j = 0; j < tam; j++) {
            printf("Digite um número: ");
            scanf ("%d", &matriz[i][j]);
        }
    }
    printf ("\nExibindo a matriz:\n");
    for (i = 0; i < tam; i++){
        for (j = 0; j < tam; j++) {
            printf ("\t%d", matriz[i][j]);
        }
        printf("\n");
    }
    for (i = 0; i < tam; i++) {
        for (j = 0; j < tam; j++) {
            if (i != j) {
                matriz[i][j] = 0;
            }
        }
    }
    printf("\nExibindo a matriz com o número 0 nos valores negativos fora da diagonal principal e da diagonal secundária:\n");
    for (i = 0; i < tam; i++) {
        for (j = 0; j < tam; j++) {
            printf ("\t%d", matriz[i][j]);
        }
        printf("\n");
    }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

26 minutos atrás, Antônio da Silva disse:

for (i = 0; i < tam; i++) {         
     for (j = 0; j < tam; j++) {             
          if (i != j) {                 

               matriz[i][j] = 0;             

          }         

     }     

}

O problema está neste for. O que você está fazendo é atribuir 0 a todas as casas da matriz que não estão na diagonal principal, já que o seu teste é se "i != j". Sempre que i for igual a j, você sabe que está na diagonal principal.
Então o seu teste verifica se você está fora da diagonal principal. Além disso você deverá adicionar um teste para verificar se o número dessa casa [i][j] é negativo, e se for negativo, aí sim você substitui.
Mas antes de adicionar o 0, você também deve verificar se você está na diagonal secundária. Para isso, tente verificar o que todas as casas da diagonal secundária possuem em comum com relação ao seu i e j.

Espero ter ajudado.

Link para o comentário
Compartilhar em outros sites

@Gabriel Albuquerque

Muito obrigado! Fiz essa modificação no código e consegui substituir apenas os valores negativos fora da diagonal principal por 0:

for (i = 0; i < tam; i++) {         
     for (j = 0; j < tam; j++) {             
          if ((i != j) && matriz[i][j] < 0) {                
               matriz[i][j] = 0;             
          }         
     }     
}

Mas ainda não faço ideia de como substituir por 0 os valores negativos fora da diagonal secundária. Você pode me ajudar?

Link para o comentário
Compartilhar em outros sites

@Antônio da Silva

Quando o i e o j são somados, eles resultam em um mesmo valor na diagonal secundária. Este valor será sempre (tam-1). Mais um teste e o seu problema deverá estar resolvido.


    j    0    1    2    3
i  
0       0    1    2    3

1       1    2    3    4

2       2    3    4    5

3       3    4    5    6

 

Por nada, estou a disposição  :)

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