Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Prova - 18 de fevereiro de 2013 1a Questão: (2.5) O programa mostrado na listagem 1 lê um vetor de tamanho lido do teclado e imprime a media dos elementos do vetor e quantos elementos estão acima da média. Complete as partes que faltam. Listagem 1: Programa da questao 1. #include < stdio .h > /* coloque os prototipos aqui */ i n t main ( i n t argc , char * argv []) { i n t tam ; i n t * vetor ; f l o a t media ; i n t acima ; scanf ( " % d " , & tam ); /* Aqui deveria alocar memória */ /* xxxxx */ LeVetor ( vetor , tam ); media = calculaMedia ( vetor , tam ); acima = acimaMedia ( vetor , media , tam ); printf ( " % f % d \ n " , media , acima ); return 0; } /* Colocar as funcoes aqui */ 1 2a Questão: (2.5) Gerando arquivo texto Uma tarefa comum em computação é processar texto e dados numéricos armazenados em arquivos. Considere o seguinte problema. Em um arquivo texto estão armazenados dados de alunos de um curso. O número de alunos gravados neste arquivo não é conhecido. Cada linha do arquivo contém os dados de um aluno, que são os seguintes: um registro tipo DRE composto por 11 caracteres seguido pelas notas que o aluno obteve em uma determinada matéria. Tarefa A sua tarefa é ler os dados de um arquivo, chamado entrada.txt, e gerar um segundo arquivo, chamado saida.txt, contendo em cada linha o registro do aluno seguido pela média que o aluno obteve na matéria. OBS. A escolha das funções para que o programa funcione corretamente é muito importante e será levada em conta na avaliação da solução. Entrada O arquivo tem um formato fixo. Na primeira linha, um número inteiro N indica o número de provas que os alunos fizeram. Cada uma das linhas restantes contém o DRE do candidato e as suas N notas. Saída O formato do arquivo de saída é fixo e contém em cada linha o número de inscrição do candidato seguido pela média das notas com uma casa decimal. Exemplo de 3 A1234567890 B9876543210 C3333333333 D2222222222 E3456789099 Arquivo de Entrada Exemplo de A1234567890 B9876543210 C3333333333 D2222222222 E3456789099 1 1 1 7.5 7.5 7.5 10 10 10 0 0 0 5 6 7 2 Arquivo de Saída: 1.0 7.5 10.0 0.0 6.0 3a Questão: (2.5) Números Perfeitos, Abundantes e Deficientes Em tempos antigos, o matemático Nicômaco of Gérasa (60 até 120 DC) observou caracaterísticas interessantes sobre os números inteiros. Por exemplo, ele calculou a soma dos divisores próprios dos números inteiros e descobriu que eles podem ser classificados em três categorias. Os divisores próprios de um número são todos os divisores com exceção do próprio número. As três categorias são: Números abundantes: são os números em que a soma dos divisores próprios é maior que o próprio número. Por exemplo, 20 tem os seguintes divisores próprios: 1, 2, 4, 5 e 10, cuja soma vale 22 > 20. Portanto, ele é abundante; Números deficientes: são os que tem a soma menor que o número original. Por exemplo, os divisores próprios de 15 são 1, 3 e 5, cuja soma vale 9 < 15, portanto ele é deficiente; Números perfeitos: são aqueles em que a soma dos divisores próprios é igual ao número original. Por exemplo, os divisores de 28 são 1, 2, 4, 7 e 14 cuja soma é igual a 28, e portanto ele é perfeito. Tarefa A sua tarefa é escrever um programa que leia um valor inteiro N do teclado e imprima em qual das três categorias os números de 1 até N se incluem. Entrada Um número inteiro positivo. Saída A saída deve ter N linhas. Cada linha deve ter duas informações o número e a sua classificação. Exemplo de Entrada 12 Exemplo de Saída: 1: deficiente 2: deficiente 3: deficiente 4: deficiente 5: deficiente 6: perfeito 7: deficiente 8: deficiente 9: deficiente 10: deficiente 11: deficiente 12: abundante 3 4a Questão: (2.5) Somando Frações Tarefa A sua tarefa é completar o programa mostrado na listagem 2 que soma frações. Entrada A entrada é uma série de linhas contendo as frações que compõem os casos de teste. Cada caso de teste é composto de quatro números: numerador1 , denominador1 , numerador2 e denominador2 . O final da entrada é indicado por quatro zeros. Considere que nenhuma fração fornecida terá o denominador igual a 0. Considere também que os termos da fração são sempre números inteiros. Saída A saída deve ser uma série de linhas com o resultado da soma de cada fração. O resultado deve estar na forma mais simples, conforme indicado nos exemplos abaixo. Exemplo de Entrada 1 1 1 1 1 2 1 2 2 3 3 2 1 4 3 6 0 0 0 0 Exemplo de Saída: 2 / 1 1 / 1 13 / 6 3 / 4 Listagem 2: Programa da questao 4. #include < stdio .h > typedef s t r u c t _FRACAO { i n t numerador , denominador ; } FRACAO ; void leFracao ( FRACAO * f ) { /* aqui falta codigo */ } i n t mdc ( i n t a , i n t b ) { /* aqui falta codigo */ } FRACAO somaFracao ( FRACAO a , FRACAO b ) { /* aqui falta codigo */ } void imprimeFracao ( FRACAO c ) { /* aqui falta codigo */ } i n t main ( void ) { FRACAO a , b , c ; while (1) { leFracao (& a ); leFracao (& b ); i f (( a . numerador + a . denominador + b . numerador + b . denominador ) == 0) break ; c = somaFracao (a , b ); imprimeFracao ( c ); } return 0; } 4