apuntesC_ArreglosFuncionesPunteros

download apuntesC_ArreglosFuncionesPunteros

of 5

description

apuntes en C++

Transcript of apuntesC_ArreglosFuncionesPunteros

  • V. Arreglos Un arreglo es una estructura homognea, compuesta por varios elementos, todos del mismo tipo y almacenados consecutivamente en memoria. Son llamados tambin matrices. Cada elemento puede ser accedido directamente por el nombre de la matriz seguido de uno o ms subndices encerrados entre corchetes. Para referenciar a un elemento de una matriz, se puede emplear como subndice una constante, una variable o una expresin de tipo entero. El subndice especifica la posicin del elemento dentro de la matriz. La primera posicin es la 0. Si se intenta acceder a un elemento con un subndice menor que cero o mayor que el nmero de elementos de la matriz menos 1, el compilador de C no informa porque no realiza ese tipo de chequeo; es el sistema operativo quien notifica mediante un mensaje de error, solo si ese intento excede los lmites de la zona de memoria asignada por l a dicha aplicacin. Por lo tanto es responsabilidad del programador escribir el cdigo necesario para detectar ese tipo de error. Los arreglos o matrices se clasifican en:

    a) Unidimensionales: De una sola dimensin, denominados tambin vectores o listas. b) Multidimensionales: Ms de una dimensin (2, 3, 4, etc.). Los de dos dimensiones

    (o bidimensionales) son tambin llamados tablas.

    a) Arreglos unidimensionales: Igual que sucede con otras variables, antes de utilizar una matriz hay que definirla. La definicin de una matriz especifica el nombre de la matriz, el nmero de elementos y el tipo de stos. La sintaxis es la siguiente: Tipo nombre [tamao]; donde: Tipo: indica el tipo de elementos de la matriz, ya sea primitivo o definido por el usuario Nombre: es el identificador que nombra a la matriz Tamao: es una constante entera que especifica el nmero de elementos de la matriz. Los corchetes modifican la definicin normal del identificador para que sea interpretado por el compilador como una matriz. Ejemplos: int m[10]; float temperatura[31]; Se puede acceder directamente a un elemento de la matriz o a todos por medio de un ciclo. Ejemplo: Elaborar un programa para crear un vector de 10 elementos y despus imprimir el contenido del vector. Cadenas de caracteres. Se almacena como una matriz unidimensional de elementos de tipo unsigned char o char: char cadena[10]; Tambin puede ser iniciada desde el momento de su definicin. Por ejemplo: Char cadena[] = {a, b, c, d, \0}; Puesto que cada carcter es un entero, el ejemplo anterior se escribe tambin as: Char cadena[] = {97, 98, 99, 100, 0}; Si se crea una matriz de caracteres y se le asigna un no. De caracteres menor que su tamao, el resto de los elementos quedan con un valor \0 si la matriz es global o con basura si la matriz es local. Por ejemplo: char cadena[10]; cadena[0] = a; cadena[1] = b; cadena[2] = c; cadena[3] = d; printf(%s\n, cadena); Se visualizan todos los caracteres hasta encontrar un carcter nulo (\0); en este caso, imprimir la cadena seguido de basura, por lo que se arregla indicando cadena[4] = \0; Ejercicio: Elaborar un programa para que alimente la cadena Hola, que tal e imprima cada carcter con su correspondiente valor ASCII.

    b) Arreglos Multidimensionales: BIDIMENSIONALES o TABLAS Es una estructura de datos formada por renglones y columnas.

  • La definicin se realiza igual que los vectores, con la diferencia que se agrega una dimensin. La sintaxis es la siguiente: Sintaxis: tipo nombre_matriz[filas][columnas]; donde: Tipo: indica el tipo de elementos de la matriz, ya sea primitivo o definido por el usuario Nombre: es el identificador que nombra a la matriz Filas: es una constante entera que especifica el nmero de elementos de la matriz. Los corchetes modifican la definicin normal del identificador para que sea interpretado por el compilador como una matriz. Columnas es una constante entera que especifica el nmero de elementos de la matriz en forma vertical Ejemplos:

    int M[5][3]; int es el tipo de dato de los valores. M es el nombre de la matriz [5] es el tamao de las filas o renglones [3] es el tamao de las columnas

    0 1 2

    0 39 21 34

    1 78 56 43

    2 23 89 90

    3 54 67 89

    4 12 31 67

    float promedios[3][4]; float es el tipo de dato de los valores. promedio es el nombre de la matriz [3] es el tamao de las filas o renglones [4] es el tamao de las columnas

    0 1 2 3

    0 12.8 34.2 67.9 12.89

    1 65.2 34.7 56.1 99.67

    2 33.5 78.6 98.9 34.56

    Para acceder a los elementos de una matriz bidimensional o tabla, se debe mencionar la posicin en la que se encuentra el elemento a buscar. Por ejemplo: M[2][2] = 90 o promedios[2][2]=98.9 Si se va a hacer por ciclos se sugiere utilizar la sentencia for por cada dimensin, es decir, uno para que controle los renglones y otro para que controle las columnas. Por ejemplo: for (ren=0; ren

  • VI. Mdulos

    6.1 Funciones Es un bloque de sentencias que ejecuta una tarea especfica y al que nos referimos mediante un nombre. El bloque es

    el cuerpo de la funcin y el nombre del bloque es el nombre de la funcin. Adems hay que especificar los parmetros en los que se apoyan las operaciones que tiene que realizar y el tipo de resultado que regresar. El argumento es el valor que se pasa a una funcin cuando sta es invocada, el cual ser almacenado en el parmetro

    correspondiente de la funcin. En el lenguaje de programacin C, existen las funciones predefinidas (de biblioteca) y las definidas por el usuario. a) Funciones de Biblioteca, son las que ya estn predefinidas en las libreras (.h); por ejemplo, cos (x), sen (x),

    pow(x,y), etc. b) Funciones definidas por el usuario: Son las que el usuario define y se manejan en 3 pasos:

    1) Declaracin

    2) Definicin 3) Invocacin (llamada desde un programa)

    1) La declaracin de una funcin (prototipo de la funcin), indica el nombre de la funcin, cantidad y tipo de dato de los parmetros y el tipo de dato del valor retornado. Este prototipo es una plantilla que se utiliza para asegurar que una sentencia de invocacin escrita antes de la definicin de la funcin, es

    correcta. Se checa durante la compilacin el tipo y nmero de argumentos detectando algn error. En resumen, la declaracin de una funcin permite conocer las caractersticas de la misma, pero no define la tarea que realiza.

    La sintaxis es la siguiente: Tipo-resultado nombre-funcin ([lista de parmetros]);

    Una funcin puede ser declarada implcita o explcitamente. La implcita sucede cuando la funcin es llamada y no existe una declaracin previa (prototipo).Por omisin, C supone una funcin prototipo con tipo int para el resultado y no checa la lista de parmetros.

    2) Definicin de una funcin: Consta de una cabecera y el cuerpo de la funcin encerrado entre

    llaves. Las variables declaradas en el cuerpo de la funcin son locales y solamente son accesibles dentro del mismo. El tipo del resultado indica el tipo de datos regresado por la funcin, puede ser cualquier tipo primitivo o derivado, pero no puede ser una matriz o una funcin. De no especificarse, se

    supone que es int. Para indicar que no devuelve nada, se utiliza la palabra reservada void. Por ejemplo: Void mensaje (void) { printf (Ocurri un error al realizar los clculos \n);} El resultado de una funcin es devuelto por la sentencia return en el punto donde se realiz la llamada. La sintaxis es la siguiente: return [([) expresin (])]; Donde expresin puede ser un valor, variable o se puede omitir en caso de no devolverse ningn valor

    al programa llamador escribiendo solamente return; No se debe especificar ms de un elemento de datos despus de return, ya que el tipo regresado se refiere solo a uno.

    La lista de parmetros de una funcin est compuesta por las variables que reciben los valores especificados cuando es invocada. Consiste en una lista de cero, uno o ms identificadores con sus tipos, separados por comas, por ejemplo:

    Float funcion_x(int p1, float p2, char p3) { // cuerpo de la funcin

    } Los parmetros formales de una funcin son variables locales a dicha funcin y desaparecen cuando se termina de ejecutar la funcin.

    3) Llamada a una funcin. Significa ejecutarla y se llama por el nombre de la funcin seguido de una lista

    de argumentos denominados tambin parmetros actuales, encerrados entre parntesis y separados

    por comas. Paso de parmetros por valor

    Cuando se llama a una funcin, el primer argumento de la llamada es pasado al primer parmetro de la funcin, el segundo argumento al segundo parmetro y as sucesivamente. Todos los argumentos, excepto

    las matrices son pasados por valor. Esto significa que a la funcin se pasa una copia del valor del argumento, por lo que no se alteran las variables de donde proceden los valores pasados.

    Paso de parmetros por referencia Sucede cuando se alteran los contenidos de los argumentos especificados en la llamada. Esto significa que a la funcin hay que pasarle la direccin de cada argumento y no su valor, lo que exige que los parmetros

    formales sean punteros. Se utiliza el operador & para pasar la direccin de un argumento y las variables se tienen que definir como punteros (*v), por ejemplo *var. En conclusin, pasar parmetros por referencia a una funcin, es hacer que la funcin acceda

    indirectamente a las variables pasadas y a diferencia de cuando se pasan parmetros por valor, no hay duplicidad de datos.

  • 4. Apuntadores o Punteros

    Un puntero es una variable que contiene la direccin de memoria de un dato o variable que contiene un dato. Esto significa que el puntero apunta al espacio fsico donde est el dato o la variable.

    Creacin de punteros La sintaxis para declarar variables tipo puntero es la siguiente:

    tipo *var-puntero Donde:- tipo especifica el tipo de datos del objeto apuntado - el nombre de la variable puntero va precedido por el *, el cual significa apunta a Un apuntador iniciado correctamente siempre apunta a un objeto de tipo particular. Un apuntador no iniciado, no se sabe a donde apunta.

    Si se asigna a un apuntador la direccin de un objeto de tipo diferente al del objeto que tiene que apuntar, las operaciones con el mismo darn lugar a resultados inesperados.

    Por ejemplo, si una variable pint contiene la direccin de otra variable a, entonces se dice que pint apunta a a: int a = 0; // a es una variable entera int. *pint; // pint es un apuntador a un entero pint = &a; // pint igual a la direccin de a: entonces, pint apunta a a

    El operador unitario & devuelve como resulatado la direccin de su operando. Es el operador de direccin. El operador *, interpreta su operando como una direccin y nos da como resultado su contenido. Es el operador de indireccin.

    #include #include main () main ()

    { { Int a= 0; Int a= 0, *pint = &a;

    a = 10; *pint = 10; a = a 3; *pint = *pint 3; printf(%d\n,a); printf(%d\n, *pint); } }

    *pint es un entero que est localizado en la direccin de memoria almacenada en pint.

    En el siguiente ejemplo, sqrt(x) y *p representan valores de tipo double en la expresin donde aparecen, se comportan como variables de tipo double. El espacio de memoria requerido para un puntero, es el nmero de bytes necesarios para especificar una direccin

    que generalmente es de 4 bytes. #include

    main() { double *p = NULL, d = 0, x = 100;

    p = &x; d = sqrt(x) + p; printf(g\n, *p); // imprime el valor actual de x } En el siguiente ejemplo, el puntero p no se inicializa, por lo que su valor es desconocido para nosotros. /* Ejem_punteros.c */

    #include #include main ()

    { int a = 10, *p, *q; double b = 0.0; q = &a; /* asigna la direccin de a a la variable q; q apunta al entero a

    b = q; // asigna a b el valor de a *p = 20; ERROR a dnde apunta q? printf (En la direcci %.4x est el dato %g \n, q, b); printf (En a direccin %.4x est el dato %d \n, p, *p); }

    Operaciones con punteros. A las variables de tipo puntero, adems de los operadores &, * y el operador de asignacin, se les puede aplicar los operadores artmticos + y (solo con enteros), los operadores unitarios ++ y y los operadores de relacin.

    - Un puntero puede ser asignado a otro puntero. - A un puntero se le puede sumar o restar un entero. No se permite sumar, multiplicar, dividir o rotar punteros y

    tampoco se permite sumarles un real.

    - Los operadores unitarios & y * tienen prioridad mayor que los operadores aritmticos + y e igual prioridad que ++ y --.

    Comparacin de punteros

    Cuando se comparan dos punteros, en realidad se comparan dos enteros. Un puntero genrico es el tipo void * y un puntero a cualquier tipo de objeto puede ser convertido a este tipo.

  • Un puntero se puede inicializar con cualquier otra variable, con la excepcin que los nicos valores vlidos son NULL o la

    direccin de un objeto previamente definido. NULL es una constante definida en el fichero stdio.h. La declaracin de un puntero precedida por const, hace que el objeto apuntado sea tratado como constante, no sucediendo lo mismo con el puntero.

    Int a = 10, b = 20; Int * const p = &a // objeto variable y p constante *p = 15;

    Punteros y Matrices

    Punteros a cadenas de caracteres Matrices de punteros

    Matrices de punteros a cadenas de caracteres

    Ordenar Matrices de cadenas de caracteres

    Matrices dinmicas - Numricas

    - Cadenas de caracteres Punteros a Estructuras

    Punteros como parmetros en funciones.

    Recursividad

    5. Archivos INVESTIGACION