Está en la página 1de 15

IntroducciónBloque 1Bloque 2Bloque 3Bloque 4Referencias

Sistemas de procesamiento de información y algoritmos

Introducción
El ser humano, a lo largo de la historia, tuvo que lidiar con obstáculos y  problemas, y
en su evolución ha desarrollado sistemas informáticos que le   ha permitido resolver
estos problemas con mayor facilidad, en forma rápida  y precisa. 

Para solucionar un problema mediante un sistema informático se deben tener en


cuenta los siguientes conceptos: 

Una secuencia de instrucciones es comunicada a la computadora. ∙ Para lograr


esta comunicación, se han desarrollado lenguajes de  programación. 
Un conjunto de instrucciones escritas en un lenguaje de programación  define un
programa o software. 
El hardware de una computadora puede entender instrucciones   solamente a
través de un lenguaje binario de ceros y unos también  conocido como lenguaje
de bajo nivel. 
Es muy difícil para las personas comprender este tipo de lenguaje debido  a que
las instrucciones contienen secuencias de ceros y unos. ∙ Ante esta dificultad, se
han desarrollado lenguajes de alto nivel, los   cuales permiten el uso de
expresiones literarias y algebraicas  interpretadas por el ser humano, que facilitan
la comprensión y el  entendimiento de la lógica involucrada en un programa. 
En el desarrollo de una solución que usa lenguajes de alto nivel, se le da
  importancia al desarrollo de un algoritmo o modelo que permita obtener   la
solución deseada. Un algoritmo es el conjunto de pasos necesarios  para resolver
un problema. 
Para escenarios complejos, los algoritmos de resolución tienen una   mayor
dificultad para su desarrollo, dando lugar a distintas formas de   encarar los
modelos de resolución.

Figura 1: Resolución de problemas con un sistema informático 


Fuente: Elaboración propia

Un programa representa la solución a un problema, es un conjunto de   instrucciones


escritas en un lenguaje de programación. Uno de los pasos más   desafiantes al
momento de resolver un problema es identificar el modelo de  resolución. Una vez que
lo hemos identificado, es necesario convertirlo en  instrucciones escritas en un lenguaje
de programación, para que de esta   forma el programa acepte la entrada de datos y
realice los pasos lógicos  necesarios para generar la salida deseada. 
 Figura 2: Entrada-proceso-salida 

Fuente: Elaboración propia

1. Clasificación de los lenguajes de programación 


Los lenguajes de programación se pueden clasificar según varios criterios,   que
desarrollaremos a continuación. 

1.1.1 Según el nivel de abstracción 

Lenguaje máquina: es el que comprende el procesador de una   computadora.


Los programas escritos en este lenguaje consisten en una   serie de cadenas
binarias (secuencia de ceros y unos) y, debido a esto, son  únicamente legibles
por una computadora. 
Lenguaje de bajo nivel: su comprensión requiere una complejidad menor al
  lenguaje máquina, pero sigue teniendo una fuerte dependencia con el
 entendimiento de las estructuras y el funcionamiento técnico de la  computadora;
debido a esto, entender programas escritos en este lenguaje   es complejo. El
lenguaje ensamblador es un ejemplo. Un programa escrito   en este tipo de
lenguaje es traducido a lenguaje máquina para que pueda  ser ejecutado. 
Lenguaje de alto nivel: utiliza sintaxis y estructuras que resultan más fáciles  de
entender para las personas que escriben programas. Se emplean palabras   del
lenguaje natural y se aleja de los tecnicismos de la computadora. Los  programas
escritos en este lenguaje necesitan de un intérprete o compilador   para traducir
las instrucciones a lenguaje de bajo nivel. Ejemplos de   lenguajes de alto nivel
son C++ y Java. 

1.1.2. Según el paradigma de programación 


Un paradigma de programación define un modelo o patrón con reglas y   pautas que
todo desarrollador debe seguir para resolver una situación  problemática. En la práctica
es habitual la utilización de distintos paradigmas, que dan lugar a una programación
multiparadigma. Los   lenguajes se pueden clasificar, según el paradigma al que
apliquen, en los  siguientes tipos: 

1. Lenguaje imperativo: consiste en un conjunto de instrucciones que la


  computadora debe ejecutar. Estas le indican a la computadora cómo debe
 realizarse una tarea mediante un algoritmo. Es decir, se hace énfasis en  cómo
debe hacerse dicha tarea y no en el porqué de su realización.
2. Lenguaje funcional: se basa en la aplicación de funciones matemáticas y la
  composición entre ellas, a diferencia de los cambios de estado que define el
 lenguaje imperativo. 
3. Lenguaje lógico: aplica reglas lógicas para que, a partir de ellas, se pueda
 llegar a ciertas conclusiones luego de utilizar razonamiento formal. Los  objetos
de tales razonamientos son hechos. Se intenta llegar a la solución de   un
problema mediante la comprobación de la veracidad o falsedad de un  conjunto
de expresiones. 
4. Lenguaje orientado a objetos: organiza los datos en objetos que pueden
  almacenar y manipular información, en forma similar a como el ser humano
  percibe la realidad que lo rodea. La programación orientada a objetos   trabaja
con unidades lógicas, denominadas objetos, que se interrelacionan   entre sí.
Estos objetos contienen información y son los responsables de   ejecutar las
funciones necesarias para resolver los problemas. Actualmente,  este es uno de
los lenguajes de programación de mayor popularidad. 

1.2. Traductores de lenguajes: intérpretes y  compiladores 


Al momento de ejecutar un programa, los procesadores entienden   únicamente
instrucciones en lenguaje máquina, es decir, una combinación  de 0 y 1. Para que un
programa pueda ser ejecutado, su código fuente en   lenguaje de alto nivel debe ser
traducido a lenguaje máquina. Los traductores de lenguajes se clasifican en intérpretes
y compiladores. A  continuación, los desarrollaremos. 
1.2.1. Intérprete 
Lee e interpreta las instrucciones de un programa fuente a medida que son
  encontradas y las ejecuta. A este proceso se lo llama interpretar y a los   programas
que lo hacen se los conoce como intérpretes.
Figura 3: Intérprete 
Fuente: Elaboración propia

Como ejemplo de intérprete puede mencionarse Bash, clásico intérprete del   sistema
operativo Unix. También puede nombrarse a Basic como ejemplo de   un lenguaje
interpretado. 
1.2.2. Compilador 
Un compilador traduce el código fuente de un programa (alto nivel) en   lenguaje
máquina para que el procesador pueda ejecutar sus instrucciones.  El código escrito en
lenguaje de alto nivel se denomina código fuente y el   traducido se denomina código
objeto. Como ejemplos de lenguajes que  utilizan compilación pueden mencionarse C,
Pascal y Cobol. 

Para compilar un programa fuente y obtener un programa objeto, deben  realizarse una
serie de pasos. Generalmente, el programa objeto que resulta luego de ejecutar la
compilación no se corresponde con el lenguaje máquina,  sino que se corresponde con
el lenguaje ensamblador. Para obtener el   programa en lenguaje máquina, debe
utilizarse un enlazador o montador.   Este es un módulo que junta los paquetes de
código objeto generados en el   paso anterior y, junto con otros recursos que pueda
necesitar, como, por   ejemplo, bibliotecas, obtiene finalmente el programa objeto en
lenguaje  máquina que puede ser ejecutado por el procesador.

 Figura 4: Compilador 
Fuente: Elaboración propia

Para ejemplificar un proceso de compilación, mencionaremos los siguientes   pasos


para la ejecución de un programa escrito en lenguaje C++: 

1. Escritura del código fuente mediante un editor de texto.


2. Compilación del código fuente. 
3. Verificación y corrección de errores de compilación. 
4. Obtención del código objeto. 
5. Ejecución del enlazador o montador para obtener el programa en   lenguaje
máquina. 
6. Ejecución del programa.

 2. Sistemas de información 


Un sistema es un conjunto de elementos que interactúan entre sí para lograr   un
objetivo. Esta es una de las definiciones más clásicas que podemos   encontrar de
dicho concepto y es aplicable a muchos contextos. Si acotamos   el alcance de esta
definición al tratamiento de la información de una unidad de negocio para su uso
posterior, con el objetivo de cubrir una necesidad, entonces estamos haciendo
referencia a un sistema de información. Este es  utilizado para dar apoyo a las diversas
actividades de negocio de una   organización o proyecto. Un sistema de información
involucra elementos  como tecnologías, software, procesos y personas. Las actividades
de un  sistema de información son las siguientes: 

Entrada de datos: se capturan los datos que servirán para su posterior  procesamiento
y tratamiento de información. Los datos que ingresan al  sistema pueden provenir del
exterior de la organización, como también del  interior, desde las distintas unidades de
negocio. Esto se puede realizar   mediante dispositivos de entrada de información,
como, por ejemplo, teclados, mouses, escáneres, terminales de entrada, etcétera. 

Almacenamiento: es la actividad mediante la cual se guardan los datos  recopilados y


la información generada. 

Procesamiento de información: toma los datos capturados y los procesa   para


generar información que tenga un mayor significado. Esta es la que  servirá de apoyo
para las unidades de negocio de la organización. 

Salida de información: consiste en transferir la información generada a las  distintas


unidades de negocio o personas interesadas en ella. Esto se puede  realizar mediante
dispositivos de salida, como impresoras, proyectores,   monitores, dispositivos de
sonido, etcétera. 

2.1. Tipos y usos de los sistemas de información 


Uno de los criterios de clasificación de los sistemas de información es según la función
o el objetivo que tienen en la organización. De acuerdo con este criterio, los sistemas
de información se clasifican de la siguiente manera: 

Sistema de procesamiento de transacciones: su función es procesar la información


relacionada con las transacciones de una organización. Automatiza procesos
repetitivos que tienen relación con las tareas operativas de una organización. Se lo
denomina también sistema de  información operativo. Suele ser el primero en
implementarse en una organización.  

Sistema de soporte a decisiones: tiene por objetivo analizar la información generada


por los sistemas de información transaccionales que ayudan a la toma de decisiones.
Es utilizado en los mandos medios de una organización. Suele incorporarse a la
organización luego de haber implementado los sistemas de información
transaccionales. El tipo de decisiones a las que da soporte son repetitivas y no
estructuradas. 

Sistema estratégico: da soporte a la toma de decisiones estratégicas de una


organización para obtener ventajas respecto de los competidores. Este tipo de
sistemas es utilizado a nivel gerencial o mandos altos de una organización. Requiere
conocer las características y la naturaleza del proyecto en el que se aplica, por lo tanto,
su desarrollo generalmente se produce dentro de la organización y luego de un cierto
grado de evolución de esta. 

3. Elementos del lenguaje 


3.1. Entidades y ligaduras

Se denomina entidad a un elemento sobre el cual trabaja un programa. Una  entidad


puede ser un subprograma, variable, sentencia, etcétera. Una  entidad tiene atributos,
por ejemplo, nombre, valor, tipo, ubicación en memoria, tiempo de vida, etcétera. Los
atributos son asociados a una  entidad por medio del mecanismo de ligadura. Esta es
una asociación entre  dos cosas, es decir, la relación entre un atributo y una entidad.
Entonces, por  ejemplo, una variable tiene un nombre, un tipo de dato, una ubicación
en   memoria, un tiempo de vida, etcétera. Esta asociación se puede producir en
  tiempo de compilación (ligadura estática) o durante la ejecución del   programa
(ligadura dinámica). El momento en el cual se crea la ligadura o en  el que se decidió
su implementación se denomina tiempo de ligadura. 
Ligadura estática: la asociación se produce antes de la ejecución del  programa, por
lo que puede darse en tiempo de compilación o de diseño. Las características de este
tipo de ligadura son: 

Menor flexibilidad. 
Mayor seguridad (detección temprana de errores). 
Mayor eficiencia. 
Aplicable a lenguajes compilados.  

Ligadura dinámica: la asociación se produce durante la ejecución del  programa, no


puede realizarse en un paso anterior. Las características de  este tipo de ligadura son: 

Mayor flexibilidad. 
Menor seguridad. 
Mayor costo de ejecución. 

Como ejemplo, se puede mencionar la asignación de un valor a una variable  de tipo
referencial. Antes de la ejecución del programa, se desconoce la  ubicación exacta en
memoria de la variable referencial, por lo tanto, no se  puede realizar la asignación. La
ubicación es conocida en tiempo de   ejecución y es en este momento en el que se
realiza la ligadura.

3.2. Sintaxis y semántica 


Los lenguajes de programación deben seguir ciertas reglas que determinan  la validez
de las sentencias empleadas. Este conjunto de reglas define la   sintaxis del lenguaje
de programación, que, a su vez, está determinada por: 

Reglas léxicas: definen el conjunto de caracteres del lenguaje   y la forma en la


que se combinan para formar sentencias  válidas. 
Reglas sintácticas: definen reglas de mayor complejidad a   partir de
construcciones más complejas mediante la   combinación de elementos léxicos
(por ejemplo: a = a + 1). 

Ambas reglas determinan la sintaxis del lenguaje de programación. El   propósito


primordial de esta es proponer una notación para la comunicación   entre el
programador y el procesador de lenguajes de programación. 

Como elementos de la sintaxis de un lenguaje, se pueden mencionar los  siguientes: 

alfabeto; 
identificadores; 
palabras reservadas; 
espacios en blanco; 
símbolos de operadores; 
expresiones; 
delimitadores de código; 
comentarios. 

Existen metalenguajes que se encargan de definir las reglas que establecen cómo se
deben combinar los símbolos y elementos de un lenguaje de programación. Es
deseable que la sintaxis de un lenguaje sea de fácil lectura, escritura y análisis en
busca de errores, y que no posea ambigüedades.  

Por otro lado, el significado que toma cada uno de los elementos de un lenguaje de
programación de acuerdo al contexto define la semántica del lenguaje. La sintaxis no
tiene en cuenta el contexto, mientras que la semántica sí lo hace. Las variables, los
valores y las expresiones son algunos de los elementos principales de la semántica de
un lenguaje de programación. Estos elementos tienen una semántica que indica cómo
debe definírselos. Como ejemplo de aplicación de semántica, se puede mencionar el
chequeo de tipos de datos en expresiones. Este depende del contexto, porque debe
conocerse el tipo de dato esperado y el que actualmente se recibe de la expresión, y
determinar si son compatibles. Por ejemplo, si se  utiliza el operador aritmético suma
en una expresión, entonces el tipo de dato esperado es numérico y los operandos
deben ser valores numéricos  también.

4. Algoritmo. Concepto.  Características 


Un algoritmo es un conjunto de pasos para resolver un problema. Se parte  desde un
estado inicial y una entrada para llegar a un estado final o solución.   Estos pasos
deben tener ciertas características para que sean considerados  parte de un algoritmo.
Teniendo en cuenta este concepto, se puede   observar fácilmente que en la vida
cotidiana se utilizan algoritmos   constantemente en todo momento. Algunos ejemplos
pueden ser el uso de   manuales de usuario, una receta de cocina, el algoritmo para
obtener el   cociente entre dos números, etcétera. Con el marcado avance de las
ciencias   de la computación hace ya varios años, los problemas son resueltos
  utilizando algoritmos que se encuentran representados mediante   programas o
software. 

Figura 5: Resolución de un problema

Fuente: Elaboración propia

4.1. Características principales de los algoritmos 


Según Joyanes Aguilar (2008) en Fundamentos de Programación, todo  algoritmo debe
cumplir con las siguientes características: 

1. ∙ Preciso: el algoritmo debe indicar el orden de realización de cada paso. ∙


Definido: no importa cuántas veces se ejecute el algoritmo, se debe   obtener el
mismo resultado en cada ejecución. 
2. ∙ Finito: el algoritmo debe tener un número finito de pasos que permiten  resolver
el problema. 

Un algoritmo se puede representar mediante una descripción de los pasos  en lenguaje
natural, diagrama de flujo, pseudocódigo y lenguajes de  programación. La descripción
de un algoritmo puede tener distintos niveles   de detalle. Se puede comenzar con la
descripción en alto nivel, en la que se  utiliza lenguaje natural y se establece cuál es el
problema, cuáles serían los   datos de entrada, el proceso que se aplicaría y el
resultado o salida de   información que se espera. Esta descripción se realiza en alto
nivel sin incluir  demasiados detalles. 

La descripción de un algoritmo en lenguaje natural puede tener  ambigüedades y ser


extensa, y para ello se emplean técnicas formales de  descripción de algoritmos, como
diagramas de flujo y pseudocódigos. Estas   representaciones son más estructuradas
en comparación con el uso del  lenguaje natural, pero, a su vez, son independientes de
los lenguajes de   programación. Por último, se tiene que traducir la representación
formal del  algoritmo a una implementación en algún lenguaje de programación.  

4.2. Fases en la resolución de problemas 


Para resolver un problema mediante la aplicación de un programa deben  tenerse en
cuenta las siguientes fases o etapas: 

Análisis del problema: debe definirse cuál es el resultado o la solución  esperada,


los datos de entrada y qué debe hacer el programa para llegar  a la solución. 
Diseño del algoritmo: se diseña el algoritmo que permitirá resolver el  problema. 
Codificación: se escribe el programa a partir del algoritmo diseñado  previamente,
utilizando un lenguaje de programación. El diseño del  algoritmo es independiente
del lenguaje de programación que se utilice  para implementar el programa. 
Compilación y ejecución: el programa fuente debe ser traducido a   lenguaje
máquina para la posterior ejecución de cada una de las  instrucciones por parte
del procesador de la computadora. 
Verificación y depuración: se comprueba que el programa obtenga los  resultados
esperados con una amplia variedad de datos de entrada. La  depuración consiste
en identificar y corregir los posibles errores que  puedan encontrarse. 
Documentación: deben describirse los pasos del proceso de resolución   del
problema e incluir diagramas de flujo, manuales de usuario,   definición de
requerimientos, etcétera. 
Mantenimiento: el programa debe actualizarse y modificarse siempre   que sea
necesario, para cumplir con las necesidades de cambios de los   usuarios. Para
facilitar el proceso de mantenimiento, es muy importante   contar con
documentación clara y precisa.

4.3. Diseño de algoritmos 


Para resolver un problema mediante un algoritmo, se puede recurrir a   distintas
técnicas que permiten reducir la complejidad en el diseño del   algoritmo. Una de las
técnicas más conocidas es la de divide y vencerás. Esta  implica dividir el problema en
partes más pequeñas, ya que cada una de  estas partes es más fácil de resolver. Esta
subdivisión en problemas más   pequeños se puede realizar tantas veces como sea
necesario con cada una   de las partes, hasta el punto en el que obtener la solución
para cada una de  las partes no sea una tarea compleja. Una vez que se obtienen las
soluciones  a cada subproblema, estas se combinan para dar una solución al problema
original de mayor complejidad. 

A medida que se avanza en la descomposición del problema original en  subproblemas


más pequeños, se amplían los detalles de la descripción del   algoritmo que permite
resolver el problema original. Este tipo de diseño se   denomina también diseño
descendente, y consiste en refinar el algoritmo  por cada división que se realiza de las
partes para agregar, de esta forma, mayores detalles en los pasos del algoritmo. 

Como ejemplo de un problema, pensemos en el cálculo del promedio de tres  notas y


la definición de la condición final de un alumno de acuerdo con el   promedio. Este
problema se puede dividir en los subproblemas que indica la  siguiente figura. 

Figura 6: Ejemplo de divide y vencerás 

Fuente: Elaboración propia

Como principales ventajas de la aplicación de esta técnica de diseño pueden


 mencionarse: 

Comprensión más fácil del problema. 


Mayor facilidad para resolver problemas complejos. 
Mayor facilidad para analizar y mejorar la eficiencia del algoritmo. ∙ Realizar
modificaciones en algunas de las partes del algoritmo es más  fácil. 
Mayor facilidad para verificar el problema por medio de sus partes o  módulos. 

4.4. Representación de algoritmos 


4.4.1. Diagrama de flujo 

Un diagrama de flujo es una forma de representar gráficamente un   algoritmo. Estos


diagramas utilizan una serie de símbolos con significados   especiales y son la
representación gráfica de los pasos de un proceso. Estos  símbolos están conectados
mediante el uso de flechas que indican la  secuencia de los pasos del algoritmo. Para
evitar ambigüedades en la   interpretación de los símbolos, estos han sido
estandarizados mediante   normas ANSI (American National Standards Institute). Un
diagrama de flujo  es una herramienta importante para facilitar la comprensión de los
  algoritmos, especialmente para aquellos que tienen mayor complejidad o   extensión.
La Figura 7 indica algunos de los símbolos utilizados en diagramas  de flujo.

Figura 7: Figuras utilizadas en diagramas de flujo 


Fuente: Elaboración propia

Ejemplos de algoritmos representados con diagramas de flujo 

Ejemplo 1: realizar un diagrama de flujo que determine y muestre por   pantalla los
números pares entre 2 y 100 (inclusives). 
Fuente: Elaboración propia

Ejemplo 2: realizar un diagrama de flujo que permita el ingreso de 10   números


enteros y muestre por pantalla solamente los números positivos   que se hayan
ingresado. 
Fuente: Elaboración propia

Ejemplo 3: realizar un diagrama de flujo que permita intercambiar los  valores de dos
variables numéricas ingresadas por teclado. 
Fuente: Elaboración propia

4.4.2. Pseudocódigo 

El pseudocódigo es otra forma de representar un algoritmo utilizando  semejanzas con


la estructura de un lenguaje de programación, pero sin   alejarse de algunas
convenciones del lenguaje natural. De allí proviene el   término pseudocódigo (falso
código). El pseudocódigo define una estructura   intermedia entre la descripción de
algoritmos en lenguaje natural y la  descripción en lenguajes de programación. Utiliza
palabras que facilitan la  lectura humana y aplica un orden y reglas parecidas a las de
un lenguaje de programación. 

Ejemplos de algoritmos representados con pseudocódigo 


Ejemplo 1: realizar el pseudocódigo que determine y muestre por pantalla  los números
pares entre 2 y 100 (inclusives). 

algoritmo Numeros_Pares 

var 

entero: suma 

inicio 

suma 🡨 0 

repetir 

suma 🡨 suma + 2 

escribir(suma) 

hasta-que suma >= 100 

fin 

Ejemplo 2: realizar el pseudocódigo que permita el ingreso de 10 números  enteros y


muestre por pantalla solamente los números positivos que se  hayan ingresado. 

algoritmo Numeros_positivos 

var 

entero: cantidad, num 

inicio 

cantidad 🡨 1 

repetir 

leer(num) 

si num > 0 entonces 

escribir(num) 

fin-si 

cantidad 🡨 cantidad + 1 

hasta-que cantidad > 10 

fin
Ejemplo 3: realizar el pseudocódigo que permita intercambiar los valores de   dos
variables numéricas ingresadas por teclado. 

algoritmo Intercambio_variables 

var 

entero: A, B, aux 

inicio 

leer(A,B) 

aux 🡨 A 

A 🡨 B 
B 🡨 aux 

escribir(A,B) 

fin

Referencias
Joyanes Aguilar, L. (2008). Fundamentos de programación. Algoritmos,  estructura de
datos y objetos. Madrid, ES: McGraw-Hill.

También podría gustarte