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