Anda di halaman 1dari 21

Sistemas de

Procesamiento de
Información y
Algoritmos

Programación
Lógica

1
1. Sistemas de procesamiento
de informació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.

2
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

Entrada PROCESO Salida

Fuente: elaboración propia

3
1.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:

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.

4
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.

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.

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 puede 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.

5
Figura 3: Intérprete

Programa
fuente

Intérprete

Traducción y
ejecución

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.

6
Figura 4: Compilador

Programa
fuente

Compilador

Programa
objeto

Montador

Programa
ejecutable en
lenguaje máquina
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.

7
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

8
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.

9
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.

10
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

11
dato esperado es numérico y los operandos deben ser valores numéricos
también.

12
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:

 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.
 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.

13
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.

14
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

15
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.

16
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

17
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

18
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

19
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

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

21

Anda mungkin juga menyukai