Jump to content

Lelre Ferreira

Members
  • Content count

    5
  • Joined

  • Last visited

Community Reputation

0 Comum

About Lelre Ferreira

  • Birthday 07/10/1992

Informações Pessoais

  • Sexo
    Masculino
  • Localização
    Paracatu
  • Interesses
    Programação em C/C++, Sistemas embarcados
  1. Lelre Ferreira

    Verificar se matriz é simétrica ou não "Erro de lógica."

    Já tentei fazer isso mas de nada adiantou: Decrementar : acimaD[j-1] = matriz[j]; Incrementar: abaixoD[j+1] = matriz[j]; void acimaDiagonal(int matriz[TAM][TAM], int acimaD[TAM]) { int i, j; for(i = 0; i < TAM; i++) { for(j = 0; j < TAM; j++) { if(i < j) { acimaD[j-1] = matriz[i][j]; } } } } void abaixoDiagonal(int matriz[TAM][TAM], int abaixoD[TAM]) { int i, j; for(i = 0; i < TAM; i++) { for(j = 0; j < TAM; j++) { if(i > j) { abaixoD[j+1] = matriz[i][j]; } } } }
  2. Boa noite a todos. Estou com uma atividade no qual necessito informar se a matriz é simétrica ou não com base nos valores digitados pelo usuário. O meu código está meio caminho andado. Uma matriz simétrica é a matriz na qual os valores abaixo da diagonal principal são iguais os valores acima da diagonal principal. Logo pensei, se (i < j) valores acima da diagonal e (i > j) valores abaixo da diagonal. Fiz os testes em um FOR, onde se as condições atenderem os requisitos os valores seriam armazenados em vetores distintos, um vetor para valores acima da diagonal e outro vetor para valores abaixo. Depois eu ia comprar os dois vetores para ver se os valores são iguais mas me deparei com um erro de lógica. Vou postar o código e comentar o erro. #define TAM 3 #include <stdio.h> #include <stdlib.h> #include <locale.h> void receberMatriz(int matriz[TAM][TAM]); void acimaDiagonal(int matriz[TAM][TAM], int acimaD[TAM]); void abaixoDiagonal(int matriz[TAM][TAM], int abaixoD[TAM]); void TesteValorVetor(int matriz[TAM][TAM], int acimaD[TAM], int abaixoD[TAM]); int main(void) { setlocale(LC_ALL, ""); int matriz[TAM][TAM] = {0}; int abaixoD[TAM] = {0}; int acimaD[TAM] = {0}; receberMatriz(matriz); acimaDiagonal(matriz, acimaD); abaixoDiagonal(matriz, abaixoD); TesteValorVetor(matriz, acimaD, abaixoD); return 0; } void receberMatriz(int matriz[TAM][TAM]) { int i, j; for(i = 0; i < TAM; i++) { for(j = 0; j < TAM; j++) { printf("Insira valor pos. [%i][%i]: ", i, j); scanf("%i", &matriz[i][j]); } } } void acimaDiagonal(int matriz[TAM][TAM], int acimaD[TAM]) { int i, j; for(i = 0; i < TAM; i++) { for(j = 0; j < TAM; j++) { if(i < j) { acimaD[j] = matriz[i][j]; } } } } void abaixoDiagonal(int matriz[TAM][TAM], int abaixoD[TAM]) { int i, j; for(i = 0; i < TAM; i++) { for(j = 0; j < TAM; j++) { if(i > j) { abaixoD[j] = matriz[i][j]; } } } } void TesteValorVetor(int matriz[TAM][TAM], int acimaD[TAM], int abaixoD[TAM]) { int i, j; system("cls"); for(i = 0; i < TAM; i++) { for(j = 0; j < TAM; j++) { printf("[%i] ", matriz[i][j]); } printf("\n"); } printf("\n"); for(i = 0; i < TAM; i++) { printf("[%i]", acimaD[i]); } printf("\n"); for(i = 0; i < TAM; i++) { printf("[%i]", abaixoD[i]); } } Nas funções: void acimaDiagonal(int matriz[TAM][TAM], int acimaD[TAM]) { int i, j; for(i = 0; i < TAM; i++) { for(j = 0; j < TAM; j++) { if(i < j) { acimaD[j] = matriz[i][j]; } } } } void abaixoDiagonal(int matriz[TAM][TAM], int abaixoD[TAM]) { int i, j; for(i = 0; i < TAM; i++) { for(j = 0; j < TAM; j++) { if(i > j) { abaixoD[j] = matriz[i][j]; } } } } Eu faço a verificação (i < j), acima do diagonal e vise-versa e então armazeno em um vetor. Quando mando mostrar o vetor para ver quais valores tenho lá. Supondo que eu coloque 1, 2, 3, 4, 5, 6, 7, 8, 9... Os valores deveriam ser para o primeiro vetor: [2][3][6] referente aos valores acima da diagonal principal. E [4][7][8] valores abaixo da diagonal principal... Mas ao invés disso o código está me retornando o seguinte: [0][2][6] e [7][8][0]... Ou seja, não está atribuindo alguns valores. A11, A12, A13 A21, A22, A23 A31, A32, A33 Eu identifiquei um erro, na primeira função void acimaDiagonal() quando ele faz a primeira verificação no A11, como a condição se só atribui se for i < j, na primeira casa do primeiro vetor ele ignora qualquer alteração deixando o [0]... Como posso corrigir isso? Fui claro na minha dúvida?
  3. Lelre Ferreira

    Armazenar soma de linhas de matriz em vetor em C

    Muito obrigado _Isis_, entendi o meu erro. Acredito que a minha lógica em algum momento chegou perto da sua, a correta! Da até um pouco de vergonha, fiquei 2 dias preso em uma atividade por não encontrar uma forma de resolver. Mas é assim mesmo! Programando e aprendendo. Muito grato!, Uma dúvida, devo deixar o código funcionando para consulta de usuários que venha algum dia ter a mesma dificuldade?
  4. Lelre Ferreira

    Armazenar soma de linhas de matriz em vetor em C

    Olá _Isis_, boa tarde. Ainda estou trabalhando no código mas até agora sem sucesso. Notei que coloquei trecho sem alteração completa que tinha feito, eis o atual... void processarMatriz(int matriz[4][5], int vetorA[5], int vetorB[4]) { int i, j; int soma = 0; for(i = 0; i < 4; i++) { soma = 0; for(j = 0; j < 5; j++) { vetorA[j] = matriz[i][j]; soma = soma + vetorA[j]; vetorA[j] = soma; } } for(j = 0; j < 5; j++) { soma = 0; for(i = 0; i < 4; i++) { vetorB[i] = matriz[j][i]; soma = soma + vetorB[i]; vetorB[i] = soma; } } }
  5. Boa noite a todos. Estou preso em na seguinte questão: Dada uma matriz de 4 x 5 elementos inteiros, calcular a soma de cada linha, de cada coluna e de todos os seus elementos. Obs: Utilize um vetor para armazenar o resultado da soma de cada linha e outro para a soma de cada coluna. Então o programa pede o seguinte: 12345 = [15] 67890 = [30] 98765 = [35] 43212 = [12] Armazenar a soma de cada linha da matriz em um vetor: VetorLinha[4] onde = [15], [30], [35], [12] estariam armazenados, assim como vetorColuna com seus respectivos valores Eis o meu código: #include <stdio.h> #include <stdlib.h> #include <locale.h> void receberMatriz(int matriz[4][5]); void processarMatriz(int matriz[4][5], int vetorA[5], int vetorB[4]); void resultadoMatriz(int matriz[4][5], int vetorA[5], int vetorB[4]); int main(void) { setlocale(LC_ALL, ""); int matriz[4][5]; int vetorA[5]; int vetorB[4]; receberMatriz(matriz); processarMatriz(matriz, vetorA, vetorB); resultadoMatriz(matriz, vetorA, vetorB); return 0; } void receberMatriz(int matriz[4][5]) { int i, j; for(i = 0; i < 4; i++) { for(j = 0; j < 5; j++) { printf("Insira valor posição [%i][%i]: ", i, j); scanf("%i", &matriz[i][j]); } } } void processarMatriz(int matriz[4][5], int vetorA[5], int vetorB[4]) { int i, j; for(i = 0; i < 4; i++) { for(j = 0; j < 5; j++) { vetorA[j] = matriz[i][j]; soma = soma + vetorA[j]; vetorA[j] = soma; } } for(j = 0; j < 5; j++) { for(i = 0; i < 4; i++) { vetorB[i] = matriz[j][i]; soma = soma + vetorB[i]; vetorB[i] = soma; } } } void resultadoMatriz(int matriz[4][5], int vetorA[5], int vetorB[4]) { int i, j; } Claramente eu não alcancei a lógica e queria entender como eu faria esse algoritmo. Não sei o que devo fazer para concluir com êxito nessa parte do código: void processarMatriz(int matriz[4][5], int vetorA[5], int vetorB[4]) { int i, j; for(i = 0; i < 4; i++) { for(j = 0; j < 5; j++) { vetorA[j] = matriz[i][j]; soma = soma + vetorA[j]; vetorA[j] = soma; } } for(j = 0; j < 5; j++) { for(i = 0; i < 4; i++) { vetorB[i] = matriz[j][i]; soma = soma + vetorB[i]; vetorB[i] = soma; } } }
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.