ALGORITMOS Y ESTRUCTURA DE DATOS (CC182) Práctica Calificada Nro. 1 Alumno: Eduardo Renato Ventura Chancafe Duración: 120 minutos Sección: SS33 No escribir en estos recuadros Pregunta 1 Pregunta 2 Pregunta 3 Pregunta 4 Nota = 5,0 5,0 5,0 5,0 20,0 Instrucciones: El estudiante no puede hacer uso de apuntes de clase, libros, etc. No puede hacer uso de usb o cualquier medio de almacenamiento digital. Todo apunte es personal, está prohibido prestar o intercambiar apuntes. Solo puede usar visual studio y windows explorer durante el examen El proyecto deberá ser almacenado en la carpeta y con el nombre que indique el profesor. Anote en el recuadro el número de la PC Número de PC: 1 Este dato es de vital importancia, si Ud. no lo indica, no habrá manera de saber cuál es su examen y por tanto no podrá ser calificado y Ud. tendrá como nota CERO. Durante el examen, sólo puede utilizar un Entorno de Desarrollo C++ (Visual Studio 2019) y el Explorador del Windows. Al finalizar del examen el estudiante deberá entregar el texto del examen PREGUNTA 1: (5 PUNTOS) El siguiente código calcula la raíz cuadrada de un numero entero. Si el número no es un cuadrado perfecto (no hay raíz cuadrada entera), entonces devuelve -1. Lo hace mediante suposiciones sucesivas. Si N es 100, primero adivina si N es 50. ¿Demasiado alto? Pruebe algo más bajo, a mitad de camino entre 1 y 50 ,etc. ¿Cuál es el big-o?, Sustentar y evidenciar análisis. for (i=1; i<TAM; i++) // 1 + n(1 + INTERNA + 2) for (j=0 ; j<TAM - 1; j++) 1 + n(1 + MAX(IF) + 2) if (lista[j] > lista[j+1]) (1 + 1 + 1) temp = lista[j]; (1 + 1) lista[j] = lista[j+1]; (1 + 1 + 1) lista[j+1] = temp; (1 + 1 + 1) Podemos darnos cuenta que n por n se multiplicarán y el resto serán valores que no se tomarán en cuenta, por lo tanto, big-o = n^2 PREGUNTA 2 En un examen de suficiencia, cinco jurados emiten una nota entre cero y veinte. Para obtener el promedio final sólo se consideran las notas intermedias, descartándose la más baja y la más alta. Implementar un programa en C++, utilizando templates para calcular el promedio de notas. #include <iostream> #include <time.h> using namespace std; template<typename T> T* ordenar_arreglo(T notas[], T n) { //ordenamos arreglo int aux = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n ; j++) { if (notas[j] < notas[i]) { aux = notas[i]; notas[i] = notas[j]; notas[j] = aux; } } } return notas; } template<typename T> T suma_elementos(T notas[], T n) { int suma = 0; for (int i = 0; i < n; i++) { suma += notas[i]; } return suma; } template<typename T> T mayor(T notas[], T n) { T mayor = notas[n]; return mayor; } template<typename T> T menor(T notas[], T n) { return notas[0]; } int main() { const int n = 5; int notas[n]; for (int i = 0; i < n; i++) { notas[i] = rand() % 20; } for (int i = 0; i < n; i++) { cout << notas[i] <<" "; } cout << endl; int* arreglo_ordenado = ordenar_arreglo<int>(notas, n); for (int i = 0; i < n; i++) { cout << arreglo_ordenado[i] << " "; } cout << endl; cout << "Promedio de notas es:" << (suma_elementos(notas, n) mayor<int>(arreglo_ordenado, n-1) - menor<int>(arreglo_ordenado, n-1)) / 3; } system("pause"); PREGUNTA 3 Escribir un programa recursivo que calcule la suma de los dígitos de un número entero mayor a cero y mayor a 2 dígitos. #include <iostream> using namespace std; int suma_digitos(int n) { int digito = n % 10; if (digito%10 == 0) { return 0; } return digito + suma_digitos(n/10); } int main() { cout << suma_digitos(134); system("pause"); } PREGUNTA 4 Escribir un programa utilizando expresiones Lambda que reciba como parámetro 3 números enteros. La función retorna el número menor. #include <iostream> using namespace std; int main() { auto f = [](int x, int y, int z) { if ((x < y) && (x < z)) { return x; } else if ((y < x) && (y < z)) { return y; } else { return z; }(3, 4, 5); }; cout<<f(3,4,5); system("pause"); } PUNTAJE: Aplica para todas las preguntas Categoría Sobresaliente (1.25) Regular (0.75) No aceptable (0) Funcionalidad Sólo funciona en casos El programa funciona específicos las variables correctamente y todas No no están validadas y las las variables de entrada funciona ningún caso. condiciones no son están validadas. correctas. Razonamiento lógico Es un código compacto muy depurado. El programa contempla algunas de las condiciones y no es compacto. No hay razonamiento lógico. No tiene sangría pero en El código está escrito algunos bloque en forma plana sin principales si hay sangrías y sin saltos sangría. de línea. Estructuración del código Si utiliza sangría, espacios e interlineado que dé mayor claridad. Documentación La presentación incluye La presentación está objetivos bien definidos incompleta, los documentados y partes objetivos no definen bien del código bien el código en la documentado. documentación. Total 5 3 No es aceptable la documentación. 0