miércoles, 6 de agosto de 2008

laberinto con arboles en C

Me parece interesante publicar un trabajo que realice no se tal vez les sirva de algo.....

Laberinto con arboles en C

1.0.-OBJETIVOS

El principal objetivo nuestro a través del desarrollo de esta aplicación es ampliar nuestros conocimientos sobre estructuras de datos dinámicos como lo son las listas y los árboles.

Aprender sobre el uso de grafos y como trabajar con el modo grafico interactuando con el modo texto.

Conocer más a fondo el lenguaje de programación C.

Poder hacernos acreedores de una nota y así poder aprobar la materia.

1.1.-JUSTIFICACIÓN

Hemos decidido realizar este proyecto por que nos pareció bastante interesante el uso que le podemos dar a las estructuras llamadas árboles y su diversa aplicación en muchos campos; además nos pareció interesante la forma como combinar varias estructuras en el mismo proyecto en nuestro caso listas doblemente enlazadas y árboles; a mas de eso nos percatamos que era un reto no tan fácil y fue una razón mas para inclinarnos por este proyecto.

1.2.-UTILIDAD INMEDIATA

La utilidad inmediata Constituye la de estudiar a profundidad el lenguaje de programación C y las estructuras de datos que podemos utilizar en este complejo lenguaje; además que nos sirve de modelo para la realización de otros trabajos de la misma naturaleza en el difícil camino hacia la obtención de nuestro titulo.

1.3.-AGRADECIMIENTOS

Este trabajo no hubiese sido posible sin la ayuda de nuestro profesor el ING. Víctor Poma quien con mucha paciencia nos supo guiar con sus conocimientos; nos nuestros sinceros agradecimientos.

2.0.-ANALISIS

2.1.-DEFINICIÓN FORMAL DEL PROBLEMA

Los árboles son estructuras de datos muy importantes en informática y en ciencias de la computación, son usados para representar formulas algebraicas como un método eficiente para la búsquedas grandes y complejas y en aplicaciones diversas tales como inteligencia artificial o algoritmos de cifrado.

A nuestra aplicación la hemos denominado laberinto, la misma que consiste en construir dinámicamente un laberinto utilizando grafos para luego realizar búsquedas sobre el mismo.

Para lo cual el usuario deberá ingresar los nodos; por ejemplo:
Ingrese los nodos: A,B,C,D,E,F,G,H,I,J,K

Posteriormente deberá ingresar las rutas o sea como estarán unidos los nodos; por ejemplo:
Ingrese los nodos a unir: A C , AB, AF, BH, BG, CD, CE, EB, EI, IJ, JK

Por ultimo nuestra aplicación deberá realizar una tarea de búsqueda estableciendo una posición de partida a la que podemos llamar partida y una posición de llegada a la que llamaremos meta. Asumiendo que un individuo se encuentra en la partida deberá recorrer el grafo hasta encontrar la meta, en caso de que después de haber recorrido el árbol, la meta no ha sido encontrada se tiene que presentar un mensaje en el cual se informe que la meta no ha sido encontrada.

2.3-DESCRIPCION DEL PROYECTO

Nuestra aplicación ha sido desarrollada en Turbo C, por que nos brinda un poco mas de facilidades al trabajar con el modo grafico; el programa ha sido construido usando listas doblemente enlazadas pero pudimos haberlo hecho con listas simples sin ningún problema.

cuando ejecutamos este trabajo nos pide que ingresemos el numero de nodos a graficar; solo podemos ingresar un numero máximo de 10, estos deberán ser letras; luego nos pedirá que ingresemos el nombre de los nodos; a continuación los nodos se graficaran en posiciones que el programa genera aleatoriamente cuidando que entre cada nodo haya una distancia considerable por efectos de visualización; posteriormente nos solicitara que ingresemos los pares ordenados, los que deseamos que se unan con una línea y el programa graficara una línea de color amarillo uniendo ambos nodos que ingreso el usuario, para seguir uniendo nodos la aplicación nos pedirá una opción podemos ingresar cualquier numero excepto el numero 2 ya que con ese numero salimos de aplicación; por ultimo si deseamos encontrar las rutas de un nodo partida a un nodo llegada el programa nos pedirá que ingresemos el nodo de partida y el nodo de llegada recorre el árbol y si lo encuentra las líneas cambian de color; en caso contrario presenta un mensaje que el nodo no ha sido encontrado.

3.0.-DISEÑO

3.1.-DEFINICIÓN DE ESTRUCTURAS

En nuestra aplicación hemos construido 1 estructura llamada Nodo:

struct Nodo{
char dato[1];
struct Nodo *conect[5];
struct Nodo *sig;
struct Nodo *ant;
int x;
int y;
};

El campo dato es una variable de tipo char que va a almacenar el nombre del nodo.

El campo *conect es un arreglo de cinco apuntadores.

El campo *sig es un apuntador que va a puntar al siguiente nodo de la lista doblemente enlazada.

El campo *ant es un apuntador que va a puntar al nodo anterior de la lista doblemente enlazada.

Las variables X y Y nos sirven para almacenar los valores que va a tener en la pantalla cada nodo para poderlos dibujar posteriormente.

3.2.-DEFINICIÓN DE CLASES (RELACIONES)

En la presente aplicación tenemos la clase NodosBusqueda la cual contendrá todos los métodos públicos y privados que se utilizaran para desarrollar el grafo de búsqueda con nodos.



3.3.-DISEÑO DE LA INTERFAZ

La interfaz grafica consta de dos espacios, en el primer espacio se realizaran las peticiones por parte del usuario; y en la otra parte se verán reflejadas los cambios que el usuario realice de modo grafico.

Ingrese el numero de nodos del grafo
->3

Ingrese los nodos
Nodo [1] ->a
Nodo [2] ->b
Nodo [3] ->c

Esta es lo que tenemos en pantalla antes de que los nodos sean graficados.

4.0.- IMPLEMENTACIÓN

4.1.- IMPLEMENTACIÓN DE LA CLASE

Hemos implementado una clase en nuestra aplicación llamada NodosBusqueda.

class NodosBusqueda{
private:
struct Nodo *cab, *col;
public:
NodosBusqueda();
void Presentacion(void);
void Insertar(char dat[1], int posx,int posy);
void DibujarNodos();
void DibujarLineasNodos();
void LlenarIndice();
void UnirNodos(char nod[3]);

};

La clase NodosBusqueda contendrá todos los métodos que se implementaran en la aplicación para su desarrollo.

Struct Nodo *cab: Es una estructura que nos permite obtener la dirección del primer elemento de la lista para poder realizar operaciones en ella.

Struct Nodo *col: Es una estructura que nos permite obtener la dirección del último elemento de la lista.

NodosBusqueda(): es el constructor que inicializa la cabeza y la cola de la lista.

Todas las operaciones a realizar son de tipo público; para su utilización dentro y fuera de la clase.

4.2.-DOCUMENTACION DE CADA UNO DE LOS METODOS

En nuestra clase NodosBusqueda hemos implementado los siguientes métodos:

void Presentacion(void) :Este método nos sirve para presentar una introducción del proyecto antes de la utilización del proyecto.

void Insertar(char dat[1], int posx,int posy) :Método que nos sirve para insertar elementos en una lista doblemente enlazada recibe la información del nodo y las coordenadas del nodo tanto en x como en y respectivamente para poder dibujarlo.

void DibujarNodos(): Método que utilizamos para poder recorrer la lista doblemente enlazada y por cada nodo recorrido dibujarlo en la pantalla de a cuerdo con sus coordenadas; la función utilizada para dibujar el circulo es circle(x,y,r) x, y son las coordenadas y r es el radio del circulo; outtextxy(x,y,str) x y son las coordenadas para que el string se dibuje en las coordenadas respectivas .

void DibujarLineasNodos(): Método que nos permite dibujar las líneas que unen los nodos para cual utilizamos la función line(x,y,x,y) son pares ordenados el primer par nos sirve para el punto de partida y el segundo par para el punto de llegada de la línea.

void LlenarIndice(): Método que utilizamos para llenar dos arreglo de tipo entero de forma aleatoria, cada elemento del arreglo será único; los enteros que se llenaran serán con valores menores a 12 y 9 respectivamente que sirven como índices para ubicar a cada nodo en una posición especifica en la pantalla.

void UnirNodos(char nod[3]): Método que usamos para enlazar los nodos de acuerdo a lo que el usuario haya ingresado utilizando el arreglo de apuntadores que tiene cada estructura en este caso conect, y recibimos los nodos a ingresar dependiendo del criterio del usuario.

5.0.-PRUEBAS

5.1.-PROBAR CON TODOS LOS POSIBLE CASOS

El programa funciona para todos los casos posibles; pudiendo insertar un número de 10 nodos; si deseamos unir dos nodos por ejemplo AB y luego unimos AB la línea se rescribe.

Si intentamos graficar más de 10 nodos no podremos ya que solo graficar un número máximo de 10.

Si deseamos unir un nodo que si existe con otro que no existe el programa presenta nodo no encontrado.

Si por ejemplo unimos el nodo AB y luego queremos unir el nodo BA no nos permite pues nos confundiríamos con el número de arista de cada nodo.

Cada nodo solo podrá tener un número máximo de 5 aristas o conexiones si excedemos ese número nos dará un error.

6.0.-CONCLUCIONES

Como conclusiones podemos decir que la aplicación de estructuras de datos es muy importante en nuestra carrera y por eso debemos tener un amplio conocimiento sobre esta materia, pues nos sirven de mucho a lo largo de nuestra carrera e inclusive cuando ejerzamos nuestra profesión nos podemos topar con estas estructuras.

Podemos concluir que este proyecto nos ha sido de mucha ayuda ya que nos ha permitido aprender muchas cosas nuevas e interesantes, además nos ha servido de gran ayuda para entender un poco mas a fondo el lenguaje, pues no se trata de un lenguaje de fácil entendimiento.

7.0 BIBLIOGRAFIA

Luís Joyanes Aguilar. Algoritmos y estructura de datos. Editorial McGraw Hill.
Evelio Granizo Montalvo. Programación Estructurada en pseudos códigos.
Lipshutz Clifford. Estructura de datos. Editorial McGraw Hill.
Internet. HYPERLINK "http://www.google.com" www.google.com , HYPERLINK "http://www.wikipedia.org" www.wikipedia.org

DELITOS INFORMATICOS

He decidido escribir sobre algo muy importante espero les interese......


DELITOS INFORMATICOS

DEFINICION
Delincuencia informática es todo acto o conducta ilícita e ilegal que pueda ser considerada como criminal, dirigida a alterar, socavar, destruir, o manipular, cualquier sistema informático o alguna de sus partes componentes, que tenga como finalidad causar una lesión o poner en peligro un bien jurídico cualquiera.

SUJETOS DEL DELITO INFORMATICO
Sujeto Activo: tiene habilidades para el manejo de los sistemas informáticos y generalmente por su situación laboral se encuentra en lugares estratégicos donde se maneja información de carácter sensible, o bien son hábiles en el uso de los sistemas informatizados.

Sujeto Pasivo: victima del delito es el ente sobre el cual recae la conducta de acción u omisión que realiza el sujeto activo.

TIPOS DE DELITOS INFORMATICOS
Los datos falsos o engañosos: puede realizarlo cualquier persona que tenga acceso a las funciones normales de procesamiento de datos.

Manipulación de programas: Este delito consiste en modificar los programas existentes en el sistema de computadoras.

La técnica del salam1: En transacciones financieras, se van sacando repetidamente de una cuenta y se transfieren a otra.

Falsificaciones informáticas: Como objeto: Cuando se alteran datos de los documentos almacenados en forma computarizada. Como instrumentos: Las computadoras pueden utilizarse también para efectuar falsificaciones de documentos.

Manipulación de los datos de salida.: Se efectúa fijando un objetivo al funcionamiento del sistema informático, por ejemplo el fraude que se hace a los cajeros automáticos.

Pishing: Es una modalidad de fraude informático diseñada con la finalidad de robarle la identidad al sujeto pasivo.

PROBLEMAS DE PERSECUCIÓN
Este tipo de infracciones son difícilmente descubiertas o perseguidas ya que los sujetos activos actúan sigilosamente, y poseen herramientas capaces de borrar todo rastro de intrusión o la consumación del delito.

DELITOS CIBERNÉTICOS Y CIBERCRIMINALIDAD

DELITOS COMETIDOS EN EL CIBERESPACIO
Ciberespacio, se define como el entorno creado por la interconexión de redes planetarias de sistemas informáticos. El término se aplica en la actualidad de forma generalizada a Internet.

CIBERCRIMINALIDAD
Se refiere a un grupo delincuencial organizado y estructurado en células de operación cuyo objetivo es el empleo de la red como medio de comisión de delitos graves, como los ciberpedofilos (pornografía infantil), el ciberterrorismo (el uso de la red para la propagación de ideas fundamentalistas mediante manifiestos electrónicos, manuales de fabricación de bombas y artefactos explosivos, venta de armas, lavado de dinero.

PERFIL CRIMINAL
No existe una definición concreta o perfil exacto sobre los delincuentes informáticos. Se habla de características como solitarios, orientados por la tecnología y sus avances.

HACKER
Una persona que disfruta con entusiasmo la programación, no es una persona malintencionada.

CRACKER
Una persona que accede en forma no autorizada a un Sistema Informático con intenciones de provocar daño.

INFORMATICA FORENSE

Es la ciencia que nos permite identificar, preservar, analizar y presentar, evidencia digital, que pueda ser usada como evidencia dentro de un proceso legal.
Los Informáticos forenses tienen la ardua labor de realizar investigaciones en busca de evidencia digital.

EVIDENCIA DIGITAL
Término utilizado de manera amplia para describir cualquier registro generado o almacenado en un sistema computacional que puede ser utilizado como evidencia en un proceso legal.

TIPOS DE EVIDENCIA

Evidencia Física: CPU, Cd, dvd, Cintas magnéticas, etc.
Evidencia Lógica: Cualquier dato almacenado o generado en un medio magnético.

martes, 5 de agosto de 2008

EL PROCESO DEL SOFTWARE

Resumen
En la practica, en la ingeniería del software se ha dejado a un lado el hecho de utilizar una
metodología para la elaboración de software; este articulo se refiere a las ventajas que obtenemos
si en la elaboración de un producto de software incluimos un proceso, el mismo que debe ser
evaluado y seguir una serie de normas.
Si elaboramos un producto de software sin ninguna metodología y este sale defectuoso causando
múltiples pérdidas podríamos ser demandados; el objetivo de este articulo es rescatar la ética
profesional no se trata simplemente de decir no hay tiempo para los procesos pongamos en
marcha el proyecto, el pasar por alto un proceso de elaboracion de un producto de software
le resta calidad al producto; es obligación de nosotros como ingenieros de software tomar en
cuenta dichos procesos.

INGENIERÍA DE SOFTWARE:
A finales de los años 60 se emplea por primera vez el termino de ingenieria de software a raíz de la crisis del software, pues se hacia necesario introducir una serie de herramientas y procedimientos que facilitaran, la labor de creación del software y la comprensión y el manejo del mismo. actualmente la ingeniería de software es reconocida como una disciplina legitima , ha conseguido muchos logros pero aun tiene mucho trabajo por hacer. Pero cual seria la denición de ingenieria de software Fritz Bauer dice que:La Ingeniería de Software es el establecimiento y uso de principios robustos de la
ingeniería a fin de obtener económicamente software que sea fiable y que funcione eficientemente sobre máquinas reales. Pero cuales son sus objetivos:
. Mejorar la calidad de los productos de software
. Aumentar la productividad y trabajo de los ingenieros del software.
. Facilitar el control del proceso de desarrollo de software.
.Referencias
[1] PRESSMAN Roger, Ingenieria de software, (VI edición).
[2] HUMPHREY, Watts, Introducción al Proceso de Software Personal, Addison-Wesley, 1997
[3] www.monografías.com-ingeniería del software
[4] JUAN PALACIOS.Gestion y procesos en empresas de software.Rev noviembre 2005.pdf.
[5] CARNEGIE-MELLON UNIVERSITY CMMI for Software Engineering, 1.1, 2002