Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción
En esta unidad aprenderás los conceptos básicos y los antecedentes del computadora. Algunos de
estos conceptos son:
Conceptos básicos
El Computador
El computador es un sistema electrónico que lleva a cabo operaciones de aritmética y de lógica a alta
velocidad de acuerdo a las instrucciones internas, que son ejecutadas sin intervención humana.
Además, tiene la capacidad de aceptar y almacenar datos de entrada, procesarlos y producir resultados
de salida automáticamente. Su función principal es procesar datos.
Un computador tiene determinadas funciones para las que ha sido fabricado. Sus funciones básicas
principales son:
Procesamiento
Almacenamiento secundario
La computadora coloca la información en un almacenamiento electrónico de donde puede
recuperarla más tarde (disco). El CPU no tiene acceso directo a ellos, ni acceso sin asistencia.
Otros conceptos
La interacción Hombre-computador conforman un sistema, que tiene lugar en función a muchos
componentes, estos son:
Usuario y programador
El programador es la persona que diseña los programas para que las computadoras los
ejecuten. La computadora no puede llevar a cabo ninguna tarea, por sencilla que sea, sin la
asistencia humana. Esta asistencia se le da a la computadora en forma de instrucciones o
programas y es la más importante porque determina el éxito o el fracaso del producto
esperado.
Datos e información
Los datos se usan para producir información que nos va a ayudar a tomar decisiones.
Documentación
Comienzo de la Historia
Primer dispositivo manual que se usaba para contar. Todavía se utiliza para ilustrar los principios de
contar en las escuelas. Se usa en China desde el siglo trece.
Primeras Calculadoras Mecánicas
Máquina de contar desarrollada por John Napier. Usada para resolver problemas de multiplicación
usando funciones logarítmicas.
Primera máquina mecánica de suma y resta. Inventada por Blaise Pascal. Sumaba y restaba largas
columnas de números sin equivocarse.
Desarrollada por Gottfried Wilhelm Von Leibnitz. Usó alguna de las ideas de Pascal. Este modelo
podía sumar, restar, multiplicar, dividir y calcular raíces cuadradas. Se le acredita el haber comenzado
el estudio formal de la lógica, la cual es la base de la programación y de la operación de las
computadoras.
Revolución Industrial
Creada por Joseph Marie Jacquard, tejedor francés que quería encontrar un método más fácil para
hacer sus telares. El hizo un aditamento para la máquina de tejer que era controlado por tarjetas
perforadas. Esta máquina fue considerada el primer paso significativo para la automatización binaria.
Esta máquina se encuentra actualmente en el "Smithsonian Institute".
Desarrollada por Charles Babbage. Un dispositivo complejo de cálculo que usaba dos pares de tarjetas
perforadas. Un par daba las instrucciones a la máquina mientras que el otro par grababa los números a
ser usados en los cálculos. Esta máquina podía recibir instrucciones, procesar y guardar información e
imprimir los resultados. Esto es similar a las computadoras desarrolladas en 1940. A Charles Babbage
se le conoce como el padre de las computadoras.
Trabajó con Babbage. Escribió un programa de demostración para el uso de la máquina análitica. Por
esta razón ella es considerada la primera programadora.
Era Electrónica
Primera computadora electrónica digital construida por John Atanasoff y Clifford Berry.
MARK I (1944)
Desarrollada por Howard Aiken. Primera computadora electromecánica que utiliza principios
magnéticos. Utilizaba ceros y unos (encendido y apagado) para representar números.
ENIAC (1946)
Desarrollada por Dr. John W. Mauchly y John Presper Eckert, Jr. Primera computadora electrónica
digital a gran escala en ser completada. Construida en la Universidad de Pennsylvania y financiada
con fondos del ejército de los Estados Unidos para ser usada en la Segunda Guerra Mundial,
tabulando nuevas armas.
EDVAC (1947)
Desarrollada por Dr. John W. Mauchly, John Presper Eckert, Jr. y John Von Neumann. Primera
computadora en utilizar el concepto de almacenar información. Podía almacenar datos e instrucciones
usando un código especial llamado notación binaria.
EDSAC (1949)
UNIVAC I (1951)
Las primeras cuatro generaciones del computador se diferencian por sus componentes electrónicos.
Existe una quinta generación, la cual se caracteriza por las aplicaciones avanzadas. Es decir, la
característica principal entre las primeras es el hardware mientras que en la quinta es el software.
Primera Generación (1951 -1958).-Las principales características que distinguen a estos equipos
son:
Segunda Generación (1958 - 1964).- Se diferencian de los anteriores por los siguientes cambios:
Cuarta Generación (1971 - 1988).- Entre los aspectos que caracterizan a esta generación tenemos:
Se desarrolló el microprocesador.
Se colocan más circuitos dentro de un "chip".
"LSI - Large Scale Integration circuit".
"VLSI - Very Large Scale Integration circuit".
Cada "chip" puede hacer diferentes tareas.
Un "chip" sencillo actualmente contiene la unidad de control y la unidad de aritmética/lógica.
El tercer componente, la memoria primaria, es operado por otros "chips".
Se reemplaza la memoria de anillos magnéticos por la memoria de "chips" de silicio.
Se desarrollan las microcomputadoras, o sea, computadoras personales o PC.
Se desarrollan las supercomputadoras.
Inteligencia artificial
La inteligencia artificial es el campo de estudio que trata de aplicar los procesos del
pensamiento humano usados en la solución de problemas a la computadora.
Robótica
Sistemas expertos
Un sistema experto es una aplicación de inteligencia artificial que usa una base de
conocimiento de la experiencia humana para ayudar a la resolución de problemas. Ejemplos
de sistemas expertos:
Diagnósticos médicos
Reparación de equipos
Análisis de inversiones
Planeamiento financiero
Elección de rutas para vehículos
Ofertas de contrato
Asesoramiento para clientes de autoservicio
Control de producción y entrenamiento
Redes de comunicaciones
Los canales de comunicaciones que interconectan terminales y computadoras se conocen
como redes de comunicaciones; todo el "hardware" que soporta las interconexiones y todo el
"software" que administra la transmisión. Ejemplos de redes de comunicaciones:
Hardware.-
El "hardware" se refiere a todo equipo físico del sistema de la computadora. Puede consistir de una sola
unidad o puede ser un sinnúmero de dispositivos separados. Incluye monitor, teclado, unidades de
disco, CD, impresoras, CPU, scanner, pendrive, hub, switch, etc.
Software .-
Lenguajes de Programación
Los lenguajes de programación son lenguajes especiales que ayudan al usuario a comunicarse con la
computadora. Establecen una comunicación entre el humano que prefiere usar palabras, el sistema
decimal y la computadora, que trabaja solo con números binarios (0's y 1's).
Lenguajes
Lenguaje de máquina
El lenguaje de máquina está orientado hacia la máquina que está constituida por varios arreglos
de "bits". Este lenguaje es fácil de entender por la computadora, pero difícil para el usuario. Es
el lenguaje original de la computadora el cual es generado por el "software", y no por el
programador.
Procesadores de lenguajes
Programas traductores
Son los que traducen instrucciones de lenguajes de programación de alto nivel al código binario del
lenguaje de la máquina.
Compilador
Intérprete
Ensamblador
Este programa recibío su nombre en honor a Blaise Pascal. Fue desarrollado por el científico
suizo Niklaus Wirth en 1970 y diseñado para enseñar técnicas de programación estructurada.
Es fácil de aprender y de usar y no utiliza línea sino ";" (semicolon). Existen versiones de
compilador, como de intérprete. Estas varían según la versión.
Es uno de los primeros lenguajes de alto nivel desarrollado en 1954 por John Backus y un
grupo de programadores de IBM. Es un lenguaje compilador que se diseñó para expresar con
facilidad las fórmulas matemáticas, resolver problemas científicos y de ingeniería.
ADA
Es un lenguaje desarrollado como una norma del Departamento de Defensa de los Estados
Unidos. Es un lenguaje basado en PASCAL, pero más amplio y específico. Fue diseñado tanto
para aplicaciones comerciales como científicas. Es un lenguage de multitareas que puede ser
compilado por segmentos separados. Se llama ADA en honor de Augusta Ada Byron, condesa
de Lovelace e hija del poeta inglés Lord Byron.
Este programa fue desarrollado por Kenneth Inverson a mediados de la década de 1960 para
resolver problemas matemáticos. Este lenguaje se caracteriza por su brevedad y por su
capacidad de generación de matrices y se utiliza en el desarrollo de modelos matemáticos.
PL/1 (Programming Language 1)
Este programa fue desarrollado por IBM. Es un lenguaje de propósito general que incluye
características de COBOL y de FORTRAN. Su principal utilidad es en los "mainframes".
Fue desarrollado por IBM en 1964 y diseñado para generar informes comerciales o de
negocios.
Lenguaje C
Fue desarrollado a principios de la década de los 70 en Bell Laboratories por Brian Kernigham
y Dennis Ritchie. Ellos necesitaban desarrollar un lenguaje que se pudiera integrar con UNIX,
permitiendo a los usuarios hacer modificaciones y mejorías fácilmente. Fue derivado de otro
lenguaje llamado BCPL.
Lenguaje C++
Se pronuncia "ce plus plus". Fue desarrollado por Bjarne Stroustrup en los Bell Laboratories a
principios de la decada de los '80. C++ introduce la programación orientada al objeto en C. Es
un lenguaje extremadamente poderoso y eficiente. C++ es un super conjunto de C, para
aprender C++ significa aprender todo acerca de C, luego aprender programación orientada al
objeto y el uso de éstas con C++.
Visual BASIC
Este programa fue creado por Microsoft. Es un programa moderno que da apoyo a las
características y métodos orientados al objetos.
CAPÍTULO II
2.- ALGORITMOS
Definición
La definición de algoritmo aún no cuenta con la formalidad científica que podría ser ideal para como
las matemáticas y las ciencias de la computación (donde los algoritmos son esenciales pero a falta de
formalidad no pueden incluirse fácilmente en las demostraciones formales de estas ciencias). Sin
embargo, si existe un concepto intuitivo de algoritmo.
Un algoritmo es un sistema por el cual se llega a una solución, teniendo en cuenta que debe de ser
definido, finito y preciso. Por preciso entendemos que cada paso a seguir tiene un orden; finito implica
que tiene un determinado número de pasos, o sea, que tiene un fin; y definido, que si se sigue el
mismo proceso más de un vez llegaremos al mismo resultado.
Otra definición nos dice que un algoritmo es un conjunto finito de instrucciones o pasos que sirven
para ejecutar una tarea o resolver un problema. De un modo más formal, un algoritmo es una
secuencia finita de operaciones realizables, no ambiguas, cuya ejecución da una solución de un
problema en un tiempo finito.
1. Inicio
2. Obtener datos de entrada (operaciones básicas)
3. Efectuar procesamiento de los datos
4. Mostrar datos de salida
5. Fin
La palabra algoritmo proviene del nombre del matemático llamado Abu Abdullah Muhammad bin
Musa al-Khwarizmi que vivió entre los siglos VIII y IX. Su trabajo consistió en preservar y difundir
el conocimiento de la antigua Grecia y de la india. Sus libros eran de fácil compresi&ocute;n, de ahí
que su principal valor no era el de crear nuevos teoremas o nuevas corrientes de pensamiento, sino el
de simplificar las matemáticas a un nivel lo suficientemente bajo para que pudiera ser comprendido
por un amplio público. Cabe destacar como señalo las virtudes del sistema decimal indio (en contra de
los sistemas tradicionales árabes) y como explico que, mediante una especificación clara y concisa de
cómo calcular sistemáticamente, se podrían definir algoritmos que fueran usados en dispositivos
mecánicos en vez de las manos (por ejemplo. ábacos). También estudió la manera de reducir las
operaciones que formaban el cálculo. Es por esto que aun no siendo el creador del primer algoritmo, el
concepto llev aunque no su nombre, pero si su pseudónimo.
Así de la palabra algoritmo, que originalmente hacia referencia a las reglas de uso de
la aritmética utilizando dígitos árabes, se evolucionó la palabra latina, derivación de alKhwarizmi,
algobarismos, que mas tarde mutaría a algoritmo en el siglo XVIII. La palabra ha cambiado de forma
que en su definición se incluye a todos los procedimientos finitos para resolver problemas.
Ya en el siglo XIX se produjo el primer algoritmo escrito para un computador. La autora fue Ada
Byron, en cuyos escritos se detallaban la máquina analítica en 1892. Por ello que es considerada por
muchos como la primera programadora aunque, desde Charles Babbage, nadie completó su máquina,
por lo que el algoritmo nunca se implemento.
Los algoritmos de este tipo son similares a las recetas de cocina (para preparar comidas, bebidas, etc)
o a los manuales de instrucción para manejo de una maquina (ejm. un corta pasto) o un equipo (ejm.
una lavadora o el microondas).
Hay un método sencillo llamado algoritmo de Euclides o de las divisiones sucesivas que nos
lleva rápidamente al máximo común divisor.
1. Si dos números son divisibles el uno por el otro, el menor es su máximo común divisor.
2. Si dos números a y b (a>b) no son divisibles el uno por el otro, los divisores comunes
de a y b son los mismos que los de b y r, siendo r el resto de la división entera de a
entre b.
Versión 1
Versión 2
c. Leer base
d. Leer altura
e. Superficie= (base * altura)/2
f. Mostrar superficie
g. Fin
h. Leídos una serie de números positivos, calcular la media y mostrar. Un valor de cero
indicara que se ha alcanzado el final de la serie de números positivos
1. inicializar contador de números y acumulador en cero
2. leer numero
3. si el numero leído no es cero:
a. acumular el numero leído
b. incrementar en uno el contador de números
c. ir al paso 2
4. si el numero leído es cero:
a. calcular la media dividiendo el acumulador entre el contador de números
b. mostrar la media
5. fin
Ejercicios propuestos
Uso en Programación
REPRESENTACION DE DATOS EN LA MEMORIA DEL COMPUTADOR
Ejemplo:
Dirección Contenido
01000100 10001001
11100011 00111001
: :
01010101 10101010
Variable o
Dirección de Contenido Significado
memoria
S 100 S tiene como Contenido el 100
C -1 C tiene como Contenido el -1
P ydft2a P tiene como Contenido "basura"
Q "%#$& Q tiene como Contenido "basura"
SUMA "%#$& SUMA tiene como Contenido "basura"
Sin uso
Sin uso
Sin uso
S 0
C 1
S 0
C 1
P 2
Q 3
SUMA 9
NOTA: Los símbolos “//” indican que lo que viene después (a la derecha) son solo
comentarios y no serán tomados en cuenta por el computador, dentro un algoritmo
o programa.
Cada una de estas líneas o pasos significa una orden o instrucción para el
computador. Las instrucciones 3, 4 y 5 para ejecutarse se hacen en 2 fases y se
hacen de la siguiente manera:
donde variable será el nombre que designemos para nombrar una dirección de
memoria que vamos a usar. Valor o contenidoserá algo (por lo general un
numero) que queremos asociar a dicha variable. La flecha “<=” indica el sentido
de la operación de asignación. Luego, una asignación como Z <= 777 significa lo
siguiente:
variable/dirección
valor/contenido
de mem.
Z 777
Nótese que se usan indistintamente los términos dirección-contenido, variable-
valor o variable-contenido.
Asignación Directa.- Que no depende del valor que podía haber tenido antes la
variable. Simplemente se asigna el valor que se desea asignar.
Ejemplos:
S
// que indica que el contenido de S o valor inicial
<=
es 0
0
S
<=
// que indica que se acumula en S el contenido de
S
X o el valor asociado a X.
+
X
1. C <= 0
2. S <= 0
3. X <= 7
Variable Contenido
S 0
C 0
X 7
4.- C <= C +
1
5.- S <= S +
X
Variable Contenido
S 14
C 2
X 7
y así, sucesivamente.
Puede también haber 2 o más instrucciones separadas por el símbolo “:” después
del Entonces, como también del sino
Si A=0 o B=0 Entonces Q <= 0 : T <= 1
Sino T <= 0 : Q <= 1
FinSi
Casos como:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = ??
Este proceso debe poder efectuarse paso a paso y usando los elementos básicos
de programación vistos anteriormente. Así entonces, podemos ver que para poder
generar los números se requiere de un contador y para obtener la suma de dichos
números se requiere de un acumulador:
1. C <= 0
2. S <= 0
3. C <= C+1
4. S <= S+ C
Los pasos 2 y 3 se los puede juntar en este ejemplo, separados por “:” debido a
que se ejecutan casi simultáneamente, así por ejemplo el algoritmo equivalente
seria:
1. Leer X
2. F <= 1 : C <= 0 // que se deben ejecutar de izquierda a derecha
3. C <= C + 1 : F <= F * C
4. Si C < X Entonces Ir a 3
5. Mostrar “El factorial es: ”, F
6. FIN
Prueba de Escritorio
La prueba de escritorio no es más que efectuar un proceso de simulación con el algoritmo desarrollado
(ver que haría la computadora). Este trabajo se realiza en base a una tabla cuyos encabezados son las
variables que se usan en el algoritmo y debajo de cada una de ellas se van colocando los valores que
van tomando, paso a paso y siguiendo el flujo indicado por el algoritmo, hasta llegar al final.
Ejemplo:
1. C <- 0
2. S <- 0
3. C <- C + 1
4. S <- S + C
5. Si C < 10 Entonces Ir a 3
6. Mostrar “La suma es: “, S
7. FIN
La prueba de escritorio para este ejercicio empieza con hacer una lista de las variables, C y S en el
ejemplo.
Los números que se ven resaltados, son los que se generan en cada paso ( 3 y luego 4). Cada variable
tiene vigente solo el último valor. En este momento el paso 3 cambio el valor de C de 0 a , de igual
forma que el paso 4 cambio el de S de 0 a 1. Luego están vigentes los nuevos valores y se perdieron
los anteriores.
En la prueba, haciendo un paréntesis, se puede advertir que las sumas se van haciendo correctamente,
por lo que se deduce que se terminará con la suma correcta. Solo bastara verificar si termina
apropiadamente.
Un punto a evaluar debe ser el verificar si la repetición se hace el numero esperado de veces, una vez
más, o una menos, que es lo que frecuentemente ocurre con los condicionales que hacen la repetición
en los algoritmos.
Los datos de prueba deben permitirnos verificar que el programa funciona bien con cualquier dato o
para todos los casos, según el problema.
Por ejemplo, si el problema es: Dada una nota(en el rango 0 a 100), muestre el mensaje que le
corresponde (el mensaje dirá APROBADO si es mayor o igual a 51, REPROBADO si es menor a 50 y
CASO ESPECIAL si es mayor o igual a 50 y menor a 51).
En este caso por lo menos deberíamos tener 3 datos (valores) para probar (hay 3 casos posibles), es
decir, uno para el caso APROBADO, otro para el caso REPROBADO y un tercero para el CASO
ESPECIAL. Luego 40, 50.5 y 70 pueden ser 3 de esos datos. Con 40 verificamos que el mensaje será
REPROBADO, con 50.5 el mensaje mostrado será CASO ESPECIAL y con 70 será APROBADO.
Otro ejemplo es el caso del número primo (dado N, diga si es o no in número primo). En este caso,
necesitamos para probar el programa 2 valores, uno que si es primo y otro que no lo es, por ejemplo 8
y 11 (el primero generara el mensaje “NO ES” y el segundo “SI ES”)
1. ROBUSTEZ
Quiere decir que un algoritmo debe contemplar todas las posibles facetas del problema que
queremos resolver, al elaborar un algoritmo no se nos debe escapar ningun detalle que
provoque un mal funcionamiento del algoritmo.
2. CORRECTITUD
Es correcto cuando da una solución al problema a tratar y cumple con todos los requerimientos
especificados tal que cumplamos con los objetivos planteados.
3. COMPLETITUD
Cuando un algoritmo cuenta con todos los recursos para poder llegar a una solución
satisfactoria.
4. FINITUD
Un algoritmo debe acabar tras un numero finito de pasos. Es más, es casi fundamental que sea
en un numero razonable de pasos.
5. EFICIENCIA Y EFICACIA
Un algoritmo es eficiente cuando logra llegar a sus objetivos planteados utilizando la menor
cantidad de recursos posibles, es decir, minimizando el uso de memoria, de pasos y de esfuerzo
humano.
Un algoritmo es eficaz cuando alcanza el objetivo primordial, el analisis de la resolución del
problema se lo realiza prioritariamente.
Puede darse el caso de que exista un algoritmo eficaz pero no eficiente, en lo posible debemos
de manejar estos conceptos conjuntamente.
EJERCICIOS PARA RESOLVER CON ALGORITMOS
Solución:
Explicación:
Ejemplo: si A = 5 y B = 3
Se suma A, B veces
Aunque también otra alternativa es sumar B, A veces.
Explicación:
Explicación:
Ejemplo:
Si N es 4, su cuadrado es 16, que resulta de 1 + 3 + 5 + 7 = 16
Si N es 5, su cuadrado es 25, que resulta de 1 + 3 + 5 + 7 + 9 =
25
Si N es 10, tenemos que 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17
+ 19 = 100
Solución:
Solución:
Explicación:
Ejemplo: si A = 5 y B = 3
Se suma A, B veces
Explicación:
Explicación:
Ejemplo:
Si N es 4, su cuadrado es 16, que resulta de 1 + 3 + 5 + 7 = 16
Si N es 5, su cuadrado es 25, que resulta de 1 + 3 + 5 + 7 + 9 =
25
Si N es 10, tenemos que 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17
+ 19 = 100
Solución:
13.- Leído un numero (entero y positivo), rotar sus dígitos hacia (por) la derecha. Por ejemplo 12345
rotado a derecha es 51234 (el último de la derecha será el primero de la izquierda).
SOLUCION:
Este problema se puede resolver en base a la notación posicional que se utiliza en el sistema numérico
decimal, esto es:
Si el numero es N=427, este se lee como cuatrocientos veintisiete, dicha lectura surge de dicha
notación. El 4 vale cuatrocientos el 2 vale veinte y el 7 solo es siete. Gráficamente esto es:
Es decir:
Luego si separamos el último dígito de los restantes, tendríamos
Finalmente, si antes de rotar el numero calculamos X, tenemos resuelto el problema cuyo algoritmo es
el siguiente.
Se debe notar que los pasos 1, 3, 4, y 5 nos permiten contar los dígitos del numero N1 (copia de N),
mediante la operación de ir eliminando dígitos, uno a la vez y contando (pasos 3 y 4). El paso 5 ayuda
a controlar la repetición de 3 y 4. Una vez que ya se conoce X (cantidad de dígitos de N), los pasos 6,
7 y 8 hacen la rotación.
14.- Leído un numero (entero y positivo), rotar sus dígitos hacia (por) la Izquierda. Por ejemplo 12345
rotado a (por) izquierda es 23451 (el primero de la izquierda será el último de la derecha).
SOLUCION:
Luego, la solución pasa por separar el primer digito del resto del numero original y luego sumar
ambas partes incrementando antes en una potencia de 10 a la parte del resto.
La separación se hace digito a digito, con mod y div y, agrupando los dígitos obtenidos con su mismo
valor posicional. Esto se consigue multiplicando cada digito obtenido por una potencia creciente de 10
y acumulando. Es decir:
Así entonces, con el N del ejemplo, es decir N=12345 tenemos que el resto es:
Si D es 5, C es 0 y su valor en el resto es 5 x 10^0 = 5 x1=5
Si D es 4, C es 1 y su valor en el resto es 4 x 10^1 = 4 x 10=40
Si D es 3, C es 2 y su valor en el resto es 3 x 10^2 = 3 x 100=300
Si D es 2, C es 3 y su valor en el resto es 2 x 10^3 = 2 x 1000=2000
Sumados estos números nos da el resto que es: 2345
El proceso de separar el resto se hace hasta dejar un solo digito en N (si N>9 hay 2 o mas dígitos), con
lo cual obtenemos el control en la repetición durante la separación del resto, es decir:
Este condicional nos permite dejar en N un digito, el cual es el primero pero, que se convertirá por la
notación posicional en el ultimo digito para la rotación.
15) Leído un numero (entero y positivo), rotar sus dígitos hacia la Izquierda 3 veces si el número tiene
mas de 3 dígitos. Por ejemplo 12345 dará 23451, luego 34512 y finalmente 45123.
16) Leído un numero (entero y positivo), rotar sus dígitos hacia la derecha 3 veces si el número tiene
mas de 3 dígitos. Por ejemplo 12345 dará 51234, luego 45123 y finalmente 34512.
Los médicos por lo general no hemos desarrollado una actitud matemática, salvo excepciones, pero la
omnipresencia de la misma, puede llegar a ser tan dolorosa como importante. En oportunidades se
introduce en nuestras vidas como un nuevo y silencioso caballo de Troya, es de esta ultima forma que
nos invaden los algoritmos, silenciosamente, pero no por eso dejamos de reconocer la significación
que tienen en nuestra profesión tanto para el diagnóstico, el pronóstico, el tratamiento e incluso para
valorar la relación costo beneficio social.
La historia ubica la invención de los algoritmos en el siglo IX, por obra y gracia del matemático y
astrónomo Mohamed ibn Musa-al Jwarizmi, de allí su nombre. Desarrollo en el Al-yebr-mugabata
fórmulas para posibilitar que con un número limitado de pasos e indicaciones claras de ejecución se
pudieran resolver ecuaciones de primer y segundo grado.
Desde la simplicidad de preparar una ensalada, a la posibilidad de resolver un problema complejo que
nos preocupa los algoritmos son de inestimable ayuda. Lógicamente este moderno caballo de Troya
solo muestra su eficiencia estratégica a quienes practican su desarrollo, cuando se le presentan
situaciones no rutinarias o aún cuando recurren a los numerosos algoritmos disponibles para
situaciones más complejas.
Es en ese conjunto ordenado y limitado de pasos, que especifican la secuencia de las operaciones que
se han de resolver para solucionar los problemas, que descansa en gran parte de la utilidad de los
algoritmos. Podemos definir sencillamente a los algoritmos como un conjunto de reglas para resolver
una cierta clase de problemas o como una forma de describir la solución de un problema. Su carácter
general otorga a los algoritmos la condición de herramienta transdisciplinaria.
Recordemos y no al pasar, que los algoritmos están en el corazón mismo de los ordenadores y que los
lenguajes de computación solo son un medio de expresarlos.
Como es fácil de imaginar, el paso inicial irrenunciable de este proceso es entender acabadamente el
problema, requisito para poder analizarlo y elegir posteriormente el camino a seguir. Una vez
pensados y ordenados los pasos, se deberá optar por una formula o un diseño tal como el de los
diagramas de flujo o el de las tablas de decisión. Las tablas son las menos utilizadas y como tantas
otras cosas, ellas se originaron en la industria (G.E.), siendo Feinstein y Holland los que las
introdujeron en la medicina.
Como decíamos, los diagramas de flujo son los mas utilizados, su misión es graficar los algoritmos,
para lo cual utilizan una simbología que en la práctica muy pocos respetan pero que conviene por lo
menos tenerla en cuenta. A los diagramas de flujo se los define como una representación gráfica, clara,
esquemática y concisa, de la secuencia de acciones necesarias para resolver un problema.
Esta forma esquemática, contiene los pasos del algoritmo, escritos en los símbolos, los cuales están
unidos por flechas que indican la secuencia del flujo de los datos y los pasos de ejecución de las
órdenes.
Se utiliza un rectángulo redondeado para el inicio y finalización de los algoritmos, los rombos son
utilizados para las decisiones y los rectángulos para las acciones a tomar. Las flechas nos indican el
flujo teniendo en cuenta que las decisiones por ¨no¨ crecerán verticalmente y las decisiones por ¨si¨
crecerán hacia derecha. Si bien estos no son los únicos símbolos, para nuestros objetivos son
considerados como suficientes.
Una de las preguntas que se suele plantear, es si los algoritmos son siempre confiables, pregunta que
merece referirse a Renato Cartesius. Tomando esta cuestión como disparador haremos mención a
algunas virtudes y limitaciones de los algoritmos.
Virtudes
Los algoritmos nos brindan la oportunidad de seleccionar aquello que se considera prioritario, lo cual
no es poco y la capacidad como ordenador del pensamiento comienza desde su primer paso, el cual
implica definir con precisión el problema, que como sabemos es de por sí una tarea intelectual muy
importante.
Imprimen además los algoritmos, claridad lógica y secuencial al procesamiento sistemático tanto de
los datos clínicos como a las pruebas y los procedimientos Lógicamente todo esto ya le da validez por
el hecho de contribuir a mejorar nuestro juicio clínico, pero más aun porque consecuentemente su
práctica nos permite mejorar la atención de nuestros pacientes en muchas oportunidades.
Existen muchos algoritmos computarizados basados en distintos grados de evidencia, los cuales nos
facilitan su aplicación y también nos brindan un importante recurso de investigación y educación
medica.
Inconvenientes
Podemos decir que entre los inconvenientes más importantes está el desconocimiento de su existencia
y el no saber cuáles son sus limites. A estos que posiblemente son los más importantes, se le suman la
incapacidad de convertir lo expresado en algoritmos y la carencia de su disponibilidad, ya que si bien
existe una cantidad importante de algoritmos, por diversos motivos solo se utilizan muy pocos de
manera rutinaria.
En síntesis debemos pensar que muchos de los inconvenientes dependen de quienes los desconocen,
de quienes no conocen sus límites y de aquellos que los sobreutilizan.
Si queremos una mayor claridad y valorización de los algoritmos leamos la muy apropiada referencia
que hace de ellos Komaroff;
..........mientras los algoritmos puedan seguir jugando un papel en la toma de decisiones médicas, es
improbable que encuentren algún papel en los otros dos aspectos críticamente importantes de la
atenciíon a los pacientes ....escuchar lo que dice, cómo lo dice y qué es lo que no dice, así como
explicar, dar confianza y mostrar que uno se preocupa. Los algoritmos no son substitutos de la
experiencia sensibilidad o compasión... En nuestra opinión, los algoritmos nos pueden ayudar a
articular cómo tomamos las decisiones, a clarificar nuestro conocimiento y a reconocer nuestra
ignorancia. Nos pueden ayudar a desmitificar la práctica de la medicina y a demostrar que mucho de
lo que llamamos el arte de la medicina es realmente un proceso científico, una ciencia que esta
esperando ser articulada.
BIBLIOGRAFIA
Komaroff Al. Algorithms and the art of medicine. Am J of Public Health 1982: 72:10-1
Kantor .G. Automate Medical Algorithms Issue for Anesthesiologists. ASA 2001 Anaheim
,CA.
Kantor G. Medal The medical Algorithms Project .Mediinfo 2001 London U.K.
Jonson K. Automated Medical Algorithms Issue for Medical Errors AMIA 2001 Washington
DC
CAPÍTULO III
3.- PSEUDOCODIGO
Introducción
Es otra herramienta de programación más cercana a un lenguaje de programación, que tiene un uso
mas difundido y a partir del cual es fácil efectuar la codificación (traducción) a casi cualquier lenguaje
de programación.
No usa numeración de líneas de instrucción para controlar el orden ( flujo ) de ejecución de las
instrucciones, en cambio maneja estructuras de control. Las estructuras de control son bloques de
instrucciones que definen ciertas acciones que va a realizar un programa como ser:
En vez de llamar instrucción por lo general usamos el termino sentencia. Por otro lado, un buen uso
de la sangría (espaciado a partir del margen izquierdo) para resaltar las estructuras de control es
“muy” necesario e importante.
Estructura de un programa en Pseudo-Codigo
Un programa en pseudo-código tiene un nombre, una lista de las variables a usarse con la declaración
de sus tipos y, las sentencias del programa agrupadas bajo estructuras de control y las cuales están
comprendidas entre las líneas INICIO y FIN.
PROGRAMA Nombre-Programa ()
Declaración de variables
INICIO
Estructura de control 1 (Bloque de instrucciones)
Estructura de control 2 (Bloque de instrucciones)
Estructura de control 3 (Bloque de instrucciones)
Estructura de control 4 (Bloque de instrucciones)
FIN
Ejemplo:
Estructuras de Control
Lineal/Secuencial
Cuando las sentencias se ejecutan en secuencia (orden) de arriba abajo y si hay más de una sentencia
en una línea, se procesan de izquierda a derecha. Es decir, el orden de ejecución de las instrucciones
bajo esta estructura, sigue el mismo orden que normalmente seguimos para leer un libro; de arriba-
abajo y de izquierda-derecha. Ejemplo:
o también
Condicional o de Decisión
Que dice que Si se cumple la condición (solo si se cumple), se ejecutan las instrucciones que siguen
a entonces. Luego se prosigue después de FinSi. La sintaxis de un condicional simple es:
Donde Instr.1 e Instr.2 serían las ordenes o instrucciones que ejecutaría el computador
si condición es verdadera. Si condición no es verdadera Instr.1 e Instr.2 no se ejecutan.
Por ejemplo, si dados 2 números queremos asignar el mayor de ambos a la variable mayor el pseudo-
código correspondiente es:
Por otro lado, la condición de una sentencia condicional puede ser compuesta, es decir puede haber
mas de una condición. Por ejemplo, Si (a < b y b < c) o también Si (a>100 o a<1), etc. en cuyos casos
se deben aplicar leyes de lógica a los condicionales.
Cuando se cumple la condición, se ejecuta la o las instrucciones que siguen a Entonces, en caso
contrario las que siguen a Sino. La sintaxis de un condicional completo es:
Donde Instr.1 se ejecuta si condición es verdadero e Instr.2 en caso contrario (si es falso).
Por ejemplo, el ejercicio anterior se puede resolver con un condicional completo en vez de 2
condicionales simples:
Una vez ejecutadas las sentencias que siguen a Entonces o las que siguen a Sino, se prosigue con las
que siguen a FinSi. En nuestro caso Mostrar mayor.
Pueden haber situaciones en las que un condicional este dentro de otro condicional, en este caso se
denominan condicionales anidados y no hay restricción en el número de condicionales anidados, solo
se deberá tener muy en cuenta donde debe proseguir el programa una vez que sale de un condicional.
Ejemplo1.- Dada una nota, diga si corresponde el mensaje “Aprobado”, “Reprobado” o “Caso
especial” (suponer que: nota >= 51 es aprobado, nota<50 es reprobado y si no es ninguno es caso
especial)
Pueden haber muchas soluciones posibles, como permutaciones se puedan hacer con
los condicionales simples. Una solución es:
En este programa, los 3 condicionales se los puede poner en cualquier orden y el resultado
siempre será el mismo y además el correcto.
En este caso, al tratarse de condicionales anidados cada condicional que se aplique depende de
los otros condicionales y debe seguir cierta estrategia.
Ejemplo 2.- Dada una nota(se supone un valor entre 0 y 100), diga si corresponde el mensaje
“Aprobado”, “Reprobado”, “Abandono” o “Caso especial”. Suponer que: nota >= 51 es aprobado,
nota = 0 es abandono, 0 < nota < 50 es reprobado y si no es ninguno de ellos es caso especial.
Como se ve en los ejemplos, un buen manejo (manejo apropiado) de los condicionales permitirá
reducir el numero de sentencias, así como también reducir la posibilidad de cometer errores. Recuerde
que las sentencias que traen más problemas y terminan con errores en los programas son los
condicionales.
c.- Múltiple: Reemplaza a varios condicionales que están en función de la misma variable.
En el ejemplo dependen del valor de var, si este tiene valor 1, se ejecutan las instrucciones que siguen
a var:1(significa si var es 1), si es 2 las que siguen a var:2 y así sucesivamente. Si se tiene un valor
no considerado en var, se ejecutan las instrucciones que siguen a cualquier otro. Esta estructura
reemplaza a un conjunto de condicionales simples en función de la variable var.
Por ejemplo: Si dada una nota entre 1 y 7, quisiéramos que se muestren los mensajes siguientes, en
función de dicha nota:
“Excelente” si la nota es 7
“Muy Bueno” si la nota es 6
“Bueno” si la nota es 5
“Regular” si la nota es 4
“Malo” si la nota es 3
“Deficiente” si la nota es 2
“Pésimo” si la nota es 1
SI sabemos cuantas veces queremos repetir un proceso, es decir hay algún conjunto de
instrucciones o sentencias que queremos que se ejecuten un numero determinado de veces. En este
caso se debe usar el bloque Para-FinPara, cuya sintaxis es:
Que hace que i funcione como contador, tomando los valores 1,2,3,4,......49 y 50. Es decir, en
este caso se procesan 50 veces las instrucciones que están entre Para y FinPara.
El incremento que en este caso es de 1, puede ser cualquier valor, inclusive decimal, por
ejemplo:
También puede ser negativo, para lo cual los valores inicial y final deben ser los apropiados.
Ejemplo:
Para i = 10 hasta 1 incremento de -1 .
Todas las instrucciones que se encuentran entre Para y FinPara son ejecutadas (el cuerpo
del Para), a menos que hayan condicionales que lo impidan. Cuando en el
procesamiento Lineal se llega a FinPara, este devuelve el control a Para, a fin de que se evalúe
el valor de la variable de control (i en este caso), si aún no se llego al valor final, se incrementa
en el valor del incremento y luego procede a ejecutar nuevamente el cuerpo del Para. Una vez
que se llega a ejecutar por última vez el cuerpo del Para, el control se transfiere a la instrucción
que sigue a FinPara.
INICIO
suma <= 0
Para k=1, 10, 1
Leer x
suma <= suma + x
FinPara
pro <= suma/10
mostrar suma
FIN
Ejemplo 2.- Generar y mostrar la serie de Fibonacci con los primeros 50 números. Se
muestran 2 soluciones, aunque básicamente las 2 son la misma. La diferencia esta en el conteo
de los 50 números.
Solución a)
INICIO
P <= 0 : U <- 1 : Mostrar P, U // mostramos los 2 primeros
Para k = 3, 50 // contamos desde el 3
N <= P + U : Mostrar N
P <= U : U <= N
FinPara
FIN
Solución b)
INICIO
P <= 0 : U <= 1 : Mostrar P, U // mostramos los 2 primeros
Para k = 1, 48 // faltan generar 48 números
N <= P + U : Mostrar N
P <= U : U <= N
FinPara
FIN
Si NO sabemos cuantas veces queremos repetir un proceso, es decir hay algún conjunto
instrucciones o sentencias que queremos que se ejecuten un numero determinado de
veces, siempre y cuando cumplan cierta condición. En este caso se debe usar el
bloque Mientras-FinMientras, cuya sintaxis es: