You are on page 1of 40

Universidad Nacional de Ingeniería

Programa de Iniciación Tecnológica (PIT)
CTIC
Curso: Lenguaje C++

Prof.: Lic. César Martín Cruz Salazar

Arreglos
Un arreglo(lista o tabla) es una secuencia de datos del mismo tipo.
Los datos se llaman elementos del arreglo y se numeran
consecutivamente 0,1,2,3, etc. El tipo de elementos almacenados
en el arreglo puede ser cualquier tipo de dato del lenguaje C.
Normalmente el arreglo se utiliza para almacenar tipos tales como
char, int o float.

Lic. C. Martín Cruz Salazar Lenguaje C++ - CTIC. UNI 1

Arreglos
Cada item del arreglo se denomina elemento.
Los elementos de un arreglo se numeran, como ya se ha
comentado, consecutivamente 0, 1, 2, 3, ...
Estos números se denominan valores índice o subíndice del
arreglo. El término «subíndice» se utiliza ya que se especifica
igual que en matemáticas. Estos números localizan la posición del
elemento dentro del arreglo.

Lic. C. Martín Cruz Salazar Lenguaje C++ - CTIC. UNI 2

Arreglos
L

L es un arreglo de 6 elementos

El arreglo “L” tiene 6 elementos: L[0] contiene 345.231, L[1]
contiene 120.57, L[2] contiene 240.114, L[3] contiene 789.45, L[4]
contiene 1300.55 y L[5] contiene 3340.123.
En C los índices de un arreglo siempre tienen como límite inferior
0, como índice superior el tamaño del arreglo menos 1.

Lic. C. Martín Cruz Salazar Lenguaje C++ - CTIC. UNI 3

Lic. La sintaxis para declarar un arreglo de una dimensión determinada es: tipo nombreArray[numeroDeElementos]. Martín Cruz Salazar Lenguaje C++ . Un arreglo se declara de modo similar a otros tipos de datos. se debe declarar un arreglo antes de utilizarlo. Por ejemplo. para crear un arreglo de diez variables enteras.CTIC. C. se escribe: int numeros[10]. UNI 4 . excepto que se debe indicar al compilador el tamaño o longitud del arreglo. Declaración de un arreglo Como con cualquier tipo de variable.

C. Si se cambia el valor de un parámetro variable local. Paso de parámetros por valor Paso por valor significa que cuando C compila la función y el código que llama a la función. el cambio sólo afecta a la función y no tiene efecto fuera de ella. la función recibe una copia de los valores de los parámetros. Lic. Martín Cruz Salazar Lenguaje C++ . UNI 5 .CTIC.

la modificación de la variable (parámetro pasado) en la función receptora no afecta al parámetro argumento en la función llamadora. C. 6. Paso de parámetros por valor La siguiente Figura muestra la acción de pasar un argumento por valor. se pasa a la función receptora.CTIC. La variable real i no se pasa. Lic. pero el valor de i. UNI 6 . En la técnica de paso de parámetro por valor. Martín Cruz Salazar Lenguaje C++ .

Martín Cruz Salazar Lenguaje C++ . Paso de parámetros por valor Lic.CTIC. C. UNI 7 .

main () { int n = 10. */ #include <iostream> using namespace std. Se puede cambiar la variable del parámetro en la función pero su modificación no puede salir al exterior. Martín Cruz Salazar Lenguaje C++ . void DemoLocal(int valor).Ejemplo de Paso de parámetros por valor /* Muestra el paso de parámetros por valor. Lic. UNI 8 . cout<<“Antes de llamar a DemoLocal n=”<< n<<endl.CTIC. C. DemoLocal(n).

valor = 999. cout<<"Dentro de DemoLocal.Ejemplo de Paso de parámetros por valor cout<<“Despu\x82s de llamar a DemoLocal. UNI 9 . } Lic. Martín Cruz Salazar Lenguaje C++ . n=“<<n<<endl. valor = " <<valor<<endl .CTIC. valor =" <<valor<<endl . } void DemoLocal(int valor) { cout<<"Dentro de DemoLocal. C.

Paso de parámetros por referencia Cuando una función debe modificar el valor del parámetro pasado y devolver este valor modificado a la función llamadora. C. se ha de utilizar el método de paso de parámetro por referencia o dirección.CTIC. Lic. En este método el compilador pasa la dirección de memoria del valor del parámetro a la función. UNI 10 . Martín Cruz Salazar Lenguaje C++ .

CTIC. por lo que al retornar a la función llamadora la dirección de la memoria donde se almacenó el parámetro contendrá el valor modificado.Paso de parámetros por referencia Cuando se modifica el valor del parámetro (la variable local). UNI 11 . el símbolo & debe preceder al nombre de la variable y el parámetro variable correspondiente de la función debe declararse como puntero. Martín Cruz Salazar Lenguaje C++ . Lic. Para pasar una variable por referencia. C. este valor queda almacenado en la misma dirección de memoria.

int y. *y es un puntero C permite utilizar punteros para implementar parámetros por referencia..CTIC. Martín Cruz Salazar Lenguaje C++ . entrada(&x. void entrada(float* x. C. int* y) //*x es un puntero.. UNI 12 . Lic.Paso de parámetros por referencia float x. //&x es la dirección de memoria de la variable x . ya que por defecto en C el paso de parámetros es por valor.&y).

C. Las variables p. / * variable puntero a int * / double * q. / * dirección en memoria de x * / Una variable. char * p.Paso de parámetros por referencia El operador & delante de una variable significa «dame la dirección de la variable». UNI 13 . r y q son punteros a distintos tipos. double x. / * variable puntero a char * / int * r. Martín Cruz Salazar Lenguaje C++ . o parámetro puntero se declara poniendo el asterisco (*) antes del nombre de la variable. / * variable puntero a double */ Lic.CTIC. &x .

potraiz1(a.b). void potraiz1(float.”<<b<<endl. a=6. void main() { float a. UNI . b=900. 14 } Lic.&b).Ejemplo con funciones potraiz1() y potraiz2() #include <iostream> #include <math. cout<<“\n “<<a<<“.0.0.”<<b<<endl. cout<<“\n”<<a<<“. potraiz2(&a. void potraiz2(float*.h> using namespace std. b. C. float). Martín Cruz Salazar Lenguaje C++ .float*).CTIC.

float* y) { *x = (*x)*(*x). } Lic. UNI 15 . float y) { x=x*x. y=sqrt(y). Martín Cruz Salazar Lenguaje C++ . *y = sqrt(*y). C. } void potraiz2(float* x.CTIC. Ejemplo con funciones potraiz1() y potraiz2() void potraiz1(float x.

en consecuencia. más de un índice. Los arreglos multidimensionales son aquellos que tienen más de una dimensión y. Estos arreglos se conocen también por el término “listas”. C. tres. es posible crear arreglos de tantas dimensiones como requieran sus aplicaciones. Sin embargo. UNI 16 . Los arreglos más usuales son los de dos dimensiones. ver figura. esto es. Un ejemplo de arreglo de dos dimensiones equivale a una tabla con múltiples filas y múltiples columnas. Arreglos Multidimensionales Hasta ahora se ha visto arreglos unidimensionales (una sola dimensión). Lic. Martín Cruz Salazar Lenguaje C++ . cuatro o más dimensiones. conocidos también por el nombre de tablas o matrices.CTIC.

las filas se etiquetan de 0 a m y las columnas de 0 a n. Lic. UNI 17 .CTIC. Arreglos Multidimensionales Estructura de un arreglo de 2 dimensiones. Martín Cruz Salazar Lenguaje C++ . el número de elementos que tendrá el arreglo será el resultado del producto (m+ 1) x(n+l). C. Obsérvese que en el arreglo bidimensional de la Figura.

int puestos [61][81]. C. Martín Cruz Salazar Lenguaje C++ .CTIC. la columna. int matriz[7][6]. UNI 18 . Lic. Arreglos Multidimensionales La sintaxis para la declaración de un arreglo de dos dimensiones es: <tipo de datoElemento> <nombre arreglo> [<NúmeroDeFilas>] [<NúmeroDeColumnas>] Algunos ejemplos de declaración de tablas: char Display[133][97]. int equipos [4][25]. Los elementos de los arreglos se almacenan en memoria de modo que el subíndice más próximo al nombre del arreglo es la fila y el otro subíndice.

UNI 19 . 2.82.82. {84.84. {5.11.86}}.CTIC.10. Martín Cruz Salazar } Lenguaje C++ . Inicialización de arreglos multidimensionales Los arreglos multidimensionales se pueden inicializar.12} Lic.86} }.83}.85. O int tabla[2][3]={81.6.83}.82. Int tabla2[3][4]={ {1.4}.83.8}. 1. C. cuando se declaran.85.3.86}. al igual que los de una dimensión. int tabla[2][3]={{81.2.85. {84. {9.7. O bien int tabla[2][3]={ {81.

CTIC. C. Martín Cruz Salazar Lenguaje C++ . Lic. Acceso a los elementos de los arreglos bidimensionales El formato general para asignación directa de valores a los elementos es: inserción de elementos <nombre arreglo>[indice fila][indice columna]=valor elemento. UNI 20 .

Acceso a los elementos de los arreglos bidimensionales extracción de elementos <variable> = <nombre arreglo> [índice fila] [índice columna]. C. Dia = Semana[3][6].5. Resistencias[2] [4]= 50. Martín Cruz Salazar Lenguaje C++ . UNI 21 . Lic. y de extracción de valores: Ventas = Tabla[2][1]. AsientosLibres[5][12] = 5. Algunos ejemplos de inserciones: Tabla[2][31] = 4.CTIC.

un puntero es una variable que contiene una dirección de memoria. Puntero Una variable (o puntero) es una variable que contiene direcciones de otras variables. por el contrario las variables punteros contienen valores que son direcciones de memoria donde se almacenan datos. C. En resumen. Todas las variables vistas hasta este momento contienen valores de datos. Martín Cruz Salazar Lenguaje C++ . Lic. UNI 22 .CTIC.

C. Martín Cruz Salazar Lenguaje C++ .CTIC. se representa en el interior de la caja. /* como nombre es “i”. su tipo y su dirección en memoria. Ejemplo: int i=9402. el tipo int y la dirección de alguna posición de memoria donde se almacena el valor de la variable i */ 0x4fffd34 i 9402 int Esta caja representa la posición de almacenamiento en memoria. UNI 23 . se asocian tres atributos fundamentales con la misma: su nombre. El nombre de la variable está a la izquierda de la caja. Lic. Si el valor de la variable se conoce. la dirección de variable está encima de la caja y el tipo de variable está debajo de la caja. Direcciones en memoria Cuando una variable se declara.

el compilador asigna dos bytes de memoria.CTIC. UNI 24 . El espacio para esa variable se sitúa en una posición específica de la memoria. Martín Cruz Salazar Lenguaje C++ . el compilador de C accede automáticamente a la dirección de memoria donde se almacena el entero. Se puede ganar en eficacia en el acceso a esta dirección de memoria utilizando un puntero. conocida como dirección de memoria. Lic. Cuando se hace uso el valor de la variable. por ejemplo. Cada variable que se declara tiene una dirección asociada con ella. Un puntero es una dirección de memoria. Punteros Cuando se declara una variable int (entera). C.

CTIC. Puntero Un puntero en C indica dónde encontrar algo. Los punteros se rigen por estas reglas básicas:  un puntero es una variable como cualquier otra. ¿dónde encontrar los datos que están asociados con una variable? Un puntero es la dirección de una variable. Martín Cruz Salazar Lenguaje C++ . UNI 25 . C. Lic.  una variable puntero contiene una dirección que apunta a una posición en memoria.

para ello se hace preceder a su nombre con un asterisco (*). /* Puntero a un tipo de dato char */  float* f. C. UNI 26 . mediante el siguiente formato: <tipo de dato apuntado> *<identificador de puntero> Ejemplos de variables punteros:  int* ptr1.CTIC. /* Puntero a un tipo de dato float */ Lic. /* Puntero a un tipo de dato entero (int)*/  long* ptr2. Puntero La declaración de una variable puntero debe indicar al compilador el tipo de dato al que apunta el puntero. /* Puntero a un tipo de dato entero largo (long int)*/  char* ptr3. Martín Cruz Salazar Lenguaje C++ .

&valor significa «la dirección de valor». se puede utilizar el puntero para referenciar los datos direccionados. Después de la inicialización. UNI 27 . Inicializando punteros La inicialización de un puntero proporciona a ese puntero la dirección del dato correspondiente. *p = 50. Así. Lic. /* define una variable i */ int *p. int i.CTIC. Para asignar una dirección de memoria a un puntero se utiliza el operador de referencia &. por ejemplo. /* asigna la dirección de i a p * / Asignar un valor a la dirección de memoria. /* define un puntero a un entero */ p = &i. Martín Cruz Salazar Lenguaje C++ . C.

Una estructura contiene múltiples variables. UNI 28 . tales como bases de datos u otras aplicaciones que requieran grandes cantidades de datos. Martín Cruz Salazar Lenguaje C++ .CTIC. La estructura es importante para la creación de programas potentes. Estructuras La capacidad para crear nuevos tipos de datos es una característica importante y potente de C y libera a un programador de restringirse al uso de los tipos ofrecidos por el lenguaje. que pueden ser de tipos diferentes. C. Lic.

CTIC. Lic. Martín Cruz Salazar Lenguaje C++ . UNI 29 . Esta característica supone una gran limitación cuando se requieren grupos de elementos con tipos diferentes de datos cada uno. C. es una estructura de datos homogénea. Estructuras Los arreglos son estructuras de datos que contienen un número determinado de elementos (su tamaño) y todos los elementos han de ser del mismo tipo de datos.

la edad. UNI 30 . Estructuras Por ejemplo.CTIC. si se necesita una lista de información de clientes que contengan elementos tales como el nombre. Lic. C. si se dispone de una lista de temperaturas.. la dirección. sin embargo. Los componentes individuales de una estructura se llaman miembros. Martín Cruz Salazar Lenguaje C++ . La solución a este problema es utilizar una estructura. etc. los arreglos no son adecuados. el número de la cuenta. es muy útil un arreglo.

Cada uno de estos elementos se denominan nombre del miembro. Estructuras Cada miembro (elemento) de una estructura puede contener datos de un tipo diferente de otros miembros. estado civil. C. UNI 31 . edad y fecha de nacimiento. Por ejemplo. tal como nombre. se puede utilizar una estructura para almacenar diferentes tipos de información sobre una persona. Martín Cruz Salazar Lenguaje C++ .CTIC. Lic.

se debe decidir cuáles son los tipos de datos a utilizar por los miembros. Lic. Artista.CTIC. Martín Cruz Salazar Lenguaje C++ . C. UNI 32 . Ahora. Estos datos pueden ser: Título. La estructura del CD contiene cuatro miembros. Precio. Número de canciones. Estructuras Se desea almacenar los datos de una colección de discos compactos (CD) de música.

Lic. Artista Arreglo de caracteres de tamaño 25. C. Precio Coma flotante. Número de canciones Entero. UNI 33 . Estructuras Nombre miembro Tipo de dato Título Arreglo de caracteres de tamaño 30.CTIC. Martín Cruz Salazar Lenguaje C++ .

C.. UNI 34 . }. Declaración de una Estructura El formato de la declaración es: struct <nombre de la estructura> { <tipo de dato miembro > <nombre miembro> <tipo de dato miembro> <nombre miembro> <tipo de dato miembro> <nombre miembro> ..CTIC. Martín Cruz Salazar Lenguaje C++ . La declaración de la estructura CD es: Lic.

C.CTIC. int num-canciones. float precio. Declaración de una Estructura struct coleccion-CD { char titulo[30]. } Lic. Martín Cruz Salazar Lenguaje C++ . UNI 35 . char artista[25].

C.CTIC. Martín Cruz Salazar Lenguaje C++ . UNI 36 . 2) O listando el tipo de la estructura creada seguida por las variables correspondientes en cualquier lugar del programa antes de utilizarlas. La definición y declaración de la estructura colecciones-CD se puede hacer por cualquiera de los dos métodos: Lic. Declaración de una Estructura Las variables de estructuras se pueden definir de dos formas: 1) listándolas inmediatamente después de la llave de cierre de la declaración de la estructura.

Martín Cruz Salazar Lenguaje C++ .CTIC. C. struct colecciones-CD cd1. Lic. cd3. } cd1. Declaración de una Estructura 1. char artistar[25] . UNI 37 . float precio. cd2. struct colecciones-CD { char titulo[30]. int num-canciones. cd3. cd2. 2.

char sexo.CTIC. Martín Cruz Salazar puede hacer así: C++ . categoría. char club[26]. La definición de variables estructura seLenguaje Lic. struct corredor { char nombre[40]. cada participante se representa por los datos: nombre. char categoria[20]. club. }. sexo. Declaración de una Estructura Ahora se nos plantea una aplicación de control de los participantes en una carrera popular. edad. UNI 38 . C. int edad.

cl. Lic.CTIC. UNI 39 . sl. Martín Cruz Salazar Lenguaje C++ . Declaración de una Estructura La definición de variables estructura se puede hacer así: struct corredor vl. C.