Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz
Prova de Segunda Chamada - 14 de dezembro de 2009
1a Questão: (1.0 pontos)
O que o programa imprime?
O que o programa mostrado na listagem 1 imprime, caso sejam fornecidos os valores 48 e
256. Justifique a sua resposta.
Listing 1: Programa do problema 1.
#i ncl ude < stdio .h >
#d e f i n e MAX 1000
i n t abc ( i n t x , i n t y )
{
printf ( " % d % d \ n " , x , y );
i f ( y == 0)
{
return x ;
}
else
{
return abc (y , x % y );
}
}
i n t main ( void )
{
int a, b;
scanf ( " % d % d " , &a , & b );
printf ( " % d \ n " , abc (a , b ));
return 0;
}
1
2a Questão: (1.5 pontos)
O que o programa imprime? De novo!
O que o programa mostrado na listagem 2 imprime. Justifique sua resposta.
Listing 2: Programa do problema 2.
#i ncl ude < stdio .h >
void f1 ( i n t * vetor , i n t tamanho , i n t s )
{
int i;
s = 0;
f o r ( i = 0; i < t a m a n h o; i ++)
{
s = s + vetor [ i ];
}
}
void f2 ( i n t * vetor , i n t tamanho , i n t * s )
{
int i;
* s = 0;
f o r ( i = 0; i < t a m a n h o; i ++)
{
* s = * s + vetor [ i ];
}
}
i n t f3 ( i n t * vetor , i n t t a m a n h o)
{
i n t i , s = 0;
f o r ( i = 0; i < t a m a n h o; i ++)
{
s = s + vetor [ i ];
}
return s ;
}
i n t main ( void )
{
i n t v [5] = { 10 , 5 , 3 , 2 , 5};
i n t soma = 0;
f1 (v , 5 , soma );
printf ( " P r i m e i r a vez = % d \ n " , soma );
f2 (v , 5 , & soma );
printf ( " S e g u n d a vez = % d \ n " , soma );
soma = f3 (v , 5);
printf ( " T e r c e i r a vez = % d \ n " , soma );
return 0;
}
2
3a Questão: (2.5 pontos)
Somando Linhas
Escreva um programa que leia de um arquivo texto uma matriz quadrada de números reais. O
tamanho máximo da matriz é 1000 × 1000. O nome do arquivo de entrada é ‘‘matrizin.txt’’.
O seu programa deve calcular a soma de todos os elementos de cada linha. Em seguida o seu
programa deve descobrir qual é a maior soma e que linha tem soma igual a maior soma. O
programa deve gravar a maior soma e o(s) número(s) da(s) linha(s) com soma igual a maior em
um arquivo texto chamado ‘‘matrizout.txt’’.
Entrada
Os dados no arquivo de entrada tem o seguinte formato. A primeira linha do arquivo contém
o tamanho da matriz (1 ≤ N ≤ 1000). Em seguida o arquivo contém N ∗ N números inteiros
em um formato livre, ou seja quantidade de números por linha do arquivo é variável.
Saı́da
O arquivo de saı́da tem o seguinte formato. Primeiro o valor da maior soma das linhas. Em
seguida as linhas com soma igual a maior soma.
Exemplo de
5
1.0 2.0 3.0
2.0 1.0 2.0
3.0 0.0 0.0
5.0 1.0 0.0
1.0 1.0 1.0
Entrada:
4.0
1.0
0.0
2.0
1.0
Exemplo de Saı́da:
14.000000
1
2
3
2.0
8.0
11.0
6.0
1.0
3
4a Questão: (2.5 pontos)
Misturando Dados
Uma tarefa muito comum em computação é misturar dois vetores dados já ordenados para
criar um terceiro também ordenado.
A sua tarefa é escrever um programa que leia os dados de dois vetores e os misture em um
terceiro.
Considere que o tamanho máximo de cada um dos dois vetores originais é desconhecido.
Entrada
A leitura dos dados vai ser feita da seguinte maneira. Primeiro o programa deve ler o
tamanho do primeiro vetor (tam1). Em seguida o programa deve ler tam1 números reais. Após
estas leituras o programa lê o tamanho do segundo vetor (tam2). Finalmente, o programa lê
tam2 números reais. Considerar que os dados do primeiro e do segundo vetor estão em ordem
crescente.
Saı́da
Após misturar os dois vetores em um terceiro o programa deve imprimir os tam1 + tam2
números reais armazenados no terceiro vetor. Estes dados devem estar em ordem crescente.
Exemplo de Entrada:
5
1.0
4.0
7.0
10.0
12.0
3
1.0
2.0
9.0
Exemplo de Saı́da:
1.0
1.0
2.0
4.0
7.0
9.0
10.0
12.0
4
5a Questão: (2.5 pontos)
Será que Zenão chega lá?
Zenão estava perdido em uma região desértica da Terra Média, ao norte de Nárnia e a leste do
famoso Castelo de Hogwarts. A cidade mais próxima, Forks, ficava a vários dias de caminhada.
Sedento e faminto ele já perdia as esperanças, quando avistou, a 1000 metros de onde estava,
uma fonte jorrando água.
Zenão começou a correr, mas chocou-se contra uma barreira mágica que circundava a fonte.
No instante em que se chocou contra a barreira ouviu a seguinte mensagem:
“Forasteiro infeliz, para chegar até a fonte você deve ter muita paciência e faça
o seguinte: a cada 5 minutos caminhe metade da distância que ainda falta para
chegar até a fonte. Desobedeça qualquer uma destas instruções e a morte será o seu
destino.”
Tarefa
A sua tarefa é descobrir em quantos minutos Zeno irá chegar a uma distância da fonte menor
do que 10−3 m.
Entrada
Este programa não tem entradas.
Saı́da
O seu programa deve imprimir em quantos minutos Zeno irá chegar na distância desejada.
5
Download

O que o programa imprime?