TRABAJO DE C++ DE FUNCIONES Y MACROS

Embed Size (px)

Citation preview

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    1/14

    11

    TRABAJO DE C++ DE FUNCIONES Y MACROS

    DISEO Y ADMINISTRACIN DE SISTEMAS

    UTS

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    2/14

    QUEESU

    FU

    I

    ?

    Una funcin es un conjunto de lneas de cdigo que realizan una

    tarea especfica y puede retornar un valor. Las funciones pueden

    tomar parmetros que modifiquen su funcionamiento. Las

    funciones son utilizadas para descomponer grandes problemas en

    tareas simples y para implementar operaciones que son

    comnmente utilizadas durante un programa y de esta manerareducir la cantidad de cdigo.

    uando una funcin es invocada se le

    pasa el control a la misma, una vez que esta finaliz con su tarea el

    control es devuelto al punto desde el cual la funcin fue llamada.

    4.4.1

    eclaracin de funciones

    La declaracin da a conocer la funcin al compilador, de forma que

    a partir del punto de declaracin, ya se pueden realizar

    invocaciones a la misma.

    su vez, la definicin estar en algn otro

    punto del programa, tal vez en una librera externa (en forma ya

    compilada) o en otr o mdulo de programa (como texto fuente).

    Una funcin puede ser declarada varias veces en un mismo

    programa, y las declaraciones pueden aparecer en cualquier orden;en un fichero fuente o en varios, pero en cualquier caso antes de su

    uso, es decir: antes de cualquier invocacin a la funcin .

    dems de

    declarar el nombre de la funcin y el tipo devuelto (por defecto se

    supone int ( ) se declaran tambin el tipo de los parmetros .

    CLASES DE FUNCIONES

    1. LA FUNCIN MAIN.Es imprescindible en cualquierprograma C++ representa elpunto

    deiniciodesuejecucin.

    Porlogeneral,sudeclaracinadoptalaforma:

    Intmain();

    Aunque en realidad, el mdulo de inicio la invoca con dos

    parmetros (recibidos a su vez del S

    ), denominados

    tradicionalmente argcyargv,contraccionesde "argumentcount" y

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    3/14

    "argume

    vec

    or" res

    ec

    ivame

    e. El

    rimero es un entero

    ue

    re

    resenta el nmero

    e comandos

    ue se

    asan; el segundo es un

    untero aunamatri de cadenas literales de distintas longitudes

    es

    decir:

    untero a matri de

    unteros

    ; cada una de estas cadenas

    re

    resenta en ltimo e

    tremo los comandos iniciales

    ue se

    uieren

    asar al

    rograma, generalmente

    ara controlar as

    ectos

    de su comportamiento. As pues, la declaracin ms genrica de

    main es del tipo:

    Intmain

    intargc, c

    ar*argv []

    ;

    Nota: el Estndar establece

    ue el compilador debe aceptar

    paramain cual

    uierade las dos formas anteriores.

    Por convencin, argv [0] es el nombre con

    ue se

    a llamado al

    programa

    normalmente ser el nombre del fic

    ero ejecutable

    incluyendo su direccin completa -path-

    . Este dato es

    proporcionado automticamente por el SO; as pues, el valor

    mnimo paraarg

    es 1. Despus seguirn los

    ue introduzcamos en

    la lneade comandos, separados por espacios.

    Como ejemplo, puede usarse el siguiente programa, al

    ue

    llamaremos prueba.exe:

    #include // Pruebade parmetros para funcinmain

    int main

    int argc, char* argv []

    {

    int i;

    printf

    "Se han pasado %3d argumentos:\n", argc

    ;

    for(i=0; i

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    4/14

    y No puede ser invocada e plcitamente a lo largo delprograma, es invocadade formaautomticapor el mdulo

    de inicio.

    y No puede obtenerse su direccin,por lo tanto no puedendeclararse punteros a ella:

    Int(*pmain)() = &main; // Error!!

    y No puede ser sobrecargaday No puede serdeclarada como inliney maindebe estar en el espacio global de unade las unidades

    de compilacindel programa, lo

    ue significa

    ue no puede

    pertenecerauna clase.

    Valor devueltopormain

    En muchos sistemas operativos el valor devuelto por la funcin

    main es utilizado como control de estado para el entorno desde el

    ue se ha ejecutado el programa (este valor es considerado el

    estado deretornodel programa). En UNIX, MS-DOS y MS Windows,los 8 bits ms bajos del valor devuelto son pasados al programa

    invocante o al intrprete de comandos. Este "estado de retorno" se

    utiliza en ocasiones para cambiar el curso de un programa, un

    proceso por lotes o unguinpara el ejecutorde comandos.

    Algunos compiladores pueden generar un aviso de error si se

    intenta compilarun programa cuya funcin main no devuelva un

    int. Por contra,algunas plataformas puedenprovocar fallos cuando

    estos programas arrancan o a suterminacin, ya

    ue esperanunint

    de retorno.

    En los programas C++ no es necesario devolver nada desde la

    funcinmain,aunque enrealidad ladefinicinde esta sea intmain

    (). Larazn es que el Estndargarantizaque si main llegaa su final

    alcanzando el corchete de cierre "}" sin haber encontrado una

    sentenciareturn, el compiladordebe devolverautomticamente un

    0 indicando un final correcto,de formaque enausenciade ningn

    retorno el compiladorproporcionaautomticamente unreturn 0;

    Nota: no obstante lo anterior, el comportamiento concreto

    varade un compiladora otro. Por ejemplo,unprograma en el

    que se alcanza el corchete de cierre de la funcin main sin

    ninguna sentenciade retorno compila sindificultadni aviso de

    ningntipo en Borland C++ 5.5,mientras que MS Visual C++ 6.0

    avisa: warning C4508: main: function should return a value;

    'void' returntype assumed.

    En cualquier caso, es prctica de buena programacin incluir un

    valorde retorno para la funcinmain. Tradicionalmente 0 significa

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    5/14

    una terminacin correcta del programa, cualquier otro valor es

    seal de terminacinanormal (error o e

    cepcin).

    Si el programaterminaporuna invocacina la funcinexit, el valor

    devuelto pormain es el argumento pasado aexit Por ejemplo, si el

    programa contiene la llamada e

    it(1), el valordevuelto es 1.

    2. FUNC ! N VOID.Ba jo ciertas circunstancias se desear escribir funciones que no

    regresen valor alguno (esto sera algo parecido a escribir

    procedures en Pascal) y para ello podemos declarar a la funcin

    como void. La palabra reservada void es utilizada para declarar

    funciones sin valor de retorno y tambin para indicar que una

    funcin especfica no requiere de parmetros. Por ejemplo, la

    funcinpausa()que se ver en seguida,no devolver valoralguno y

    lamismano requiere de parmetros.

    // Esta funcinrequiere delalibreraiostream

    C"

    DIGO DE LAFUNCIN VOID

    #include

    Usingnamespacestd;

    Void sumar ()

    {

    Intnum1,num2,r;

    Cout>num1;

    Cout>num2;

    r = num1 + num2;

    Cout

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    6/14

    Tipo nombre (){}

    El tipo se refiere al tipo de dato (int, float, void, char) y en las

    funciones que no retornan siempre es void.

    El nombre es el nombre de la funcin: cualquieraque empiece con

    una letra,que sea significativo y que no seaunapalabrareservada.

    Para llamarlas slo hay que escribir el nombre de la funcin seguido

    de sus parntesis y unpunto y coma(;).

    Nombre ();

    Imagnense que estn entrenando a superro ahacerse el muertito.

    Cada vezque ustedes dicen muertito, el perro se tirade espaldas

    en el suelo, cierra los ojos y saca la lengua. En programacin, el

    contenido de la funcin sera tirarse de espaldas, cerrar los ojos y

    sacar la lengua; el nombre de la funcin seramuertito; y cada vez

    que nosotros decimos muertito estamos llamando a la funcin.

    Nuestra funcin seraalgo as:

    voidmuertito()

    {

    Perro.Tirarse(posicion='espalda');

    Perro[OjoDer].Cerrar();

    Perro[OjoIzq].Cerrar();

    Perro[Lengua].Sacar();

    }Jajaja,bueno, bueno. Ya en serio vamos a hacer un clsico Hola

    Mundo pero usando una funcin:

    #include

    usingnamespace std;

    voidhola()

    {

    cout

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    7/14

    compilador se brinca a la funcin, la ejecuta y cuando termina,

    vuelve al punto desde donde brinc.

    Si pudieran leerle lamente aun compilador, este dira:

    Linea 1. Incluir la librera iostream. OK

    Linea 2. Usar el namespace estndar. OK

    Linea 3. Oh!una funcin llamadahola, larecordar.

    Linea 4. Llave. Parte de la funcin. Ignorar

    Linea 5. Imprimir Hola Mundo!. Parte de la funcin. Ignorar

    Linea 6. Llave. Parte de la funcin. Ignorar

    Linea 7. Por fin el main!

    Linea 8. Llave. Entrar

    Linea 9. Esta funcin se me hace conocida oh s ya recuerdo.

    Ejecutar lineas 4, 5 y 6

    Linea 10. Llave. Salir

    Ahora veamos una funcinque snos es til:

    #include

    usingnamespace std;

    voidhola(charnombre[50])

    {

    cout

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    8/14

    3. FUNCIN BINARIAFuncinbinario ()automticamente hace unbucle si necesidadde

    que le coloque un while o un for pero pasa primero por el else

    despus cae en la condicin y al final es que sale del condicional e

    imprime el modulo.

    QUE SIGN

    IFICA

    ESTA

    F

    UNC

    ION:

    Dentro de binario, llama desde dentro otra vez a la funcin, amenos que de 0.Llamada a binario(n);

    int binario (int num) {

    - si es 0 sale de binario- sino vuelve a entrar enbinario connum/2(adems hace sacar el 0o el 1 correspondiente)

    }

    Se trata de llamadas recursivas a una funcin. Cuando se llama a

    ella misma de nuevo (con otro argumento).Es un mtodo muy elegante y econmico, te recomiendo que lo

    comprendas bien.Se produce una cadenade llamadas abinario (), se vanguardandolos valores y cuando se retorna, se retorna siguiendo toda la cadenasucesivamente.

    CDIGO DE LA FUNCION BINARIO #include

    #include

    Usingnamespacestd;

    Intbinario(intnum);

    Intn,b;

    intmain()

    {

    cout>n;

    cout

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    9/14

    {

    if(num == 0){

    return 0;}

    else

    {

    binario(num/2);

    }

    b=num%2;

    cout

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    10/14

    3. Carcterde fin. El carcterque el usuario vausar como final de la

    cadena. Por lo general es el Enter que se representa como \n

    (diagonal n).

    Por ejemplo, supongamos que tenemos un arreglo char de 500

    elementos llamado str (nuestra string) y queremos pedirle al

    usuario que la llene, la funcin cin.getline quedaraas:

    cin.getline (str, 500, '\n');

    Como ven, los parmetros van separados por comas (,), y el

    carcterde fin est entre comillas simples ().

    CODIGO DE LAFUNCIONCIN.GETLINE ();

    #include

    Usingnamespacestd;

    Intmain ()

    {

    Charstr [500];

    Cout

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    11/14

    Definicinde algunos macros de c++

    Assert

    Esta macro est diseada para capturar los errores de

    programacin,no de usuario o correr errores, yaque por lo generalcon discapacidad despus de un programa se cierra la fase dedepuracin.

    ParmetrosExpresin

    Expresin a evaluar. Si esta expresin se evala a 0, estoprovocaunerrorde asercinde que termina el programa.

    #define assert ( test )

    Errno

    error de dominio: Algunas funciones matemticas slo se definen

    para ciertos valores reales,que se llama sudominio,por ejemplo, la

    funcin de raz cuadrada slo est definido para los nmeros no-

    negativos,por lo tanto el sqrt funcinasignaa errno el EDOM si esllamado conunargumento negativo.

    Esta macro se expande a unlvaluemodificable de tipo int,por lo

    que se puede leer y modificar un programa.

    errno se pone a cero al inicio del programa, y determinadas

    funciones de la biblioteca estndar de C modificar su valor a un

    valor diferente de cero para indicar algn tipo de error. Tambin

    puede modificar su valor o puestaa cero a su conveniencia.

    Erange

    Rango deerror: El rango de valores que se puedenrepresentar con

    una variable es limitado. Por ejemplo, funciones matemticas,

    como prisionero de guerra puede salida de la gama que puede

    representarse por una variable de punto flotante, o funciones

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    12/14

    como strtodpuede encontrar secuencias de dgitos yaque el rango

    representable por un valor int. En estos casos, errno se establece

    en ERANGE.

    #define ERANGE

    Filenamemax

    Longitud mxima delosnombres dearchivo

    Esta macro se expande a una constante expresin integralcorrespondiente al tamao necesario para una serie de

    elementos chara celebrar el nombre del archivo de cadena mslargapermitidapor el sistema. O, si el sistemano impone ningunarestriccin, se establece en el tamao recomendado para lasmatrices de caracteres destinados a contener cualquiernombre dearchivo.

    Porquutilizarmacros?

    Las macros no siguen la sintaxis del lenguaje de programacin en elque se programan, sino que son meta programas que generancdigo. Tienen supropia sintaxis de definicin y de expansin. Por

    ello es posible utilizarlos para extender un lenguaje deprogramacin,aadindole nuevas caractersticas.

    Incluso es posible utilizar las macros de un lenguaje deprogramacinminimalista como Scheme para construirprototiposde nuevos lenguajes de programacin. Son muy usadas enuniversidades y departamentos de investigacinpara crearnuevasprimitivas y nuevas lenguajes orientados adominios especficos. Unejemplo es larobtica. Se handefinido lenguajes de programacin

    especficos orientado al control de tareas y de acciones de robotsautnomos utilizando macros definidas en Scheme.

    Las macros han sido precursoras de algunas tcnicas de meta -programacin de los lenguajes modernos. Entendemos por meta-programacin la utilizacin de elementos que se salen del propio

    lenguaje para extenderlo.

    Ejemplos de ejercicios de macros

    Ladirectiva#definedefine una macro. Las macros proporcionanunmecanismo de reemplazo de tokens con o sin una serie de

    parmetros formales (parecidos a las funciones). Esta similitud conlas funciones hace que en ocasiones sirvan para una especie de

    sustitucininlineaunque estaprcticapresenta sus riesgos.

    Sintaxis

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    13/14

    #define macro_identificador

    1 ejercicio

    # include

    # define INICIO 0 /* Punto de inicio del bucle */ # define FINAL 9 /* Findel bucle */

    # define MAX(A,B)((A)>(B)?(A):(B)) /* Definicinmacro de Max*/# define MIN(A,B)((A)>(B)?(B):(A)) /* Definicinmacro de Min*/

    intmain(){

    int indice,mn,mx ;int contador = 5 ;

    for(indice = INICIO ; indice

  • 8/6/2019 TRABAJO DE C++ DE FUNCIONES Y MACROS

    14/14

    #define CUADRADO(A)(A)*(A) /* Macro correcta parael cuadrado */#define SUMA_EQUIVOCADA(A)(A)+(A) /* Macro equivocadapara la suma*/

    #define SUMA_CORRECTA(A)((A)+(A)) /* Macro correcta parala suma*/#define INICIO 1

    #define FINAL 7

    intmain()

    {int i, offset ;offset = 5 ;for(i = INICIO ; i