Baixe o app para aproveitar ainda mais
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; }
Compartilhar