Computaç˜ao para Informática - Prof. Adriano Joaquim de Oliveira

Propaganda
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz
Primeira Prova - 29 de abril de 2009
Observações Iniciais:
• Responda no caderno de respostas.
• A prova é composta de seis questões. As quatro primeiras valem 1,5 cada uma e as duas
últimas valem 2,0 pontos cada.
• O formato da entrada e saı́da dos dados deve ser seguido exatamente como está indicado
no enunciado de cada programa.
1o Problema:
resposta.
O que será impresso pelo programa mostrado na listagem 1. Justifique sua
Listing 1: Programa do problema 1.
#i ncl ude < stdio .h >
i n t main ( void )
{
int i;
char j ;
f o r ( i = 0; i < 26; i = i + 2)
{
f o r ( j = ’A ’; j <= ’Z ’ - i ; j ++)
{
printf ( " % c " , j );
}
printf ( " \ n " );
}
return 0;
}
2o Problema:
Escreva um programa que imprima os seguintes resultados:
0
11
222
3333
44444
555555
6666666
1
3o Problema: O que será impresso pelo programa mostrado na listagem 2 caso você digite
a seguinte linha de texto:
Prova de Computacao para Informatica.
Justifique sua resposta.
Listing 2: Programa do problema 3.
#i ncl ude < stdio .h >
i n t main ( void )
{
i n t vogais , i ;
char linha [80];
gets ( linha );
f o r ( i = 0 , vogais = 0; linha [ i ] != ’ \0 ’; i ++)
{
switch ( linha [ i ])
{
cas e ’a ’: cas e ’e ’: cas e ’i ’: cas e ’o ’: cas e ’u ’:
vogais ++;
}
}
printf ( " Vogais = % d \ n " , vogais );
f o r ( i = 0 , vogais = 0; linha [ i ] != ’ \0 ’; i ++)
{
i f ( linha [ i ] >= ’a ’ && linha [ i ] <= ’u ’)
{
vogais ++;
}
}
printf ( " Vogais = % d \ n " , vogais );
return 0;
}
2
4o Problema: O que será impresso pelo programa 3, caso os números fornecidos sejam os
seguintes: 3 5 1 4 2. Justifique sua resposta.
Listing 3: Programa do problema 4.
#i ncl ude < stdio .h >
i n t main ( void )
{
i n t v [5];
i n t i , temp ;
f o r ( i = 0; i < 5; i ++)
{
scanf ( " % d " , & v [ i ]);
}
f o r ( i = 0; i < 4; i ++)
{
i f ( v [ i ] > v [ i +1])
{
temp = v [ i ];
v [ i ] = v [ i +1];
v [ i +1] = temp ;
}
}
f o r ( i = 4; i >= 0; i - -)
{
printf ( " % d " , v [ i ]);
}
return 0;
}
3
5o Problema:
Intercalando vetores
Uma operação muito comum em computação é a intercalação de dois vetores que já estão
ordenados. Considere um vetor A de tamanho N e outro B de tamanho M (N, M ≤ 1000). O
vetor resultante C é contruı́do a partir dos dois originais e terá tamanho N + M . Considere
por exemplo a tabela 1. A partir dos vetores (Tabela 1) A de 4 elementos e B de 3 elementos,
construı́mos o vetor C com 7 elementos. Durante a criação da tabela C os elementos vão sendo
retirados de A e B na ordem requerida.
i =
A[i]
B[i]
C[i]
0
1
2
1
1
3
3
2
2
6
5
3
3
7
4
5
6
3
5
6
7
Tabela 1: Vetores A, B e C.
Tarefa
A sua tarefa é escrever um programa que leia uma série de pares de vetores e os intercale e
imprima o resultado.
Entrada
A entrada consiste de uma série de casos de teste. A primeira linha de um conjunto de
teste contém dois números inteiros positivos (tamA, tamB ≥ 0) que indicam os tamanhos dos
vetores A e B respectivamente. As tamA linhas seguintes contém os dados do vetor A. Em
seguida vem tamB linhas contendo os dados do vetor B. O final da entrada é indicado por
tamA = tamB = 0.
Saı́da
Para cada conjunto de teste da entrada seu programa deve produzir várias linhas. A primeira
linha identifica o conjunto de teste, no formato ”Teste t”, onde t é numerado a partir de 1. As
tamA + tamB linhas restantes contém os valores na ordem pedida. Uma linha em branco deve
ser deixada após cada caso de teste.
Exemplo de Entrada:
5 3
1
2
3
4
5
1
2
3
2 2
1
4
3
5
0 0
Saı́da para o Exemplo de Entrada
Teste 1
1
1
2
2
3
3
4
5
Teste 2
1
3
4
5
4
6o Problema:
Mudando as regras do jogo
As corridas de automóveis em Pindorama, um paı́s ao sul do norte e ao norte do sul, perderam
público nos últimos anos porque se tornaram muito chatas. Durante as corridas quase não
ocorrem ultrapassagens e os pilotos quase que se tornaram passageiros nos carros de corrida.
Para tentar modificar este quadro a Federação Pindoramiana de Automobilismo (FPA) decidiu
alterar as regras de pontuação dos campeonatos.
Até o ano passado o sistema de pontos funcionava do seguinte modo. Considere uma corrida
em que M pilotos terminaram. O primeiro classificado recebia M pontos, o segundo classificado
recebe M − 1 pontos, o terceiro M − 2 pontos e assim por diante. Por exemplo, em uma corrida
com 5 classificados os pontos eram atribuı́dos da maneira mostrada na Tabela 2. No final do
ano são somados os pontos de cada corrida e o campeão é o piloto com mais pontos.
Classificação
Pontos
1
5
2
4
3
3
4
2
5
1
Tabela 2: Pontos para os primeiros M = 5 classificados.
Neste ano o sistema será diferente. Será campeão o piloto que conseguir o maior número de
vitórias nas corridas. Os pontos das corridas serão usados somente como critério de desempate.
Tarefa
Você deve escrever um programa que, dadas as listas de resultados anuais da FPA, determine
quem seria o campeão por pontos, como no critério tradicional, e por total de vitórias, como
no critério novo. Observe que podem ocorrer casos em que mais de um piloto seja o campeão.
Neste caso imprima todos os pilotos que atingiram o número maior de pontos e/ou de vitórias,
não aplique nenhum critério de desempate.
Entrada
A entrada contém os resultados de vários anos. A primeira linha dos resultados de um ano
contém dois inteiros. O primeiro inteiro N indicando o número de corridas do ano (1 < N ≤
1000). O segundo M contém o número de classificados em cada corrida (2 ≤ M < 100). Os
corredores são identificados por inteiros de 1 a 100. Observe que de ano para ano o número
de classificados em cada corrida pode mudar. A segunda linha contém o ano do campeonato
em que os dados foram obtidos. Cada uma das N linhas seguintes contém a classificação de
uma corrida. A lista de classificação contém uma seqüência de M números inteiros listando os
corredores em ordem de chegada, do primeiro para o último. O final dos dados é indicado por
uma linha com N = M = 0. Assuma que cada lista de classificação contém M identificadores
distintos.
Saı́da
A saı́da deve imprimir o ano em que o campeonato foi realizado. Em seguida deve vir o
piloto campeão por pontos e o campeão por número de vitórias. Caso haja mais de um, informe
os números em ordem crescente.
Exemplo
5
Entrada
4 5
2000
20 33 25 32 99
33 25 32 99 20
25 32 99 20 33
32 99 20 33 25
3 6
2002
2 34 88 36 79 93
2 34 88 36 79 93
2 34 88 36 79 93
0 0
Saı́da
Ano 2000
Campeao por
Campeao por
Campeao por
Campeao por
Campeao por
pontos 32
vitorias 20
vitorias 25
vitorias 32
vitorias 33
Ano 2002
Campeao por pontos 2
Campeao por vitorias 2
6
Download