MAC110 - TURMA 42 - www.ime.usp.br/~leo/mac110 cab-mac110-2004.gif
MAC 110 - 2004 Prof. Leônidas


Construir um sistema para notas de alunos

Última alteração em: 17/02/2005 (definido a data de entrega e a forma)

Data de entrega: até 03/03/2005


Forma de entrega: entregar em disquete na sala 241-A entre 12H e 13H Atenção:
  • Cuidado com a compilação, é necessário compilar na "gcc" do Linux
  • Serão feitas perguntas sobre como foi implementado o EP, dificuldades, etc..


Tarefa individual para aqueles que ficaram de REC de EP .

Sistema

Construir um sistema baseado em linhas de comandos e arquivos, para computar notas de alunos, incluindo médias por avaliações.

O sistema funcionará via linha de comando, com um arquivo de entrada e gerando um arquivo de saída. Os aquivos de entrada e de saída serão no formato texto, conforme descritos a seguir.

Entrada:

Um arquivo com as notas e mais algumas informações.

 NA NP
 p1 p2 p3 ... pNP
 nome aluno 1 :  n11 n12 n13 ... n1NP
 ...
 nome aluno NA : nNA1 nNA2 nNA3 ... nNANP

[26/01/2005]  
Atenção, utilize o caractere ":" para finalizar o nome (e indicar que em seguida vêm as notas obtidas pelo aluno). As notas (nij) dever ser lidas como "flutuantes".

Sendo que

NA número de alunos no arquivo
NP número de avaliações (pesos)
Pi (i entre 1 e NP) é peso da avaliação i no computo da média final do aluno (qualquer inteiro positiro)


[26/01/2005]  
As médias de cada aluno dever ser calculadas de acordo com a ponderação (os pi's). Por exemplo, para o aluno i, sua média final é (p1 * ni1 + p2 * ni2 + ... + pNP * niNP) / (p1+p2+...+pNP).

Saída: um arquivo com as médias finais, ordenado alfabeticamente, com as médias por avaliação e com a média geral da turma.

 Curso X
 Professor Y
 ------------------------------------------------------------
 Nomes          médias finais
 nome aluno 1   média_fina1
 ...
 nome aluno NA  média_finaNA
 ------------------------------------------------------------ 
 Médias:
 Média geral:   média_geral
 aval. 1:       média_aval_1
 ...
 aval. NP:      média_aval_NP

Aqui os nomes devem estar ordenados alfabeticamente.

Implementação:

No sistema existirão três módulos (não necessariamente em funções) principais, um que lê os dados e monta os vetores e matrizes de dados; um que processa os dados (ordena, computa médias...); e o último que gera o arquivo de resposta/saída.

  1. Função de ordenação alfabética

    Esta função recebe um vetor de palavras (char *pal[]), seu tamanho, um vetor de permutação (que ao final conterá a ordenação).

    Esta técnica de ordenação via vetor de permutação evita que os dados efetivos sejam movidos durante a ordenação. Esta técnica é eficiente quando os dados são "grandes", como no sistema atual, onde eles são palavras com valores associados (um vetor de pesos).
    Por exemplo, dentro da função principal ("main"), se o nome deste vetor for "ordem[]" e o vetor de palavras for "pal[]", ao final do algoritmo se quisermos listar ordenadamente as palavras, basta fazer
    for (i=0; i<NA; i++)
        printf("%s\n", pal[ ordem[i] ]);
    

    Note que: com esta técnica o único vetor que de fato tem elementos "trocados" é de permutação "ordem[]"; para armazenar de fato as palavras a declaração do vetor de nomes fica uma matriz ("char pal[M1][M2]").

    Observação: se os dados já estiverem ordenados, "ordem[i]=i". Assim, para começar use "ordem[]" como identidade (se não fizer o algoritmo de ordenação só não terá a nota correspondente a este pedaço).

    [26/01/2005]  
    Nesta função pode-se utilizar a função "strcmp" (e apenas esta função das bibliotecas disponíveis).


MAC 110 Prof. Leônidas

Compilado em: 17 de Fevereiro de 2005