Prévia do material em texto
Prova 2 – Introdução a Ciência da Computação (Engª Elétrica)
(2,5) 1) Você pediu que o estagiário, do setor de informática da empresa onde você
trabalha, desenvolvesse um procedimento em C++ para multiplicar duas matrizes
genéricas. Sinalize os erros de sintaxe e/ou lógica no código desenvolvido pelo
estagiário e fornecido a seguir:
template <class T>
void mult_AbyB(vector<vector<T>> a, vector<vector<T>> b,
vector<vector<T>> c)
{
c.resize(0)
for (unsigned int i=0, i<a.size(), i++)
{
c.resize(i+1)
for (unsigned int j=0, j<a[i].size(), j++)
{
double soma = 0.0
for (unsigned int k=0, k<a[i].size(), k++)
{
soma = soma + a[i][j]*b[k][j]
}
c[i].push_back(soma)
}
}
}
Reposta 1
template <class T>
void mult_AbyB(vector<vector<T>> a, vector<vector<T>> b ,
vector<vector<T>> & c)
{
c.resize(0);
for(unsigned int i=0; i<a.size(); i++)
{
c.resize(i+1);
for(unsigned int j=0; j<a[i].size(); j++)
{
double soma = 0.0;
for(unsigned int k=0;k<a[i].size();k++)
{
soma += a[i][k]*b[k][j];
}
c[i].push_back(soma);
}
}
}
(2,5) 2) O mesmo estagiário, citado no enunciado da primeira questão desta prova, foi
solicitado para escrever uma função em C++ que retornasse o valor do polinômio de
grau n calculado para um dado valor real x, isto é, o valor de
𝑝(𝑥) = 𝑎0 + 𝑎1𝑥 + 𝑎2𝑥
2 + ⋯ + 𝑎𝑛𝑥
𝑛
Considerando que os coeficientes 𝑎𝑖 = 0, 1, 2. . . 𝑛 do polinômio estejam armazenados
em um vetor identificado por coef, identifique os possíveis erros de sintaxe e/ou de
lógica no código apresentado pelo estagiário e fornecido a seguir:
double p(double x, vector<double> & coef)
{
double produto = 0.0;
for (unsigned int i=0; i <= coef.size(); i++)
{
soma = soma + produtor * coef[i]
produto = produto * x
}
return (produto)
}
Resposta 2
double p(double x, vector<double> coef)
{
double produto = 1;
double soma = 0.0;
for(unsigned int i=0; i<coef.size(); i++)
{
soma += produto*coef[i];
produto *= x;
}
}
(2,5) 3) Indique as modificações necessárias no procedimento imprimeVetor, fornecido
abaixo, para exibir os elementos do vetor de entrada em uma mesma linha, separados
por vírgula e um ponto final após o último elemento.
template <class T>
void imprimeVetor (vector <T> & v, ostream & saída)
{
for (int i = 0; i < v.size(); i = i + 1)
{
saida << v[i] << endl;
}
}
Resposta 3
template <class T>
void imprimeVetor(vector<T> & v, ostream & saida)
{
for(int i=0;i<v.size();i++)
{
saida<<v[i];
if(i == v.size()-1)
{
saida<<".";
}
else
{
saida<<",";
}
}
}
(2,5) 4) O pseudocódigo fornecido a seguir descreve o algoritmo para calcular o máximo
divisor comum de um par de números inteiros não-negativos. Escreva a
implementação C++ deste pseudocódigo.
FUNÇÃO mdc (i, j inteiros não-negativos)
DECLARE g inteiro não-negativo
g ← j
ENQUANTO (g não divide simultaneamente i e j) FAÇA
INÍCIO
g ← g – 1
FIM
RETORNE g
FIM
Resposta 4
int mdc(unsigned int i,unsigned int j)
{
unsigned int g;
g=j;
while(i%g!=0 || j%g!=0)
{
g--;
}
return g;
}