Ir ao conteúdo
  • Cadastre-se
Ariel.Campos

Verificar numeros pares de uma matriz, atribuir a um vetor e imprimir

Recommended Posts

Boa noite pessoal, estou fazendo um trabalho de algoritmos onde uma das tarefas é verificar os numeros pares de uma matriz de ordem n e alocar os valores em um vetor, depois imprimir os dados contidos no vetor, fiz o código porém ele não está imprimindo, ja verifiquei dezenas de vezes e não encontro o problema, vou por o trecho aqui, vou por também o código completo no pastebin http://pastebin.com/wmhqVW0Y

 

#include <stdio.h>
int linha,coluna,i,j,k=0,pares[10][10],par[100];
void num_pares (int pares[10][10], int par[100]);

main () {
    printf(" \n Digite respectivamente a qnt de linhas e colunas da matriz: \n");
    scanf("%d %d",&linha,&coluna);
    printf(" Numeros pares da matriz:\n ");
    num_pares (pares,par);

void num_pares (int pares[10][10], int par[100]) {         
    printf("\n \t Digite %d valores. \n",linha*coluna);
    for (i=0;i<linha;i++) {
    for (j=0;j<coluna;j++){
        printf("\n \t Posicao [%d][%d]:",i+1,j+1);
        scanf("%d",&pares [j]);         }}
    for (i=0;i<linha;i++){
    for (j=0;j<coluna;j++){
        if (pares[j]%2==0){
        par[k]==m0[j];
        k++;         }            }    }
    printf(" \n Matriz inserida: \n");
    for (i=0;i<linha;i++) {
    printf(" \t| ");
    for (j=0;j<coluna;j++){
        printf("  %d ",pares[j]);           }
        printf(" | \n");}
    printf(" \n\n Elementos pares da matriz: \n");
    for (i=0;i<(linha*coluna);i++){
    printf(" %d ",par);
    }
}
}

 

Editado por dif
Inserir o código dentro da tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, eu fiz a correção e você pode observar o código abaixo pra entender o problema.

Algumas coisas que acho importante você lembrar: Não se deve construir matrizes dinâmicas sem o uso do malloc, calloc ou realloc. Quando uma matriz é definida, tudo bem usar int matriz[12][12] e em seguida pedir pro cara entrar com os 144 valores dela. Mas quando você vai pedir para ele entrar com o número de colunas e linhas deve usar a biblioteca <stdlib.h> para não ficar usando memória excessiva, o mesmo com vetores. Eu resolvi esse problema e o resto era errinho básico, olhando você irá entender. A saída não está formatada, mas isso você pode arrumar.

 

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

void num_pares (int linha, int coluna);

main () {
    int linha,coluna;
    printf(" \n Digite respectivamente a qnt de linhas e colunas da matriz: \n");
    scanf("%d %d",&linha,&coluna);
    printf(" Numeros pares da matriz:\n ");
    num_pares (linha,coluna);
}

void num_pares (int linha, int coluna) { // Recebe os valores para construir a matriz

    int i,j,tamanhovetor=1;
    int **pares,*par; //Declara a matriz e o vetor, do tipo inteiro

    pares = (int**) malloc(linha*sizeof(int*)); // Atribui o número de linhas para a matriz
    for(i=0;i<linha;i++){
        pares[i]= (int*) malloc(coluna*sizeof(int*)); // Para cada linha atribui o número de colunas
    }

    par = (int*) malloc(1*sizeof(int)); // Criei o vetor com tamanho 1

    printf("\n \t Digite %d valores. \n",linha*coluna);
    for (i=0;i<linha;i++) {
    for (j=0;j<coluna;j++){
        printf("\n \t Posicao [%d][%d]:",i+1,j+1);
        scanf("%d",&pares[i][j]);         }} //Havia um erro aqui, compare e encontre.


    for (i=0;i<linha;i++){
    for (j=0;j<coluna;j++){
        if (pares[i][j]%2==0){ // Havia um erro aqui, compare e encontre.
        //par[k]==m0[j]; //Isto está totalmente errado
            par = (int*) realloc(par,tamanhovetor*sizeof(int)); // Aumentei o tamanho do vetor
            par[tamanhovetor-1] = pares[i][j]; 
            tamanhovetor++;         }            }    }


    printf(" \n Matriz inserida: \n");
    for (i=0;i<linha;i++) {

        for (j=0;j<coluna;j++){
            printf("|%d|",pares[i][j]); //Havia um erro aqui, compare e encontre
            if(j==(coluna -1)) printf("\n");
        }}


    printf(" \n\n Elementos pares da matriz: \n");
    for (i=0;i<tamanhovetor-1;i++){
    printf(" %d ",par[i]);
    }

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Ariel.Campos Quando você vai criar uma variável do tipo inteiro, geralmente faz: int num;. Quando vai criar um vetor definido, do tipo inteiro faz int meuvetor[10] e uma matriz definida int minhamatriz[5][5]. Mas e quando essa matriz ou esse vetor é indefinido? Para uma matriz de duas dimensões você declara int **minhamatriz; E para um vetor: int *meuvetor; Para em seguida definir utilizando calloc, malloc ou realloc. É para isso que servem os **, eles criam ponteiros, assim você pode definir e alterar o seu array de acordo com a necessidade. Dê uma pesquisada sobre ponteiros que vai entender o significado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@eliumoraes Realmente o código que postei for o primeiro, com aqueles erros bobos de confundir matrizes com vetores, ficou assim o código agora

 

   void num_pares (int pares[10][10], int par[100]) {

    k=0;
    printf("\n \t Digite %d valores. \n",linha*coluna);
    for (i=0;i<linha;i++) {
    for (j=0;j<coluna;j++){
        printf("\n \t Posicao [%d][%d]:",i+1,j+1);
        scanf("%d",&pares [j]);         }}

    for (i=0;i<linha;i++){
    for (j=0;j<coluna;j++){
        if (pares[j]%2==0){
        par[k]=pares[j];
        k++;         }            }    }

    printf(" \n Matriz inserida: \n");
    for (i=0;i<linha;i++) {
        for (j=0;j<coluna;j++){
        printf("  |%d| ",pares[j]);           }
}
    printf(" \n\n Elementos pares da matriz: \n\n");
    for (i=0;i<=k-1;i++){
    printf(" %d ",par);     }

   }

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×