Programação Folha Prática 5 Lab. 5 Departamento de Informática Universidade da Beira Interior Portugal 2015 Copyright © 2010 All rights reserved. LAB. 5 5ª semana SUBPROGRAMAS 1. Revisão. 2. Objectivos. 3. Exercícios Lab. 5 SUBPROGRAMAS 1. Revisão 1. Cabeçalho (tipo de retorno, nome e parâmetros) e corpo de uma função. 2. Protótipo: declaração da função. 3. Chamada da função. 4. Implementação da função. 5. Comunicação entre funções. 2. Objectivos No final deste módulo prático, o aluno deve ser capaz de: 1. Fazer a análise prévia dum problema, decompor um problema em sub-problemas, e depois, para cada um deles, identificar as entradas e a saída, bem como um algoritmo para cada sub-problema que produza a sua saída a partir das suas entradas. 2. Os subprogramas por ora tratados podem ter n entradas, mas só têm uma saída. 3. Programar em C usando subprogramas e estruturas de controlo. 3. Exercícios Exercício 5.1 (Par ou ímpar) Escreva um programa em C que determine que determine se um dado número inteiro é par ou ímpar. Para isso, deverá usar a função par, cujo protótipo a seguir se apresenta: int par (int); • Retorna 1 se o inteiro passado como parâmetro for par e 0 caso contrário. Exercício 5.2 (Maior de 3 números – versão 1) Escreva um programa em C que determine o maior de três números inteiros. Deverá usar a função maiorDeTres, cujo protótipo a seguir se apresenta e que devolve o maior dos inteiros passados como parâmetro. int maiorDeTres (int, int, int); Exercício 5.3 (Maior de 3 números – versão 2) Repita o exercício usando simplesmente a função maior que retorna o maior de dois números: int maior (int, int); Exercício 5.4 (Máximo e mínimo de N números) Escreva um programa em C que permita determinar o maior e o menor número duma sequência de N números inteiros dados pelo utilizador. O valor de N deverá ser superior ou igual a 2. Se não for o seu valor deverá ser pedido novamente até obter um valor válido. A introdução de números deverá terminar quando forem inseridos N números. Nessa altura a aplicação deverá mostrar o valor máximo e mínimo de entre os valores introduzidos. Deverá usar as funções maximo e minimo, cujos protótipos a seguir se apresentam: float maximo (float, float); • Devolve o maior dos reais passados como parâmetros. float minimo (float, float); • Devolve o maior dos reais passados como parâmetros. Exercício 5.5 (Média de N números) Escreva um programa em C que determine a média duma sequência de N números inteiros dados pelo utilizador. Deverá usar a função media, cujo protótipo a seguir se apresenta e que devolve a media dos inteiros: float media (int); O argumento passado à função media é o valor N, sendo que os números inteiros são fornecidos pelo utilizador via scanf. Exercício 5.6 (Tabuada) Escreva um programa em C que apresente no ecrã a tabuada de N. Para isso deverá pedir ao utilizador o valor de N que deverá ser obrigatoriamente maior ou igual 1 e menor ou igual a 10. A tabuada apresentada é o exemplo para N = 2. 2 2 2 2 2 2 2 2 2 2 x x x x x x x x x x 1 2 3 4 5 6 7 8 9 10 = = = = = = = = = = 2 4 6 8 10 12 14 16 18 20 Deverá usar a função tabuada, cujo protótipo a seguir se apresenta e que escreve no ecrã a tabuada do inteiro passado como parâmetro: void tabuada (int); Exercício 5.7 (Quadrado de números) Escreva um programa em C que apresente no ecrã um quadrado de números como o que se segue. Para isso deverá pedir ao utilizador o valor de N que deverá ser obrigatoriamente maior ou igual 2. O quadrado apresentado é o exemplo para N = 5. 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 Deverá usar a função quadrado, cujo protótipo a seguir se apresenta e que escreve no ecrã um quadrado do tipo anterior onde o inteiro passado como parâmetro é o número de linhas: void quadrado (int); Exercício 5.8 (Árvore de Natal) Escreva um programa em C que desenhe no ecrã uma árvore de Natal como a que se segue. * *** ***** ******* ********* *********** ************* *** *** *** *** Deverá usar a função escreveCaracter, cujo protótipo a seguir se apresenta e que escreve o caracter passado no primeiro parâmetro tantas vezes quantas forem passadas no segundo parâmetro: void escreveCaracter (char, int); Exemplo: escreveCaracter (‘*’, 13) escreve 13 vezes o caracter ‘*’ no ecrã. Deverá também pedir ao utilizador: • o valor de B que representa o número de asteriscos (*) na base da árvore. O valor de B deverá ser obrigatoriamente ímpar e maior ou igual 3. • o valor de L e A que representam, respectivamente a largura e a altura do tronco da árvore. A largura do tronco L deverá ser pelo menos 1 asterisco, deverá ser obrigatoriamente ímpar e não poderá ultrapassar metade de B, isto é metade do número de asteriscos da base. A altura do tronco A deverá ser pelo menos 2 asteriscos e também não deverá ultrapassar metade de B. Em caso de valores inválidos o programa deverá apresentar um erro e voltar a pedi-los. O exemplo da árvore acima tem uma base com B = 13 asteriscos, um tronco com largura L = 3 asteriscos e altura A = 4 asteriscos. Exercício 5.9 (Pirâmide de números) Escreva um programa em C que apresente num ecrã uma pirâmide de números como a que se segue. Para isso deverá pedir ao utilizador o valor de N que deverá ser obrigatoriamente maior ou igual 2. A pirâmide apresentada é o exemplo para N = 5. 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 Deverá usar as funções com os protótipos seguintes: void escreveCaracter (char, int); • escreve o carácter passado no primeiro parâmetro tantas vezes quantas forem passadas no segundo parâmetro. void escreveNumerosAsc (int, int); • escreve os números inteiros entre o primeiro parâmetro e o segundo em ordem crescente. void escreveNumerosDesc (int, int); • escreve os números inteiros entre o primeiro parâmetro e o segundo em ordem decrescente. Exercício 5.10 (Pirâmide de números invertida) Altere o programa anterior para desenhar uma pirâmide de números invertida. 1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1 Exercício 5.11 (Triângulos) Construa as seguintes funções: void escreveCaracter (char, int); • escreve o carácter passado no primeiro parâmetro tantas vezes quantas forem passadas no segundo parâmetro. void triangulo1 (int); • Recebe o número de caracteres que formam a base de um triângulo rectângulo. Desenha o triângulo usando a função escreverCaracter. Por exemplo, se base = 5, o triângulo a criar deve ser o seguinte: T TT TTT TTTT TTTTT void triangulo2 (int base); • Recebe o número de caracteres que formam a base de um triângulo rectângulo. Desenha o triângulo usando a função escreverCaracter. Por exemplo, se base = 5 o triângulo a criar deve ser o seguinte: TTTTT TTTT TTT TT T A função escreverCaracter deve ser usada dentro das funções triangulo1 e triangulo2 para escrever os caracteres ' ' (espaço) e 'T' (letra T maiúscula). O programa principal deve pedir ao utilizador o tamanho da base e chamar as funções triangulo1 e triangulo2 para construir os triângulos. EXEMPLO DE INPUT/OUTPUT: Introduza o tamanho da base: 6 T TT TTT TTTT TTTTT TTTTTT TTTTTT TTTTT TTTT TTT TT T Exercício 5.12 (Triângulos – versão 2) Altere as funções do exercício anterior para desenhar os seguintes triângulos e produzir o output que se segue quando o tamanho da base é 6: TTTTTT TTTTT TTTT TTT TT T T TT TTT TTTT TTTTT TTTTTT