# data[].attributes.body
Un computador es una máquina programable para el procesado de información. Para que la información sea entendida por el ordenador debe de estar debidamente codificada. La codificación se realiza en BITs (Binary digiT).

# data[].attributes.body
El procesador es el cerebro del sistema, justamente procesa todo lo que ocurre en la PC y ejecuta todas las acciones que existen. Cuanto más rápido sea el procesador que tiene una computadora, más rápidamente se ejecutarán las órdenes que se le den a la máquina. Este componente es parte del hardware de muchos dispositivos, no solo de tu computadora.

# data[].attributes.attachment_link.readable_text
Te explicamos qué es un procesador y de qué se compone. Además, cómo funcionan los procesadores y cuáles son sus etapas.

¿Qué es procesador?

El procesador es el cerebro del sistema, justamente procesa todo lo que ocurre en la PC y ejecuta todas las acciones que existen. Cuanto más rápido sea el procesador que tiene una computadora, más rápidamente se ejecutarán las órdenes que se le den a la máquina. Este componente es parte del hardware de muchos dispositivos, no solo de tu computadora.

El procesador es una pastilla de silicio que va colocada en el socket sobre la placa madre dentro del gabinete de la computadora de escritorio, la diferencia en una portátil es que está directamente soldado. El procesador está cubierto de algo que llamamos encapsulado, y de lo cual existen 3 tipos: PGA, LGA y BGA.

El procesador es uno de los componentes de la computadora que más ha evolucionado, dado a que se les exige a los ingenieros que cada vez ofrezcan mejores procesadores para que las computadoras funcionen más rápidas y de forma más eficaz. Su evolución no ha sido solo interna, sino que también su forma externa fue modificada. Los fabricantes de procesadores de PC más populares son Intel y AMD.

Este componente es el más importante podríamos decir, y generalmente el más caro, pero sin el resto de los componentes no podría servir ni actuar.

Ver además: CPU

Componentes de un procesador

Un procesador está compuesto de:

Núcleos

Controlador de memoria

Tarjeta gráfica

Otros elementos auxiliares

Funcionamiento de un procesador

El funcionamiento del procesador está determinado por un reloj que sincroniza todos los bloques funcionales y se encarga de que todo marche como debe ser o está programado para ser.

El funcionamiento tiene etapas:

Leer la instrucción de la memoria

Buscar los datos

Realizar la operación

Pasar a la siguiente instrucción

# data[].attributes.attachment_link.title
Procesador - Concepto, componentes y funcionamiento

# data[].attributes.attachment_link.description
Procesador ✓ Te explicamos qué es un procesador y de qué se compone. Además, cómo funcionan los procesadores y cuáles son sus etapas...

# data[].attributes.body
La memoria de computadora o la memoria de acceso aleatorio (RAM) es su almacenamiento de datos a corto plazo del sistema. Almacena la información que usa de forma activa su computadora para que que pueda acceder a ella de manera rápida. Cuanto más programas ejecute su sistema, más memoria necesitará.
RAM le permite que su computadora desempeñe muchas tareas diarias como cargar aplicaciones, buscar en Internet, editar una hoja de datos o experimentar un juego más reciente. La memoria también le permite intercambiar rápidamente entre estas tareas. Recuerda dónde está en una tarea cuando intercambia con otra tarea. Como regla, cuanto más memoria tenga, mejor.

# data[].attributes.body
Una entrada es, en el campo de la informática, una serie de datos que es recibida por un determinado sistema para su posterior procesamiento. Este concepto siempre aparece vinculado con la salida, que supone la presentación de la información para que el usuario haga uso de ésta según lo necesite.

# data[].attributes.body
En informática, se conoce como dispositivos de salida (output) a aquellos aparatos que permiten la extracción o recuperación de información proveniente de una computadora o sistema informático. Por ejemplo: el monitor, los parlantes o la impresora.

# data[].attributes.body
La arquitectura de von Neumann es una familia de arquitecturas de computadoras que utilizan el mismo dispositivo de almacenamiento tanto para las instrucciones como para los datos (a diferencia de la arquitectura Harvard).

La mayoría de computadoras modernas están basadas en esta arquitectura, aunque pueden incluir otros dispositivos adicionales, (por ejemplo, para gestionar las interrupciones de dispositivos externos como ratón, teclado, etc).

# data[].attributes.attachment_link.readable_text
¿No está seguro exactamente de para qué sirve y cómo funciona la memoria de la computadora? Descubra a continuación por qué la memoria de la computadora es necesaria para ejecutar su computadora y qué hace.

¿Qué es la memoria de la computadora (RAM)?

La memoria de computadora o la memoria de acceso aleatorio (RAM) es su almacenamiento de datos a corto plazo del sistema. Almacena la información que usa de forma activa su computadora para que que pueda acceder a ella de manera rápida. Cuanto más programas ejecute su sistema, más memoria necesitará.

¿Para qué se usa la RAM?

RAM le permite que su computadora desempeñe muchas tareas diarias como cargar aplicaciones, buscar en Internet, editar una hoja de datos o experimentar un juego más reciente. La memoria también le permite intercambiar rápidamente entre estas tareas. Recuerda dónde está en una tarea cuando intercambia con otra tarea. Como regla, cuanto más memoria tenga, mejor.

Cuando enciende su computadora y abre la hoja de datos para editarla, pero primero revisa su correo electrónico, tendrá la memoria usada de numerosas maneras diferentes. La memoria se usa para cargar y ejecutar las aplicaciones, como los programas de hojas de datos, responder los comandos, como cualquier edición que tenga en las hojas de datos o alternar entre múltiples programas como cuando deja la hoja de datos para revisar el correo electrónico. La memoria es casi siempre activamente usada por su computadora.

En un sentido, la memoria es como su escritorio. Le permite trabajar en numerosos proyectos y, cuanto más grande sea su escritorio, más papeles, carpetas y tareas tendrá de una vez. Puede rápida y fácilmente acceder a la información sin ir a un archivador (su unidad de almacenamiento). Cuando haya terminado con un proyecto o culminado las tareas del día, puede archivar algunos o todos los proyectos para mantener la seguridad. Su unidad de almacenamiento (unidad de disco duro o unidad de estado sólido) es el archivador que funciona con su escritorio para supervisar sus proyectos.

Si su sistema se ralentiza o no tiene capacidad de respuesta, una actualización de memoria es la manera más fácil y rentable de mejorar el desempeño. ¿Piensa que su computadora se beneficiaría de obtener más memoria? Obtenga más información sobre los signos que demuestran la necesidad de más memoria.

# data[].attributes.attachment_link.description
¿No está seguro exactamente de para qué sirve y cómo funciona la memoria de la computadora? Descubra a continuación por qué la memoria de la computadora es necesaria para ejecutar su computadora y qué hace. ¿Qué es la memoria de la computadora (RAM)?

# data[].attributes.attachment_link.readable_text
Te explicamos qué es un dispositivo de salida en informática y para qué sirve. Además, ejemplos de este tipo de dispositivos y las diferencias con los dispositivos de entrada.

El monitor de una computadora es el dispositivo de salida por excelencia.

Índice temático

1. ¿Qué son los dispositivos de salida?

2. Características de los dispositivos de salida

3. Ejemplos de dispositivos de salida

4. Dispositivos de entrada y de entrada/salida

¿Qué son los dispositivos de salida?

En informática, se conoce como dispositivos de salida (output) a aquellos aparatos que permiten la extracción o recuperación de información proveniente de una computadora o sistema informático. Por ejemplo: el monitor, los parlantes o la impresora.

Los dispositivos de salida son también llamados periféricos de salida y traducen la información de una computadora a formatos visuales, sonoros, impresos o de cualquier otra naturaleza, que puedan ser comprendidos por el usuario.

Existen diferentes dispositivos de salida que varían de acuerdo a su función y al tipo de información que procesan. Se diferencian de los dispositivos de entrada, que son aquellos periféricos que permiten ingresar información al sistema, por ejemplo: el mouse o el teclado. Ambos tipos de dispositivos son fundamentales para que el usuario pueda hacer uso de la computadora.

En algunos casos, los dispositivos de salida son dispositivos de entrada/ salida, porque, además de extraer información, pueden introducirla. Estos dispositivos son llamados “mixtos” y algunos ejemplos son las impresoras multifunción y los monitores táctiles.

Ver además: Dispositivos de entrada

Algunas características de los dispositivos de salida son:

Forman parte del hardware de la computadora.

Reproducen o replican la información proveniente de la computadora, en formatos como audio, imagen, texto y gráficos.

Son imprescindibles para que el usuario pueda hacer uso de la computadora.

Se conectan a la computadora de forma inalámbrica o por medio de un cable (en el caso de las computadoras portátiles, muchos de los dispositivos de salida vienen incorporados).

Son fáciles de usar por el usuario y se van actualizando de acuerdo a los desarrollos tecnológicos.

Ejemplos de dispositivos de salida

Algunos ejemplos de dispositivos de salida son:

Monitor. Es un dispositivo de salida que convierte las señales digitales del sistema en información visual, de manera que pueda ser percibida y comprendida por el usuario. Existen diferentes tipos de monitores, que varían de acuerdo a su tamaño o calidad visual. Los monitores con pantalla táctil son un ejemplo de dispositivo de entrada/salida, porque muestran la información al usuario en una pantalla que puede ser presionada para ejecutar acciones.

Impresora. Es un dispositivo que convierte en un documento impreso y tangible el contenido digital de la computadora. Por lo general, las impresiones se realizan sobre papel mediante sistemas de inyección de tinta o de láser.

Parlante. Es un dispositivo que extrae la información del sistema y la traduce a señales sonoras que pueden ser captadas por los usuarios.

Auriculares. Son dispositivos que reproducen el sonido que proviene de la computadora, que puede ser cualquier tipo de archivo de audio. Son periféricos de tamaño pequeño (se ponen en la oreja del usuario) que se conectan a la computadora de forma inalámbrica o a través de un cable.

Video Beams o proyectores. Son dispositivos que reciben información del sistema computarizado y la representan gráficamente (de forma similar a los monitores). En lugar de emitir en una pantalla, los proyectores proyectan la información como haces de luz y en superficies más grandes, como paredes.

Dispositivos de entrada y de entrada/salida

Los dispositivos de salida son, junto con los de entrada, los periféricos que permiten la interacción entre la computadora y el medio externo. Mientras los dispositivos de salida permiten la salida de la información, los dispositivos de entrada son aquellos que permiten introducir información y datos al sistema.

Los periféricos de este tipo traducen la información del usuario en datos comprensibles para la computadora. Algunos ejemplos de dispositivos de entrada son: el teclado, el micrófono y el mouse.

Además, existen unos pocos dispositivos que pueden funcionar tanto como dispositivos de entrada como de salida (por que reciben y envían información). Tal es el caso de los módems, las impresoras multifunción y los monitores táctiles.

Más en: Dispositivos de entrada y salida

# data[].attributes.attachment_link.title
Dispositivos de Salida - Concepto y características

# data[].attributes.attachment_link.description
Dispositivos de salida ✓ Te explicamos qué es un dispositivo de salida en informática y para qué sirve. Además, ejemplos de este tipo de dispositivos.

# data[].attributes.attachment_link.readable_text
El matemático Alan Turing, quien había sido alertado de un problema de lógica matemática por las lecciones de Max Newman en la Universidad de Cambridge, escribió un artículo en 1936 titulado "On Computable Numbers, with an Application to the Entscheidungs problem", que fue publicado en los "Proceedings of the London Mathematical Society". En él describía una máquina hipotética que llamó "máquina computadora universal", y que ahora es conocida como la "Máquina de Turing". La máquina hipotética tenía un almacenamiento infinito (memoria en la terminología actual) que contenía tanto las instrucciones como los datos. El ingeniero alemán Konrad Zuse escribió de forma independiente sobre este concepto en 1936. Von Neumann conoció a Turing cuando ejercía de profesor sustituto en Cambridge en 1935 y también durante el año que Turing pasó en la Universidad de Princeton en 1936-37. Cuándo supo del artículo de 1936 de Turing no está claro.

Independientemente, J. Presper Eckert y John Mauchly, quienes estaban desarrollando el ENIAC en la Escuela Moore de Ingeniería Eléctrica en la Universidad de Pennsylvania, escribieron sobre el concepto de "programa almacenado" en diciembre de 1943. Mientras diseñaba una nueva máquina, EDVAC, Eckert escribió en enero de 1944 que se almacenarían datos y programas en un nuevo dispositivo de memoria direccionable, una línea de retardo de mercurio. Esta fue la primera vez que se propuso la construcción de un programa almacenado práctico. Por esas fechas, no tenían conocimiento del trabajo de Turing.

Von Neumann estaba involucrado en el Proyecto Manhattan en el Laboratorio Nacional Los Alamos, el cual requería ingentes cantidades de cálculos. Esto le condujo al proyecto ENIAC, en Verano de 1944. Allí se incorporó a los debates sobre el diseño de un ordenador con programas almacenados, el EDVAC. Como parte del grupo, se ofreció voluntario a escribir una descripción de él. El término "von Neumann architecture" surgió del primer artículo de von Neumann: "First Draft of a Report on the EDVAC", fechado el 30 de junio de 1945, el cual incluía ideas de Eckert y Mauchly. Estaba inconcluso cuando su compañero Herman Goldstine lo hizo circular con solo el nombre de von Neumann en él, para consternación de Eckert y Mauchly. El artículo fue leído por docenas de compañero de trabajo de von Neumann en América y Europa, e influenció la siguiente hornada de diseños de computadoras.

Posteriormente, Turing desarrolló un informe técnico detallado, "Proposed Electronic Calculator", describiendo el Motor de Computación Automático (Automatic Computing Engine, ACE). Presentó éste al Laboratorio Nacional de Física Británico el 19 de febrero de 1946. A pesar de que Turing sabía por su experiencia de guerra en el Parque Bletchley que su propuesta era factible, el secretismo mantenido durante muchas décadas acerca de los ordenadores Colossus le impidió manifestarlo. Varias implementaciones exitosas del diseño ACE fueron producidas.

Los trabajos de ambos, von Neumann y Turing, describían ordenadores de programas almacenados, pero al ser anterior el artículo de von Neumann, consiguió mayor circulación y repercusión, así que la arquitectura de computadoras que esbozó adquirió el nombre de "arquitectura von Neumann".

En 1945, el profesor Neumann que estaba trabajando en la escuela Moore de ingeniería de Filadelfia, donde el ENIAC había sido construido, emitió en nombre de un grupo de sus compañeros de trabajo un informe sobre el diseño lógico de los ordenadores digitales. El informe contenía una propuesta muy detallada para el diseño de la máquina que desde entonces se conoce como el EDVAC (electronic discrete variable automatic computer). Esta máquina ha sido recientemente completada en América, pero el informe de Von Neumman inspiró la construcción de la EDSAC (electronic delay-storage automatic calculator) en Cambridge.

En 1947, Burks, Goldstine y Von Neumann, publicaron un informe en el que describen el diseño de otro tipo de máquina (una máqina paralela en este momento) que debería ser muy rápida, capaz de hacer 20.000 operaciones por segundo. Señalaron que el problema persistente en la construcción de tal máquina estaba en el desarrollo de una memoria adecuada, todos los contenidos de los cuales fueron instantáneamente accesibles, y al principio se sugirió el uso de un tubo especial -llamado Selectron- que había sido inventado por los laboratorios de Princeton de la RCA. Estos tubos son caros y difíciles para fabricar, así Von Neumman decidió construir una máquina basada en la memoria de Williams. Esa máquina que se completó en junio de 1952 en Princeton se ha conocido como MANIAC I. El diseño de esta máquina que ha sido inspirado de una docena o más de máquinas que están actualmente en construcción en América.

Calculo automático en el laboratorio nacional de física. Uno de los equipos digitales más modernos que incorpora novedades y mejoras en la técnica de la computación electrónica ha sido demostrado en el laboratorio nacional de física, Teddington, donde ha sido diseñado y construido por un pequeño equipo de matemáticos e ingenieros electrónicos investigadores sobre el personal del laboratorio, asistido por ingenieros de producción de la compañía eléctrica inglesa. El equipo construido hasta ahora en el laboratorio es solo el modelo piloto de muchas instalaciones muy grandes que se va a conocer como el motor de cálculo automático, pero aunque es relativamente pequeño en volumen y contiene solo 800 válvulas termoiónicas, es una máquina de cálculo muy rápido y versátil. Los conceptos básicos y principios abstractos de la computación por una máquina fueron formuladas por el Dr A. M. Turing, pero el trabajo en dichas máquinas en el Reino Unido se retrasó por la guerra. En 1945, se hizo una revisión al problema en el laboratorio nacional de Física por el profesor J. R. Womersley. Se le adjuntó al Dr. Turing un pequeño equipo de especialistas, y en 1947 la planificación preliminaria era lo suficientemente avanzada para justificar el establecimiento del grupo especial ya mencionado. En abril de 1948, estos últimos se convirtieron en la sección de electrónica del laboratorio, bajo el cargo del Sr. F. M. Colebrook.

Descripción del concepto de programa almacenado

Los primeros computadores constaban de programas almacenados. Algunos muy simples siguen utilizando este diseño, por ejemplo, una calculadora es un computador que tiene un programa almacenado. Puede hacer operaciones matemáticas simples, pero no puede ser usada como procesador de textos o videoconsola.

Cambiar el programa que contenían los dispositivos que usaban esta tecnología requería reescribir, reestructurar y/o rediseñar el dispositivo. Los primeros computadores no estaban lo suficiente programados cuando fueron diseñados. La tarea de reprogramar, cuando era posible, era un proceso laborioso, empezando con notas en papel y siguiendo con detallados diseños de ingeniería. Y tras esto llegaba el a veces complicado proceso de reescritura y reestructuramiento físico del computador.

El concepto de programa almacenado cambió por completo, se pensó en un computador que en su diseño contenía un conjunto de instrucciones que podían ser almacenadas en memoria, o sea, un programa que detallaba la computación del mismo.

El diseño de un programa almacenado también daba la posibilidad a los programas de ser modificados ellos mismos durante su ejecución. Uno de los primeros motivos para su creación fue la necesidad de un programa que incrementara o modificara las direcciones de memoria de algunas instrucciones, las cuales tenían que ser hechas manualmente en los primeros diseños.

Esto se volvió menos importante cuando el índice de registros y el direccionamiento indirecto se convirtieron en algo habitual en la arquitectura de computadores. El código automodificable fue en gran parte ganando posiciones.

A gran escala, la habilidad de tratar instrucciones como datos es lo que hacen los ensambladores, compiladores y otras herramientas de programación automáticas. Se pueden "escribir programas para escribir programas".

Existen inconvenientes en el diseño de Von Neumann. Las modificaciones en los programas podía ser algo perjudicial, por accidente o por diseño. En algunos simples diseños de computador con programas almacenados, un mal funcionamiento del programa puede dañar el computador. Otros programas, o el sistema operativo, posiblemente puedan llevar a un daño total en el ordenador. La protección de la memoria y otras formas de control de acceso pueden ayudar a proteger en contra de modificaciones accidentales y/o maliciosas de programas.

Cuello de botella de Von Neumann (Von Neumann bottleneck)

El canal de transmisión de los datos entre CPU y memoria genera un cuello de botella para el rendimiento del procesador. En la mayoría de computadoras modernas, la velocidad de comunicación entre la memoria y la CPU es más baja que la velocidad a la que puede trabajar esta última, reduciendo el rendimiento del procesador y limitando seriamente la velocidad de proceso eficaz, sobre todo cuando se necesitan procesar grandes cantidades de datos. La CPU se ve forzada a esperar continuamente a que lleguen los datos necesarios desde o hacia la memoria.

La velocidad de procesamiento y la cantidad de memoria han aumentado mucho más rápidamente que el rendimiento de transferencia entre ellos, lo que ha agravado el problema del cuello de botella.

El término "cuello de botella de von Neumann" fue acuñado por John Backus en su conferencia de la concesión de 1977 ACM Turing. Según Backus:

Seguramente debe haber una manera menos primitiva de realizar grandes cambios en la memoria, que empujando tantas palabras hacia un lado y otro del cuello de botella de von Neumann. No sólo es un cuello de botella para el tráfico de datos, sino que, más importante, es un cuello de botella intelectual que nos ha mantenido atados al pensamiento de "una palabra a la vez" en vez de fomentarnos el pensar en unidades conceptuales mayores. Entonces la programación es básicamente la planificación del enorme tráfico de palabras que cruzan el cuello de botella de von Neumann, y gran parte de ese tráfico no concierne a los propios datos, sino a dónde encontrar éstos.2

El problema de funcionamiento se redujo introduciendo una memoria caché entre la CPU y la memoria principal, y mejorando los algoritmos del predictor de ramas. Está menos claro que el cuello de botella intelectual que Backus ha criticado haya cambiado mucho desde 1977. La solución propuesta de Backus no ha tenido una influencia importante. La programación funcional moderna y la programación orientada a objetos se preocupan mucho menos de "empujar tantas palabras hacia un lado y otro" que los anteriores lenguajes como era Fortran.

# data[].attributes.attachment_link.description
El matemático Alan Turing, quien había sido alertado de un problema de lógica matemática por las lecciones de Max Newman en la Universidad de Cambridge, escribió un artículo en 1936 titulado "On Computable Numbers, with an Application to the Entscheidungs problem", que fue publicado en los "Proceedings of the London Mathematical Society".

# data[].attributes.body
Es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema

# data[].attributes.body
Programa (Software en inglés) es una secuencia de instrucciones que una computadora puede interpretar y ejecutar.

El proceso de creación de software es materia de la ingeniería del software, una de las ramas propias de la Ingeniería Informática.

Según Niklaus Wirth un programa está formado por algoritmos y estructura de datos.

Se han propuesto diversas técnicas de programación, cuyo objetivo es mejorar tanto el proceso de creación de software como su mantenimiento. Entre ellas se pueden mencionar las programaciones lineal, estructurada, modular y orientada a objetos

# data[].attributes.body
Mayormente conocido como Código Fuente, definimos como Programa Fuente a un texto o conjunto de líneas de texto (líneas de código) que forman parte esencial de un programa informático, siendo entonces las instrucciones que debe seguir un ordenador para poder realizar la ejecución de una orden determinada.

En este Código se hace referencia entonces al funcionamiento general de una aplicación o una herramienta en particular, pero en un idioma que es comprensible por el Programador mediante la utilización de un Lenguaje de Programación determinado, que lleva sus propias reglas y excepciones.

# data[].attributes.body
-Es aquel programa que se encuentra en lenguaje máquina y que ya es ejecutable por esta.

-Es el resultado de traducir un programa fuente para obtener un lenguaje comprensible por la máquina.

# data[].attributes.body
Un lenguaje de programación es una forma de comunicarnos con una computadora, tablet o celular e indicarle qué queremos hacer.

Existen distintos tipos de lenguaje: principalmente de bajo nivel y de alto nivel. La diferencia se encuentra en lo cerca o lejos que estemos del hardware de nuestro equipo. Esta cercanía tiene que ver con el control que tengamos sobre el dispositivo, placa o controlador.

Encontramos diferentes lenguajes como C, C++, Java, PHP, Python, C#, ASP, entre otros.

# data[].attributes.body
Es un programa que traduce un lenguaje de alto nivel al lenguaje máquina. Un programa compilado indica que ha sido traducido y está listo para ser ejecutado. La ejecución de los programas compilados es más rápida que la de los interpretados, ya que el interprete debe traducir mientras está en la fase de ejecución (saca todos los errores). Un compilador es un programa que traduce el programa fuente (conjunto de instrucciones de un lenguaje de alto nivel, por ejemplo Basic o Pascal) a programa objeto (instrucciones en lenguaje máquina que la computadora puede interpretar y ejecutar).

# data[].attributes.body
Un intérprete es un programa informático que procesa el código fuente de un proyecto de software durante su tiempo de ejecución, es decir, mientras el software se está ejecutando, y actúa como una interfaz entre ese proyecto y el procesador. Un intérprete siempre procesa el código línea por línea, de modo que lee, analiza y prepara cada secuencia de forma consecutiva para el procesador. Este principio también se aplica a las secuencias recurrentes, que se ejecutan de nuevo cada vez que vuelven a aparecer en el código. Para procesar el código fuente del software, el intérprete recurre a sus propias bibliotecas internas: en cuanto una línea de código fuente se ha traducido a los correspondientes comandos legibles por máquina, esta se envía directamente al procesador.

# data[].attributes.body
LENGUAJE MÁQUINA: es el nivel más bajo, empleando códigos binarios (0s y 1s), para describir operaciones, datos y direcciones.

ENGUAJE ENSAMBLADOR: Lenguaje de bajo nivel que representa de forma sencilla las instrucciones de una determinada máquina. Es propio de cada procesador.

LENGUAJE DE ALTO NIVEL: Proporciona instrucciones que permiten realizar operaciones más complejas, y diseñar estructuras para resolver problemas.(C, java, php, etc.)

# data[].attributes.body
1GL: Código de máquina. Al principio solo se le enviaba codigo binario a la máquina. Pongamos en esta categoría también al Assembler como una mejora. 2GL: Se generan los primeros lenguajes que procesan el código y lo transforman en código ensamblador (1GL). Estos lenguajes aún no son estructurados (Fortran, Cobol, Basic). Es el comienzo. 3GL: Surgen los lenguajes estructurados (Algol, Pascal, C, ADA, Lisp, Prolog, Smalltalk). Son los lenguajes de alto nivel, mientras los anteriores eran interpretados, estos ya son compilados. 4GL: No hay mucha diferencia con la 3GL, mejoras de sintaxis y mayor herramienta, el objetivo es en este momento obtener una solución lo antes posible. Aqui podemos poner a Visual Basic, Visual C, C++, Java, Eiffel. No olvidemos dentro de esta categoría el SQL para acceder como lo hacemos hoy en día a una base de datos. 5GL: Aquí encuadraremos a la inteligencia artifical. Redes neuronales. Es un tema que está en investigación actualmente y en constante crecimiento. Esta categoría queda abierta.

# data[].attributes.body
Un paradigma de programación es una manera o estilo de programación de software. Existen diferentes formas de diseñar un lenguaje de programación y varios modos de trabajar para obtener los resultados que necesitan los programadores.

# data[].attributes.body
Una clasificación habitual de los lenguajes es considerar dos grupos según la forma de ejecución en un ordenador, intérpretes y compiladores, según se describe seguidamente.

# data[].attributes.body
Universidad de Panamá

Facultad de informática, electrónica y comunicación

Licenciatura en en informática con gestión empresarial y educativa

Programación I

Estudiante: Adalía Jassiret Pinto 8-910-1807

# data[].attributes.attachment_link.readable_text
Presentación de la Materia
Fundamentos de Programación es una asignatura básica que permite crear programas que exhiban un comportamiento deseado. El proceso de escribir código requiere frecuentemente conocimientos en varias áreas distintas, además del dominio del lenguaje a utilizar, algoritmos especializados y lógica formal.

Con esta materia el alumno aprenderá a escribir, a analizar, probar, depurar y dar mantenimiento al programa generado en un Lenguaje de Programación.

Se llama Programación a la implementación de un algoritmo en un determinado lenguaje de programación, para realizar un programa.

Algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema.

Programa (Software en inglés) es una secuencia de instrucciones que una computadora puede interpretar y ejecutar.

El proceso de creación de software es materia de la ingeniería del software, una de las ramas propias de la Ingeniería Informática.

Según Niklaus Wirth un programa está formado por algoritmos y estructura de datos.

Se han propuesto diversas técnicas de programación, cuyo objetivo es mejorar tanto el proceso de creación de software como su mantenimiento. Entre ellas se pueden mencionar las programaciones lineal, estructurada, modular y orientada a objetos

Software Utilizado para la Materia

Se usara un Programa para ejecución de Pseudocódigos el cual se puede bajar de:

http://pseint.uptodown.com/

Adicionalmente el CodeBlocks se puede bajar de la siguiente dirección:

http://www.codeblocks.org/downloads
Definición formal de Algoritmo
En general, no existe ningún consenso definitivo en cuanto a la definición formal de algoritmo.

Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten los datos de un problema (entrada) en una solución (salida). Sin embargo cabe notar que algunos algoritmos no necesariamente tienen que terminar o resolver un problema en particular.

Por ejemplo, una versión modificada de la premisa de Eratóstenes" que nunca termine de calcular números primos no deja de ser un algoritmo.

A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos matemáticos como máquinas de Turing entre otros Sin embargo, estos modelos están sujetos a un tipo particular de datos como son números, símbolos o gráficas mientras que, en general, los algoritmos funcionan sobre una vasta cantidad de estructuras de datos. En general, la parte común en todas las definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos paralelos:

. Un algoritmo funciona en tiempo discretizado -paso a paso-, definiendo así una secuencia de estados " Tiempo secuencial computacionales" por cada entrada válida (la entrada son los datos que se le suministran al algoritmo antes de comenzar).

Estado abstracto . Cada estado computacional puede ser descrito formalmente utilizando una Estructura de primer orden y cada algoritmo es independiente de su implementación (los algoritmos son objetos abstractos) de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo.

Exploración acotada . La transición de un estado al siguiente queda completamente determinada por una descripción fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de términos del estado actual.

Aritmetizabilidad . Solamente operaciones innegablemente calculables están disponibles en el paso inicial.
Medios de expresión de un algoritmo
La descripción de un algoritmo usualmente se hace en tres niveles:

También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de complejidad o ambos.

Representación de Algoritmos

Diagrama de flujo

La instrucción Si ... Entonces permite controlar qué procesos tienen lugar en función del valor de una o varias variables o de las decisiones del usuario. Escribiremos esta instrucción de la siguiente manera:

Se podrán introducir instrucciones a realizarse en caso de no cumplirse la condición:

Nótese que el uso de sangrías permite identificar el bloque de sentencias a ejecutar. Gráficamente:

INSTRUCCIÓN SI - ENTONCES

INSTRUCCIÓN SI - ENTONCES - SINO

Recordemos que para expresar condiciones disponemos de símbolos matemáticos como =, >, <, etc. así como de los operadores y (and) y ó (or).

EJEMPLO

La instrucción Si ... Entonces es anidable dentro de sí misma. Esto significa que puede haber un bloque Si ... Entonces dentro de otro. Se hace más necesario que nunca el sangrado para que el pseudocódigo sea legible. Ha de verificarse que todo Si se cierra con un FinSi

Los anidamientos se pueden convertir en triples, cuádruples, quíntuples, etc. lo cual convierte en farragosa la lectura y seguimiento del pseudocódigo. Habrá que tratar de evitar excesos usando otros recursos, desviando a módulos independientes, etc.

Cuando sea necesario por la complejidad en la toma de decisiones, se recurrirá a una tabla de decisión como paso previo a la confección del pseudocódigo o diagrama de flujo.

Una instrucción de control condicional es un bloque de código que se ejecuta si cumple una condición, que nosotros pongamos. Esta condición es una expresión lógica que debe dar como resultado true o false, para ello es habitual usar los operadores relacionales y lógicos.

Las dos mas utilizadas son:

Condicional simple: si la condición es verdadera se ejecuta el bloque de código que contenga y ya esta. Su sintaxis es:

SI (condición) Entonces
Instrucciones
Fin-Si

Por ejemplo:

Escribir numero1 " es mayor que 0"

Condicional doble: si la condición es verdadera se ejecuta el bloque de código que contenga y sino se cumple pues ejecuta otro bloque de codigo. Ejecuta uno o otro. Su sintaxis es:

SI (condición) Entonces
Instrucciones
Sino
Instrucciones
Fin-Si

Escribir numero1 " es mayor que 0"

Escribir numero1 " es menor que 0"

Algo que se suele hacer es anidar estructuras Si, se puede usar para especificar aun mas una condición Debemos recordar que debemos cerrar las estructuras Si que abramos, es recomendable tabular las instrucciones para mayor legibilidad. Veamos un ejemplo:

También existe otra instrucción de control condicional, llamado segun sea, que según un valor (de una variable, una constante, etc.) o expresión hace una operación u otra. No puede ser una condición. Su sintaxis es:

Segun (valor o expresion) hacer

valor1:
Instrucciones
valor2:
Instrucciones

....
FinSegun
Por ejemplo:

Múltiples (En caso de):

Las estructuras de comparación múltiples, es una toma de decisión especializada que permiten evaluar una variable con distintos posibles resultados, ejecutando para cada caso una serie de instrucciones especificas. La forma es la siguiente:

Pseudocódigo:

Diagrama de flujo:

Veamos algunos ejemplos donde se aplique todo lo anterior:

Se pide leer tres notas del alumno, calcular su definitiva en un rango de 0-5 y enviar un mensaje donde diga si el alumno aprobó o reprobó el curso. Exprese el algoritmo usando Pseudocódigo y diagrama de flujos.

Def ß (Not1 + Not2 + Not3) /3

Escriba "Reprobó el curso"

Escriba "Aprobó el curso"

Se desea escribir un algoritmo que pida la altura de una persona, si la altura es menor o igual a 150 cm envíe el mensaje: "Persona de altura baja"; si la altura está entre 151 y 170 escriba el mensaje: "Persona de altura media" y si la altura es mayor al 171 escriba el mensaje: "Persona alta". Exprese el algoritmo usando Pseudocódigo y diagrama de flujos.

ESCRIBA "Cuál es tu altura? "

ESCRIBA "persona de altura baja"

ESCRIBA "persona de altura media"

Diagrama de flujo:

Dado un numero entre 1 y 7 escriba su correspondiente día de la semana así:

1- Lunes 2- Martes 3- Miércoles 4- Jueves 5- Viernes 6- Sábado 7- Domingo

Exprese el algoritmo usando Pseudocódigo y diagrama de flujos.

Pseudocódigo: Pseudocódigo:

ESCRIBA "Diga un número para escribir su día"

Caso 3: ESCRIBA "Miércoles"

Caso 5: ESCRIBA "Viernes"

Caso 7: ESCRIBA "Domingo"

SINO: ESCRIBA "Escribió un numero fuera del rango 1-7"

Estructuras Repetitivas

Es imprescindible que se establezcan mecanismos para controlar esta tarea repetitiva, ya que si éstos no existen, el bucle puede convertirse en un proceso infinito. Así, en el bucle representado por el organigrama de la Figura , se observa que las instrucciones incluidas en él se repiten indefinidamente. El mecanismo de control citado se establece mediante una condición que se comprueba en cada paso o iteración del bucle.

Los procesos que se repiten varias veces en un programa necesitan en muchas ocasiones contar el numero de repeticiones habidas. Una forma de hacerlo es utilizar una variable llamada contador, cuyo valor se incrementa o decrementa en una cantidad constante en cada repetición que se produzca.

La Figura siguiente presenta un diagrama de flujo para un algoritmo en el que se desea repetir 50 veces un grupo de instrucciones, que llamaremos cuerpo del bucle, donde el contador se representa con la variable CONT. La instrucción que actualiza al contador es la asignación:

El contador puede ser positivo (incrementos de uno en uno) o negativo (decrementos de uno en uno).

En la Figura, el contador cuenta desde 1 a 50 y deja de repetirse cuando la variable CONT toma el valor 51 y termina el bucle.

En la Figura siguiente se muestra un algoritmo que efectúa la operación de multiplicación n x m, sumando m un número n de veces. En él, el contador se decrementa: comienzaa contar en n y se va decrementando hasta llegar a cero; en ese momento se termina el bucle y se realiza la acción escribir.

Otro tipo de variable, normalmente asociada al funcionamiento de un bucle es un acumulador o totalizador, cuya misión es almacenar una cantidad variable, resultante de operaciones sucesivas y repetidas. Un acumulador realiza una función parecida a la de un contador, con la diferencia de que el incremento o decremento, de cada operación es variable en lugar de constante.

- decisión (para finalizar la repetición)

- cuerpo del bucle (conjunto de instrucciones que se repiten)

Tomando el caso anterior, donde para obtener la suma de una serie de números, hemos utilizado la estrategia siguiente: tras leer cada número lo añadimos a una variable SUMA que contenga las sucesivas sumas parciales (SUMA se hace igual a cero al inicio).

Observemos que el algoritmo correspondiente deberá utilizar sucesivamente instrucciones tales como:

leer número

si N < 0 entonces

si-no

fin-si

que se pueden repetir muchas veces; éstas constituyen el cuerpo del bucle.

Una vez se ha decidido el cuerpo del bucle, se plantea la cuestión de cuántas veces se debe repetir. De hecho conocemos ya la necesidad de contar con una condición para detener el bucle. En el Ejemplo 8, se pide al usuario el número N de números que desea sumar, esto es, el número de iteraciones del bucle.

Ejemplo :

Hallar la suma de N números, a través de una estructura repetitiva

algoritmo suma_números

{leer número total de números a sumar en variable N}

{comienzo de bucle}

mientras que TOTAL > 0 hacer

leer número

fin_mientras

{fin del bucle}

escribir "la suma de los" , N , "números es " , SUMA

ESTRUCTURA DESDE-HASTA

Esta estructura consiste en que la condición de salida se basa en un contador que cuenta el número de iteraciones. Por ejemplo, el ejemplo 8 podría hacerse de la siguiente manera:

desde i = 1 hasta N con_incremento 1 hacer

fin_desde

donde i es un contador que cuenta desde un valor inicial (1) hasta el valor final (N) con los incrementos que se consideren (de uno en uno en este caso). Esta es la llamada estructura Desde ("for"), que es la más simple desde el punto de vista de la condición de salida, ya que viene predeterminada por el código. Su utilidad reside en el hecho de que, en muchas ocasiones, se conoce de antemano el número de iteraciones. Esta estructura ejecuta las acciones del cuerpo del bucle, un número especificado de veces y de modo automático controla el número de iteraciones. Su formato en pseudocódigo es:

desde v=vi hasta vf hacer

.

fin_desde

v: variable índice

vi, vf: valores inicial y final de la variable

desde v = vi hasta vf inc incremento hacer

.en lugar deinc incremento

fin_desde

Obviamente, si el valor inicial de la variable índice es menor que el valor final, los incrementos deben ser positivos, ya que en caso contrario la secuencia de acciones no se ejecutaría. De igual modo si el valor inicial es mayor que el valor final, el incremento debe ser en este caso negativo. Así:

desde I=20 hasta 10 hacer

<acciones>

fin_desde

for(v=vi; v<=vf; vt+=step)

<accion o bloque de acciones >

for(inicio;condición;actualización)

<accion o bloque de acciones >

ESTRUCTURA MIENTRAS

verdadera, entonces se ejecuta el cuerpo del bucle. No todos los lenguajes incluyen

la estructura mientras.

En lenguaje C:

Cuando la condición de salida del bucle se realiza al principio del mismo, éste se ejecuta mientras se verifica una cierta condición. Es la llamada estructura repetitivamientras ("while"); en ella el cuerpo del bucle se repite mientras se cumple una determinada condición. Su pseudocódigo es:

mientras condición hacer

<acciones>

fin_mientras

Cuando se ejecuta la instrucción mientras, la primera cosa que sucede es la evaluación de la condición. Si es falsa, no se ejecuta ninguna acción y el programa prosigue en la siguiente instrucción a la finalización del bucle; si la condición es

while (condicion)

<accion>

Obsérvese que en una estructura mientras si la primera evaluación de la condición esfalsa, el cuerpo del bucle nunca se ejecuta. Puede parecer inútil ejecutar el cuerpo del bucle cero veces, ya que no tendrá efecto en ningún valor o salida; sin embargo, puede ser una acción deseada. Por ejemplo el siguiente bucle para procesar las notas de unos examenes contando el número de alumnos presentados dejará de ejecutarse cuando el numero leído sea negativo. Si la primera nota introducida fuera negativa, la acción deseada es, efectivamente, que no se ejecute el bucle ninguna vez.

leer nota

mientras nota = 0 hacer

{procesar nota}

leer nota

fin_mientras

ESTRUCTURA REPETIR-HASTA_QUE

En esta estructura la condición de salida se sitúa al final del bucle; el bucle se ejecuta hasta que se verifique una cierta condición. Es la llamada estructura Repetir-hasta ("repeat-until"). Existen muchas situaciones en las que se desea que un bucle se ejecute al menos una vez, antes de comprobar la condición de repetición. Para ello la estructura repetir-hasta_que se ejecuta hasta que se cumpla una condición determinada que se comprueba al final del bucle. En pseudocódigo se escribe:

repetir

hasta_que <condición>

do

<accion o bloque>

while (condicion);

(en C se "dice" mientras se cumpla la condición, no hasta que se cumpla)

El bucle repetir-hasta_que se repite mientras la condición sea falsa, justo lo opuesto a la estructura mientras. Sea el siguiente algoritmo:

inicio

fin

Este bucle se repite hasta que el valor de variable contador exceda a 30, lo que sucederá después de 30 ejecuciones del mismo. Nótese que si en vez de 30 pusiéramos 0, el cuerpo del bucle se ejecutará siempre al menos una vez.

Ejemplo :

Calcular el factorial de un número N, usando la estructura repetir.

inicio

repetir

hasta_que I > N

fin

Las tres estructuras repetitivas son susceptibles de intercambio entre ellas, así por ejemplo es posible, sustituir una estructura desde, por una mientras; con incrementos positivos o negativos de la variable índice. En efecto, la estructura desde con incremento positivo es equivalente a la estructura mientras marcada con la A), y la estructura desde con incremento negativo es equivalente a la estructuramientras marcada con la B).

v ß vi v ß vi

<acciones> <acciones>

v ß v + incremento v ß v - decremento

Ejemplo 10:

Calcular los factoriales de n números leídos por el teclado.

El problema consiste en realizar una primera estructura repetitiva de n iteraciones del algoritmo de cálculo del factorial, que a su vez se efectúa con una segunda estructura repetitiva.

inicio

desde i = 1 hasta n hacer

leer NUMERO

FACTORIAL ß 1

desde j = 1 hasta NUMERO hacer

fin_desde

escribir "el factorial del número", NUMERO, "es", FACTORIAL

fin_desde

fin

Son la representación gráfica de la solución algorítmica de un problema. Para diseñarlos se utilizan determinados símbolos o figuras que representan una acción dentro del procedimiento. Utilizan unos símbolos normalizados, con los pasos del algoritmo escritos en el símbolo adecuado y los símbolos unidos con flechas, denominadas líneas de flujo, que indican el orden en que los pasos deben ser ejecutados.

La Figura de Diagramas de Flujo que expresa un algoritmo para calcular la raíz cuadrada de un número

Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados con flechas para indicar la secuencia de instrucciones y están regidos por ISO .

Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan mucho espacio y su construcción es laboriosa. Por su facilidad de lectura son usados como introducción a los algoritmos, descripción de un lenguaje y descripción de procesos a personas ajenas a la computación.

Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas.

El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico.

Los diagramas de flujo sirven para representar algoritmos de manera gráfica.

En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, algoritmia. dixit algorithmus y este a su vez del matemático persa Al-Juarismi ) es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de estudio de la

En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos en matemática son el algoritmo de la división para calcular el cociente de dos números, el Algoritmo de Euclides para obtener el Máximo Común Divisor de dos enteros positivos, o el Método de Gauss para resolver un Sistema Lineal de Ecuaciones.

Para su elaboración se siguen ciertas reglas:

Se escribe de arriba hacia abajo y de izquierda a derecha

Siempre se usan flechas verticales u horizontales, jamás curvas

En cada paso expresar una acción concreta

VENTAJAS DE USAR FLUJOGRAMAS

Rápida comprensión de las relaciones

DESVENTAJAS DE LOS FLUJOGRAMAS
Implementación

Acciones a seguir tras la salida de un símbolo de decisión, pueden ser difíciles de seguir si existen diferentes caminos

Variables

No existen normas fijas para la elaboración de los diagramas de flujo que permitan incluir todos los detalles que el usuario desee introducir.

Representando el ejemplo como flujograma tenemos:

Secuencia de flujo normal en una solución de problema

Una lectura o entrada de datos

Una salida de información

Simbología para diseñar flujogramas.

La teoría de autómatas y la teoría de funciones recursivas proveen modelos matemáticos que formalizan el concepto de algoritmo.

Los modelos más comunes son la máquina de Turing , máquina de registro y funciones u-recursivas . Estos modelos son tan precisos como un lenguaje de máquina , careciendo de expresiones coloquiales o ambigüedad, sin embargo se mantienen independientes de cualquier computadora y de cualquier implementación

Muchos algoritmos son ideados para implementarse en un programa . Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal , un circuito eléctrico o un aparato mecánico y eléctrico. Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel. El algortitmo de multiplicación tradicional, elalgoritmo de Euclides , la criba de Erástones y muchas formas de resolver la raíz cuadrada son sólo algunos ejemplos.

Son elementos que toman valores específicos de un tipo de datos concreto. La declaración de una variable puede realizarse comenzando con var. Principalmente, existen dos maneras de otorgar valores iniciales a variables:

1. Mediante una sentencia de asignación.

2. Mediante un procedimiento de entrada de datos (por ejemplo: 'read').

Ejemplo:
Estructuras secuenciales
...

i:=1;

read(n);

while i < n do begin

(* cuerpo del bucle *)

i := i + 1

end;

...

La estructura secuencial es aquella en la que una acción sigue a otra en secuencia. Las operaciones se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. La asignación de esto consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona será reconocida con el nombre de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma:

1. Simples : Consiste en pasar un valor constante a una variable (a ← 15)

2. Contador : Consiste en usarla como un verificador del número de veces que se realiza un proceso (a ← a + 1)

3. Acumulador : Consiste en usarla como un sumador en un proceso (a ← a + b)

4. De trabajo : Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a ← c + b*2/4).

Un ejemplo de estructura secuencial, Codificado en C++, como obtener la área de un triángulo:

Inicio

...

float b, h, a;

printf("Diga la base");

scanf("%f", &b);

printf("Diga la altura");

scanf("%f", &h);

a = (b*h)/2;

printf("El área del triángulo es %f", a)

...

Fin

INSTRUCCIONES SI ... ENTONCES SI Y SI ... ENTONCES - SINO

Hay distintos métodos de representar los algoritmos como:
o Texto: Se usa el lenguaje común para describir el algoritmo

o Pseudocódigo: este tipo de representación mezcla el lenguaje de programación con un idioma, ya sea español, ingles o cualquier otro, se puede definir como un lenguaje de especificación de algoritmos. Es la representación narrativa de los pasos que debe de seguir un algoritmo. Este método es mas compacto, mas fácil de escribir y mas fácil de transcribir a un lenguaje de programación que el diagrama de flujo.

o Diagrama de flujo: son herramientas graficas para representar algoritmos. esta compuesto por símbolos, como: rectángulos rombos, cuadrados, etc., unidos por flechas, estos símbolos representan acciones y orden en como se realizan estas. Es decir, los diagramas de flujo son diagramas que emplean símbolos gráficos para representar algoritmos.

o Diagrama de Nassi-Schneiderman: También conocido como diagrama de Chapín, es un método se representación de algoritmos que combina la descripción textual con la descripción grafica, es como una combinación del Pseudocódigo con el diagrama de flujo. Por lo general todo lo que se puede representar en un diagrama de flujo se puede representar en este tipo de diagrama. Este tipo de representación cuenta con un conjunto limitado de símbolos para representar los pasos del algoritmo

El diagrama Nassi-Shneiderman refleja la descomposición del problema en una forma simple usando cajas anidadas para representar cada uno de los sub-problemas. Ejemplos:

o Nivel de implementación: consiste en expresar un algoritmo mediante una maquinaria, un programa de computadora o algún objeto que realice las acciones planteadas por el algoritmo en cuestión. En general, la implementación es el objetivo de diseñar un algoritmo (pero no siempre).
Descripción Narrada
Este algoritmo es caracterizado porque sigue un proceso de ejecución común y lógico, describiendo textualmente paso a paso cada una de las actividades a realizar dentro de una actividad determinada.

Ejemplo 1 Algoritmo para asistir a clases:

1. Levantarse

2. Bañarse

3. Vestirse

4. Desayunar

5. Cepillarse los dientes

6. Salir de casa

7. Tomar el autobús

8. Llegar a la ESPE

9. Buscar el aula

10. Ubicarse en un asiento

El pseudocódigo ( falso lenguaje, el prefijo pseudosignifica falso) es una descripción de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con algunas convenciones sintácticas propias de lenguajes de programación, como asignaciones, ciclos y condicionales, aunque no está regido por ningún estándar. Es utilizado para describir algoritmos en libros y publicaciones científicas, y como producto intermedio durante el desarrollo de un algoritmo, como los Diagramas de flujo , aunque presentan una ventaja importante sobre estos, y es que los algoritmos descritos en pseudocódigo requieren menos espacio para representar instrucciones complejas.

El pseudocódigo está pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios en una implementación. Programadores diferentes suelen utilizar convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes de programación concretos. Sin embargo, el pseudocódigo, en general, es comprensible sin necesidad de conocer o utilizar un entorno de programación específico, y es a la vez suficientemente estructurado para que su implementación se pueda hacer directamente a partir de él.

Así el pseudodocódigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos son los lenguajes para la programación. Busque fuentes más precisas para tener mayor comprensión del tema.

Ejemplo 1

Diseñar un algoritmo que lea cuatro variables y calcule e imprima su producto, suma y media aritmética.

inicio

leer (a, b, c, d)

producto <-- (a * b * c * d)

suma <-- (a + b + c + d)

media <-- (a + b + c + d) / 4

escribir (producto, suma, media)

fin

Diagramas N-S

Son herramientas que favorece la programación estructurada y reúne características gráficas propias de diagramas de flujo y lingüísticas propias de pseudocódigos. Constan de una serie de cajas contiguas que se leerán siempre de arriba-abajo y sus estructuras lógicas son las siguientes:

Estructura Secuencial

# data[].attributes.attachment_link.description
Presentación de la Materia Fundamentos de Programación es una asignatura básica que permite crear programas que exhiban un comportamiento deseado. El proceso de escribir código requiere frecuentemente conocimientos en varias áreas distintas, además del dominio del lenguaje a utilizar, algoritmos especializados y lógica formal.

# data[].attributes.attachment_link.readable_text
Mayormente conocido como Código Fuente, definimos como Programa Fuente a un texto o conjunto de líneas de texto (líneas de código) que forman parte esencial de un programa informático, siendo entonces las instrucciones que debe seguir un ordenador para poder realizar la ejecución de una orden determinada.

En este Código se hace referencia entonces al funcionamiento general de una aplicación o una herramienta en particular, pero en un idioma que es comprensible por el Programador mediante la utilización de un Lenguaje de Programación determinado, que lleva sus propias reglas y excepciones.

Es por ello que se define al Código Fuente como todo lo contrario al Código Objeto, que es justamente este último el responsable de que el ordenador pueda interpretar las acciones que se ordenan y los comandos que han sido prefijados en este código, para poder ser ejecutados, interpretados y retransmitidos por los componentes físicos de un ordenador (es decir, los Dispositivos de Hardware)

Para poder realizar esta interpretación es necesario contar con sistemas de traducción que son conocidos bajo los nombres de Compiladores, Intérpretes o Ensambladores, entre otros sistemas de traducción, que son los encargados de llevar estos lenguajes hacia un Sistema Binario de ceros y unos (es decir, transmisión o no-transmisión de la energía eléctrica a través de los dispositivos electrónicos)

Actualmente también es considerado como Código Fuente al lenguaje en el que está escrito un sitio web o alguna de sus Herramientas Web que estén presentes (por ejemplo, Javascript, HTML entre otros) para lo cual el intérprete de dichas codificaciones será el software que es conocido por todos como Navegador Web.

Como la actividad de generar códigos fuentes, escribirlos es la Programación y es una actividad laboral rentada, existen Licencias de Código Fuente que permiten regular si esta programación puede estar o no disponible para otros Programadores, para poder realizar estudios sobre el mismo, modificaciones o bien utilizarlo para dar base a nuevos proyectos y aplicaciones.

Es por ello que debemos diferenciar a cada Código Fuente en dos grandes grupos:

Código Abierto: Permite a todos los usuarios la Lectura, Modificación y Redistribución del Código Fuente sin que sean los autores originales, siempre y cuando no se esté en infracción con las condiciones y términos por los cuales fue incluido en este grupo (establecido por distintas Licencias de Distribución)
En este grupo encontramos una gran cantidad de aplicaciones que llevan la denominación de Software Libre, por las que lógicamente no se obtienen beneficios económicos.

Código Cerrado: En este caso el código solamente está disponible para el Autor y para aquellos programadores a quienes éste autorice previamente.

Sin el perjuicio de ello, debemos diferenciar que las aplicaciones de Código Abierto (también conocidas por su nombre en inglés como Open Source) de aquellas que son Free Software, también conocidas como Freeware, ya que si bien en ambos casos no se debe pagar por ellas, en estas últimas no siempre el Código Fuente está disponible para ser leído, analizado o modificado.

Historias relacionadas

# data[].attributes.attachment_link.description
Mayormente conocido como Código Fuente, definimos como Programa Fuente a un texto o conjunto de líneas de texto (líneas de código) que forman parte esencial de un programa informático,...

# data[].attributes.attachment_link.description
Programa Objeto -Es aquel programa que se encuentra en lenguaje máquina y que ya es ejecutable por esta. -Es el resultado de traducir...

# data[].attributes.attachment_link.readable_text
A la hora de elegir un lenguaje de programación, se debe prestar especial atención a dos cosas: por una parte, el lenguaje debe contar con todos los componentes básicos necesarios para el proyecto de software que se quiera desarrollar. Por la otra, tiene que permitir programar e implementar este proyecto de la manera más sencilla posible. La buena legibilidad y simplicidad del código fuente son fundamentales para garantizar lo segundo, porque estas características no solo facilitan el aprendizaje del lenguaje de programación, sino también, obviamente, su posterior utilización en el día a día.

En primer lugar, para que el ordenador o el procesador puedan comprender las instrucciones que contiene un programa desarrollado previamente, el código fuente escrito en los lenguajes de programación actuales debe convertirse a un formato legible por máquina. De este procedimiento, dependiendo del lenguaje de programación, se encarga un compilador o un intérprete. ¿Qué son exactamente estos dos programas? Y ¿en qué se diferencian?

Índice

1. ¿Qué es un intérprete?

2. ¿Qué es un compilador?

3. Compilador e intérprete: diferencias, en resumen

4. Solución híbrida de intérprete y compilador: compilación en tiempo de ejecución

¿Qué es un intérprete?

Un intérprete es un programa informático que procesa el código fuente de un proyecto de software durante su tiempo de ejecución, es decir, mientras el software se está ejecutando, y actúa como una interfaz entre ese proyecto y el procesador. Un intérprete siempre procesa el código línea por línea, de modo que lee, analiza y prepara cada secuencia de forma consecutiva para el procesador. Este principio también se aplica a las secuencias recurrentes, que se ejecutan de nuevo cada vez que vuelven a aparecer en el código. Para procesar el código fuente del software, el intérprete recurre a sus propias bibliotecas internas: en cuanto una línea de código fuente se ha traducido a los correspondientes comandos legibles por máquina, esta se envía directamente al procesador.

El proceso de conversión no finaliza hasta que se ha interpretado todo el código. Solo se interrumpe prematuramente si se produce un fallo durante el procesamiento, lo que simplifica mucho la resolución de los errores, ya que la línea de código problemática se detecta inmediatamente después de ocurrir el fallo.

Nota

BASIC, Perl, Python, Ruby y PHP son algunos de los lenguajes de programación más famosos que dependen de un intérprete para ser traducidos de código fuente a código máquina. Por ello, también suelen llamarse lenguajes interpretados.

¿Qué es un compilador?

Un compilador es un programa informático que traduce todo el código fuente de un proyecto de software a código máquina antes de ejecutarlo. Solo entonces el procesador ejecuta el software, obteniendo todas las instrucciones en código máquina antes de comenzar. De esta manera, el procesador cuenta con todos los componentes necesarios para ejecutar el software, procesar las entradas y generar los resultados. No obstante, en muchos casos, durante el proceso de compilación tiene lugar un paso intermedio fundamental: antes de generar la traducción final en código máquina, la mayoría de los compiladores suelen convertir el código fuente en un código intermedio (también llamado código objeto) que, a menudo, es compatible con diversas plataformas y que, además, también puede ser utilizado por un intérprete.

Al producir el código, el compilador determina qué instrucciones van a enviarse al procesador y en qué orden. Si las instrucciones no son interdependientes, incluso es posible que puedan procesarse en paralelo.

Nota

Entre los lenguajes compilados puros se incluyen, entre otros, los veteranos C, C++ y Pascal.

Tanto los compiladores como los intérpretes cumplen la función de convertir el código de software que se ha escrito a un formato ejecutable y legible por máquina. Sin esta traducción, los procesadores informáticos no podrían ejecutar el software en lenguajes como C, C++, PHP, Python o Ruby, lo que convierte estos programas en unos componentes imprescindibles para utilizar ordenadores, portátiles o smartphones. En los apartados anteriores, hemos visto que compiladores e intérpretes presentan algunas diferencias básicas, algo que debe tenerse especialmente en cuenta a la hora de elegir un lenguaje de programación adecuado para desarrollar un nuevo software. En la siguiente tabla, se resumen los aspectos clave que caracterizan intérpretes y compiladores:

| Intérprete | Compilador
Momento en que se traduce el código fuente | Durante el tiempo de ejecución del software | Antes de ejecutar el software
Procedimiento de traducción | Línea por línea | Siempre todo el código
Presentación de errores de código | Después de cada línea | En conjunto, después de toda la compilación
Velocidad de traducción | Alta | Baja
Eficiencia de traducción | Baja | Alta
Coste de desarrollo | Bajo | Alto
Lenguajes típicos | PHP, Perl, Python, Ruby, BASIC | C, C++, Pascal

Si observamos las diferencias entre compilador e intérprete, vemos claramente los puntos fuertes y débiles de cada solución para traducir el código fuente: con el intérprete, los programas se pueden ejecutar de inmediato y, por lo tanto, se inician mucho más rápido. Además, el desarrollo es mucho más fácil que con un compilador, porque el proceso de depuración (es decir, la corrección de errores) se lleva a cabo igual que la traducción, línea por línea. En el caso del compilador, primero debe traducirse todo el código antes de poder resolver los errores o iniciar la aplicación. Sin embargo, una vez que se ejecuta el programa, los servicios del compilador ya no son necesarios, mientras que el intérprete continúa utilizando los recursos informáticos.

| Ventaja | Inconveniente
Intérprete | Proceso de desarrollo sencillo (sobre todo en términos de depuración) | Proceso de traducción poco eficiente y velocidad de ejecución lenta
Compilador | Proporciona al procesador el código máquina completo y listo para ejecutar | Cualquier modificación del código (resolución de errores, desarrollo del software, etc.) requiere volverlo a traducir

Solución híbrida de intérprete y compilador: compilación en tiempo de ejecución

Para compensar los puntos débiles de ambas soluciones, también existe el llamado modelo de compilación en tiempo de ejecución (en inglés, just-in-time-compiler, o “compilador justo a tiempo”). Este tipo de compilador, que a veces también se conoce por el término inglés compreter (acrónimo de com piler e inter preter), rompe con el modelo habitual de compilación y traduce el código del programa durante el tiempo de ejecución, al igual que el intérprete. De esta forma, la alta velocidad de ejecución típica de los compiladores se complementa con la simplificación del proceso de desarrollo.

Java es uno de los ejemplos más conocidos de lenguaje basado en compilación en tiempo de ejecución: el compilador JIT, que figura entre los componentes del Java Runtime Environment (JRE), mejora el rendimiento de las aplicaciones Java traduciendo el código de bytes en código máquina de manera dinámica.

Para proteger tu privacidad, el vídeo se cargará tras hacer clic.

Artículos similares

Editores de código: las mejores aplicaciones para sistemas como Windows o Mac

Existe una gran variedad de editores de código y son una de las herramientas más utilizadas por los programadores. Estos editores facilitan mucho la escritura de código mediante una gran variedad de funciones como, por ejemplo, resaltar en color los parámetros sintácticos o autocompletar palabras y secciones, ahorrando mucho trabajo a los programadores.

¿Qué son los CLOB u objetos grandes de caracteres?

Por lo general, las bases de datos almacenan la información en forma de bloques, donde el tamaño de los datos resulta muy importante. Los objetos de datos especialmente grandes constituidos únicamente por cadenas de caracteres se almacenan como CLOB (Character Large Object) o como TEXT y, en la mayoría de los casos, se asocian a una referencia. En el siguiente artículo, encontrarás información más...

Deno: entorno de ejecución para JavaScript y TypeScript

Deno: un nombre de producto como de otra época. Esta denominación anticuada, sin embargo, se refiere a un entorno en tiempo de ejecución extremadamente innovador para JavaScript, que está tomando el relevo al pionero Node.js. A pesar de sus fallos y puntos débiles, este líder del runtime es muy popular en la comunidad de JavaScript. ¿Qué distingue Deno como solución de runtime?

Callback: ¿qué son las funciones callback?

Si quieres que tu sitio web reaccione a las solicitudes de los usuarios, tendrás que familiarizarte con las funciones . Este tipo de función permite personalizar los proyectos web con JavaScript y darles un diseño interactivo. En este artículo, te explicamos qué es un , cómo funciona y en qué lenguajes de programación se utiliza.

Runtime environment: ¿qué es un sistema en tiempo de ejecución?

Un runtime environment, sistema en tiempo de ejecución en español, proporciona a los programas informáticos todas las funciones que necesitan para ejecutarse. De esta manera, pueden utilizarse con las mismas características e interfaz de usuario, aunque independientemente del sistema operativo. Te explicamos cómo funcionan estos sistemas y te mostramos algunos ejemplos.

# data[].attributes.attachment_link.title
Compilador e intérprete: definición y diferencias

# data[].attributes.attachment_link.description
Los compiladores e intérpretes se utilizan para traducir código fuente a código máquina. ¿En qué se diferencian estos dos programas?

# data[].attributes.attachment_link.provider_name
Desarrollar Inclusión | Portal de tecnología inclusiva de CILSA

# data[].attributes.attachment_link.title
¿Qué es un lenguaje de programación? | Desarrollar Inclusión

# data[].attributes.attachment_link.description
DESARROLLAR INCLUSIÓN es una plataforma educativa accesible de divulgación y aprendizaje de contenidos sobre discapacidad, accesibilidad y tecnología inclusiva que tiene por objetivo lograr la plena inclusión de las personas con discapacidad en nuestra sociedad.

# data[].attributes.attachment_link.readable_text
LENGUAJE MÁQUINA: es el nivel más bajo, empleando códigos binarios (0s y 1s), para describir operaciones, datos y direcciones.

ENGUAJE ENSAMBLADOR: Lenguaje de bajo nivel que representa de forma sencilla las instrucciones de una determinada máquina. Es propio de cada procesador.

LENGUAJE DE ALTO NIVEL: Proporciona instrucciones que permiten realizar operaciones más complejas, y diseñar estructuras para resolver problemas.(C, java, php, etc.)

# data[].attributes.attachment_link.description
LENGUAJE MÁQUINA: es el nivel más bajo, empleando códigos binarios (0s y 1s), para describir operaciones, datos y direcciones. ENGUAJE ENSAMBLADOR: Lenguaje de bajo nivel que representa de forma sencilla las instrucciones de una determinada máquina. Es propio de cada procesador.

# data[].attributes.attachment_link.readable_text
Hola Francisca, existen 5 generaciones de lenguajes: 1GL: Código de máquina. Al principio solo se le enviaba codigo binario a la máquina. Pongamos en esta categoría también al Assembler como una mejora. 2GL: Se generan los primeros lenguajes que procesan el código y lo transforman en código ensamblador (1GL). Estos lenguajes aún no son estructurados (Fortran, Cobol, Basic). Es el comienzo. 3GL: Surgen los lenguajes estructurados (Algol, Pascal, C, ADA, Lisp, Prolog, Smalltalk). Son los lenguajes de alto nivel, mientras los anteriores eran interpretados, estos ya son compilados. 4GL: No hay mucha diferencia con la 3GL, mejoras de sintaxis y mayor herramienta, el objetivo es en este momento obtener una solución lo antes posible. Aqui podemos poner a Visual Basic, Visual C, C++, Java, Eiffel. No olvidemos dentro de esta categoría el SQL para acceder como lo hacemos hoy en día a una base de datos. 5GL: Aquí encuadraremos a la inteligencia artifical. Redes neuronales. Es un tema que está en investigación actualmente y en constante crecimiento. Esta categoría queda abierta.

# data[].attributes.attachment_link.title
¿Cuántas generaciones de lenguaje de programación existe?

# data[].attributes.attachment_link.description
Hola Francisca, existen 5 generaciones de lenguajes: 1GL: Código de máquina. Al principio solo se le enviaba codigo binario a la máquina. Pongamos en esta categoría también al Assembler como una mejora. 2GL: Se generan los primeros lenguajes que procesan el código y lo transforman en código ensamblador (1GL).

# data[].attributes.attachment_link.readable_text
Microsoft nos presenta, de la mano de Etienne Baudoux, DevToys, una pequeña suite de utilidades de código abierto enfocada a facilitar el día a día de los desarrolladores de software. Su creador la define como una "navaja suiza para desarrolladores" y, desde hace pocos meses,

# data[].attributes.attachment_link.title
¿Qué son los paradigmas de programación?

# data[].attributes.attachment_link.description
Microsoft nos presenta, de la mano de Etienne Baudoux, DevToys, una pequeña suite de utilidades de código abierto enfocada a facilitar el día a día de los desarrolladores de software. Su creador la define como una "navaja suiza para desarrolladores" y, desde hace pocos meses,

# data[].attributes.attachment_link.readable_text
Desventajas de los intérpretes

Tipos de compiladores:

- Una sola pasada: examina el código fuente una vez, generando el código o programa objeto.

- Pasadas múltiples: requieren pasos intermedios para producir un código en otro lenguaje, y una pasada final para producir y optimizar el código producido durante los pasos anteriores.

- Optimación: lee un código fuente, lo analiza y descubre errores potenciales sin ejecutar el programa.

- Compiladores incrementales: generan un código objeto instrucción por instrucción (en vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente.

- Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee una estructura sencilla.

- Compilador cruzado: se genera código en lenguaje objeto para una máquina diferente de la que se está utilizando para compilar. Es perfectamente normal construir un compilador de Pascal que genere código para MS-DOS y que el compilador funcione en Linux y se haya escrito en C++.

- Compilador con montador: compilador que compila distintos módulos de forma independiente y después es capaz de enlazarlos.

- Autocompilador: compilador que está escrito en el mismo lenguaje que va a compilar. Evidentemente, no se puede ejecutar la primera vez. Sirve para hacer ampliaciones al lenguaje, mejorar el código generado, etc.

- Metacompilador: es sinónimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje. El desarrollo de los metacompiladores se encuentra con la dificultad de unir la generación de código con la parte de análisis.

- Descompilador: es un programa que acepta como entrada código máquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilación.

Otra modalidad de clasificación de los lenguajes de programación es según su nivel de abstracción, en dos grandes grupos, lenguajes de alto nivel y lenguajes de bajo nivel. El grupo de los de bajo nivel, como su nombre indica, incluye los relacionados íntimamente con la arquitectura de la máquina, por lo que generalmente son específicos de un microprocesador (CPU) y no son válidos para otra diferente.

Dentro de los de estos grupos está el lenguaje máquina, que es programar en el ámbito de la CPU, por lo tanto usando ceros y unos, lenguaje muy difícil y propenso a errores. El otro más conocido dentro de esta categoría es el Ensamblador, que utiliza nemónicos, por ejemplo ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), a escala sencilla, y por lo tanto evita las secuencias de ceros y unos. Aún así es bastante complicado y no es recomendable para usuarios sin amplios conocimientos.

Seguidamente se muestra un programa en lenguaje ensamblador para CPU Intel, que muestra en pantalla el texto "Universidad de Murcia",

.model tiny .data message db 'Universidad de Murcia'
.code org 100h
start: mov ah,9 mov dx,offset message int 21h
ret end start

Mientras que en un lenguaje de alto nivel como el Pascal, se escribiría de forma muy sencilla,

program UniMurcia;
begin writeln('Universidad de Murcia'); end.

En conclusión, un lenguaje de bajo nivel está orientado hacia una determinada máquina o clases de ordenadores, es decir es específico de un tipo de CPU concreta. Mientras que un lenguaje de alto nivel es independiente del microprocesador del ordenador que lo soporta, así por ejemplo un programa escrito en lenguaje C, se puede compilar sin modificar para cualquier máquina, y en principio funcionará sin ningún problema.

Esto implica dos ventajas principales, una es que la persona que desarrolla los programas no ha de saber nada acerca del ordenador en que se ejecutará el programa, la otra es que los programas son portables, es decir el mismo programa (en teoría) ha de funcionar sobre distintos tipos de ordenadores.

El desarrollo de los lenguajes de alto nivel comenzó a mediados de los años cincuenta del siglo pasado, en esta época se crearon los lenguajes COBOL, Fortran y ALGOL60. Posteriormente han ido originándose otros muchos, aunque sobreviven muy pocos.

Seguidamente se citan algunos lenguajes de alto nivel:

JAVA, BASIC, FORTRAN, MODULA 2, Pascal, ADA, C, C ++, LOGO, LISP, PROLOG, Ruby, Dart.

Una tercera forma de clasificar los lenguajes de programación es según el paradigma de programación, declarativo, imperativo, orientado a objetos y funcional. Los imperativos establecen cómo debe ejecutarse una tarea fraccionándola en procedimientos que especifican cada una de las tareas, por ejemplo C, Fortran y Pascal. Por el contrario los declarativos establecen estructuras de datos y las relaciones entre ellos que son significativas para ejecutar una tarea determinada, al tiempo que indican cual es el objetivo de dicha tarea. Un lenguaje típico de este grupo es el Prolog. El orientado a objetos usa objetos y sus interacciones para diseñar aplicaciones y programas de ordenador; está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento, Smalltalk es el lenguaje más representativo de este tipo. Funcional es un paradigma de programación declarativo basado en la utilización de funciones matemáticas, el lenguaje más representativo es LISP (procesado de listas). Aunque puede seleccionarse la forma pura de estos paradigmas a la hora de programar, en la práctica es habitual que se mezclen, dando lugar a la programación multiparadigma.

# data[].attributes.attachment_link.title
Informática Aplicada a las Ciencias Sociales

# data[].attributes.attachment_link.description
Desventajas de los intérpretes Tipos de compiladores: - Una sola pasada: examina el código fuente una vez, generando el código o programa objeto. - Pasadas múltiples: requieren pasos intermedios para producir un código en otro lenguaje, y una pasada final para producir y optimizar el código producido durante los pasos anteriores.