Introdução à Programação
1ª Frequência
1998/1999, 1º semestre
bool f1(const int a, const int b)
{
return a <= b;
}
int f2(int m[], int n, int& a)
{
...
}
int main()
{
const int ci = 10;
int i, i1 = 1, i2;
float f;
char c;
bool b;
int m1[10];
...
}
int f3(int n, int& a)
{
...
}
V f = 3456;
É possível atribuir um valor aritmético inteiro a uma variável de vírgula flutuante. Neste caso o valor int é convertido num float antes da atribuição.F ci = 4;
Não se pode alterar o valor de uma constante.F m1 = 0;
Não se pode atribuir um inteiro a uma matriz de inteiros. Teria de se especificar um posição determinada (indexando a matriz).V i = i1;
[cotação: 2]
b) O que aparece no ecrã depois de executar o código que se segue?
i = 3;F A
if(i > 0)
if(i > 10)
cout << "A";
else
cout << "B";
else
cout << "C";
[cotação: 1,5]
c) Quais das seguintes invocações da função f1() são válidas?
V bool x = f1(4, 10);
Como f1() tem dois parâmetros do tipo int, é possível passar-lhe dois argumentos com valor do tipo int.V bool x = f1(m1[0], 10);
O mesmo. Sendo m1 uma matriz de int, m1[0] é um int (o valor do primeiro elemento da matriz).F bool x = f1(m1, i2);
?Não se pode passar uma matriz como argumento no lugar de um parâmetro do tipo int.[cotação: 1,5]
d) O que aparece no ecrã depois de executar o código que se segue?
void f4(int a, int& b)V 10 0
{
a = 1;
b = 0;
}
int main()
{
int x = 10, y = 20;
f4(x, y);
cout << x << " " << y << endl;
}
?As variáveis x e y são passadas a f4() por valor e referência, respectivamente. Assim, só y é alterada.[cotação: 1]
e) Se a função f2() for chamada na função main() do seguinte modo: int x = f2(m1, i1, i2);, quais das seguintes instruções podem constar no corpo da função f2()?
V n = a;
A variável n é um parâmetro não constante de f2() do tipo int. A variável a é uma referência para um int não constante.F i1 = i2;
?As variáveis i1 e i2 são invisíveis dentro da função f2().[cotação: 1]
Questão 2
2.a) Considere uma função float média(const float m[], const int n) que devolve a média dos valores guardados na matriz m de dimensão n. Dada a pré-condição PC: n >= 0, desenvolva a CO (condição objectivo), a CI (condição invariante), a G (guarda), a inicialização, o progresso e a acção do ciclo necessário na função, admitindo que esta começa com a definição duma variável local (float média = ??;) e termina devolvendo o seu valor (return média;). Note que a CO do ciclo pode ser diferente da CO da função.
[cotação: 3]
CO (da função): média = (S j : 0 <= j < n : m[j]) / n2.b) Crie o código C++ para a função acima baseado no desenvolvimento efectuado na alínea anterior.
CO (do ciclo): média = (S j : 0 <= j < n : m[j])
CI: média = (S j : 0 <= j < i : m[j]) e 0 <= i <= n
G: i <> n
inic: int i = 0; float média = 0.0f;
prog: ++i
acção: média += m[i];
[cotação: 4]
float média(const float m[], const int n)2.c) Crie um pequeno programa para testar a função média().
{
float média = 0.0f;
for(int i = 0; i != n; ++i)
média += m[i];média /= n;
return média;
}
[cotação: 3]
int main()Questão 3
{
int m[5] = {1, 3, 4, 2, 1};
cout << média(m, 5) << endl;
}
Diga quais as vantagens e as desvantagens da utilização de variáveis globais.
[cotação: 3]
Ver folhas teóricas Capítulo 3, Secção 3.2.8.