Universidade da Beira Interior Exame (2ª Chamada) (8537, 10343, 10874) Programação, Duração: 01:45 h Tolerância: 15 minutos Número: Nome: (10272) Introdução à Programação Data: 06 de Fevereiro de 2013, 09:30 h Curso: Notas: a) Teste individual e sem consulta. Não é permitido o uso de calculadoras, telemóveis ou outros dispositivos electrónicos. b) A Parte I é para resolver na própria folha de enunciado (portanto, esta folha deve ser entregue juntamente com as restantes folhas de resposta). Parte I 1. Considere que ANO e N são números inteiros e R é um número real. Escreva uma instrução de atribuição para cada uma das seguintes acções: a) A variável PAR toma o valor 0 se N for impar e -10 se N for par. b) A variável D toma o valor do algarismo das centenas de R. c) A variável Bissexto é verdadeira se ANO é divisível por 4 mas não por 100 ou então se ANO é divisível por 400. 2. Considere o seguinte programa: #include <stdio.h> int v1=10; int v2=20; int AddValues(void){ int v1=1; v1++; return (v1 + v2); } void main(void){ int v2 = 30; v2 = AddValues(); printf(″%d \t %d\n″,v1, v2); v2 = AddValues(); printf(″%d \t %d\n″,v1, v2); v2 = AddValues(); printf(″%d \t %d\n″,v1, v2); } Indique o que aparece no ecrã quando o programa é executado, apresentando todos os cálculos que teve que efectuar. Parte II 3. Use pseudo-código para desenvolver um algoritmo que após ler os comprimentos dos três lados de um triângulo (a, b e c), calcule e escreva a área do mesmo, dada pela fórmula de Heron: √ onde é o semi-perímetro do triângulo 4. A fórmula de Leibniz para aproximar é: ∑ Desenvolva um algoritmo, representado através de um fluxograma, para determinar uma aproximação de a partir da soma dos k primeiros termos desta série. k é um número positivo dado pelo utilizador. 5. Como sabe, a luz propaga-se no ar com maior velocidade do que o som. Este facto pode ser usado para determinar a distância a que se encontra uma trovoada (contando o tempo que separa o momento em que se visualiza o relâmpago e o momento em que se escuta o trovão). Pretende-se que escreva um programa, em linguagem C, para auxiliar a determinar a distância a que está uma trovoada. O utilizador deve fornecer o número de segundos que separam os dois momentos (relâmpago e trovão) e o programa deve indicar a distância em metros. Nota: o som propaga-se no ar à velocidade de 340 m/s. 6. Em Matemática, um número perfeito é um número inteiro positivo que é igual à soma dos seus divisores próprios (ou seja, dos seus divisores positivos diferentes de si mesmo). Por exemplo, 6 (= 1 + 2 +3) é um número perfeito. Pretende-se um programa que indique todos os números perfeitos entre dois inteiros positivos, a e b, com a < b. Para isso, usando linguagem C, escreva: a) A função int SomaDivisores(int N) para calcular a soma dos divisores próprios de um inteiro N. b) A função int NumeroPerfeito(int N) que devolve 1 se N for um número perfeito e 0 caso contrário. Esta função deve fazer uso da função definida na alínea anterior. c) O programa que lê dois inteiros a e b e mostra todos os números perfeitos entre a e b. O programa deverá invocar a função definida na alínea anterior. Não precisa de reescrever as funções mas precisa de declará-las no local apropriado. 7. Considere uma matriz quadrada com DIM × DIM elementos inteiros, onde DIM representa o número de linhas (ou colunas). Usando linguagem C, escreva: a) A função int SomaDiagSec(int A[DIM][DIM]) para calcular a soma dos elementos da diagonal secundária da matriz A (de modo simplificado, a diagonal secundária, de uma matriz quadrada, une o canto inferior esquerdo ao canto superior direito). b) A função int LinhaMaior(int A[DIM][DIM]) para indicar o índice da linha que contém o maior elemento da (sub)matriz triangular inferior (elementos situados abaixo da diagonal principal de A).