ep3-6435020.c
/********************************************************/
/* Aluno: Cristine Calil Kores */
/* N?mero USP: 6435020 */
/* Exercicio-Programa 3 -- Fazendo Media */
/* MAC115 -- 2008 -- IFUSP, turma 21 -- Prof. Reverbel */
/* Compilador: DevC++ versao 4.9.9.2 */
/********************************************************/
#include<stdio.h>
#include <stdlib.h>
#define MAX_NOME 30
#define MAX_NOTAS 83 /*40 provas, 40 eps, suas respectivas medias e a media final*/
#define MAX_PROVAS 40
#define MAX_EPS 40
int main()
{
int n ,m,p,pp,pep,aprovados,recuperacao,reprovados; /*Respectivamente o numero de :alunos, eps, provas; peso da media
das provas e dos eps, variaveis para o numero de alunos aprovados, em recuperacao e reprovados*/
float mp,mep,mf; /*variaveis para a media das provas, dos eps e a media final, para cada aluno*/
char nome[MAX_NOME]; /*vetor para os nomes dos alunos*/
float notas[MAX_NOTAS]; /*vetor com todas as notas, pra saida*/
float medias_sala[MAX_NOTAS]; /*vetor para as medias da sala */
char nome_arq_entrada[40]; /*onde sera guardado o nome do arquivo de entrada*/
int pesos_provas[MAX_PROVAS]; /*vetor onde estarao armazenados os pesos de cada prova*/
int pesos_eps[MAX_EPS]; /*vetor onde estarao armazenados os pesos de cada ep*/
int i, aux, aux_n; /*variaveis auxiliares*/
int pesos=0;
n=0;
m=0;
p=0;
pp=0;
pep=0;
aprovados=0;
recuperacao=0;
reprovados=0;
mp=0;
mep=0;
mf=0;
FILE *entrada, *saida;
printf("Digite o nome do arquivo de entrada: ");
scanf("%s", nome_arq_entrada);
/*abertura do arquivo de entrada, para leitura*/
if ((entrada = fopen(nome_arq_entrada, "r")) == NULL)
{
printf("Arquivo de entrada nao encontrado!\n");
exit(1);
}
/* Abertura do arquivo de saida, para escrita */
if ((saida = fopen("saida.txt", "w")) == NULL)
{
printf("Erro na abertura do arquivo de saida!\n");
exit(1);
}
/* Lendo do arquivo de entrada */
fscanf(entrada, "%d %d %d ", &n, &p, &m);
printf("n=%d, p=%d, m=%d\n", n,p,m); /*s? checando*/
for(i=1;i<=p;i++)
{
fscanf(entrada,"%d ", &pesos_provas[i]); /*guarda os pesos das provas*/
printf("peso da prova %d = %d\n",i,pesos_provas[i]); /*s? checando*/
}
for(i=1;i<=m;i++)
{
fscanf(entrada, "%d ",&pesos_eps[i]); /*guarda os pesos dos eps*/
printf("peso do ep %d = %d\n",i,pesos_eps[i]); /*s? checando*/
}
fscanf(entrada, "%d %d ", &pp, &pep); /*le e guarda o peso da media das provas, pp, e o peso da media dos eps, pep*/
printf("pp = %d, pep = %d\n",pp,pep); /*s? checando*/
fprintf(saida, "Nome "); /* a palavra nome, seguida de 26 espacos*/
printf("Nome "); /*s? checando*/
for(i=1; i<=p; i++)
{
fprintf(saida, "p%d ",i);
printf("p%d ",i); /*so checando*/
}
fprintf(saida, "mp ");
printf("mp ");/*so checando*/
for(i=1; i<=m; i++)
{
fprintf(saida, "ep%d ",i);
printf("ep%d ",i);/*so checando*/
}
fprintf(saida, "mep mf\n");
printf("mep mf\n");/*so checando*/
aux_n=n; /*aux_N sera usado para nao "estragar"o n*/
for(i=1;i<=MAX_NOTAS;i++) /*inicializacao do vetor*/
medias_sala[i]=0;
while(n>0)
{
mp=0;
pesos=0;
mep=0;
mf=0;
fgets(nome, MAX_NOME, entrada); /*para ler o 1o nome ate acabar o vetor nome, onde o nome esta sendo guardado*/
fprintf(saida,"%s ",nome);
printf("%s ",nome); /*s? checando*/
for(i=1;i<=p;i++)
{
fscanf(entrada, "%f ", ¬as[i]);
fprintf(saida, "%5.1f",notas[i]);
printf("i=%d\n",i);
printf("%4.1f", notas[i]); /* so checando*/
mp=mp+(notas[i]*pesos_provas[i]);
pesos=pesos+pesos_provas[i];
medias_sala[i]=medias_sala[i]+notas[i];
}
printf("i_mp=%d",i); /*so checando*/
mp=mp/pesos;
notas[i]=mp;
medias_sala[i]=medias_sala[i]+notas[i];
fprintf(saida, "%5.1f", notas[i]);
printf("\n%5.1f", notas[i]); /*so checando*/
i++; /*i=p+1, ir para a proxima casa, seguinte a mp*/
/*i est? percorrendo o vetor notas agora i=p+1 e p=p inicial*/
printf("\n\n\ni=%d\n",i); /*so checando*/
printf("m=%d\n",m); /*so checando*/
printf("p=%d\n",p); /*so checando*/
pesos=0;
aux=m;
for(;m>0;m--,i++)
{
fscanf(entrada, "%f ", ¬as[i]);
fprintf(saida, "%5.1f",notas[i]);
mep=mep+(notas[i]*pesos_eps[i-(p+1)]);
pesos=pesos+pesos_eps[i-(p+1)];
medias_sala[i]=medias_sala[i]+notas[i];
}
m=aux;
printf("m=%d ",m);
mep=mep/pesos;
notas[i]=mep;
medias_sala[i]=medias_sala[i]+notas[i];
fprintf(saida, "%5.1f", notas[i]);
printf("%2.1f ",notas[i]);
i++;
/*agora m ? m inicial, e i=p+m+2, estando na posicao correspondente
? seguinte da que ? ocupada pela media dos eps, mep, do vetor notas[]*/
mf=(pp*mp) + (pep*mep);
mf=mf/(pp+pep);
notas[i]=mf;
medias_sala[i]=medias_sala[i]+notas[i];
fprintf(saida, "%5.1f",notas[i]);
printf("%2.1f ", notas[i]);
fprintf(saida,"\n");
n--;
/*pelo fato das mf serem floats e s? serem arredondadas para sua impressao,
a comparacao foi feita com 3.0 e 5.0, e nao com 2.95 e 4.95 como o Sr. Prof. Reverbel havia dito para fazer*/
if(mf<3.0)
reprovados++;
if(mf>=3.0 && mf<=5.0)
recuperacao++;
if(mf>5.0)
aprovados++;
} /*do while(n>0)*/
aux=i;
fprintf(saida,"Medias ");
for(i=1;i<=aux;i++)
{
fprintf(saida, "%5.1f",(medias_sala[i]/aux_n));
printf("medias da sala:%2.1f", (medias_sala[i]/aux_n));
}
fprintf(saida,"\n\n\nAprovados: %d\nRecuperacao: %d\nReprovados: %d",aprovados,recuperacao,reprovados);
fclose(entrada);
fclose(saida);
}