Ir para conteúdo
Fórum Script Brasil
  • 0

Média final


JimmyPage

Pergunta

Escreva, na linguagen C, um programa que leia de um arquivo os dados de uma turma e imprima

a m´edia final de acordo com o crit´erio tamb´em descrito no arquivo de entrada.

No arquivo de entrada est˜ao os seguintes dados, nesta ordem:

• quatro inteiros n, p,m e t, representando respectivamente o n´umero de alunos da turma, o n´umero

de notas de provas, o n´umero de notas de exerc´ıcios-programa e o n´umero de mˆeses de aulas no

semestre;

• uma sequˆencia de p naturais representando o peso de cada prova;

• uma sequˆencia de m naturais representando o peso de cada exerc´ıcio-programa;

• dois naturais pp e pep representando o peso da m´edia de provas e da m´edia de exerc´ıcios-programa

para o c´alculo da m´edia final;

• uma sequˆencia de t naturais representando a quantidade de dias letivos de cada mˆes;

• uma sequˆencia de n linhas, cada uma com os dados de um dos n alunos da turma: nome, notas

de provas, notas de exerc´ıcios-programa e as freq¨uencias (n´umero de faltas) de cada mˆes.

Voces podem assumir que o nome de cada aluno cont´em no m´aximo 29 caracteres. Mais especificamente

vocˆes podem assumir que os 30 primeiros caracteres de cada linha com os dados de um aluno

cont´em um nome seguido de brancos (haver´a pelo menos um branco depois do nome) e que na coluna

31 come¸cam as notas deste aluno. Cada nota deve ser um n´umero real entre 0 e 10.

Exemplo de arquivo de entrada

3 3 5 4

1 2 2

1 1 2 2 3

1 2

20 20 18 20

Cassandra Avestruz da Silva 5.0 6.6 4.2 10.0 9.0 8.0 7.0 6.0 0 0 0 4

Roberto Carlos 2.0 1.5 3.2 0.0 5.0 0.0 6.0 6.5 10 2 4 0

Ronaldinho Gaucho 8.0 3.0 7.7 9.5 8.0 10.0 9.5 9.0 12 10 8 12

O seu programa pode ler e escrever os dados na entrada e sa´ıda padr˜ao ou pedir que o

usu´ario digite o nome do arquivo de entrada e deve ter como sa´ıda um arquivo de nome

‘‘saida.txt’’ contendo as seguintes informa¸c˜oes:

1

• uma linha inicial com os r´otulos das v´arios colunas a serem impressas (veja no

exemplo abaixo);

• uma linha para aluno, contendo o seu nome, as suas notas de prova, a sua m´edia de

prova usando os pesos dados no arquivo de entrada, as suas notas dos exerc´ıciosprograma,

a sua m´edia de exerc´ıcio-programa usando os pesos dados no arquivo de

entrada e finalmente a sua m´edia final;

• uma linha contendo a m´edia da turma em cada prova, a m´edia das m´edias das provas,

a m´edia de cada exerc´ıcio-programa, a m´edia das m´edias dos exerc´ıcios-programa e

a m´edia das m´edias finais;

• no final, o n´umero de alunos aprovados (com m´edia final maior ou igual a 5.0 e

freq¨uencia maior ou igual a 75%), o n´umero de alunos que ficaram de recupera¸c˜ao

(com m´edia final maior ou igual a 3.0 e menor que 5.0 e freq¨uencia maior ou igual

a 75%) e o n´umero de reprovados (com m´edia final menor que 3.0 ou freq¨uencia

menor que 75%).

Exemplo de sa´ıda (para o arquivo de entrada j´a visto):

Nome p1 p2 p3 mp ep1 ep2 ep3 ep4 ep5 mep mf fm

Cassandra Avestruz da Silva 5.0 6.6 4.2 5.3 10.0 9.0 8.0 7.0 6.0 7.4 6.7 94.9

Roberto Carlos 2.0 1.5 3.2 2.3 0.0 5.0 0.0 6.0 6.5 4.1 3.5 79.5

Ronaldinho Gaucho 8.0 3.0 7.7 5.9 9.5 8.0 10.0 9.5 9.0 9.3 8.1 46.2

Medias 5.0 3.7 5.0 4.5 6.5 7.3 6.0 7.5 7.2 6.9 6.1

Aprovados: 1

Recuperacao: 1

Reprovados: 1

Editado por Jonathan Queiroz
Título editado conforme regra 3.6 (Jonathan)
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Mostre o que você já fez. E aponte sua dúvida.

eu preciso ler cada linha e gardar em variaveis os valores separados por tab, e a partir dos daos dos alunos, fazer as contas e ao fim exibir o resultado... se puder me ajudar agradeço, meu fonte tá ruim... recomeçando ele...

Link para o comentário
Compartilhar em outros sites

  • 0
Mostre o que você já fez. E aponte sua dúvida.

eu preciso ler cada linha e gardar em variaveis os valores separados por tab, e a partir dos daos dos alunos, fazer as contas e ao fim exibir o resultado... se puder me ajudar agradeço, meu fonte tá ruim... recomeçando ele...

# include<stdio.h>
# include <stdio.h>
# include <stdlib.h>
#define MAX_NOME 30    
   

enum { MAX = 81 };

char *extraiDado (char *, char *);

  
   int main(){
        
      
    system("pause");
    system("cls");
    

    FILE *pArq;        /* ponteiro para o arquivo com os dados */
    char nomeArq[MAX]; /* nome do arquivo */
    int n, m, pr, t, i;
    float n1, n2, media, p1, p2, p3;
    
    char linha[MAX];   /*  dados lidos do arquivo */    
    char nome[MAX];
    char temp[MAX];    /* b dado extraido de linha */
    char *p;           /* ponteiro que anda pela linha durante
                          a extracao dos dados */
    
    puts("DIGITE O ARQUIVO DE ENTRADA"); gets(nomeArq);

    if ((pArq = fopen(nomeArq, "r")) == NULL) 
    {
        puts("Arquivo não pode ser aberto.");
        exit(EXIT_FAILURE);
      }

    /* 
    quatro inteiros n, p,m e t, representando respectivamente o n´umero de alunos
    da turma, o número de notas de provas, o número de notas de exercícios-programa
    e o número de mˆeses de aulas no  semestre
    */     
    fscanf(pArq, "%d %d %d %d", &n, &pr, &m, &t);
    /* Verificação os valores que foram lidos - impressão na tela */
    printf("n = %d   pr = %d   m = %d  t = %d\n", n, pr, m, t);
    
    /* uma sequˆencia de p naturais representando o peso de cada prova;*/
    fscanf(pArq + 1, "%d %d %d", &p1, &p2, &p3);
    /* Verificação os valores que foram lidos - impressão na tela */
    printf("p1 = %d   p2 = %d   p3 = %d\n", p1, p2, p3);

    fgets (linha, MAX, pArq);
    while ( ! feof(pArq) )
    {
        for(i=0; i<n; i++){
        
        /* extrai nome */    
        p = linha;
        p = extraiDado (p, temp);
        strcpy(nome, temp);
        
        /* extrai nota 1 */
        p = extraiDado (p, temp);
        n1 = atoi (temp);
        /* extrai nota 2 */
        p = extraiDado (p, temp);
        n2 = atoi (temp);
        media = (n1 + n2)/2;
       
        
        /*gravando arquivo de saida*/
        printf(          "NOME              P1    P2    MEDIA\n");
        fprintf (stdout, "%-40s %4.1f %4.1f %4.1f ", nome, n1, n2, media); 
        if (media > 5.0) puts ("aprovado");
        else puts("reprovado");
        system("pause");
           
        fgets (linha, MAX, pArq);
   
    }
}

} 


char *extraiDado (char *buffer, char *temp)
{
    int i=0;

    do {
            temp[i] = *buffer;
            buffer++; i++;
    } while (*buffer != ';');
    temp[i] = '';

    return ++buffer;

    system("pause");
    return 0;
}

Editado por Jonathan Queiroz
Adcionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...