190 likes | 318 Views
Programación Científica. Dr. Romeo S ánchez Nigenda . E-mail: romeo.sanchez @ gmail.com http: //yalma.fime.uanl.mx/~ romeo / Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves Website: http://yalma.fime.uanl.mx /~ romeo/Prog/
E N D
Programación Científica Dr. Romeo SánchezNigenda. E-mail: romeo.sanchez@gmail.com http://yalma.fime.uanl.mx/~romeo/ Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves Website: http://yalma.fime.uanl.mx/~romeo/Prog/ Sesiones: 48 * Slides aumentados con información de Dr. Roger Ríos, y Dr. Fernando López
40% Proyecto 30% Examen Parcial 30% Examen Final 10% Participación Temario: • Fundamentos de Programación en C • Apuntadores y Funciones • Arreglos y Estructuras • Manejo de Memoria • Recursividad • Entrada y Salida de Archivos • Desarrollo y Depuración de Proyecto de Programación Total a calificar: 110 puntos!
Material de apoyo: A. KELLY, I. POHL. A Book on C. Addison-Wesley, Reading, EUA, 1998. 2. B. KERNIGHAN, D. RITCHIE. The C Programming Language. Prentice Hall, Second Edition, 1988. 3. D. KNUTH. The Art of Computer Programming. Addison Wesley, 1998. 4. H. DEITEL, P. DEITEL. Como Programar en C/C++. Prentice Hall, Segunda Edición. 1995. 5. L. Joyanes, I. Zahonero. Programación en C - Metodología, Algoritmos y Estructura de Datos. McGraw Hill-Interamericana, 2006. 6. B. Stroustrup. The C++ Programming Language. Addison Wesley. Third Edition. 1997. Software: Compiladores GCC (GNU CompilerCollection) IDEs (IntegratedDevelopmentEnvironment): http://www.eclipse.org/downloads/ http://kdevelop.org/ http://www.bloodshed.net/devcpp.html
Arreglos • Definiciones • Unidimensional: Conjunto finito y ordenado de elementos homogéneos • Elementos de igual tamaño almacenados linealmente en posiciones de memoria consecutivas • El nombre del arreglo es visto como un puntero al primer elemento del arreglo • Operaciones Básicas • Extracción: Función que toma un arreglo a y un índice i, y retorna un elemento del arreglo: int x = a[i]; • Almacenamiento: Acepta un arreglo a, un índice i, y un elemento x, y asigna a[i] = x;
Arreglos • Declaración • TipoNombreArreglo[NúmeroElementos] • Ejemplos: • floatsalarios[5]; • charalfabeto[30]; [0] [1] [2] [3] [4] • Inicialización • Por defecto: Cuando son creados, se aplica solamente a arreglos globales y estáticos • Explícita: Cuando son creados, suministrando datos de iniciación • En ejecución: Durante ejecución, cuando se asignan o copian datos al arreglo. • Ejemplos • double scores[5] = {5.5, 6.7, 9.8, 10.0, 8.7}; • int estado[3] = {-1, 0, 1}; • char alfabeto[] = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘\0’}; • char vocales[10] = {‘a’, ’e’, ‘i’, ‘o’, ‘u’,’\0’}; índice
Arreglos y punteros v • El nombre del arreglo es la dirección de su primer elemento (base) int v[50]; int *p; p = v; // Equivalente a p = &v[0]; *p = 5; // Equivalente a v[0] = 5; p = p + 5; // Equivalente a p = &v[5]; *p = 9; // Equivalente a v[5] = 9; N índice 0 1 N-2 N-1
Arreglos de caracteres (strings) • No existen Strings en C, son solamente arreglos de caracteres con la convención que un carácter nulo (‘\0’) esalmacenado al final del último carácter para marcar el final de la cadena. • Ejemplo: char*p = “ejemplo”; • La variable puntero p obtiene la dirección del primer elemento en el arreglo (e). El compilador coloca un carácter null al final del arreglo charlocalnombre[10]; strcpy(localnombre, “PEPITO”); • Copiamos la constante de caracteres en el arreglo local
Arreglos de caracteres (strings) • Traversandoarreglos de caracteresusandopunteros:
Arreglos de caracteres (strings) • Revirtiendo los valores de un arreglo. int main(){ char string[1000]; intlongitud; strcpy(string, “helloworld”); longitud = strlen(string); } inti, j; char temp; for(i=0, j=longitud-1; i<j;i++,j--){ temp = string[i]; string[i] = string[j]; string[j] = temp; }
Arreglos Multidimensionales • Por dimensión entendemos como el número de índices utilizados para referirse a un elemento particular en el arreglo. • Bidimensional: TypeArrayName[numFilas][numColumnas] Ejemplo: intmiarray[3][5]; En memoria Fila 0 Fila 1 Fila 2 miarray[1][2] Inicializamos el array: int fila, columna; for(fila = 0; fila < numFilas; fila++) for(columna = 0; columna<numColumnas; columna++) miarray[fila][columna] = 0;
Arreglos Multidimensionales • A través de punteros: intmiarray[3][5] int *p = *myarray; for(intfila=0;fila<3;fila++) for(intcol=0;col<5;col++) *(p + 5*fila + col) = 0; int (*nn)[5] = ia; for (intpn=0;pn<15;pn++){ cout<<"ia: "<<*(*nn+pn)<<endl; } int *myp = *ia; for (intpn=0;pn<15;pn++){ cout<<"ia: "<<*(myp+pn)<<endl; }
Tipos de Datos Complejos: Registros (estructuras) en C/C++ • Un registro o estructura es un grupo de componentes en el cual cada componente tiene su propio identificador, cada uno de los cuales se conoce como un elemento (campo) de la estructura • Es un grupo de variables (elementos) que pueden ser de diversos tipos sostenidas agrupadas en una sola unidad. La unidad es la estructura. • Definición general: structtype-name{elementos};
Registros (estructuras) en C/C++ • Ejemplo: struct { char sexo; intedad; char primernombre[10]; char apellido[15]; } minombre; • La definición crea una variable minombrede tipo estructura con 3 campos • La definición por sí misma no genera asignación de memoria, ésta se da únicamente cuando variables del tipo de la estructura son instanciadas
Registros (estructuras) en C/C++ • Podemos usar etiquetas, y declarar variables usando la etiqueta: structtiponombre{ char sexo; int edad; charprimernombre[10]; char apellido[30]; }; structtiponombreminombre, tunombre; typedefstruct{ char sexo; int edad; charprimernombre[10]; char apellido[30]; } TIPONOMBRE; TIPONOMBRE minombre, tunombre;
Registros (estructuras) en C/C++ • Para acceder a los elementos de una estructura, usamos la variable y el nombre del elemento separados por el operador de punto: structtiponombreminombre; Para almacenar valores: minombre.sexo = ‘M’; minombre.edad = 5; Para leer información de la estructura cout<<minombre.sexo;
Registros (estructuras) en C/C++ • Puededeclararse un arreglo de estructurasparaagruparinformación: structtiponombre nombres[100]; Estocrea un conjunto de 100 registros de tipoestructura. Para acceder a uno de los registros se utilizaníndices. nombres[0].sexo = ‘M’; nombres[0].edad = 5;
Registros (estructuras) en C/C++ • Puede declararse que un elemento de una estructura sea otra estructura: typedefstruct{ char calle[30]; intnum; char ciudad [10]; char estado [3]; charcpostal [6]; } TIPODIRECCION; typedefstruct{ TIPONOMBRE alumnonombre; TIPODIRECCION alumnodireccion; } TIPOALUMNO; TIPOALUMNO alumno_x; Como accesar al valor de calle a través de la variable alumno_x?
Registros (estructuras) en C/C++ • Punteros a Estructuras: El operador -> main(){ structtiponombre x; //x es una instancia de tiponombre structtiponombre* y; //y es un puntero a una instancia de tiponombre x.sexo = ‘M’; y = &x; //y apunta a la dirección de la estructura x y ->sexo = ‘f’; //Equivalente a x.sexo = ‘f’; } Qué representa la siguiente definición? typedefstruct{ TIPOALUMNO alumno; RECORDS * palumno; } RECORDS;
Estructuras como parámetros • Por referencia . . . struct seguro poliza; imprime_poliza(&poliza); voidimprime_poliza(struct seguro * mipoliza){ cout<<“Número de Póliza: <<mipoliza->numseguro; …. if(mipoliza->clase == VIDA){ cout<<mipoliza->seguroinfo.beneficiario; } … }