Ir ao conteúdo
  • Cadastre-se

Preenchimento e leitura matriz tridimensional em c


Posts recomendados

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

Link para o comentário
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]);

 

Link para o comentário
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;
}

 

Link para o comentário
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.

 

 

Link para o comentário
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;
}

 

Link para o comentário
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);
}

 

Link para o comentário
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...

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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