Está en la página 1de 62

CAPÍTULO I

1.- INTRODUCCION A LA COMPUTACION

Introducción

En esta unidad aprenderás los conceptos básicos y los antecedentes del computadora. Algunos de
estos conceptos son:

 Definición del computador


 Características del computador
 Función del computador
 Componentes de un sistema de computación
 Historia del computador
 Generaciones del computador
 Sistema numérico binario
 El manejo del computador.

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.

Características de la computadora.-Un computador tiene las siguientes características principales:

 La computadora realiza un paso a la vez.


 Puede sumar, restar, dividir y multiplicar.
 Puede hacer operaciones lógicas, o sea, comparar letras y números.
 Opera a alta velocidad.
 Es exacta o precisa - realiza exactamente lo que se le indica.
 Es eficiente - puede trabajar sin parar.
 Tiene capacidad para manejar cantidades enormes de información.
 Es confiable - tiene la capacidad de verificar la exactitud de sus operaciones internas, o sea,
autocomprobación.
 Puede manipular símbolos.
 Al compararla con las primeras computadoras, cada vez su tamaño es menor, son más útiles y
menos costosas.

Funciones vitales de la computadora

Un computador tiene determinadas funciones para las que ha sido fabricado. Sus funciones básicas
principales son:

 "Input" - Unidad de entrada

La computadora usa muchos dispositivos para la entrada de datos. Algunos permiten la


comunicación directa entre los humanos y la máquina (teclado). Otros requieren que los datos
est&én grabados en un medio de entrada, como papel o material magnético (cintas
magn&éticas o discos flexibles). Sin importar el tipo de dispositivo usado, todos son
componentes para la interpretación y la comunicación entre las personas y la computadora.

 Procesamiento

El procesamiento es el manejo, cambio y almacenamiento de información. La computadora


procesa las instrucciones y los datos.

Componentes del procesamiento:

o La unidad de memoria o almacenamiento primario es parte del sistema de la


computadora que almacena información o instrucciones para ser procesadas. Consiste
de miles de localizaciones de memoria cada una con su propia dirección.
o La unidad central de procesamiento (CPU) se conoce como el cerebro del sistema
de la computadora. Son los circuitos que controlan la interpretación y la ejecución de
las instrucciones, o sea, el microprocesador.
o El microprocesador es el procesador de la microcomputadora. Es el circuito integrado
del tamaño de una uña que puede cumplir más de 50 operaciones diferentes y llevar a
cabo sobre 500,000 de éstas en un segundo.
o El CPU puede sumar, restar, multiplicar, dividir y hacer comparaciones de números y
caracteres. Esta consiste de dos partes: unidad de control y unidad de aritmética/lógica.
 "Output" - Unidad de salida

La computadora comunica los resultados al usuario a través de un monitor de video (pantalla)


o impresora.

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

Los componentes de la computadora descritos anteriormente pueden aceptar datos, procesarlos y


producir un resultado final de salida; sólo siguiendo el conjunto detallado de instrucciones contenido
en el programa almacenado.

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 usuario es la persona que usa la computadora.

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

Datos - hechos o material original que no han sido procesados.

Información - es el producto de los datos ya procesados.

Los datos se usan para producir información que nos va a ayudar a tomar decisiones.

 Documentación

Se refiere a las instrucciones o manuales de procedimiento que le proporcionan información al


usuario de cómo usar el equipo o los programas.
Historia de las Computadoras

Comienzo de la Historia

 Se contaba con los dedos.


 Se contaba con piedras, palitos.

Primeras Calculadoras Manuales

Ábaco (500 AC)

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

Napiers Rods - Huesos de Napier (1617)

Máquina de contar desarrollada por John Napier. Usada para resolver problemas de multiplicación
usando funciones logarítmicas.

The Pascaline - La Pascalina (1642)

Primera máquina mecánica de suma y resta. Inventada por Blaise Pascal. Sumaba y restaba largas
columnas de números sin equivocarse.

Leibnitz Calculating Machine (1673)

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

Jacquard's Weaving Loom - El telar de Jacquard (1801)

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

Analytical Engine - Máquina Analítica (1833)

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.

Ada Byron - Lady Lovelace

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.

Hollerith's Punched-Card Tabulating System - Máquina Tabuladora (1890)


Desarrollada por Dr. Herman Hollerith que trabajó para la oficina del Censo de los E.U. durante el
censo de 1880. El diseño un sistema mediante el cual las tarjetas eran perforadas para representar la
información del censo. Las tarjetas eran insertadas en la máquina tabuladora y ésta calculaba la
información recibida. Hollerith alquilaba sus máquinas al gobierno. En 1896 fundó la "Tabulating
Machine Company", la cual en 1923 paso a ser la "International Business Machines Corporation
(IBM)".

Era Electrónica

ABC - Atanasoff and Berry Computer (1939 - 1942)

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)

Desarrollada por Maurice Wilkes. Primera computadora capaz de almacenar programas


electrónicamente.

UNIVAC I (1951)

Desarrollada por Mauchly y Eckert para la Remington-Rand Corporation. Primera computadora


comercial utilizada en las oficinas del censo de los Estados Unidos. Esta máquina se encuentra
actualmente en el "Smithsonian Institute". En 1952 fue utilizada para predecir la victoria de Dwight
D. Eisenhower en las elecciones presidenciales de los Estados Unidos.
Generaciones de las Computadoras

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:

 Usaban tubos al vacío para procesar información.


 Usaban tarjetas perforadas para entrar los datos y los programas.
 Usaban cilindros magnéticos para almacenar información e instrucciones internas.
 Eran sumamente grandes, utilizaban gran cantidad de electricidad, generaban gran cantidad de
calor y eran sumamente lentas.
 Se comenzó a utilizar el sistema binario para representar los datos.

Segunda Generación (1958 - 1964).- Se diferencian de los anteriores por los siguientes cambios:

 Usaban transistores para procesar información.


 Los transistores eran más rápidos, pequeños y más confiables que los tubos al vacío.
 200 transistores podían acomodarse en la misma cantidad de espacio que un tubo al vacío.
 Usaban pequeños anillos magnéticos para almacenar información e instrucciones.
 Se mejoraron los programas de computadoras que fueron desarrollados durante la primera
generación.
 Se desarrollaron nuevos lenguajes de programación como COBOL y FORTRAN, los cuales
eran comercialmente accesibles.
 Se usaban en aplicaciones de sistemas de reservaciones de líneas aéreas, control del tráfico
aéreo y simulaciones de propósito general.
 La marina de los Estados Unidos desarrolla el primer simulador de vuelo, "Whirlwind I".
 Surgieron las minicomputadoras y los terminales a distancia.
 Se comenzó a disminuir el tamaño de las computadoras.
Tercera Generación (1964 - 1971).- Las mejoras aportadas en esta generación son las siguientes:

 Se desarrollaron circuitos integrados para procesar información.


 Se desarrollaron los "chips" para almacenar y procesar la información.
Un "chip" es una pieza de silicio que contiene los componentes electrónicos en miniatura
llamados semiconductores.
 Los circuitos integrados recuerdan los datos, ya que almacenan la información como cargas
eléctricas.
 Surge la multiprogramación.
 Las computadoras pueden llevar a cabo ambas tareas de procesamiento o análisis
matemáticos.
 Emerge la industria del "software".
 Se desarrollan las minicomputadoras IBM 360 y DEC PDP-1.
 Otra vez las computadoras se tornan más pequeñas, más ligeras y más eficientes.
 Consumían menos electricidad, por lo tanto, generaban menos calor.

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.

Quinta Generación (1983 - al presente).- Se caracterizan por los siguientes aspectos:

 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

La robótica es el arte y ciencia de la creación y empleo de robots. Un robot es un sistema de


computación híbrido independiente que realiza actividades físicas y de cálculo. Están siendo
diseñados con inteligencia artificial, para que puedan responder de manera más efectiva a
situaciones no estructuradas.

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

LAN - Local Area Network


BBN - Back Bone Network
MAN - Metropolitan Area Network
WAN - Wide Area Network
Definición de Hardware y Software

Un computador tiene como componentes principales al hardware y software:

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

El "software" es el conjunto de programas que dirigen el funcionamiento de la computadora.

Un programa es un conjunto de instrucciones en secuencia para lograr que la computadora ejecute


determinadas operaciones.

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.

 Lenguaje de bajo nivel

Es un lenguaje de programación bien cercano al lenguaje de máquina. Es difícil de entender


por las personas y requiere que los programadores codifiquen las instrucciones con muchos
detalles. Ejemplo: lenguaje ensamblador.
 Lenguaje de alto nivel

Es un lenguaje que se asemeja más al lenguaje humano que a un lenguaje de máquina o


ensamblador. Es más fácil escribir programas en este lenguaje, pero luego deben ser traducidos
por compiladores o intérpretes para que la computadora los entienda.

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.

 Código fuente ("source code")

Es un conjunto de instrucciones del programa que están escritas en un lenguaje de


programación.

 Código del objeto ("object code")

Es un conjunto de instrucciones binarias traducidas y que la computadora puede ejecutar.

Ejemplos de programas traductores

 Compilador

Es un programa que traduce un lenguaje de alto nivel al lenguaje de máquina de una


computadora. Según va ejecutando la traducción, coteja los errores hechos por el programador.
Traduce un programa una sola vez, generalmente, y es cinco veces más rápido que los
programas intérpretes. Ejemplos: ALGOL, BASIC, COBOL, FORTRAN, PASCAL y PL/1.

 Intérprete

Es un programa que traduce un lenguaje de alto nivel al lenguaje de máquina de una


computadora. El programa siempre permanece en su forma original (programa fuente) y
traduce cuando está en la fase de ejecución instrucción por instrucción. Ejemplo: BASIC

 Ensamblador

Es un programa de bajo nivel que traduce el lenguaje de ensamble a lenguaje de máquina.


Utiliza letras del alfabeto para representar los diferentes arreglos del código binario de la
máquina. Los programadores de ensamble deben conocer profundamente la arquitectura y el
lenguaje de máquina de su computadora. El programa ensamblador traduce cada instrucción de
ensamble escrita por el programador a la instrucción en lenguaje de máquina binario
equivalente. En general, las instrucciones ("software") de un sistema se escriben en este
lenguaje. Ejemplos: Sistema operativo y Sistemas de manejo de base de datos.
Lenguajes de alto nivel más conocidos

 BASIC (Beginners All-purpose Symbolic Instruction Code)

Fue el lenguaje de programación interactivo más popular en la década de los 70. Es un


lenguaje de propósito general. Desarrollado por John Kemeny y Thomas Kurtz en "Dartmouth
College" en 1963. Existen numerosas versiones, algunas son compiladores y otras son
intérpretes.

 COBOL (Common Business Oriented Language)

Es un lenguaje compilador diseñado para aplicaciones de negocios. Desarrollado en 1959 por


el gobierno federal de los Estados Unidos y fabricantes de computadoras bajo el liderazgo de
Grace Hopper. Es el más utilizado por los "mainframe". COBOL está estructurado en cuatro
divisiones; a saber:

1. División de identificación - identifica el programa.


2. División ambiental - identifica a las computadoras fuente y objeto.
3. División de datos - identifica las memorias "buffer", constantes y áreas de trabajo.
4. División de procedimiento - describe el procesamiento(la lógica del programa).
 PASCAL

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.

 FORTRAN (FORmula TRANslator)

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.

 APL (A Programming Language)

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

 RPG (Report Program Generator)

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.

 Programación orientada a objetos

Las metas de la programación orientada al objeto es mejorar la productividad de los


programadores haciendo más fácil de reusar y extender los programas y manejar sus
complejidades. De esta forma, se reduce el costo de desarrollo y mantenimiento de los
programas. En los lenguajes orientados al objeto los datos son considerados como objetos que
a su vez pertenecen a alguna clase. A las operaciones que se definen sobre los objetos son
llamados métodos. Ejemplo de programas orientados a objetos: C++, Java y otros.

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.

El término algoritmo no está exclusivamente relacionado con las matemáticas, ciencias de la


computación o informática. En realidad, en la vida cotidiana empleamos algoritmos en multitud de
ocasiones para resolver diversos problemas

Algunos ejemplos de la vida diaria son:

 el uso de una lavadora (se siguen las instrucciones)


 la preparación de una comida (siguiendo los pasos de una receta).

También existen ejemplos de índole matemática como ser:

 el algoritmo de la división para calcular el cociente de dos números


 el algoritmo de Euclides para calcular el máximo común divisor de dos enteros positivos
 el método de Gauss para resolver Sistema lineal de ecuaciones y muchos otros.

Estructura Básica de un algoritmo:

1. Inicio
2. Obtener datos de entrada (operaciones básicas)
3. Efectuar procesamiento de los datos
4. Mostrar datos de salida
5. Fin

Historia de los Algoritmos

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.

Fuente Wikipedia: http://es.Wikipedia.org/wiki/Algoritmo


Algoritmos en Lenguaje Natural

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

En la vida diaria (cotidiana), implícitamente seguimos ciertas actividades rutinarias (algoritmos) en el


desarrollo de nuestras actividades, por ejemplo:

 Seguimos una secuencia de pasos( algoritmo) para ir a la oficina


 Seguimos una secuencia de pasos(algoritmo) para ir a clases en la universidad.
 Seguimos una secuencia de pasos para cambiar la llanta pinchada de un auto.
 Seguimos una secuencia de pasos para encender el computador, impresora y estabilizador de
corriente.
 Seguimos otra secuencia de pasos para apagar los mismos equipos.
 Seguimos una secuencia de pasos para tomar el avión para viajar.

También existen ejemplos de índole matemática como ser:

 el algoritmo de la división para calcular el cociente de dos números


 el algoritmo de Euclides para calcular el máximo común divisor de dos enteros positivos
 el método de Gauss para resolver Sistema lineal de ecuaciones y muchos otros.

Estructura Básica de un algoritmo: Para escribir un algoritmo, debemos seguir la siguiente


estructura:

1. Obtener datos de entrada


2. Efectuar procesamiento de los datos
3. Mostrar datos de salida
4. Fin

EJEMPLOS DE ALGORITMOS EN LENGUAJE NATURAL

1. Realizar una llamada telefónica desde un teléfono publico tarjetero:


1. Ubicar el teléfono publico en buen estado
2. Ubicar el numero de teléfono
3. Ubicar la tarjeta telefónica con saldo disponible
4. Descolgar el auricular
5. Esperar tono
6. Introducir la tarjeta telefónica
7. Marcar el numero
8. Esperar respuesta
9. Si suena ocupado colgar el auricular
10. Si atienden la llamada
 Conversar
 Colgar el auricular
 Extraer tarjeta telefónica
11. Fin
2. Ver el programa preferido en el canal de televisión
1. Enchufar el televisor
2. Encender el televisor
3. Ver la imagen en la pantalla
4. Preguntarse es el canal que deseo ver?
5. Si es falso, cambio el canal
6. Si es verdadero, ver el programa
7. regular el volumen
8. reclinarse en el living
9. Fin
3. Juego de dos dados, hasta que la suma de los dados sea igual a seis
1. alistar dos dados y el cubilete
2. lanzar los dados
3. verificar si la suma de los dos dados es igual a seis
4. si es falso nuevamente ir al paso 1.
5. si verdadero, concluye el juego
6. fin
4. Preparar una limonada
1. alistar una jarra vacía, 3 limones y agua hervida fría
2. llenar la jarra con un litro de agua
3. exprimir el jugo de los limones en la jarra
4. echar cuatro cucharadas de azúcar
5. mover el agua con una cuchara hasta disolver completamente el azúcar
6. servir en vasos
7. fin
5. Ejercicios propuestos
1. Ir al cine con el/la enamorado/a
2. Preparar una taza de té
3. Cambiar el vidrio roto de una ventana
4. Colocar la mesa para comer
5. Cambiar el foco quemado que alumbra a la calle

EJEMPLOS DE ALGORITMOS MATEMATICOS


a. Algoritmo de Euclides

Máximo común divisor de dos números es el mayor de sus divisores comunes.

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.

Este método se basa en dos teoremas:

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.

El algoritmo para hallar el m.c.d.(a, b)

3. Dividiremos el mayor número entre el menor. Si el resto es 0, el m.c.d. es el menor.


4. Si el resto no es 0, se divide el menor por dicho resto, a continuación este resto por el
segundo, y así sucesivamente hasta llegar a una división exacta. El último divisor
empleado es el máximo común divisor.
b. Calcular la superficie de un triangulo en función de la base y la altura

Versión 1

1. Tomar el valor de la base


2. Tomar el valor de la altura
3. Calcular la superficie
4. Mostrar resultado
5. Fin

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

1. calcular el cuadrado de un número, por el método de la suma de los números impares.


2. calcular el área y volumen de un cilindro cuyas dimensiones radio y altura son conocidas
3. determinar la hipotenusa de un triangulo rectángulo conocidas las longitud de los catetos.

Uso en Programación
REPRESENTACION DE DATOS EN LA MEMORIA DEL COMPUTADOR

Se debe imaginar la memoria del computador, como un casillero con cientos o


miles de casillas dispuestas en 2 columnas, donde por un lado se tienen
las direcciones (de memoria) (columna izquierda) y por otro se tiene
el contenido almacenado en cada celda o casilla (columna derecha) el cual es
asociado o asignado a cada dirección de memoria. El computador maneja todos
estos datos en el sistema numérico binario.

Ejemplo:

Dirección Contenido
01000100 10001001
11100011 00111001
: :
01010101 10101010

Así por ejemplo, la dirección de memoria 01000100 contiene el dato 10001001.

Para nuestro propósito de programación simplificamos esta representación,


utilizando el sistema numérico decimal en vez del binario y usando termino
Variable en vez de dirección de memoria. Un ejemplo del estado de la memoria
del computador seria el siguiente:

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

La memoria del computador por lo general contiene inicialmente residuos de algún


trabajo anterior, lo cual se considera basura ya que la memoria normalmente no
se limpia al igual que se lo haría con la pizarra del aula al inicio de clases.

Luego mediante un algoritmo manipulamos o hacemos operaciones con


los contenidos a través de las variables (las variables por lo general
inicialmente contiene “basura”). Así por ejemplo el siguiente algoritmo manipula
los contenidos de las variables S, C, P, Q y SUMA y produce como resultado el
numero 9:

1. S <= 0 //asigna o asocia el cero a S o también se dice que se


inicializa S en 0
2. C<= 1 //asigna 1 a C o que se inicializa C en 1
3. P<= C*2 //P tendrá como contenido el contenido de C multiplicado
por 2
4. Q<= P+Q //Q tendrá como contenido la suma de los contenidos de
PyC
5. SUMA <= Q^2 //SUMA tendrá como contenido el contenido de Q al
cuadrado
6. Mostrar SUMA //Mostrara el contenido de suma
7. FIN //Finaliza el algoritmo

Explicación del algoritmo:


Los pasos 1 y 2 producen lo siguiente en la memoria del computador

S 0
C 1

En base lo efectuado en los pasos 1 y 2, los pasos 3, 4 y 5 producen lo siguientes


cambios en la memoria

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:

1. Se evalúa o calcula la expresión que esta al lado derecho de la flecha.


2. El valor resultante o calculado en 1) se asigna a la posición de memoria
indicada por la etiqueta del lado izquierdo. Así en el ejemplo de arriba, P
contiene 2 que resulta de multiplicar 1*2, donde 1 es el contenido de C (paso
3) y Q contiene 3 que resulta de sumar 2+1, donde P es 2 y C es 1 (paso
4), respectivamente.

Luego, un algoritmo consiste en manipulación de contenidos de las distintas


posiciones de memoria, en un orden indicado por el algoritmo y que finaliza cuando
lo determina explícitamente el algoritmo. Este orden de ejecución se indica
numerando los pasos en forma similar al de una receta, a partir del numero 1.
Elementos Básicos de Programación

Como se pudo advertir en el algoritmo previo, para escribir un algoritmo para el


computador, se requiere de un nivel de especificación mas detallado con respecto
al manejo de la memoria del computador lo cual se consigue con otros elementos
necesarios para hacer programación.

Los elementos necesarios son: asignación, contador, acumulador, obtención de


datos, mostrar datos o resultados, condicional y repetición.

i) ASIGNACION.- Consiste en asignarle un valor o contenido a una variable (la


cual se asocia a una dirección de memoria). Para dicha asignación, se usa la
siguiente notación:

variable <= valor o contenido (expresión)

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.

Las asignaciones pueden ser de 2 tipos:

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.

Ejemplo: // que asigna a Z el valor de 7, si antes de esta asignación se


Z <= 7 hubiese
tenido Z <= 3, el nuevo contenido de Z es 7, sin importar que
antes
contenía 3.

Asignación Diferida.- Que se efectúa si en lado derecho hay una expresión, en


cuyo caso primero se evalúa este lado derecho de la asignación, se calcula el valor
resultante y finalmente este valor se asigna a la variable en cuestión.

Ejemplos:

W <= // que asigna a W el resultado de la suma de los


A+B contenidos de A y B
Z <= Z+ // que asigna 10 a Z, si suponemos que antes Z contenía
3 7 (de la asignación directa). En este caso, para evaluar el
lado derecho usamos el anterior(actual) valor de Z, para
calcular el nuevo valor de Z (ahora actual).

ii) CONTADOR.- Consiste de 2 instrucciones que se deben ejecutar


obligatoriamente. La primera se debe hacer (o ejecutar) una sola vez, mientras
que la segunda se repite las veces que se necesite hacer o se requiera.

C <= 0 // que indica que el contenido de C o valor inicial es 0


Se lee: se inicializa C en 0 o también el valor inicial o contenido de
la posición de memoria asociada a C es 0.
C <= C // que indica que el contenido de C o valor asociado a C
+1 se incrementa en 1 cada vez que este paso se ejecute.
Se lee: El nuevo valor de C es el valor actual más uno
(+1). También, interpreta como que se asigna a C el
resultado de procesar la expresión que esta al lado
derecho de la flecha.
iii) ACUMULADOR.- Al igual que el contador, consiste de 2 instrucciones que se
ejecutan solo una vez la primera y todas las que se requieran la segunda,
respectivamente.

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

Una combinación de contador y acumulador, mostraría lo siguiente en la memoria


del computador:

1. C <= 0
2. S <= 0
3. X <= 7
Variable Contenido
S 0
C 0
X 7

Luego, si se ejecutan los siguientes pasos tenemos los siguientes cambios:

4.- C <= C + 1 // que incrementa en 1 el contenido de C


// que incrementa en X (o sea en 7) el
5.- S <= S + X
contenido de S
Variable Contenido
S 7
C 1
X 7

y una siguiente ejecución de las mismas instrucciones daría:

4.- C <= C +
1
5.- S <= S +
X
Variable Contenido
S 14
C 2
X 7

y así, sucesivamente.

Corresponde aclarar que en vez de dirección de memoria acostumbraremos usar


la palabra variable.

iv) OBTENCION DE DATOS.- Con frecuencia se requiere proveer de algún dato


al algoritmo (programa), en el momento en que este se esta ejecutando. Este
proceso permite cierta flexibilidad al algoritmo y se lo hace de la siguiente manera:

// que permitirá asignar un valor a X, en


Leer X
el momento que se ejecute este paso.
// que permitirá asignar un valor a X y
Leer X, Y
otro a Y, respectivamente

v) MOSTAR DATOS O RESULTADOS.- Los programas siempre deben mostrar


datos intermedios, resultados de sus procesos o cálculos, mensajes o combinación
de ellos. La forma de hacerlos es:

// que permitiría mostrar el valor


Mostrar S asociado o contenido de S en el
momento de ejecutarse este paso.
// que permite mostrar el contenido de
Mostrar “La suma es: “, S S a continuación del mensaje “La
suma es: ”
Mostrar “Hay “, S, “ Números // que permite mostrar el valor de S
positivos” entre los 2 mensajes.

Así por ejemplo, si S es 3 lo que se mostraría es: Hay 3 Números positivos

vi) CONDICIONAL.- En ciertos casos necesitamos ejecutar algún proceso bajo


cierta condición o situación, la forma de hacerlo será siguiendo la siguiente
sintaxis:

Si condición Entonces Instrucción1


Sino Instrucción2

Para ejecutarse un condicional, primeramente se evalúa condición. El valor


resultante de la evaluación puede ser Falso o Verdadero, si es verdadero se
ejecuta lo que sigue a Entonces; es decir Instruccion1, en caso contrario (si es
falso) se ejecutara lo que sigue Sino; es decir Instruccion2. Con un condicional,
se ejecuta solo una de las 2 situaciones posibles, nunca ambas.

Así por ejemplo, si se quiere hallar el mayor de 2 números A y B y, asignar en M


dicho mayor, el condicional correspondiente seria:

Sí A>=B Entonces M <= A


Sino M <= B

Que permite tener siempre en M el mayor de los números contenidos en A y B.

La parte A>=B representa la condición, la cual es evaluada para ejecutar lo que


sigue a Entonces o lo que sigue a Sino. Se ejecuta la parte que sigue
a Entonces (M <= A en este caso) si la condición se cumple, en caso contrario lo
que sigue a Sino (M <= B en este caso).

Una forma de probar este condicional es asignando valores a las variables A y B,


así entonces tenemos lo siguiente:

 Si A es 5 y B es 7, la evaluación de la condición da falso y se bifurca


por sino, en consecuencia se asigna 7 (el contenido de B) a M.
 Si A es 8 y B es 5, la evaluación de la condición da verdadero y se bifurca
por entonces, en consecuencia se asigna 8 (el contenido de B) a M.
 M contiene el mayor de A y B.

En ciertos casos las condiciones pueden ser compuestas, como ser:

Si A>0 y B>0 Entonces Q  0 // que indica que solo si A y B son positivos, se


asignara 0 a Q.

Si A=0 o B=0 Entonces Q <= 0 // que indica que si A es cero o si B es cero, o


ambos,
entonces se asigna 0 a Q
FinSi

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

En estos 2 últimos casos, si se cumple la condición, se ejecuta lo que sigue


a Entonces y luego, se prosigue con la instrucción que sigue al condicional (hacia
abajo o siguiente numero).
Las condiciones pueden ser mas complejas, incluyendo si es necesario funciones
matemáticas o funciones provistas por los lenguajes de programación, como en
los ejemplos que siguen.

Casos como:

 Si A+ B > C + D Entonces T <- 1


 Si A mod 2 = 0 Entonces Mostrar A
 Si X/2 = INT(X/2) Entonces Mostrar X
 Si T mod 3 = 0 y T mod 5 = 0 Entonces C <= C + 1 : Mostrar T

Obligan a evaluar la condición en el siguiente orden: primero se evalúan las


expresiones que están a los lados de los símbolos de desigualdades u operadores
de relación (=, >, >=, <, ><=, <>) y segundo, se verifica si cumple la condición.
Si se cumple, se ejecuta(n) la(s) operación(es) que sigue(n) a Entonces.

vii) REPETICION.- Con frecuencia, hay grupos de instrucciones en un algoritmo


que deben repetirse, la forma de hacerlo es transferir el control a la primera
instrucción del bloque de instrucciones a repetir y continuar a partir de ella. Así
por ejemplo si queremos mostrar uno a uno los valores contenidos en C, es decir
los números 1, 2, 3, 4, etc. nuestro algoritmo seria el siguiente:

El paso 4 del ejemplo, obliga a la repetición de los pasos 2 y 3. El paso 2 genera


un nuevo numero (es un contador) y el paso 3 muestra este numero generado, y
así sucesivamente.

Pero, esta forma de repetición no es controlada por lo que en el ejercicio estos


pasos 2 y 3 se repiten indefinidamente (CICLO INFINITO). Una forma de
controlar esto es anteponiendo una condición a la acción de Ir a 2, es decir
efectuando una combinación con el condicional visto anteriormente, con lo
que el paso 4 quedaría así

4.- Si (condición) entonces Ir a 2

en donde condición se debe definir en función de las variables que se manejan


en el programa, solo C en este caso. Luego una condición C < 10 modificaría el
ciclo infinito para que se repita solo 10 veces.
Como se vio líneas arriba, el manejo de la repetición tiene consecuencia
negativas, sino se maneja apropiadamente.

Ejemplo 1: Hallar la suma de los números del 1 al 10 y mostrar su resultado.

Si se entiende bien el problema, lo que se quiere es obtener la siguiente suma:

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:

C <= 0 y C <= C + 1 // contador


S <= 0 y S <= S + C // el acumulador, que irá haciendo la suma (acumulando)
los números generados por C, paso a paso, uno a la vez.

Con lo cual tenemos el siguiente algoritmo (parte de el):

1. C <= 0
2. S <= 0
3. C <= C+1
4. S <= S+ C

En este algoritmo hacemos que se repitan los pasos 3 y 4 durante 10 veces y


finalmente la solución obtenida será:

Los pasos 1 y 2 no deben repetirse (asignamos los valores iniciales para A y S, y


estos pasos deben ejecutarse una sola vez como se dijo al definir el contador y el
acumulador). La condición se obtiene en función de C cuyo principal propósito de
uso es el de contar y el otro propósito era para que genere los números a sumar.
El paso 6 se ejecuta siempre y cuando la condición en el paso 5 ya no sea
satisfecha (al no satisfacer la condición no prosigue en 3 y en consecuencia busca
ejecutar la siguiente instrucción del algoritmo que en este caso es 6).

La primera parte del contador y acumulador (C <= 0 y S <= 0) no deben estar en


la parte que se repite (por definición), deben ejecutarse una sola vez, por lo que
con frecuencia serán las primeras líneas o instrucciones en un algoritmo o
programa.

Ejemplo 2: Calcular y mostrar el factorial de X

Si el valor leído o asignado a X es 5, el calculo a efectuar debe ser:

1 x 2 x 3 x 4 x 5 = 120 que es lo mismo que,


5 x 4 x 3 x 2 x 1 = 120

Un análisis de los elementos requeridos no indica que se requiere de


un contador (la variable C) y algo parecido a un acumulador(la variable F) y
obviamente una repetición. Con estos elementos, se tiene el siguiente algoritmo:

En el paso 1, es necesario que F tenga el valor inicial de 1 por cuanto si fuese 0,


el paso 5 siempre asignaría 0 a F (0 multiplicado por cualquier numero es siempre
0).

En el último ejemplo, el último valor de C es 5, debido a que al ser creciente el


valor de C (cada vez se incrementan en 1), 5 hace que ya no se cumpla la condición
en el condicional y por lo tanto que no se ejecute lo que sigue a Entonces. Al no
satisfacer el condicional (no cumple su condición), el control se pasa a la línea que
sigue al condicional y así deja de ejecutarse la repetición.

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

Es la etapa más importante en el desarrollo de un programa, por cuanto el realizar la prueba de


escritorio nos permite saber :

1. Si el programa hace lo que debería hacer


2. Si no hace lo que debería hacer, nos permitirá detectar errores como ser:
 Si algún paso o instrucción no esta en el orden correcto
 Si falta algo
 Si algo esta demás
 Si los pasos o instrucciones que se repiten lo hacen más o menos veces de lo debido
 Si las instrucciones están en un orden apropiado
 Otros errores que pueden presentarse
3. Elegir los datos apropiados para la prueba

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.

Prosiguiendo, en el paso 5 al evaluar el contenido de C que es 1 se deduce que la condición se cumple,


por lo que se va al paso 3 y se produce lo siguiente (nuevamente pasos 3 y 4):
y así sucesivamente, hasta que el condicional que obliga a la repetición ya no cumpla la condición,
luego entonces ejecutar los pasos 6 y 7, para luego terminar.

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.

En la prueba de escritorio, si hay repeticiones, es suficiente probar un numero razonable de veces ( 5 o


10). Así por ejemplo, si el ejercicio pide calcular el promedio de 1000 números leídos, no será
necesario probar con los 1000, será suficiente probar con 5 o 10.

La prueba consistirá en 2 etapas:

 La primera, en probar inicialmente que el programa funcione correctamente, para lo que se


elegir´ algunos datos fáciles de probar, cosa que siempre es posible.
 La segunda, si se prueba que ya funciona, se buscaran otros datos (si los hay) que hagan que
falle el algoritmo, en cuyo caso se habrán de detectar otros errores. Si el algoritmo no falla,
podemos concluir que el programa esta terminado y revisado, por lo tanto correcto.

DATOS PARA LA PRUEBA DE ESCRITORIO

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.

1. Leer nota // suponemos que es un valor entre 0 y 100


2. Si nota >= 51 Entonces Mostrar “APROBADO”
3. Si nota < 50 Entonces Mostrar “REPROBADO”
4. Si nota >= 50 y nota <51 Entonces Mostrar “CASO ESPECIAL”
5. FIN

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. Leer N // suponemos entero y positivo


2. C <- 0 : CD <- 0 // C es un simple contador y ND contador de divisores
3. C <- C + 1
4. Si N MOD C = 0 Entonces CD <- CD + 1 // contamos los divisores
5. Si C < N Entonces ir a 3 // si aun el contador no llego a N
6. Si C = 2 Entonces Mostrar “SI ES” Sino Mostrar “NO ES” // si C es 2, solo tiene 2
// divisores, luego ES PRIMO
7. FIN

Caracteristicas de los Algoritmos

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

En los problemas siguientes, desarrolle el programa que solucione dicho


problema usando la herramienta de PROGRAMACION denominada ALGORITMOS

1. Hallar y mostrar la sumatoria de los números del 1 al 10


2. Hallar e imprimir el factorial de un numero dado “N”, entero positivo
3. Hallar la suma de los 20 primeros números pares
4. Hallar la suma de los 10 primeros múltiplos de 3
5. Generar e imprimir los múltiplos de 7 en el intervalo 100 a 200
6. Calcular el cuadrado de un numero dado, por el siguiente método:
Si N=4 -> su cuadrado es: 1 + 3 + 5 + 7 = 16
Si N=5 -> su cuadrado es: 1 + 3 + 5 + 7 + 9 = 25
7. Calcular PI mediante la serie de Gregory PI/4 = 1 – 1/3 + 1/5 – 1/7 + 1/9
......
con 100 terminos
8. Hallar la suma de la siguiente serie: 1, 1/2 , 1/3, 1/4, 1/5, 1/6, 1/7, ....... ,
1/10
9. Hallar la suma de la siguiente serie: 1/2, 3/4, 5/8, 7/16, 9/32,
11/64,......., 19/1024
10. Generar y mostrar los 1os 50 #s de las series:
a. 1, 3, 9, 27, 81, 243, ------
b. 0, 1, 1 2, 3, 5, 8, 13, 21, 34, 55 -----------
c. 0, 6, 0, 6, 6, 6, 12, 12, 18, 24, 30, ----------
11. Leídos 10 números, hallar y mostrar el promedio de todos ellos
12. Leídos 10 números, hallar e imprimir el mayor de ellos
13. Leídos 10 números, diga cuantos de ellos son positivos
14. Leídos 10 números, diga cuantos de ellos son positivos, cuantos negativos
y cuantos ceros.
15. Leídos 10 números, diga cuantos de ellos son pares y cuantos son impares
16. Leídos 10 números, diga cuantos de ellos son múltiplos de 3, cuantos
múltiplos de 5 y cuantos múltiplo de ambos.
17. Dados 2 números A y B, efectuar la multiplicación por el método de sumas
sucesivas
18. Dados 2 números A y B ( A > B ), efectuar la división por el método de
restas sucesivas. Mostrar el resto si es que queda.
19. Dado un numero, diga si este es un numero primo o no.
20. Leído un numero (entero y positivo), diga si es o no un numero perfecto.
Un numero es perfecto si es igual a la suma de todos sus divisores,
excepto el mismo numero. Por ejemplo 6 = 1 + 2 + 3 y 28 = 1 + 2 + 4 +
7 + 14, son números perfectos.
EJERCICIOS RESUELTOS CON ALGORITMOS
<hr</hr
1. Leído N, un numero entero y positivo, verifique si es o no un numero
PRIMO. Un numero es numero primo si solo tiene 2 divisores, la unidad y
el numero mismo.

Ejemplo: 7 es un numero primo (tiene como divisores al 1 y al 7), 8 no lo


es (tiene como divisores al 1, 2, 4 y 8).

Solución:

Explicación:

Si bien para un mejor entendimiento de lo que hace el algoritmo se debe


efectuar la prueba de escritorio, se hacen los siguientes comentarios:

 mod es la función modulo que nos da el resto de la división de un


numero por otro. Por ejemplo, 8 mod 3 da como resultado 2 y
10 mod 2 da 0.
 C es un contador y lo usamos para saber (instrucción #4) cuales C
dan resto 0
 Si cierto C aplicado mod a N da resto 0 (instrucción #4), entonces C
es un divisor de N
 Debemos contar los divisores de N, para este propósito usamos el
contador CD (CD = contador de divisores en la instrucción #4).
 Si CD es 2, significa que el numero solo tiene 2 divisores, por lo
tanto es numero PRIMO, de lo contrario tiene más divisores y en
consecuencia no es numero primo (instrucción #6).
 Los posibles divisores de N son el 1, 2, 3, 4, ....... N. La variable C
toma estos valores, uno a la vez en forma creciente (es el contador).

2. Leídos 2 números enteros y positivos, multiplicarlos en base a sumas


sucesivas.

Ejemplo: si A = 5 y B = 3
Se suma A, B veces
Aunque también otra alternativa es sumar B, A veces.

Siguiendo la primera alternativa, la solución seria:

Explicación:

 Acumulamos A en S, para el ejemplo acumulamos 5 en S


(instrucción 3)
 Debemos acumular B veces, para el ejemplo 3 veces (instrucción
3, 4 y 5)
 C cuenta las veces que se debe acumular A (debe incrementarse
hasta llegar a B)
 El resultado de la multiplicación es lo que contiene el acumulador S
y entonces se muestra el contenido de S, antecedido por el mensaje
“A x B” (instrucción 6).

La segunda alternativa, da como solución lo siguiente:

Explicación:

 Sobre la solución anterior (primera alternativa), solo se ha


permutado A por B en las instrucciones 3 y 5
 C que hace de contador cuenta hasta A, en la solución anterior C
contaba hasta B

3. Leído N, entero y positivo, calcular su cuadrado, por el método de la suma


de los primeros números impares.

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:

 Análisis.- Estudiamos el problema para entenderlo bien y luego


comenzar a bosquejar la solución.

Del análisis del problema deducimos que se requieren los siguientes


elementos, para obtener el algoritmo solución a este problema:

 Un generador de números impares (I <= -1 y I <= I +2)


 El generador I debe comenzar en –1, porque el primer
elemento requerido será el 1 para nuestro calculo.
 Necesitamos N números generados por I, luego requerimos el
contador (C <= 0 : C <= C + 1)
 Debemos sumar los impares generados por I, luego requerimos
el acumulador S (S <= 0 y S <= S + I)
 Debemos repetir varios pasos, luego requerimos un condicional
para controlar la repetición. La condición estará en función del
contador C.
 Debemos mostrar el resultado
 Diseño.- Con los elementos resultantes del análisis, escribimos el
algoritmo que sigue a continuación.
En esta solución, el contador y el condicional nos permiten controlar
las veces que debemos repetir los pasos 2 y 3.

También se puede controlar las repeticiones con la variable I. Como


se puede ver en los ejemplos, con N=4 el I se incrementa hasta 7 es
decir (2xN)-1, con N=5 el I se incrementa hasta 9 es decir (2xN)-1 y
en general el limite es (2xN)-1.

Luego se puede tener una segunda solución controlando la repetición


sobre I, obviando el contador, esto es:

EJERCICIOS RESUELTOS CON ALGORITMOS


<hr</hr
1. Leído N, un numero entero y positivo, verifique si es o no un numero
PRIMO. Un numero es numero primo si solo tiene 2 divisores, la unidad y
el numero mismo.

Ejemplo: 7 es un numero primo (tiene como divisores al 1 y al 7), 8 no lo


es (tiene como divisores al 1, 2, 4 y 8).

Solución:

Explicación:

Si bien para un mejor entendimiento de lo que hace el algoritmo se debe


efectuar la prueba de escritorio, se hacen los siguientes comentarios:
 mod es la función modulo que nos da el resto de la división de un
numero por otro. Por ejemplo, 8 mod 3 da como resultado 2 y
10 mod 2 da 0.
 C es un contador y lo usamos para saber (instrucción #4) cuales C
dan resto 0
 Si cierto C aplicado mod a N da resto 0 (instrucción #4), entonces C
es un divisor de N
 Debemos contar los divisores de N, para este propósito usamos el
contador CD (CD = contador de divisores en la instrucción #4).
 Si CD es 2, significa que el numero solo tiene 2 divisores, por lo
tanto es numero PRIMO, de lo contrario tiene más divisores y en
consecuencia no es numero primo (instrucción #6).
 Los posibles divisores de N son el 1, 2, 3, 4, ....... N. La variable C
toma estos valores, uno a la vez en forma creciente (es el contador).

2. Leídos 2 números enteros y positivos, multiplicarlos en base a sumas


sucesivas.

Ejemplo: si A = 5 y B = 3
Se suma A, B veces

Aunque también otra alternativa es sumar B, A veces.

Siguiendo la primera alternativa, la solución seria:

Explicación:

 Acumulamos A en S, para el ejemplo acumulamos 5 en S


(instrucción 3)
 Debemos acumular B veces, para el ejemplo 3 veces (instrucción
3, 4 y 5)
 C cuenta las veces que se debe acumular A (debe incrementarse
hasta llegar a B)
 El resultado de la multiplicación es lo que contiene el acumulador S
y entonces se muestra el contenido de S, antecedido por el mensaje
“A x B” (instrucción 6).

La segunda alternativa, da como solución lo siguiente:

Explicación:

 Sobre la solución anterior (primera alternativa), solo se ha


permutado A por B en las instrucciones 3 y 5
 C que hace de contador cuenta hasta A, en la solución anterior C
contaba hasta B

3. Leído N, entero y positivo, calcular su cuadrado, por el método de la suma


de los primeros números impares.

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:

 Análisis.- Estudiamos el problema para entenderlo bien y luego


comenzar a bosquejar la solución.

Del análisis del problema deducimos que se requieren los siguientes


elementos, para obtener el algoritmo solución a este problema:

 Un generador de números impares (I <= -1 y I <= I +2)


 El generador I debe comenzar en –1, porque el primer
elemento requerido será el 1 para nuestro calculo.
 Necesitamos N números generados por I, luego requerimos el
contador (C <= 0 : C <= C + 1)
 Debemos sumar los impares generados por I, luego requerimos
el acumulador S (S <= 0 y S <= S + I)
 Debemos repetir varios pasos, luego requerimos un condicional
para controlar la repetición. La condición estará en función del
contador C.
 Debemos mostrar el resultado
 Diseño.- Con los elementos resultantes del análisis, escribimos el
algoritmo que sigue a continuación.

En esta solución, el contador y el condicional nos permiten controlar


las veces que debemos repetir los pasos 2 y 3.

También se puede controlar las repeticiones con la variable I. Como


se puede ver en los ejemplos, con N=4 el I se incrementa hasta 7 es
decir (2xN)-1, con N=5 el I se incrementa hasta 9 es decir (2xN)-1 y
en general el limite es (2xN)-1.

Luego se puede tener una segunda solución controlando la repetición


sobre I, obviando el contador, esto es:
Ejemplo Rotar Digitos

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:

En función de esta notación posicional consideremos lo siguiente:

 Si nuestro N es 12345 (N = 12345), el último dígito que en este caso es 5, en el numero


original solo vale 5 ( 5 x 10 ^ 0 = 5 x 1 = 5), mientras que en el numero ya rotado vale
50000 (5 x 10 ^ 4 = 5 x 10000 = 50000).
 La potencia de 10 que se necesita para obtener el nuevo valor del 5 (50000) es cuatro, que es
simplemente la cantidad de dígitos del numero original menos 1 (por ejemplo X-1).
 Además, al quitar el último dígito al numero original, los demás dígitos pierden valor al
disminuir cada uno en una potencia de 10 (el 4 antes era cuarenta, el 3 ahora es treinta y ya
no es trescientos y 2 que era dos mil ahora solo es 200).

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.

NOTA.- Efectué la prueba de escritorio, para una mejor comprensión de la solució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.

Con estos elementos, el algoritmo resultante es:


Los pasos 3, 4 y 5 obtienen el resto, dejando en N el primer digito.
El paso 6 suma las 2 partes.

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.

SOLUCION: Añadir repetición ( 3 veces), sobre una de las soluciones anteriores.

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.

SOLUCION: Añadir repetición ( 3 veces), sobre una de las soluciones anteriores.


Algoritmos en Medicina

Prof. Dr. Edgardo A. Marecos

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.

El carácter general expresado anteriormente, obliga a quienes pretenden fabricar algoritmos, a


desglosar los problemas en instrucciones simples y concretas, con un número limitado de pasos acorde
con la complejidad de los mismos y la necesidad de hacerlos fácilmente comprensibles para
cualquiera. Es necesario explicitar claramente el orden a seguir.

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.

Simbología de los algoritmos

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.

Otro inconveniente a tener en cuenta es acostumbrarse exclusivamente a algoritmos ajenos y pretender


que sean lo que no son, no son la verdad, son tan solo una herramienta y su eficiencia dependerá del
uso que se le dé. Un detalle para tener en cuenta es la existencia de una propuesta para crear un centro
de algoritmos.

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:

 ver si un numero es positivo (estructura condicional),


 leer un numero entero por 10 veces (estructura repetitiva para)
 leer un numero entero mientras no sea negativo (estructura repetitiva mientras).

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

Llamados también estructuras de decisión, son de 3 tipos.

a.-Simple (de una sola rama)

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.

b.- Completo (de ambas ramas)

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)

Hay 2 soluciones posibles, dependiendo de los condicionales que se usen:

1. Con condicionales simples, el orden de los condicionales NO importa

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.

2. Con condicionales completos, el orden de los condicionales SI importa

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.

1. Con condicionales simples

2. Con condicionales completos y anidados

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

El programa respectivo en pseudo-código seria:

Que es equivalente a los condicionales siguientes:


Luego, el condicional múltiple es una especie de factorización del condicional de los condicionales
simples, en función de la variable común de la condición (N en el ejemplo).
Repetición o Iteración
Principalmente tenemos dos casos, aquellos en los que SI sabemos cuantas veces queremos repetir
algo y aquellos casos en los que NO sabemos cuantas veces queremos repetir ese algo.

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:

Donde VC es la variable de control, VI es el Valor Inicial de la variable de control, VF es


el Valor Final que debe tomar esta variable de control y Q el valor que se incrementa al
anterior valor de dicha variable de control, cada vez que se ejecuten las sentencias que están
dentro del Para (el cuerpo del para).
por ejemplo:

Para i=1 hasta 50 incremento 1


:::::::::::::::::::
FinPara

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:

Para i=1 hasta 10 incremento 0.1,


que hará que i tome los valores 1, 1.1, 1.2, 1.3, 1.4, ................9.7, 9.8, 9.9, 10

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.

El Para puede escribirse también en forma abreviada:


Ejemplo Para i = 1, 50, 1

Algunos Para nos dan construcciones especiales como ser:

Para k=0, 20, 2 nos da los números pares 0, 2, 4, 6, ...... 20,


Para k=1, 19, 2 nos da los números impares 1, 3, 5, 7, ......19 y,
Para k=7, 100,7 nos da los números múltiplos de 7 que son 7, 14, 21, ...

En algunos casos puede un para no ejecutarse, como en el siguiente caso:


Este bloque Para no se ejecuta debido a que, en la primera evaluación que se efectúe para
determinar el valor inicial y el valor final de la variable de control i, y el incremento que
permitiría llegar desde el valor inicial hasta el valor final se ve que es imposible llegar desde
20 hasta 1 con un incremento positivo de 1, en consecuencia esta incongruencia hace que
este Para no se ejecute. Dicho de otro modo, se ejecuta 0 veces y luego entonces se prosigue en
la instrucción siguiente a FinPara.

Ejemplo 1.- Leídos 10 números, hallar y mostrar su promedio.

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

Ejemplo 3.- Leídos 2 números A y B, enteros y positivos, efectuar su multiplicación por el


método de sumas sucesivas.
INICIO
Leer A, B // suponemos que son enteros y positivos
suma <= 0
Para k=1, A, 1
suma <= suma + B
FinPara
Mostrar suma
FIN
Obviamente la solución consiste en sumar(acumular) A, B veces. A la inversa también es
posible, es decir sumar(acumular) B pero A veces.

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:

Ejercicios Propuestos para Resolver con Pseudo-Codigo


En los problemas, desarrolle el programa que solucione dicho problema. En los algoritmos debe
traducirlos a pseudo-código.

1. Hallar y mostrar la sumatoria de los números del 1 al 10


2. Hallar e imprimir el factorial de un numero dado “n”, entero positivo
3. Hallar la suma de los 20 primeros números pares
4. Hallar la suma de los 10 primeros múltiplos de 3
5. Generar e imprimir los múltiplos de 7 en el intervalo 100 a 200
6. Calcular el cuadrado de un numero dado, por el siguiente método:
Si N=4 -> su cuadrado es: 1 + 3 + 5 + 7 = 16
Si N=5 -> su cuadrado es: 1 + 3 + 5 + 7 + 9 = 25
7. Calcular PI mediante la serie de Gregory
PI/4 = 1 – 1/3 + 1/5 – 1/7 + 1/9 ......
Para 100 terminos
8. Hallar la suma de la siguiente serie: 1, 1/2 , 1/3, 1/4, 1/5, 1/6, 1/7, ....... , 1/10
9. Hallar la suma de la siguiente serie: 1/2, 3/4, 5/8, 7/16, 9/32, 11/64,......., 19/1024
10. Generar y mostrar los 1os 50 #s de las series:
 1, 3, 9, 27, 81, 243, ------
 0 1 1 2 3 5 8 13 21 34 55 -----------
 0 6 0 6 6 6 12 12 18 24 30 ----------
11. Leídos 10 números, hallar y mostrar el promedio de todos ellos
12. Leídos 10 números, hallar e imprimir el mayor de ellos
13. Leídos 10 números, diga cuantos de ellos son positivos
14. Leídos 10 números, diga cuantos de ellos son positivos, cuantos negativos y cuantos ceros.
15. Leídos 10 números, diga cuantos de ellos son pares y cuantos son impares
16. Leídos 10 números, diga cuantos de ellos son múltiplos de 3, cuantos múltiplos de 5 y cuántos
múltiplo de ambos. Considere que 15 y sus múltiplos pueden corresponder a los 3 casos.
17. Leídos 10 números, diga cuantos de ellos son múltiplos de 3, cuantos múltiplos de 5 y cuántos
múltiplo de ambos. Considere que 15 sólo corresponde al tercer caso y también todos los
múltiplos de15 (de 3 y 5).
18. Leídos 10 números que representan notas, diga cuantos corresponden a cada una de las
siguientes clasificaciones:
Excelente si 80 < nota <= 100
Muy Bueno si 70 < nota <= 80
Bueno si 60 < nota <= 70
Regular si 40 < nota <= 60
Malo si 0 < nota <= 40
19. Leída una nota (un número entre 0 y 100), se quiere emitir un mensaje según las siguientes
consideraciones: “APROBADO” si la nota es mayor o igual que 51, “REPROBADO” si la
nota no es cero pero es menor que 50, “ABANDONO” si la nota es cero y “CASO
ESPECIAL” si la nota es menor a 51 y mayor o igual a 50.
20. Leído un numero, descomponer en sus factores primos y mostrarlos. Por ejemplo, el 24 se
descompone en 2x2x2x3=24, el 27 en 3x3x3=27 y 56 en 2x2x2x7=56.
21. Leído un numero, descomponer en sus factores primos y mostrar su suma. Para los mismos
números del ejercicio 21) tendríamos las sumas de: 9, 9 y 13 respectivamente.
22. Leído un numero, diga en cuantos factores primos diferentes se descompone. Para los mismos
números del ejercicio 21) tendríamos 24 ->, 27 -> 1 y 56 -> 2, respectivamente.
23. Dados 2 números, calcular y mostrar el mcd de dichos números
24. Dados 2 números A y B, efectuar la multiplicación por el método de sumas sucesivas
25. Dados 2 números A y B ( A > B ), efectuar la división por el método de restas sucesivas.
Mostrar el resto si es que queda.
26. Dados 2 números A y B, con A distinto de B (no sabemos cual es el mayor), efectuar la
división por el método de restas sucesivas. Mostrar el resto si es que queda.
27. Dado un numero, diga si este es un numero primo o no.
28. Mostrar todos los números primos menores a 1000
29. Mostrar los primeros 10 números perfectos.
30. Leídos 3 números, calcular y mostrar el mcd de dichos números
31. Leído un numero (entero y positivo), diga si es o no un número perfecto. Un numero es
perfecto si es igual a la suma de todos sus divisores, excepto el mismo número. Por ejemplo 6
= 1 + 2 + 3 y 28 = 1 + 2 + 4 + 7 + 14, son números perfectos.
32. Leído un numero (entero y positivo), diga si es o no un numero espejo. Un numero es espejo si
visto de izquierda a derecha o a la inversa es el mismo número. Por ejemplo 12321, 55, 124421
y 333333333 son números espejo.
33. Leído un numero (entero y positivo), rotar sus dígitos hacia la derecha. Por ejemplo 12345
rotado a derecha es 51234 (el último de la derecha será el primero de la izquierda).
34. Leído un numero (entero y positivo), rotar sus dígitos hacia la Izquierda. Por ejemplo 12345
rotado a izquierda es 23451 (el primero de la izquierda será el último de la derecha).
35. 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.
36. 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.
37. Leído N un número entero y positivo, desarrollar (generar) y mostrar la serie de Fibonacci con
N términos. Por ejemplo si N = 9 tendríamos: 0, 1, 1, 2, 3, 5, 8, 13, 21.
38. Leído N un número Real y Positivo, diga cuantos dígitos enteros y cuantos fraccionarios tiene.
El numero 12345.241 tiene 5 dígitos enteros y 3 fraccionarios.
39. Leído N un número Real y Positivo, convertir el número a entero llevando la parte fraccionaria
a la parte entera. Por ejemplo 123.45 será 12345.
40. Desarrollar la serie de Fibonacci hasta encontrar un numero primo de 3 dígitos
41. Desarrollar la serie de Fibonacci hasta encontrar un numero espejo de mas de 3 dígitos
42. Desarrollar la serie de Fibonacci hasta encontrar un numero perfecto mayor a 1000
43. Dado el siguiente algoritmo, describa el problema que resuelve (pruebe con 123456 y luego
con 123456.789), en el segundo caso ocurre algo, puede remediarlo?, como ?
 Leer N
 C <= 0
 N <= N div 10 // div divide N entre 10, entonces pierde un dígito a la derecha
 C <= C + 1
 Si N>0 Entonces Ir a 3
 Mostrar C
 FIN
44.- Dado el siguiente algoritmo, describa el problema que resuelve (pruebe con 18 y 27)
1. Leer A, B
2. Si A>B Entonces A <= A – B
3. Si B>A Entonces B <= B – A
4. Si A >< B Entonces Ir a 2
5. Mostrar A
6. FIN
45.- Dado el siguiente algoritmo, describa el problema que resuelve (pruebe con 3 y 5, luego con 5
y 3). De un ejemplo que haga que el algoritmo falle(si falla, cual la solución ?).
1. Leer A, B
2. C <= 0 : S <= 0
3. S <= S + A
4. C <= C + 1
5. Si C < B Entonces Ir a 3
6. Mostrar S
7. FIN
46.- Dado el siguiente algoritmo, describa el problema que resuelve (pruebe con 3 y 5, luego con 5
y 3). De un ejemplo que haga que el algoritmo falle(si falla, cual la solución ?).
1. Leer A, B
2. S <= 0
3. S <= S + A
4. B <= B – 1
5. Si B>0 Entonces Ir a 3
6. Mostrar S
7. FIN
47.- Dado el siguiente algoritmo, describa el problema que resuelve (pruebe con 8 y 2, luego con 8
y 3). De un ejemplo que haga que el algoritmo falle(si falla, cual la solución ?).
1. Leer P, Q
2. C <= 0
3. Si P>Q Entonces May <= P : Men <= Q
4. Si Q>P Entonces May <= Q : Men <= P
5. May <= May – Men : C <= C + 1
6. Si May >= Men Entonces Ir a 5
7. Mostrar C
8. FIN
48.- Dado el siguiente algoritmo, describa el problema que resuelve (pruebe con los números 7, 8,
9 y 11).
1. Leer N // suponemos que el N leído será entero y positivo
2. C <= 0 : D <= 0
3. C <= C+1
4. Si N mod C = 0 Entonces D <= D+1
5. Si C < N Entonces Ir a 3
6. Si D = 2 Entonces Mostrar “Si es” Sino Mostrar “No es”
7. FIN
49.- Dado el siguiente algoritmo, describa el problema que resuelve (pruebe con los números 7, 8,
9 y 11).
1. Leer N // suponemos que el N leído será entero y positivo
2. C <= 1 : D <= 0
3. C <= C+1
4. Si N mod C = 0 Entonces D <= D+1
5. Si C < N/2 Entonces Ir a 3
6. Si D = 0 Entonces mostrar “Si es ........” Sino Mostrar “No es ...........”
7. FIN
50.- Dado el siguiente algoritmo, describa el problema que resuelve (pruebe con los números 6, 8 y
28).
1. Leer N // suponemos que el N leído será entero y positivo
2. C <= 0 : S <= 0
3. C <= C+1
4. Si N mod C = 0 Entonces S <= S+C
5. Si C < N-1 Entonces Ir a 3
6. Si S = N Entonces mostrar “Si es ........” Sino Mostrar “No es ...........”
7. FIN

También podría gustarte