Ir ao conteúdo
  • Cadastre-se

Codigo em shellsort


Posts recomendados

 

Eae galera, tenho que apresentar esse código amanha e queria uma explicação que eu poderia falar na frente

A ideia do cógido e ler um gabarito em excel organizar com o algoritmo Shellsort e depois criar um arquivo com os alunos abaixo da media geral

Obrigado desde já.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define tam 10000
FILE *arquivo;
int matricula[tam][1];
float resultado[tam][1]={0};
char dados[tam][10];
char gabarito[10];
char situacao[10];
int leitura(char *nome_arq){
    arquivo = fopen(nome_arq,"r");
    if(arquivo==NULL) return 0;
    int x=0;
    setbuf(stdin,NULL);
    while(fscanf(arquivo,"\n%[^%;];%c;%c;%c;%c;%c;%c;%c;%c;%c;%c",&matricula[x][0],&dados[x][0],&dados[x][1],&dados[x][2],&dados[x][3],&dados[x][4],
          &dados[x][5],&dados[x][6],&dados[x][7],&dados[x][8],&dados[x][9])!=EOF){
        x++;

    }
    fclose(arquivo);
    return x;
}
float media(int total){
    int i,j,soma,acertos;
    float med_geral=0;
    char a,b;
    for(i=0;i<total;i++){
        soma=0;
        acertos=0;
        for(j=0;j<10;j++){
            a=dados[i][j];b=gabarito[j];
            if (a==b){soma=soma+j+1;acertos++;}
        }
        resultado[i][0]=(soma*10)/55.0;
        med_geral=med_geral+resultado[i][0];
        matricula[i][0]=i+1;
    }
    return med_geral/total;
}

void gravar(char *nome_arq, int total,float mediageral){
    int i;
    arquivo = fopen(nome_arq,"w");
    fprintf(arquivo,"Matricula;Media\n");
    for(i=0;i<total;i++){
        if(resultado[i][0]<mediageral){
        fprintf(arquivo,"%d;",matricula[i][0]);
        fprintf(arquivo,"%0.2f\n",resultado[i][0]);
        }
    }
    fclose(arquivo);
}
void gabaritos(){
    int k;
    for (k=0;k<10;k++){
        setbuf(stdin,NULL);
        printf("\nInforme o gabarito da questao %d: \n",k+1);
        scanf("%c",&gabarito[k]);
        gabarito[k]=toupper(gabarito[k]);
    }
}
void shellSort(int size) {
    int i , j , aux2;
    float aux1;
    int h = 1;
    while(h < size) {
        h = 3*h+1;
    }
    while ( h > 1) {
        h /= 3;
        for(i = h; i < size; i++) {
            aux1 = resultado[i][0];
            aux2 = matricula[i][0];
            j = i - h;
            while (j >= 0 && aux1 < resultado[j][0]) {
                resultado [j + h][0] = resultado[j][0];
                j -= h;
            }
            resultado [j + h][0] = aux1; matricula[j+h][0]=aux2;
        }
    }
}
int main(){
    float mg;
    int t;
    t=leitura("dados.csv");
    gabaritos();
    printf("\n=======================================\n");
    printf("\nGabarito Correto: %s\n",gabarito);
    if(t>0){
        mg=media(t);
        printf("\nMedia Geral: %0.2f\n",mg);
        printf("\n=======================================\n");
        shellSort(t);
        gravar("boletim.csv",t,mg);
    }
return 0;}

 

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