matrices, estructuras
matrices, estructuras
matrices, estructuras
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Matrices (1)<br />
• Las <strong>matrices</strong> son una colección de variables del<br />
mismo tipo que se referencias utilizando un nombre<br />
común. Consta de posiciones de memoria contiguas.<br />
Puede tener una o varias dimensiones.<br />
• Para acceder a un elemento en particular de una<br />
matriz se usa un índice.<br />
tipo nombre_mat riz [tamaño];<br />
• La declaración int a[10]; declara una matriz llamada<br />
a, de 10 elementos de tipo entero.<br />
1
Matrices (2)<br />
2
Matrices (3)<br />
• Todas las <strong>matrices</strong> usan cero como índice para el<br />
primer elemento.<br />
• El lenguaje C no realiza comprobación del contornos<br />
de las <strong>matrices</strong>. En el caso de que sobrepase el final<br />
durante una operación de asignación, entonces se<br />
asignarán valores a otras variables o a un trozo de<br />
código, lo que probablemente provoque un fallo del<br />
programa.<br />
• C permite <strong>matrices</strong> con más de una dimensión.<br />
tipo<br />
nombre_mat riz<br />
[tam1][tam2]...[tamN];<br />
3
Matrices (4)<br />
• Para inicializar los elementos de una matriz a algún<br />
valor, debe hacerse uno a uno.<br />
• Para copiar el contenido de una matriz a otra debe<br />
copiarse cada elemento uno a uno. No se puede<br />
asignar una matriz a otra. Lo siguiente es ilegal:<br />
int a[10], b[10];<br />
//hacer algo<br />
a=b;//error ilegal<br />
En vez, se debe hacer asignaciones por cada elemento:<br />
int i;<br />
for(i=0;i
Matrices (5)<br />
• int numeros[]={1,3,34,54};<br />
• char alfabeto[5]={‘A’,’B’,’C’,’D’,’E’};<br />
• char nombres[][40]={“pedro”, “pablo”, “luis”,<br />
“carmen”, “belen”, “laura”};<br />
• coordenadas[2][2]=<br />
{<br />
{0,0},{1,1}<br />
};<br />
5
Matrices (6)<br />
• Si una matriz es declarado en la función principal<br />
“main()” tendra las dimensiones incluidas.<br />
• Si no se desea tamaño fijo se pueden utilizar<br />
punteros.<br />
• Cuando se pasa una matriz a una función, esta<br />
última no necesita saber el tamaño.<br />
• En C, una matriz se asocia a localizaciones de<br />
memoria contiguas. La dirección más baja<br />
corresponde al primer elemento, y la más alta al<br />
último elemento.<br />
6
Matrices (7)<br />
int a[8];<br />
int j;<br />
for(j=0;j
Matrices (8)<br />
#include <br />
int main(){<br />
int muestra[10],t;<br />
for(t=0;t
Matrices (9)<br />
#include<br />
int main(){<br />
int i, max=0;<br />
int list[100];<br />
for(i=0;i
Matrices (10)<br />
• La forma general de declaración de una<br />
matriz unidimensional es:<br />
tipo nombre_de_variable[tamaño];<br />
• La cantidad de memoria en bytes viene<br />
dada por:<br />
bytes_totales = sizeof(tipo)*tamaño;<br />
10
Matrices (11)<br />
• Un arreglo bidimensional es una lista de arreglos unidimensional<br />
• Para declarar un arreglo bidimensional de enteros<br />
• int matriz[3][4];<br />
11
Matrices (12)<br />
#include<br />
int main(){<br />
int fila,col,matriz[3][4];<br />
for(fila=0;fila
Matrices (13)<br />
• El almacenamiento de los elementos de<br />
una matriz se determina en tiempo de<br />
compilación<br />
• La memoria usada se requiere mientras el<br />
arreglo exista.<br />
• La siguiente formula determina el numero<br />
de bytes que necesita ser asignada:<br />
Bytes=fila*col*numero_bytes_tipo;<br />
13
Cadenas (1)<br />
• El uso más común para un arreglo unidimensional es<br />
guardar una matriz de caracteres<br />
• Un string esta definido como una matriz de caracteres<br />
terminado por un símbolo null (‘\0’)<br />
h<br />
o<br />
l<br />
‘\0’<br />
• Para que una matriz contenga un string de 10 caracteres,<br />
char str[11]. La posición 11 se tiene que reservar para el<br />
final de la cadena, indicado con un nulo ‘\0’.<br />
• Para asignar la entrada estándar a una cadena se puede<br />
usar la función scanf con la opción %s, de igual forma para<br />
mostrarlo en la salida estándar.<br />
a<br />
14
Cadenas (2)<br />
#include<br />
int main(){<br />
char str[80];<br />
printf(“escribir string”);<br />
scanf(“%s”,str); //no lleva &<br />
return 0;<br />
}<br />
Problema: se detiene cuando lee un espacio<br />
en blanco<br />
15
Cadenas (3)<br />
#include<br />
int main(){<br />
char str[80];<br />
printf(“escribir string”);<br />
}<br />
gets(str);//considera espacio blanco<br />
return 0;<br />
16
Cadenas (4)<br />
• Declaración:<br />
Se declaran como <strong>matrices</strong> unidimensionales.<br />
Debe contener 1 carácter más que la cadena<br />
más larga que pueda contener.<br />
char cadena[6];<br />
0 1 2 3 4 5<br />
\0<br />
Puede contener hasta<br />
5 caracteres<br />
Caracter que marca el fin del string<br />
17
Cadenas (5)<br />
Biblioteca: string.h<br />
• strcpy() : copia caracteres de un string a otro<br />
• strcat() : concatenación de string<br />
• strlen() : largo del string<br />
• strcmp(): comparación de string<br />
Función Prototipo Acción Retorna<br />
strcpy() char *strcpy(char *s1,const char *s2); Copia s2 en s1. s1<br />
strcat() char *strcat(char *s1,const char *s2); Concatena s2 en s1. s1<br />
strlen() int strlen(const char *s1);<br />
Longitud de s1<br />
strcmp() int strcmp(const char *s1,const char *s2); Compara s2 con s1 0 si son iguales<br />
>0 si s1>s2<br />
Cadenas (6)<br />
#include <br />
#include <br />
int main(void){<br />
char c1[80],c2[80];<br />
printf("\n Ingrese una cadena de caracteres:");<br />
scanf("%s",c1);<br />
printf("\n Ingrese una cadena de caracteres:");<br />
scanf("%s",c2);<br />
printf("\n Longitudes: %d %d ",strlen(c1),strlen(c2));<br />
if(!strcmp(c1,c2)) printf("\nLas cadenas son iguales");<br />
strcat(c1,c2);<br />
printf("\n %s",c1);<br />
}<br />
return 0;<br />
19
Estructuras (1)<br />
• Una estructura es una colección de variables<br />
que se denomina bajo un único nombre,<br />
proporcionando un medio eficaz de mantener<br />
junta la información relacionada.<br />
• Una declaración de estructura forma una<br />
plantilla que puede utilizarse para crear<br />
variables de <strong>estructuras</strong>.<br />
• Las variables que componen la estructura se<br />
llaman elementos de la estructura o campo.<br />
20
Estructuras (2)<br />
• La palabra clave struct indica al compilador<br />
que se está declarando una estructura.<br />
struct nombre_estructura{<br />
};<br />
tipo_dato_1 campo_1;<br />
tipo_dato_2 campo_2;<br />
….<br />
tipo_dato_n campo_n;<br />
21
Estructuras (3)<br />
• Una vez declarada la estructura se debe<br />
declarar variables con esta estructura:<br />
struct nombre_estructura variable_1,variable_2,….;<br />
• Cuando se declara una estructura, se está<br />
definiendo, esencialmente un tipo complejo de<br />
variable compuesto por los elementos de la<br />
estructura.<br />
22
Estructuras (4)<br />
struct nombre_estructura{<br />
tipo_dato_1 campo_1;<br />
tipo_dato_2 campo_2;<br />
….<br />
tipo_dato_n campo_n;<br />
}variable_1,variable_2,...;<br />
23
Estructuras (5)<br />
• A los elementos individuales de una estructura<br />
se hace referencia utilizando el operador ‘.’:<br />
variable_1.campo_i;<br />
24
Estructuras (6)<br />
#include <br />
struct datos{<br />
char nombre[30];<br />
char direccion[30];<br />
int n_empleado,edad;<br />
float sueldo;<br />
}<br />
void main(){<br />
struct datos persona;<br />
printf(“\n Ingrese número de empleado:”);<br />
scanf(“%d”,&persona.n_empleado);<br />
printf(“\n Ingrese nombre:”);<br />
scanf(“%s”,persona.nombre);<br />
printf(“\n Ingrese edad:”);<br />
scanf(“%d”,&persona.edad);<br />
printf(“\n Ingrese dirección:”);<br />
scanf(“%s”,persona.direccion);<br />
printf(“\n Ingrese sueldo:”);<br />
scanf(“%f”,&persona.sueldo);<br />
}<br />
25
Estructuras (7)<br />
• Para declarar un arreglo de <strong>estructuras</strong>, se debe<br />
definir primero la estructura y luego declarar un<br />
variable arreglo de dicho tipo.<br />
struct nombre_estructura variable[Tamaño];<br />
26
Estructuras (8)<br />
#include <br />
struct datos{<br />
char nombre[30];<br />
char direccion[30];<br />
int n_empleado,edad;<br />
float sueldo;<br />
}<br />
void main(){<br />
struct datos persona[10];<br />
for (int i=0;i
Estructuras (9)<br />
• Se puede pasar un elemento o la estructura<br />
completa a una función.<br />
Paso de un elemento:<br />
struct nombre_estructura{<br />
tipo_dato_1 campo_1;<br />
tipo_dato_2 campo_2;<br />
….<br />
}variable_1;<br />
tipo_dato_n campo_n;<br />
int funcion(tipo_dato_i VARIABLE);<br />
….<br />
funcion(variable_1.campo_i);<br />
28
Estructuras (10)<br />
#include <br />
struct datos{<br />
char nombre[30];<br />
char direccion[30];<br />
int n_empleado,edad;<br />
float sueldo;<br />
}<br />
float funcion(float *a,int t){<br />
*a=(float) (t*1.015);<br />
return *a;<br />
}<br />
void main(){<br />
float f;<br />
struct datos persona[10];<br />
f=funcion(&persona.sueldo,10);<br />
}<br />
29
Estructuras (11)<br />
Paso de una estructura completa por valor:<br />
struct nombre_estructura{<br />
tipo_dato_1 campo_1;<br />
tipo_dato_2 campo_2;<br />
….<br />
tipo_dato_n campo_n;<br />
}variable_1;<br />
int funcion(struct nombre_estructura VARIABLE);<br />
….<br />
funcion(variable_1);<br />
30
Estructuras (12)<br />
#include <br />
struct datos{<br />
char nombre[30];<br />
char direccion[30];<br />
int n_empleado,edad;<br />
float sueldo;<br />
}<br />
void mostrar(struct datos A){<br />
printf(“\n Número de empleado: %d”, A.n_empleado);<br />
printf(“\n nombre: %s”, A.nombre);<br />
printf(“\n edad: %d”, A.edad);<br />
printf(“\n dirección: %s”, A.direccion);<br />
printf(“\n sueldo: %f”, A.sueldo);<br />
}<br />
}<br />
void main(){<br />
struct datos persona;<br />
...<br />
mostrar(persona);<br />
…<br />
}<br />
31
Estructuras (13)<br />
Paso de una estructura completa por referencia:<br />
struct nombre_estructura{<br />
tipo_dato_1 campo_1;<br />
tipo_dato_2 campo_2;<br />
….<br />
tipo_dato_n campo_n;<br />
};<br />
int funcion(struct nombre_estructura *VARIABLE){<br />
. . .<br />
VARIABLE->campo_1;<br />
. . .<br />
};<br />
. . .<br />
funcion(&variable_1);<br />
32
Estructuras (14)<br />
#include <br />
struct datos{<br />
char nombre[30];<br />
char direccion[30];<br />
int n_empleado,edad;<br />
float sueldo;<br />
}<br />
void modificar(struct datos *A){;<br />
printf(“\n Ingrese número de empleado:”);<br />
scanf(“%d”,&A->n_empleado);<br />
printf(“\n Ingrese nombre:”);<br />
scanf(“%s”,A->nombre);<br />
printf(“\n Ingrese edad:”);<br />
scanf(“%d”,&A->edad);<br />
printf(“\n Ingrese dirección:”);<br />
scanf(“%s”,A->direccion);<br />
printf(“\n Ingrese sueldo:”);<br />
scanf(“%f”,&A->sueldo);<br />
}<br />
void main(){<br />
struct datos persona;<br />
modificar(&persona);<br />
}<br />
33