Universidade da Beira Interior Departamento de Informática Programação / Programação I 1º semestre, 2009/10 Exame 2ª Chamada: 10-02-2010 Duração: 02h30m Primeira Parte (6.0 valores) 1. (1.0 valores) Escreva uma instrução de atribuição que atribua à variável sinal o valor 1 se o valor da variável real for não negativo e -1 se o valor da variável real for negativo. 2. (2.5 valores) Escreva um programa que, dados os raios externo e interno de um anel, determine a sua área (A = π(R2 – r2)). 3. (2.5 valores) Escreva um programa que, dados dois valores reais, x e y, interpretados como as coordenadas cartesianas de um ponto, escreva o quadrante em que o ponto se encontra: 1º quadrante se x 2º quadrante se x 3º quadrante se x 4º quadrante se x >= 0, y >= 0 < 0, y > 0 < 0, y < 0 > 0, y < 0 Segunda Parte (7.0 valores) 1. (1.0 valores) Em que circunstâncias pode utilizar uma instrução composta switch em alternativa a um conjunto de instruções condicionais if? 2. (3.0 valores) Uma matriz diz-se esparsa se a maioria dos seus elementos for nula. Por exemplo: 0 0 0 0 0 7 0 0 0 0 0 8 2 0 0 0 0 0 0 0 Podemos economizar espaço em memória se guardarmos apenas os elementos não nulos e as suas respectivas posições: 0 3 2 1 1 7 3 2 8 Escreva uma função que, dada uma matriz de dimensão máxima MAX, devolva a matriz esparsa de elementos correspondente e o número de elementos não nulos. Assuma que podem existir no máximo MAXNULOS elementos nulos na matriz original. 3. (3.0 valores) Escreva um programa que, dado um número natural, n, determine se este é um número feliz. Diz-se que um número natural é feliz se, na seguinte sequência, existir um elemento igual a 1: S(0) = n S(i) = soma dos quadrados dos dígitos de s(i-1) i>0 Se na sequencia existir um elemento igual a 4 podemos concluir que o número não é feliz. O seu programa deverá definir e utilizar uma função (1.5 valores) que devolva a soma dos quadrados dos dígitos de um número natural. Terceira Parte (7.0 valores) 1. (2.0 valores) Escreva uma função que, dada uma matriz de inteiros de dimensão 9*9, verifique se contem uma solução válida para um problema de Sudoku. Note que uma solução é válida se cada linha e cada coluna contém os números de 1 a 9. 2. (2.5 valores) Declare a estrutura de dados necessária para representar uma data (ano, mês e dia). Assumindo já definida uma função do tipo int que, dados o mês e o ano (inteiros), devolve o número de dias desse mês, escreva uma função inteira que devolva o número de dias entre duas datas (passadas para a função como argumentos). 3. (2.5 valores) Escreva uma função que desenhe uma ponte de comprimento c, com pilares de altura a, utilizando o carácter ‘*’. A função deverá ter como entrada o comprimento da ponte (um número ímpar maior ou igual a 3) e a altura dos pilares. O número de pilares deverá ser igual a (c – 1)/2. Os pilares devem estar igualmente espaçados de modo a manter os dois lados da ponte simétricos.