Overblog Seguir este blog
Administration Create my blog
13 abril 2014 7 13 /04 /abril /2014 19:44

1. Dado un grupo de 20 Números (Diferentes a Cero), realice una Función que permita determinar y dar como salida lo siguiente:

* Cantidad de Números Mayores a 150

* Cantidad de Números Negativos Encontrados

* Promedio de los Positivos Encontrados.

 

2. Cree 2 Funciones que den solución a las siguientes expresiones:

 

 

Imagen1-copia-1.png

 

Imagen2-copia-2.png 

 

 

 

 

3. Desarrolle una Función que devuelva el salario mensual de un trabajador si se tienen como datos el número de horas trabajadas, el precio de la hora y además se sabe que se le descuenta el 10% por concepto de caja de ahorro.


4. Desarrolle un programa basado en funciones que permita  convertir una temperatura dada en grados Celsius a Grados Fahrenheit y a grados Kelvin.

Las Formulas de Conversión son:

F= (9/5) * C+ 32

K= C + 273.1


5.  Desarrollar un Programa que en base a funciones se obtenga el mayor, el menor y la suma de N números ingresados por teclados.

 

6. Desarrollar un programa en c que permita obtener el perímetro y área de una figura de 4 lados y diga si es un cuadrado o un rectángulo. Esto mediante funciones.


7.  Escribir una función llamada "edades" que reciba 2 edades y decir cuál de ellas es la mayor y cuanto le falta a la menor para llegar a la edad mayor.


8.  Crear un programa en C que tenga una función que cambie una cantidad de días a su equivalente en horas. Ejemplo 10 días equivalen a 240 horas. En el programa se piden la cantidad de días y se imprime el equivalente en horas.

 

9. Crear un programa en C que tenga una función que Devuelva el valor de y en la siguiente expresión:

 

                                                                                    Imagen3-copia-1.png

 

Si x=0 se debe mostrar un mensaje de error e indicar que no se puede realizar el cálculo con ese valor.


10. Crear un programa en C que tenga 02 funciones que devuelvan los resultados de las siguientes expresiones:

 

 

Imagen4.png

Repost 0
Published by Prof.Luis Eduardo Aponte
Comenta este artículo
7 abril 2014 1 07 /04 /abril /2014 03:20

1ER GRUPO

1.    MARQUINA SAENZ JULEYDYS DEL VALLE

2.    TORRES  ANTONIO ELIAS

3.    FERNANDEZ VALENZUELA MANUEL SALVADOR

4.    FLORES PEDRIQUE DANIEL JESUS

5.    HERRERA RODRIGUEZ MARIANA CAROLINA

6.    VELASQUEZ LOPEZ OSCAR RAFAEL

7.    FRANCO PIÑA JOSE FELIPE

8.    QUIARO  YOMAIRI CAROLINA

9.    BORGES ORTEGA LUIS FERNANDO

10.  VILLAMIZAR MOSQUEDA JUAN CARLOS

11.  RUIZ GORRIN REINALDO JOSE

12.  LOPEZ ALVAREZ  RICHARD JESUS

13.  CHACON GUERRA JESUS MANUEL

14.  HERNANDEZ HERRERA JEINSON WLADIMIR

15.  QUINTO ROJAS ANNY CAROLINA

16.  VILLEGAS CASTRO CRISAIDA YUSMERY

17.  PONCE PARUCHO LUISA MARIA

18.  CASTILLO SOTO KELVIN EDUARDO

19.  MARTIN CORONADO MARYURIT COROMOTO

20.  MARTINEZ SANDOVAL REYNER JESUS

21.  CASTRO GARABAN  EDWIN JOSE

22.  MEDINA GOMEZ CARLOS FRANCISCO

23.  MOLINA MARQUINA ASTRID ANDREINA

24.  VILLEGAS ARBONA MARIANGEL

25.  CASTILLO RANGEL KARLA MARIA

26.  SANCHEZ LEGROTTAGLIE ALFREDO JOSE

 

2DO GRUPO

 

1.    ARIAS ROMERO  WILDER OMAR

2.    RICUPERO ADRIAN PABLO JOSE

3.    PIÑA HUERFANO GABRIEL ENRRIQUE

4.    MEZA ARISTEIGUIETA GENESIS ANDREINA

5.    COLMENAREZ BRICEÑO  EMILY DISBEIDY

6.    BRITO ESPINA JESUS ALBERTO

7.    MOROCOIMA UZCATEGUI  ANTONIO RAFAEL

8.    CABRERA SALAZAR JENIFER PATRICIA

9.    HALLAK BRICEÑO HIKMAT JOSE

10.  LOPEZ RATIA DAYAN ALBERTO

11.  CARDOZA CARRILLO SAULIMAR ENREMILETH

12.  GRANADOS PIÑA JOSE ALEXANDER

13.  NELO MONTILVA NEYDERSON GREGORIO

14.  PERDOMO SOSA ALEJANDRO JOSE

15.  CASTIBLANCO ESCALONA WILFRIDO GUIMARAES

16.  BALCAZAR ARES  ALVARO ALEJANDRO

17.  PALACIOS MARTINEZ EMILYS JINETH

18.  SIFONTES RAMIREZ LISAIDA MILAGROS

19.  VARGAS RONDON HENRY DANIEL

20.  SANTANA CADENAS JOSE GREGORIO

21.  MONTOYA RODRIGUEZ EDGAR ENRIQUE

22.  MALAVE TOLEDO MOISES LEONARDO

23.  HERRERA PRADO VICTOR ANTONIO

24.  SANCHEZ DELGADO LUIS DANIEL

25.  GIL YUSTE JOHANDERSON JOSE

 

Repost 0
Published by Prof.Luis Eduardo Aponte
Comenta este artículo
28 abril 2013 7 28 /04 /abril /2013 16:47

Instrucciones. Cada Estudiante debe seleccionar un Enunciado, según el Terminal de su Número de Cedula para ser desarrollado y entregado la Próxima Clase de Laboratorio.

 

0. Escriba una función llamada “multiplicación” que reciba como argumento cuatro números reales distintos de cero y que regrese el producto de ellos.

 

1. Escribir una función que ingrese un numero cualquiera y que devuelva como resultado la suma de sus dígitos , ejemplo si el número fuera 23 la suma seria 5.

 

2. Crea un programa en C que tenga una función que dado un valor en Euros imprima el valor en BsF . Considere usar funciones. Sabiendo que 01 Euro Equivale Actualmente a 8,17 BsF.

 

3. Desarrollar un programa en c que permita obtener el perímetro y área de una figura de 4 lados y diga si es un cuadrado o un rectángulo. Esto mediante funciones.

 

4. Diseñe un programa, que muestre el mayor y el menor de tres introducidos por el usuario. Desarrolle 02 Funciones.

 

5. Ingrese N números, cree un programa que identifique los números pares e impares ya ingresados.

 

6. Realizar una función llamada media2, que toma dos números reales como parámetros, y devuelve un número real que es la media de los dos números pasados como parámetros.

 

7. Realizar una función llamada media3, que toma tres números reales como parámetros, y no devuelve nada. Esa función debe calcular la media de los tres números pasados como parámetros y mostrar con un mensaje cuál es la media calculada.

 

8. Diseñe un programa, que dada una cifra entera y mayor que cero, sea elevada a una potencia introducida por el usuario, la cual. (Ejemplo: 5^2=25).  Emplee una Función llamada Potencia.

 

 

9. Crear una función que compruebe si un número es o no primo

Repost 0
Published by Prof.Luis Eduardo Aponte
Comenta este artículo
27 noviembre 2010 6 27 /11 /noviembre /2010 16:44

Instrucciones.

Para dar Cumplimiento con su Actividad Final (20%), Cada grupo debe Seleccionar un Ejercicio de cada una de las 03 Estructuras de Datos Dinámicas.

Deben de realizar informe descriptivo y exposición de los Mismos.

 

Ejercicios de Listas.

 

1.       El aeropuerto internacional de El Salvador, desea controlar el flujo de pasajeros, y de aerolíneas que circulan por él. Diseñe un programa que de soporte a las salidas y entradas de los aviones, mediante una lista doblemente enlazada cuya información sería la siguiente: Destino, compañía, hora de salida y pasajeros. Luego, y a partir de ese último dato, es que se eliminarán los datos de la lista de pasajeros.

 

2.       Diseñe un registro para n alumnos de una Universidad, con sus respectivas notas de Programación II y Estructuras de Datos, dichos datos, se deben guardar en una Lista lineal. Se sabe que, en ésta universidad, existe  la política que sí, un alumno ha reprobado estas dos materias, es dado de baja en la universidad. (Nota mínima 6.00)

3.       Diseñe un programa que, le permita al usuario, almacenar en una lista doblemente enlazada, los registros de las personas que han adquirido un seguro de vida, además que permita eliminar registros, y adicionar nuevos datos.

 

Ejercicios de Colas.

 

  1. Una tienda dispone de 10 repartidores, para las entregas a domicilio, genere un programa que simule: el despacho de cada repartidor, sabiendo que si la entrega se realiza después de 30 minutos de realizada la orden, al cliente se le aplica un 30% sobre la compra. El programa debe mostrar: el total de entregas por repartidor, el monto de la ganancia, y las pérdidas, en concepto de entregas tardías.

 

  1. En la empresa “La Bodeguita”, se lleva el control de los inventarios, por el método PEPS, (Primeros en entrar, Primeros en Salir). Y se desea mecanizar este proceso, para ello, se deben ingresar los productos, y para registrar la venta, se necesitan los siguientes datos: Código, correlativo de orden, descripción, cantidad y precio. El sistema debe generar: el informe de todas las ventas, el artículo que más se ha vendido, y el que menos, así como la ganancia de la empresa.

 

  1. En un supermercado, se tiene sólo una caja habilitada para que los clientes puedan cancelar sus compras, se pide que, el sistema muestren la cantidad de productos comprados, el monto total de la venta.

 

4.      Implemente el objeto Cola en C de manera que reciba los datos de personas en una cola de un banco, esto es, nombre y el tipo de transacciones a realizar.  Se requiere conocer el tiempo estimado de permanencia de cualquier persona en la cola, si se conocen los tiempos estimados para cada tipo de transacción: 

                       Retiro               4 min                          

                             Depósito          2 min

                       Consulta           3.5 min

                       Actualización 5 min

                       Pagos              2 min

 

 

Ejercicios de Pilas.

  1. Se desea crear una pila en c, que lea cierta cantidad de números enteros y luego muestre:

-La suma de todos los números y el producto de ellos, cuántos son mayores que cero.

 

  1. En una tienda de repuestos llevan su control de inventarios, mediante el sistema UEPS (últimos en entrar, primeros en salir), el cual puede ser controlado mediante una estructura del tipo Pila; en ésta tiendo necesitan que se registren sus productos, los cuales tendrán los siguientes datos: código, descripción, precio unitario, fecha de ingreso (del sistema). Además de registrar las órdenes de salida y mostrar los siguientes reportes: ventas por fecha, ventas por producto (ingresando el código), cantidad de productos que exceden un precio determinado. El cual será ingresado por el usuario.

 

  1. Diseñe una Pila que represente un tipo cadena (string), y que permita las siguientes operaciones: leer la cadena, imprimirla, copiarla, determinar el tamaño de la cadena y buscar un carácter específico en la cadena.

 

  1. Se tiene una lista con los datos de los clientes de una compañía de telefonía celular, los cuales pueden aparecer repetidos en la lista, si tienen registrado más de un número telefónico. La compañía para su próximo aniversario desea enviar un regalo a sus clientes, sin repetir regalos a un mismo cliente. Los regalos se encuentran almacenados en una pila de regalos. Se desea elaborar un programa en C  que permita generar una nueva estructura donde los clientes aparezcan sólo una vez con sus regalos asignados.

 

  1. En un almacén se guarda mercadería en contenedores. No es posible colocar más de n contenedores uno encima del otro y, no hay área para más de m pilas de contenedores. Cada contendor tiene un  número y un nombre de la empresa propietaria. Elabore un programa que permita gestionar el ingreso y salida de contenedores. Note que para retirar un contenedor es necesario retirar los contenedores que están encima de él y colocarlos en otra pila.

 

  1. Definición de una pila implementada con una lista enlazada con 3 elementos: NroHistoria, Apellido y cédula, uso de apuntadores y variables adecuadas.  Uso de un menú que permita al usuario seleccionar solo una opción a la vez. Función para implementar las operaciones apilar datos y mostrar el elemento tope de la pila. Implementación de función para implementar las operación desapilar y mostrar los datos en la pila. USE LAS VALIDACIONES NECESARIAS PARA APILAR Y DESAPILAR (pilaLlena y pilaVacia)

 

Repost 0
Published by Prof.Luis Eduardo Aponte
Comenta este artículo
22 octubre 2010 5 22 /10 /octubre /2010 17:21

Diapositiva27.JPGDiapositiva26.JPG

Diapositiva28

 

 

 Diapositiva30.JPG

Repost 0
Published by Prof.Luis Eduardo Aponte
Comenta este artículo
22 octubre 2010 5 22 /10 /octubre /2010 16:59

 Ejemplo.1

Se pide que, cree una agenda, donde pueda almacenar el nombre, teléfono y correo electrónico de sus amigos; haciendo uso de una lista enlazada. Dicha agenda, debe permitirle: añadir un nuevo registro, eliminar y Mostrar la lista de todos los registros.

 

#include <stdio.h>
#include <conio2.h>
#include <stdlib.h>
struct nodo{
     int corre;
      char nom[80];
      char tel[9];
      char email[50];
      struct nodo *sig;
};
typedef struct nodo *Lista;
Lista p, cabeza;
Lista getnodo();
void insafter(Lista p, char nom[80], char tel[9], char email[50], int i);
void eliminar (Lista p, int k);
void imprimir(Lista p);
main()
{
      char nom[80], tel[9], email[50];
      int k, opc=8, i=0;
      clrscr();
      p=getnodo();
      cabeza=p;
      while(opc!=4)
      {
     printf("\t\t\nMENU PRINCIPAL\n\n\n");
     printf("\t\t1. Registrar Nuevos Datos\n");
     printf("\t\t2. Imprime todos los registros\n");
     printf("\t\t3. Eliminar Datos\n");
     printf("\t\t4.Salir\n");
     scanf("%d", &opc);
     switch(opc)
     {
  case 1: printf("Ingrese el Nombre:");
   scanf("%s", &nom);
   printf("Telefono:");
   scanf("%s", &tel);
   printf("e-mail:");
   scanf("%s", email);
   i++;
   insafter(&p, nom, tel, email, i);
   break;
  case 2: printf("Listado de todos los registros\n\n");
   imprimir(&p);
   break;
  case 3: printf("¨A quien desea eliminar?(ingrese el correlativo)\n");
   scanf("%d", &k);
   eliminar(&p, k);
   break;
     }
     clrscr();
      }

      return 0;
}
Lista getnodo()
{
    Lista p;
    p=(Lista)malloc(sizeof(struct nodo));
    if(p==NULL)
 printf("Memoria Insuficiente\a\n");
    return p;
}

void insafter(Lista p, char nom[80], char tel[9], char email[50], int i)
{
   Lista q;

   if(p==NULL)
       printf("ERROR, lista vac¡a\n\a");
   else
   {
 q=getnodo();
 strcpy(q->nom, nom);
 strcpy(q->tel, tel);
 strcpy(q->email, email);
 q->corre=i;
 q->sig=p->sig;
 p->sig=q;
 p=p->sig;
   }
}
void imprimir(Lista p)
{
   Lista dir;
   p=p->sig;
   for(dir=p; dir!=NULL; dir=dir->sig)

   {
       printf("\n\t***********************************\n");
       printf("\t correlativo: %d\n", dir->corre);
       printf("\t Nombre %s\n", dir->nom);
       printf("\t Telefono: %s\n", dir->tel);
       printf("\t e-mail: %s\n", dir->email);
       printf("\n\t***********************************\n");
       getch();
   }

}
void eliminar(Lista p, int k)
{
    Lista indice;
    cabeza=p;

    for(indice=cabeza; indice!=NULL; indice=indice->sig)
    {


 if(indice->corre==k)
 {
      cabeza=cabeza->sig;
      printf("%s est  hiciendo eliminado\n", indice->nom);
      getch();

      if(p==NULL || p->sig==NULL)
     printf("ERROR, ya no hay m s datos\n");
      else
      {
    cabeza->sig=indice->sig;

    free(indice);
      }
 }
    }
}

Repost 0
Published by Prof.Luis Eduardo Aponte - en Basica
Comenta este artículo
13 octubre 2010 3 13 /10 /octubre /2010 02:38

Lista Enlazada

Es una colección de elementos dispuestos uno detrás del otro, en la que cada elemento se conecta al siguiente por un “Enlace” o “Puntero”.

Los nodos de las listas al igual que las colas y pilas, está compuesta por una parte de información (que pude ser datos enteros, flotantes, caracteres, estructuras..) y el puntero que mantiene el enlace entre un nodo y otro.

Existen varios tipos de Listas, pero para efectos de comprensión y sintetización, hablaremos de cuatro tipos esenciales de listas:

Tipos De Listas

  1. Lista simplemente enlazada: Cada nodo, contiene un único apuntador hacia el siguiente nodo, por lo cual hace de él una estructura muy eficiente, ya que el último de la lista apunta hacia null, por ello, es fácil hacer recorridos directos.

 

  1. Listas Doblemente enlazada: Esta lista se caracteriza por que sus nodos contienen dos punteros, uno hacia el nodo siguiente y otro hacia el nodo anterior.

 

  1. Listas Circulares: Este tipo de lista, es sólo una extensión de las lista simplemente enlazada, con la diferencia que el último elemento se enlaza al primer elemento de la lista, lo cual permite el recorrido en forma de anillo

  1. Lista Circular Doblemente enlazada: Quizá este tipo de lista, sea la más compleja, ya que es la combinación de la lista circular y las doblemente enlazadas, ya que es una lista doblemente enlazada donde el primer elemento se conecta con el último y viceversa.

 

El TAD (Tipo Abstracto de Datos) Lista

En una lista podemos almacenar datos del mismo tipo, con la característica que puede contener un número indeterminado de elementos y que, mantienen un orden explícito, porque cada elemento, se une a otro mediante un puntero, como ya se ha dicho anteriormente, los elementos constitutivos de las listas se denominan nodos.

Las listas son estructuras de datos dinámicos, por tanto, pueden cambiar de tamaño durante la ejecución del programa, aumentando o disminuyendo el número de nodos.

Un aspecto importante de las listas es que las inserciones, las podemos hacer por el frente, al final, en medio, después de..., etc, etc, etc; es decir que, no existen reglamentos que nos restringían añadir datos a una lista, en la posición que nosotros queramos.

De igual manera, para las eliminaciones de nodos, podemos hacerlo como nosotros lo queramos, si embargo, se acostumbra ingresando el campo de información o dato que se desea eliminar.

 

 

Operaciones con las listas

P: puntero a un nodo

L: puntero a la lista

àListaVacia(L): Iniciliza la lista L, como lista vacía

 

àempty(L): determina si la lista está vacía o no

 

àInsertar(L, x, p): Inserta al dato x, en un nuevo nodo de la lista L, después del nodo apuntado por p

 

àeliminar(L, x): elimina, de la lista L, el nodo que contiene a x

 

àNodo(p): Hace referencia la nodo que apunta p

 

àInfo(p): hace referencia al info del nodo

 

ànext(p): siguiente dirección si p no es NULL

 

àInfo(next(p)): info del nodo que sigue a nodo (p) en la lista

 

Se puede decir que, estas son las operaciones básicas para una lista; sin embargo, como ya se ha insistido, eso dependerá del programador y de la complejidad del problema que se está resolviendo, además del tipo de lista que se haya elegido.

Para ello, acontinuación hablaremos, por separado, de cada uno de los tipos de listas.

 

Listas Simplemente Enlazadas

Una estructura como ésta, requiere, que se tengan en cuenta, las operaciones básicas que, se realizarán:

Estructura del Nodo

Por ejemplo, la podemos definir así:

struct nodo{

      int x;

      struct nodo *sig;

};

 

typedef struct nodo *Lista; /* Sinónimo para el tipo de dato*/

Lista p; /* Aquí guardaremos la dirección del primer nodo */

 

p=getnodo();

 

Función getnodo()

Esta función, se utiliza para pedirle memoria a la computadora, lo cual puede realizarse en  las misma función de insertar, pero para tener un mekor orden, es mejor hacerlo por aparte.

Por tanto, es evidente que, ésta función lo que devuelve es una dirección de memoria.

 

Lista getnodo()

{

      Lista  p;

      p=(Lista)malloc(sizeof(struct nodo));

      return p;

}

Operaciones con las listas

P: puntero a un nodo

L: puntero a la lista

àListaVacia(L): Iniciliza la lista L, como lista vacía

 

àempty(L): determina si la lista está vacía o no

 

àInsertar(L, x, p): Inserta al dato x, en un nuevo nodo de la lista L, después del nodo apuntado por p

 

àeliminar(L, x): elimina, de la lista L, el nodo que contiene a x

 

àNodo(p): Hace referencia la nodo que apunta p

 

àInfo(p): hace referencia al info del nodo

 

ànext(p): siguiente dirección si p no es NULL

 

àInfo(next(p)): info del nodo que sigue a nodo (p) en la lista

 

Se puede decir que, estas son las operaciones básicas para una lista; sin embargo, como ya se ha insistido, eso dependerá del programador y de la complejidad del problema que se está resolviendo, además del tipo de lista que se haya elegido.

Para ello, a continuación hablaremos, por separado, de cada uno de los tipos de listas.

 

Listas Simplemente Enlazadas

Una estructura como ésta, requiere, que se tengan en cuenta, las operaciones básicas que, se realizarán:

Estructura del Nodo

Por ejemplo, la podemos definir así:

struct nodo{

      int x;

      struct nodo *sig;

};

 

typedef struct nodo *Lista; /* Sinónimo para el tipo de dato*/

Lista p; /* Aquí guardaremos la dirección del primer nodo */

 

p=getnodo();

 

Función getnodo()

Esta función, se utiliza para pedirle memoria a la computadora, lo cual puede realizarse en  las misma función de insertar, pero para tener un mekor orden, es mejor hacerlo por aparte.

Por tanto, es evidente que, ésta función lo que devuelve es una dirección de memoria.

 

Lista getnodo()

{

      Lista  p;

      p=(Lista)malloc(sizeof(struct nodo));

      return p;

}

Función Borrar después de...

Ésta función es muy similar a la función de eliminar de las pilas y colas, con la diferencia que debemos enlazar el nodo anterior con el siguiente nodo:

 

 

Algoritmo:

  1. Crear un nodo auxiliar apuntado por q.
  2. si p, apunta a nullo p->sig apunta a NULL, imprima mensaje de error
  3. sino; q, en suparte de siguiente, debe tener la dirección a la que apuntaba, p->sig.
  4. p->sig debe apuntar a q en su parte de siguiente.
  5. Liberar de memoria el nodo apuntado por q.

void delafter(Lista p, char *px)

{

            Lista q;

            If(p==NULL || p->sig==NULL)

                        Printf(“ERROR, lista vacía\a\n”);

            Else

            {

                        q->sig=p->sig;

                        p->sig=q->sig;

                        free(q);

            }

}

 

Función de Lista Vacía

Int empty(Lista p)

{

            int r;

            if(p==NULL)

                        r=1;

            else

                        r=0;

            return r;

}

 

/* Para limpiar la lista*/

void limpiar (Lista L)

{

            L=NULL;

}

 

Con ésta función, lo que hacemos es inicializar la lista a NULL, por lo que se pierden los elementos que habíamos guardado en los nodos. Pero Ojo, eso no significa que hayamos liberado memoria que ocuparon, los nodos, esa memoria será liberada, cuando se deje de ejecutar el programa, o  si hubiésemos, utilizado la función free(), para cada nodo.

Función Buscar

Ésta función, nos devuelve, la dirección de memoria de un valor que deseamos buscar en la lista.

 

Lista  buscar(Lista frente, char x)

{

            /* frente: puntero que indica la cabeza de una lista.

                X: carácter que deseamos buscar

            */

            Lista dir;

            For(dir=frente; dir!=NULL; dir=dir->sig)

            If(x==dir->x)

                        Return dir;

            Return NULL;

}

 

 

 

Repost 0
Published by Prof.Luis Eduardo Aponte - en Basica
Comenta este artículo
13 octubre 2010 3 13 /10 /octubre /2010 02:38

Lista Enlazada

Es una colección de elementos dispuestos uno detrás del otro, en la que cada elemento se conecta al siguiente por un “Enlace” o “Puntero”.

Los nodos de las listas al igual que las colas y pilas, está compuesta por una parte de información (que pude ser datos enteros, flotantes, caracteres, estructuras..) y el puntero que mantiene el enlace entre un nodo y otro.

Existen varios tipos de Listas, pero para efectos de comprensión y sintetización, hablaremos de cuatro tipos esenciales de listas:

Tipos De Listas

  1. Lista simplemente enlazada: Cada nodo, contiene un único apuntador hacia el siguiente nodo, por lo cual hace de él una estructura muy eficiente, ya que el último de la lista apunta hacia null, por ello, es fácil hacer recorridos directos.

 

  1. Listas Doblemente enlazada: Esta lista se caracteriza por que sus nodos contienen dos punteros, uno hacia el nodo siguiente y otro hacia el nodo anterior.

 

  1. Listas Circulares: Este tipo de lista, es sólo una extensión de las lista simplemente enlazada, con la diferencia que el último elemento se enlaza al primer elemento de la lista, lo cual permite el recorrido en forma de anillo

  1. Lista Circular Doblemente enlazada: Quizá este tipo de lista, sea la más compleja, ya que es la combinación de la lista circular y las doblemente enlazadas, ya que es una lista doblemente enlazada donde el primer elemento se conecta con el último y viceversa.

 

El TAD (Tipo Abstracto de Datos) Lista

En una lista podemos almacenar datos del mismo tipo, con la característica que puede contener un número indeterminado de elementos y que, mantienen un orden explícito, porque cada elemento, se une a otro mediante un puntero, como ya se ha dicho anteriormente, los elementos constitutivos de las listas se denominan nodos.

Las listas son estructuras de datos dinámicos, por tanto, pueden cambiar de tamaño durante la ejecución del programa, aumentando o disminuyendo el número de nodos.

Un aspecto importante de las listas es que las inserciones, las podemos hacer por el frente, al final, en medio, después de..., etc, etc, etc; es decir que, no existen reglamentos que nos restringían añadir datos a una lista, en la posición que nosotros queramos.

De igual manera, para las eliminaciones de nodos, podemos hacerlo como nosotros lo queramos, si embargo, se acostumbra ingresando el campo de información o dato que se desea eliminar.

 

 

Operaciones con las listas

P: puntero a un nodo

L: puntero a la lista

àListaVacia(L): Iniciliza la lista L, como lista vacía

 

àempty(L): determina si la lista está vacía o no

 

àInsertar(L, x, p): Inserta al dato x, en un nuevo nodo de la lista L, después del nodo apuntado por p

 

àeliminar(L, x): elimina, de la lista L, el nodo que contiene a x

 

àNodo(p): Hace referencia la nodo que apunta p

 

àInfo(p): hace referencia al info del nodo

 

ànext(p): siguiente dirección si p no es NULL

 

àInfo(next(p)): info del nodo que sigue a nodo (p) en la lista

 

Se puede decir que, estas son las operaciones básicas para una lista; sin embargo, como ya se ha insistido, eso dependerá del programador y de la complejidad del problema que se está resolviendo, además del tipo de lista que se haya elegido.

Para ello, acontinuación hablaremos, por separado, de cada uno de los tipos de listas.

 

Listas Simplemente Enlazadas

Una estructura como ésta, requiere, que se tengan en cuenta, las operaciones básicas que, se realizarán:

Estructura del Nodo

Por ejemplo, la podemos definir así:

struct nodo{

      int x;

      struct nodo *sig;

};

 

typedef struct nodo *Lista; /* Sinónimo para el tipo de dato*/

Lista p; /* Aquí guardaremos la dirección del primer nodo */

 

p=getnodo();

 

Función getnodo()

Esta función, se utiliza para pedirle memoria a la computadora, lo cual puede realizarse en  las misma función de insertar, pero para tener un mekor orden, es mejor hacerlo por aparte.

Por tanto, es evidente que, ésta función lo que devuelve es una dirección de memoria.

 

Lista getnodo()

{

      Lista  p;

      p=(Lista)malloc(sizeof(struct nodo));

      return p;

}

Operaciones con las listas

P: puntero a un nodo

L: puntero a la lista

àListaVacia(L): Iniciliza la lista L, como lista vacía

 

àempty(L): determina si la lista está vacía o no

 

àInsertar(L, x, p): Inserta al dato x, en un nuevo nodo de la lista L, después del nodo apuntado por p

 

àeliminar(L, x): elimina, de la lista L, el nodo que contiene a x

 

àNodo(p): Hace referencia la nodo que apunta p

 

àInfo(p): hace referencia al info del nodo

 

ànext(p): siguiente dirección si p no es NULL

 

àInfo(next(p)): info del nodo que sigue a nodo (p) en la lista

 

Se puede decir que, estas son las operaciones básicas para una lista; sin embargo, como ya se ha insistido, eso dependerá del programador y de la complejidad del problema que se está resolviendo, además del tipo de lista que se haya elegido.

Para ello, a continuación hablaremos, por separado, de cada uno de los tipos de listas.

 

Listas Simplemente Enlazadas

Una estructura como ésta, requiere, que se tengan en cuenta, las operaciones básicas que, se realizarán:

Estructura del Nodo

Por ejemplo, la podemos definir así:

struct nodo{

      int x;

      struct nodo *sig;

};

 

typedef struct nodo *Lista; /* Sinónimo para el tipo de dato*/

Lista p; /* Aquí guardaremos la dirección del primer nodo */

 

p=getnodo();

 

Función getnodo()

Esta función, se utiliza para pedirle memoria a la computadora, lo cual puede realizarse en  las misma función de insertar, pero para tener un mekor orden, es mejor hacerlo por aparte.

Por tanto, es evidente que, ésta función lo que devuelve es una dirección de memoria.

 

Lista getnodo()

{

      Lista  p;

      p=(Lista)malloc(sizeof(struct nodo));

      return p;

}

Función Borrar después de...

Ésta función es muy similar a la función de eliminar de las pilas y colas, con la diferencia que debemos enlazar el nodo anterior con el siguiente nodo:

 

 

Algoritmo:

  1. Crear un nodo auxiliar apuntado por q.
  2. si p, apunta a nullo p->sig apunta a NULL, imprima mensaje de error
  3. sino; q, en suparte de siguiente, debe tener la dirección a la que apuntaba, p->sig.
  4. p->sig debe apuntar a q en su parte de siguiente.
  5. Liberar de memoria el nodo apuntado por q.

void delafter(Lista p, char *px)

{

            Lista q;

            If(p==NULL || p->sig==NULL)

                        Printf(“ERROR, lista vacía\a\n”);

            Else

            {

                        q->sig=p->sig;

                        p->sig=q->sig;

                        free(q);

            }

}

 

Función de Lista Vacía

Int empty(Lista p)

{

            int r;

            if(p==NULL)

                        r=1;

            else

                        r=0;

            return r;

}

 

/* Para limpiar la lista*/

void limpiar (Lista L)

{

            L=NULL;

}

 

Con ésta función, lo que hacemos es inicializar la lista a NULL, por lo que se pierden los elementos que habíamos guardado en los nodos. Pero Ojo, eso no significa que hayamos liberado memoria que ocuparon, los nodos, esa memoria será liberada, cuando se deje de ejecutar el programa, o  si hubiésemos, utilizado la función free(), para cada nodo.

Función Buscar

Ésta función, nos devuelve, la dirección de memoria de un valor que deseamos buscar en la lista.

 

Lista  buscar(Lista frente, char x)

{

            /* frente: puntero que indica la cabeza de una lista.

                X: carácter que deseamos buscar

            */

            Lista dir;

            For(dir=frente; dir!=NULL; dir=dir->sig)

            If(x==dir->x)

                        Return dir;

            Return NULL;

}

 

 

 

Repost 0
Published by Prof.Luis Eduardo Aponte - en Basica
Comenta este artículo
13 octubre 2010 3 13 /10 /octubre /2010 02:06

 Diapositiva3

 

 

Punteros.

 

 

Los Punteros o Apuntadores, son variables que contienen la dirección de otra variable.

 

Los usos principales, que tienen, los punteros, son los siguientes:

->Nos ayuda, para que una función devuelva más de un valor. Por ejemplo, una función que devuelva un vector de enteros, en dicha función mandamos la dirección del primer elemento a la función principal, y a partir de ella, imprimimos todos los valores contenidos en el vector.

->Mejor uso de la memoria dinámica. Esto es lo que más nos tiene cuenta, el lector debe tener presente que, el uso de punteros, ayuda a ahorrar memoria y por consiguiente, hace más efectivo el uso y administración de la misma.

 

Declaración de Punteros.

 

La forma de declarar un apuntador, es la siguiente:

int *p;

int->indica que, es un puntero hacia un entero.

*->indica al compilador que esa variable, es un puntero

p-> Es el identificador del puntero.

Otros ejemplos:

float *q; /*apuntador hacia un flotante*/

char *z; /*puntero que contiene la dirección de una variable que guarda un carácter */

Para referirnos a un valor a través de un apuntador, lo hacemos mediante un proceso llamado indireccion.  

Por ejemplo, para mandar a impresión el valor entero, hacia el cual a punta “p”, sería así: printf(“%d”, *p);

 

Los punteros, pueden ser inicializados  a 0, NULL ó alguna dirección válida:

float *p1;

p1=0;

p1=NULL;

 

Ahora bien, para guardar la dirección de alguna variable, en un puntero se tiene &->Operador de Dirección.

 

P1=&a;

 

 Ejemplos

 

 

1.    Diseñe un programa que muestre el uso de operadores básicos en la declaración de punteros empleando el direccionamiento y el operador indireccion.

 

 

#include <stdio.h>

#include <conio.h>

main()

{

   int a;

   /*Declaración de un puntero a un entero */

   int *p;

   clrscr();

   printf("Ingrese un valor ENTERO para la variable:\n");

   scanf("%d", &a);

   while(a<0)

   {

       printf("ERROR, el valor debe ser mayor que cero:\n");

       scanf("%d", &a);

   }

   clrscr();

    /*Limpiamos la pantalla */

   printf("a=%d\n", a); /*Imprimo el valor de a*/

   printf("La dirección de a es %p\n", &a);

   printf("*p=%p\n", p); /*Imprimo la dirección que guarda p*/

   /*imprimo el valor guardado en la dirección a la que apunta p*/

   printf("a=%d\n", *p);

   printf("El tamaño de *p es %d\n", sizeof(p));

   getch();

   return 0;

}

2. Diseñe un programa, que sume dos variables de tipo entero, por medio de apuntadores.

 

 

#include <stdio.h>

#include <conio.h>

main()

{

   int a, b, c;

   int *p1, *p2, *p3; /*declaración de los punteros */

   printf("Ingrese el valor de a:\n");

   scanf("%d", &a);

   printf("Ahora el valor de b:\n");

   scanf("%d", &b);

   c=a+b;

   printf("a+b=%d\n", c);

   /*asignamos las direcciones a los punteros correspondientes/

   p1=&a;

   p2=&b;

   printf("*p1 + *p2=%d\n", *p1+*p2);

   p3=&c;

   printf(" Dirección de a es %p\n Dirección de b es %p\n Y la de c es %p\n\n", p1, p2, p3);

   getch();

   return 0;

}

 

3. Programa que lee un arreglo y una matriz usando  aritmética de punteros */

 

 

#include <stdio.h>

#include <conio.h>

#define M 3

#define N 3

main()

  {

     int x[3][3], y[3];

     int f=0,c=0;

     clrscr();

     for(f=0; f< M; f++)

            {

               for(c=0; c<N; c++)

                  {

                         printf("*(x+ %d)+%d)=", f,c);

                         scanf("%d", *(x+f)+c);

                  }

               printf("Elemento %d del vector:\n", f);

               scanf("%d", &y[f]);

            }

     printf("IMPRESIONES:\n");

     printf("***    MATRIZ   ***\n");

     for(f=0; f<M; f++)

            for(c=0; c<N; c++)

               printf("%d", *(*(x+f)+c));

     printf("\n***   VECTOR   ***\n");

     for(f=0; f<M; f++)

             printf("%d", *(y+f));

     getch();

     return 0;

  }

 

 

Repost 0
Published by Prof.Luis Eduardo Aponte - en Basica
Comenta este artículo
5 julio 2010 1 05 /07 /julio /2010 22:43

Dado los siguientes problemas, realizar el Análisis del mismo (Fase I), El Diseño del Algoritmo (Fase II),  y la Codificación en Lenguaje C (Fase III), para la posterior ejecución del Programa.

 

1.    En una tienda donde solo hay 10 productos se desea calcular el total de ganancia que produjo dicho negocio este mes. Para ello se cuenta por producto con: Precio del Costo, precio de venta, código y cantidad vendida en ese periodo. Realizar programa que permita calcular las Ganancias de la Tienda.

2.    Considere dos matrices A y B, desarrollo un programa que permita realizar la multiplicación de las mismas.

3.    Una infantería tiene n cantidad de reclutas. Se desea desarrollar un programa mediante arreglos para determinar cuántos infantes están inscritos en cada curso y con cuantas mujeres y cuantos hombres cuenta la nación en estas especialidades dentro de esta fuerza.

4.    Desarrolle un programa que considere una matriz cuadrada de orden n x n. El programa debe leer los datos de dicha matriz (números enteros) y encontrar la suma de todos los elementos del borde. Los elementos del borde son aquellos que están en la primera y última fila y columnas.

5.    Desarrolle una estructura que guarde los datos de los n alumnos de la materia programación en Lenguaje C, y los muestres por pantalla, la estructura debe tener (cedula, nombre, apellido, edad, profesión, lugar de nacimiento, dirección y teléfono).

6.    Escriba un programa que en una estructura guarde los datos de 05 amigos (as) suyos (as) y los muestre por pantalla, utilizando para ello un arreglo de estructura, la misma estructura contendrá (Nombre, Apellido, Edad, Sexo, Dirección, y Teléfono).

7.    Desarrolle un arreglo de estructura para un programa que lea una lista de alumnos y las notas correspondientes a una determinada asignatura; el resultado será el tanto por ciento (porcentaje) de los alumnos aprobados y reprobados.

8.    Escriba un programa que en una estructura se lleve el control de un inventario de cintas de una tienda de video. Asegúrese de que la estructura incluya el titulo de la cinta, la longitud de la cinta, el precio de alquiler, la fecha en que se vendió, y la clasificación de la cinta.

9.    Desarrolle un programa que lleve el control de los nombres, edades, calificaciones y coeficiente intelectual de 10 estudiantes. Capture los datos desde el teclado utilizando un ciclo for, imprime los datos en la pantalla cuando se termine de capturar los mismos. Emplear Arreglo de Estructuras.

10. Desarrolle un programa que en una estructura guarde los datos de los N alumnos de la Asignatura Programación en Lenguaje C; y los imprima, la estructura debe tener (Cedula, nombre, apellido, edad, profesión, lugar de nacimiento, dirección, teléfono).

11.  Establecer un listado de suscriptores de una revista a través de una estructura, cuyos datos de entrada serán los datos de cada suscriptor (Nombre, Cedula, Mes de Inscripción, Año de Inscripción).

12. En una clase, asuma que hay un número de 20 estudiantes. Cada estudiante esta registrado en los mismos cursos  en un semestre. Al final del semestre, el instructor asigna letras de calificaciones de la A a  la E para todos los seis cursos de cada estudiante. Cada uno de los seis cursos es de 3 unidades (horas crédito). El promedio de notas de los estudiantes se calcula en una escala de 10 puntos. Para realizar esto, a continuación se presenta las notas asociadas con cada una de las calificaciones en letras.

A

10

B

8

C

6

D

4

E

2

13.     Establezca una estructura para almacenar datos relativos a los N libros o revistas científicas de una biblioteca. Por cada libro o revista científica, mostrar la siguiente información:

a)    Numero de referencia.

b)    Titulo

c)    Nombre del autor

d)    Editorial

e)    Clase de publicación (libro o revista)

f)     Numero de edición (solo libros)

g)    Año de publicación (solo libros)

h)   Nombre de la revista (solo revistas)

14.    Desarrolle un programa que inicialice un arreglo de N enteros, y muestre la cantidad y los elementos negativos que se presenta en el mismo.

15.    Desarrolle un programa que capture tres cadenas, una en mayúscula y las otras en minúscula, luego que la primera cadena la copie al final de la segunda e imprima el resultado, posteriormente mostrar  la longitud de la tercera.

16.    Se desea calcular el promedio, mínimo y máximo de una lista de notas correspondientes a un curso. Se recibirá el número de alumnos y la nota correspondiente a c/u, y se entregan los resultados en la pantalla

17.    Se desea calcular las notas finales de los alumnos de un curso, así como también el promedio, mínimo y máximo de éstas. Se recibirá el número de alumnos y las notas parciales de cada uno de éstos. Las notas parciales corresponden a la I1, I2, T1, T2 y Examen. La nota final se calcula empleando la fórmula:

NF = 0.7*NP + 0.3*Ex

En donde NP es la nota de presentación calculada como:

NP = (I1+I2+T1+T2)/4

18.    Desarrolle un programa que inicialice  un arreglo bidimensional de dimensión 2 x 3, y que imprime y sume sus elementos.

 

 

 

 

 

Repost 0
Published by Prof.Luis Eduardo Aponte
Comenta este artículo

Presentación

  • : El blog de Luis Eduardo Aponte
  • : Blog, para facilitar del Lenguaje de Programación C
  • Contacto

Enlaces