Recibo:
Nome: _______________________________________________

Nº ______________________

Ass. Docente: ________________________________________


Identificação:

Nome: _______________________________________________

Nº ________________

Turma: ____________


ISCTE - IGE/ETI

Programação I/Introdução à Programação

1ª Frequência (exemplo)

1998/1999,  1º semestre


 

Notas:

Questão 1
  1. Assinale com V (Verdadeiro) as expressões que estão correctas e com F (Falso) as que estão incorrectas.
  2. Deve preencher todos os espaços indicados por um sublinhado (___) com V ou F.  Qualquer espaço não preenchido será considerado como uma resposta errada.
  3. Qualquer alínea pode ter zero ou mais respostas correctas.  Cada resposta correctamente assinalada vale 0,5 valores.
  4. Em todos os casos em que não é explicitamente referida a localização de uma instrução, considere que esta é dada na função main() do programa seguinte:
  5. #include<iostream>
    using namespace std;
     
    bool f1(int a, int b)
    {
        if(a > 0)
            return false;
        return true;
    }
     
    int f2(int m[], int n, int& a)
    {
        ...
    }
     
    int main()
    {
        const int ci = 10;
        int i, i1, i2;
        float f;
        char c;
        bool b;
        int m1[10];
     
        ...
    }
     
    int f3(int n, int& a)
    {
        ...
    }
a)  Quais das seguintes atribuições são válidas?

__  c = A;

__  i = 5/6;

__  ci = 10;

__  m1[9] = 10;

 [cotação: 2]

b) De que tipo é o resultado da expressão i/2 == 0?

__  int

__  bool

__  float

 [cotação: 1.5]

h)  Quais das seguintes invocações da função f2() são válidas?

__  m1 = f2(m1, i1, i2);

__  int x = f2(i, i1, i2);

__  int x = f2(i1, i2, m1);

 [cotação: 1.5]

l) Dado o seguinte código

void f4(int a, int& b)

{
    a = 1;
    b = 0;
}
int main()
{
    int x = 2, y = 3;
    f4(x, y);
    cout << x << " " << y << endl;
}
quais os valores que são escritos no ecrã?

__  2 3

__  1 0

__  2 0

__  1 3

[cotação: 2]

Questão 2

2.a)  Crie um pequeno procedimento void LêMatriz(float m[], int n) que leia do teclado uma sequência de n valores dada pelo utilizador e os guarde na matriz m.  Assuma que n >= 0.

[cotação: 3]
 
 
 
 
 
 
 
 
 
 
 
 

2.b)  Considere uma função float norma(float m[], int n) que calcula a norma do vector m.  Recorda-se que a norma é a raiz quadrada da soma dos quadrados dos componentes dum vector.  Dada a PC (pré-condição) n > 0, desenvolva a CO (condição objectivo), a CI (condição invariante) e a G (guarda) para o ciclo necessário na função.  Indique também a inicialização, o progresso e a acção deste ciclo.

 [cotação: 2]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2.c)  Crie o código C++ para a função acima baseado no desenvolvimento efectuado na alínea anterior. Assuma que pode usar a função float sqr(float) para calcular o quadrado de um número e a função float sqrt(float) para calcular a raiz quadrada de um número.

 [cotação: 3]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2.d)  Crie um pequeno programa para testar as funções acima (viz. lêMatriz() e norma()).

[cotação: 2]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Questão 3
 
 

Elabore um pequeno texto (sucinto) sobre as diferenças entre a passagem de argumentos por valor e por referência.

[cotação: 3]