Programación Científica

19
Programación Científica Dr. Romeo Sánchez Nigenda. E-mail: [email protected] 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

description

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/ - PowerPoint PPT Presentation

Transcript of Programación Científica

Page 1: Programación Científica

Programación CientíficaDr. Romeo Sánchez Nigenda.E-mail: [email protected]://yalma.fime.uanl.mx/~romeo/Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar ChacónHoras 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

Page 2: Programación Científica

Temario:

1. Fundamentos de Programación en C2. Apuntadores y Funciones3. Arreglos y Estructuras4. Manejo de Memoria5. Recursividad6. Entrada y Salida de Archivos7. Desarrollo y Depuración de Proyecto de

Programación

Total a calificar: 110 puntos!

40% Proyecto30% Examen Parcial30% Examen Final10% Participación

Page 3: Programación Científica

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 Compiler Collection)

IDEs (Integrated Development Environment):http://www.eclipse.org/downloads/http://kdevelop.org/ http://www.bloodshed.net/devcpp.html

Page 4: Programación Científica

ArreglosDefiniciones

◦ 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;

Page 5: Programación Científica

ArreglosDeclaración

◦ Tipo NombreArreglo [NúmeroElementos]◦ Ejemplos:

float salarios[5]; char alfabeto[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

Page 6: Programación Científica

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;

Arreglos y punteros

double x[40];int i;

for (i = 0; i < 40; i++) x[i] = 1.0;

for (i = 0; i < 40; i++) *(x + i) = 1.0;

double *p, x[40];int i;

p = x;for (i = 0; i < 40; i++) p[i] = 1.0;

for (i = 0; i < 40; i++) *(p + i) = 1.0;

for (i = 0; i < 40; i++, p++) *p = 1.0;

5 3 … 4 10

v

índice 10 N-2 N-1N

Page 7: Programación Científica

No existen Strings en C, son solamente arreglos de caracteres con la convención que un carácter nulo (‘\0’) es almacenado 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

char localnombre [10];strcpy(localnombre, “PEPITO”); Copiamos la constante de caracteres en el arreglo local

Arreglos de caracteres (strings)

P E P I T O 0 X X X

Page 8: Programación Científica

Traversando arreglos de caracteres usando punteros:

Arreglos de caracteres (strings)

int string_length(char* x) { int l = 0;

while (*x ) { x++; l++; }

return l;}

int string_length(char* x) { int l = 0;

while (*(x++)) l++;

return l;}

Page 9: Programación Científica

Revirtiendo los valores de un arreglo.

Arreglos de caracteres (strings)

int main(){ char string[1000]; int longitud; strcpy(string, “helloworld”); longitud = strlen(string);

}

int i, j;char temp;for(i=0, j=longitud-1; i<j;i++,j--){ temp = string[i]; string[i] = string[j]; string[j] = temp;}

h e l l o w o r l d

d l r o w o l l e h

Page 10: Programación Científica

Arreglos Multidimensionales Por dimensión entendemos como el número de índices

utilizados para referirse a un elemento particular en el arreglo. Bidimensional: Type ArrayName[numFilas][numColumnas]

Ejemplo: int miarray[3][5];

Columna0

Columna1

Columna2

Columna3

Columna4

Fila 0Fila 1Fila 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;

[0][0][0][1][0][2][0][3][0][4][1][0][1][1][1][2]

……

[Filas-1][Cols-1]

En memoria

Page 11: Programación Científica

A través de punteros:

Arreglos Multidimensionales

[0][0][0][1][0][2][0][3][0][4][1][0][1][1][1][2]

……

[Filas-1][Cols-1]

int miarray[3][5]

int *p = *myarray;for(int fila=0;fila<3;fila++) for(int col=0;col<5;col++)

*(p + 5*fila + col) = 0;

int (*nn)[5] = ia;for (int pn=0;pn<15;pn++){ cout<<"ia: "<<*(*nn+pn)<<endl;}

int *myp = *ia;for (int pn=0;pn<15;pn++){ cout<<"ia: "<<*(myp+pn)<<endl;}

Page 12: Programación Científica

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:struct type-name {elementos};

Page 13: Programación Científica

Ejemplo:struct {char sexo;int edad;char primernombre[10];char apellido[15];} minombre;

La definición crea una variable minombre de 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++

Page 14: Programación Científica

Podemos usar etiquetas, y declarar variables usando la etiqueta:

struct tiponombre{char sexo;int edad;char primernombre[10];char apellido[30];};struct tiponombre minombre, tunombre;

typedef struct{ char sexo;int edad;char primernombre[10];char apellido[30];} TIPONOMBRE;

TIPONOMBRE minombre, tunombre;

Registros (estructuras) en C/C++

Page 15: Programación Científica

Para acceder a los elementos de una estructura, usamos la variable y el nombre del elemento separados por el operador de punto:

struct tiponombre minombre;

Para almacenar valores:minombre.sexo = ‘M’;minombre.edad = 5;

Para leer información de la estructuracout<<minombre.sexo;

Registros (estructuras) en C/C++

Page 16: Programación Científica

Puede declararse un arreglo de estructuras para agrupar información:

struct tiponombre nombres[100];

Esto crea un conjunto de 100 registros de tipo estructura.

Para acceder a uno de los registros se utilizan índices.

nombres[0].sexo = ‘M’;nombres[0].edad = 5;

Registros (estructuras) en C/C++

Page 17: Programación Científica

Puede declararse que un elemento de una estructura sea otra estructura:

typedef struct{ char calle[30];

int num;char ciudad [10];char estado [3];char cpostal [6];

} TIPODIRECCION;

typedef struct{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++

Page 18: Programación Científica

Punteros a Estructuras: El operador ->main(){

struct tiponombre x; //x es una instancia de tiponombrestruct tiponombre* y; //y es un puntero a una instancia de tiponombrex.sexo = ‘M’;y = &x; //y apunta a la dirección de la estructura xy ->sexo = ‘f’; //Equivalente a x.sexo = ‘f’;

}

Qué representa la siguiente definición?typedef struct{

TIPOALUMNO alumno; RECORDS * palumno;

} RECORDS;

Registros (estructuras) en C/C++

Page 19: Programación Científica

Estructuras como parámetrosPor referencia

. . .struct seguro poliza;

imprime_poliza(&poliza);

void imprime_poliza(struct seguro * mipoliza){cout<<“Número de Póliza: <<mipoliza->numseguro;….if(mipoliza->clase == VIDA){cout<<mipoliza->seguroinfo.beneficiario;}…

}