You are on page 1of 14

Gua de Estudio

I.- INTRODUCCION En muchas situaciones se necesita procesar una coleccin de valores que estn relacionados entre s por algn mtodo, por ejemplo una lista de calificaciones, una serie de medidas de temperaturas tomadas de un paciente por un mes de hospitalizacin, etc. Procesar este tipo de informacin con datos simples es difcil, por eso los lenguajes incluyen caractersticas de estructuras de datos. Las estructuras de datos bsicas que soportan la mayora de los lenguajes de programacin son los "arrays" o arreglos uni o multidimensionales y Vectores de Matrices. Los arreglos son datos estructurados que tienen caractersticas comn que est representado por un nico Veremos como se definen estructuras y como sus miembros son accedidos y procesado dentro de un programa. II.- OBJETIVOS Conocer y aplicar la estructura de Arreglos Conocer la relacin entre estructuras y punteros III- CONTENIDOS / TEMAS Titulo de la Unidad : Elementos del lenguaje en C ++ Estructuras de Datos en C ++. Estructuras de datos Estticas comparados con las Dinmicas. Arreglos unidimensionales arreglos bidimensionales vectores y matrices ejemplos IV.- BIBLIOGRAFA Estructuras de Datos en Pascal, Luis Joyanes Aguilar, McGraw-Hill, 1993 Fundamentos de Programacin / algoritmos y Estructura de Datos, Luis Joyanes Aguilar, McGraw-Hill, 1993 Estructuras de datos en C , Aaron M. Tenebaum Programacin en C , Byron S. Gottfried Como programar en C/++ segunda Edicin, H.M , Deilet Curso de programacin con C Javier Carballo V.- ACTIVIDADES DE APRENDIZAJE 1. Elabore un programa que realice la suma, la multiplicacin de dos matrices (que sean de la misma dimensin)
1

2. Elabore un programa que lea 10 nmeros, luego imprima la lista en orden en que se digitaron, presente la lista en orden inverso, y luego ordene la lista e forma descendente 3. Elabore un programa que calcule la suma de la diagonal de una matriz utilizando puntero. 4. Escriba un programa que acepte la siguiente informacin para cada equipo de la liga de baseball. nombre del equipo nmeros de victorias nombre del jugador numero de carrera Almacenar la informacin en una estructura la media de la victoria por el equipo Nombre del jugador con mayor numero de victorias

5. Elabore el siguiente programa de Arreglos-Vectores-Matrices 5.1 Ejemplo 1. Ordenar ascendentemente un conjunto de nmeros que se leen desde el teclado de la computadora, y mostrarlos en pantalla ordenados. Si los nmeros a ordenar son pocos, por ejemplo tres, el problema se puede resolver fcilmente con la ayuda de tres variables A, B y C, Pero si los nmeros a ordenar son muchos, la utilizacin de variables resulta imposible y hay que recurrir a un almacenamiento de datos tipo vector. Por ejemplo, si los nmeros a ordenar nunca van a ser ms de 200, se utilizar un vector con una dimensin mxima de 200 elementos, de acuerdo con el programa que se pseudocodifica a continuacin. // Ordena ascendentemente un conjunto de nmeros _ 200 // Inicio A: vector [1..200] de nmeros_enteros N=0 Leer un nmero (NUM) Mientras Haya_datos N=N+1 Si N >200 Entonces Mostrar Error: Se han ledo ms de 200 nmeros STOP Fin_Si A [N]=NUM
2

Leer otro nmero (NUM) Fin_mientras Para I=1 hasta N-1 incremento 1 Para J=I+1 hasta N incremento 1 Si A[I] > A [J] Entonces VAR= A[I] A[I]=A[J] A [J] = VAR Fin_Si Fin_para Fin_para Para I=1 hasta N incremento 1 Mostrar el contenido de A[I] Fin_para Fin El programa anterior va leyendo nmero a nmero y los almacena en el vector A que tiene una capacidad para 200 nmeros. Si el nmero de datos ledos es >200, el programa emite el mensaje de: Error: Se han ledo ms de 200 nmeros y para. En caso contrario, contina la lectura de los datos hasta que no existen ms.

7. Escriba un programa que lea dos fechas de un mismo ao dadas por un da y un mes y calcule el numero de das transcurridos entre ambas. Tenga en cuenta que el ao puede ser bisiesto. VI.- AUTOEVALUACION Y CLAVE DE RESPUESTAS Qu entiende por arreglos? Cul es la diferencia entre Estructuras de Datos Dinmicos y Estructuras de Datos Estticos? Mencione los tipos de datos y explique dos de ellos? Que entiende por Vector? Qu es una matriz? Cules son los componentes de un arreglo? Qu entiende por punteros y estructuras?

VII.- DESARROLLO DEL CONTENIDO


Tipos de datos Existen en C distintos tipos de datos, cada uno de los cuales se pueden encontrar representado por forma diferente en la memoria de la computadora Tipos de datos Int Char Float Descripcin Cadena entera Carcter Numero de coma flotante

Estos pueden ser estticos y dinmicos: Estructuras de datos Estticos: son aquellas que el tamao ocupado en memoria se define antes de que le programa se ejecute y no puede modificarse dicho tamao durante la ejecucin del programa. Arreglos, registros, conjuntos y archivos. Estructuras de datos Dinmicos: no tienen limitaciones o restricciones en el tamao de la memoria ocupado. Lista (pilas, colas), rboles.

Arreglos:
Es una coleccin de casillas de memoria para almacenar una lista de valores que deben ser del mismo tipo. A la lista completa se le da un nombre. Por ejemplo supngase que se desea localizar el mayor de un grupo de nmeros. Si se trata de unos cuantos nmeros, el problema puede resolverse mediante proposiciones IF anidadas. Cada uno de las proposiciones If comparara dos nmeros. Supngase que se deben examinar mil nmeros. Una serie de proposiciones IF sera muy poco prctica, como lo sera declarar las mil variables enteras. Los componente de un arreglo vectores son : Nombre de la matriz Tipos de datos Dimensiones Tipo base (subndice)

Tipos de Arreglos son : Arreglos unidimencionales Bidimensionales Multidimencionales Tridimensionales

Los arreglos se definen en gran parte como las variables ordinarias. Para un arreglo unidimencional el tamao se especifica con una expresin entera positiva encerrada entre parntesis cuadrados. En termino general un arreglo unidimencional se puede expresar como: EJEMPLOS DE ARREGLOS UNIDIMENSIONAL: Ejemplo # 1 Calcular la media de n nmeros, despus de computar las desviaciones de cada nmero respecto a la media. # include <stdio.h> # include <conio.h> void main ( ) { int n,cont; float media,d,suma=0; float lista[100]; clrscr; /* leer el valor de n*/ printf("Cuantos numero para calcular la media?"); scanf("%d",&n); printf("\n"); /* leer los numeros y calcular la suma*/ for (cont=0; cont<n; ++cont) { printf("i = %d x =",cont +1); scanf("%f",&lista[cont]); suma+=lista[cont]; } /* calcular lamedia y escribir la repuesta*/ media=suma/n; printf("\n LA MEDIA ES : %5.2f \n\n",media); /* calcular y escribir las desviaciones respecto a la media*/ for (cont =0; cont<n; ++cont){ d= lista[cont]- media; printf("i = %d x =%5.2f d=%5.2f \n ",cont +1 , lista[cont],d); getche (); }}

Ejemplo # 2 Programa que realiza el promedio de una lista # include <stdio.h> # include <conio.h> void main ( ) { int temp [10],i,n,suma=0; float prom=0; clrscr (); printf ("\n\ Cuantos datos desea procesar?"); scanf("%d",&n); printf ("\n"); for (i=0; i<n; i++) { scanf("%d",&temp[i]); suma=suma+temp[i]; } prom=suma/n; printf("\n El promedio es: %7.2f",prom); getche(); }

ARREGLOS BIDIMENSIONALES:
El uso de arreglos bidimensionales depende de los datos a procesar, si se quiere organizar como una tabla con varias lneas y columnas (matriz). Son arreglos que tienen ms dedos dimensiones se accede con el nombre # filas ,y # de columnas Matriz [0][0] A=1 B=1 For (i=0; i < 3; i++) For (j=0; j <3 ; i++ ) } Donde i representa las filas y j las columnas Realice una estructura de una matriz que contenga tres filas y tres columnas, y luego represente a la primera columna el valor de 1

Ejemplo # 1 Programa que cuenta los elementos de la matriz que estn entre 500 y 700 # include <stdio.h> #include<dos.h> # include <conio.h> void main (void) { int matriz[15][15]; int f,i,c,j ; int cont=0; clrscr (); textcolor (4); printf("LECTURA DE LOS DATOS PARA UNA MATRIZ :\n\t"); printf ("\nCUANTAS COLUMNAS==>"); scanf("%d",&c); printf ("\nCUANTAS FILAS==>"); scanf("%d",&f); printf("\n"); for (i=0; i<f; i++) /* inicializar la matriz*/ { for (j=0; j<c; j++) { matriz[i][j]=0; } } for (i=0; i<f; i++) /*leer los datos de la matriz*/ { for (j=0; j<c; j++) { printf("a[%d,%d]=>",i,j); scanf("%d",&matriz[i][j]); } } printf("IDENTIFICANDO VALORES ENTRE 500 Y 700 :\n"); for (i=0; i<f; i++) /* Presenta los datos de la matriz*/ for (j=0; j<c; j++) { if(matriz[i][j]>500 && matriz[i][j]<700) { cont=cont+1; delay(200); } } printf ("\n La cantidad de elementos entre 500 y 700 son:%d",cont); getche(); }

CONCEPTOS DE VECTORES Y MATRICES


Un vector es una estructura de datos formada por un conjunto ordenado de elementos, todos de la misma naturaleza, que se distinguen entre s por el lugar que ocupan. De manera que cada elemento se identifica por su posicin a la que se le asocia un ndice que seala el nmero de orden dentro de la estructura.

Por otra parte, el definir un tipo para un vector es muy importante ya que permite conocer el tipo de contenido y el nmero de elementos que puede tener ese vector, por lo que si se le declara incorrectamente (no se ajusta al contenido o al nmero de elementos) la computadora lo sealar como errneo. La utilizacin de matrices de dos, tres o n dimensiones proporciona estructuras de gran potencia y versatilidad, ya que permiten atacar una gran variedad de problemas imposible de todo punto con la utilizacin de vectores. Ejemplo # 2 Programa que muestra el resultado de la diagonal de una matriz y elemento mayor 8 5 1 13 10 2 18 11 3

# include <stdio.h> #include<dos.h> # include <conio.h> void main () { int a,mayor=0, elemento[15][15]; int f,i,c,j; clrscr (); printf ("CUANTAS COLUMNAS==>"); scanf("%d",&c); printf ("CUANTAS FILAS==>"); scanf("%d",&f); for (i=0; i<f; i++) /* inicializar la matriz*/ { for (j=0; j<c; j++) { elemento[i][j]=0; }

for (i=0; i<f; i++) /*leer los datos de la matriz*/ { for (j=0; j<c; j++) { printf("a[%d,%d]=>",i,j); scanf("%d",&elemento[i][j]); } } printf("\n"); printf("LOS ELEMENTOS DE LA MATRIZ DADA :\n"); /* presentar los datos de la matriz */ a=1; for (i=0; i<f; i++) { for (j=0; j<c; j++) { if(a==c) { printf("\n");
8

printf("a[%d,%d]=%d\t",i,j,elemento[i][j]); delay(200); } else { printf("a[%d,%d]=%d\t",i,j,elemento[i][j]); delay(200); } a=a+j; }} printf("\n\n"); /* busca el elemento de la diagonal y elemento mayor */ printf(" los elementos de la diagonal :\n"); for (i=0; i<f; i++) { for (j=0; j<c; j++) { if (i==j) { printf("a[%d,%d]=%d\t",i,j,elemento[i][j]); if (elemento[i][j]>mayor) mayor= elemento[i][j]; } } } printf ("\n\nelemento mayor de la diagonal = %d\t",mayor); getche(); }

Estructura:
Una estructura es un grupo de objeto en el que se identifica a cada uno mediante su propio identificador, cada uno de los cuales se conoce como Miembro de la estructura. Por ejemplo considrese la siguiente declaracin Struct { Char primero[10]; Char medio; Char ultimo [20]; } ; Nombre[10 ] Por ejemplo considrese la siguiente declaracin que hace lo mismo que la anterior Struct Listado { Char primero[10]; Char medio; Char ultimo [20]; }; struct Listado numero[100] Esta definicin crea una etiqueta de estructura Listado que contiene tres miembros, primero, medio, ultimo. Una vez definida la etiqueta de la estructura, pueden declarar las variables numero. Para mayor claridad del programa, es recomendable declarar una etiqueta para cada estructura.
9

Otra alternativa para la etiqueta es usar la definicin Typedef por ejemplo Typedef Struct { Char primero[10]; Char medio; Char ultimo [20]; } Nametype sname; La declaracin de estructuras es algo ms complicada que la declaracin de array, ya que una estructura debe ser definida en trminos de sus miembros individuales , tambin puede ser definida ; Struct marca { Miembro 1; Miembro 2; ......... Miembro M; }; En esta declaracin Struct es la palabra clave requerida, marca un nombre que identifica estructura de este tipo . Los miembros individuales pueden ser variables ordinarias, punteros , arreglos u otra estructuras, los nombre de los miembros dentro de una estructura particular deben ser todos diferentes , Ejemplo # 1 Programa que imprime una lista de 3 alumnos utilizando una constante saca el mayor y el menor de esa lista y luego los ordena por edad utilizando arreglos y estructuras . # include <stdio.h> # include <conio.h> # include <string.h> # define M 3 struct alumno { /* name: nombre ca:carrera e:edad*/ char name[15],ca[15]; int e; } lis[M],t; void main () { /* funcion principal*/ int max,min,i,j; /* declaracion de variables*/ char nmax[15],nmin[15]; clrscr(); for(i=0;i<M;i++){ clrscr();
10

printf("\n Nombre del Estudiante :"); scanf("%s",lis[i].name); printf("\n Carrera del Estudiante:"); scanf("%s",lis[i].ca); printf("\n Edad del Estudiante :"); scanf("%d",&lis[i].e); } for(i=0;i<M;i++) /* Lectura de los datos */ for(j=0;j<M-1;j++) if(lis[j].e>lis[j+1].e){ t=lis[j]; lis[j]=lis[j+1]; lis[j+1]=t; } clrscr(); printf("\n \n LISTA DE LOS DATOSORDENADOS POR EDAD"); printf("\n"); for(i=0;i<M;i++) printf("%s %s %s %s %d \n",lis[i].name ," " , lis[i].ca , " " , lis[i].e); printf("\n"); max=lis[0].e; for(i=0;i<M;i++){ if(lis[i].e>max){ max=lis[i].e; strcpy(nmax,lis[i].name); } if(lis[i].e<min){ min=lis[i].e; strcpy(nmin,lis[i].name); } } printf("\n"); printf("\n\n === Datos del mayor ====:\n"); printf("\n"); printf("%s %s\n"," El Nombre es :",nmax); printf("%s %d\n"," Con la Edad de :",max); printf("\n"); printf("\n *****Datos del menor :\n"); printf("\n"); printf("%s %s\n","El Nombre es :",nmin); printf("%s %d\n","con la Edad de :",min); getche ( ); } }

PUNTEROS
Un puntero es una variable que representa la posicin de otro dato tal como una variable o un elemento de un array. Los Punteros son usados frecuentemente en C y tiene gran cantidad de aplicaciones. Por ejemplo puede ser usado para trasvasar informacin entre una funcin y sus puntos de llamadas. Los punteros estn muy relacionados con los arreglos y proporcionan una va alternativa de acceso a los elementos individuales del arreglo.

11

El puntero se declara de la siguiente manera: Tipo dato *ptvar Donde Ptvar es el nombre de la variable puntero y tipo de dato se refiere al tipo de dato apuntado por el puntero. Un programa en c contiene las siguientes declaraciones. Float u,v; Float * pv; La primera lnea declara a U y V como variables flotantes, la segunda declara lnea Pv como una variable de puntero es una cantidad en coma flotante. El puntero es una variable que guarda la direccin en memoria de otra variable. El segundo mtodo utiliza funciones predefinidas en C, como Malloc, free. Estas funciones se utilizan para realizar las asignaciones de memoria La asignacin dinmica de memoria consiste en asignar una cantidad de memoria necesaria para almacenar un objeto, durante la ejecucin del programa. ASIGNACION DINAMICA DE MEMORIA Malloc : Esta funcin asigna un bloque de memoria de por lo menos T bytes. # include <stdlib,h> # include <malloc.h> void *malloc(t); size t t; Malloc devuelve un puntero que referencia el espacio asignado, a un objeto de un tipo no especificado. Calloc (n,t) Asigna espacio de memoria para un array de n elementos de longitud t bytes cada elemento es inicializado por cero. # include <stdlib,h> # include <malloc.h> void *calloc(n,t); size t n, t; Calloc devuelve un puntero al espacio asignado.. Este espacio puede ser asignado a un objeto de cualquier tipo. Realloc (p,t) : Esta funcin cambia el tamao de un bloque de memoria previamente asignado, el argumento p es un puntero que apunta al comienzo del bloque. # include <stdlib,h>
12

# include <malloc.h> void *realloc(p,t); void * p; size t t; Realloc devuelve un puntero al espacio asignado. Free: Libera un bloque de memoria asignado por las funciones Malloc, Calloc, y realloc, un puntero Nulo es ignorado.

//Programa # 21 Jenaro C. Paz #include <stdio.h> #include <conio.h> #include <string.h> #include <alloc.h> void main() { char *pntrs[100]; int i,j,k,longi; char tempo[80]; char opcion; for(i=0;i<100;i++) pntrs[i]=NULL; clrscr(); for(k=0;k<100;k++) { printf("Deseas introducir informacion (S/N) : "); opcion = getche(); if(opcion =='N' || opcion =='n') { printf("\n"); break;} printf("\nNombre: "); gets(tempo); longi=strlen(tempo); pntrs[k]=(char *)malloc(longi+1); strcpy(pntrs[k],tempo); } for(j=0;j<100;j++) { if(pntrs[j]==NULL) break; puts(pntrs[j]); } getch(); }
13

Analice, Comente y diga cual es la salida del siguiente programa.. investigar las funciones desconocidas.. #include <stdio.h> #include <conio.h> #include <string.h> #include <alloc.h> void main( ) { struct personas { char nombre[28]; char dom[25]; char telefono[9]; float sueldo; int ID; }; struct persona *pts[10],*p; int i,j, Iden; char opcion; float suel; for(i=0;i<100;i++) pts[i]=NULL; clrscr(); for(i=0;i<100;i++) { printf("Deseas introducir informacion (S/N) : "); opcion = getche();flushall(); if(opcion =='N' || opcion =='n') { printf("\n"); break;} p=(struct persona *)malloc(sizeof(struct persona)); printf("\nNombre (%d) : ",i+1); gets(p->nom); printf("Domicilio: ");gets(p->dom); printf("Telefono: ");gets(p->tel); printf("Sueldo: ");scanf("%f",&suel); p->sueldo=suel; printf("Identificador: ");scanf("%d",&Iden);p->ID=Iden; pts[i]=p; } clrscr(); printf("%-25s%-20s%10s%10s%6s\n","Nombre","Domicilio","Telefono","Sueldo","ID"); for(j=0;j<100;j++) { p=pts[j]; if(p==NULL) break; printf("%-25s%-20s%10s%10.2f%6d\n",p->nom,p->dom,p->tel,p->sueldo,p->ID); } free(p); getch(); }
14