sábado, 2 de abril de 2011

LISTAS ENLAZADAS

LíSTAS  Enlazadas

Cabe destacar que es  posible crear Variables Dinámicas sucesivamente,  uniéndolas con los apuntadores para así obtener una secuencia .  Igualmente cada nodo es un registro con: información y un apuntador al siguiente nodo del mismo tipo.  De igual forma Inicio es un apuntador que permite acceder la lista y por último el  elemento que  apunta a NULL. Se dice también que una lista es una colección de elementos homogéneos con una organización lineal.  Cada elemento debe indicar dónde se encuentra el siguiente elemento de la lista. Es por eso que en una lista cada elemento excepto el primero tiene un único predecesor, y cada elemento excepto el último tiene un único sucesor de registros en memoria.  Es de señalar que cada elemento de la lista lo llamamos NODO.
                Un NODO contiene dos campos:
                - Campo de información (INFO): puede ser un entero, un carácter, un registro, etc. Puede ser simple o estructurado (puede contener uno o muchos campos de datos).
                - Campo de enlace (PROX) : contiene la dirección del próximo elemento de la lista.
La parte del nodo que enlaza a cada uno con un siguiente es el Puntero o Apuntador. En el último elemento de la lista este valor sería NULO, para indicar que no tiene sucesor.
Este Apuntador es el que determina el orden lógico que tienen los elementos dentro de la lista, el cual no corresponde necesariamente con la posición física que ellos ocupan.  En conclusión la estructura de una lista es lineal, esto es, existe un elemento que es “el primero” y otro que es “el último”. Por lo tanto  los elementos de una lista no pueden ser accedidos directamente. Para llegar a un elemento determinado, se debe comenzar por “el primero” y luego, por el campo de enlace se va al segundo elemento, y así sucesivamente hasta llegar al elemento buscado o a “el último” elemento de la lista que contendrá el valor NULO en el campo de enlace.
Una interfaz de programación de aplicaciones o API : es el conjunto de funciones y o métodos  en la programación que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. Son usados generalmente en las bibliotecas
IMPORTANCIA
consiste en proporcionar un conjunto de funciones de uso general, por ejemplo, para dibujar ventanas o iconos en la pantalla. De esta forma, los programadores se benefician de las ventajas de la API haciendo uso de su funcionalidad, evitándose el trabajo de programar todo desde el principio. Las API asimismo son abstractas: el software que proporciona una cierta API generalmente es llamado la implementación de esa API.

AVANCES DE LA PROGRAMACIÓN
La electrónica ha avanzado meteóricamente en los últimos veinte años, hasta el punto de que ahora cada dos años esperamos que la memoria de computador aumente al doble su capacidad, al mismo tiempo que se reduce a la mitad su precio.
      Por otro lado tenemos que el computador puede ser programado. Esta cualidad ha permitido que el computador, a diferencia de otras máquinas, pueda ser aplicado a una gran diversidad de actividades.  
      Este es el  dilema de nuestro mundo actual: el progreso exige cada vez más realizaciones tecnológicas y los avances tecnológicos son como la plata: nunca alcanzan.
      La tendencia actual es crear cada vez más común lenguajes especializados para cada aplicación. Por ejemplo, la primera hoja de cálculo no tenía capacidad de traficación: hacer gráficos no es nada fácil, a menos que uno cuente con un lenguaje adecuado para ello. Las hojas de cálculo más recientes cuentan con un sofisticado lenguaje para producir gráficos.
      ¿Qué nos depara el futuro? En el futuro contaremos además con componentes computacionales inteligentes que nos permitan comunicarnos más fluidamente con los computadores.      Más adelante en el futuro, veremos máquinas que puedan auto programarse junto a otras máquinas. Esto permitirá crear máquinas que puedan trabajar junto a otras en forma armoniosa. Cuando una nueva máquina llegue, simplemente hablará con las viejas para ponerse de acuerdo en cómo pueden cooperar todas. Y también cada máquina sabrá cuando necesite reparación, o cómo repararse sola.

  Comentario Personal:
Desde mi punto de vista me pareció  muy bueno e importante este curso ya que siento que para lo que estamos estudiando pudimos aprender mucho a pesar del poco tiempo disponible y para como veníamos  , de verdad  siento que sí logre captar . ¡Ojalá! No cometan mas el error de colocar  a personas  que no tienen pedagogía, porque nos hacen  un gran daño. Prof. Hector  honestamente lo fellicito. Éxitos.

viernes, 11 de febrero de 2011

LENGUAJE C ++

Desarrollo inicial
El desarrollo inicial de C se llevó a cabo en los Laboratorios Bell de AT&T entre 1969 y 1973; según Ritchie, el periodo más creativo tuvo lugar en 1972. Se le dio el nombre "C" porque muchas de sus características fueron tomadas de un lenguaje anterior llamado "B".
Hay muchas leyendas acerca del origen de C y el sistema operativo con el que está íntimamente relacionado, Unix. Algunas de ellas son:
  • El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space Travel. Habían estado jugando en el mainframe de su compañía, pero debido a su poca capacidad de proceso y al tener que soportar 100 usuarios,
·         En 1973, el lenguaje C se había vuelto tan potente que la mayor parte del kernel Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20, fue reescrita en C. Éste fue uno de los primeros núcleos de sistema operativo implementados en un lenguaje distinto al ensamblador. (Algunos casos anteriores son el sistema Multics, escrito en PL/I, y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961).

Características

  • Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas.
  • Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura).
  • Un sistema de tipos que impide operaciones sin sentido.
  • Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir múltiples archivos de código fuente.
  • Acceso a memoria de bajo nivel mediante el uso de punteros.
  • Interrupciones al procesador con uniones.
  • Un conjunto reducido de palabras clave.
  • Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros.
  • Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y polimorfismo.
  • Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una única variable "empleado").
  • Lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas.
  • A pesar de su bajo nivel es el lenguaje más portado en existencia, habiendo compiladores para casi todos los sistemas conocidos.
  • Proporciona facilidades para realizar programas modulares y/o utilizar código o bibliotecas existentes.
  • ]Inconvenientes
El mayor problema que presenta el lenguaje C frente a los lenguajes de tipo de dato dinámico es la gran diferencia en velocidad de desarrollo: es más lento programar en C, sobre todo para el principiante. La razón estriba en que el compilador de C se limita a traducir código sin apenas añadir nada. La gestión de la memoria es un ejemplo clásico: en C el programador ha de reservar y liberar la memoria explícitamente. En otros lenguajes (como BASIC, Matlab o C#) la memoria es gestionada de forma transparente para el programador. Esto alivia la carga de trabajo humano y en muchas ocasiones previene errores, aunque también supone mayor carga de trabajo para el procesador.
El mantenimiento también es más difícil y costoso que con lenguajes de más alto nivel. El código en C se presta a sentencias cortas y enrevesadas de difícil interpretación. Aunque el lenguaje admite código escrito de forma fácilmente legible, si no se siguen normas en el equipo de programación algunos programadores pueden acabar escribiendo código difícil de leer. Esto complica la revisión y el mantenimiento.
C no dispone de sistemas de control automáticos y la seguridad depende casi exclusivamente de la experiencia del programador. La mayor parte de los problemas de seguridad en los sistemas informáticos actuales deriva de haber sido realizados en C. El fallo de seguridad clásico consiste en que algunas entradas de información al programa no se comprueban en longitud. Si un atacante introduce datos lo bastante grandes puede provocar la sobreescritura de código en la pila del programa e incluso llegar a forzar la ejecución de código pernicioso. Los lenguajes de tipo dinámico cuentan con controles de gestión de memoria y de entrada de datos automáticos.
Por estas razones, los directores de desarrollo han de sopesar la ventaja en eficiencia de un buen programa en C frente a la mayor duración del trabajo y los riesgos de seguridad y estabilidad. Han de tener en cuenta además, que los equipos bajan de precio con el tiempo mientras que el coste de los programadores aumenta. En equipos de trabajo con poca experiencia en C, se desaconseja su uso porque el tipo de problemas y errores al que el programador se enfrenta hace más difícil aprender C sobre la marcha que en otros lenguajes

Ventajas

  • Lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas.
  • A pesar de su bajo nivel es el lenguaje más portado en existencia, habiendo compiladores para casi todos los sistemas conocidos.
  • Proporciona facilidades para realizar programas modulares y/o utilizar código o bibliotecas existentes.

Proceso de compilación

La compilación de un programa C se realiza en varias fases que normalmente son automatizadas y ocultadas por los entornos de desarrollo:
  1. Preprocesado consistente en modificar el código fuente en C según una serie de instrucciones (denominadas directivas de preprocesado) simplificando de esta forma el trabajo del compilador. Por ejemplo, una de las acciones más importantes es la modificación de las inclusiones (#include) por las declaraciones reales existentes en el archivo indicado.
  2. Compilación que genera el código objeto a partir del código ya preprocesado.
  3. Enlazado que une los códigos objeto de los distintos módulos y bibliotecas externas (como las bibliotecas del sistema) para generar el programa ejecutable final.

Aplicabilidad

Hecho principalmente para la fluidez de programación en sistemas UNIX. Se usa también para el desarrollo de otros sistemas operativos como Windows o GNU/Linux. Igualmente para aplicaciones de escritorio como GIMP, cuyo principal lenguaje de programación es C.
De la misma forma, es muy usado en aplicaciones científicas (para experimentos informáticos, físicos, químicos, matemáticos, entre otros, parte de ellos conocidos como modelos y simuladores), industriales (industria robótica, cibernética, sistemas de información y base de datos para la industria petrolera y petroquímica. Predominan también todo lo que se refiere a simulación de máquinas de manufactura), simulaciones de vuelo (es la más delicada, ya que se tienen que usar demasiados recursos tanto de hardware como de software para desarrollar aplicaciones que permitan simular el vuelo real de una aeronave. Se aplica por tanto, en diversas áreas desconocidas por gran parte de los usuarios noveles.
Los ordenadores de finales de los 90 son varios órdenes de magnitud más potentes que las máquinas en que C se desarrolló originalmente. Programas escritos en lenguajes de tipo dinámico y fácil codificación (Ruby, Python, Perl...) que antaño hubieran resultado demasiado lentos, son lo bastante rápidos como para desplazar en uso a C. Aun así, se puede seguir encontrando código C en grandes desarrollos de animaciones, modelados y escenas en 3D en películas y otras aplicaciones multimedia.
Actualmente, los grandes proyectos de software se dividen en partes, dentro de un equipo de desarrollo. Aquellas partes que son más "burocráticas" o "de gestión" con los recursos del sistema, se suelen realizar en lenguajes de tipo dinámico o de guión (script), mientras que aquellas partes "críticas", por su necesidad de rapidez de ejecución, se realizan en un lenguaje de tipo compilado, como C o C++. Si, después de hacer la división, las partes críticas no superan un cierto porcentaje del total (aproximadamente el 10%) entonces todo el desarrollo se realiza con lenguajes dinámicos. Si la parte crítica no llega a cumplir las expectativas del proyecto, se comparan las alternativas de una inversión en nuevo hardware frente a invertir en el coste de un programador para que reescriba dicha parte crítica.