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
Download

Programação - Departamento de Informática da Universidade da