Document

Propaganda
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
Download