domingo, 25 de abril de 2010

PROYECTO 4 "LISTAS SIMPLEMENTE ENLAZADAS"


En Ciencias de la Computación, una lista enlazada es una de las estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de datos. Consiste en una secuencia de nodos, en los que se guardan campos de datos arbitrarios y una o dos referencias (punteros) al nodo anterior y/o posterior. El principal beneficio de las listas enlazadas respecto a los array convencionales es que el orden de los elementos enlazados puede ser diferente al orden de almacenamiento en la memoria o el disco, permitiendo que el orden de recorrido de la lista sea diferente al de almacenamiento.

Explicación:

Apuntador toma el valor de Inicio, después ve si la condición cumple para efectuar un Ciclo mientras Apuntador sea diferente de 0, si cumple lo que hace es que despliega la Info[Apuntador], después Apuntador toma el valor de Indice[Apuntador] (El cual nos indica el siguiente nodo que sigue en la lista) y hace esto hasta que Apuntador sea igual a 0 (Cuando llega a este punto a llegado al fin de la Lista Enlazada).

Algoritmo:

Recorrido(Inicio, Info, Indice)

Apuntador ←- Inicio

Repetir mientras Apuntador ≠ Nill

Imprimir Info[Apuntador]

Apuntador ←- Indice[Apuntador]

Fin del ciclo

Salir

Cabe destacar que se pueden realizar algunas operaciones en las listas enlazadas como:

Inserción en una lista vacía.


Etapas:
  • asignación de memoria para el nuevo elemento
  • rellenar el campo de datos del nuevo elemento
  • el puntero siguiente del nuevo elemento apuntará hacia NULL (ya que la inserción es hecha en una lista vacía se utiliza la dirección del puntero inicio que vale NULL)
  • los punteros inicio y fin apuntaran hacia el nuevo elemento
  • el tamaño es actualizado













Inserción al inicio de la lista


Etapas:
  • asignación de memoria al nuevo elemento
  • rellenar el campo de datos del nuevo elemento
  • el puntero siguiente del nuevo elemento apunta hacia el primer elemento
  • el puntero inicio apunta hacia el nuevo elemento
  • el puntero fin no cambia
  • el tamaño es incrementado

Inserción al final de la lista


Etapas:
  • asignación de memoria al nuevo elemento
  • rellenar el campo de datos del nuevo elemento
  • el puntero siguiente del ultimo elemento apunta hacia el nuevo elemento
  • el puntero fin apunta hacia el nuevo elemento
  • el puntero inicio no cambia
  • el tamaño es incrementado



El pseodocodigo se realizo con el compilador dev c++
#include

struct _agenda {
char nombre[20];
char telefono[12];
char habitacion[12];
struct _agenda *siguiente;
};

struct _agenda *primero, *ultimo;

void mostrar_menu() {
printf("\n\nMenu:\n=====\n\n");
printf("1.- Anadir Huesped(ALTA)\n");
printf("2.- Mostrar lista de huespedes\n");
printf("3.- Salir\n\n");
printf("Escoge una opcion: ");fflush(stdout);
}

/* Con esta función añadimos un elemento al final de la lista */
void anadir_elemento() {
struct _agenda *nuevo;

/* reservamos memoria para el nuevo elemento */
nuevo = (struct _agenda *) malloc (sizeof(struct _agenda));
if (nuevo==NULL) printf( "No hay memoria disponible!\n");

printf("\nAgregar Huesped:\n");
printf("\nIngrese Informacion\n");
printf("Nombre: "); fflush(stdout);
gets(nuevo->nombre);
printf("Telefono: "); fflush(stdout);
gets(nuevo->telefono);
printf("Asignar Habitacion: "); fflush(stdout);
gets(nuevo->habitacion);

/* el campo siguiente va a ser NULL por ser el último elemento
de la lista */
nuevo->siguiente = NULL;

/* ahora metemos el nuevo elemento en la lista. lo situamos
al final de la lista */
/* comprobamos si la lista está vacía. si primero==NULL es que no
hay ningún elemento en la lista. también vale ultimo==NULL */
if (primero==NULL) {
printf( "Registrado\n");
primero = nuevo;
ultimo = nuevo;
}
else {
/* el que hasta ahora era el último tiene que apuntar al nuevo */
ultimo->siguiente = nuevo;
/* hacemos que el nuevo sea ahora el último */
ultimo = nuevo;
}
}

void mostrar_lista() {
struct _agenda *auxiliar; /* lo usamos para recorrer la lista */
int i;

i=0;
auxiliar = primero;
printf("\nMostrando la lista completa:\n");
while (auxiliar!=NULL) {
printf( "Nombre: %s, Telefono: %s,Habitacion: %s\n",
auxiliar->nombre,auxiliar->telefono,auxiliar->habitacion);
auxiliar = auxiliar->siguiente;
i++;
}
if (i==0) printf( "\nLa lista esta vacia!!\n" );
}

int main() {
char opcion;

primero = (struct _agenda *) NULL;
ultimo = (struct _agenda *) NULL;
do {
mostrar_menu();
opcion = getch();
switch ( opcion ) {
case '1': anadir_elemento();
break;
case '2': mostrar_lista(primero);
break;
case '3': exit( 1 );
default: printf( "Opcion no valida\n" );
break;
}
} while (opcion!='3');
}



Mi colaboracion con el equipo fue la realizacion de la presentacion asi como en la modificacion del pseoudocodigo y considero que mi trabajo estuvo bien.
En la realizacion de las diapositivas, siento que me hace falta mejorar en en el pseudocodigo,ayudo a los demas con aportaciones que creo son de apoyo para el trabajo, el trabajo lo coordina mi compañero Rodolfo Aguire, el papel que desempeño es aportando y en la realizacion de las diapositivas.
El hacer estos trabajos me deja una satisfacción personal ya que estoy aprendiendo cada dia cosas interesantes ya que en el futuro me seran de gran utilidad para mi desempeño academico.



BINLIOGRAFIA

http://html.rincondelvago.com/estructura-de-datos_7.html
http://es.kioskea.net/faq/2842-la-lista-enlazada-simple
http://www.monografias.com/trabajos28/listas-enlazadas/listas-enlazadas.shtml


domingo, 14 de marzo de 2010

PROYECTO #3

PROYECTO #3
"NUMEROS CATALAN"


En combinatoria, los números de Catalan forman una secuencia de números naturales que aparece en varios problemas de conteo que habitualmente son recursivos. Obtienen su nombre del matemático belga Eugène Charles Catalan (1814–1894).
El n-ésimo número de Catalan se obtiene, aplicando coeficientes binomiales, a partir de la siguiente fórmula:


Cn= 1/n+1(2n/n)= (2n)!/(n+1)!n! con=>0


EL PSEUDOCODIGO FUE REALISADO EN EL COMPILADOR DE C++

#include

/*PROGRAMA PARA ENCONTRAR LOS NUMEROS CATALANES */
/*PARA QUE EL PROGRAMA PUEDA EJECUTARSE CORRECTAMENTE ES NESCESARIO GUARDARLO EN CPP. Y NO C.*/
long*numero;
int n,i;

main()
{

printf("Ingrese el numero deseado de la serie:");
scanf("%d", &n);
numero = new long[n+1];
numero[0] = 1;

for (i = 1; i <= n; i++)
{
numero[i] = (numero[i-1]*2*(2*i-1))/(i+1);
}
printf("\nEl numero de Catalan para el numero %d es %d",n,numero[n]);

getchar();
getchar();
getchar();
}


REPORTE:

QUE ES RECURCION?
Es la forma en la cual se especifica un proceso, se usa en programas de gran tamaño el cual te ayuda a dividirlo en intancias mas pequeñas y asi sea mas facil resolverlo y para que dicho programa no sea un circulo sin fin.

Como grupo trabajamos en comun ya que para nosotros es algo nuevo
lo que estamos aprendiendo por lo cual me senti satisfecho con el trabajo realizado.

Mi contribución altrabajo fue realizar la presentación y el pseudocodigo y buscar información nesesaria para la realisacion del
trabajo.

creo que el trabajo no tiene comparacion porque todos trabajamos en equipo contribuyendo todos por igual.

En realizar con más rapidez y facilidad los pseudocodigos y las definiciones en las diapositvas.

LIGA PARA LA PRESENTACION DE EL PROYECTO:

http://rapidshare.com/files/363496541/PROYECTO.pptx

LIGAS DE LOS BLOG DE LOS INTEGRANTED DE MI EQUIPO:

http://technolifeandmore.blogspot.com/
http://algoritmoscomputacionalesras.blogspot.com/

viernes, 19 de febrero de 2010

1º PROYECTO DE ALGORITMOS COMPUTACIONALES

El primer proyecto fue realizado por los alumnos Rodolfo Aguirre Silva con numero de matricula 1535346 y por Cristhian Vladimir Estrada Guardado con numero de matricula 1377870.

El programa fue creado para facilitar al consumidor, la localizacion de algunos establecimientos.

Se utilizo el compilador DEVC++, para realizar el pseudocodigo.

/*Programa para buscar la direccion y el telefono de un establecimiento en monterrey*/
#include

main()
{
int opcion,pregunta,opcion2,opcion3,opcion4,opcion5,opcion6,opcion7,respuesta,volver;
volver=1;
while (volver==1)/*ciclo para repetir programa*/
{
printf("\nIngrese el numero de la opcion a elejir:\n");
printf("********************");
printf("\n* 1.Pizzerias *\n********************\n* 2.Hoteles *\n********************\n* 3.Bares *\n********************\n* 4.Zapaterias *\n********************\n* 5.Sears *\n********************\n* 6.Liverpool *\n********************\nOpcion#:");
scanf("%d",&opcion);
while (opcion>6 || opcion<1) /*ciclo para evitar ingreso de opciones no disponibles*/
{
printf("\nEsa opcion no esta disponible\n");
printf("********************");
printf("\n* 1.Pizzerias *\n********************\n* 2.Hoteles *\n********************\n* 3.Bares *\n********************\n* 4.Zapaterias *\n********************\n* 5.Sears *\n********************\n* 6.Liverpool *\n********************\nOpcion#:");
scanf("%d",&opcion);
}
if (opcion==1)/*Opciones y impresion de cada una*/
{
printf("\nSeleccione un establecimiento:\n");
printf("********************");
printf("\n* 1.DOMINO S PIZZA *\n* 2.JOSEPHINO'S *\n* 3.LUIGIS PIZZA *\n* 4.PIZZA HUT *\n********************\nOpcion#:");
scanf("%d",&opcion2);
while (opcion2>4 || opcion2<1)/*ciclo para evitar ingreso de opciones no disponibles*/
{
printf("\nEsa opcion no esta disponible\n");
printf("\nSeleccione un establecimiento:\n");
printf("********************");
printf("\n* 1.DOMINO S PIZZA *\n* 2.JOSEPHINO'S *\n* 3.LUIGIS PIZZA *\n* 4.PIZZA HUT *\n********************\nOpcion#:");
scanf("%d",&opcion2);
}
if (opcion2==1)
{
printf("**********************************************************************");
printf("\nDOMINO S PIZZA\nUbicación:\nAVE UNIVERSIDAD 111 , MONTERREY CENTRO , C.P 64000\nTel:(81)8370-9586\n");
printf("**********************************************************************");
}
if (opcion2==2)
{
printf("**********************************************************************");
printf("\nJOSEPHINO'S Ubicación:\nPADRE MIER 276 , C.P 64720 , MONTERREY , NL\nTel:(81)8342-6790\n");
printf("**********************************************************************");
}
if (opcion2==3)
{
printf("**********************************************************************");
printf("\nLUIGIS PIZZA & MORE\nUbicación:\nBLVD ACAPULCO 3964 , VALLE DE LAS BRISAS , C.P 64790 , MONTERREY , NL\nTel:(81)8349-2623\n");
printf("**********************************************************************");
}
if (opcion2==4)
{
printf("**********************************************************************");
printf("\nPIZZA HUT\nUbicación:\nUNIVERSIDAD 139 LOC 1 , ANAHUAC , C.P 66450 , MONTERREY , NL\nTel:(81)8343-8652\n");
printf("**********************************************************************");
}
}


if (opcion==2)/*Opciones y impresion de cada una*/
{
printf("\nSeleccione un establecimiento:\n");
printf("***********************************************");
printf("\n* 1.HOTEL FIESTA *\n* 2.BEST WESTERN *\n* 3.HOTEL CITY EXPRESS MONTERREY AEROPUERTO *\n***********************************************\nOpcion#:");
scanf("%d",&opcion3);
while (opcion3>3 || opcion3<1)/*ciclo para evitar ingreso de opciones no disponibles*/
{
printf("\nEsa opcion no esta disponible\n");
printf("\nSeleccione un establecimiento:\n");
printf("***********************************************");
printf("\n* 1.HOTEL FIESTA *\n* 2.BEST WESTERN *\n* 3.HOTEL CITY EXPRESS MONTERREY AEROPUERTO *\n***********************************************\nOpcion#:");
scanf("%d",&opcion3);
}
if (opcion3==1)
{
printf("**********************************************************************");
printf("\nHOTEL FIESTA PLAZA\nUbicación:\nLAZARO CARDENAS 340 , ALAMO ORIENTE , C.P 45560 , TLAQUEPAQUE , JAL\nTel:(33)3657-8808\n");
printf("**********************************************************************");
}
if (opcion3==2)
{
printf("**********************************************************************");
printf("\nBEST WESTERN\nUbicación:\nDE LA REFORMA 308 2 , JUAREZ , C.P 06600 , CUAUHTEMOC , DF\nTel:(55)5580-5030\n");
printf("**********************************************************************");
}
if (opcion3==3)
{
printf("**********************************************************************");
printf("\nHOTEL CITY EXPRESS MONTERREY AEROPUERTO\nUbicación:\nBLVD AEROPUERTO 5028 , PARQUE INDUSTRIAL REGIOMONTANO , C.P 64540 , MONTERREY , NL\nTel:(81)8196-6100\n");
printf("**********************************************************************");
}
}


if (opcion==3)/*Opciones y impresion de cada una*/
{
printf("\nSeleccione un establecimiento:\n");
printf("*****************");
printf("\n* 1.BAR RIO *\n* 2.BAR LA ZOTA *\n* 3.BAR DE MAX *\n* 4.OPAS *\n*****************\nOpcion#:");
scanf("%d",&opcion4);
while (opcion4>4 || opcion4<1)/*ciclo para evitar ingreso de opciones no disponibles*/
{
printf("\nEsa opcion no esta disponible\n");
printf("\nSeleccione un establecimiento:\n");
printf("*****************");
printf("\n* 1.BAR RIO *\n* 2.BAR LA ZOTA *\n* 3.BAR DE MAX *\n* 4.OPAS *\n*****************\nOpcion#:");
scanf("%d",&opcion4);
}
if (opcion4==1)
{
printf("**********************************************************************");
printf("\nBAR RIO\nUbicación:\nPADRE MIER NO. 1094 , BARRIO ANTIGUO , C.P 64000 , MONTERREY , NL Tel:(81)8345-1556\n");
printf("**********************************************************************");
}
if (opcion4==2)
{
printf("**********************************************************************");
printf("\nBAR LA ZOTA\nUbicación:\nCLL CRISTOBAL COLON 606 , CENTRO , C.P 64720 Tel:(81)8372-8799\n");
printf("**********************************************************************");
}
if (opcion4==3)
{
printf("**********************************************************************");
printf("\nBAR DE MAX\nUbicación:\nCLLE JUAN ZUAZUA 952 , MONTERREY CENTRO , C.P 64000, Tel:(81)8374-1220\n");
printf("**********************************************************************");
}
if (opcion4==4)
{
printf("**********************************************************************");
printf("\nOPAS\nUbicación:\nVASCONCELOS OTE 1922 , DEL VALLE , C.P 66220 , SAN PEDRO GARZA GARCIA , NL Tel:(81)8128-8140\n");
printf("**********************************************************************");
}
}
if (opcion==4)/*Opciones y impresion de cada una*/
{
printf("\nSeleccione un establecimiento:\n");
printf("*************************************");
printf("\n* 1.CALZATRENDS S DE RL *\n* 2.PIRMA BRASIL *\n* 3.0GI REPARACION DE CALZADO GAVEU *\n* 4.ACCESORIOS PARA CALZADO *\n*************************************\nOpcion#:");
scanf("%d",&opcion5);
while (opcion5>4 || opcion5<1)/*ciclo para evitar ingreso de opciones no disponibles*/
{
printf("\nEsa opcion no esta disponible\n");
printf("\nSeleccione un establecimiento:\n");
printf("*************************************");
printf("\n* 1.CALZATRENDS S DE RL *\n* 2.PIRMA BRASIL *\n* 3.0GI REPARACION DE CALZADO GAVEU *\n* 4.ACCESORIOS PARA CALZADO *\n*************************************\nOpcion#:");
scanf("%d",&opcion5);
}
if (opcion5==1)
{
printf("**********************************************************************");
printf("\nCALZATRENDS S DE RL\nUbicación:\nCALLE ARTURO DE LA GARZA 410 , ROBLE SAN NICOLAS , C.P 66420 , SAN NICOLAS DE LOS GARZA , NL Tel:(81)8353-5611\n");
printf("**********************************************************************");
}
if (opcion5==2)
{
printf("**********************************************************************");
printf("\nPIRMA BRASIL\nUbicación:\nUNIVERSIDAD 101 L-2 , ANAHUAC , C.P 66450 , MONTERREY , NL, Tel:(81)8332-2188\n");
printf("**********************************************************************");
}
if (opcion5==3)
{
printf("**********************************************************************");
printf("\n0GI REPARACION DE CALZADO GAVEU\nbicación:\nJULIAN VILLAGRAN 305 , CENTRO , C.P 64720, Tel:(81)8344-5778\n");
printf("**********************************************************************");
}
if (opcion5==4)
{
printf("**********************************************************************");
printf("\nACCESORIOS PARA CALZADO\nUbicación:\nEMILIO CARRANZA 3533 , DEL NORTE , C.P 64500, Tel:(81)8331-1362\n");
printf("**********************************************************************");
}
}
if(opcion==5)/*Opciones y impresion de cada una*/
{
printf("\nSeleccione una ubicacion:\n");
printf("***********************");
printf("\n* 1.PADRE MIER *\n* 2.ROMULO GARZA *\n* 3.SAN AGUSTIN *\n* 4.RAMIRO E MARTINEZ *\n* 5.REGINA *\n* 6.VALLE *\n***********************\nOpcion#:");
scanf("%d",&opcion6);
while (opcion6>6 || opcion6<1)/*ciclo para evitar ingreso de opciones no disponibles*/
{
printf("\nEsa opcion no esta disponible\n");
printf("\nSeleccione una ubicacion:\n");
printf("***********************");
printf("\n* 1.PADRE MIER *\n* 2.ROMULO GARZA *\n* 3.SAN AGUSTIN *\n* 4.RAMIRO E MARTINEZ *\n* 5.REGINA *\n* 6.VALLE *\n***********************\nOpcion#:");
scanf("%d",&opcion6);
}
if (opcion6==1)
{
printf("**********************************************************************");
printf("\nSEARS\nUbicación:\nPADRE MIER 143 , CENTRO , C.P 64000 , MONTERREY , NL, Tel:(81)8318-0100\n");
printf("**********************************************************************");
}
if (opcion6==2)
{
printf("**********************************************************************");
printf("\nSEARS\nUbicación:\nAVE ROMULO GARZA 410 , DEL LAGO , C.P 05109, Tel:(81)2456-0154\n");
printf("**********************************************************************");
}
if (opcion6==3)
{
printf("**********************************************************************");
printf("\nSEARS\nUbicación:\nAVE BATALLON DE SN PATRICIO 1000 , RESIDENCIAL SAN AGUSTIN 1 SECTOR , C.P 37950, Tel:(81)8363-4893\n");
printf("**********************************************************************");
}
if (opcion6==4)
{
printf("**********************************************************************");
printf("\nSEARS\nUbicación:\nRAMIRO E MARTINEZ 1924 , RESIDENCIAL SAN AGUSTIN 1 SECTOR , C.P 64250, Tel:(81)8373-6929\n");
printf("**********************************************************************");
}
if (opcion6==5)
{
printf("**********************************************************************");
printf("\nSEARS\nUbicación:\nAVE ALFONSO REYES 3339 , REGINA , C.P 64290, Tel:(81)8331-3034\n");
printf("**********************************************************************");
}
if (opcion6==6)
{
printf("**********************************************************************");
printf("\nSEARS\nUbicación:\nAVE JOSE VASCONCELOS 402 212 , DEL VALLE , C.P 66268, Tel:(81)8356-5077\n");
printf("**********************************************************************");
}
}
if(opcion==6)/*Opciones y impresion de cada una*/
{
printf("\nSeleccione una ubicacion:\n");
printf("******************************");
printf("\n* 1.MITRAS CENTRO *\n* 2.RESIDENCIAL SAN JERONIMO *\n* 3.INSURGENTES *\n* 4.VISTA HERMOSA *\n******************************\nOpcion#:");
scanf("%d",&opcion7);
while (opcion7>4 || opcion7<1)/*ciclo para evitar ingreso de opciones no disponibles*/
{
printf("\nEsa opcion no esta disponible\n");
printf("\nSeleccione una ubicacion:\n");
printf("******************************");
printf("\n* 1.MITRAS CENTRO *\n* 2.RESIDENCIAL SAN JERONIMO *\n* 3.INSURGENTES *\n* 4.VISTA HERMOSA *\n******************************\nOpcion#:");
scanf("%d",&opcion7);
}
if (opcion7==1)
{
printf("**********************************************************************");
printf("\nLIVERPOOL MONTERREY\nUbicación:\nCLL JOSE JOSE ELEUTERIO GONZALEZ 500 , MITRAS CENTRO , C.P 64460, Tel:(81)8348-4482\n");
printf("**********************************************************************");
}
if (opcion7==2)
{
printf("**********************************************************************");
printf("\nLIVERPOOL MONTERREY\nUbicación:\nCLL JOSE JOSE ELEUTERIO GONZALEZ 550 L 232 S/N L 232 , RESIDENCIAL SAN JERONIMO , C.P 64635, Tel:(81)8348-9418\n");
printf("**********************************************************************");
}
if (opcion7==3)
{
printf("**********************************************************************");
printf("\nLIVERPOOL PROVINCIA\nUbicación:\nCLL INSURGENTES 2500 L 103 , C.P 64620, Tel:(81)8333-8114\n");
printf("**********************************************************************");
}
if (opcion7==4)
{
printf("**********************************************************************");
printf("\nSERVICIOS LIVERPOOL\nUbicación:\nCLL INSURGENTES 2500 L 103 , VISTA HERMOSA , C.P 64620, Tel:(81)8333-7934\n");
printf("**********************************************************************");
}
}
printf("\n\nDesea elejir otra opcion?\nIngrese 1 para Si, 2 para No:");
scanf("%d",&respuesta);
if(respuesta==1)volver=(1);
else if (respuesta!=1)volver=(2);
}
printf("\nPresione cualquier tecla para salir");
getch();
}


Acontinuacion se muestra una serie de imagenes, mostrando el funcionamiento del programa:

1. Seleccionar el establecimiento que deseas.


2. Elegir la tienda de preferencia.


3. Se mustran la direccion y el telefono del lugar.


4. Se te da nuevamente la opcion de poder elegir otro establecimiento, o salir del programa.



Agradecemos el asesoraminto del Ing. Ismael Gutierrez.

Fuente de consulta:
Cairo, Osvaldo. (2006). "Fundamentos de Programacion. Piensa en C". Mexico. Pearson Educacion.