Boa noite.
Conheço bem pouco sobre linguagem C e estou precisando de ajuda, preciso de um programa escrito em c e usando o método InsertionSort que lê a exiba os dados ordenados pela primeira coluna.
Já tentei quase tudo que encontrei na internet e não consegui.
se puderem me ajudar ficarei muito grato.
#include <stdio.h>
#include <string.h>
#include <locale.h>
#define DELIMITADOR ","
typedef struct {
int Codigo ;
char Fid[50];
char Empreendimento[150];
char Subeixo[10];
char Tipo[30];
char OrgaoResponsavel[50];
char Executar[150];
char UnidadeFederal[30];
char Municipio[300];
char Investimento[50];
char Observacao[50];
char Estagio[15];
char DataReferencia[10];
char Geometria[50];
} campos;
int main()
{
setlocale(LC_ALL, "");
campos z[14];
campos *b[14];
char *campo;
int i, j ,lin ,cont,row_count;
char linha[600];
char *titulo[1500];
//Ler Arquivo
FILE *arquivo;
arquivo = fopen("geracao_energia.csv", "r");
if (arquivo == NULL){
printf("Não é possivel abrir o arquivo %s",arquivo);
exit(1);
}
cont =0;
row_count =0;
while(fgets(linha, sizeof linha, arquivo) != NULL)
{
row_count++;
// separa texto tabulados
campo = strtok(linha, DELIMITADOR);
while( campo != NULL )
{
//Adiciona cada palavra no vetor
titulo[i] = strdup(campo);
campo = strtok(NULL, DELIMITADOR);
i++;
}
i=0;
// Incrementa a lista
z[cont].Codigo, titulo[i],i++;
strcpy(z[cont].Fid, titulo[i]),i++ ;
strcpy(z[cont].Empreendimento, titulo[i] ),i++ ;
strcpy(z[cont].Subeixo, titulo[i] ),i++ ;
strcpy(z[cont].Tipo, titulo[i] ),i++ ;
campo = strtok(NULL, DELIMITADOR),i++;
}
cont++;
}
/* Ordena os endereços nos ponteiros usando um simples algoritmo de
ordenação por inserção (Insertion Sort): */
b[0] = &z[0];
for(i=1; i<3; i++){
for (j = i; j>0 && z[i].Codigo < (*b[j-1]).Codigo; j--){
b[j] = b[j-1];
}
b[j] = &z[i];
}
/*Então basta acessar os valores em sequência usando os ponteiros,
mas observe que z não sofreu nenhuma alteração.*/
for(i=0; i<3; i++){
printf("%d ---> %s\n", (*b[i]).Codigo, (*b[i]).Fid);
printf("%d ---> %s\n", (*b[i]).Codigo, (*b[i]).Empreendimento);
printf("%d ---> %s\n", (*b[i]).Codigo, (*b[i]).Subeixo);
printf("%d ---> %s\n", (*b[i]).Codigo, (*b[i]).Tipo);
}
return 0;
}
geracao_energia.csv