Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sopiseiro

Ordenar Matriz Bidimensional pelo metodo bolha

Recommended Posts

Ola pessoal,

 

estou tentando ordenar uma matriz de duas dimensoes pelo metodo bolha, soh que tah dando um erro que não sei como resolver, alguem pode me dar uma ajuda

 

# include <stdio.h>


main(){
  int tam = 3;
  float temp[7],alunos[tam][7];
  
  printf("Programa para calcular medias de alunos\a\n\n\n");
  
  for (int i=0;i<tam;i++){
	  printf ("Informe o numero da matricula: ");
	  scanf ("%f",&alunos[i][0]);
	  printf ("Informe a primeira nota: ");
	  scanf ("%f",&alunos[i][1]);
	  printf ("Informe a segunda nota: ");
	  scanf ("%f",&alunos[i][2]);
	  printf ("Informe a terceira nota: ");
	  scanf ("%f",&alunos[i][3]);
	  printf ("Informe a quarta nota: ");
	  scanf ("%f",&alunos[i][4]);
	  printf ("Informe a sexta nota: ");
	  scanf ("%f",&alunos[i][5]);
	  
	  
	  // nesta etapa esta sendo realizado o calculo da media
	  alunos[i][6] = 0;
	  for (int x = 1;x < 6; x++){
		  alunos[i][6] += alunos[i][x];
	  }
	  alunos[i][6] = alunos[i][6]/5;
	  //fim do metodo de calculo da media
	  printf("\n\n");
  }	
  
  
   for(int a = 1; a < tam; ++a)
	for(int b = tam-1; b >= a; --b) {
	  if(alunos[ b - 1][6] > alunos[ b ][6]) {
		temp = alunos[b - 1];							 // AQUI ACONTECE O ERRO!
		alunos[ b - 1] = alunos[ b ];
		alunos[ b ] = temp;
	  }
	}

  printf ("Dados ordenados pela media\n\n\n");
  for(int i = 0; i < tam; i++){
		  printf ("%f \t\t %f \t\t %f \t\t %f \t\t %f \t\t %.2f \t\t\n", alunos[i][0],alunos[i][1],alunos[i][2],alunos[i][3],alunos[i][4],alunos[i][5],alunos[i][6]);
  }//fim do metodo de exibição
  
  
  
  getchar();
  getchar();
}

O erro acontece na hora de trocar a matriz com a variavel temp

Compartilhar este post


Link para o post
Compartilhar em outros sites

seguramente este tipo de postura nao acelerará as respostas ao seu topico

Compartilhar este post


Link para o post
Compartilhar em outros sites

poxa vida hein

ninguem aki sabe sobre isso

o imasters ah foi um bom forum um dia

Poxa vida digo eu!

Mal se passaram 24 horas desde que você postou a dúvida...

O problema, é que a maioria das pessoas só vem aqui para sanar as próprias dúvidas. Quando resolvem a dúvida dessa pessoa, ela desaparece, nem se preocupa em dar uma olhada em outros tópicos, e ajudar outras pessoas...

ai o fórum fica na mão de poucos. E esses poucos não podem ficar de plantão, 24 horas por dia, resolvendo dúvidas dos outros....

Era ótimo se todos ajudassem e compartilhassem o conhecimento, todos nós só temos a ganhar com isso!

 

Mas tudo bem, vamos ao que interessa.

Meu compilador acusou tantos erros, que eu mal sei por onde começar.

Não declare variáveis dentro de loops, foge do C99.

gcc -g -Wall bolha_.c 
bolha_.c:4: warning: return type defaults to ‘int’
bolha_.c: In function ‘main’:
bolha_.c:10: error: ‘for’ loop initial declaration used outside C99 mode
bolha_.c:27: error: ‘for’ loop initial declaration used outside C99 mode
bolha_.c:36: error: ‘for’ loop initial declaration used outside C99 mode
bolha_.c:37: error: ‘for’ loop initial declaration used outside C99 mode
bolha_.c:39: error: incompatible types in assignment
bolha_.c:40: error: incompatible types in assignment
bolha_.c:41: error: incompatible types in assignment
bolha_.c:46: error: redefinition of ‘i’
bolha_.c:10: error: previous definition of ‘i’ was here
bolha_.c:46: error: ‘for’ loop initial declaration used outside C99 mode
bolha_.c:47: warning: too many arguments for format
bolha_.c:48: error: expected declaration or statement at end of input
bolha_.c:48: warning: control reaches end of non-void function
Na linha que acusa o erro, o compilador disse:

bolha_.c:39: error: incompatible types in assignment
bolha_.c:40: error: incompatible types in assignment
bolha_.c:41: error: incompatible types in assignment

O relatório do compilador é de fácil entendimento. Não é?

Então vamos lá....

 

você não pode trocar esses arrays da forma como você está fazendo.

São tipos de dados diferentes

 

O jeito é trocar valor por valor:

# include <stdio.h>

#define TAM 3

void troca_array(float* ar1, float* ar2, int len)
{
float tmp;
int i;

	for (i=0; i<len; i++)
	{
		tmp = ar1[i];
		ar1[i] = ar2[i];
		ar2[i] = tmp;
	}
}

int main()
{
float *tmp1, alunos[TAM][7];
int a, b;

  printf("Programa para calcular medias de alunos\a\n\n\n");

  for (a=0;a<TAM;a++){
	  printf ("Informe o numero da matricula: ");
	  scanf ("%f",&alunos[a][0]);
	  printf ("Informe a primeira nota: ");
	  scanf ("%f",&alunos[a][1]);
	  printf ("Informe a segunda nota: ");
	  scanf ("%f",&alunos[a][2]);
	  printf ("Informe a terceira nota: ");
	  scanf ("%f",&alunos[a][3]);
	  printf ("Informe a quarta nota: ");
	  scanf ("%f",&alunos[a][4]);
	  printf ("Informe a quinta nota: ");
	  scanf ("%f",&alunos[a][5]);


	  // nesta etapa esta sendo realizado o calculo da media
	  alunos[a][6] = 0;
	  for (b = 1;b < 6; b++){
		  alunos[a][6] += alunos[a][b];
	  }
	  alunos[a][6] = alunos[a][6]/5;
	  //fim do metodo de calculo da media
	  printf("\n\n");
  }

//ordenação pelo método bolha
int trocou = 1;

  while (trocou)
  {
  int i;
	trocou = 0;
	for (i=0; i<TAM-1; i++)
	{
	  if (alunos[i][6] > alunos[i+1][6])
	  {
		troca_array(alunos[i], alunos[i+1], 7);
		trocou = 1;
	   }
	 }
  }
//-------------------------------------------

  printf ("Dados ordenados pela media\n\n\n");
  for(a = 0; a < TAM; a++){
		  printf ("[%.1f] %.1f - %.1f - %.1f - %.1f - %.2f \nmedia: %.1f\n\n",
				  alunos[a][0],alunos[a][1],alunos[a][2],alunos[a][3],alunos[a][4],
				  alunos[a][5],alunos[a][6]);
  }//fim do metodo de exibição

  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.