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;}