jueves, 3 de junio de 2010
curso rapido C++
miércoles, 2 de junio de 2010

PROGRAMACION CON VISUAL BASIC
Carlos Arturo Correa Peña
Visual Basis es un programador básico orientado a objetos es decir, se utiliza una interfaz “Visual” donde se diseña una parte grafica sobre la que se comienza a programar. A diferencia de la programación en códigos no orientada a objetos, (donde las líneas de códigos se hacen extensas pues se genera la necesidad de codificar el las características de lo objetos) Basic permite de diseñar la interfaz simplemente podemos agregar objetos “prefabricados” en su lugar dentro de la pantalla, que ahorran mucho tiempo de programación.
Desde su aparición el BASIC ha sido el lenguaje ideal para principiantes que apenas comienzan a dar sus primeros pasos en el mundo de la programación, por su sencillez y versatilidad aunque también hay que tener en cuenta que hay otros lenguajes orientados a objetos que son mucho más potentes. Uno de los mayores usos que se le atribuye a este lenguaje de programación es la creación de macros en los programas de Windows Office, ya que estos están basados en el VBA o Visual Basic para Aplicaciones, otra ventaja que nos ofrece es una adaptación de este lenguaje orientada a la programación de páginas Web, a esta adaptación se le conoce como VBScript que al trabajar junto al código HTML nos ofrece páginas más funcionales.
Además una de las características principales de Visual Basic es que su programación esta orientada a eventos, es decir, visual Basic realizara rutinas o “pasos” dependiendo de la acción que realiza el usuario, el sistema o el programa mismo. Para que estos pasos se puedan llevar a cabo con facilidad se deben tener en cuenta 3 conceptos:
- Las PROPIEDADES de los objetos (nombre, color, alto, ancho, etc.)
- El EVENTO asignado a un objeto, que desencadena las rutinas q el programa realizara ejemplo: hacer clic en un botón
- Y por ultimo el METODO es decir la secuencia de pasos que seguirá el programa una vez q halla sucedido el evento.
Los pasos básicos para crear una aplicación son muy sencillos, se empieza por crear la “carátula” del programa es decir la interfaz con el usuario. Una vez se ha diseñado la interfaz se procede a crear los métodos de respuesta a los eventos que se quieran controlar los cuales produciran una respuesta q puede ser por ejemplo modificar algunas propiedades de los objetos, lanzar métodos, ejecutar rutinas, llamar a otros procedimientos etc.
si alguna vez quisiste estudiar en stanford
prodigio!? chino tenia q ser
Lim Ding Wen es un niño chino de 9 años de edad. Pero no cualquier niño chino, Wen Ding escribió una aplicación para el iPhone para pintar con los dedos de sus hermanos menores."Lim, que ahora habla con fluidez seis lenguajes de programación, primero comenzó a usar una computadora cuando tenía dos años de edad, descubrió la programación de siete años, y desde entonces ha completado más de 20 proyectos de programación.
Su última aplicación, Doodle Kids, permite a los usuarios a hacer dibujos con los dedos y después borrar la pantalla agitando el iPhone."
Muy impresionante, ¿eh? No para su padre!
"Ding Wen es un niño encima de la media con un interés en las computadoras, especialmente Apple IIGS y Mac, le gusta hacer la programación, y eso es todo. Doodle Kids es un programa muy simple que se puede hacer cualquiera. Todo el mundo puede programar - si Ding Wen puede, usted tambien ", escribió su padre.
Wow, papá, no seas demasiado orgulloso. "¿Quién, Din Wen, ¿eh, él no es nada especial. Y sólo entre tú y yo - Creo que está retrasado.Es culpa de su Madre por supuesto."
LEYES DE MURPHY DE LA PROGRAMACION( sguro nos paso mientra trabajamos en c++)
1.Cualquier programa, no importa cual, se queda obsoleto nada mas instalarlo.
2.Es más fácil cambiar las especificaciones para que se ajusten al programa que viceversa.
3.Si un programa es útil, alguien te obligará a hacer cambios en el.
4.Si un programa es inútil, alguien te obligará a documentarlo exhaustivamente.
5.Solamente el 10 por ciento del código de cualquier programa llegará a ejecutarse en algún momento.
6.El software crece siempre hasta consumir todos los recursos disponibles.
7.Cualquier programa no trivial, contiene al menos un error.
8.La probabilidad de hacer el ridículo en una demostración pública de tu software es directamente proporcional al número de gente viéndola, creciendo además de manera exponencial el riesgo cuanto mayor sea la cantidad de dinero invertido en dicha aplicación.
9.Hasta que un programa no lleve al menos 6 meses en producción no se descubrirá su error
mas grave.
10.Hay una variedad infinita de errores indetectables. Por contra, los detectables son por definición finitos.
11.El esfuerzo requerido para corregir un error se incrementa de manera exponencial con el tiempo.
12.La complejidad de un programa siempre crece hasta que excede la capacidad del programador que lo tiene que mantener.
13.Cualquier código de tu autoría que no hayas revisado en meses, bien podría haberlo escrito cualquier otra persona, porque al volverlo a revisar no te enterarás de nada.
14.Dentro de cada pequeño programa hay un gran programa pujando por salir a la luz.
15.Cuanto mas pronto comiences trabajar en tu programa, mas tiempo te llevará.
16.Un proyecto mal planificado necesita hasta tres veces mas tiempo de lo esperado para terminarlo; un proyecto cuidadosamente planificado solo lleva 2 veces mas tiempo de lo estimado al principio.
17.Meter mas programadores en un proyecto que va con retraso tan solo consigue retrasarlo más.
18.Un programa nunca está menos de un 90% completo y nunca mas de un 95% completo.
19.Si tu programa automatiza una porquería, solo conseguirás una porquería automatizada.
20.Construye un programa que incluso un tonto pueda usar y solamente un tonto querrá
usarlo.
21.Los usuarios en realidad no saben lo que quieren de un programa hasta que lo usan.
Si Los Lenguajes De Programacion Fueran Religiones
C sería el Judaísmo - Es viejo, restrictivo, pero la mayor parte del mundo está familiarizado con sus normas y las respeta. El problema es que no te puedes convertir, o estás desde el principio, o crees que es una locura por completo. También cuando las cosas van mal la gente desea culpar al mundo con sus problemas.
Java sería el Cristianismo Fundamentalista - Teóricamente está basado en C, pero se pasa por alto tantas de las antiguas leyes, que no se parece en absoluto. En su lugar, añade su propio conjunto de normas nuevas e inflexibles, las cuales los creyentes piensan que son muy superiores a las originales. Y no sólamente estan seguros de que sea el mejor idioma del mundo, sino que desean quemar a aquellos que estén en desacuerdo.
PHP sería en Cristianismo de Cafetería - Se pelea con Java por la supremacía del mercado web. Coge algunos aspectos de C y Java, pero sólo los que le gustan. Probablemente no sea tan coherente como otros lenguajes, pero por lo menos te permite mucha más libertad y mantiene la idea principal de las cosas. También, el concepto “GOTO Hell” ha sido abandonado.
C++ sería el Islamismo - Se basa en C, y no sólamente mantiene todas sus leyes, sino que añade un nuevo grupo de normas complejas encima de las anteriores. Es tan versátil que puede utilizarse para hacer cualquier cosa, desde las atrocidades más gigantescas, hasta las mayores obras de arte. Sus seguidores están convencidos de que es el “Lenguaje Universal Definitivo”, y se enfandarán con aquellos que no estén deacuerdo. También, si insultas a su fundador o fundadores, probablemente seas maltratado hasta la muerte por los seguidores radicales.
C# sería el Mormonismo - A simple vista, es lo mismo que Java, pero un vistazo más en profundidad hará que te des cuenta de que está controlado por una única corporación (la cual muchos seguidores de Java opinan que es maléfica) y que muchos conceptos teológicos son bastante dieferentes. Tienes la impresión de que sería bonito si todos los seguidores de Java dejasen de discriminarte por utilizarlo.
Lisp sería el Budismo Zen - No hay sintaxis, no hay dogma centralizado, no hay deidades. El universo entero está a tu alcance – si estás lo suficientemente iluminado. Algunos dicen que no es un lenguaje en absoluto, otros, que es el íºnico lenguaje que tiene sentido.
Haskell sería el Taoísmo - Es tan diferente del resto de lenguajes que la gente no sabe cómo se puede producir algu útil. Sus seguidores creen que es el verdadero camino hacia el conocimiento, pero ese conocimiento está bastante por encima de cualquier mortal.
Erlang sería el Hinduísmo - Es otro lenguaje extraño que no parece que pueda ser útil para nada, pero a diferencia del resto de lenguajes modernos, está construído alrededor del concepto de varias deidades.
Perl sería el Vudú - Una serie incomprensible de hechizos arcanos que envuelve tu sangre y corrompe permanentemente tu alma. Utilizado normalmente cuando tu jefe te pide un trabajo urgente y son las 21h del Viernes.
Lua sería Wicca - Un lenguaje panteónico que puede ser fácilmente adaptado por diferentes culturas y lugares. Su código es muy liberal y permite el uso de técnicas que podrían ser descritas como “mágicas” por los que están acostumbrados a lenguajes más tradicionales. Tiene una conexión muy fuerte con la Luna.
Ruby sería el Neo-Paganismo – Una mezcla de diferentes lenguajes e ideas batidas y convertidas en algo que se podría demonimar “lenguaje”. Sus seguidores crecen rápido, y aunque todo el mundo los mira de forma sospechosa, son bien intencionados y no tienen intencion de hacer daño a nadie.
Python sería el Humanismo - Es simple, sin restricciones, y todo lo que necesitas tener es sentido común. Muchos de sus seguidores dicen que se sienten liberados de las tonterías impuestas por otros lenguajes, y que han redescubierto el placer de programar. Hay algunos que dicen que es una forma de pseudo-código.
COBOL sería el Paganismo Ancestral - Hubo un tiempo en el cual dominaba sobre vastas regiones y era importante, pero actualmente está muerto, para nuestro bien. Aunque muchos estaban asustados de los rituales que pedían sus deidades, algunos insisten en mantenerlo vivo a día de hoy.
APL sería la Cienciología - Hay un montón de gente que dice ser su seguidor, pero tú siempre has sospechado que es una gigantesca y elaborada broma que se fué de control.
LOLCODE sería el Pastafarismo - Una creencia esotérica nacida enInternet que nadie se toma en serio, a pesar de todos los esfuerzos para desarrollarlo y expandirlo.
Visual Basic sería el Satanismo - Sólamente que no necesitas vender tu alma..
ALGORITMOS
Introducción a los algoritmos
- ¿Qué es un algoritmo?
Una definición informal (no se considera aquí una definición formal, aunque existe): conjunto finito de reglas que dan una secuencia de operaciones para resolver todos los problemas de un tipo dado. De forma más sencilla, podemos decir que un algoritmo es un conjunto de pasos que nos permite obtener un dato. Además debe cumplir estas condiciones:
· Finitud: el algoritmo debe acabar tras un número finito de pasos. Es más, es casi fundamental que sea en un número razonable de pasos.
· Definibilidad: el algoritmo debe definirse de forma precisa para cada paso, es decir, hay que evitar toda ambigüedad al definir cada paso. Puesto que el lenguaje humano es impreciso, los algoritmos se expresan mediante un lenguaje formal, ya sea matemático o de programación para un computador.
· Entrada: el algoritmo tendrá cero o más entradas, es decir, cantidades dadas antes de empezar el algoritmo. Estas cantidades pertenecen además a conjuntos especificados de objetos. Por ejemplo, pueden ser cadenas de caracteres, enteros, naturales, fraccionarios, etc. Se trata siempre de cantidades representativas del mundo real expresadas de tal forma que sean aptas para su interpretación por el computador.
· Salida: el algoritmo tiene una o más salidas, en relación con las entradas.
· Efectividad: se entiende por esto que una persona sea capaz de realizar el algoritmo de modo exacto y sin ayuda de una máquina en un lapso de tiempo finito.
A menudo los algoritmos requieren una organización bastante compleja de los datos, y es por tanto necesario un estudio previo de las estructuras de datosfundamentales. Dichas estructuras pueden implementarse de diferentes maneras, y es más, existen algoritmos para implementar dichas estructuras. El uso de estructuras de datos adecuadas pueden hacer trivial el diseño de un algoritmo, o un algoritmo muy complejo puede usar estructuras de datos muy simples.
Uno de los algoritmos más antiguos conocidos es el algoritmo de Euclides. El término algoritmo proviene del matemático Muhammad ibn Musa al-Khwarizmi, que vivió aproximadamente entre los años 780 y 850 d.C. en la actual nación Iraní. El describió la realización de operaciones elementales en el sistema de numeración decimal. De al-Khwarizmi se obtuvo la derivación algoritmo.
- Clasificación de algoritmos
* Algoritmo determinista: en cada paso del algoritmo se determina de forma única el siguiente paso.
* Algoritmo no determinista: deben decidir en cada paso de la ejecución entre varias alternativas y agotarlas todas antes de encontrar la solución.
Todo algoritmo tiene una serie de características, entre otras que requiere una serie de recursos, algo que es fundamental considerar a la hora de implementarlos en una máquina. Estos recursos son principalmente:
· El tiempo: período transcurrido entre el inicio y la finalización del algoritmo.
· La memoria: la cantidad (la medida varía según la máquina) que necesita el algoritmo para su ejecución.
Obviamente, la capacidad y el diseño de la máquina pueden afectar al diseño del algoritmo.
En general, la mayoría de los problemas tienen un parámetro de entrada que es el número de datos que hay que tratar, esto es, N. La cantidad de recursos del algoritmo es tratada como una función de N. De esta manera puede establecerse un tiempo de ejecución del algoritmo que suele ser proporcional a una de las siguientes funciones:
- 1 : Tiempo de ejecución constante. Significa que la mayoría de las instrucciones se ejecutan una vez o muy pocas.
- logN : Tiempo de ejecución logarítmico. Se puede considerar como una gran constante. La base del logaritmo (en informática la más común es la base 2) cambia la constante, pero no demasiado. El programa es más lento cuanto más crezca N, pero es inapreciable, pues logN no se duplica hasta que N llegue a N2.
- N : Tiempo de ejecución lineal. Un caso en el que N valga 40, tardará el doble que otro en que N valga 20. Un ejemplo sería un algoritmo que lee N números enteros y devuelve la media aritmética.
- N·logN : El tiempo de ejecución es N·logN. Es común encontrarlo en algoritmos como Quick Sort y otros del estilo divide y vencerás. Si N se duplica, el tiempo de ejecución es ligeramente mayor del doble.
- N2 : Tiempo de ejecución cuadrático. Suele ser habitual cuando se tratan pares de elementos de datos, como por ejemplo un bucle anidado doble. Si N se duplica, el tiempo de ejecución aumenta cuatro veces. El peor caso de entrada del algoritmo Quick Sort se ejecuta en este tiempo.
- N3 : Tiempo de ejecución cúbico. Como ejemplo se puede dar el de un bucle anidado triple. Si N se duplica, el tiempo de ejecución se multiplica por ocho.
- 2N : Tiempo de ejecución exponencial. No suelen ser muy útiles en la práctica por el elevadísimo tiempo de ejecución. El problema de la mochila resuelto por un algoritmo de fuerza bruta -simple vuelta atrás- es un ejemplo. Si N se duplica, el tiempo de ejecución se eleva al cuadrado.
* Algoritmos polinomiales: aquellos que son proporcionales a Nk. Son en general factibles.
* Algoritmos exponenciales: aquellos que son proporcionales a kN. En general son infactibles salvo un tamaño de entrada muy reducido.
- Notación O-grande
En general, el tiempo de ejecución es proporcional, esto es, multiplica por una constante a alguno de los tiempos de ejecución anteriormente propuestos, además de la suma de algunos términos más pequeños. Así, un algoritmo cuyo tiempo de ejecución sea T = 3N2 + 6N se puede considerar proporcional a N2. En este caso se diría que el algoritmo es del orden de N2, y se escribe O(N2)
Los grafos definidos por matriz de adyacencia ocupan un espacio O(N2), siendo N el número de vértices de éste.
La notación O-grande ignora los factores constantes, es decir, ignora si se hace una mejor o peor implementación del algoritmo, además de ser independiente de los datos de entrada del algoritmo. Es decir, la utilidad de aplicar esta notación a un algoritmo es encontrar un límite superior del tiempo de ejecución, es decir, el peor caso.
A veces ocurre que no hay que prestar demasiada atención a esto. Conviene diferenciar entre el peor caso y el esperado. Por ejemplo, el tiempo de ejecución del algoritmo Quick Sort es de O(N2). Sin embargo, en la práctica este caso no se da casi nunca y la mayoría de los casos son proporcionales a N·logN. Es por ello que se utiliza esta última expresión para este método de ordenación.
Una definición rigurosa de esta notación es la siguiente:
Una función g(N) pertenece a O(f(N)) si y sólo si existen las constantes c0 y N0 tales que:
|g(N)| <= |c0·f(N)| , para todo N >= N0.
UN "BITE" DE HISTORIA
HISTORIA DEL COMPUTADOR
· Se considera que la primera computadora fue el Abaco, utilizado en el oriente durante más de 3.000 años. De éste aparecieron varias versiones, tales como el Abaco Chino y el Sorobán Japonés.
· En 1.600 John Napier utilizó los logaritmos como fundamento para un dispositivo multiplicador de números, conduciendo a la invención de la regla de cálculo.
· En 1.642 el francés Blaise Pascal construyó una máquina sumadora con un engranaje parecido al odómetro moderno, operada con discos unidos en engranajes que tenían los números del cero (0) al nueve (9) en circunferencia, de tal forma que cuando un disco daba una vuelta, automáticamente el disco de la izquierda avanzaba un dígito. Los indicadores de los discos mostraban las respuestas correctas, pero ésta sólo servía para sumar.
· En 1.694 Gottfried Withelm Leibnitz creó una máquina que multiplicaba y dividía con un dispositivo de rueda escalonada.
· En 1.801 Joseph Marie Jacquard diseñó tarjetas perforadas para controlar una máquina de hilado textil, en donde cada línea de tejido se presentaba en una tarjeta perforada como patrón, tejiendo automáticamente.
· En 1.820 Charles Babbage construyó el primer dispositivo que utilizaba los principios de la electrónica moderna. Inventó una máquina que evaluaba polinomios llamada Máquina de diferencias, esta era capaz de producir tablas logarítmicas de 6 cifras decimales de precisión. También imaginó una máquina mecánica con una unidad de almacenamiento y aritmética, pero el bajo nivel de la tecnología metálica moderna impidió que se llegara a este resultado.
· En 1.886, durante la tabulación del senso de la población de 1.880 en los Estados Unidos, se utilizó un mecanismo desarrollado por Herman Hollerith basado en tarjetas perforadas.
· El primer progreso real hacia las computadoras digitales electrónicas, ocurrió a finales de la década de 1.930 cuando Howard Aiken de la Universidad de Harvard y George Slibitz de Bell Telephone Laboratories desarrollaron una calculadora automática utilizando redes de relevadores (interruptor controlado en forma electromagnética). Durante la Segunda Guerra Mundial se desarrollaron otras máquinas con relevadores para cálculos de balística y artillería.
· A principios de la década de 1.940 John Mauchly y J. Presper Eckert de la Universidad de Pensilvania diseñaron y construyeron una computadora con bulbos, que llamaron Integrador y Calculador Numérico Electrónico (ENIAC); fue terminada en 1.945 y se instaló en un campo de pruebas en Aberdeen Maryland. Utilizaba 18.000 bulbos y requería una gran cantidad de energía, su probabilidad de fallas era alta y programarla resultaba difícil, ya que se necesitaba un tablero de conexiones manuales.
· Para resolver las dificultades de programación del ENIAC, John Von Newmann propuso que el programa residiera en la memoria de la computadora, donde se pudiera modificar a voluntad.
· Durante esta misma época técnicos de la IBM y de la Universidad de Harvard desarrollaron el MARK 1, pesaba 5 toneladas y constaba de un complejo de 78 máquinas sumadoras y calculadoras conectadas con 800 Kms de cables, las instrucciones se les daban en cintas de papel, una vez que la máquina ejecutaba la primera instrucción no requería de la intervención humana.
· También para esta época se inventó una máquina denominada EDVAC, capaz de desarrollar operaciones aritméticas con números binarios y de almacenar instrucciones, su control se realizaba mediante un alambrado de cables removibles y cintas de papel.
· Aún cuando las primeras computadoras se desarrollaron con propósitos militares, no tardó mucho tiempo en que se emplearan en tareas comerciales e industriales.
· En 1.947 John Bardeen, Walter H. Brattain y William Shockley inventaron el transistor, lo que redujo en forma drástica las necesidades de espacio y energía al reemplazar al bulbo dando origen al computador comercial. Luego J.W Forrester y su grupo en el Instituto Tecnológico de Massachusetts desarrollaron la memoria de núcleo magnético, que permitió aumentar la capacidad de almacenamiento considerablemente.
En 1.951 se produjo la primera máquina computadora comercial llamada UNIVAC (University Automatic Computer), se instaló en el departamento de sensos de los Estados Unidos. El uso comercial de la UNIVAC comenzó en 1.954 y a partir de este momento la industria del procesamiento de datos comenzó a crecer en forma acelerada.
