Logo Studenta

CN_06_Ordenadores y Algoritmos

¡Este material tiene más páginas!

Vista previa del material en texto

CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 1 
Introducción a los ordenadores 
Un ordenador (figura 1.1) es una máquina que acepta información de entrada 
(datos de entrada), la procesa de acuerdo con un conjunto de instrucciones 
almacenado en su memoria y produce resultados (datos de salida). 
 
El ordenador trabaja con dos tipos de información diferentes: 
1. Datos: elementos sobre los que actúan las instrucciones del programa, 
bien como entrada o como resultado de las operaciones. 
2. Instrucciones: indican al computador qué es lo que tiene que hacer con 
los datos. 
Las instrucciones y los datos se encuentran almacenados en la memoria del 
computador. El procesador recoge y ejecuta una a una las instrucciones. Estas 
instrucciones implican operaciones sobre los datos que se encuentran en 
memoria. 
 
Un aspecto muy importante de los ordenadores digitales es que trabajan con 
información binaria. Tanto las instrucciones como los datos están codificados en 
el sistema binario. El diseño de un sistema informático resulta más fácil, su 
realización menos compleja y su funcionamiento más fiable si se utilizan sólo dos 
valores o estados posibles para las variables físicas que representan la 
información en el interior del computador. Estos estados o valores se representan 
conceptualmente con el 0 y el 1, y corresponden a dos niveles de tensión, dos 
situaciones de una lámpara, etc. Entonces, la unidad más elemental de 
información es un valor binario conocido como bit (binary digit). 
La capacidad de almacenamiento de información de un computador o de un 
soporte de información se suele medir en bytes, un byte consta de 8 bits. Como 
esta unidad es pequeña se suelen utilizar los siguientes múltiplos: 
 
El soporte físico o hardware de un ordenador involucra un conjunto de circuitos 
electrónicos, cables y otros elementos físicos. Está compuesto de un conjunto de 
bloques lógicos gobernados por controladores y conectados entre sí por un 
sistema de buses (figura 1.3). 
El soporte lógico o software de un ordenador es el conjunto de programas 
ejecutables por el computador. Se entiende por programa un conjunto ordenado 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 2 
de instrucciones que se le proporciona al computador en el que se indica las 
operaciones o tareas que se desea que realice. 
 
A continuación, se describen los elementos básicos de 
la arquitectura de un ordenador según el modelo de 
Von Neumann (figura 1.3): 
a) Memoria: en la memoria se almacena el 
programa (conjunto de instrucciones y datos). 
Internamente la memoria se o rganiza en 
posiciones de bytes (8 bits). Las posiciones se 
identifican por medio de su dirección. En la 
imagen de la figura 1.3 se puede ejemplifica 
una memoria de 16 posiciones, entonces para 
poder direccionar a cada una de ellas se 
necesitarán 4 bits (con esa cantidad de bits se 
pueden representar los números enteros 
comprendidos entre 0 y 15). 
La memoria está dividida en dos partes. En la primera parte se almacenan 
los datos y en la segunda parte se almacenan las instrucciones que se 
deben realizar sobre los datos: 
1. Zona de datos: cada dato ocupa una posición de memoria (1 byte). El 
ordenador solo trabaja con números enteros con signo. Usando esta 
representación el primer bit indica el signo del número (0 positivo y 1 
negativo) y los otros 7 bits representan la magnitud del número en el 
sistema binario. Con 7 bits se pueden representar las magnitudes 
enteras situadas entre 0 y 127 (27 - 1). Teniendo en cuenta el signo, 
el ordenador de este ejemplo puede trabajar con números enteros 
situados en el rango [-127, + 127]. 
2. Zona de instrucciones: las posibles instrucciones que interpreta el 
computador son: 
 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 3 
Las operaciones aritméticas (ADD, SUB, MUL y DIV) utilizan los 
registros como espacio para almacenar los operandos y el resultado 
de la operación. Los registros son almacenamientos temporales 
situados en el procesador. El ordenador tiene 2 registros R0 y R1, 
identificados por 0 y 1 respectivamente. Por ello, si por ejemplo se 
quiere sumar dos posiciones de memoria, primero se copiarán las 
posiciones de memoria en los 2 registros (2 instrucciones LOAD), 
luego se realizará la operación de suma (instrucción ADD) y, por 
último, se almacenará el contenido del registro resultado en una 
posición de memoria (1 instrucción STORE) 
Las posiciones de memoria de la zona de instrucciones no representan 
datos, sino instrucciones. Por ello, las instrucciones anteriores están 
codificadas en binario, esto es, cada instrucción tiene asociado un 
código de tres bits que la identifica. Además, se han de codificar 
también los operandos de las instrucciones. Los posibles significados 
de los 8 bits de una posición de memoria de la zona de instrucciones 
se muestran en la figura 1.4. 
 
b) Procesador: en el procesador se interpretan las instrucciones y se realizan 
las operaciones. Esta unidad recoge, una tras otra, las instrucciones 
máquina almacenadas en memoria y genera las señales de control 
necesarias para que el ordenador funcione y ejecute las instrucciones 
leídas. Las operaciones se realizan en la unidad aritmético-lógica bajo la 
directriz de la unidad de control. La unidad aritmético-lógica realiza 
operaciones sobre los dos registros y almacena el resultado en uno de 
ellos. Se denomina unidad central de proceso o procesador al conjunto de 
la unidad de control, los registros y la unidad aritmético-lógica, esto es, al 
bloque encargado de ejecutar las instrucciones. Se suelen usar las siglas 
UCP o CPU (Central Processing Unit) para denominar este conjunto. 
Con esta arquitectura podemos suponer como funciona el software que le indica 
las operaciones a realizar mediante un ejemplo muy sencillo. La programación 
de los ordenadores se realiza normalmente usando un lenguaje de alto nivel (C, 
Pascal, Fortran, Java, etc) más cercano al usuario. Los compiladores (y los 
intérpretes) recogen estos programas y generan el código máquina que 
interpreta directamente la unidad de control. Por ejemplo, para realizar la 
operación (A + B)*A usando los valores A = 3 y B = 6, el compilador del 
ordenador en este ejemplo generaría el código máquina mostrado en la figura 
1.5. 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 4 
Interconexión de Componentes 
La arquitectura de Von Neumann representada en la figura 1.3 está incompleta. 
Hasta ahora hemos visto los diferentes bloques funcionales que constituyen un 
ordenador. Sin embargo, para que estas partes formen el sistema deben 
conectarse entre sí de forma organizada. Las unidades funcionales que 
constituyen el computador se comunican por conjuntos de conexiones 
denominados buses. La interconexión de unas unidades con otras es variante, 
dependiendo de la estructura o configuración concreta del ordenador. En general, 
el ordenador cuenta con un bus para conectar el procesador, la memoria y los 
controladores de las unidades de 
entrada/salida. El conjunto de todos 
los buses que posee el ordenador se 
denomina bus del sistema. 
Normalmente, la conexión de las 
unidades de entrada/salida al bus 
del sistema se realiza por medio de 
controladores (también 
denominados drivers). Estos 
controladores adaptan las 
características de los periféricos 
(unidades de entrada/salida y de 
memoria masiva) a las del bus del 
sistema, estableciendo unos 
protocolos de comunicacionespara 
controlar el flujo de información de forma adecuada y eficaz. De este modo se 
puede realizar la transferencia de información cargando datos y programas en la 
memoria y sacando resultados impresos. 
 
 
Software de Tratamiento 
El software de tratamiento es el conjunto de programas que los usuarios utilizan 
para resolver sus problemas de procesamiento de información o realizar sus 
aplicaciones. Estas aplicaciones pueden ser cálculos científicos, aplicaciones de 
gestión administrativa, almacenamiento y recuperación de la información, etc. 
Este tipo de software a su vez se puede clasificar en dos tipos: 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 5 
• Software de programación: programas o utilidades que facilitan la 
construcción de las aplicaciones de los usuarios. Incluye herramientas 
como compiladores, intérpretes, editores de texto, módulos de gestión de 
archivos y cargadores-montadores. 
• Software de aplicación: incluye programas relacionados con aplicaciones 
específicas, como pueden ser procesadores de textos, bibliotecas de 
programas para problemas estadísticos y matemáticos, sistemas para 
administración de archivos, sistemas para administración de bases de 
datos, herramientas de cálculo numérico, etc. Aquí se incluyen los 
programas realizados por los usuarios. 
Parámetros característicos del ordenador digital 
Los parámetros que se suelen emplear para caracterizar las prestaciones de un 
ordenador son los siguientes: 
• Frecuencia de reloj. La unidad de control contiene un reloj o generador de 
impulsos que sincroniza todas las operaciones elementales del ordenador. 
El periodo de la señal se denomina tiempo de ciclo y está comprendido 
entre nanosegundos y varios microsegundos, dependiendo del 
procesador. La frecuencia de reloj, que se mide en millones de 
ciclos/segundo o MegaHerzios (MHz). Es un parámetro que en parte 
determina la velocidad de funcionamiento de un ordenador. Es importante 
reseñar que el aumento de MHz no supone un incremento directo de las 
prestaciones. No se trata de tener muchos MHz sino de emplearlos 
adecuadamente. 
• Ancho de palabra. Expresa el número de bits que maneja en paralelo el 
ordenador. Cuanto mayor sea el ancho de palabra mayor será la precisión 
de la representación numérica del ordenador. La mayoría de los 
ordenadores actuales trabajan con 32 o 64 bits. 
• Memoria RAM. Expresa el tamaño de la memoria principal del ordenador. 
Los tamaños de memoria varían mucho dependiendo del tipo de 
ordenador. 
• Memoria secundaria. Expresa el tamaño del disco duro del ordenador. Al 
igual que la memoria RAM, su tamaño varía mucho en función del tipo de 
ordenador. 
La capacidad de almacenamiento de los ordenadores personales actuales suele 
ser del orden de Gbytes. 
• MIPS (millones de instrucciones por segundo). Expresa la velocidad de 
ejecución de las instrucciones máquina. La diferencia en el repertorio de 
instrucciones máquina de distintos procesadores obliga a tener cuidado al 
compararlos usando esta métrica. 
• MFLOPS (millones de operaciones en coma flotante por segundo). Expresa 
la velocidad de cálculo del computador. Los ordenadores trabajan en el 
rango de centenas de MFLOPS y de centenas de GFLOPS. 
• Programas de test. Debido a que las medidas en MIPS o MFLOPS no 
permiten comparar ordendaores con distintas arquitecturas, cada vez es 
más frecuente el uso de programas de test en el proceso de evaluación. 
Estos programas suelen estar formados por partes de aplicaciones típicas 
codificadas en un lenguaje de alto nivel. Las métricas proporcionadas por 
estos tests dan un valor para el rendimiento del ordenador mucho más 
fiable y deben ser tenidas más en cuenta que los rendimientos pico en 
MIPS o MFLOPS proporcionados por el fabricante. El test más utilizado 
actualmente para medir el rendimiento de los procesadores está formado 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 6 
por las pruebas de referencia SPEC (Systems Performance Evaluation 
Cooperative). Las SPECint son unas pruebas que miden las prestaciones 
en aplicaciones con enteros y las SPECfp son pruebas que miden las 
prestaciones sobre números reales. Estas pruebas intentan medir de 
manera aproximada el rendimiento que pueden proporcionar los 
procesadores con aplicaciones reales. 
Niveles de abstracción del uso de ordenadores 
El ordenador digital es uno de los sistemas más complejos construidos por el 
hombre y su complejidad aumenta a un ritmo cada vez más rápido. Su estudio 
se divide en una serie de niveles que hacen abstracción de los niveles inferiores 
para centrarse en los detalles relevantes en cada nivel. Los niveles más bajos 
corresponden a menor grado de abstracción y los más altos a grados de 
abstracción más elevados. Cada nivel se apoya en el inmediatamente inferior, el 
estudio y desarrollo del ordenador en un nivel se realiza empleando módulos 
básicos y un leguaje, proporcionados por el nivel inmediatamente inferior. En la 
figura 1.6 se muestran los niveles más generales en los que se suele estudiar el 
ordenador, y los módulos básicos que cada nivel proporciona al nivel superior 
contiguo. 
 
Figura 1.6. Niveles de Abstracción de un ordenador 
a) Aplicaciones. Las aplicaciones son programas ejecutables que nos ayudan 
a desarrollar tareas específicas. Existen aplicaciones de procesador de 
textos, como WordPerfect, Word, etc., o herramientas matemáticas como 
MATLAB, Mathematica, etc. A este nivel solo es necesario conocer la 
aplicación con la que se trabaja y en absoluto el funcionamiento interno 
del ordenador. De hecho, se tiende cada vez más a que el usuario final de 
las aplicaciones se desentienda cada vez más de otros conocimientos de 
informática y pueda centrarse en resolver su problema con el mínimo 
esfuerzo posible. Las aplicaciones se crean por medio de algún lenguaje 
de alto nivel. 
b) Lenguajes de Alto Nivel. Este nivel se presenta al usuario como una 
máquina virtual que le permite codificar sus algoritmos por medio de un 
lenguaje de programación próximo al nivel de especificación del problema. 
Mediante lenguajes cercanos al usuario podemos especificar programas 
que ejecuta el ordenador sin que el usuario conozca detalle alguno sobre 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 7 
el hardware, por tanto, los programas son portables. El compilador 
traduce estos programas a código máquina que interpreta directamente la 
unidad de control. Ejemplos de lenguajes de alto nivel son C, Pascal, 
Fortran, JAVA, etc. 
c) Sistema Operativo. El sistema operativo nos facilita una serie de rutinas 
de control para gestionar el ordenador y nos aporta un entorno para 
ejecutar programas. Para ello se proporciona una serie de funciones para 
la gestión de la memoria virtual, sistemas de archivos, asignación de 
recursos, procesamiento paralelo, etc. En este nivel también se 
proporcionan los programas encargados de realizar la traducción entre los 
programas de alto nivel y el código máquina: los compiladores. Los 
compiladores realizan así mismo la optimización del código en función de 
la arquitectura presentada en el nivel inferior. Las funciones del sistema 
operativo se implementan por medio de las instrucciones máquina 
proporcionadas por el nivel inferior. 
d) Arquitectura. Este nivel estudia la arquitectura del repertorio de 
instrucciones que incluye: el repertorio de instrucciones, los modos de 
direccionamiento y el modelo de programación o registros visibles por el 
usuario; así como la programación de los dispositivos de Entrada/Salida 
(E/S) y el control de las comunicacionesentre los diferentes subsistemas. 
Este es el nivel que actúa como interfaz entre el usuario, generalmente 
por medio del compilador, y el hardware del ordenador, y en él se recogen 
los bloques fundamentales del ordenador para implementar un diseño que 
cumpla las especificaciones arquitectónicas. 
e) Estructura. Aquí se trata el diseño de la estructura del ordenador a nivel 
de sus bloques fundamentales. Aparece el sistema secuencial formado por 
los bloques componentes del computador: procesador memoria, buses, 
controladores. El objetivo principal es diseñar el control del ordenador. Se 
usan los bloques básicos proporcionados por el nivel contiguo inferior para 
construir los bloques fundamentales que forman el computador, su 
control, y así diseñar un computador que cumpla las especificaciones 
arquitectónicas. 
El control microprogramado permite modificar el aspecto del nivel 
inmediatamente superior (lenguaje máquina) a la vez que mantiene la 
misma realización digital. Por ejemplo, se pueden añadir nuevas 
instrucciones en el lenguaje máquina mediante la inclusión en este nivel 
del microprograma capaz de implementarlas. 
f) Tecnología. En este nivel se estudian los circuitos digitales que componen 
los bloques básicos que forman el ordenador. Se diseñan bloques 
combinacionales y secuenciales básicos como registros, módulos de 
memoria o multiplexores por medio de los bloques básicos del diseño 
lógico, como las puertas y biestables construidos por medio de 
transistores, diodos, etc. Implementados en los circuitos integrados. 
 
Introducción a la Resolución de Problemas con Algoritmos 
El objetivo primordial de cualquier usuario de un ordenador es demandar algún 
tipo de proceso o cálculo aprovechándose de su velocidad. Para realizar esta 
acción tenemos que comunicamos de algún modo con el ordenador. Los 
ordenadores no son capaces de analizar problemas, únicamente realizan una 
tarea de acuerdo con el modo en que la tarea ha sido especificada. 
La descripción de la tarea se realiza por medio de un algoritmo. Este algoritmo 
debemos transmitírselo al ordenador usando un lenguaje que sea capaz de 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 8 
interpretar. El lenguaje que entiende el ordenador es el código máquina. El 
proceso de programación de un ordenador cuando se usa este lenguaje es 
bastante tedioso y propenso a errores. Por ello, nos valemos de otros lenguajes 
más cercanos al nuestro, como son los lenguajes de alto nivel. De este modo 
dejamos al compilador el trabajo de traducir los programas de alto nivel a 
programas en código máquina. 
Normalmente, para resolver un problema grande lo dividimos en unidades más 
pequeñas y manejables. Se usa la técnica de refinamiento o diseño descendente 
para dividir la tarea o problema en pasos cada vez más sencillos, hasta que se 
puedan sustituir directamente por las sentencias del lenguaje de alto nivel que 
se utiliza. En estas especificaciones, en diferentes niveles de refinamiento, 
únicamente se deben emplear las estructuras básicas de la programación. De 
este modo es muy fácil traducir el algoritmo en un programa empleando un 
lenguaje de alto nivel. Una vez que tenemos el programa se ha de realizar una 
serie de operaciones para obtener el código máquina ejecutable. 
Se suelen agrupar los conjuntos de sentencias que desarrollan una misma tarea 
en un módulo independiente cuyas interacciones con el exterior estén 
delimitadas. Estos módulos independientes o subprogramas pueden ser 
subrutinas (procedimientos) o funciones. Este empaquetamiento tiene múltiples 
ventajas. Una de ellas es que se pueden crear bibliotecas de subrutinas que 
resuelven eficientemente los problemas numéricos más comunes. De este modo, 
se acelera la escritura de códigos y se reduce el riesgo de cometer errores. 
Algoritmos 
A pesar del desarrollo de la Inteligencia Artificial y de los Sistemas Expertos; 
tales como Machine Learning o el Deep Learning, el computador no es un sistema 
inteligente y, en general, no es capaz de analizar un problema y darnos una 
solución. Para que la máquina realice una tarea es necesario describir cómo debe 
realizarla, paso a paso (esto si utilizamos el paradigma imperativo para el 
desarrollo de programas), y en términos de operaciones simples que puede 
ejecutar. Las operaciones que puede realizar un ordenador son, por ejemplo, 
sumar, restar o transferir datos. A tal descripción se le denomina algoritmo. 
Algoritmo: un algoritmo es un método para resolver un problema, que consiste en la realización 
de un conjunto de pasos lógicamente ordenados tal que, partiendo de ciertos datos de entrada, 
permite obtener ciertos resultados que conforman la solución del problema. Así, como en la 
vida real, cuando tenemos que resolver un problema, o lograr un objetivo, por ejemplo: “Tengo 
que atarme los cordones”, para alcanzar la solución de ese problema, realizamos un conjunto 
de pasos, de manera ordenada y secuencial. Es decir, podríamos definir un algoritmo para 
atarnos los cordones de la siguiente forma: 
1. Ponerme las zapatillas. 
2. Agarrar los cordones con ambas manos. 
3. Hacer el primer nudo. 
4. Hacer un bucle con cada uno de los cordones. 
5. Cruzar los dos bucles y ajustar. 
6. Corroborar que al caminar los cordones no se sueltan y la zapatilla se encuentra 
correctamente atada. 
 
 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 9 
El concepto de algoritmo es fundamental en el proceso de programación de un 
ordenador, pero si nos detenemos a observar a nuestro alrededor, así como el 
ejemplo anterior podemos descubrir muchos otros: nos están dando un algoritmo 
cuando nos indican la forma de llegar a una dirección dada, seguimos algoritmos 
cuando conducimos un automóvil o cualquier tipo de vehículo. Todos los procesos 
de cálculo matemático que normalmente realiza una persona en sus tareas 
cotidianas, como sumar, restar, multiplicar o dividir, están basados en algoritmos 
que fueron aprendidos en la escuela primaria. Como se ve, la ejecución de 
algoritmos forma parte de la vida moderna. 
Por otro lado, la complejidad de los distintos problemas que podamos abordar 
puede variar desde muy sencilla a muy compleja, dependiendo de la situación y 
la cantidad de elementos que intervienen. En casos de mayor complejidad suele 
ser una buena solución dividir al problema en diferentes subproblemas que 
puedan ser resueltos de manera independiente. De esta forma la solución final 
al problema inicial será determinada por las distintas soluciones de los problemas 
más pequeños cuya resolución es más sencilla. 
Luego de haber definido el algoritmo necesario, se debe traducir dicho algoritmo 
en un conjunto de instrucciones, entendibles por la computadora, que le indican 
a la misma lo que debe hacer; este conjunto de instrucciones conforma lo que se 
denomina, un programa. 
Para escribir un programa se utilizan lenguajes de programación, que son 
lenguajes que pueden ser entendidos y procesados por el ordenador. Tanto el 
lenguaje de programación como el ordenador son los medios para obtener un 
fin: conseguir que el algoritmo se ejecute y se efectué el proceso 
correspondiente. 
Características de los algoritmos 
Las características fundamentales que debe cumplir todo algoritmo son: 
• Un algoritmo debe ser preciso e indicar el orden de realización de cada 
paso. 
• Un algoritmo debe estar específicamente definido. Es decir, si se ejecuta 
un mismo algoritmo dos veces, con los mismos datos de entada, se debe 
obtener el mismo resultado cada vez. 
• Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar 
en algún momento; o sea, debe tener un numero finito de pasos. Debe 
tener un inicio y un final. 
• Un algoritmodebe ser correcto: el resultado del algoritmo debe ser el 
resultado esperado. 
• Un algoritmo es independiente tanto del lenguaje de programación en el 
que se expresa como de la computadora que lo ejecuta. 
Eficiencia de algoritmos 
En muchos casos, el algoritmo que resuelve un problema no es único. Por 
ejemplo, estudiaremos diferentes métodos para resolver sistemas de ecuaciones 
lineales. 
Por ello, normalmente interesa no sólo encontrar un algoritmo, sino que éste sea 
suficientemente eficiente. Es posible realizar comparaciones entre algoritmos que 
resuelven el mismo problema. La eficiencia de un algoritmo numérico suele 
medirse por los siguientes factores: 
• El tiempo de ejecución o complejidad computacional. Generalmente no se 
comparan dos tiempos, sino la variación de la complejidad respecto al 
tamaño del problema. Por ejemplo, en la suma de dos vectores de longitud 
N la complejidad varía como O(N), esto es, de orden N. Esto significa que, 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 10 
si la longitud de los vectores se multiplica por dos, el tiempo consumido 
en la suma vectorial también se multiplica por dos. 
• Los recursos que se necesitan para implementar el algoritmo. En concreto 
se suele considerar el uso de la memoria por parte del algoritmo. Al igual 
que en el caso de la complejidad, se suelen comparar variaciones. 
• Errores numéricos. Los métodos numéricos llevan asociados una serie de 
errores. Estos errores se deben tener en cuenta cuando se comparan 
diferentes métodos para resolver el mismo problema numérico. Los 
errores que se estudiarán son: redondeo (los computadores trabajan con 
un número finito de dígitos), truncamiento (debido a la aproximación de 
un problema continuo por un problema discreto) y convergencia (las 
soluciones generadas por los métodos iterativos son buenas para el 
criterio de convergencia). 
Un ejemplo de método muy ineficiente es el método de Cramer para resolver 
sistemas de ecuaciones. Si este método se emplea para resolver un sistema de 
20 ecuaciones, en un ordenador donde una operación aritmética básica consume 
un microsegundo, el tiempo que requiere para obtener el resultado excedería el 
millón de años. En cambio, si empleamos el método de eliminación gaussiana se 
requerirían 0,005 segundos. Este ejemplo ilustra muy bien el hecho de que hay 
que pensar detenidamente qué método emplear en cada situación. 
Diseño de Problema 
Para diseñar un algoritmo se suele emplear la técnica “divide y vencerás” 
(refinamiento o diseño descendente), que divide un problema grande en 
unidades más pequeñas y manejables. Siguiendo esta técnica, se divide una 
tarea en partes más pequeñas que se pueden resolver individualmente. Se 
pueden emplear únicamente las tres estructuras básicas de la programación para 
expresar el algoritmo en cada nivel de refinamiento. De este modo, la traducción 
de un algoritmo a un programa es inmediata usando un lenguaje de alto nivel. 
Los problemas que pretendemos resolver son demasiado difíciles de analizar 
como para dividirlos en pasos mentalmente. Por ello se usa la técnica “divide y 
vencerás” (refinamiento o diseño descendente). El problema global se divide en 
fases independientes y, a continuación, se analizan estas fases sin tener en 
cuenta el resto. Esto se hace de un modo recursivo hasta que las fases se pueden 
describir por medio de sentencias del lenguaje de programación. 
Para entender esta técnica vamos a estudiar el siguiente problema: 
 
El bloque anterior expone el problema que se pretende resolver, pero no 
especifica los pasos básicos que lo resuelvan. Esta tarea debemos dividirla en 
pasos más sencillos 
 
La tarea 1.2 es todavía muy ambigua, debemos seguir refinándola 
 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 11 
Pero aún no hemos terminado. Varios de estos pasos en este algoritmo implican 
operaciones más detalladas que deben formalizarse 
 
Supongamos que además queremos escribir en pantalla un mensaje especial si 
el resultado es cero 
 
El método por el cual este algoritmo fue desarrollado es importante: se comenzó 
con un enunciado genérico de la solución del problema y se continuó hasta 
encontrar el algoritmo final, para lo que se incrementaron sistemáticamente los 
detalles. 
¿Cuándo un nivel de detalle es el adecuado? Esto se conoce en función del 
lenguaje de programación que usemos para implementarlo. Los lenguajes de 
programación. Por ejemplo, si implementamos un algoritmo numérico con Matlab 
o Scilab, el nivel de refinamiento del algoritmo es inferior al alcanzado con C, 
Java o Fortran. Por ejemplo, en el caso estudiado quedaría así 
 
 
 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 12 
 
La complejidad de este algoritmo es de orden O(N), donde N es el número de 
componentes del vector. Esto significa que, si con una longitud de vector el 
algoritmo consume cierto tiempo, con un vector doble en longitud, el tiempo de 
ejecución se multiplica también por 2. Debemos tener en cuenta que esto es una 
aproximación porque si duplicamos la longitud del vector, solo la sección del 
algoritmo denominada 1.2.2 será la que consuma el doble de tiempo. El resto del 
algoritmo consumirá el mismo tiempo. Además, al duplicarse la cantidad de datos 
la jerarquía de memoria puede ser explotada de modo más o menos eficiente. 
Pero si deseamos formalizar el método aplicado para el desarrollo de cualquier 
algoritmo podemos hacerlo de la siguiente manera: 
Dado un problema, para plantear un algoritmo que permita resolverlo, es 
conveniente entender correctamente la situación problemática y su contexto, 
tratando de deducir del mismo los elementos ya indicados (entradas, procesos y 
salida). En este sentido entonces, para crear un algoritmo: 
1. Comenzar identificando los resultados esperados, porque así quedan claros los 
objetivos a cumplir. 
2. Luego, individualizar los datos con que se cuenta y determinar si con estos 
datos es suficiente para llegar a los resultados esperados. Es decir, definir los 
datos de entrada con los que se va a trabajar para lograr el resultado. 
3. Finalmente, si los datos son completos y los objetivos claros, se intentan 
plantear los procesos necesarios para pasar de los datos de entrada a los datos 
de salida. 
Ejemplo Guiado: Obtención del área de un rectángulo 
 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 13 
Desarrolle un algoritmo que permita calcular el perímetro y el 
área de un triángulo dado como entradas el valor de los 3 
lados. 
 
Eficiencia del Método aplicado 
El problema planteado sobre las sumas de los elementos de un vector también 
puede resolverse usando el método de las sumas parciales. 
Por ejemplo, si el vector tiene 8 componentes, es decir 
𝑣𝑖 = 1,… ,8 
Calculamos en primer lugar las cuatro sumas parciales 
𝑣1 + 𝑣2 = 𝑤1 
𝑣3 + 𝑣4 = 𝑤2 
𝑣5 + 𝑣6 = 𝑤3 
𝑣7 + 𝑣8 = 𝑤4 
A continuación, realizamos las sumas 
𝑤1 +𝑤2 = 𝑤1 
𝑤3 +𝑤4 = 𝑤2 
Y por último concluimos con 
𝑤1 +𝑤2 
para obtener la suma global. 
El número de operaciones o complejidad del método es muy parecido al caso 
anterior, pero los requisitos de memoria son superiores porque necesita un vector 
adicional 𝑤 donde almacenar las sumas parciales. Sin embargo, este método se 
suele emplear más frecuentemente porque se produce una menor acumulación 
de errores de redondeo. Además, es más apto para ser implementado en un 
ordenador paralelo, con varios procesadores,dado que la tarea fundamental (las 
sumas parciales) puede repartirse en subtareas independientes. 
Las estructuras de control 
La programación basada en el paradigma imperativo (el que usaremos en la 
asignatura sin entrar en detalles) describe una metodología para diseñar y 
desarrollar programas. 
Según este paradigma el programa se considera como el texto de un libro; el 
programa ha de estar bien redactado, con elegancia y legibilidad. 
El programa ha de ser fácil de leer y cualquier programador deber ser capaz de 
entender fácilmente programas desarrollados por otros. 
Está comprobado que las técnicas de este paradigma facilitan notablemente la 
tarea de programar. 
Un programa escrito con buen estilo da lugar a un menor número de errores y 
es más fácil de mantener y modificar en el futuro. 
Un programa puede ser escrito utilizando tres tipos de estructuras de control: 
a) secuenciales 
b) selectivas o de decisión 
c) repetitivas 
Las Estructuras de Control determinan el orden en que deben ejecutarse las 
instrucciones de un algoritmo: si serán recorridas una luego de la otra, si habrá 
que tomar decisiones sobre si ejecutar o no alguna acción o si habrá repeticiones. 
Estructura secuencial 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 14 
Es la estructura en donde una acción (instrucción) sigue a otra de manera 
secuencial. Las tareas se dan de tal forma que la salida de una es la entrada de 
la que sigue y así en lo sucesivo hasta cumplir con todo el proceso. 
Esta estructura de control es la más simple, permite que las instrucciones que la 
constituyen se ejecuten una tras otra en el orden en que se listan. Por ejemplo, 
considérese el siguiente fragmento de un algoritmo: 
 
Representación en Diagrama de Flujos Representación en Pseudocodigo 
 
 
 
1.1. Operación 1 
2.1. Operación 2 
… 
 
En este fragmento se indica que se ejecute la operación 1 y a continuación la 
operación 2. 
Estructura selectiva 
Estas estructuras de control son de gran utilidad para cuando el algoritmo a 
desarrollar requiera una descripción más complicada que una lista sencilla de 
instrucciones. Este es el caso cuando existe un numero de posibles alternativas 
que resultan de la evaluación de una determinada condición. 
Este tipo de estructuras son utilizadas para tomar decisiones lógicas, es por esto 
por lo que también se denominan estructuras de decisión o alternativas. 
En estas estructuras, se realiza una evaluación de una condición y de acuerdo 
con el resultado, el algoritmo realiza una determinada acción. Las condiciones 
son especificadas utilizando expresiones lógicas. 
Las estructuras selectivas/alternativas pueden ser: 
• Simples 
• Dobles 
• Múltiples 
 
Alternativa Simple 
La estructura alternativa simple si-entonces (en inglés if-then) lleva a cabo una acción al 
cumplirse una determinada condición. La selección si-entonces evalúa la condición y: 
• Si la condición es verdadera, ejecuta la acción S1. 
• Si la condición es falsa, no ejecuta nada. 
En Diagrama de Flujos En pseudocódigo (español) En pseudocódigo (inglés) 
 
 
 
 
 
 
 
 
 
 
 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 15 
Ejemplo: 
Inicio 
numero ← 3 
Si (3 % 2 = 0) entonces 
El número es par 
Fin_si 
Fin 
Donde % representa el módulo, es decir el resto de dividir 3 por 2 y ← 
indica asignación, es decir que la variable número se le asigna el valor 3 
 
Alternativa Doble 
Existen limitaciones en la estructura selectiva simple, y se necesitará normalmente una 
estructura que permita elegir dos opciones o alternativas posibles, de acuerdo al 
cumplimiento o no de una determinada condición: 
• Si la condición es verdadera, ejecuta la acción S1. 
• Si la condición es falsa, ejecuta la acción S2. 
En Diagrama de Flujos En pseudocódigo 
(español) 
En pseudocódigo (inglés) 
 
 
 
 
 
 
 
 
 
 
 
 
Ejemplo: 
Inicio 
numero ← 3 
Si (3 % 2 <> 0) entonces 
El número es impar 
 Sino 
 El número es par 
Fin_si 
Fin 
 
Alternativa Múltiple 
Se utiliza cuando existen más de dos alternativas para elegir. Esto podría solucionarse por 
medio de estructuras alternativas simples o dobles, anidadas o en cascada. Sin embargo, se 
pueden plantear serios problemas de escritura del algoritmo, de comprensión y de legibilidad, 
si el número de alternativas es grande. 
En esta estructura, se evalúa una condición o expresión que puede tomar n valores. Según el 
valor que la expresión tenga en cada momento se ejecutan las acciones correspondientes al 
valor. 
En especial se debe destacar que también es posible indicar que acción se llevará a cabo 
cuando ninguna de las otras alternativas descriptas se cumpla. Esta alternativa se denomina 
genéricamente “alternativa por defecto” o “default”. 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 16 
En Diagrama de Flujos En pseudocódigo (español) 
 
 
 
 
 
 
 
 
Ejemplo: 
Inicio 
sueldo ← 100 
antigüedad ← 5 
Según sea antigüedad 
 5: sueldo ← sueldo + sueldo * 0,3 
 10: sueldo ← sueldo + sueldo * 0,5 
 Por defecto: sueldo * sueldo * 0,1 
Fin_según 
Fin 
 
 Donde * es el operador para indicar multiplicación. 
Estructura repetitiva o iterativa 
Durante el proceso de creación de programas, es muy común, encontrarse con 
que una operación o conjunto de operaciones deben repetirse muchas veces. 
Para ello es importante conocer las estructuras de algoritmos que permiten 
repetir una o varias acciones, un número determinado de veces. 
Las estructuras que repiten una secuencia de instrucciones un número 
determinado de veces se denominan BUCLES. Y cada repetición del bucle se llama 
iteración. 
Todo bucle tiene que llevar asociada una condición, que es la que va a determinar 
cuándo se repite el bucle y cuando deja de repetirse. 
Un bucle se denomina también lazo o loop. Hay que prestar especial atención a 
los bucles infinitos, hecho que ocurre cuando la condición de finalización del bucle 
no se llega a cumplir nunca. Se trata de un fallo muy típico, habitual sobre todo 
entre programadores principiantes. 
Las estructuras repetitivas/iterativas son: 
• Mientras, en inglés While 
• Hacer mientras o Repetir hasta, en inglés Do While 
• Para, en inglés for 
 
Estructura Mientras 
Esta estructura repetitiva “mientras”, es en la que el cuerpo del bucle se repite siempre que 
se cumpla una determinada condición. 
En Diagrama de Flujos En pseudocódigo (español) En pseudocódigo (inglés) 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 17 
 
 
 
 
 
 
 
 
 
 
 
 
Ejemplo: 
Inicio 
sumador ← 0 
contador ← 1 
Mientras (contador <= 5) hacer 
 sumador ← sumador + (contador * 2) 
 contador ← contador + 1 
Fin mientras 
Fin 
 
Estructura Hacer mientras 
Esta estructura es muy similar a la anterior, solo que a diferencia del While el contenido del 
bucle se ejecuta siempre al menos una vez, ya que la evaluación de la condición se encuentra 
al final. De esta forma garantizamos que las acciones dentro de este bucle sean llevadas a 
cabo, aunque sea una vez independientemente del valor de la condición. 
En Diagrama de Flujos En pseudocódigo (español) En pseudocódigo (inglés) 
 
 
 
 
 
 
 
 
 
 
Ejemplo: 
Inicio 
sumador ← 0 
contador ← 6 
Hacer 
 sumador ← sumador + (contador * 2) 
 contador ← contador - 1 
Mientras (contador >= 4) hacer 
Fin 
 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTODE ORDENADORES Y ALGORITMOS 
 
Página 18 
Estructura Repetir 
La estructura for es un poco más compleja que las anteriores y nos permite ejecutar un 
conjunto de acciones para cada elemento de una lista, o para cada paso de un conjunto de 
elementos. Su implementación depende del lenguaje de programación, pero en términos 
generales podemos identificar tres componentes: la inicialización, la condición de corte y el 
incremento 
En Diagrama de Flujos En pseudocódigo (español) 
 
 
 
 
 
 
Ejemplo 
Inicio 
cant_pares ← 0 
Para (numero ← 1; numero <=100; numero ← numero + 1) 
 Si (numero % 2 = 0) entonces 
 cant_pares ← cant_pares + 1 
 Fin_si 
Fin para 
Fin 
 
 
El programa es la traducción directa del modelado de un algoritmo en un nivel 
de refinamiento. Por ello, lo realmente importante y complicado es describir cómo 
se resuelve un problema por medio de un modelo de algoritmo. Del modelo se 
puede pasar rápidamente a cualquier lenguaje de alto nivel que implemente las 
estructuras básicas, como MATLAB, FORTRAN, Java o C. A lo largo de los apuntes 
se exponen los pseudocódigos de diferentes algoritmos numéricos y a 
continuación se implementan usando Scilab; sin embargo, no necesariamente 
estarán implementados de la forma más eficiente por cuanto el objetivo es 
mostrar la esencia del método. Escribimos, también los algoritmos modelados en 
pseudocódigo de modo que el lector pueda implementar rápidamente los 
métodos en otro lenguaje de alto nivel diferente. 
Características de un buen programa 
A pesar de que un algoritmo esté correctamente programado y resuelva el 
problema numérico para el que fue diseñado, es necesario implementar el código 
del mejor modo posible para que pueda ser fácilmente interpretado y actualizado 
por otro usuario. 
Los criterios que se deben seguir son los siguientes: 
 CÁLCULO NUMÉRICO – ING EN INFORMÁTICA – LIC EN SISTEMAS – ING EN MINAS 
FACULTAD DE INGENIERÍA 
Universidad Nacional de Jujuy 
FUNCIONAMIENTO DE ORDENADORES Y ALGORITMOS 
 
Página 19 
• Fiabilidad: el código no debe tener errores, debe resolver el problema 
numérico para el que ha sido creado. 
• Robustez: el código debe tener la capacidad de detectar errores en los 
datos introducidos. Esto es, debe ser capaz de detectar situaciones para 
las que no ha sido programado. De este modo el código es capaz de 
enfrentarse a una gran variedad de situaciones sin intervención del 
usuario. 
• Potabilidad: el código debe poderse trasladar sin ser modificado de un 
ordenador a otro. Esto significa que no debe hacer ningún tipo de 
suposición sobre la arquitectura del computador. El código se debe 
implementar en un lenguaje de alto nivel. 
• Mantenimiento: si el código necesita ser modificado, para hacer 
correcciones o para mejorarlo, esta acción se debe poder hacer con el 
mínimo esfuerzo. Para ello es fundamental que se sigan las normas de la 
programación establecidas, se delimiten los bloques que forman el 
programa y, además, se comente con detalle el código. 
 
 
Resuelva los siguientes ejercicios indicando para 
cada uno de ellos: entrada – proceso – salidas y su 
algoritmo. Suba los algoritmos en el aula virtual. 
 
 
Ejercicio 2: Averiguar si un número es primo o no. 
Ejercicio 3: Obtenga las raíces reales de la ecuación de segundo grado. 
Ejercicio 4: Hallar el promedio de la suma de N números. 
Ejercicio 5: Hallar el factorial de un número N usando las tres estructuras 
iterativas.

Continuar navegando