diff --git a/fundamentos-programacion/PR3/README.md b/fundamentos-programacion/PR3/README.md index 84517f4..26a901d 100644 --- a/fundamentos-programacion/PR3/README.md +++ b/fundamentos-programacion/PR3/README.md @@ -22,6 +22,7 @@ - [16.7 Tabla de tipos estructurados](#167-tabla-de-tipos-estructurados) - [16.7.1 Tablas de tuplas](#1671-tablas-de-tuplas) - [16.7.2 Tabla de tablas](#1672-tabla-de-tablas) + - [16.8 Ejercicios](#168-ejercicios) @@ -1192,6 +1193,188 @@ Comentarios: ### 16.7.2 Tabla de tablas +En este caso vamos a definir otro tipo estructurado. Para facilitar el uso vamos a mantener la información de todos los cines en una única variable. Definimos una tabla donde cada elemento sea una tabla con la recaudación de las salas de cada cine. + +```alg +const + MAX_THEATERS: integer = 20; + MAX_MOVIES: integer = 15; +end const + +type + {declaration of a type for dates} + tDate = record + day: integer; + month: integer; + year: integer; + end record; + + {declaration of type for theater information} + tTheaterDescription = record + name: string; + capacity: integer; + collect: real; + date: tDate; + end record; + + {table with the information of each theater} + tTheater = record + movieTheaters: vector[MAX_THEATERS] of tTheaterDescription; + numTheaters: integer; + end record; + + {declaration of a table of tTheater} + tCompany = record + movies: vector[MAX_MOVIES] of tTheater; + numMovies: integer; + end record; + +end type + +algorithm movieTheater + var + theMovieCompany: tCompany; + m, k: integer; + end var + + {we can access the information in the folowing way} + + {to access to the name of the third theater of the first movie} + theMovieCompany.movies[1].movieTheaters[3].name; + + {to access to the field collect of the k th theater of the m th movie} + theMovieCompany.movies[m].movieTheaters[k].collect; + + {to access to the capacity of the last theater of the last movie} + theMovieCompany.movies[theMovieCompany.numMovies].movieTheaters[theMovieCompany.movies[theMovieCompany.numMovies].numTheaters].capacity; + +end algorithm +``` + +```c +#include +#define MAX_THEATERS 20 +#define MAX_MOVIES 15 + +typedef struct { + int day; + int month; + int year; +} tDate; + +typedef struct { + tString name; + int capacity; + float collect; + tDate date; +} tTheaterDescription; + +typedef struct { + tTheaterDescription movieTheaters[MAX_THEATERS]; + int numTheaters; +} tTheater; + +/* declaration of a table of tTheater */ +typedef struct { + tTheater movies[MAX_MOVIES]; + int numMovies; +} tCompany; + +int main(int argc, char** argv) { + tCompany theMovieCompany; + int m, k; + + /* we can access the information in the folowing way */ + /* to access to the name of the third theater of the first movie */ + theMovieCompany.movies[0].movieTheaters[2].name; + + /* to access to the field collect of the k th theater of the m th movie */ + theMovieCompany.movies[m-1].movieTheaters[k-1].collect; + + /* to access to the capacity of the last theater of the last movie */ + theMovieCompany.movies[theMovieCompany.numMovies-1].movieTheaters[theMovieCompany.movies[theMovieCompany.numMovies-1].numTheaters-1].capacity; + + return 0; +} +``` + + +## 16.8 Ejercicios + +- **Ejercicio 1**: Dada una tabla de reales, implementa un algoritmo que calcule la media de los valores de la tabla. +- **Ejercicio 2**: Dada una tabla de reales, implementa un algoritmo que calcule el valor máximo de la tabla. +- **Ejercicio 3**: Dada una tabla de reales, implementa un algoritmo que calcule el valor mínimo de la tabla. +- **Ejercicio 4**: Dada una tabla de reales, implementa un algoritmo que calcule la suma de los valores de la tabla. + +Tabla de reales: +``` +1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 -1.0 +``` + +Soluciones: + +- **Ejercicio 1**: + +```alg +type + tReal = record + collect: vector[10] of real; + position: integer; + end record +end type + +action mediaValores(in tabla: tReal) + var + suma: real; + i: integer; + end var + + suma:= 0; + for i:= 1 to tabla.position do + suma:= suma + tabla.collect[i]; + end for + + writeReal(suma / tabla.position); +end action + +algorithm simulation + var + tabla: tReal; + end var + + tabla.collect[1]:= 1.0; + tabla.collect[2]:= 2.0; + tabla.collect[3]:= 3.0; + tabla.collect[4]:= 4.0; + tabla.collect[5]:= 5.0; + tabla.collect[6]:= 6.0; + tabla.collect[7]:= 7.0; + tabla.collect[8]:= 8.0; + tabla.collect[9]:= 9.0; + tabla.collect[10]:= 10.0; + tabla.position:= 10; + + mediaValores(tabla); +end algorithm +``` + +[Solución en c](./soluciones_c/solucion1/media.c) + +- **Ejercicio 2**: + + + + + +- **Ejercicio 3**: + + + + + +- **Ejercicio 4**: + + diff --git a/fundamentos-programacion/PR3/soluciones_c/solucion1/media b/fundamentos-programacion/PR3/soluciones_c/solucion1/media new file mode 100755 index 0000000..df48e48 Binary files /dev/null and b/fundamentos-programacion/PR3/soluciones_c/solucion1/media differ diff --git a/fundamentos-programacion/PR3/soluciones_c/solucion1/media.c b/fundamentos-programacion/PR3/soluciones_c/solucion1/media.c new file mode 100644 index 0000000..368bb1f --- /dev/null +++ b/fundamentos-programacion/PR3/soluciones_c/solucion1/media.c @@ -0,0 +1,29 @@ +#include + +typedef struct +{ + float collect[10]; + int position; +} tReal; + +void mediaValores(tReal *tabla) +{ + float suma = 0; + int i; + + for (i = 0; i < tabla->position; i++) + { + suma += tabla->collect[i]; + } + + printf("La media de los valores de la tabla es: %f\n", suma / tabla->position); +} + +int main(int argc, char **argv) +{ + tReal tabla = {{1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0}, 10}; + + mediaValores(&tabla); + + return 0; +}