Rafael Arce Nazario 5b20f79c12 Added parameter names to movie.h | hace 9 años | |
---|---|---|
doc | hace 9 años | |
images | hace 9 años | |
DVDInfo.pro | hace 9 años | |
README.md | hace 9 años | |
dvd_csv.txt | hace 9 años | |
filemanip.cpp | hace 9 años | |
filemanip.h | hace 9 años | |
main.cpp | hace 9 años | |
movie.cpp | hace 9 años | |
movie.h | hace 9 años |
Una buena manera de organizar y estructurar los programas de computadoras es dividiéndolos en partes más pequeñas utilizando funciones. Cada función realiza una tarea específica del problema que estamos resolviendo.
Haz visto que todos los programas en C++ deben contener la función main
que es donde comienza el programa. Probablemente ya haz utilizado funciones como pow
, sin
, cos
o sqrt
de la biblioteca de matemática cmath
. Dado que en casi todas las experiencias de laboratorio futuras estarás utilizando funciones pre-definidas, necesitas aprender cómo trabajar con ellas. Más adelante aprenderás cómo diseñarlas y validarlas. En esta experiencia de laboratorio harás búsquedas y desplegarás información contenida en una base de datos de DVDs para practicar la creación de funciones simples y la invocación de funciones pre-definidas.
Antes de llegar al laboratorio debes:
Haber repasado los siguientes conceptos:
a. los elementos básicos de la definición de una función en C++
b. la manera de invocar funciones en C++
c. la diferencia entre parámetros pasados por valor y por referencia
d. cómo devolver el resultado de una función.
Haber estudiado los conceptos e instrucciones para la sesión de laboratorio.
Haber tomado el quiz Pre-Lab que se encuentra en Moodle.
En matemática, una función $$f$$ es una regla que se usa para asignar a cada elemento $$x$$ de un conjunto que se llama dominio, uno (y solo un) elemento $$y$$ de un conjunto que se llama campo de valores. Por lo general, esa regla se representa como una ecuación, $$y=f(x)$$. La variable $$x$$ es el parámetro de la función y la variable $$y$$ contendrá el resultado de la función. Una función puede tener más de un parámetro pero solo un resultado. Por ejemplo, una función puede tener la forma $$y=f(x_1,x_2)$$ en donde hay dos parámetros y para cada par $$(a,b)$$ que se use como argumento de la función, la función tiene un solo valor de $$y=f(a,b)$$. El dominio de la función te dice el tipo de valor que debe tener el parámetro y el campo de valores el tipo de valor que tendrá el resultado que devuelve la función.
Las funciones en lenguajes de programación de computadoras son similares. Una función
tiene una serie de instrucciones que toman los valores asignados a los parámetros y realiza alguna tarea. En C++ y en algunos otros lenguajes de programación, las funciones solo pueden devolver un resultado, tal y como sucede en matemáticas. La única diferencia es que una función en programación puede que no devuelva valor (en este caso la función se declara void
). Si la función va a devolver algún valor, se hace con la instrucción return
. Al igual que en matemática tienes que especificar el dominio y el campo de valores, en programación tienes que especificar los tipos de valores que tienen los parámetros y el resultado que devuelve la función; esto lo haces al declarar la función.
La primera oración de una función se llama el encabezado y su estructura es como sigue:
tipo nombre(tipo parámetro01, ..., tipo parámetro0n)
Por ejemplo,
int ejemplo(int var1, float var2, char &var3)
sería el encabezado de la función llamada ejemplo
, que devuelve un valor entero. La función recibe como argumentos un valor entero (y guardará una copia en var1
), un valor de tipo float
(y guardará una copia en var2
) y la referencia a una variable de tipo char
que se guardará en la variable de referencia var3
. Nota que var3
tiene el signo &
antes del nombre de la variable. Esto indica que var3
contendrá la referencia a un caracter.
Si queremos guardar el valor del resultado de la función ejemplo
en la variable resultado
(que deberá ser de tipo entero), invocamos la función pasando argumentos de manera similar a:
resultado=ejemplo(2, 3.5, unCar);
Nota que al invocar funciones no incluyes el tipo de las variables en los argumentos. Como en la definición de la función ejemplo
el tercer parámetro &var3
es una variable de referencia, lo que se está enviando en el tercer argumento de la invocación es una referencia a la variable unCar
. Los cambios que se hagan en la variable var3
están cambiando el contenido de la variable unCar
.
También puedes usar el resultado de la función sin tener que guardarlo en una variable. Por ejemplo puedes imprimirlo:
cout << "El resultado de la función ejemplo es:" << ejemplo(2, 3.5, unCar);
o utilizarlo en una expresión aritmética:
y=3 + ejemplo(2, 3.5, unCar);
Las funciones sobrecargadas son funciones que poseen el mismo nombre, pero firma diferente.
La firma de una función se compone del nombre de la función, y los tipos de parámetros que recibe, pero no incluye el tipo que devuelve.
Los siguientes prototipos de funciones tienen la misma firma:
int ejemplo(int, int) ;
void ejemplo(int, int) ;
string ejemplo(int, int) ;
Nota que todas tienen el mismo nombre, ejemplo
, y reciben la misma cantidad de parámetros del mismo tipo (int, int)
.
Los siguientes prototipos de funciones tienen firmas diferentes:
int ejemplo(int) ;
int olpmeje(int) ;
Nota que a pesar de que las funciones tienen la misma cantidad de parámetros con mismo tipo int
, el nombre de las funciones es distinto.
Los siguientes prototipos de funciones son versiones sobrecargadas de la función ejemplo
:
int ejemplo(int) ;
void ejemplo(char) ;
int ejemplo(int, int) ;
int ejemplo(char, int) ;
int ejemplo(int, char) ;
Todas las funciones de arriba tienen el mismo nombre, ejemplo
, pero distintos parámetros. La primera y segunda función tienen la misma cantidad de parámetros, pero los argumentos son de distintos tipos. La cuarta y quinta función tienen argumentos de tipo char
e int
, pero en cada caso están en distinto orden.
En este último ejemplo la función ejemplo es sobrecargada ya que hay 5 funciones con firma distinta pero con el mismo nombre.
Se pueden asignar valores por defecto (“default”) a los parámetros de las funciones comenzando desde el parámetro más a la derecha. No hay que inicializar todos los parámetros pero los que se inicializan deben ser consecutivos: no se puede dejar parámetros sin inicializar entre dos parámetros que estén inicializados. Esto permite la invocación de la función sin tener que enviar los valores en las posiciones que corresponden a parámetros inicializados.
Ejemplos de encabezados de funciones e invocaciones válidas:
Encabezado: int ejemplo(int var1, float var2, int var3 = 10)
Aquí se inicializa var3
a 10.
Invocaciones:
a. ejemplo(5, 3.3, 12)
Esta invocación asigna el valor 5 a var1
, el valor 3.3 a var2
, y el valor 12 a var3
.
b. ejemplo(5, 3.3)
Esta invocación envía valores para los primeros dos parámetros y el valor del último parámetro será el valor por defecto asignado en el encabezado. Esto es, los valores de las variables en la función serán: var1
tendrá 5, var2
tendrá 3.3, y var3
tendrá 10.
Encabezado: int ejemplo(int var1, float var2=5.0, int var3 = 10)
Aquí se inicializa var2
a 5 y var3
a 10.
Invocaciones:
a. ejemplo(5, 3.3, 12)
Esta invocación asigna el valor 5 a var1
, el valor 3.3 a var2
, y el valor 12 a var3
.
b. ejemplo(5, 3.3)
En esta invocación solo se envían valores para los primeros dos parámetros, y el valor del último parámetro es el valor por defecto. Esto es, el valor de var1
dentro de la función será 5, el de var2
será 3.3 y el de var3
será 10.
c. ejemplo(5)
En esta invocación solo se envía valor para el primer parámetro, y los últimos dos parámetros tienen valores por defecto. Esto es, el valor de var1
dentro de la función será 5, el de var2
será 5.0 y el de var3
será 10.
Ejemplo de un encabezado de funciones válido con invocaciones inválidas:
Encabezado: int ejemplo(int var1, float var2=5.0, int var3 = 10)
Invocación:
a. ejemplo(5, ,10)
Esta invocación es inválida porque deja espacio vacío en el argumento del medio.
b. ejemplo()
Esta invocación es inválida ya que var1
no estaba inicializada y no recibe ningún valor en la invocación.
Ejemplos de encabezados de funciones inválidos:
int ejemplo(int var1=1, float var2, int var3)
Este encabezado es inválido porque los valores por defecto solo se pueden asignar comenzando por el parámetro más a la derecha.
int ejemplo(int var1=1, float var2, int var3=10)
Este encabezado es inválido porque no se pueden poner parámetros sin valores en medio de parámetros con valores por defecto. En este caso var2
no tiene valor pero var1
y var3
si.
DVD son las siglas para “digital versatile disk” o “digital video disk” que en español significa disco versátil digital o disco de video digital. Este es un formato de disco óptico para almacenamiento digital inventado por Philips, Sony, Toshiba, y Panasonic en 1995. Los DVD ofrecen capacidad de almacenamiento mayor que los discos compactos (CD), pero tienen las mismas dimensiones. Los DVD pueden ser utilizados para almacenar cualquier dato digital, pero son famosos por su uso en la distribución de películas en los hogares.
!INCLUDE “../../eip-diagnostic/DVD/es/diag-dvd-01.html”
!INCLUDE “../../eip-diagnostic/DVD/es/diag-dvd-03.html”
!INCLUDE “../../eip-diagnostic/DVD/es/diag-dvd-11.html”
!INCLUDE “../../eip-diagnostic/DVD/es/diag-dvd-12.html”
En esta sesión de laboratorio vamos a utilizar una base de datos de películas DVD mantenida por http://www.hometheaterinfo.com/dvdlist.htm. Esta base de datos contiene 44MB de información de películas que han sido distribuidas en DVD. Alguna de la información almacenada en esta base de datos es: título del DVD, estudio de publicación, fecha de publicación, tipo de sonido, versiones, precio, clasificación, año y género. Los campos de la información de cada película son almacenados en texto con el siguiente formato:
DVD_Title|Studio|Released|Status|Sound|Versions|Price|Rating|Year|Genre|Aspect|UPC|DVD_ReleaseDate|ID|Timestamp
Por ejemplo,
Airplane! (Paramount/ Blu-ray/ Checkpoint)|Paramount||Discontinued|5.1 DTS-HD|LBX, 16:9, BLU-RAY|21.99|PG|1980|Comedy|1.85:1|097361423524|2012-09-11 00:00:00|230375|2013-01-01 00:00:00
El primer paso en esta experiencia de laboratorio es familiarizarte con las funciones que ya están definidas en el código. Tus tareas requerirán que imites lo que hacen estas funciones, así que es importante que entiendas como se invocan, declaran y definen.
Instrucciones
Carga a Qt el proyecto DVDInfo
haciendo doble “click” en el archivo DVDInfo.pro
que se encuentra en la carpeta Documents/eip/Functions-DVDInfo
de tu computadora. También puedes ir a http://bitbucket.org/eip-uprrp/functions-dvdinfo
para descargar la carpeta Functions-DVDInfo
a tu computadora.
Configura el proyecto. El archivo main.cpp
tiene la invocación de las funciones que usarás en los siguientes ejercicios. En los archivos movie.h
y movie.cpp
se encuentra la declaración y definición de las funciones que vas a invocar.
Haz doble “click” en el archivo movie.h
que contiene los prototipos de las funciones de este proyecto. Ve a movie.h
e identifica cuál o cuáles funciones son sobrecargadas y describe por qué.
Estudia los prototipos de funciones contenidas en movie.h
de modo que sepas la tarea que realizan y los tipos de datos que reciben y devuelven. Identifica los tipos de datos que recibe y devuelve cada una de las siguientes funciones:
showMovie
showMovies (las dos)
getMovieName
getMovieByName
En el archivo movie.cpp
encontrarás las definiciones de las funciones. Nota que algunas versiones de la función showMovie
usan el objeto llamado fields
de clase QStringList
. El propósito de ese objeto es poder acceder cada uno de los campos de información de la película usando un índice entre 0 y 14. Por ejemplo, fields[0] accede al título de la película, fields[1] accede el estudio, fields[8] al año, etc.
!INCLUDE “../../eip-diagnostic/DVD/es/diag-dvd-06.html”
En este ejercicio modificarás la función main
y algunas de las funciones pre-definidas para que desplieguen solo algunas de las películas en la base de datos, desplieguen solo parte de la información contenida, o que desplieguen la información en un formato específico.
Instrucciones
Abre el archivo main.cpp
y modifica la función main
para que despliegue en la pantalla las películas en las posiciones 80 hasta la 100.
Ahora modifica la función main
para que despliegue en la pantalla solo las películas que contengan “forrest gump” en el título.
Modifica nuevamente la función main
para que despliegue en la pantalla solo la película en la posición 75125 usando composición de funciones y la función showMovie
.
Para la película en la parte 3 de este ejercicio, modifica la función main
para que solo despliegue el nombre y el rating de la película.
Modifica la función getMovieInfo
que se encuentra en el archivo movie.cpp
para que también reciba por referencia el nombre de la película y le asigne un valor. Recuerda que también debes modificar el prototipo de esta función que se encuentra en movie.h
.
Para la película en la parte 3, modifica la función main
para que, utilizando getMovieInfo
, despliegue el nombre, el rating, el año y el género de la película en una sola línea. Ayuda: nota que la función getMovieInfo
tiene parámetros por referencia.
Las funciones cuyos prototipos están en movie.h
están implementadas en el archivo movie.cpp
. En este ejercicio vas a utilizar los archivos movie.h
, movie.cpp
, y main.cpp
para definir e implementar funciones adicionales. Al implementar las funciones, recuerda utilizar buenas prácticas de programación y documentar tu programa.
Instrucciones
Estudia las funciones que ya están implementadas en movie.cpp
para que te sirvan de ejemplo para las funciones que vas a crear.
Implementa una función getMovieStudio
que reciba una cadena de caracteres (“string”) con la info de una película y devuelva el nombre del estudio de la película. Recuerda añadir el prototipo de la función en el archivo movie.h
. Invoca la función getMovieStudio
desde main()
para desplegar el nombre y el estudio de la película en la posición 75125 y así demostrar su funcionamiento.
Implementa una función sobrecargada getMovieInfo
que devuelva el nombre del estudio además del nombre, rating, año y género. Invoca la función getMovieInfo
desde main()
para desplegar el nombre, estudio, rating, año y género de la película en la posición 75125 y así demostrar su funcionamiento.
Implementa una función showMovieInLine
que despliegue la información de una película que despliega showMovie
pero en una sola línea. La función debe tener un parámetro de modo que reciba el “string” de información de la película. Invoca la función showMovieInLine
desde main()
para desplegar la información de la película en la posición 75125 y así demostrar su funcionamiento.
Implementa una función showMoviesInLine
que despliegue la misma información que despliega showMovies
(todas las películas en un rango de posiciones) pero en una sola línea por película. Por ejemplo, una invocación a la función sería
showMoviesInLine(file, 148995, 149000);
. Invoca la función showMoviesInLine
desde main()
para desplegar la información y así demostrar su funcionamiento.
Utiliza “Entrega” en Moodle para entregar los archivos main.cpp
, movie.cpp
y movie.h
con las invocaciones, cambios, implementaciones y declaraciones que hiciste en los ejercicios 2 y 3. Recuerda utilizar buenas prácticas de programación, incluir el nombre de los programadores y documentar tu programa.
[1] http://mathbits.com/MathBits/CompSci/functions/UserDef.htm
[2] http://www.digimad.es/autoria-dvd-duplicado-cd-video.html
[4] http://www.hometheaterinfo.com/dvdlist.htm
A good way to organize and structure computer programs is dividing them into smaller parts using functions. Each function carries out a specific task of the problem that we are solving.
You’ve seen that all programs written in C++ must contain the main
function where the program begins. You’ve probably already used functions such as pow
, sin
, cos
, or sqrt
from the cmath
library. Since in almost all of the upcoming lab activities you will continue using pre-defined functions, you need to understand how to work with them. In future exercises you will learn how to design and validate functions. In this laboratory experience you will search and display information contained in a DVD data base to practice declaring simple functions and invoking pre-defined functions.
Before you get to the laboratory you should have:
Reviewed the following concepts:
a. the basic elements of a function definition in C++
b. how to invoke functions in C++
c. the difference between parameters that are passed by value and by reference
d. how to return the result of a function.
Studied the concepts and instructions for the laboratory session.
Taken the Pre-Lab quiz that can be found in Moodle.
In mathematics, a function $$f$$ is a rule that is used to assign to each element $$x$$ from a set called domain, one (and only one) element $$y$$ from a set called range. This rule is commonly represented with an equation, $$y=f(x)$$. The variable $$x$$ is the parameter of the function and the variable $$y$$ will contain the result of the function. A function can have more than one parameter, but only one result. For example, a function can have the form $$y=f(x_1,x_2)$$ where there are two parameters, and for each pair $$(a,b)$$ that is used as an argument in the function, the function has only one value of $$y=f(a,b)$$. The domain of the function tells us the type of value that the parameter should have and the range tells us the value that the returned result will have.
Functions in programming languages are similar. A function has a series of instructions that take the assigned values as parameters and performs a certain task. In C++ and other programming languages, functions return only one result, as it happens in mathematics. The only difference is that a programming function could possibly not return any value (in this case the function is declared as void
). If the function will return a value, we use the instruction return
. As in math, you need to specify the types of values that the function’s parameters and result will have; this is done when declaring the function.
The first sentence of a function is called the header and its structure is as follows:
type name(type parameter01, ..., type parameter0n)
For example,
int example(int var1, float var2, char &var3)
would be the header of the function called example
, which returns an integer value. The function receives as arguments an integer value (and will store a copy in var1
), a value of type float
(and will store a copy in var2
) and the reference to a variable of type char
that will be stored in the reference variable var3
. Note that var3
has a & symbol before the name of the variable. This indicates that var3
will contain the reference to a character.
If we want to store the value of the example
function’s result in a variable result
(that would be of type integer), we invoke the function by passing arguments as follows:
result=example(2, 3.5, unCar);
Note that as the function is invoked, you don’t include the type of the variables in the arguments. As in the definition for the function example
, the third parameter &var3
is a reference variable; what is being sent to the third argument when invoking the function is a reference to the variable unCar
. Any changes that are made on the variable var3
will change the contents of the variable unCar
.
You can also use the function’s result without having to store it in a variable. For example you could print it:
cout << "The result of the function example is:" << example(2, 3.5, unCar);
or use it in an arithmetic expression:
y=3 + example(2, 3.5, unCar);
Overloaded functions are functions that have the same name, but a different signature.
The signature of a function is composed of the name of the function, and the types of parameters it receives, but does not include the return type.
The following function prototypes have the same signature:
int example(int, int) ;
void example(int, int) ;
string example(int, int) ;
Note that each has the same name, example
, and receives the same amount of parameters of the same type (int, int)
.
The following function prototypes have different signatures:
int example(int) ;
int elpmaxe(int) ;
Note that even though the functions have the same amount of parameters with the same type int
, the name of the functions is different.
The following function prototypes are overloaded versions of the function example
:
int example(int) ;
void example(char) ;
int example(int, int) ;
int example(char, int) ;
int example(int, char) ;
All of the above functions have the same name, example
, but different parameters. The first and second functions have the same amount of parameters, but their arguments are of different types. The fourth and fifth functions have arguments of type char
and int
, but in each case are in different order.
In that last example, the function example
is overloaded since there are 5 functions with different signatures but with the same name.
Values by default can be assigned to the parameters of the functions starting from the first parameter to the right. It is not necessary to initialize all of the parameters, but the ones that are initialized should be consecutive: parameters in between two parameters cannot be left uninitialized. This allows calling the function without having to send values in the positions that correspond to the initialized parameters.
Examples of function headers and valid invocations:
Headers: int example(int var1, float var2, int var3 = 10)
Here var3
is initialized to 10.
Invocations:
a. example(5, 3.3, 12)
This function call assigns the value 5 to var1
, the value 3.3 to var2
, and the value of 12 to var3
.
b. example(5, 3.3)
This function call sends the values for the first two parameters and the value for the last parameter will be the value assigned by default in the header. That is, the values in the variables in the function will be as follows: var1
will be 5, var2
will be 3.3, and var3
will be 10.
Header: int example(int var1, float var2=5.0, int var3 = 10)
Here var2
is initialized to 5 and var3
to 10.
Invocations:
a. example(5, 3.3, 12)
This function call assigns the value 5 to var1
, the value 3.3 to var2
, and the value 12 to var3
.
b. example(5, 3.3)
In this function call only the first two parameters are given values, and the value for the last parameter is the value by default. That is, the value for var1
within the function will be 5, that of var2
will be 3.3, and var3
will be 10.
c. example(5)
In this function call only the first parameter is given a value, and the last two parameters will be assigned values by default. That is, var1
will be 5, var2
will be 5.0, and var3
will be 10.
Example of a valid function header with invalid invocations:
Header: int example(int var1, float var2=5.0, int var3 = 10)
Invocation:
a. example(5, , 10)
This function call is invalid because it leaves an empty space in the middle argument.
b. example()
This function call is invalid because var1
was not assigned a default value. A valid invocation to the function example
needs at least one argument (the first).
Examples of invalid function headers:
int example(int var1=1, float var2, int var3)
This header is invalid because the default values can only be assigned starting from the rightmost parameter.
int example(int var1=1, float var2, int var3=10)
This header is invalid because you can’t place parameters without values between other parameters with default values. In this case, var2
doesn’t have a default value but var1
and var3
do.
DVD stands for “digital versatile disk” or “digital video disk”, which is an optical disc format for storing digital information invented by Philips, Sony, Toshiba, and Panasonic in 1995. The DVD offers larger storage capacity than compact disks (CD), but have the same dimensions. DVDs can be used to store any kind of digital data, but are famous for their use in the distribution of movies.
!INCLUDE “../../eip-diagnostic/DVD/en/diag-dvd-01.html”
!INCLUDE “../../eip-diagnostic/DVD/en/diag-dvd-03.html”
!INCLUDE “../../eip-diagnostic/DVD/en/diag-dvd-11.html”
In this laboratory session we will be using a data base of DVD movies maintained by http://www.hometheaterinfo.com/dvdlist.htm. This database contains 44MB of information for movies that have been distributed in DVD. Some of the stored information in the database for each DVD is: DVD title, publishing studio, date of publication, type of sound, versions, price, rating, year and genre. The fields of information for each movie are stored in text with the following format:
DVD_Title|Studio|Released|Status|Sound|Versions|Price|Rating|Year|Genre|Aspect|UPC|DVD_ReleaseDate|ID|Timestamp
For example,
Airplane! (Paramount/ Blu-ray/ Checkpoint)|Paramount||Discontinued|5.1 DTS-HD|LBX, 16:9, BLU-RAY|21.99|PG|1980|Comedy|1.85:1|097361423524|2012-09-11 00:00:00|230375|2013-01-01 00:00:00
The first step in this lab experience is to familiarize yourself with the functions that are already defined in the code. Your tasks require that you imitate what the functions do, so it is important that you understand how to invoke, declare and define the functions.
Instructions
Open the project DVDInfo
in Qt by double clicking the file DVDInfo.pro
in the folder Documents/eip/Functions-DVDInfo
on your computer. You may also access http://bitbucket.org/eip-uprrp/functions-dvdinfo
to download the folder Functions-DVDInfo
to your computer.
Configure the project. The file main.cpp
has the function invocations that you will use in the next exercises. The declarations and definitions of the functions that will be invoked can be found in the files movie.h
and movie.cpp
.
Double click on the file movie.h
that contains this project’s function prototypes. Go to movie.h
and identify which functions are overloaded and describe why.
Study the function prototypes and documentation in movie.h
so that you understand the task they carry out and the data types they receive and return. For each of the following functions, identify the data types they receive and return:
showMovie
showMovies (las dos)
getMovieName
getMovieByName
You can find the function definitions in the file movie.cpp
. Note that some versions of the function showMovie
use the object calledfields
of the QStringList
class. The purpose of this object is to provide easy access to information fields of each movie, using an index between 0 and 14. For example, you may use fields[0] to access a movie’s title, fields[1] to access a movie’s studio, fields[8] to access its year, and so forth.
!INCLUDE “../../eip-diagnostic/DVD/en/diag-dvd-06.html”
In this exercise you will modify the main
function and some of the pre-defined functions so that they display only certain movies from the database, display only part of the information, or display the information in a specific format.
Instructions
In the file main.cpp
, modify the main
function so that the program displays the movies that have positions from 80 to 100.
Now modify the main
function so that the program displays only the movies that have “forrest gump” in the title.
Once again, modify the main
function so that the program displays only the movie in position 75125 using function composition and the function showMovie
.
For the movie in part 3 of this exercise, add the necessary code to the main
function so that the program displays the name and the rating of the movie.
Modify the getMovieInfo
function in the file movie.cpp
so that it receives an additional parameter by reference to which the name of the movie will be assigned. Remember that you must also modify the function’s prototype in movie.h
.
For the movie in part 3, add the necessary code to the main
function so that, using getMovieInfo
, it displays the name, rating, year and the genre of the movie in one line. Hint: note that the function getMovieInfo
has parameters that are passed by reference.
The functions whose prototypes are in movie.h
are implemented in the file movie.cpp
. In this exercise you will use the files movie.h
, movie.cpp
, and main.cpp
to define and implement additional functions. As you implement these functions, remember to use good programming techniques and document your program.
Instructions
Study the functions that are already implemented in movie.cpp
so that they may be used as examples for the functions you will create.
Implement a function getMovieStudio
that receives a string with the information of a movie and returns the name of the film’s studio. Remember to add the function’s prototype in the file movie.h
. Invoke the function getMovieStudio
in main()
to display the name and studio of the movie in the position 75125 and demonstrate its functionality.
Implement an overloaded function getMovieInfo
that returns the name of the studio as well as the name, rating, year and genre. Invoke the function getMovieInfo
in main()
to display the name, studio, rating, year and genre of the movie in the position 75125 and demonstrate its functionality.
Implement a function showMovieInLine
that displays the information the information displayed by showMovie
, but in a single line. The function should have a parameter to receive a string of information of the movie. Invoke the function showMovieInLine
in main()
to display the information for the movie in position 75125 to demonstrate its functionality.
Implement a function showMoviesInLine
that displays the same information displayed by showMovies
(all of the movies within a range of positions) but in a single line per movie. For example, a function call would be: showMoviesInLine(file, 148995, 149000);
. Invoke the function showMoviesInLine
in main()
to display the information and demonstrate its functionality.
Use “Deliverables” in Moodle to hand in the files main.cpp
, movie.cpp
, and movie.h
with the function calls, changes, implementations and declarations that you made in Exercises 2 and 3. Remember to use good programming techniques, include the names of the programmers involved, and to document your program.
[1] http://mathbits.com/MathBits/CompSci/functions/UserDef.htm
[2] http://www.digimad.es/autoria-dvd-duplicado-cd-video.html