Questões com teste de mesa
Teste de mesa é um recurso que objetiva avaliar o conhecimento técnico dos recursos da linguagem de programação. É mais fácil fazer o teste de mesa do que elaborar o algoritmo, sendo a elaboração de uma solução algorítmica algo que exige maior capacidade do programador. Mesmo assim, é importante avaliar, ou pelo menor iniciar, com o entendimento de um código e a verificação do real entendimento através do teste de mesa, onde deve-se indicar qual será a saída do algoritmo para uma determinada entrada.
A seguir, dois algoritmos em linguagem C são apresentados e solicitado o teste de mesa para os mesmos. Não será dito o que os algoritmos realizam, cabendo acompanhar cada passo do algoritmo para poder determinar a saída. Uma das questões envolve vetores e a outra envolve ponteiros, sendo que ambas envolvem o conhecimento de função.
Questão utilizando vetor
O algoritmo envolve a manipulação básica de um vetor. Ele avalia o real entendimento do uso da estrutura de repetição for, bem como uma chamada simples de função envolvendo um vetor como argumento.
Código
#include <stdio.h>
void teste(int v[], int tam) {
int i;
for (i = 0; i < tam; i++) {
v[i] = 0;
}
}
int main() {
int vet[6] = {-5, 3, 2, 9, 2, 2}, i, j = 4, valores = 0;
for (i = 0; i < j; i++) {
if (vet[i] == 2) {
valores = valores + 2;
}
}
printf("%i %i \n", valores, i);
for (i = 0; i < 6; i++) {
vet[i] = j;
j = j - 1;
}
for (i = 0; i < 6; i++) {
printf("%i ", vet[i]);
}
printf("\n");
teste(vet, 3);
for (i = 0; i < 6; i++) {
printf("%i ", vet[i]);
}
return 0;
}
Resultado esperado
Questão utilizando ponteiros
O algoritmo envolve inicialmente o conhecimento básico de ponteiros, mas também sua utilização em funções. Passagem por valor e referência são tratadas no algoritmo.
Código
#include <stdio.h>
float aula(int a, int b) {
return b / (a + 1);
}
int oitenta() {
int a, b, c;
a = 8456;
return (a * b) / (c * 2);
}
void troca(int tam, int *a) {
int b = tam + 2;
*a = b;
tam = *a;
}
int main() {
int tam = 0, *aux, b = 5;
float teste;
aux = &b;
printf("%i \n", *aux);
troca(tam, &b);
printf("%i %i\n", tam, b);
teste = aula(tam, *aux);
printf("%f", teste);
return 0;
}
Resultado esperado
algoritmo “algoritmo_que_faz_algo”
var
var99, var103, var7 : inteiro
var55 : real
var0 : inteiro
inicio
var0 <- 3
leia(var103)
leia(var99)
leia(var7)
var55 <- (var99 + var103 + var7) / var0
escreva(var55)
fimalgoritmo
Não vejo razão para utilizar a variável “var0”. Como ela é constante, você poderia fazer simplesmente:
var55 <- (var99 + var103 + var7) / 3