MAC 115 – Introdução à Computação Instituto de Física – Segundo Semestre de 2002 - Noturno 2ā Prova – 6/12/2002

Nome do aluno: Turma: Assinatura: Professor(a): Nō USP: Curso:

Instruções:

1. Não destaque as folhas deste caderno.

2. A prova pode ser feita a lápis. Cuidado com a legibilidade.

3. Há 3 questões na prova. Verifique antes de começar a prova se o seu caderno de questões está completo.

4. Não é permitido o uso de folhas avulsas para rascunho.

5. Nas questões que envolvem elaboração de programas, coloque comentários suficientes para que o programa seja facilmente compreendido.

6. Não é necessário apagar rascunhos no caderno de questões.

Não escreva nesta parte da folha

Questão  Nota

1 2 3 Total

BOA SORTE!

\underline{Questão 1} (valor: 3.0)

Simule a execução do programa abaixo destacando a sua saída (o que vai sair na tela).

#include <stdio.h>
#define NMAX 10
void soma(int B[][NMAX], int k);
int main()
{
int i, j, x;
int A[NMAX][NMAX];
x = 4;
for (i = 0; i < 2; i++)
  for (j = 0; j < 2; j++)
    A[i][j] = i + j;
soma(A, x);
printf("%d %d\n", A[0][0], A[0][1]);
printf("%d %d\n", A[1][0], A[1][1]);
printf("%d\n", x);
return 0;
}
void soma(int B[][NMAX], int k)
{
int i, j, x;
x = 2;
for (i = 0; i < 2; i++)
  for (j = 0; j < 2; j++)
    B[i][j] = B[i][j] + k;
}

\underline{Questão 2} (valor: 3.0)

(a) Escreva uma função de protótipo

  int pertence(double x, double B[], int m);

que recebe como parâmetros um real x, um vetor real B com m elementos, e verifica se x ocorre em B.

(b) Escreva uma função de protótipo

  int contido(double A[], double B[], int n, int m);

que recebe como parâmetros um vetor real A com n elementos e um vetor real B com m elementos, ambos representando conjuntos, e verifica se A ⊆ B, isto é, se A está contido em B. Use a função do item (a), mesmo que você não a tenha feito.

(c) Escreva um programa que, usando a função do item (b), determina se dois conjuntos dados são iguais (lembre que A = B se e somente se A ⊆ B e B ⊆ A).

\underline{Questão 3} (valor: 4.0)

(a) Escreva uma função de protótipo

  double vmed(double A[][NMAX], int m, int n, int i, int j);

que recebe como parâmetros uma matriz real A com m linhas e n colunas e uma posição (i, j) da matriz, e devolve a média aritmética dos vizinhos de A[i][j]. (Em geral, essa média é a média aritmética dos números A[i − 1][j], A[i + 1][j], A[i][j − 1], A[i][j + 1]. Nas bordas da matriz, essa média é uma média de menos de quatro números; por exemplo, no caso em que (i, j) = (0, 0), a média deve ser dos números A[1][0] e A[0][1].)

(b) Escreva uma função de protótipo

  void med(double A[][NMAX], int m, int n, double M[][NMAX]);

que recebe como parâmetro uma matriz real A com m linhas e n colunas e devolve na matriz M uma nova matriz, obtida de A substituindo-se cada entrada pela média aritmética de seus vizinhos. Para isto, utilize a função do item anterior, mesmo que você não a tenha feito.

(c) Escreva um programa que lê inteiros k, m e n e uma uma matriz real A com m linhas e n colunas, e que imprime k + 1 matrizes, a saber, as matrizes A^{(j)} obtidas pela aplicação da função med() j vezes, onde 0 ≤ j ≤ k. (Note que A^{(0)} é a matriz original A.)