El equipo de Investigación

Solo nos queda felicitar a todos los estudiantes participantes de este gran Proyecto.


¿Qué te parece el método utilizado para el reforzamiento de las clases en Algoritmos?

Estructura de Control Condicional

Estructura Alternativa
La estructura condicional o alternativa permite bifurcar el flujo del algoritmo en función de una expresión lógica;disponemos de tres estructuras alternativas diferentes: alternativa simple, alternativa doble y alternativa múltiple.


  • Estructura Condicional Simple
  • Es el tipo de selección donde se tiene un bloque de instrucciones, cuya ejecución sólo debe darse en caso de que una determinada condición se cumpla.
  • Estructura Condicional Doble
  • Es similar a la anterior con la salvedad de que en este tipo de estructura se indican acciones no sólo para la rama “verdadera” sino también para la “falsa”; es decir, en caso de la expresión lógica evaluada sea cierta se ejecutan una acción o grupo de acciones y en caso de que sea falsa se ejecuta un grupo diferente.
  • Estructura Condicional Múltiple
  • Esta estructura evalúa una expresión que pueda tomar n valores y ejecuta una acción o grupo de acciones diferente en función del valor tomado por la expresión selectora.

Estructura de Control Secuencial

Se denomina estructura de control secuencial a aquella estructura que se encuentra compuesta por instrucciones(acciones) que deben ejecutarse una tras otra sin excepciones. En otras palabras, es una estructura en la cual una instrucción no empieza a ejecutarse mientras la instrucción inmediatamente anterior no se haya resuelto completamente. Estas instrucciones, básicamente, están compuestas por operaciones y expresiones.

Componentes de la Estructura Secuencial: 
Asignación
La asignación 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: 
• Simples: Consiste en pasar un valor constate a una variable (a=10)
• Contador: Consiste en usarla como un verificador del número de veces que se realiza un proceso (a=a+1) 
• Acumulador: Consiste en usarla como un sumador en un proceso (a=a+b) •
De trabajo: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a=b+c*3/5). 
Lectura
La lectura consiste en recibir desde un dispositivo de entrada un valor. Esta operación se representa en un pseudocodigo como sigue: 
Leer a, b Donde “a” y “b” son las variables que recibirán los valores
Escritura
Consiste en mandar por un dispositivo de salida un resultado o mensaje. Este proceso se representa en un pseudocodigo como sigue: 
Escribe “El resultado es:”, R Donde “El resultado es:” es un mensaje que se desea aparezca y R es una variable que contiene un valor.

Estructura Secuencial en Diagrama de Flujo

EXPRESIONES

EXPRESIONES NUMÉRICAS: 
En algoritmos son expresiones en las que solamente aparecen operadores aritméticos ( +, -, *, /, div, mod, **) , conectando términos de tipo numérico exclusivamente.
Para el desarrollo se tiene en cuenta la prioridad de los operadores.


EXPRESIONES LÓGICAS: 
Una expresión lógica es aquella, en la cual, el resultado se da en términos de verdadero o falso. Generalmente una expresión lógica se construye a partir de expresiones comparativas, de variables y/o literales booleanos, los cuales se conectan mediante operadores lógicos. 

Los operadores de comparación usados en programación son los siguientes: 
mayor que (>), 
menor que (<), 
igual (=), 
mayor o igual que (>=), 
menor o igual que (<=) y 
diferente (<>); 

Mientras que los operadores lógicos usados son: 
o (|), 
y (&) y la 
negación (~). 

En el siguiente cuadro se resumen las tablas de verdad de estos operadores lógicos.

LOS DATOS EN PROGRAMACIÓN

DATOS.
Un dato es una pieza de información simple como un número, un código, un hecho o una edad. De manera formal, un dato es un elemento concreto de algún conjunto. Los tipos de datos más utilizados en programación son:

  • Entero: El nombre asignado al conjunto de números enteros.
  • Real:El nombre asignado al conjunto de números reales. 
  • Carácter: El nombre asignado al conjunto de caracteres. 
  • Booleano: El nombre asignado al conjunto de valores de verdad. 
  • Cadena: El nombre asignado al conjunto de cadenas de caracteres.

VARIABLES 
Es un símbolo que permite referenciar un espacio en memoria en el que se puede almacenar un dato. Toda variable posee tres características: nombre, tipo y estado.

El nombre de una variable es una secuencia de caracteres alfanuméricos y caracteres de subrayado, la cual siempre empieza por una letra. En algunos lenguajes de programación (C++, C, Java), se hace distinción entre mayúsculas y minúsculas mientras que en otros no (Pascal, Basic).

El tipo de una variable es el mismo tipo de los datos que se pueden almacenar en el espacio de memoria que la variable referencia. Por ejemplo, una variable de tipo entero, es decir, que se ha declarado como entera, sólo se puede usar para referenciar datos de tipo entero. La cantidad de memoria, es decir, el espacio en memoria en bits, asignada para almacenar un dato de un tipo depende del sistema operativo y del compilador del lenguaje.

Declaración de la variable:

VAR
 "<"nombre">" : "<"tipo">" 

CONSTANTES

Una constante es un símbolo que permite referenciar un espacio en memoria en el que hay un dato almacenado que no se puede cambiar. En términos generales, una constante es una variable para la cual no se puede modificar o cambiar el estado con el tiempo. 

Declaración de Constante:

CONST
"<"nombre">" = "<"literal">"

Técnicas para la Formulación de Algoritmos

PSEUDOCÓDIGO
Es la descripción de un algoritmo que asemeja a un lenguaje de programación pero con algunas convenciones del lenguaje natural. Pseudo significa "falso", imitación, Código se refiere a las instrucciones escritas en el lenguaje de programación; Pseudocódigo no es realmente un código sino una imitación y una versión abreviada de instrucciones reales para la computadora. 
Los Pseudocódigos utilizan palabras clave como: 
DO (hacer), 
IF – THEN – ELSE (si – entonces – sino) ENDIF (fin de si), 
DO UNTIL (hacer hasta) etc.


DIAGRAMA DE FLUJO
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 (International Standard Organization) y ANSI (American National Standards Institute).

Diagrama de Flujo Convencional
es la representación gráfica del algoritmo o proceso. Se utiliza en disciplinas como programación, economía, procesos industriales y psicología cognitiva.


Símbología en Diagrama de Flujo Convencional

Diagrama de Flujo Nassi-Shneiderman
NSD por sus siglas en inglés, también conocido como diagrama de Chapin, es una representación gráfica que muestra el diseño de un programa estructurado.
Fue desarrollado en 1972 por Isaac Nassi y Ben Shneiderman. Este diagrama también es conocido como estructograma, ya que sirve para representar la estructura de los programas. Combina la descripción textual del pseudocódigo con la representación gráfica del diagrama de flujo.

Algoritmo

Algoritmo se deriva de la traducción al latín de la palabra árabe Alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX. 
Un algoritmo es una secuencia precisa de operaciones (pasos) que resuelven un problema en un tiempo finito.

CARACTERÍSTICAS DE LOS ALGORITMOS


  • Un algoritmo debe ser preciso e indicar el orden de realización de cada paso. 
  • Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez. 
  • Un algoritmo debe ser finito. el algoritmo se debe terminar en algún momento; o sea, debe tener un número finito de pasos. 
  • Un algoritmo debe ser legibles: El texto que lo describe debe ser claro, tal que permita entenderlo y leerlo fácilmente.

MEDIOS DE EXPRESIÓN DE UN ALGORITMO
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.
La descripción de un algoritmo usualmente se hace en tres niveles:

  • Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles. 
  • Descripción formal. Se usa pseudocódigo, DFC o N-S, para describir la secuencia de pasos que encuentran la solución. 
  • Implementación. Se muestra el algoritmo expresado en un lenguaje de programación específico

Clasificación de los lenguajes de alto nivel

Según los Paradigmas de Programación:
Entendiéndose como paradigma de programación a una “filosofía” de programar, es decir, los lenguajes que utilizan un mismo paradigma de programación utilizarán los mismos conceptos básicos para programar. Se pueden definir cuatro tipos fundamentales:
  • Imperativos.
  • La unidad de trabajo es la sentencia: Pascal, C.
  • Orientado a Objetos.
  • La unidad de trabajo es el objeto. Agrupa las estructuras de datos con sus algoritmos. Smalltalk.
  • Funcionales.
  • La unidad es la función. Consiste en combinar funciones para conseguir funciones más complejas hasta llegar a la función que es el programa. Lisp.
  • Lógicos.
  • Se especifican los hechos y las propiedades que especifican el problema. El sistema utiliza esa información para encontrar la solución. Prolog.
Según la Administración de Memoria:
  • Estáticos.
  • Los requisitos de memoria del programa se pueden calcular antes de ejecutar el programa. No permiten recursividad. Fortran, Cobol.
  • Basados en Pila.
  • Se calculan los requisitos de memoria generales del programa antes de ejecutarlo. El resto de la memoria necesaria durante la ejecución del programa se utiliza en forma de pila. Algol 60.
  • Dinámicos.
  • No se puede saber a priori la cantidad de memoria que utilizará el programa. El programa puede crear y destruir estructuras de datos en cualquier lugar del programa. Prolog, Lisp.

El C++ es un lenguaje principalmente basado en pila, pero que también tiene características dinámicas.

Según la forma en que se pasa a lenguaje máquina:

  • Lenguajes compilados → C, Pascal, C++,... 
  • Lenguajes interpretados → BASIC
Según el objetivo principal de los programas escritos en el lenguaje:

  • Lenguajes de propósito general → C, Delphi... 
  • Lenguajes para la enseñanza → Logo, Pascal, Modula, BASIC... 
  • Lenguajes para cálculo científico → Fortran, Matlab, Mathematica, Maple... 
  • Lenguajes para gestión → Cobol... 
  • Lenguajes para la gestión de bases de datos → System Query Languages (SQL) Informix...
  • Lenguajes de inteligencia artificial → Prolog, Lisp... 
  • Programación multiplataforma e internet → Java

Lenguajes de bajo nivel y lenguajes de alto nivel

Los lenguajes de programación se pueden clasificar en lenguajes de bajo y alto nivel dependiendo de lo cercanos o lejanos que estén de la arquitectura de la máquina en la que van a funcionar.

LENGUAJES DE BAJO NIVEL: 

  • Están basados directamente en la máquina de Von Neumann, por lo que están a un nivel muy cercano a la máquina. 
  • Las instrucciones del lenguaje son las instrucciones del microprocesador del ordenador, que normalmente son demasiado simples. 
  • Es exclusivo de cada ordenador. 
  • Es difícil y costoso de programar. 


En lenguajes de bajo nivel distinguimos entre lenguaje máquina y lenguaje ensamblador.

Lenguaje máquina: ƒ
Instrucciones reconocidas por los circuitos del procesador. ƒ
Se codifican en binario. ƒ
Los datos se referencian por su posición de memoria.

Lenguaje ensamblador: ƒ
Codificación mnemotécnica del lenguaje máquina. ƒ
Necesita un traductor. ƒ
Se pueden utilizar etiquetas en vez de posiciones de memoria.

LENGUAJES DE ALTO NIVEL:

Están basados en máquinas abstractas, que facilitan la comprensión por personas.
Instrucciones más flexibles y potentes.
Necesita un traductor para convertir el programa a lenguaje máquina, que es el que entiende el ordenador.
No depende del procesador, por lo que el mismo programa sirve para diferentes ordenadores.
Al tener que traducirlo, es más lento e ineficiente que el lenguaje de bajo nivel.

Lenguajes de Programación

Un lenguaje de programación es un convenio entre personas que puede definirse así: Conjunto de reglas o normas que permiten asociar a cada programa correcto un cálculo que será llevado a cabo por un ordenador.
• por tanto, un lenguaje de programación es un convenio o acuerdo acerca de como se debe de interpretar el significado de los programas de dicho lenguaje
• muchas veces se confunden los lenguajes con los compiladores, interpretes o con los entornos de desarrollo de software. 

Programa: 
Es una secuencia finita de dígitos y caracteres, directamente legible por las personas y por el ordenador 
• estas secuencias se suelen almacenar en uno o varios archivos de texto ASCII o UNICODE. 
• también es posible almacenar programas en formatos alternativos de archivos, como XML u otros, aunque en estos casos los archivos no son directamente legibles por las personas, sí son legibles mediante herramientas de traducción.

Bienvenidos

Estimado Estudiante:
A través de este espacio virtual tendrás la oportunidad de desarrollar y reforzar las destrezas en el diseño de algoritmos en el semestre académico 2014-II, en la asignatura de Algoritmos del Plan de Estudios Integral, de la Escuela Profesional de Ingeniería de Sistemas e Informática de la Universidad Nacional de San Martín - Tarapoto. 
Será una experiencia enriquecedora en el proceso de enseñanza y aprendizaje, en el cual estamos inmersos y tendrás a tu disposición una variedad de recursos interactivos, dinámicos e innovadores para manejar e implementar algoritmos, así como, técnicas para comprender diferentes procesos de resolución de problemas. El mismo formará parte del Curso de Algoritmos.

Att.
El Docente