10.01.2015 Views

matrices, estructuras

matrices, estructuras

matrices, estructuras

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!