En esta asignatura soy responsable de un grupo de teoría y de dos de prácticas.

En mi grupo de teoría utilizo estos apuntes.

Además he preparado una colección de problemas cuyos enunciados están disponibles aquí. Dada la importante cantidad de ejercicios de examen de que se dispone, se hará un uso marginal de este documento.

Para trabajar en casa puedes utilizar  dev-cpp como Entorno Integrado de Desarrollo. Es gratuito y ocupa menos de 20MB. He preparado unos apuntes que explican a nivel introductorio el funcionamiento de este programa. No imprimir este documento, se ampliará a lo largo del curso. Las capturas de pantalla se ven mucho mejor en la versión en html del mismo documento.

Aquí iré publicando los ejercicios que se hagan en clase y cualquier otro material que vaya surgiendo a lo largo del curso.

Exámenes de otros años.

Luis Junco tiene en su página los exámenes de otros años recopilados en varios ficheros comprimidos. en la misma página hay materiales interesantes en la zona de descargas.

2003-2004.
2004-2005.
2005-2006.

Prácticas.
NUEVO: notas.
Están identificadas por las iniciales. Primero la del nombre.

Guión para la primera práctica (es autoexplicativo). guion1.cpp

Guión para la segunda práctica:
Consiste en la resolución de los siguientes ejercicios de examen.
Expresión del producto de Wallis

Notas: Debe pensar como obtener cada termino en función del anterior y un criterio de parada adecuado.
Fórmula de Vieta

Si siente curiosidad, en la Wikipedia se puede encontrar más información sobre todo esto.

Guión para la tercera práctica.

La ley electoral utiliza el sistema DONT para el cálculo del número de candidatos electos de cada una de las candidaturas presentadas.
En primer lugar se eliminan aquellas candidaturas que obtengan menos del 5% del número total de votos.
Seguidamente se construye una tabla en la cual cada columna contiene el número de votos de la candidatura dividido entre 1,2,3... y así sucesivamente, hasta completar P columnas, siendo P el número de candidatos electos. De entre todos estos números se seleccionan los P mayores.
En un pueblo de Asturias con 11 concejales se presentaron 7 candidaturas y cada una de ellas obtuvo los votos reflejados en la columna N de la tabla. Supongamos que no existen votos nulos o blancos. El número total de votos fue pues de 9140, así que se eliminan las candidaturas que obtuvieron menos de 457 votos, para ellos se hacen cero sus votos.

tabla

Los 11 mayores números que aparecen en la tabla son: 3505 ­ 2692 ­ 1753 ­ 1465 ­ 1346 ­ 1168 ­
897 ­ 876 ­ 733 ­ 701 ­ 693 con lo que la candidatura 0 obtuvo cinco concejales, la 2 uno, la 3 tres y
la 5 dos concejales.

NOTA:
En lugar de construir una tabla como la de arriba, es mejor utilizar un vector en el que se almacenen los datos de la primera columna y en cada iteración, se actualizan las casillas correspondientes, es decir, se parte de lo siguiente (después de eliminar los votos de las candidaturas que obtuvieron menos del 5% de los votos):

3505
0
693
2692
0
1465
492

El mayor es 3505, entonces se suma un concejal a la candidatura 0 y se divide 3505 entre 2 (en la tabla aparece redondeado hacia arriba, en la práctica divida entre 2 sin mas). La siguiente vez que se dividan los votos de esta candidatura se hará entre 3. La tabla ahora queda:

1753
104
693
2692
189
1465
492

El mayor ahora es 2692, se suma un concejal a la candidatura 3 y se divide 2692 entre 2, 3505 entre 3 y asi sucesivamente.

En resumen:

Se pide el número de candidaturas y de concejales.
Se pide el número de votos de cada candidatura, se almacenan en un vector.
Se calcula el número total de votos.
Se hace cero el número de votos de las candidaturas que obtienen menos del 5% de votos.
Se repite P veces:
Incrementar en uno el número de concejales de la candidatura con mayor número de votos.
Actualizar la cantidad entre la que se divide
Dividir los votos de cada candidatura entre la cantidad que corresponda.


Guión para la tercera práctica.

Resolver este ejercicio, que ya se vio en clase, utilizando un vector para almacenar los dígitos de cada número que se examina para saber si cumple o no la condición.


Guión para la cuarta práctica.
De este modo el programa podría quedar así (no se incluye la declaración y definición de las funciones):

Guión para la quinta práctica. El ejercicio de referencia es la función que calculal la paridad de un vector de booleanos de forma recursiva.

Guión para la sexta práctica. Se basa en modificar el ejercicio introductorio de clases visto en teoria, añadiendo funciones y operadores. guion_practica_complejos_clases.cpp.

Guión para la séptima y última práctica, a desarrollar a lo largo de dos semanas. Se trata de un ejercicio de clases que cayó en un examen. En este caso se realizará en su versión completa y no la parte que se pedía en el examen. Consiste en implementar una versión del juego Sokoban (o mueve la caja) en modo texto, usando clases. guion_muevecaja.cpp.

Teoría.

Ejemplos de if, if else y switch. Por petición popular, versión para imprimir con todos los ejercicios en una hoja, a dos columnas. ejercicios_clase1.pdf
Ejemplos iniciales de bucles.
Ejemplos con bucles anidados.
Los dos grupos de ejercicios anteriores tal y como se llevaron a clase. ejercicios_clase2.pdf

Por petición popular, entodavía más ejemplos de bucles, todos en un pdf.ejercicios_clase3.pdf

Ejemplos de vectores. Tal y como se llevaron a clase ejercicios_clase4.pdf
Varios métodos útiles para trabajar con vectores en un ejemplo autoexplicativo. vectores1.cpp. En pdf tal y como se llevó a clase vectores1.pdf.

Ejemplos introductorios de funciones. Tal y como se llevaron a clase ejercicios_clase5.pdf

Más ejemplos de funciones, relacionados con los temas de los apuntes "Mecanismos de paso de argumentos" y "Semántica del paso de argumentos". De alguna forma todos han caído en algún examen. Ejercicios tal y como se llevaron a clase (había una errata en el ejercicio de la paridad) ejercicios_clase6.pdf.
Explicación de la implementación recursiva del factorial. recursividad.cpp

Ejemplo de enumeraciones y estructuras. Programa que muestra las 40 cartas de la baraja española en orden aleatorio (barajadas). Se definen enumeraciones para la figura y para el palo y cada carta es una estructura cuyos campos son enumeraciones de los tipos anteriores. barajaf.cpp. El ejercicio tal y como se llevó a clase ejercicios_clase7.pdf.

Esquema general de implementación y uso de una clase, sin utilizar y utilizando el operador de resolución de ámbito, es decir definiendo las funciones miembro dentro de la clase esquema_clase.pdf y declarando las funciones dentro y definiéndolas fuera esquema_clase_scope.pdf.

Ejemplos de un problema resuelto sin funciones (complejos_pelado.cpp), con funciones (complejos_con_funciones.cpp), con estructuras (complejos_con_estructuras.cpp) y con clases (complejos_con_clases.cpp). Este último se irá refinando en clases sucesivas, a medida que se impartan los conocimientos necesarios para ello. El objetivo es comprender la ventaja que proporciona al programador/a el uso de clases.
Los ejercicios tal y como se llevaron a clase ejercicios_clase8.pdf.

Ejemplo de clases para ilustrar la función del puntero oculto this. clase_teoria_comentarios.cpp.

Ejemplos de clases para ilustrar el concepto de interfaz pública de una clase, uso del constructor para convertir entre tipos, operadores friend. Usaremos la clase complejo representados en cartesianas (complejosc.cpp) y en polares (complejoscp.cpp).

Los ejemplos anteriores en pdf. ejercicios_clase9a.pdf ejercicios_clase9b.pdf.

Problemas de clases sencillos que han caído en exámenes. Enunciados enunciados_clases.pdf. Soluciones ejercicios_clase10.pdf.

Ejemplos para ilustrar el tema de los destructores estructura_dinamica.cpp, operación de asignación y constructor de copia estructura_dinamica2.cpp.

Ejemplos para ilustrar el tema de las acciones y tipos genéricos (templates). unicosT.cpp, parT.cpp.

Ejemplos para ilustrar el tema "Objetos como miembros de otras clases", además son ejercicios de examen.
Ejemplos de herencia.
Ejemplos complementarios de distintos temas: