miércoles, 31 de agosto de 2016

Listas simplemente enlazadas

c) Eliminacion de un nodo con informacion X de una lista simplemente ligada
La eliminacion de un nodo con informacion X es uno de los casos complicados de esta operacion, porque se pueden presentar diferente variantes. Por ejemplo, el nodo puede ser el primero, el ultimo, el unico o no encontrarse en la lista. 

Espacio para figura

D)Eliminar el nodo anterior al nodo con informacion X en una lista simplemente ligada.
Em este caso de eliminacion mas complicado en listas simplemente ligadas, porque tiene muchas variantes.Por ejemplo, el nodo con informacion X puede ser el primero entonces no hay nada que eliminar, el segundo entonces hay que eliminar el primero de la lista, estar en cualquier otra posicion, o bien no encontrarse en la lista.

Búsqueda en listas simplemente ligadas
La operacion de busqueda de un elemento en una lista es muy facil de realizar, aunque ineficiente ya que se lleva a cabo de forma secuencial. se deben ir recorriendo los nodos hasta encontrar el que estamos buscando o hasta que se llega al final de la lista. el algoritmo es similar a los que se desarrollan para recorrer una lista en forma iterativa o recursiva.
Alk igual que en el caso de las operaciones vistas anteriormente, existe diferencia en los algoritmos si las listas se encuentran ordenadas o desordenadas. se comenzara en primer termino, con el algoritmo de busqueda para listas simplemente ligadas que se encuentran desordenadas.

Espacio para figura

viernes, 26 de agosto de 2016

Estructuras

Del tema Estructuras falta definir lo siguiente:
Typedef 
La palabra reservada typedef proporciona un mecanismo para la creación de sinónimos (o alias) para tipos de datos anteriormente definidos. Por ejemplo: typedef struct ejemplo Ejemplo; define Ejemplo como un sinónimo de ejemplo. Una forma alternativa de definir una estructura es: 
typedef struct { char c; int i;} 
Ejemplo; Podemos ahora utilizar Ejemplo para declarar variables del tipo struct, por ejemplo Ejemplo a[10]; typedef se utiliza a menudo para crear seudónimos para los tipos de datos básicos. Si tenemos por ejemplo un programa que requiere enteros de 4 bytes podría usar el tipo int en un programa y el tipo long en otro. Para garantizar portabilidad podemos utilizar typedef para crear un alias de los enteros de 4 bytes en ambos sistemas. 

Ejemplo de estructura de la cual se guiaran para realizar sus 2  prácticas de  estructura
#include <iostream>
using namespace std;

int main()
{
    struct
    {
        string nombre;
        char  inicial;
        int   edad;
        float nota;
    } persona;

    persona.nombre = "Ana";
    persona.inicial = 'A';
    persona.edad = 22;
    persona.nota = 10;
    cout << "La edad es " << persona.edad;

    return 0;
}

La utilidad de los punteros a función

La utilidad de los punteros a funciones se manifiesta sobre todo cuando se personalizan ciertas funciones de biblioteca. Podemos por ejemplo, diseñar una función de biblioteca que admita como parámetro una función, que debe crear el usuario (en este caso otro programador), para que la función de biblioteca complete su funcionamiento.
Este es el caso de la función qsort, declarada en cstdlib. Si nos fijamos en su prototipo:
void qsort(void *base, size_t nmemb, size_t tamanyo,
   int (*comparar)(const void *, const void *));
Vemos que el cuarto parámetro es un puntero a una función comparar que devuelve un int y admite dos parámetros de tipo puntero genérico.
Esto permite a la biblioteca cstdib definir una función para ordenar arrays independientemente de su tipo, ya que para comparar elementos del array se usa una función definida por el usuario, y qsort puede invocarla después.

Ejemplo de puntero a función

#include <iostream>
void printMensaje (float dato);
void printNumero (float dato);
void (*funcPuntero)(float);

main()
{
  float pi = 3.14159;
  printMensaje(pi);
  funcPuntero = printMensaje;
  funcPuntero (pi);
  funcPuntero = printNumero;
  funcPuntero (pi);
  printNumero(pi);
}

void printMensaje(float dato)
{
  cout <<" Esta es la funcion printMensaje " <<'\n';
}

void printNumero(float dato)
{
  cout <<" Este es el dato: " << dato << '\n';
}
Desarrolle una practica de punteros a función










miércoles, 24 de agosto de 2016

Es posible declarar punteros sin especificar a qué tipo de objeto apuntan:
void *<identificador>;
Usaremos estos punteros en situaciones donde podemos referirnos a distintos tipos de objetos, ya que podemos hacer que apunten a objetos de cualquier tipo.
Por supuesto, para eso tendremos que hacer un casting con punteros, sintaxis:
(<tipo> *)<variable puntero>
Por Ejemplo:
#include <iostream>
using namespace std;
 
int main() { 
   char cadena[10] = "Hola"; 
   char *c; 
   int *n; 
   void *v;
 
   c = cadena; // c apunta a cadena 
   n = (int *)cadena; // n también apunta a cadena 
   v = (void *)cadena; // v también 
   cout << "carácter: " << *c << endl; 
   cout << "entero:   " << *n << endl; 
   cout << "float:    " << *(float *)v << endl; 
   return 0;
Para el viernes deberás realizar 2 prácticas en las que hagas uso de void*

viernes, 19 de agosto de 2016

Actividad

Apunte en su cuaderno

A continuación se analizan cada una de las operaciones.

Lectura
El proceso de lectura de un arreglo consiste en leer y asignar un valor a cada uno de sus componentes. suponga que se desea leer todos los elementos del arreglo unidimensional V en forma consecutiva. Se podría hacer de la siguiente manera:

Leer V[1]
Leer V[2]
.........
Leer V[50]

Pero es importante que observe que de esta forma no seria practico. por lo tanto, se usara un ciclo para leer todos los elementos del arreglo unidimensional.

Repetir desde I hasta 50
Leer V[1]

Al variar el valor I, de cada elemento leído se asigna al correspondiente componente del arreglo según la posición indicada por 1.

para 1 = 1, se lee V[1]
        1 = 2, se lee V[2]
.......
     1 = N, se lee V[n]

Al finalizar el ciclo de lectura se tendrá asignado un valor a cada uno de los componentes del arreglo unidimensional.

Puede suceder que no necesites leer todos los componentes del arreglo, sino solamente algunos de ellos. Supongamos que se deben leer los elementos con indices comprendidos de 1 y el 30. A continuación se muestra un ciclo que se necesita para realizar esta operación:

Repetir con 1 desde 1 hasta 30
Leer V[1]

Escritura
En el caso de la operacion de escritura es similar al de lectura. se debe escribir el valor de cada uno de los componentes. Supongamos que se desea escribir los primeros N componentes del arreglo unidimensional V en forma consecutiva. Los pasos a seguir son:

Repetir con 1 desde 1 hasta N
Escribir V[1]

Al variar el valor I se escribe el elemento del arreglo unidimensional V , correspondiente a la posicion indicada por I.

Para I = 1, se escribe el valor de V[1]
        I = 2, se escribe el valor de V[2]
            .......
       I = N, se escribe el valor de V[N]

Asignación

En general no es posible asignar directamente un valor  todo el arreglo, sino que se debe asignar el valor deseado a cada componente. Enseguida se analizan algunos ejemplos de asignación.

Observe que en los primero casos se asigna un valor a una determinada casilla del arreglo, en el primero a la señalada por el indice ene y en el segundo a la indicada por el indice mar.

CICLO [ene] <-- 123.89
CICLO [mar] <-- [ene]/2

Repetir con Mes desde ene hasta dic
Hacer CICLO[MES]<-- 0








miércoles, 17 de agosto de 2016

Actividad

Hola muchachos.. Realicen la actividad que les mencione en la que me compilen el código del día Martes, además realicen un ejemplo de apuntador en la cual se maneje el uso de una condición, adición y sustracción,  como lo vimos en clase.
Por ultimo compilen el siguiente código y cada linea la comentarán para conocer el conocimiento del programa y los componentes.
(Este sera el trabajo para esta sesión lo que les había comentado quedara pendiente hasta que todos estén listos para el desarrollo de apuntadores mas complejos).

#include <stdlib.h>
              #include <stdio.h>

              int main()
              {
                      int x;    
                      char * mes[] = {
                                      "mes ilegal",
                                      "enero",
                                     "febrero",
                                     "marzo",
                                     "abril",
                                    "mayo",
                                     "junio",
                                    "julio",
                                     "agosto",
                                     "septiembre",
                                     "octubre",
                                     "noviembre",
                                     "diciembre",
                         };

                        x = rand() % 12;
                        printf("El mes %d corresponde a %s \n",x,mes[x]);