Ir ao conteúdo
  • Cadastre-se
Fabio Aragao

Preenchimento e leitura matriz tridimensional em c

Recommended Posts

Pessoal boa tarde,

 

Para uma matriz tridimensional funcionaria

 

void preencherMatriz(int m[3], int n[3], int o[3])
{
  int i, j, k;

  for(i=1;i<4;i++)
  {
      for(j=1;j<4;j++)
      {
         for(k=1;k<4;k++)
         {
             printf("matriz[%d][%d][%d]: ",i,j,k);

seria uma função para preencher uma matriz, mas não sei como ler as informações digitadas para preencher a matriz... 

como seria o scanf ?

A inicialização da função está correta ?

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi para que serve esses parâmetros dessa função, mas o for tem que ir de 0 até o tamanho da matriz.

 

Citação

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

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

fork(k=0;k<4;k++)

Para ler o valor é só fazer dentro do ciclo for aninhado das 3 variáveis.

Citação

scanf("%d", &matriz[j][k]);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, MassakiMsk disse:
Citação

scanf("%d", &matriz[j][k]);

 

Como é uma matriz tridimensional utilizamos 3 [], no caso: scanf("%d",&matriz[j][k]);

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, 1freakday disse:

Como é uma matriz tridimensional utilizamos 3 [], no caso: scanf("%d",&matriz[j][k]);

:c esse negocio de colocar codigo aqui é muito bugado.

Era [ i ] [ j ] [ k ]

kkkkkkkkkkkkkkkk Será que algum moderador viu seu tópico lá?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@1freakday Reparou que até no seu comentário fora da caixa de código sumiu o [ i ] ?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia pessoal,

Com a ajuda de vocês consegui evoluir até o codigo abaixo.

O que estou tentando fazer é: Exibir o maior elemento primo de uma matriz tridimensional e dentro da main só pode haver a chamada para função.

Agradeço a ajuda

 

#include<stdio.h>


int maior = 0;

void Ehprimo(int);

main() {

	int y[3][3][3];
	int i, j, k;

	/* Entrada de dados */
	for (i = 1; i < 4; i++) {
	    for (j = 1; j < 4; j++) {
		   for (k = 1; k < 4; k++) {
		   	printf("Digite o elemento [%d] de 27: ",i++);
		   	scanf("%d", &y[i][j][k]);
		   }
		}
   }

   /* Processamento */

   for (i = 1; i < 4; i++) {
	    for (j = 1; j < 4; j++) {
		   for (k = 1; k < 4; k++) {
		   	   /* Ehprimo(y[i][j][k]); */
		   	   Ehprimo(y);
		   }
		}
   }

   /* Saída */
   printf("Maior primo: %d", maior);
}

void Ehprimo(int x)
{
   int i, div;
   for (i = 1; i <= x; i++)
{
   if (x % i == 0)
{
   div++;
}
}
   if (div == 2)
   maior = x;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Presta atenção no seguinte, quando você declara um valor para uma matriz, como em y[3], 3 é a quantidade de valores que contem na matriz, porém, quando você for acessar você não começa por 1, por que de padrão acessamos de 0 para cima, então no caso de ser y[3] podemos acessar y[0], y[1] e y[2], se tentar acessar um valor maior que a quantidade de valores, poderá haver um erro no dado acessado, pois o local não foi declarado e então não ha um endereço na memoria que possa ser acessado.

Esse erro pode ser encontrado no seu loop, onde as variáveis estão começando com 1 e terminado < 4.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite pessoal,

Mais uma vez com a ajuda dos amigos o programa evoluiu.

O que eu preciso agora é deixar na main apenas a chamada para função.

Podem ajudar??

Segue o codigo:

#include<stdio.h>


int maior = 0;

void Ehprimo(int);

main() {

	int y[2][2][2];
	int i, j, k;
	int l = 1;

	/* Entrada de dados */
	for (i = 0; i < 3; i++) {
	    for (j = 0; j < 3; j++) {
		   for (k = 0; k < 3; k++) {
		   	printf("Digite o elemento [%d] de 27: ",l++);
		   	scanf("%d", &y[i][j][k]);
		   }
		}
   }

   /* Processamento */

   for (i = 0; i < 3; i++) {
	    for (j = 0; j < 3; j++) {
		   for (k = 0; k < 3; k++) {
		   	   Ehprimo(y[i][j][k]);

		   }
		}
   }

   /* Saída */
   printf("Maior primo: %d", maior);
}

void Ehprimo(int x)
{
   int i, div;
   for (i = 1; i <= x; i++)
{
   if (x % i == 0)
{
   div++;
}
}
   if (div == 2)
   maior = x;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei bem se foi isso que você pediu, mas segue o codigo:

#include<stdio.h>


int y[2][2][2];
int l = 1;

int maior = 0;

void data_entry();
void e_primo();

main() {
   e_primo();
   getchar();
   return 0;
}

/* Entrada de dados */
void data_entry(){
    register int i,j,k;
	for (i = 0; i < 3; i++) {
	    for (j = 0; j < 3; j++) {
		   for (k = 0; k < 3; k++) {
		   	printf("Digite o elemento [%d] de 27: ",l++);
		   	scanf("%d", &y[i][j][k]);
		   }
		}
    }
}
void e_primo()
{
    /* Entrada de dados */
   data_entry();

   /* Variaveis */
   int i = 0, j = 0, k = 0;
   int i2, div = 0, x = 0;

   /* Loop Primo */
   while(1){

   x = y[i][j][k];

   for (i2 = 1; i2 <= x; i2++)
        if (x % i2 == 0)
            div++;

    if (div == 2)
    maior = x;

    if(k >= 2){
        k = 0;
        j++;
    }else k++;

    if(j > 2){
        j = 0;
        k = 0;
        i++;
    }
    if(i >= 3)break;
   }


   /* Saída */
   printf("Maior primo: %d", maior);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@1freakday  bom dia, seria isso sim, mas fiz o teste aqui e não está funcionando.. eu digito os 27 numeros e ele não informa o maior corretamente... 

Se possivel, posso te cadastrar no skype para que me explique melhor a questão de funções ?? eu preciso aprender como se faz.. olhando apenas é complicado de aprender...

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

×