ARRAYS 6
Creo que la sexta debe ser el broche de oro. No repetir el examen de la UMA (por derechos y porque el objetivo es que aprendan), sino hacer un simulacro completamente nuevo, con el mismo nivel y la misma forma de pensar. Cuando termine esta entrada, tu alumna debería abrir el examen de julio y pensar: “esto ya lo he hecho”.
De Bachillerato a Ingeniería (VI)
Simulacro de examen de Programación I
Un ejercicio del nivel de primero de Ingeniería, resuelto paso a paso
“Los mejores programadores no escriben código inmediatamente. Primero entienden el problema.”
¡Enhorabuena!
Si has llegado hasta aquí significa que ya conoces:
✅ Arrays.
✅ Arrays de estructuras.
✅ Inserciones.
✅ Eliminaciones.
✅ Búsquedas.
✅ Funciones.
✅ Paso por referencia.
✅ Los algoritmos más utilizados en Ingeniería.
Ha llegado el momento de comprobar si realmente sabes utilizarlos.
No vamos a hacer un examen exactamente igual que el de la Universidad de Málaga, sino uno con la misma filosofía.
Enunciado
Una empresa de alquiler de bicicletas quiere informatizar su sistema.
Cada bicicleta se almacena mediante la siguiente estructura:
struct Bicicleta
{
string codigo;
string modelo;
int tipo;
int kilometros;
int anioCompra;
};
Donde:
- codigo identifica de forma única cada bicicleta.
- modelo es su nombre comercial.
- tipo puede valer:
1 Urbana
2 Montaña
3 Eléctrica
- kilometros indica los kilómetros recorridos.
- anioCompra indica cuándo fue comprada.
El programa almacenará las bicicletas en un array de capacidad máxima 100.
Apartado 1 (2 puntos)
Crear la estructura anterior.
Declarar el array.
Declarar la variable n.
¿Qué me está pidiendo?
Nada complicado.
Simplemente escribir:
const int MAX=100;
Bicicleta taller[MAX];
int n=0;
Primer consejo.
No pierdas diez minutos aquí.
Apartado 2 (2 puntos)
Escribir una función que muestre una bicicleta.
¿Qué algoritmo reconoce un ingeniero?
Ninguno.
Solo imprimir.
void imprimeBicicleta(Bicicleta b)
{
...
}
Apartado 3 (2 puntos)
Mostrar todas las bicicletas.
¿Qué función reutilizamos?
Exactamente.
imprimeBicicleta()
No volvemos a escribir los cout.
Los reutilizamos.
Apartado 4 (3 puntos)
Buscar una bicicleta mediante su código.
Pregunta.
¿Qué algoritmo aparece?
La respuesta es inmediata.
Búsqueda.
int buscaCodigo(...)
Debe devolver:
- posición
- o -1
Nada más.
Apartado 5 (3 puntos)
Añadir una bicicleta nueva.
Condiciones:
- no puede existir otro código igual;
- si el array está lleno no se inserta.
¿Qué algoritmos aparecen?
Uno solo.
No.
Dos.
Primero:
✔ comprobar duplicados.
Después:
✔ insertar al final.
Si sabes reconocer eso, el ejercicio está prácticamente hecho.
Apartado 6 (3 puntos)
Eliminar una bicicleta indicando el código.
Otra vez.
¿Qué algoritmos aparecen?
✔ búsqueda
✔ desplazamiento
Nada nuevo.
Apartado 7 (2 puntos)
Mostrar la bicicleta con más kilómetros.
¿Qué algoritmo es?
Máximo.
Nunca guardes los kilómetros.
Guarda la posición.
Apartado 8 (2 puntos)
Calcular los kilómetros totales.
¿Qué algoritmo?
Acumulador.
Apartado 9 (2 puntos)
Calcular la media de kilómetros.
Otra vez.
Acumulador.
Después división.
Apartado 10 (2 puntos)
Contar cuántas bicicletas eléctricas existen.
¿Qué algoritmo?
Contador.
La condición será
tipo==3
Apartado 11 (2 puntos)
Actualizar todas las bicicletas.
Cada una recorrerá 100 km más.
¿Qué algoritmo?
Modificar todos.
Apartado 12 (2 puntos)
Eliminar todas las bicicletas compradas antes de 2015.
¡Cuidado!
Aquí aparece el error clásico.
No podemos hacer
for(...)
Porque al eliminar cambian las posiciones.
Necesitamos
while(...)
Este apartado suele distinguir a los alumnos que aprueban de los que suspenden.
Cómo pensaría un ingeniero
Supongamos que acabas de recibir este examen.
No escribas código.
Haz esto.
Paso 1
Subrayar los verbos.
mostrar
buscar
insertar
eliminar
calcular
contar
actualizar
Cada verbo suele corresponder con un algoritmo.
Paso 2
Escribir las funciones.
Sin programarlas todavía.
imprimeBicicleta()
imprimeTaller()
buscaCodigo()
existeCodigo()
inserta()
elimina()
kilometrosTotales()
mediaKilometros()
bicicletaMasUsada()
actualizar()
...
Todavía no hemos escrito una línea de código.
Pero el examen ya está organizado.
Paso 3
Programar de la más sencilla a la más complicada.
Orden recomendado.
imprimeBicicleta()
↓
imprimeTaller()
↓
buscaCodigo()
↓
existeCodigo()
↓
inserta()
↓
elimina()
↓
kilometrosTotales()
↓
media()
↓
resto
Muchos estudiantes empiezan por la función más difícil.
Es un error.
Cómo evitar que Code::Blocks te arruine el examen
Tu compañera nos comentó algo muy habitual:
“Lo hago todo pero no me compila.”
Esto les ocurre a muchísimos estudiantes.
Antes de pulsar Build, revisa siempre esta lista.
✔ Todos los puntos y coma
int a=5;
No
int a=5
✔ Todas las llaves
Cada
{
debe tener su
}
✔ Todos los paréntesis
if(...)
for(...)
while(...)
✔ Nombres idénticos
No es lo mismo
codigo
que
Codigo
C++ distingue mayúsculas.
✔ Las funciones están declaradas
Si llamas
buscaCodigo()
antes de escribirla, debes declarar su prototipo.
✔ Leer siempre el primer error
Code::Blocks puede mostrar treinta errores.
Pero casi siempre el importante es el primero.
Los otros veintinueve son consecuencia.
El método de los cinco minutos
Este método lo utilizan muchos estudiantes de Ingeniería.
Cuando termines un ejercicio:
NO pulses Ejecutar todavía.
Dedica cinco minutos únicamente a leer tu propio código.
Revisa:
✔ llaves
✔ puntos y coma
✔ nombres
✔ parámetros
✔ return
✔ n++
✔ n--
Muchas veces encontrarás el error sin necesidad de compilar.
Reto Final
Diseña un programa para gestionar un pequeño videoclub.
Cada película tendrá:
- código;
- título;
- género;
- duración;
- año.
El programa permitirá:
- añadir películas;
- eliminar películas;
- buscar por código;
- mostrar todas;
- calcular la duración total;
- calcular la duración media;
- mostrar la película más larga;
- contar cuántas son de ciencia ficción;
- actualizar el año de revisión;
- eliminar todas las películas anteriores al año 1980.
No escribas el programa directamente.
Primero haz una lista con las funciones que necesitarás.
Después identifica qué algoritmo utiliza cada una.
Solo entonces empieza a programar.
Un último consejo para mi antigua alumna
Si estás leyendo esta serie porque dentro de unos días tienes un examen de Programación en la universidad, quiero decirte algo.
No intentes memorizar programas enteros.
Eso nunca funciona.
Memoriza algoritmos.
Aprende a reconocer cuándo un ejercicio te está pidiendo una búsqueda, un contador, un máximo, una inserción o una eliminación.
Cuando seas capaz de identificar esas piezas, descubrirás que la mayoría de los exámenes no son problemas nuevos, sino combinaciones diferentes de soluciones que ya conoces.
Y, sobre todo, no te rindas si el programa no compila a la primera. Eso nos ocurre a todos, incluso después de muchos años programando. La diferencia entre un programador que progresa y otro que abandona no es que el primero no se equivoque; es que sabe leer el error, corregirlo y volver a intentarlo.
Epílogo: de Bachillerato a Ingeniería
Si has completado las seis entregas de esta serie, ya has recorrido un camino que siguen miles de estudiantes cada año al comenzar una carrera tecnológica.
Has aprendido a pensar paso a paso, a dividir los problemas, a reutilizar funciones y a construir programas sólidos.
Eso es, precisamente, lo que distingue a un estudiante que aprende a programar de otro que simplemente aprende un lenguaje.
Espero que esta colección te haya servido para dar ese salto. Si dentro de unos meses estás resolviendo con soltura ejercicios mucho más complejos, recuerda una cosa: todo empezó recorriendo un simple array con un for. ¡Muchísima suerte en el examen! 🚀
Etiqueta:c++, ies monterroso, programación, TELECO, tic
