Jueves 24 de Abril de 2014 | Hay 53 usuarios online en este momento!
 

Arreglos. Lenguaje C++. Programación.

Imprimir
Recomendar a un amigo
Recordarme el recurso
Descargar como pdf

Seguinos en en Facebook


Tipos char, int y float. El lenguaje C++ permite, además, construir estructuras más complejas a partir de estos tipos básicos. Una de las construcciones que podemos definir son los arreglos. Sintaxis. Diferencias con GOFER. Pasaje de parámetros. Pasaje por Valor o Copia. Pasaje por Referencia.

Agregado: 17 de JULIO de 2003 (Por Michel Mosseq) | Palabras: 1355 | Votar! | Sin Votos | Sin comentarios | Agregar Comentario
Categoría: Apuntes y Monografías > Computación > Programación >
Material educativo de Alipso relacionado con Arreglos Lenguaje C++ Programacion
  • El movimiento de avant garde: KRACAUER nos define el Avant Garde, su intención, el lenguaje del cine, la construcción del arte cinematográfico a través de  los movimientos vanguardistas.
  • Algoritmos y Estructuras de Datos I: Algoritmos y Estructuras de Datos I Facultad de Ciencias Exactas y Naturales. Universidad de Buenos Aires Primer Cuatrimestre de 2000. Práctica 2. Programación Funcional. Notación. Aclaraciones.
  • LMD (Lenguaje de Manipulación de Datos): Programación. Claúsula IN. Claúsula BETWEEN. Claúsula LIKE. Expresiones aritméticas. Funciones de columna.

  • Enlaces externos relacionados con Arreglos Lenguaje C++ Programacion

    Arreglos

    En clase ya conocimos algunos tipos básicos como por ejemplo los tipos char, int y float. El lenguaje C++ permite, además, construir estructuras más complejas a partir de estos tipos básicos.

    Una de las construcciones que podemos definir son los arreglos.

    Arreglo: Colección ordenada de elementos de un mismo tipo. Ordenada significa que cada elemento tiene una ubicación determinada dentro del arreglo y debemos conocerla para accederlo.

    Sintaxis:

    Definición de un arreglo:

                <tipo> nombre_variable[longitud];

    Con esto diremos que nombre_variable es un arreglo de longitud elementos del tipo <tipo>. Cabe destacar que longitud  debe ser cualquier expresión entera constante mayor que cero.

    Asignación de un arreglo:

                nombre_variable[índice] = expresión del tipo <tipo>

    Esta instrucción asigna el valor asociado de la expresión a la posición índice del arreglo nombre_variable. El índice debe ser una expresión del tipo entero en el rango [0, longitud-1]. Cabe destacar que C++ no chequea que el valor de la expresión sea menor a longitud, simplemente asigna el valor a esa posición de memoria como si formara parte del arreglo, pisando, de esta manera, otros datos que no forman parte del mismo, con lo que finalmente el programa no funciona correctamente.

    Acceso al contenido de un arreglo:

                            nombre_variable[índice] es valor del tipo <tipo> que puede ser asignado a una variable, o pasado como parámetro, imprimirlo, etc. Aquí también vale la aclaración de que el índice debe estar dentro del rango de definición del arreglo, C++ no chequeará que esto sea cierto y devolverá lo contenido en la posición de memoria correspondiente a un arreglo de mayor longitud, el dato obtenido de esta manera es basura.


    Ejemplo:

    int a[5]; // Definición de un arreglo de 5 posiciones

    void main()

    {

                int i;

                // Pedimos el ingreso de 5 números

                for(i=0; i<4; i++)           //No olvidar que los arreglos van de 0 a longitud-1

                {

                            cout << Ingrese el elemento Nro: << i <<endl;

                            cin >> a[i];

    }

    // Los imprimimos

    imprimir(a,5);

    }

    void imprimir(int b[], int tamano)

    {

    int i;

    for(i=0; i<tamano; i++)

    {

                            cout << Nro: << i <<” “<<b[i]<<endl;

    }

    }

    Notar que el parámetro b de la función imprimir es un arreglo, pero no se indica la longitud del mismo. Esto no es necesario ya que solo especificamos que recibiremos un arreglo sin importar su longitud (en este caso particular su longitud viene indicada en tamano). De esta manera la función imprimir funciona para arreglos de cualquier longitud.

    Diferencias con GOFER:

    En Gofer tenemos como tipo básico al tipo lista. Este también tipo agrupa de forma ordenada elementos de un mismo tipo, pero existen varias diferencias importantes. Los arreglos en C++ son estáticos, es decir una vez definido su tamaño, este no crece ni decrece. Las listas de Gofer son dinámicas ya que su tamaño puede variar indefinidamente. En Gofer cuando agregamos un elemento a la lista obtenemos una nueva lista con todos los elementos corridos a la posición siguiente, en los arreglos solo asignamos valores a sus posiciones y cada uno de estos quedan en su posición, una asignación en la posición i no afecta a otra posición j si i es distinto de j.

    Pasaje de parámetros

    En Gofer cuando pasamos parámetros a las funciones lo único que podemos hacer es operar con ellos para generar el resultado de la función, estos parámetros no se ven afectados ya que simplemente son expresiones del tipo de la aridad de la función.

    En C++ existen diferentes posibilidades en el pasaje de parámetros, ya que estos pueden ser pasados por Valor o Copia o por Referencia, y cada uno tiene características diferentes.

    Pasaje por Valor o Copia

    Al declarar un parámetro por Valor, cuando la función es invocada, el valor del parámetro es copiado al entorno de la función, creando una nueva variable en el mismo. De esta forma la variable puede ser operada (cambiada) sin que esto afecte el valor de la variable en el entorno de la función llamadora. Este es el procedimiento que se asemeja al funcionamiento en Gofer.

    De una manera gráfica, quizás se entienda mejor la idea:

                Función llamadora                                Función llamada


    Pasaje por Referencia

    Al declarar un parámetro por Referencia, cuando la función es invocada, el parámetro es referenciado por la variable de la función. De esta forma cada vez que utilizamos la variable declarada en realidad estamos utilizando la variable de la función llamadora. Esta forma de pasaje de parámetros abre una nueva posibilidad de comunicación entre funciones (se puede devolver resultados no solo como el resultado de la función), pero debe ser utilizada con cuidado, ya que es muy fácil introducir errores en el programa.

                Función llamadora                                Función llamada


    Pasaje por Referencia constante

    El parámetro es una referencia a la variable de la función llamadora, pero esta variable no puede ser modificada. De esta manera se logra un efecto similar al pasaje por Valor pero sin necesidad de hacer una copia. La razón de utilizar este tipo de pasaje de parámetros es la eficiencia, es más eficiente referenciar una variable que copiarla, siempre y cuando la variable sea de un tamaño considerable, por ejemplo no tiene sentido utilizar este tipo de pasaje de parámetros para enteros, pero sí para un arreglo de una gran dimensión. Con respecto a esto, cuando se declara una arreglo como parámetro de una función, aunque uno no aclare en el código, el arreglo es pasado por referencia (como en el ejemplo de la función imprimir un poco más arriba).

    Ejemplo

    Tenemos el siguiente programa:

    void main()

    {

                float a = 10, b  = 20, c ;

                cout << a << b ;

                c = suma(a,b)

                cout << “A+B= ” << c;

                cout <<” A es “<< a;

    }

    Caso 1) Pasaje por Valor o Copia

     float suma(float a, float b)

    {

                a = a + b;

                return (a);

    }

    Veamos que sucede cuando ejecutamos el programa:

    float a = 10, b  = 20, c ;

    a = 10   b = 20   c = ¿?

    c = suma(a,b) Entramos  a suma

    a = 10   b = 20   c = ¿?

    asuma = 10 bsuma = 20

                a = a + b;

    a = 10   b = 20   c = ¿?

    asuma = 30 bsuma = 20

                return (a); Desaparecen asuma y  bsuma

    a = 10   b = 20   c = 30

    Como vemos en este caso los parámetros no se ven afectados ya que suma realiza copias de a y b

    Caso 2) Pasaje por Referencia

    Cambiemos la declaración de suma declarando a a como  referencia

     float suma(float & a, float b)

    Veamos que sucede cuando ejecutamos el programa:

    float a = 10, b  = 20, c ;

    a = 10   b = 20   c = ¿?

    c = suma(a,b) Entramos  a suma

    a = 10   b = 20   c = ¿?

    asuma = aref bsuma = 20

                a = a + b;

    a = 30  b = 20   c = ¿?

    asuma = aref bsuma = 20

                return (a); Desaparecen asuma y  bsuma

    a = 30   b = 20   c = 30

    Como vemos en este caso el  parámetro a se ve afectado ya que suma utiliza una referencia a a

    Caso 2) Pasaje por Referencia Constante

    Cambiemos la declaración de suma declarando a a como  referencia constante

     float suma(const float & a, float b)

    En este caso el compilador devolverá un error en la línea

                a = a + b;

    ya que se esta intentando modificar una referencia constante.


     
    Sobre ALIPSO.COM

    Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.

    Contacto »
    Contacto

    Teléfono: +54 (011) 3535-7242
    Email:

    Formulario de Contacto Online »
     
    Cerrar Ventana
    ALIPSO.COM
    Cursos Multimedia Online, CD y DVD