curso de algoritmos y esttructura de datos funciones

Upload: lourdes-elenita-mendoza-v

Post on 02-Mar-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/26/2019 Curso de Algoritmos y Esttructura de Datos Funciones

    1/9

    Urnivesidad Nacional de Moquegua Escuela Profesional de Ing. de Sistemas e InformticaCurso: Algoritmos y Estructura de Datos

    MSc. Ing. Euler Tito Chura 66

    Al llegar a este tema, suponemos que es de nuestro conocimiento del entrenamiento lgicoimpartido

    anteriormente, reconociendo y aplicando correctamente cada estructura de programacin de tal formaque planteado un problema no tenga dudas en utilizarlas convenientemente, construyendo el algoritmoque d solucin al problema.

    Ahora de lo que se trata es de darle un entono, un ambiente, una forma, un lugar, a cualquier algoritmoconstruido; al cual le llamaremos proceso o funcin(en otros lenguajes de programacin existen ademsde lasfuncioneslosprocedimientos).

    En todo lenguaje de programacin ya existen una infinidad de funciones y/o procedimientos(denominadas biblioteca/librera de funciones) que pueden ser utilizados por el programador. En el caso

    de C++ los ms utilizados son los conocidos :

    clrscr( ): Cuya tarea es borrar pantalla.getch( ): Cuya tarea es esperar a que el usuario presione cualquier tecla. (en nuestro caso, pausapara ver resultados).

    Imagnese de no existir la funcin clrscr( ), el que limpia pantalla; entonces tendramos que programar

    todas las veces que necesitemos borrar pantalla (esto significa doble trabajo). Como esta tarea es demucha demanda entonces la implementamos en una funcin y la REUTILIZAMOS cuantas veces sea

    necesario (que es el objetivo principal de la creacin de funciones).

    Por lo tanto el programador debe implementar las funciones que no existan en la biblioteca de funcionesque viene con el propio lenguaje de programacin ( o simplemente si dichas funciones NO brindanresultados que el programador desea)

    Cabe mencionar que en C++ solamente existen funciones. Existen bsicamente dos tipos de funciones:

    Funciones que despus de realizar una tarea especficadevuelven resultados. Funciones que despus de realizar una tarea especfica NO devuelven resultados (en otros

    lenguajes cuando una funcin no devuelve resultado se denominaProcedimiento), en todo casoslo son terminologas utilizadas por los lenguajes, pero en s la filosofa es la misma.

    DECLARACION DE FUNCIONES

    Ubicacin:

    En C++ una de las tantas formas de estructura general de un programa es el siguiente:

    FUNCIONES

    Definicin: Una funcin es un proceso que realiza una determinadatarea, por lo tanto tiene unnombrey es capaz de recibir datos (entradas) y devolver resultados ( salidas ) a travs de variables especialesque toman el nombre de parmetrose inclusive devolver el resultado de la tarea a travs de su propio

    nombre.

  • 7/26/2019 Curso de Algoritmos y Esttructura de Datos Funciones

    2/9

    Urnivesidad Nacional de Moquegua Escuela Profesional de Ing. de Sistemas e InformticaCurso: Algoritmos y Estructura de Datos

    MSc. Ing. Euler Tito Chura 67

    Como podemos observar las funciones se ubican al final de todo el cuerpo de main.

    Sintaxis general en C++

    Prototipo:

    Donde:

    Tipo_de_dato_que_devuelve_la_funcin identifica el valor que la funcin retornarcomoresultado a travs de su nombre, se refiere al tipo de dato de la variable que contiene el dato adevolver (que va acompaada con la sentencia return). Si la funcin no devolviera un resultadoentonces este tipo de dato es voidy no ser necesario incluir la sentencia return.

    Nombre_de_la_funcin que identifica unvocamente a la funcin y debe empezar con unaletra.

    Lista de parmetros son los datos (variables) de Entraday/o Salidarespecto a la funcin.

    Ahora cmo diferenciar si un parmetro es una variable de Entrada o Salida ?Gran dilema para uno que recin se inicia en usar funciones:Pues la respuesta es muy sencilla: En C++ el parmetro que solamente RECIBE datos se declaracomo una variable cualquiera( ejm. int x), en cambio el parmetro que DEVUVELVE resultados

    o RECIBE o DEVUELVE a la vez va precedido con el smbolo &( ejm. int &x)

    Tambin se puede utilizar el * (asterisco), pero esto requiere un poco del conocimiento delconcepto de punteros o apuntadores).En buena cuenta es importante sealar que en cualquier lenguaje de programacin a losparmetros de Entrada se conocen como parmetros por valor, en cambio los parmetros de

    Entrada y/o Salida son llamados comoparmetros por referencia

    Variable que contiene el dato a devolverque va acompaado con la sentencia return.

    Por lo tanto hay dos posibilidades para devolver resultados (parmetros de salida y lainstruccin return)

    // definicin de archivo de cabecera (*.h)...

    // declaracin de variables globales

    ...

    void main()

    { // inicio de main...

    ...

    } // fin de main

    //desarrollo de funciones propias...

    ..

    ..

    Tipo_de_dato_que_devuelve_la_funcin Nombre_de_la_funcin (Lista de parmetros)

    {// inicio de la funcin// declaracin de variables locales(pertenecientes slo a la funcin)// conjunto de instrucciones para ejecutar la tarea a realizarreturn( Variable que tiene el dato a devolver )//slosi se devuelve un resultado

    }//fin de la funcin

  • 7/26/2019 Curso de Algoritmos y Esttructura de Datos Funciones

    3/9

    Urnivesidad Nacional de Moquegua Escuela Profesional de Ing. de Sistemas e InformticaCurso: Algoritmos y Estructura de Datos

    MSc. Ing. Euler Tito Chura 68

    Entonces Cul es la diferencia en usar parmetros de salida y el return ?

    Depende de los objetivos: Si la funcin solamente requiere devolver UN SOLO RESULTADO usaremosreturn(

    la razn es que solamente se acepta una sola variable con esta instruccin)

    Si la funcin requiere devolver MAS DE UN RESULTADO usaremos los parmetros

    de Salida (en la lista de parmetros si podemos incluir todas las variables que seannecesarias).Sin embargo es posible combinar ambos enfoques.

    Ejemplos de funciones cuyo tipo de dato es void

    Significa que no debemos usar la instruccin return, pero tenemos la posibilidad de devolver resultados a

    travs de los parmetros de salida ( es decir declaradas con el operador &) si en caso se devolviera unresultado.

    Enunciado: Desarrollar una funcin que reciba un valor que represente cierta cantidad de horas ydevuelva su equivalente en minutos y segundos por separado.

    Solucin:

    Parmetros de Entrada/Salida:

    Entrada:Horas (H) // parmetros por valor (variables de entrada)Salidas:Minutos, Segundos (M, S)// parmetros por referencia (variables en este casoslode salida, por lo tanto irn precedidas por &).

    Inplementacin:

    voidequivalente(float H,float &M,float &S)

    { // inicio de la funcin

    M = H*60;

    S = H*3600;

    } //fin de la funcin

    Importante:Notar que la hora a convertir se recibe (Entrada) a travs de la variable H (parmetro por

    valor).

    Los resultados se devuelven (Salida) a travs las variables M y S (parmetros por referencia), esdecir su equivalente en minutos y segundos.

    Enunciado: Desarrollar una funcin que determine la suma de los N primeros nmeros naturales, esdecir 1+2+3+4+...+N

    Solucin:

    Parmetros de Entrada/Salida:

    Entrada:N // parmetros por valor (variables de entrada)Salidas: Suma (Suma de los N primeros naturales) // parmetros por referencia(variables en este caso slode salida que ir precedida por &).

    Inplementacin:

    voidSumatoria (int N, int &Suma)

    { // inicio de la funcin

    int x; // variable local de la funcin

    Suma=0;

  • 7/26/2019 Curso de Algoritmos y Esttructura de Datos Funciones

    4/9

    Urnivesidad Nacional de Moquegua Escuela Profesional de Ing. de Sistemas e InformticaCurso: Algoritmos y Estructura de Datos

    MSc. Ing. Euler Tito Chura 69

    for (x = 1 ; x

  • 7/26/2019 Curso de Algoritmos y Esttructura de Datos Funciones

    5/9

    Urnivesidad Nacional de Moquegua Escuela Profesional de Ing. de Sistemas e InformticaCurso: Algoritmos y Estructura de Datos

    MSc. Ing. Euler Tito Chura 70

    Ejemplos de ejecucin (llamadas) de las funciones de tipo de dato void.

    Veamos a continuacin la invocacin de funciones implementadas anteriormente.

    // inclusin de archivos declaradas.

    #include iostream.h

    #include conio.h

    //funcin principal

    void main()

    {// inicio de main

    float Minutos, Segundos;

    clrscr( );// borrar pantalla

    equivalente( 6, Minutos, Segundos);cout

  • 7/26/2019 Curso de Algoritmos y Esttructura de Datos Funciones

    6/9

    Urnivesidad Nacional de Moquegua Escuela Profesional de Ing. de Sistemas e InformticaCurso: Algoritmos y Estructura de Datos

    MSc. Ing. Euler Tito Chura 71

    } //fin de la funcin

    voidSumatoria (int N, int &Suma)

    { // inicio de la funcinint x; // variable local de la funcin

    Suma = 0;

    for (x = 1 ; x Max )

    Max = b;

    if ( c > Max )

    Max = c;

    return( Max );

    } //fin de la funcin

    Enunciado:Implementar una funcin que devuelva el nombre correspondiente a un nmero de mes.Entradas a la funcin: nmero de mes ( NumMes )Salida : nombre del mes ( NombreMes )

    Desarrollo:

    char *NombreMes(int NumMes){ // inicio de la funcin

    switch ( NumMes ){

    case 1 : return Enero; break;case 2 : return Febrero; break;case 3 : return Marzo; break;

    case 4 : return Abril; break;case 5 : return Mayo; break;

  • 7/26/2019 Curso de Algoritmos y Esttructura de Datos Funciones

    7/9

    Urnivesidad Nacional de Moquegua Escuela Profesional de Ing. de Sistemas e InformticaCurso: Algoritmos y Estructura de Datos

    MSc. Ing. Euler Tito Chura 72

    case 6 : return Junio; break;case 7 : return Julio; break;

    case 8 : return Agosto; break;case 9 : return Setiembre; break;case 10 : return Octubre; break;case 11 : return Noviembre; break;

    case 12 : return Diciembre; break;default :return Desconocido ;

    }} //fin de la funcin

    Ejecucin o Llamada de una funcin cuyo tipo de datos NO es void

    Existen tres posibilidades:

    a.)

    Como asignacin.

    variable =Nombre_funcin (lista de parmetros);cout

  • 7/26/2019 Curso de Algoritmos y Esttructura de Datos Funciones

    8/9

    Urnivesidad Nacional de Moquegua Escuela Profesional de Ing. de Sistemas e InformticaCurso: Algoritmos y Estructura de Datos

    MSc. Ing. Euler Tito Chura 73

    NumeroMayor =Mayor(Num1, Num2, Num3);

    cout

  • 7/26/2019 Curso de Algoritmos y Esttructura de Datos Funciones

    9/9

    Urnivesidad Nacional de Moquegua Escuela Profesional de Ing. de Sistemas e InformticaCurso: Algoritmos y Estructura de Datos

    MSc. Ing. Euler Tito Chura 74

    case 6 : return Junio; break;case 7 : return Julio; break;

    case 8 : return Agosto; break;case 9 : return Setiembre; break;case 10 : return Octubre; break;case 11 : return Noviembre; break;

    case 12 : return Diciembre; break;default :return Desconocido ;

    }} //fin de la funcin

    Ntese que todas las llamadas a las funciones se han hecho desde la funcin principal (main); sinembargo recuerde que tambin se puede hacer desde el desarrollo de cualquier funcin.

    Ahora que ya sabemos ejecutar/invocar/llamar a una funcin, vimos que las funciones propiasimplementadas por el programador que utiliza un programa pueden estar en el mismo programa (en un

    solo archivo, como en los ejemplos anteriores) pero tambin pueden estar fuera del programa (es deciren otros archivos) conformando as lo que se denominan Libreras o Bibliotecas (para luego serreutilizadas).

    Entonces la pregunta es: Qu funciones deben estar en el mismo programa y qu funciones deben estar

    en una librera/biblioteca?. La respuesta es que s las funciones van a poder ser utilizadas en otrosprogramas lo ms lgico y recomendable es que estn en una librera, en cambio si las funciones sonespecficas y slo sirven a un programa pueden estar junto a todo el programa.

    Cmo se construyen libreras/bibliotecas ?. Veremos en al apartado siguiente (PARTE TRES)

    FUNCIONES PROPUESTAS

    1.

    Funcin de nombre DIGITOS que reciba un nmero entero grande y devuelve el dgito mayor as

    como el dgito menor contenido en dicho nmero.2. Funcin de nombre SUMATORIA, que reciba un nmero entero y devuelva de los nmeros naturales

    desde cero hasta el nmero dado.3.

    Funcin de nombre BINARIO, que devuelva como cadena la representacin binaria de cualquier

    nmero entero completado con CEROS a la izquierda, si fuera necesario, para que la cadena tengauna longitud mltiplo de 8 de acuerdo al nmero recibido.

    4.

    Funcin de nombre ALEATORIOENTRE, que reciba dos nmeros enteros que representan un rangoy devuelva un valor entero aleatorio comprendido en dicho rango.