Galera estou aqui com mais um problema, mas antes queria agradecer principalmente ao maligno por me ajjudar ate agora....
Bem... O problema dessa vez é o seguinte
eu tenho uma lista encadeada simples e quero mudar dois elemnetos da lista de lugar...
Eu fiz da seguinte maneira(Vale ressaltar que pos2 = pos1-1 não coloquei ai mas é bom citar
Figura *troca(Figura *fig, int pos1, int pos2){
Figura *temp1;
Figura *temp2;
Figura *temp3;
Figura *temp4;
if(pos1<0 || pos2<0){
printf("Error\nO programa sera encerrado Cod 01\n");
system("pause");
exit(0);
}
temp1 = percorrer(fig, pos1-1); //devolve o elemento figura da posicao pos1-1
temp2 = percorrer(fig, pos1);
temp3 = percorrer(fig, pos2);
temp4 = percorrer(fig, pos2+1);
temp1->next = temp3;
temp3->next = temp2;
temp2->next = temp4;
return fig;
}
pois é.... estou tendo problemas ai... pois ele não troca e ainda por cima parece que cria um loop infinito...
Se quizer ver eis o codigo fonte completo
Estruturas.h
int comprimento(Figura *fig);
float retorneArea(Figura *fig);
Figura *percorrer(Figura *fig, int i);
Figura *troca(Figura *fig, int pos1, int pos2);
Figura *BubbleSort(Figura *fig);
Funcoes.c
#include "Estruturas.h"
#include "Funcoes.h"
#include <windef.h>
int comprimento(Figura *fig){
int tamanho;
tamanho = 0;
while(fig != NULL){
tamanho++;
fig = fig->next;
}
return tamanho;
}
float retorneArea(Figura *fig){
if(fig->circulo != NULL){
return fig->circulo->area;
}
if(fig->quadrado != NULL){
return fig->quadrado->area;
}
if(fig->triangulo != NULL){
return fig->triangulo->area;
}
return 0.0;
}
Figura *percorrer(Figura *fig, int i){
int j;
for(j = 0; j<i; j++){
if(fig != NULL){
fig = fig->next;
}
else{
printf("Error\nO programa sera encerrado Cod 02\n");
system("pause");
exit(0);
}
}
return fig;
}
Figura *troca(Figura *fig, int pos1, int pos2){
Figura *temp1;
Figura *temp2;
Figura *temp3;
Figura *temp4;
if(pos1<0 || pos2<0){
printf("Error\nO programa sera encerrado Cod 01\n");
system("pause");
exit(0);
}
temp1 = percorrer(fig, pos1-1);
temp2 = percorrer(fig, pos1);
temp3 = percorrer(fig, pos2);
temp4 = percorrer(fig, pos2+1);
temp1->next = temp3;
temp3->next = temp2;
temp2->next = temp4;
return fig;
}
Figura *BubbleSort(Figura *fig){
int lenght;
int i;
int j;
float areaI;
float areaJ;
Figura *atual;
lenght = comprimento(fig)-1;
for(i = 0; i<lenght; i++){
for(j = lenght; j>=i+1; j--){
atual = percorrer(fig, j);
areaJ = retorneArea(atual);
atual = percorrer(fig, j-1);
areaI = retorneArea(atual);
if(areaJ<areaI){
fig = troca(fig, j-1, j);
}
}}
return fig;
}
Pergunta
Josefran
Galera estou aqui com mais um problema, mas antes queria agradecer principalmente ao maligno por me ajjudar ate agora....
Bem... O problema dessa vez é o seguinte
eu tenho uma lista encadeada simples e quero mudar dois elemnetos da lista de lugar...
Eu fiz da seguinte maneira(Vale ressaltar que pos2 = pos1-1 não coloquei ai mas é bom citar
pois é.... estou tendo problemas ai... pois ele não troca e ainda por cima parece que cria um loop infinito... Se quizer ver eis o codigo fonte completo Estruturas.h Funcoes.h Funcoes.c teste.cP.S Sei que é uma boa prática de programação comentar, mas eu esqueci rs vou colocar ainda
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.