Uploaded by Eduardo Ventura Chancafe

Práctica del curso Algoritmo y Estructura de Datos de la UPC

advertisement
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
Download