viernes, 16 de noviembre de 2012


ESTRUCTURA DE DATOS

FUNCIONES.

Propuesta 4: Programa para calcular el volumen de un cilindro.

NOMBRE DEL PROGRAMA: Volumen del cilindro.

FORMULA PARA EL VOLUMEN: V = π radio  ₓ altura.

DIAGRAMA DE FLUJOS

#include<windows.h> //para el color de enunciado.
#include<iostream>
#include<conio.h>
#include<cstdlib>
#include<stdio.h>
using namespace std;

void cubicos() //Declaración de la función.
        
{
                system("color B3");  //Cambia el color del entorno del programa.
                   HANDLE hConsole;
    hConsole = GetStdHandle (STD_OUTPUT_HANDLE);            
    int num1, num2,pi, v;  //Declaracion de las variables.
    pi=3;
     SetConsoleTextAttribute // Atributos de color.
    (hConsole, FOREGROUND_BLUE| FOREGROUND_INTENSITY);
   
    cout <<"\t\t\t radio:  ";cin >> num1; // Mostrar en pantalla, entrada y salida de la información.
   
    SetConsoleTextAttribute
    (hConsole, FOREGROUND_GREEN| FOREGROUND_INTENSITY);
        cout << "\t\t\t altura:  "; cin >> num2; // \t para darle espacios a la información a mostrar.
        v =pi*( num1*num1)* num2; // Formula para la solución del programa.
    SetConsoleTextAttribute
    (hConsole, FOREGROUND_RED| FOREGROUND_INTENSITY);
    cout << "\t\t\t el volumen del cilindro en centímetros cúbicos es : "<< v;
   }
int main() // Funcion principal.
  {
    cout << "\t CORPORACION INDUSTRIAL COLOMBIANA\n";
    cout << "\t\t\t TEINCO\n ";
    cout << "\t\t INGENIERIA DE SISTEMAS\n ";
    cout << "\t\t ESTRUCTURA DE DATOS\n ";
    cout << "\t\t ROBERTO CARLOS RUIZ\n\n ";
        cout << " Programa para calcular volumen de un cilindro\n ";
    cout << "\t NOMBRE: Volumen del cilindro\n\n";
          cubicos(); // Llamado de la función secundaria.
   getch();
 }      

Podemos encontrar funciones como texcolor (); y también para alinear esta la función gotoxy (); el llamado de la función y la función de windows.h para los colores. 





sábado, 20 de octubre de 2012

INSERTAR UN ELEMENTO EN UNA LISTA VACÍA


LISTA VACÍA:

Es la forma de darle valor a una lista que esta vacía , el puntero apuntando a null (vació).



Esto sucede al tomarlo vació, solo habrá un puntero en lista apuntando hacia null.


INSERTAR NODO:

Al insertar un nodo en nuestra lista pasaríamos a tener el puntero "lista", hacia el nodo insertado con sus respectivas casillas (dato-apuntador), y este apuntando hacia null mostrándonos de esta forma que es el final de nuestra lista.







viernes, 19 de octubre de 2012

Ventajas de los apuntadores
Ofrecen potencia y la flexibilidad en C.

Se pueden tener apuntadores a cualquier tipo de variable.

Proporcionan mucha utilidad al programador para accesar y manipular datos.
También son útiles para pasarle parámetros a las funciones de tal modo que les permiten modificar y regresar valores a la rutina que las llama.
C usa los apuntadores en forma extensiva.
·    Es la única forma de expresar algunos cálculos.
·    Se genera código compacto y eficiente.
·    Es una herramienta muy poderosa

El operador unario o monádico y devuelve la dirección de memoria de una variable.

Declarar e inicializar apuntadores es bastante fácil.
Existe una relación estrecha entre los punteros y los arreglos. En C, un nombre de un arreglo es un índice a la dirección de comienzo del arreglo. En esencia, el nombre de un arreglo es un puntero al arreglo.
Mientras un programa esta corriendo todas las variables se guardan en memoria, cada una tiene su dirección o localidad única. 
En C se pueden tener arreglos de apuntadores ya que los apuntadores son variables.

Los punteros permiten simular el paso por referencia, crear y manipular estructuras dinámicas de datos, tales como listas encadenadas, pilas, colas y arboles.



Desventajas de los apuntadores
No es posible en otros lenguajes.
C usa apuntadores explícita mente con:
·    Arreglos,
·    Estructuras y
·    Funciones

Cuando se utiliza incorrectamente, son también fuente tanto de fallas en el programa como de frustración para el programador. 
Un apuntador a cualquier tipo de variables es una dirección en memoria -- la cual es una dirección entera, pero un apuntador NO es un entero.
C sin embargo es mucho más sutil en su relación entre arreglos y apuntadores.
El manejo complicado del almacenamiento.   
Alta sobrecarga por el movimiento de líneas.

No asignar un apuntador a una dirección de memoria antes de usarlo.
In dirección no válida.




CUADRO COMPARATIVO DE LOS APUNTADORES

APUNTADORES: Una matriz sin subíndice es un puntero al primer elemento de la matriz.
MATRICES: Las matrices son punteros constantes.
El operador de dirección (&) que devuelve la dirección de memoria de su operando
El operador de In dirección (*) que devuelve un alias para el objeto al cual apunta el operando del puntero.

Un puntero es una variable como cual quier otra.
Una variable puntero contiene una dirección que apunta a otra posición en memoria.

Un puntero null o  nulo no apunta a ninguna parte, no direcciona ningún dato  valido en memoria.
Se puede declarar un puntero de modo que apunte a cualquier tipo de dato, es decir, no se  asigna a un tipo de dato específico. El método es declarar el puntero como puntero void* denominado puntero genérico Void*prt.

DECLARACIÓN
INICIALIZACIÓN

Aritmética de Punteros
Al usar punteros a matrices, hay que tener en cuenta que la aritmética cambia sensiblemente.

Matrices de punteros
Para realizar una estructura de datos dinámica, se puede utilizar una matriz donde sus elementos sean punteros. Suponiendo que queramos hacer un calendario y lo dividamos por semanas. Podríamos utilizar una matriz con los días de la semana.

 Punteros a punteros: un puntero puede apuntar a otra variable puntero. Este concepto se utiliza con mucha frecuencia en programas complejos de C. para declarar un puntero aun puntero pjppp se hace preceder a la variable con dos asteriscos (**).

Punteros y arrays: pueden direccionar arrays como si fueran py punteros y punteros como si fueran arrays. La posibilidad de almacenar y acceder a punteros y arrays, implica que se pueden almacenar cadenas de datos en elementos de arrays. Sin punteros eso no es posible, ya que no existe el tipo de dato cadena en C. no existen variables de cadena, úidd únicamente constantes de cadena.

sábado, 13 de octubre de 2012


PUNTEROS O APUNTADORES EN C++.

Un puntero es una variable que contiene una dirección de memoria.. El tipo de
variable que almacena una dirección se denomina puntero.




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

main()
{
   int n= 75 ;-------------// inicializaciones y declaraciones del puntero.
   int m = 75;
   char nombre='roberto';--------//las variables deben llevar el tipo correspondiente.
 
   printf("n=%d\n",n);-------------// valor de la variable.
   printf("&n=%p\n",&n);----------------------------------//posición o dirección  de la variable en memoria.
 
   printf("nombre=%c\n",nombre);
   printf("&nombre=%p\n",&nombre);
   
   printf("m=%d\n",m);
   printf("&m=%p\n",&m);
   
    system("PAUSE");
    return 0;
}

viernes, 14 de septiembre de 2012

DEV C++ - Condicionales,repetitivos.

ESTRUCTURA DE DATOS


Programando en DEV C++




INSTRUCCION IF 

Es la instrucción condicional mas usada en los diversos lenguajes de programación, su formato completo y de trabajo  es :

cargar o asignar la variable de condición.






INSTRUCCION IF-ELSE

if (condición)
{ grupo cierto de instrucciones;}
else
{ grupo falso de instrucciones; };




INSTRUCCION FOR

Instrucciones para ciclos resuelven el problema de repetir todo el programa o cierta parte del programa mas de una vez.

Este ciclo es uno de los mas usados para repetir una secuencia de instrucciones, sobre todo cuando se conoce la cantidad exacta de veces que se quiere que se ejecute una instrucción simple o compuesta.
Su formato general es:

for (inicialización; condición; incremento)
{ instrucción(es); };




INSTRUCCION WHILE

En este ciclo el cuerpo de instrucciones se ejecuta mientras una condición permanezca como verdadera en el momento en que la condición se convierte en falsa el ciclo termina.
Su formato general es :

cargar o inicializar variable de condición;
while(condición)
{
grupo cierto de instrucciones;
instrucción(es) para salir del ciclo;
};
Un error muy comun con el while, es poner un punto y coma(;) despues de la (condición) ejemplo while(condicion); ←-esto es y causa un error.






INSTRUCCION DO WHILE

Su diferencia básica con el ciclo while es que la prueba de condición es hecha al finalizar el ciclo, es decir las instrucciones se ejecutan cuando menos una vez porque primero ejecuta las instrucciones y al final evalúa la condición;
También se le conoce por esta razón como ciclo de condición de salida.
Su formato general es :
cargar o inicializar variable de condición;
do {
grupo cierto de instrucción(es);
instrucción(es) de rompimiento de ciclo;
} while (condición);


sábado, 1 de septiembre de 2012

PARCIAL DE ESTRUCTURA DE DATOS

Algoritmo vectores al azar de los primeros 50 números, mas la suma con salto de 4 en 4 iniciando de 3.


Proceso examen

//declaracion
definir vector como entero;
definir i como entero;
definir suma como entero;
dimension vector[50];
//entrada
i<-0;
suma<-0;

//proceso
Para i<-1 Hasta 50 Con Paso 1 Hacer
vector[i]<-azar(50);
escribir "el numero asignado es:   " ,vector[i], "  y esta en la posicion:   " i;
FinPara


Para i<-3 Hasta 50 Con Paso 4 Hacer
suma<-suma+vector[i];
FinPara
//salida
escribir " esta es la suma de los numeros de 4 en 4 : ",suma;
FinProceso

DIAGRAMA DE FLUJOS



PRUEBA DE ESCRITORIO

ciclo indice vector[i] suma
1 3 20 20
2 7 8 28
3 11 30 58

jueves, 30 de agosto de 2012

TRABAJO DE ESTRUCTURA DE DATOS

Realizar un algoritmo que tenga un vector de 4 posiciones, y otro de 6 posiciones, que los digite el usuario y luego sumar los números  digitados en el vector 1 y el vector 2, mostrando el resultado de la suma de ambos vectores.

Proceso vectores

//Declaración
       Definir k como entero;
       Definir v 1 como entero;
       Dimensión v1[4];

//Entrada
        sum<-0;
sum2<-0;
sum3<-0;

//Proceso
Para k<-1 Hasta 4 Con Paso 1 Hacer
escribir " digite el numero del vector 1: ";
Leer v1[k];

FinPara
Para k<-1 Hasta 4 Con Paso 1 Hacer
sum<-sum+v1[k];
FinPara

//Salida

Escribir " la suma de los numeros digitados en el vector 1 es:",sum;

// Declaración
Definir i como entero;
        Definir v 2 como entero;
Dimensión v2[6];

//proceso
Para i<-1 Hasta 6 Con Paso 1 Hacer
Escribir " digite el numero del vector 2 : ";
Leer v2[i];

FinPara

Para i<-1 Hasta 6 Con Paso 1 Hacer
sum2<-sum2+v2[i];
FinPara

//Salida
Escribir " la suma de los numeros digitados en el vector 2 es : ",sum2;
                sum3<-sum2+sum;
Escribir " la suma de vectores 1 y vectores dos es : ",sum3;
FinProceso

DIAGRAMA DE FLUJO


PARA: Johan Rojas.
DE: Roberto Carlos Ruiz.

viernes, 24 de agosto de 2012

Estructura Mientras
 
Es aquella en la que la acción o grupo de acciones se repetirá mientras se cumpla la condición y en el momento en que no se cumpla se saldrá del programa
 
 
 
 
 
Estructura Mientras
 
Es aquella en la que la acción o grupo de acciones se repetirá mientras se cumpla la condición y en el momento en que no se cumpla se saldrá del programa
 
 
 
 

jueves, 23 de agosto de 2012


ESTRUCTURA DE DATOS
EJERCICIOS CLASE 2

EJECICIO # 1:
Realizar un algoritmo que al ingresar un numero por teclado el programa nos diga si es par o impar.
Proceso numero
//declaración
Definir num como entero;
//entrada
Escribir "num";
Leer num;
//proceso
Si (num mod 2=0) entonces
//salida
 Escribir "el numero es par";
Sino
Escribir "escribir el numero es impar";
FinSi

FinProceso



DIAGRAMA DE FLUJO:



EJERCICIO # 2:
Realizar un algoritmo que imprima la suma de los primeros 50 números naturales.
Proceso naturales
//declaración
Definir Nnat como entero;
//entrada
Suma <-0;
Nnat<-50;
Escribir "Nnat";
//proceso
Para Nnat<-1 Hasta 50 Con Paso 1 Hacer
Escribir Nnat;
FinPara

Para Nnat<-1 hasta 50 con paso 1 Hacer
           
Suma<-suma+Nnat;
FinPara

Escribir " esta es la suma de los primeros 50 números ";
Escribir suma;
FinProceso


DIAGRAMA DE FLUJOS:



EJERCICIO # 3:
Realizar un algoritmo que al introducir un numero por teclado nos permita saber si es positivo o negativo.
Proceso numeroPN
//DECLARACIÓN
DEFINIR NUMERO COMO ENTERO;
NUMERO<0;
//ENTRADA
ESCRIBIR "NUMERO";
LEER NUMERO;
//PROCESO
 SI NUMERO<0 Entonces
ESCRIBIR "ESTE NUMERO ES NEGATIVO";
Sino ESCRIBIR "ESTE NUMERO ES POSITIVO";
FinSi

//SALIDA
           
FinProceso









DIAGRAMA DE FLUJOS:



PUNTO # 4:
Diferencias entre el ciclo repetir y el ciclo mientras.
REPETIR:
En este ciclo el interprete ejecutara y a continuación evaluará. De resultar falsa, el interprete vuelve al principio y repite el mismo proceso, se ejecutara al menos una vez.
MIENTRAS:
El ciclo mientras ejecuta un bloque de acciones “mientras” que una condición dada se cumpla es decir, cuando la condición evalúa a verdadero. Y si la condición es falsa o no se cumple no se ejecuta.




Gracias ........De : Roberto Carlos Ruiz Beleño.

Para: Johan Rojas.



EJERCICIO EN CLASE: Bienvenida.
Proceso BIENVENIDA
//declaraciones//
//entradas//
ESCRIBIR "DIGITE SU NOMBRE";
LEER NOMBRE;
//procesos//

//salidas//
ESCRIBIR "BIENBENIDOS A LA ASIGNATURA ESTRUCTURA DE DATOS"
ESCRIBIR NOMBRE;       
Fin Proceso

DIAGRAMA DE FLUJOS:


viernes, 17 de agosto de 2012

INFORMACIÓN DE LAS CLASES DE ESTRUCTURAS DE DATOS
 Y SUS CARACTERÍSTICAS. 








CONJUNTO
Conjunto es una colección (contenedor)de ciertos valores, sin ningún orden concreto ni valores repetidos. Su correspondencia en las matemáticas sería el conjunto finito. Sin tener en cuenta la secuencia, ni el hecho de que no haya valores repetidos, se asemeja a una lista. Un conjunto puede verse como una cadena asociativa (array) (mapeado parcial) donde no se atiende al valor de cada par clave-valor.
Las matrices se utilizan para múltiples aplicaciones y sirven, en particular, para representar los coeficientes de los sistemas de ecuaciones lineales o para representar las aplicaciones lineales; en este último caso las matrices desempeñan el mismo papel que los datos de un vector para las aplicaciones lineales.












MATRICES
Matriz o vector (llamados en inglés arrays) es una zona de almacenamiento continuo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista lógico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones).En principio, se puede considerar que todas las matrices son de una dimensión, la dimensión principal, pero los elementos de dicha fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de matrices multidimensionales, aunque las más fáciles de imaginar son los de una, dos y tres dimensiones.
Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso
Secuencial sería más adecuado utilizar una lista, ya que esta estructura puede cambiar de tamaño fácilmente durante la ejecución de un programa.




LISTA









LISTA
 Listaenlazada 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, enlaces o punteros (punteros) al nodo anterior o posterior. El principal beneficio de las listas enlazadas respecto a los vectores 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.
Una lista enlazada es un tipo de dato auto referenciado porque contienen un puntero o enlace (en inglés link, del mismo significado) a otro dato del mismo tipo. Las listas enlazadas permiten inserciones y eliminación de nodos en cualquier punto de la lista en tiempo constante (suponiendo que dicho punto está previamente identificado o localizado), pero no permiten un acceso aleatorio. Existen diferentes tipos de listas enlazadas: Lista Enlazadas Simples, Listas Doblemente Enlazadas, Listas Enlazadas Circulares y Listas Enlazadas Doblemente Circulares.
Las listas enlazadas pueden ser implementadas en muchos lenguajes. Lenguajes tales como Lisp y Scheme tiene estructuras de datos ya construidas, junto con operaciones para acceder a las listas enlazadas. Lenguajes imperativos u orientados a objetos tales como C o C++ y Java, respectivamente, disponen de referencias para crear listas enlazadas.




ÀRBOL
Árbol es una estructura de datos ampliamente usada que imita la forma de un árbol (un conjunto de nodos conectados). Un nodo es la unidad sobre la que se construye el árbol y puede tener cero o más nodos hijos conectados a él. Se dice que un nodo a es padre de un nodo b si existe un enlace desde a hasta b (en ese caso, también decimos que b es hijo dea). Sólo puede haber un único nodo sin padres, que llamaremos raíz. Un nodo que no tiene hijos se conoce como hoja. Los demás nodos (tienen padre y uno o varios hijos) se les conoce como rama.




GRAFOS





GRAFOS
La teoría de grafos (también llamada teoría de las gráficas) es un campo de estudio de las matemáticas y las ciencias de la computación, que estudia las propiedades de los grafos (también llamadas gráficas) estructuras que constan de dos partes, el conjunto de vértices, nodos o puntos; y el conjunto de aristas, líneas o lados (edges en inglés) que pueden ser orientados o no.
La teoría de grafos es una rama de las matemáticas discretas y aplicadas, y es una disciplina que unifica diversas áreas como combinatorias, álgebra, probabilidad, geometría de polígonos, aritmética y topología.

Actualmente ha tenido mayor preponderancia en el campo de la informática, las ciencias de la computación y telecomunicaciones.







TABLA HASH
Una tabla hash, mapa hash o tabla de dispersión es una estructura de datos que asocia llaves o claves con valores. La operación principal que soporta de manera eficiente es la búsqueda: permite el acceso a los elementos (teléfono y dirección, por ejemplo) almacenados a partir de una clave generada (usando el nombre o número de cuenta, por ejemplo). Funciona transformando la clave con una función hash en un hash, un número que identifica la posición (casilla o cubeta) donde la tabla hash localiza el valor deseado.









MONTICULO










MONTICULO
Montículo (heap en inglés) es unaestructura de datos del tipo árbol con información perteneciente a un conjunto ordenado. Los montículos máximos tienen la característica de que cada nodo padre tiene un valor mayor que el de cualquiera de sus nodos hijos, mientras que en los montículos mínimos, el valor del nodo padre es siempre menor al de sus nodos hijos.
Un árbol cumple la condición de montículo si satisface dicha condición y además es un árbol binario completo. Un árbol binario es completo cuando todos los niveles están llenos, con la excepción del último, que se llena desde la izquierda hacia la derecha.
En un montículo de prioridad, el mayor elemento (o el menor, dependiendo de la relación de orden escogida) está siempre en el nodo raíz. Por esta razón, los montículos son útiles para implementar colas de prioridad. Una ventaja que poseen los montículos es que, por ser árboles completos, se pueden implementar usando arreglos, lo cual simplifica su codificación y libera al programador del uso de punteros.
La eficiencia de las operaciones en los montículos es crucial en diversos algoritmos de recorrido de grafos y de ordenamiento (heapsort).