Escolar Documentos
Profissional Documentos
Cultura Documentos
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++ ProgramacionAlgoritmos
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. Resolución del Parcial 17.
Programación.
# Saber ver cine: Resumen Cómo ver (y escuchar) el cine mudo, Del cinematográfo al cine: el
nacimiento de un lenguaje.
# Tema, trama y sucesos de "El Lazarillo de Tormes": ...
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.
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] 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:
void main()
int i;
for(i=0; i<4; i++) //No olvidar que los arreglos van de 0 a longitud-1
// Los imprimimos
imprimir(a,5);
}
int i;
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.
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.
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.
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
void main()
c = suma(a,b)
a = a + b;
return (a);
a = 10 b = 20 c = ¿?
a = 10 b = 20 c = ¿?
asuma = 10 bsuma = 20
a = a + b;
a = 10 b = 20 c = ¿?
asuma = 30 bsuma = 20
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
yb
a = 10 b = 20 c = ¿?
a = 10 b = 20 c = ¿?
a = 30 b = 20 c = ¿?
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
a = a + b;