gdlm Postado Agosto 9, 2012 Denunciar Share Postado Agosto 9, 2012 (editado) Fala ai pessoal, estou com um problema , eu tenho um arquivo CSV do tipo1 52 1003 254 -95 0Como façõ pra colocar em ordem crescente so o primeiro número 4,5,1,3,2 ? Eu não conseguir achar um jeito de implementar o Bubble Sortatt,EDT: esse codigo ta dando Segmentation fault (core dumped)#include <stdio.h> int main(){ int i,j; int temp,temp2; int res[25][2],vet[25]; FILE * data; data = fopen("res.csv","r"); for(i=0;i<10;i++){ for(j=0;j<2;j++){ fscanf(data,"%d",&res[i][j]); } } fclose(data); for(i=0;i<10;i++){ temp=res[i][1]; temp2=res[i+1][1]; if(res[i+1][2] < res[i][2]){ vet[i]=temp; vet[i+1]=temp2; } } for(i=0;i<10;i++){ printf("%d ,",vet[i]); } return 0; } Editado Agosto 9, 2012 por gdlm Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Agosto 11, 2012 Denunciar Share Postado Agosto 11, 2012 Olá!Existem alguns problemas com o seu código.1) em C/C++, você deve acessar os itens de um vetor com o índice partindo de zero e não 1. Esse era o problema do Segmentation Fault.2) No seu primeiro loop (leitura do arquivo) você sempre lê 10 linhas. Mas o arquivo tem apenas 5! Isso faz você inserir vários elementos inválidos no vetor res. O correto é identificar o final e parar a leitura, salvando o número de linhas lidas.3) A ordenação bolha é feita no próprio vetor, não exige um vetor adicional. Assim, o vetor vet não é necessário.Eu corrigi o seu código. Veja abaixo a resposta:#include <stdio.h> int main(){ int i,j, final = 0, linhas, trocou; int temp,temp2; int res[25][2]; FILE * data; data = fopen("res.csv","r"); for(i=0;i<25 && !final;i++){ for(j=0;j<2;j++){ if(fscanf(data,"%d",&res[i][j]) != 1) { final = 1; break; } } } fclose(data); linhas = i-1; do { trocou = 0; for(i=0;i<linhas-1;i++){ if(res[i+1][1] < res[i][1]){ trocou = 1; temp =res[i][0]; temp2=res[i][1]; res[i ][0] = res[i+1][0]; res[i ][1] = res[i+1][1]; res[i+1][0] = temp; res[i+1][1] = temp2; } } } while(trocou); for(i=0;i<linhas;i++){ printf("%d %d\n", res[i][0], res[i][1]); } return 0; }Se quiser que eu expllique o código, avise! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
gdlm
Fala ai pessoal, estou com um problema , eu tenho um arquivo CSV do tipo
1 5
2 100
3 25
4 -9
5 0
Como façõ pra colocar em ordem crescente so o primeiro número 4,5,1,3,2 ? Eu não conseguir achar um jeito de implementar o Bubble Sort
att,
EDT: esse codigo ta dando Segmentation fault (core dumped)
Editado por gdlmLink para o comentário
Compartilhar em outros sites
1 resposta 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.