Programação em C
2012 / 2013
Exercícios
Funções
●
Escreva uma função para cantar os parabéns
#include <stdio.h>
void Parabens();
int main()
{
Parabens();
return 0;
}
/*
* Escreve os “parabens” no ecrã.
*
* Parâmetros: Nenhum
*
* Retorno: Nada
*/
void Parabens()
{
printf("Parabens a você\n");
printf("Nesta data querida\n");
printf("Muitas felicidades\n");
printf("Muitos anos de vida\n");
}
Programação em C
2012 / 2013
Exercícios
Funções
●
Escreva uma função para escrever um valor real
formatado com 2 casas decimais
#include <stdio.h>
void EscreverReal(double x);
int main()
{
EscreverReal();
return 0;
}
/*
* Escreve um real no ecrã com duas casas decimais.
*
* Parâmetros:
*
x – valor a escrever
*
* Retorno: Nenhum
*/
void EscreverReal(double x)
{
printf("%.2ld", x);
}
Programação em C
2012 / 2013
Funções
●
Exercícios
Escreva uma função que soma dois números
#include <stdio.h>
double Soma(double x, double y);
int main()
{
int valor = Soma(23.4, 12.3);
printf("A soma de 23.4 com 12.3 vale %d\n", valor);
return 0;
}
/*
* Devolve a soma dos dois valores passados como parâmetros.
*
* Parâmetros:
*
x, y – valores a somar
*
* Retorno: Soma dos dois valores passados como parâmetros.
*/
double Soma(double x, double y)
{
return x + y;
}
Programação em C
2012 / 2013
Exercícios – Triângulo Válido
Funções
●
Conceber uma função que permita determinar se três
valores são potencialmente os lados de um triângulo
–
Revisão de Geometria:
●
–
Existe um triângulo com lados A, B e C se a soma de quaisquer dois
lados é maior do que o terceiro
Análise do Problema
●
●
●
Decisão depende apenas da dimensão dos lados
A função toma a decisão a partir dos três valores fornecidos.
Resposta da função deve poder ser interpretada como valor lógico
Programação em C
2012 / 2013
Exercícios – Triângulo Válido
Funções
●
Conceber uma função que permita determinar se três
valores são potencialmente os lados de um triângulo
–
1ª Versão
int TrianguloValido(int a, int b, int c)
{
return (a + b > c);
}
–
Como Testar?
●
Conceber programa de teste
–
●
Escolher cuidadosamente dados de teste
–
●
Forma simples de fornecer dados de teste à função a testar
Testar todos os casos possíveis
Comparar resultados do teste com resultados esperados
Programação em C
2012 / 2013
Funções
●
Exercícios – Triângulo Válido
Programa de Teste (exemplo)
int main()
{
double a, b, c;
printf(“Validade de
printf(“Comprimento
scanf(“%lf”, &a);
printf(“Comprimento
scanf(“%lf”, &b);
printf(“Comprimento
scanf(“%lf”, &c);
um triangulo a partir dos comprimentos dos lados”);
do lado A: ”);
do lado B: ”);
do lado C: ”);
if (TrianguloValido(a, b, c)) {
printf(“Valido\n”);
}
else {
printf(“Invalido\n”);
}
}
Melhor seria ler dados de
teste de um ficheiro!
Programação em C
2012 / 2013
Exercícios – Triângulo Válido
Funções
●
Dados de Teste
–
Triângulos podem ser retos, agudos e obtusos
●
●
–
Relevante para a implementação?
Não custa inclui-los nos testes
3
6
7
agudo
5 12 13
retângulo
5 12 15
obtuso
Triângulos inválidos têm lado muito grande
●
●
Ordem não deveria importar
Incluir condições fronteira
–
Onde surgem erros com mais frequência
3
6 10
6 10
inválido
3
inválido
10
3
6
inválido
3
5
8
limite
5
8
3
limite
8
3
5
limite
Programação em C
2012 / 2013
Exercícios – Triângulo Válido
Funções
●
Resultados do Teste e Conclusões
–
Resultados
●
●
–
Corretos para triângulos válidos
Incorretos para alguns triângulos inválidos
Conclusões
●
●
●
●
3
6
7
válido
5
12
13
válido
5
12
15
válido
3
6
10
inválido
6
10
3
válido
10
3
6
válido
Implementação não considera reordenação 3 5 8 inválido
5
8
3
válido
Tipo de erro muito frequente
8
3
5
válido
Em geral apenas detetado no teste
Pode facilmente passar sem deteção se dados de teste não forem
adequados
Programação em C
2012 / 2013
Exercícios – Triângulo Válido
Funções
●
2ª Versão
int TrianguloValido(int a, int b, int c)
{
return ( (a + b > c) &&
(a + c > b) &&
(b + c > a) );
}
●
Resultados do Teste
–
–
Note que não prova que funciona
sempre!
Apenas prova que funciona com os
dados testados
3
6
7
válido
5
12
13
válido
5
12
15
válido
3
6
10
inválido
6
10
3
inválido
10
3
6
inválido
3
5
8
inválido
5
8
3
inválido
8
3
5
inválido
Download

06 - Funções I - Programação em C