Website: http://yalma.fime.uanl.mx/~romeo/Prog/
Sesiones: 48
1. Fundamentos de Programación en C
2. Apuntadores y Funciones
3. Arreglos y Estructuras
4. Manejo de Memoria
5. Recursividad
6. Entrada y Salida de Archivos
7. Desarrollo y Depuración de Proyecto de
Programación
Software:
Compiladores GCC (GNU Compiler Collection)
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
◦ Tipo NombreArreglo [NúmeroElementos]
◦ Ejemplos:
float salarios[5];
char alfabeto[30]; [0] [1] [2] [3] [4]
Inicialización
índice
◦ 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’};
Arreglos y punteros
El nombre del arreglo es la dirección de su primer elemento (base)
int v[50];
v
it *p;
p = v; // Equivalente a p = &v[0];
5 3 … 4 10 N
*p = 5; // Equivalente a v[0] = 5;
p = p + 5; // Equivalente a p = &v[5]; índice 0 1 N-2 N-1
*p = 9; // Equivalente a v[5] = 9;
P E P I T O 0 X X X
Arreglos de caracteres (strings)
Traversando arreglos de caracteres usando
punteros:
}
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]
En memoria
Ejemplo:
[0][0]
int miarray[3][5]; [0][1]
Columna Columna Columna Columna Columna
0 1 2 3 4
[0][2]
[0][3]
Fila 0 [0][4]
Fila 1 [1][0]
Fila 2 [1][1]
miarray[1][2] [1][2]
…
Inicializamos el array:
int fila, columna; …
for(fila = 0; fila < numFilas; fila++) [Filas-1][Cols-1]
for(columna = 0; columna<numColumnas; columna++)
miarray[fila][columna] = 0;
Arreglos Multidimensionales
A través de punteros: int miarray[3][5]
[0][0]
int *p = *myarray;
for(int fila=0;fila<3;fila++) [0][1]
for(int col=0;col<5;col++) [0][2]
*(p + 5*fila + col) = 0; [0][3]
[0][4]
int (*nn)[5] = ia; [1][0]
for (int pn=0;pn<15;pn++){ [1][1]
cout<<"ia: "<<*(*nn+pn)<<endl;
} [1][2]
…
…
int *myp = *ia;
for (int pn=0;pn<15;pn++){ [Filas-1][Cols-1]
cout<<"ia: "<<*(myp+pn)<<endl;
}
Tipos de Datos Complejos: Registros
(estructuras) en C/C++
Definición general:
struct type-name {elementos};
Registros (estructuras) en C/C++
Ejemplo:
struct {
char sexo;
int edad;
char primernombre[10];
char apellido[15];
} minombre;
typedef struct{
char sexo;
int edad;
char primernombre[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:
typedef struct{
TIPONOMBRE alumnonombre;
TIPODIRECCION alumnodireccion;
} TIPOALUMNO;
TIPOALUMNO alumno_x;
imprime_poliza(&poliza);