Sie sind auf Seite 1von 217

Programa Universidad Virtual

Pagina principal

MÓDULO 1: INTRODUCCIÓN A LA PROGRAMACIÓN

MÓDULO 2: CONSTRUCTORES BÁSICOS (PARTE A)

MÓDULO 3: CONSTRUCTORES BÁSICOS (PARTE B)

MÓDULO 4: ARREGLOS Y MATRICES

MÓDULO 5: FUNCIONES Y PROCEDIMIENTOS

MÓDULO 6: REGISTROS

__

Pagina principal

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [11/02/2008 11:57:07 p.m.]


Programa Universidad Virtual

MÓDULO 1. Introducción a la programación.

● 1. Introducción a la programación.
● 1.1 Historia de la computación
● 1.2 Estructura de un computador
● 2. Introducción a los algoritmos.
● 2.1 Algoritmos
● 2.2 Problemas
● 2.3 Teoria de la programacion estructurada
● 3. Metodología de programación un-programa.
● Introducción
● 3.1 Diálogo
● 3.2 Especificación de algoritmos
● 3.3 Diseño estructurado de algoritmos

MÓDULO 2. Constructores básicos (Parte A)

● 4. Los datos en programación.


● 5. Estructuras de control.

Módulo 3. Constructores básicos (Parte B)

● 6. Estructuras repetitivas.

Módulo 4. Arreglos y matrices.

● 7. Arreglos y matrices.

Módulo 5. Funciones y procedimientos

● 8. Funciones.

Módulo 6. Registros

● 14. Registros.

__

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [11/02/2008 11:57:55 p.m.]


Programa Universidad Virtual

LA FABRICACION EN
HISTORIA DE LA
SERIE
COMPUTACIÓN

1.1.1 ANTECEDENTES

El ábaco es considerado como el primer instrumento elaborado por el hombre


para realizar operaciones aritméticas de manera más eficiente. El ábaco no
realiza cálculos de manera autónoma (por si solo), simplemente le permite al
hombre realizarlos de manera más eficiente. La primera máquina que
realizaba cálculos de manera autónoma fue inventada en 1642 por el gran
matemático y filósofo francés Blas Pascal. La máquina de Pascal (en honor a
su inventor), era movida mediante una serie de ruedas dentadas, numeradas del
cero al nueve, alrededor de sus circunferencias y era capaz de sumar y restar.

Figura 1. Máquina de Pascal (1642)

En 1671 Gottfried Wilhelm Leibniz le adicionó a la máquina de Pascal un


cilindro diseñado especialmente para que fuera capaz de multiplicar y dividir
de manera directa. A principios del siglo XIX el ingeniero Joseph Marie
Jacquard perfeccionó el concepto de tarjeta perforada, con el cual se
podían “programar” las máquinas de tejer para que siguieran un patrón o diseño.
Este concepto fue posteriormente utilizado en las máquinas de cómputo para
decirles que debían calcular.

Pero ninguno de estos avances fue antecesor directo de las computadoras


electrónicas de hoy. La verdadera precursora de la computadora fue la
máquina llamada “motor de diferencias”, construida en 1822 por Charles Babbage
para calcular algoritmos y tablas astronómicas.

A partir de su trabajo en el motor de diferencias, Babbage diseñó un


poderoso instrumento para el cálculo automático. Tal como lo concibió Babbage,
este “motor analítico” estaría impulsado por vapor, y trabajaría basado en
un programa de planeación almacenado en tarjetas perforadas. Concibió
una memoria, un procesador aritmético, los medios de ingresar datos y/
o instrucciones, así como una sección de producción que escribiría los resultados
de las computaciones.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:09:40 a.m.]


Programa Universidad Virtual

Todos estos son los elementos de las computadoras modernas y no se


hicieron realidad sino varias generaciones después de ser propuestos por
Babagge. Charles Babbage no pudo implementar el motor analítico y murió sin
saber que realmente funcionaba.

Figura 2. Máquina Diferencial de Charles Babbage

Durante los cien años siguientes, las máquinas activadas por tarjetas perforadas
se modificaron, se mejoraron e hicieron más rápidas, pero aún no podían mantener
el ritmo de las crecientes necesidades humanas de procesamiento de listas de
pagos, cuentas, facturas, análisis de ventas y otros problemas.

En 1937, Howard H. Aiken, un candidato al doctorado en física de Harvard, trabajó


en una máquina que podría resolver automáticamente ecuaciones diferenciales. La I.
B.M. (International Business Machines), hoy una de las más grandes empresas de
esta fase de la industria norteamericana, ayudo al inventor a crear la
“Calculadora Controlada de Secuencia Automática” conocida como el “Mark I”.

Figura 3. Mark I

El Mark I era un monstruo de cuatro y media toneladas métricas, con 78


aparatos independientes vinculados por unos 800 kilómetros de cable. En
tres décimas de segundo podía efectuar sumas y restas de 23 dígitos y en cerca de
6 segundos podía multiplicar números de 23 dígitos. Fue retirado en 1959.

Tanto el Mark I como la Segunda Guerra Mundial desempeñaron un papel clave en


el desarrollo de las computadoras. El Mark I aportó los ingredientes
http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:09:40 a.m.]
Programa Universidad Virtual

tecnológicos básicos mientras que la segunda guerra mundial con sus


inmensas demandas de mano de obra y máquinas, creó la necesidad. El resultado
fue el Integrador y Calculador Numérico Electrónico, más conocido como el “ENIAC”.

Figura 4. ENIAC

Terminado en 1946, el ENIAC fue creado para el ejército norteamericano en la


escuela Moore de Ingeniería Eléctrica, de la Universidad de Pennsylvania.
Sus creadores fueron un estudiante graduado, J. Presper Eckert, y un físico, el
Dr. John W. Mauchly. Juntos eliminaron la necesidad de las partes que se
movían mecánicamente en la computadora central. En su lugar, adaptaron
circuitos eléctricos de gatillo “flip-flop” y “pulsaciones” electrónicas para conectar
o desconectar tubos al vacío, como interruptores.

Como las interrupciones de este tipo podían hacerse miles de veces más rápido que
los aparatos electro-mecánicos, el ENIAC constituyó un gran inicio hacia el
desarrollo de las computadoras modernas.

El último paso para completar el concepto de la computadora de hoy, fue el


desarrollo del concepto de máquina almacenadora de programas. Este paso se dio
a fines de los cuarenta, después de que el célebre matemático
hungaro-norteamericano Dr. John Von Neumann sugirió que las instrucciones
de operación, así como los datos, se almacenaran de la misma manera en
la “memoria” de la computadora. Además, aportó la idea de haga que la
computadora modificara sus propias instrucciones de acuerdo con un
control programado. Desde entonces, se ha tratado de modificar, mejorar y
apresurar estos conceptos, en fin, de haga computadoras cada vez más eficientes.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:09:40 a.m.]


Programa Universidad Virtual

Figura 5. Computador electrónico – IBM 360


__
LA FABRICACION EN
HISTORIA DE LA
SERIE
COMPUTACIÓN

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:09:40 a.m.]


Programa Universidad Virtual

ESTRUCTURA DE UN
HISTORIA DE LA
COMPUTADOR
COMPUTACIÓN

1.1.2 LA FABRICACION EN SERIE (GENERACIONES


DE COMPUTADORES)

Se suelen considerar cinco generaciones:.

Generación Cero: En la cuál el hombre construyó máquinas, usando


dispositivos mecánicos tales como ruedas dentadas y piñones, para
realizar básicamente operaciones aritméticas como suma, resta, multiplicaciones
y divisiones. Estas máquinas se conocen con el nombre de Máquinas Aritméticas.

Figura 6. Folleto promocional de una máquina aritmética

Primera Generación: En la cuál el hombre construyó máquinas de cálculo


para tareas muy específicas como investigación y militares, usando
dispositivos electro-mecánicos como relés y tubos de vacío (los cuales le dieron
paso a los elementos transistorizados). Las máquinas de computo de esta
generación tenían pocas facilidades de programación.

Segunda Generación: En la cuál el hombre construyó computadores


(máquinas de cálculo), basados en el transistor.
http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:10:10 a.m.]
Programa Universidad Virtual

Los computadores de esta generación tienen propósito general, no son


usados únicamente para la investigación y el aspecto militar, ya son usados en el
arte, la economía y la industria. Adicionalmente, aparecen los primeros lenguajes
de programación.

Figura 7. Dibujo esquemático de un transistor

Tercera Generación: En la cual el hombre construye diferentes tipos


de computadores, basados en el desarrollo de los circuitos integrados. En
esta generación se desarrollan los primeros programas de software de tipo específico.

Figura 8. Computador Electrónico -VAX

Cuarta Generación: En la cual el hombre construye computadores de


tamaño pequeño pero de gran capacidad, llamados microcomputadores, los
cuales están basados en el microprocesador. La aparición del microprocesador
se debe a los desarrollos hechos en la tecnología VLSI (Integración de Gran
Escala). En esta generación se hacen aplicaciones de software orientadas al
usuario final.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:10:10 a.m.]


Programa Universidad Virtual

Figura 9. El Apple-II, Primer Computador Personal

Quinta Generación: En la cual el hombre construye computadores con más de


un procesador, cada uno con una tarea específica como procesamiento de imagen
y procesamiento de sonido, y/o con una tarea en común. Adicionalmente
se construyen computadores capaces de auto-configurarse, auto-programarse, etc.
En esta generación se desarrolla software tanto genérico como específico.

Figura 10. Computador con múltiples procesadores.

__

ESTRUCTURA DE UN
HISTORIA DE LA
COMPUTADOR
COMPUTACIÓN

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:10:10 a.m.]


Programa Universidad Virtual

Tabla de contenido

1.2 ESTRUCTURA DE UN COMPUTADOR

Un COMPUTADOR es una máquina que permite y realiza cálculos de


manera automática. Se divide fundamentalmente en dos partes: el hardware y
el software. El HARDWARE es la parte física de un computador, es decir, la parte
que realiza los cálculos; El SOFTWARE es la parte lógica del computador, es decir,
la parte que le dice al hardware que haga . Usando una metáfora se puede decir que:

“Un computador es como un ser humano: el hardware es el cuerpo y el software es


la mente”

1.2.1 Arquitectura de hardware


1.2.2 Arquitectura de software

__

Tabla de contenido

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:10:36 a.m.]


Programa Universidad Virtual

ARQUITECTURA DE
ESTRUCTURA DE UN
SOFTWARE
COMPUTADOR

1.2.1 ARQUITECTURA DE HARDWARE

Un computador desde la perspectiva del hardware, esta constituido por una serie
de dispositivos cada uno con un conjunto de tareas definidas. Los dispositivos de
un computador se dividen según la tarea que realizan en: dispositivos de
entrada, salida, comunicaciones, almacenamiento y computo.

Figura 11. Arquitectura de Hardware

Dispositivos de entrada: Son aquellos que permiten el ingreso de datos a


un computador. Entre estos se cuentan, los teclados, ratones, scaners,
micrófonos, cámaras fotográficas, cámaras de video, game pads y guantes de
realidad virtual.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:10:52 a.m.]


Programa Universidad Virtual

Figura 12. Dispositivos de Entrada

Dispositivos de salida. Son aquellos que permiten mostrar


información procesada por el computador. Entre otros están, las pantallas de
video, impresoras, audífonos, plotters, guantes de realidad virtual, gafas y
cascos virtuales.

Figura 13. Dispositivos de Salida

Dispositivos de almacenamiento. Son aquellos de los cuales el


computador puede guardar información nueva y/o obtener información
previamente almacenada. Entre otros están los discos flexibles, discos
duros, unidades de cinta, CD-ROM, CD-ROM de re-escritura y DVD.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:10:52 a.m.]


Programa Universidad Virtual

Figura 14. Dispositivos de Almacenamiento.

Dispositivos de comunicación: Son aquellos que le permiten a un


computador comunicarse con otros. Entre estos se cuentan los modems, tarjetas
de red y enrutadores.

Figura 15. Modem

Dispositivo de computo: Es la parte del computador que le permite


realizar todos los cálculos y tener el control sobre los demas dispositivos.
Esta formado por tres elementos fundamentales, la unidad central de proceso,
la memoria y el bus de datos y direcciones.

Figura 16. Diagrama esquemático del dispositivo de computo

La unidad central de proceso (UCP)[1]: es el ‘cerebro’ del computador,


esta encargada de realizar todos los cálculos, utilizando para ello la
información almacenada en la memoria y de controlar los demás
dispositivos, procesando las entradas y salidas provenientes y/o enviadas a
los mismos. Mediante el bus de datos y direcciones, la UCP se comunica con
los diferentes dispositivos enviando y obteniendo tales entradas y salidas.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:10:52 a.m.]


Programa Universidad Virtual

Figura 17. Unidad Central de Proceso.

Para realizar su tarea la unidad central de proceso dispone de una unidad


aritmético lógica, una unidad de control, un grupo de registros y opcionalmente
una memoria cache para datos y direcciones.

La unidad aritmético lógica (UAL)[2] es la encargada de realizar las


operaciones aritméticas y lógicas requeridas por el programa en ejecución, la
unidad de control es la encargada de determinar las operaciones e instrucciones
que se deben realizar, el grupo de registros es donde se almacenan tanto datos
como direcciones necesarias para realizar las operaciones requeridas por el
programa en ejecución y la memoria cache se encarga de mantener direcciones
y datos intensamente usados por el programa en ejecución.

La memoria esta encargada de almacenar toda la información que el computador


esta usando, es decir, la información que es accedida (almacenada y/o
recuperada) por la UCP y por los dispositivos. Existen diferentes tipos de
memoria, entre las cuales se encuentran las siguientes:

RAM (Random Access Memory): Memoria de escritura y lectura, es la


memoria principal del computador. Solo se mantiene mientras el
computador está encendido.
ROM (Read Only Memory): Memoria de solo lectura, es permanente y no se
afecta por el encendido o apagado del computador. Generalmente
almacena las instrucciones que le permite al computador iniciarse y cargar
(poner en memoria RAM) el sistema operativo.
Cache: Memoria de acceso muy rápido, usada como puente entre la UCP y
la memoria RAM, para evitar las demoras en la consulta de la memoria
RAM.

El bus de datos y direcciones permite la comunicación entre los elementos


del computador. Por el bus de datos viajan tanto las instrucciones como los datos
de un programa y por el bus de direcciones viajan tanto las direcciones de
las posiciones de memoria donde están instrucciones y datos, como las
direcciones lógicas asignadas a los dispositivos.

[1] La unidad central de proceso es más conocida como CPU por sus siglas en
inglés Central Process Unit.

[2] La unidad aritmético lógica es más conocida como ALU por sus siglas en
inglés Arithmetic Logic Unit.
__

ARQUITECTURA DE
ESTRUCTURA DE UN
SOFTWARE
COMPUTADOR

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:10:52 a.m.]


Programa Universidad Virtual

ESTRUCTURA DE UN
Tabla de contenido
COMPUTADOR

1.2.2 ARQUITECTURA DE SOFTWARE

Un computador desde la perspectiva del software, esta constituido por:

Un sistema operativo.
Un conjunto de lenguajes a diferente nivel con los cuales se comunica con el
usuario y con sus dispositivos. Entre estos están los lenguajes de máquina, los
ensambladores y los de alto nivel.
Un conjunto de aplicaciones de software.
Un conjunto de herramientas de software.

1.2.2.1 Definiciones Básicas

Software: El hardware por si solo no puede haga nada, pues es necesario que
exista el software, que es un conjunto de instrucciones que le dicen al hardware
que haga .

Lenguaje de programación: Es un conjunto de reglas y estándares que es


utilizado para escribir programas de computadoras que puedan ser entendidos
por ellas. .

Programa: Es la representación de algún algoritmo en un lenguaje de


programación específico.

1.2.2.2 Lenguaje de Máquina

Es el único lenguaje que entiende el hardware (máquina) y usa exclusivamente


el sistema binario. Este lenguaje es específico para cada hardware
(procesador, dispositivos, etc.)[1].

El programa es almacenado en memoria y es tanto códigos de instrucción


como datos. La estructura de una instrucción en lenguaje máquina es la siguiente:

CODIGO ARGUMENTO(S)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:11:09 a.m.]


Programa Universidad Virtual

Figura 18. Lenguaje de máquina

1.2.2.3 Lenguaje Ensamblador

Es un lenguaje que usa mnemónicos (palabras cortas escritas con


caracteres alfanuméricos), para codificar las operaciones. Los datos y/o
direcciones son codificados generalmente como números en un sistema
hexadecimal. Generalmente es específico (aunque no único) para cada lenguaje
de máquina.

La estructura de una instrucción en este lenguaje es la siguiente:

MNEMONICO ARGUMENTO(S)

Un ENSAMBLADOR es un software, generalmente escrito en lenguaje de


máquina, que es capaz de traducir de lenguaje ensamblador a lenguaje de
máquina, mientras que un CARGADOR es un software que almacena en memoria
el programa en lenguaje de máquina generado por el ensamblador.

Figura 19. Lenguaje Ensamblador.

1.2.2.4 Lenguaje de Alto Nivel

Lenguaje basado en una estructura gramatical que permite el anidamiento


de instrucciones (instrucciones dentro de instrucciones). Cuenta con un conjunto
de palabras reservadas (escritas en lenguaje natural), para codificar estructuras
de control y/o instrucciones. Estos lenguajes permiten el uso de símbolos aritméticos
y/o relacionales para describir cálculos matemáticos, y generalmente representan
las cantidades numéricas mediante sistema decimal.

Gracias a su estructura gramatical, estos lenguajes permiten al programador olvidar

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:11:09 a.m.]


Programa Universidad Virtual

el direccionamiento de memoria (donde cargar datos y/o instrucciones en la


memoria), ya que este se realiza mediante el uso de conceptos como el de
variable; De esta manera, permiten la realización de programas independiente
del Hardware.

Los COMPILADORES e INTERPRETES son software capaz de traducir de


un lenguaje de alto nivel al lenguaje ensamblador específico de una máquina.
Los primeros toman todo el programa en lenguaje de alto nivel, lo pasan a
lenguaje ensamblador y luego lo ejecutan. Los últimos toman instrucción
por instrucción, la traducen y la van ejecutando.

Figura 20. Lenguaje de Alto Nivel.

1.2.2.5 Sistema Operativo

Es el software encargado de administrar los recursos del sistema, para esto ofrece
un conjunto de primitivas (funciones y procedimientos) a otro software, que le
permiten a este ultimo ser tan independiente de la arquitectura de hardware como
le sea posible. Se dice que un software es para el sistema operativo <nombre>,
si utiliza las primitivas que el sistema operativo <nombre>
proporciona. Adicionalmente, un sistema operativo ofrece un conjunto de comandos
a los humanos sean o no programadores, para interactuar con la máquina.

Los sistemas operativos pueden ser escritos en lenguaje de alto nivel, como UNIX
que fue escrito en C, en lenguaje ensamblador y/o en lenguaje máquina. Algunos
de los sistemas operativos más conocidos son UNIX, LINUX, Microsoft Windows.

1.2.2.6 Aplicaciones y Herramientas

Una APLICACION es un software construido para que el computador realice


una tarea específica y con el cual no se puede construir otro software. Ejemplos
de aplicaciones son los procesadores de texto como Microsoft Word y Word Perfect
y las hojas electrónicas de cálculo como Microsoft Excel y Lottus.

Una HERRAMIENTA es un software construido especialmente para el desarrollo


de nuevo software, (tanto de aplicaciones como de herramientas). Ejemplos
de herramientas son los compiladores como Turbo C y Turbo Pascal, las
herramientas CASES y los ambientes integrados de desarrollo.
http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:11:09 a.m.]
Programa Universidad Virtual

Figura 21. Arquitectura de Software Completa.

[1] En el Anexo A se expone el concepto de sistema de numeración, y en el Anexo


B se muestra como el sistema de numeración binario es utilizado para
representar datos en un computador digital.

Figura 21. Arquitectura de Software Completa.

[1]En el Anexo A se expone el concepto de sistema de numeración, y en el Anexo


B se muestra como el sistema de numeración binario es utilizado para
representar datos en un computador digital.
__

ESTRUCTURA DE UN
Tabla de contenido
COMPUTADOR

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:11:09 a.m.]


Programa Universidad Virtual

TABLA DE CONTENIDO

2.1 ALGORITMOS

Un ALGORITMO es una secuencia finita ‘bien definida’ de tareas ‘bien


definidas’, cada una de las cuales se puede realizar con una cantidad de
recursos finitos.

Se dice que una tarea esta ‘bien definida’, si se sabe de manera precisa las
acciones requeridas para su realización. Aunque los recursos que debe utilizar
cada tarea deben ser finitos estos no están limitados, es decir, si una tarea
bien definida requiere una cantidad inmensa (pero finita) de algún recurso para
su realización, dicha tarea puede formar parte de un algoritmo. Además, se dice
que una secuencia de tareas esta ‘bien definida’ si se sabe el orden exacto
de ejecución de cada una de las mismas.

EJECUTAR un algoritmo es realizar las tareas del mismo, en el orden especificado


y utilizando los recursos disponibles.

2.1.1 Características de un algoritmo


2.1.2 Técnicas para la formulación de algoritmos
2.1.3 Ejemplos de algoritmos
2.1.4 Ejercicios de algoritmos
2.1.5 Estructura básica de un algoritmo

__

TABLA DE CONTENIDO

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:11:49 a.m.]


Programa Universidad Virtual

TECNICAS PARA LA
FORMULACION DE
ALGORITMOS
ALGORITMOS

2.1.1 CARACTERISTICAS DE UN ALGORITMO

Las características que debe poseer una secuencia de tareas para


considerarse algoritmo son: precisión, definitud y finitud.

Precisión Definitud o determinismo Finitud


El algoritmo debe Si se sigue el algoritmo dos o más El algoritmo debe terminar
indicar el orden exacto veces con los mismos datos de en algún momento y debe
de ejecución de cada entrada, se deben obtener los mismos usar una cantidad de
tarea. datos de salida. recursos finita.

Dada una cantidad de datos de entrada de un algoritmo, se dice que la cantidad de


un recurso usada por dicho algoritmo para su ejecución determina la complejidad
del algoritmo respecto a tal recurso. Cuando se implementa un algoritmo en
un computador digital, los recursos con los que se cuenta son tiempo de proceso
y memoria. Por lo tanto, a un algoritmo implementado en un computador digital se
le pueden calcular sus complejidades temporal y espacial.[1]

[1] El estudio de la complejidad de un algoritmo respecto a sus recursos es


conocido como algoritmia, la cual no es tratada en este curso.
__

TECNICAS PARA LA
FORMULACION DE
ALGORITMOS
ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:12:06 a.m.]


Programa Universidad Virtual

ALGORITMOS

2.1.2 TECNICAS PARA LA FORMULACION DE ALGORITMOS

Las técnicas para la formulación de algoritmos más populares son:

2.1.2.1 Diagramas de flujo


2.1.2.2 Pseudocódigo

__

ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:12:44 a.m.]


Programa Universidad Virtual

TECNICAS PARA LA
PSEUDOCODIGO
FORMULACION DE
ALGORITMOS

2.1.2.1 DIAGRAMAS DE FLUJO

Se basan en la utilización de diversos símbolos para representar


operaciones específicas. Se les llama diagramas de flujo porque los
símbolos utilizados se conectan por medio de flechas para indicar la secuencia
de operación.

SIMBOLOGIA UTILIZADA EN LOS DIAGRAMAS DE FLUJO

SIMBOLO FUNCION

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:12:58 a.m.]


Programa Universidad Virtual

__

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:12:58 a.m.]


Programa Universidad Virtual

TECNICAS PARA LA
PSEUDOCODIGO
FORMULACION DE
ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:12:58 a.m.]


Programa Universidad Virtual

TECNICAS PARA LA EJEMPLOS DE

FORMULACION DE ALGORITMOS
ALGORITMOS

2.1.2.2 PSEUDOCODIGO

Es un lenguaje de especificación de algoritmos. El uso de tal lenguaje hace el paso


de codificación final (esto es, la traducción a un lenguaje de
programación) relativamente fácil.

El pseudocódigo nació como un lenguaje similar al lenguaje natural y era


un mediopara representar básicamente las estructuras de control de
programación estructurada. Se considera un primer borrador, dado que
el pseudocódigo tiene que traducirse posteriormente a un lenguaje de programación.

La ventaja del pseudocódigo es que en su uso en la planificación de un programa,


el programador se puede concentrar en la lógica y en las estructuras de control y
no preocuparse de las reglas de un lenguaje específico. Es también fácil modificar
el pseudocódigo si se descubren errores o anomalías en la lógica del
programa, además de todo esto es fácil su traducción a lenguajes como Pascal, C
o Basic.

El pseudocódigo utiliza para representar las acciones sucesivas palabras


reservadas (similares a sus homónimos en los lenguajes de programación),
tales como inicio, fin, si-entonces-sino, mientras, repita-hasta….etc

Secuencia

Inicio

acción1

acción2

acción n

Fin

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:13:14 a.m.]


Programa Universidad Virtual

Decisión

Simple

si condición entonces

acción1

acción2

acción
n

Doble

si condición entonces

acción1

acción2

en caso contrario

acción1

acción2

Iteracción

Fija

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:13:14 a.m.]


Programa Universidad Virtual

para var. Entera


inicial hasta final
hacer

acción1

acción2

acción
n

Condicional al inicio

mientras condición
hacer

acción1

acción2

acción
n

Condicional al final

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:13:14 a.m.]


Programa Universidad Virtual

repita

acción1

acción2

acción
n

Hasta que
condición

Selección

casos selector de

valor1 :
acción1

acción2

valor2 :
acción1

acción2

...

valor
n:
acción1

acción2

__

TECNICAS PARA LA EJEMPLOS DE

FORMULACION DE ALGORITMOS
ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:13:14 a.m.]


Programa Universidad Virtual

EJERCICIOS DE
ALGORITMOS
ALGORITMOS

2.1.2 EJEMPLOS DE ALGORITMOS

1. PROBLEMA: Un estudiante se encuentra en su casa (durmiendo) y debe ir a


la universidad (a tomar la clase de programación!!), ¿qué debe haga el estudiante?

ALGORITMO:

Inicio
Dormir
haga 1 hasta que suene el despertador (o lo llame la
mamá).
Mirar la hora.
¿Hay tiempo suficiente?
Si hay, entonces
Bañarse.
Vestirse.
Desayunar.
Sino,
Vestirse.
Cepillarse los dientes.
Despedirse de la mamá y el papá.
¿Hay tiempo suficiente?
Si, Caminar al paradero.
Sino, Correr al paradero.
Hasta que pase un bus para la universidad haga :
Esperar el bus
Ver a las demás personas que esperan un bus.
Tomar el bus.
Mientras no llegue a la universidad haga :
Seguir en el bus.
Pelear mentalmente con el conductor.
Timbrar.
Bajarse.
Entrar a la universidad.
Fin

2. PROBLEMA: Cambiar la rueda pinchada de un automóvil teniendo un gato


mecánico en buen estado, una rueda de reemplazo y una llave inglesa.

ALGORITMO:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:13:42 a.m.]


Programa Universidad Virtual

Inicio
PASO 1. Aflojar los tornillos de la rueda pinchada con la llave inglesa.
PASO 2. Ubicar el gato mecánico en su sitio.
PASO 3. Levantar el gato hasta que la rueda pinchada pueda
girar libremente.
PASO 4. Quitar los tornillos y la rueda pinchada.
PASO 5. Poner rueda de repuesto y los tornillos.
PASO 6. Bajar el gato hasta que se pueda liberar.
PASO 7. Sacar el gato de su sitio.
PASO 8. Apretar los tornillos con la llave inglesa.
Fin

3. PROBLEMA: Realizar la suma de los números 2448 y 5746.

ALGORITMO:

Inicio
PASO 1. Colocar los números el primero encima del segundo,
de tal manera que las unidades, decenas, centenas, etc., de
los números queden alineadas. Trazar una línea debajo del
segundo número.
PASO 2. Empezar por la columna más a la derecha.
PASO 3. Sumar los dígitos de dicha columna.
PASO 4. Si la suma es mayor a 9 anotar un 1 encima de la
siguiente columna a la izquierda y anotar debajo de la línea las
unidades de la suma. Si no es mayor anotar la suma debajo
de la línea.
PASO 5. Si hay más columnas a la izquierda, pasar a la
siguiente columna a la izquierda y volver a 3.
PASO 6. El número debajo de la línea es la solución.
Fin

4. PROBLEMA: Sean los puntos P=(a,b) y Q=(c,d) que definen una recta, encontrar
un segmento de recta perpendicular a la anterior que pasa por el punto medio de
los puntos dados.

ALGORITMO:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:13:42 a.m.]


Programa Universidad Virtual

Inicio

PASO 1. Trazar un círculo con centro en el punto P que pase por el punto Q.

PASO 2. Trazar un círculo con centro en el punto Q que pase por el punto P.

PASO 3. Trazar un segmento de recta entre los puntos de intersección de las


circunferencias trazadas.

Fin. El segmento de recta trazada es el buscado.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:13:42 a.m.]


Programa Universidad Virtual

__

EJERCICIOS DE
ALGORITMOS
ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:13:42 a.m.]


Programa Universidad Virtual

ESTRUCTURA BASICA DE UN
ALGORITMOS
ALGORITMO

2.1.3 EJERCICIOS DE ALGORITMOS

Para los siguientes problemas dar un algoritmo y si es posible una ejecución


del mismo.

1. Buscar en el directorio telefónico, el número de:

a. José González Pérez


b. Pedro Gómez Bernal.
c. Escribir un algoritmo que sirva para buscar a cualquier persona.

2. Calcular el número de días entre las fechas:

a. Enero 17 de 1972 y Julio 20 de 1973


b. Febrero 2 de 1948 y Agosto 11 de 1966
c. Escribir un algoritmo que sirva para calcular la cantidad de días entre cualquier
dos fechas.

3. Solicitar en préstamo algún libro de una biblioteca.

4. haga una caja de cartón con tapa de:

a. 20 cm de largo, por 10 cm de ancho y 5 cm de alto.


b. 10 cm de largo, por 30 cm de ancho y 15 cm de alto.
c. Escribir un algoritmo que sirva para construir una caja de cartón con tapa
de cualquier tamaño.

5. Construir un avión de papel.

6. Calcular manualmente la división de cualquier par de números naturales.


El resultado también debe ser un número natural. Escribir un algoritmo para calcular
el residuo de la división.

7. Un juego muy famoso entre dos niños es el de adivina mi número,el cual


consiste en que cada niño trata de adivinar el número pensado por el otro niño.
Dicho número generalmente está entre 1 y 100. Las reglas del juego son
las siguientes:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:13:55 a.m.]


Programa Universidad Virtual

a. Cada niño posee un turno en el que trata de averiguar el número del otro.
b. En su turno el primer niño pregunta si un número que dice es el pensado por
el segundo.
c. Si el número que ha dicho el primer niño es el que pensó el segundo, este
último debe informarle al primero que ganó.
d. Si el número no es el segundo niño debe decir si su número pensado es menor
o mayor al que el primer niño dijo.
e. Luego el segundo niño tiene su turno y de esta manera se van intercalando
hasta que alguno de los dos gane.Desarrollar un algoritmo para jugar adivina
mi número.

8. Una balanza se encuentra en equilibrio cuando el producto de la carga


aplicada sobre el brazo derecho por la longitud de este brazo, es igual al producto
de la carga aplicada sobre el brazo izquierdo por la longitud de este otro
brazo. Determinar si la balanza se encuentra en equilibrio si:

a. La longitud del brazo izquierdo es3 m, la del derecho es 2 m, la carga aplicada


al brazo izquierdo es 5 Kg y la carga aplicada al derecho es 7 Kg.
b. La longitud del brazo izquierdo es4 m, la del derecho es 2 m, la carga aplicada
al brazo izquierdo es 4 Kg y la carga aplicada al derecho es 4 Kg.
c. Desarrollar un algoritmo que sirva para cualquier conjunto de valores para
las longitudes de los brazos y las cargas aplicadas.

__

ESTRUCTURA BASICA DE UN
ALGORITMOS
ALGORITMO

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:13:55 a.m.]


Programa Universidad Virtual

ALGORITMOS PROBLEMAS

2.1.4 ESTRUCTURA BASICA DE UN ALGORITMO

En esencia un algoritmo está constituido por los siguientes tres elementos:

Datos Instrucciones Estructuras de control


Las que determinan el
Lo que el algoritmo recibe,
Las acciones o procesos que el orden en que se ejecutarán
procesa y entrega como
algoritmo realiza sobre los datos. las instrucciones del
resultado.
algoritmo.

En el capítulo siguiente se presenta de manera completa los conceptos de dato


e instrucciones sobre datos y en el capítulo cuatro se describe el concepto
de estructura de control.
__

ALGORITMOS PROBLEMAS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:14:20 a.m.]


Programa Universidad Virtual

ALGORITMOS

2.2 PROBLEMAS

Se tiene un problema cuando se desea encontrar uno o varios


objetos desconocidos (ya sean estos números, diagramas,
figuras, demostraciones, decisiones, posiciones, algoritmos, u otras cosas),
que cumplen condiciones y/o relaciones, previamente definidas, respecto a uno
o varios objetos conocidos. De esta manera, solucionar un problema
es encontrar los objetos desconocidos de dicho problema.

2.2.1 Clasificación de problemas


2.2.2 Ejemplos de problemas
2.2.3 Ejercicios

__

ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:15:43 a.m.]


Programa Universidad Virtual

EJEMPLOS DE
PROBLEMAS
PROBLEMAS

2.2.1 CLASIFICACION DE PROBLEMAS

Los problemas se clasifican por la existencia de una solución en solubles, no


solubles e indecidible.

Un problema se dice SOLUBLE si se sabe de antemano que existe una solución


para él.
Un problema se dice INSOLUBLE si se sabe que no existe una solución para él.
Un problema se dice INDECIDIBLE si no se sabe si existe o no existe solución
para él.

A su vez, los problemas solubles se dividen en dos clases: los algorítmicos y los
no algorítmicos.

Un problema se dice ALGORÍTMICO[1] si existe un algoritmo que permita darle


solución.
Un problema se dice NO ALGORÍTMICO si no existe un algoritmo que
permita encontrar su solución.

[1] En este curso solo se tratarán problemas algorítmicos

__

EJEMPLOS DE
PROBLEMAS
PROBLEMAS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:15:57 a.m.]


Programa Universidad Virtual

PROBLEMAS EJERCICIOS

2.2.2 EJEMPLOS DE PROBLEMAS

1. Sean los puntos P=(a,b) y Q=(c,d) que definen una recta, encontrar un
segmento de recta perpendicular a la anterior que pase por el punto medio de
los puntos dados.

OBJETOS CONOCIDOS Los puntos P y Q.

El segmento de recta debe pasar por el punto medio entre P y


CONDICIONES
Q, y debe ser perpendicular a la recta trazada entre P y Q

Soluble-algorítmico. Es soluble por que ya existe un algoritmo


TIPO DE PROBLEMA que permite encontrar la solución del mismo. Este algoritmo fue
presentado en la sección anterior.

2. De las siguientes cuatro imágenes, ¿cuál es la más llamativa?

OBJETOS DESCONOCIDOS Una de las cuatro imágenes.

OBJETOS CONOCIDOS Las cuatro imágenes.

Soluble-no algorítmico. La solución de este problema existe, es


alguna de las cuatro imágenes presentadas, pero no existe un
TIPO DE PROBLEMA
algoritmo que permita determinar cual es, ya que el concepto de
imagen más llamativa no esta bien definido.

3. Un granjero tiene cincuenta animales entre conejos y gansos. Si la cantidad


de pies de los animales es ciento cuarenta, ¿cuántos conejos y cuantos gansos
tiene el granjero?

OBJETOS DESCONOCIDOS La cantidad de conejos y la cantidad de gansos.

OBJETOS CONOCIDOS La cantidad total de animales, cantidad de pies totales.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:16:16 a.m.]


Programa Universidad Virtual

La suma de los conejos y los gansos es igual a cincuenta. La


CONDICIONES suma de los pies de los conejos (cuatro por cada uno) y de los
gansos (dos por cada uno) es igual a ciento cuarenta.

TIPO DE PROBLEMA Soluble-algorítmico.

4. ¿Existe en la expansión decimal de p una secuencia de tamaño n para


cualquier número natural n?

OBJETOS DESCONOCIDOS Un valor de verdad (falso o verdadero).

OBJETOS CONOCIDOS El número n.

Verdadero si existe en la expansión decimal de p una secuencia


CONDICIONES de tamaño n del número n, para todo número natural n, Falso en
otro caso.

Indecidible. Este problema es indecidible por que si en el primer


millón de dígitos de p no se encuentra una secuencia como la
buscada, nada garantiza que en el siguiente millón de dígitos no
TIPO DE PROBLEMA se encuentre tal secuencia. Pero si no se encuentra en el
segundo millón, nada garantiza que no se encuentre después o
no se encuentre. De esta manera no se puede decidir si existe o
no existe tal secuencia.

5. Realizar la suma de los siguientes números: 1245893467 y 3464895786.

OBJETOS DESCONOCIDOS Un número natural.

OBJETOS CONOCIDOS Dos números naturales 1245893467 y 3464895786.

El número desconocido es igual a la suma de los dos números


CONDICIONES
dados.

Soluble-algorítmico. Es soluble por que ya existe un algoritmo


TIPO DE PROBLEMA que permite encontrar la solución del mismo. Este algoritmo fue
presentado en la sección anterior.

6. Una partícula se mueve en el espacio de manera aleatoria, si en el instante


de tiempo t se encuentra en la posición x, ¿cuál será la posición exacta de
dicha partícula 10 segundos después?

OBJETOS DESCONOCIDOS Una posición.

OBJETOS CONOCIDOS Posición en el instante de tiempo t.

CONDICIONES La partícula se mueve en el espacio de manera aleatoria.

Insoluble. No se puede solucionar por que no existe forma de


TIPO DE PROBLEMA predecir la posición de la partícula, pues su movimiento es
aleatorio, es decir, se mueve de manera arbitraria.

7. Un robot puede apilar (poner encima), en ciertos lugares cajas de

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:16:16 a.m.]


Programa Universidad Virtual

diferentes tamaños. La caja a apilar no puede ser más grande que las que ya
estén apiladas en dicho lugar. El robot puede solo tomar la caja de más arriba de
una pila. Mirando la figura, como puede el robot pasar las tres cajas apiladas en
el lugar A, al lugar C usando, si es necesario, el lugar de apilar B.

OBJETOS DESCONOCIDOS Una secuencia de apilamientos.

Número de cajas, posición inicial y posición destino, número de


OBJETOS CONOCIDOS
lugares de apilamiento.

Solo se pueden apilar cajas sobre otras más grandes. Solo se


CONDICIONES puede tomar la una caja a la vez y solo la que este más arriba
en una pila de cajas.

TIPO DE PROBLEMA Soluble-algorítmico.

__

PROBLEMAS EJERCICIOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:16:16 a.m.]


Programa Universidad Virtual

PROGRAMACIÓN
PROBLEMAS
ESTRUCTURADA

2.2.3 EJERCICIOS

Para los siguientes problemas, determine los objetos conocidos, desconocidos,


las condiciones y el tipo de problema. Para aquellos problemas algorítmicos
desarrolle adicionalmente un algoritmo que permita encontrar una solución.

1. Se tienen dos jarras (A y B) de capacidades 3 y 7 litros respectivamente, sobre


las cuales se pueden efectuar las siguientes acciones: Llenar totalmente cualquiera
de las dos jarras, vaciar una de las dos jarras en la otra hasta que la jarra origen
este vacía o hasta que la jarra destino este llena y vaciar el contenido de una
jarra (este llena o no) en un sifón. ¿Cómo se puede dejar en la jarra A un solo
litro utilizando solamente las anteriores acciones?.

2. Es cierta o no es cierta la siguiente frase: “Esta frase no es cierta”.

3. Si Juan tiene el doble de la edad de Pedro y la suma de las edades de los dos
es 33 años, ¿Cuántos años tiene Juan y cuántos tiene Pedro?.

4. ¿Qué figura se forma al unir los puntos marcados con números consecutivos
con una línea?

5. Calcular de manera exacta el número de átomos del universo.

6. Calcular el costo de una serie de productos comprados en el supermercado.

7. Determinar quien es el mejor jugador de fútbol de toda la historia.

8. Construir un barco de papel.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:16:37 a.m.]


Programa Universidad Virtual

__

PROGRAMACIÓN
PROBLEMAS
ESTRUCTURADA

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:16:37 a.m.]


Programa Universidad Virtual

TEORIA DE LA
PROGRAMACION
ALGORITMOS
ESTRUCTURADA

2.3 PROGRAMACIÓN ESTRUCTURADA

Introducción

La programación estructurada es un estilo de programación en el cual, la estructura


de un programa se hace tan clara como sea posible utilizando tres estructuras:

1. Secuencia Simple
2. Selección
3. Iteración

Estos tres tipos de estructuras de control pueden combinarse para producir


programas con cualquier tipo de información que se vaya a procesar.

Un programa estructurado tiene como característica que puede leerse de arriba


hacia abajo lo que hace que el programa sea más fácil de leer y comprender por
otros programadores facilitando así su mantenimiento.

Un programa estructurado se compone de segmentos. Cada segmento


está constituido por una entrada y una salida, tal segmento de denomina un
programa propio.
__

TEORIA DE LA
PROGRAMACION
ALGORITMOS
ESTRUCTURADA

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:17:10 a.m.]


Programa Universidad Virtual

PROGRAMACIÓN

ESTRUCTURADA

TEORIA DE LA PROGRAMACION ESTRUCTURADA

El teorema de la estructura.

El teorema de la estructura se refiere a que cualquier programa propio se puede escribir


usando solamente las tres estructurad de control: secuencia, selección e iteración.

Un programa propio contempla dos segmentos básicos:

1. Tiene exactamente un punto de entrada y uno de salida


2. Dentro de ese punto de entrada y salida hay trayectorias que conducen a cada parte
del programa; esto significa que no existen loops infinitos o una codificación inalcanzable.

Las tres estructuras de control se ilustran a continuación:

Secuencia: Las instrucciones del programa se ejecutan en el orden en el cual ellas aparecen
en el programa como se indica en la siguiente figura:

A y B pueden ser simples instrucciones hasta módulos completos. A y B deben ser


ambos programas propios en el sentido ya definido de entrada y salida. La combinación de A y
B es también un programa propio y que tiene también una entrada y una salida.

Selección: Es escoger entre dos opciones basadas en un predicado. Se conoce como


estructura SI – ENTONCES – SINO P es el predicado y A y B son las afirmaciones.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:17:29 a.m.]


Programa Universidad Virtual

Iteración: Repetir varias veces una acción hasta cuando deje de cumplirse la condición.
Se conoce como la estructura HACER - MIENTRAS

Es de anotar que hay algunas variaciones a esta estructura dependiendo del lenguaje
de programación. La idea fundamental es que siempre que aparezca una función que se
puede dibujar en recuadro se pueda sustituir por cualquiera de las tres estructuras
básicas constituyendo así un programa propio.

__

PROGRAMACIÓN

ESTRUCTURADA

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:17:29 a.m.]


Programa Universidad Virtual

TABLA DE CONTENIDO DIALOGO

3. METODOLOGIA DE PROGRAMACION UN-PROGRAMA

El desarrollo de un programa que resuelva un problema dado es una tarea


compleja, ya que es necesario tener en cuenta de manera simultánea
muchos elementos. Por lo tanto, es indispensable usar una metodología
de programación.

Una metodología de programación es un conjunto o sistema de métodos, principios


y reglas que permiten enfrentar de manera sistemática el desarrollo de un
programa que resuelve un problema algorítmico. Estas metodologías generalmente
se estructuran como una secuencia de pasos que parten de la definición del
problema y culminan con un programa que lo resuelve.

A continuación se presenta de manera general los pasos de una metodología:

Con la cual se busca comprender totalmente el problema a


El Diálogo
resolver.

Con la cual se establece de manera precisa las entradas, salidas


La Especificación
y las condiciones que deben cumplir.

En esta etapa se construye un algoritmo que cumpla con la


Diseño
especificación.

Codificación Se traduce el algoritmo a un lenguaje de programación.

Se realizan pruebas del programa implementado para determinar


Prueba y Verificación
su validez en la resolución del problema.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:18:14 a.m.]


Programa Universidad Virtual

Nota: Los ejemplos incluidos en esta sección presentados en pseudocódigo son solo para
ilustrar la metodología
mas no se espera que el estudiante los comprenda.

__

TABLA DE CONTENIDO DIALOGO

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:18:14 a.m.]


Programa Universidad Virtual

METODOLOGIA DE ESPECIFICACION DE

PROGRAMACION UN- ALGORITMOS


PROGRAMA

3.1 DIALOGO

En el primer paso en el proceso de solución a un problema se debe determinar


de manera clara y concisa la siguiente información:

1. Los objetos conocidos, es decir, aquellos objetos de los cuales


poseemos información total o parcial útil en la búsqueda de los objetos desconocidos.

2. Las condiciones, aquellas relaciones establecidas entre los objetos conocidos


y los desconocidos. Para esto se deben encontrar entre otras, la dependencia
entre los valores de los objetos desconocidos de los valores de los objetos
conocidos y que restricciones le impone el planteamiento del problema a
dichos objetos.

3. Los valores posibles que pueden tomar los objetos desconocidos.

Ejemplo. Sean los puntos P=(a,b) y Q=(c,d) que definen una recta, encontrar
un segmento de recta perpendicular a la anterior que pase por el punto medio de
los puntos dados.

OBJETOS DESCONOCIDOS Un segmento de recta.

OBJETOS CONOCIDOS Los puntos P y Q.

El segmento de recta debe pasar por el punto medio entre P y Q,


CONDICIONES
y debe ser perpendicular a la recta trazada entre P y Q.

__

METODOLOGIA DE ESPECIFICACION DE

PROGRAMACION UN- ALGORITMOS


PROGRAMA

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:18:31 a.m.]


Programa Universidad Virtual

TABLA DE CONTENIDO

3.2 ESPECIFICACIÓN DE ALGORITMOS


Introducción
3.2.1 Pasos para la especificación de algoritmos
3.2.2 Ejemplos de especificación

__

TABLA DE CONTENIDO

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:18:49 a.m.]


Programa Universidad Virtual

PASOS PARA LA
ESPECIFICACION DE ESPECIFICACION DE

ALGORITMOS ALGORITMOS

3.2 ESPECIFICACION DE ALGORITMOS

Después de entender totalmente el problema a resolver (lo cual se consigue con


la etapa del diálogo), se debe realizar una especificación del algoritmo que
permite encontrar su solución. Un algoritmo que no esté claramente
especificado puede ser interpretado de diferentes maneras y al diseñarlo se
puede terminar con un algoritmo que no sirve para solucionar el problema.

La especificación de un algoritmo se hace mediante una descripción clara y precisa de:

1. Las entradas que el algoritmo recibirá.

2. Las salidas que el algoritmo proporcionará.

3. La dependencia que mantendrán las salidas obtenidas con las entradas recibidas.

Esta descripción puede ser presentada mediante un diagrama de caja negra como
el de la siguiente figura:

__

PASOS PARA LA
ESPECIFICACION DE ESPECIFICACION DE

ALGORITMOS ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:19:03 a.m.]


Programa Universidad Virtual

EJEMPLOS DE
ESPECIFICACION DE
ESPECIFICACION
ALGORITMOS

3.2.1 PASOS PARA LA ESPECIFICACIÓN DE ALGORITMOS


Las entradas corresponden a los objetos conocidos. Se debe
Especificar Entradas
indicar claramente la descripción, cantidad y tipo de las mismas.

Las salidas corresponden a los objetos desconocidos del


Especificar Salidas problema. Se debe indicar claramente la cantidad, descripción y
tipo de las mismas.

Se describe claramente como dependen las salidas de las


Especificar Condiciones
entradas, se puede usar lenguaje matemático o informal.

__

EJEMPLOS DE
ESPECIFICACION DE
ESPECIFICACION
ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:19:24 a.m.]


Programa Universidad Virtual

PASOS PARA LA DISEÑO ESTRUCTURADO DE

ESPECIFICACION DE ALGORITMOS
ALGORITMOS

3.2.2 EJEMPLOS DE ESPECIFICACIÓN

PROBLEMA 1: Construir un algoritmo que calcule el promedio de 4 notas.

ESPECIFICACION A: (Sin diagrama de caja negra)


Entradas N1,N2,N3,N4 (notas parciales) de tipo Real.

Salidas Final (nota final) de tipo Real.

Condiciones

ESPECIFICACION B: (Con diagrama de caja negra)


Diagrama de Caja Negra:

Descripción de Entradas y Ni: Nota i-ésima con i=1,2,3,4, Final: Nota Final.
Salidas

Tipo de Entradas y Salidas N1, N2, N3, N4, Final Î Reales.

Condiciones

PROBLEMA 2: Construir un algoritmo que determine el mayor de tres números enteros.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:19:55 a.m.]


Programa Universidad Virtual

ESPECIFICACION A
Entradas A,B,C (números de entrada) de tipo Real.

Salidas Mayor (valor mayor) de tipo Real.

Condiciones Mayor debe ser el valor máximo de A, B y C.

ESPECIFICACION B
Diagrama de Caja Negra:

Descripción de Entradas y
A, B, C: Números de entrada, Mayor: Valor Mayor.
Salidas

Tipo de Entradas y Salidas A, B, C, Mayor Î Enteros

Condiciones

PROBLEMA 3: Determinar si un punto está dentro de un círculo.

ESPECIFICACION A
Cx (coordenada x del círculo) de tipo Real.

Cy (coordenada y del círculo) de tipo Real.

Entradas r (radio del círculo) de tipo Real.

Px (coordenada x del punto) de tipo Real.

Py (coordenada y del punto) de tipo Real.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:19:55 a.m.]


Programa Universidad Virtual

Pertenece de tipo Booleano, (indica si el punto está dentro o


Salidas
fuera del círculo).

Pertenece = Verdadero, si el punto está dentro del círculo.


Condiciones
Pertenece = Falso, si el punto está fuera del círculo.

ESPECIFICACION B
Diagrama de Caja Negra:

(Cx, Cy): Coordenadas del círculo.

Descripción de Entradas y
Salidas
r: Radio del círculo.

(Px, Py):Coordenadas del punto.

Tipo de Entradas y Salidas Cx, Cy, r, Px, Py Mayor ÎEnteros.

Condiciones

__

PASOS PARA LA DISEÑO ESTRUCTURADO DE

ESPECIFICACION DE ALGORITMOS
ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:19:55 a.m.]


Programa Universidad Virtual

TABLA DE CONTENIDO

3.3 DISEÑO ESTRUCTURADO DE ALGORITMOS


Introducción
3.3.1 División
3.3.2 Definición de abstracciones

__

TABLA DE CONTENIDO

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:20:16 a.m.]


Programa Universidad Virtual

DISEÑO
DIVISION
ESTRUCTURADO DE
ALGORITMOS

3.3 DISEÑO ESTRUCTURADO DE ALGORITMOS

La fase de diseño del algoritmo, es decir, la fase en la que se construye el


algoritmo que permitirá encontrar la solución al problema, está dividida en dos
pasos importantes:

División: En el que a partir de la especificación del algoritmo se divide el


proceso (algoritmo en abstracto) en varios subprocesos hasta llegar al nivel
de instrucción.

Abstracción: En el que se revisa que porciones del algoritmo se repiten o son


muy utilizadas y con las cuales se construyen funciones y/o procedimientos.

__

DISEÑO
DIVISION
ESTRUCTURADO DE
ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:20:30 a.m.]


Programa Universidad Virtual

DISEÑO DEFINICION DE

ESTRUCTURADO DE ABSTRACCIONES
ALGORITMOS

3.3.1 DIVISIÓN

Consiste en subdividir de manera sistemática el proceso en una colección de


pasos más pequeños. Está subdivisión se realiza de manera repetida hasta llegar
al nivel de instrucción.

Durante el proceso de división se determina la estructura de control adecuada, ya


sea, secuencia, selección, repetición, asignación, lectura o escritura, que se
puede asociar con cada subproceso obtenido. Tanto los pasos intermedios
de subdivisión como el resultado final pueden ser representados por un diagrama
de flujo o por pseudo código.

Problema b.1: Realizar un programa que lea una serie de n números enteros
y determine si la suma de los mismos es un cuadrado perfecto.

Especificación:

donde

n N, datos es una colección de n números naturales, Es_cuadrado Booleano

División:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 5) [12/02/2008 12:21:20 a.m.]


Programa Universidad Virtual

• Primera Iteración

• Segunda Iteración

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 5) [12/02/2008 12:21:20 a.m.]


Programa Universidad Virtual

• Tercer Iteración (final en este ejemplo)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 5) [12/02/2008 12:21:20 a.m.]


Programa Universidad Virtual

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 5) [12/02/2008 12:21:20 a.m.]


Programa Universidad Virtual

Pseudo-código
Procedimiento principal()
variables
n : entero
suma : entero
dato : entero
dato : entero
i : entero
Inicio
escribir (“Número de datos:”)
leer (n)
suma := 0
para (i:=1 hasta n hacer)
escribir (“ingrese un dato:”)

leer (dato)

suma := suma + dato

fin_para
si redondear( raiz2( suma ) ) = raiz2( suma )
entonces
escribir (“La suma es un cuadrado perfecto”)

sino
escribir (“La suma no es un cuadrado perfecto”)

fin_si
Fin
fin_procedimiento

__

DISEÑO DEFINICION DE

ESTRUCTURADO DE ABSTRACCIONES
ALGORITMOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (5 of 5) [12/02/2008 12:21:20 a.m.]


Programa Universidad Virtual

DIVISION CODIFICACION

3.3.2 DEFINICIÓN DE ABSTRACCIONES

Identificar que secuencias de pasos se utilizan más de una vez en diferentes


partes del proceso.

Recolectar estas secuencias de pasos en funciones y procedimientos según sea


el caso.

Documentar cada función y procedimiento especificando claramente:

El propósito de la función (o procedimiento).

El nombre, tipo y propósito de cada argumento.

El resultado (o efectos laterales).

Resultado final: Diagrama de flujo (o pseudo código) final incluyendo las


funciones y procedimientos.

Ejemplo:

Problema: Desarrollar un programa que dados dos conjuntos finitos de enteros y


un entero, determine si el entero dado esta o no en alguno de los dos conjuntos.

Solución: Se seguirá la metodología propuesta en este libro.

Dialogo: El primer paso es entender completamente el problema y que esquemas


de representación se usarán. En general, se pueden utilizar arreglos de elementos
de tipo T para representar conjuntos finitos de elementos de tipo T[1]. El uso
de arreglos para representar conjuntos, requiere que se realicen ciertas
validaciones que garanticen la validez como conjunto, por ejemplo, que en el
arreglo no este un mismo elemento dos veces (en un conjunto un elemento esta
solo una vez). Teniendo en cuenta estos razonamientos, se puede decir que:

Los objetos conocidos son dos conjuntos (arreglos) y el entero.

El objeto desconocido es un valor de verdad.

La condición es que si el entero dado está en alguno de los conjuntos dados


el valor de verdad será verdadero y será falso si no está en alguno de los dos.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 7) [12/02/2008 12:21:54 a.m.]


Programa Universidad Virtual

· Especificación:

donde,

A :es un conjunto de enteros.

B : es un conjunto de enteros. elemento : es el entero a comprobar si esta en


alguno de los conjuntos. bandera : es un booleano que indica si el el elemnto esta
o no esta.

División:

Primer Iteración.
Inicio
1. Leer primer conjunto.
2. Leer segundo conjunto.
3. Leer entero.
4. Determinar si el entero esta en el primer
conjunto.
5. Determinar si el entero esta en el
segundo conjunto.
6. escribir el resultado.
Fin

Segunda Iteración.
1. L eer primer conjunto se divide en:
1.1. eer un dato.
1.2. Determinar si el elemento no esta en el primer conjunto.
1.3. Si no esta agregar el dato al primer conjunto, si ya esta mostrar un
mensaje de error.
1.4. Preguntar si el usuario desea ingresar un nuevo elemento al primer
conjunto.
1.5. Si el usuario desea ingresar un nuevo elemento volver a 1.1.
2. Leer segundo conjunto se divide en:
2.1. Leer un dato.
2.2. Determinar si el elemento no esta en el segundo conjunto.
2.3. Si no esta agregar el dato al segundo conjunto, si ya esta mostrar
un mensaje de error.
2.4. Preguntar si el usuario desea ingresar un nuevo elemento al
segundo conjunto.
2.5. Si el usuario desea ingresar un nuevo elemento volver a 2.1
3. Leer entero.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 7) [12/02/2008 12:21:54 a.m.]


Programa Universidad Virtual

4. Determinar si el entero esta en el primer conjunto.


5. Determinar si el entero esta al segundo conjunto.
6. escribir el resultado.

tercera iteración Asociar las instrucciones apropiadas.

Procedimiento principal()
variables
i : entero
j : entero
n : entero
m : entero
elemento : entero
continuar : caracter
bandera1 : booleano
bandera2 : booleano
A : arreglo [100] de entero
B : arreglo [100] de entero
/* el codigo siguiente lee el conjunto A*/
n := 0
escribir (“Desea ingresar elementos al conjunto A (S/N):”)
leer (continuar)
mientras (continuar =‘S’ | continuar = ‘s’) hacer
escribir (“Ingrese el elemento al conjunto A:”)
leer (elemento)
/* el codigo siguiente prueba si el elemento esta en el conjunto A */
Inicio
i := 0
mientras (i<n & A[i] <>elemento) hacer
i := i+1;
fin_mientras
si (i =n entonces)
A[n] := elemento
n := n+1
sino
escribir (“Error: el elemento ya esta en el conjunto A”)
fin_si
escribir (“Desea ingresar mas elementos al conjunto A (S/N)”)
leer (continuar)
fin_mientras
/* el codigo siguiente lee el conjunto B */
m := 0
escribir (“Desea ingresar mas elementos al conjunto B (S/N)”)
leer (continuar)
mientras (continuar =‘S’ |continuar = ‘s’ hacer)
escribir (“Ingrese el elemento al conjunto B:”)
leer (elemento)
/* el codigo siguiente prueba si el elemento esta en el conjunto B */
i := 0
mientras (i<m & B[i] <>elemento hacer)
i := i+1;
fin_mientras

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 7) [12/02/2008 12:21:54 a.m.]


Programa Universidad Virtual

si (i = m) entonces
B[m] := elemento
m := m+1
sino
escribir (“Error: el elemento ya esta en el conjunto B”)
fin_si
escribir (“Desea ingresar mas elementos al conjunto B (S/N)”)
leer (continuar)
fin_mientras
/* el codigo siguiente lee un elemento a probar */
escribir (“Ingrese el dato a probar en los conjuntos”)
leer (elemento)
/* el codigo siguiente prueba si el elemento esta en el conjunto A */
i := 0
mientras (i<m & A[i] <>elemento) hacer
i := i+1;
fin_mientras
si( i =n entonces)
bandera1 := falso
sino
bandera1 := verdadero
fin_si
/* el codigo siguiente prueba si el elemento esta en el conjunto B */
i := 0
mientras (i<m & B[i] <>elemento) hacer
i := i+1
fin_mientras
si (i = m entonces)
bandera2 := falso
sino
bandera2 := verdadero
fin_si
/* el codigo siguiente determina si el elemento esta en alguno de los dos
conjuntos */
si (bandera1 | bandera2) entonces
escribir (“El dato dado esta en alguno de los dos conjuntos”)
sino
escribir (“El dato dado esta en ninguno de los conjuntos”)
fin_si
Fin
fin_procedimiento

Abstracción: En el código obtenido mediante la fase de división se puede


apreciar la existencia de porciones de código que aunque no son iguales pero
son muy parecidas. Este es el caso de las porciones de código que permiten leer
los conjuntos A y B (lineas de código 11-32 y 33-54), y las porciones de código
que permiten determinar si un elemento esta en un conjunto (lineas de código 18-
29, 40-51, 58-69 y 70-71). De esta manera se pueden crear un procedimiento
que permita leer el conjunto y una función de retorne si un elemento esta en
un conjunto o no que permite abstraer estas porciones de código.
La función pertenece se define así:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 7) [12/02/2008 12:21:54 a.m.]


Programa Universidad Virtual

pertenece: Arreglo[100] de Entero x Entero x Entero x


Booleano
(A , , n , e ) x V si e = A[i] para algún i
F en otro caso

Se puede observar que esta función además de recibir el arreglo de datos y el elemento,
recibe un entero adicional n. Este entero se utiliza para indicar el tamaño del conjunto
dado. Esta función se codifica como sigue:

función pertenece( A :arreglo[100] de entero, n :


entero,
e :entero ):booleano

Variables
bandera :booleano
i : entero
inicio
/* el codigo siguiente prueba si el elemento esta en el
conjunto */
i := 0
mientras (i<n & A[i] != e) haga
i := i+1;
fin_mientras
si (i == n) entonces
bandera := falso
sino
bandera := verdadero
fin_si

retornar bandera

fin_funcion

El procedimiento de leer el conjunto se puede codificar como sigue:

procedimiento leer_conjunto( var A :arreglo [100] de entero, var n :


entero, c :caracter )
Variables
i :entero
elemento :entero
continuar :caracter

inicio
/* el codigo siguiente lee el conjunto */
n := 0
escribir (“Desea ingresar elementos al conjunto ”, c, “ (S/N)”)
leer (continuar)
mientras (continuar =‘S’ | continuar =‘s’) haga
escribir (“Ingrese el elemento al conjunto ”, A , “ :”)
leer (elemento)

/* el codigo siguiente prueba si el elemento esta en el conjunto y de no ser así lo


adiciona */

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (5 of 7) [12/02/2008 12:21:54 a.m.]


Programa Universidad Virtual

si pertenece( A, n, elemento ) entonces


A[n] := elemento
n := n+1
sino
escribir (“Error: el elemento ya esta en el conjunto ”)
fin_si
escribir (“Desea ingresar mas elementos al conjunto (S/N)?")
leer (continuar)
fin_mientras
fin_procedimiento

Se puede observar que tanto el arreglo de datos como la variable de tamaño


del conjunto pasan por referencia. Esto es debido a que este procedimiento
modificará el arreglo de datos enviado como argumento, pues en éste es donde
se almacenarán los datos leídos, y el argumento n donde se almacenará el tamaño
del conjunto leído. Adicionalmente se pasa un carácter por valor, que indica el
nombre del conjunto a leer, para escribirlo en pantalla mientras se leen los
elementos del conjunto de tal manera que el usuario conozca el nombre del
conjunto que esta ingresando.
Otro aspecto importante que se puede destacar en este procedimiento es que usa
la función pertenece para determinar si se debe o no adicionar el elemento leído.

De esta manera el algoritmo principal se puede presentar como sigue:

Procedimiento principal()
inicio
n :entero
m :entero
elemento :entero

A :arreglo [100] de entero


B :arreglo [100] de entero

/* el codigo siguiente lee el conjunto A */


leer_conjunto( A, n, ‘A’ )

/* el codigo siguiente lee el conjunto B */


leer_conjunto( B, m, ‘B’ )

/* el codigo siguiente determina si el elemento esta en alguno de los


dos conjuntos */
si pertenece( A, n, elemento ) || pertenece( B, m, elemento )
entonces
escribir (“El dato dado esta en alguno de los dos conjuntos”)
sino
escribir (“El dato dado esta en ninguno de los conjuntos”)
fin_si
fin_procedimiento

Se puede apreciar la reducción de líneas de código del programa y la facilidad


de lectura de cada uno de estos algoritmos (función, procedimiento y
algoritmo principal) respecto al algoritmo inicial realizado sin abstracción. Se deja
al lector la escritura del programa completo, utilizando las reglas descritas en
esta sección.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (6 of 7) [12/02/2008 12:21:54 a.m.]


Programa Universidad Virtual

[1] El programador avanzado, que conozca estructuras de datos sabrá, que es


posible y mejor representar los elementos de un conjunto mediante un Arbol.

__

DIVISION CODIFICACION

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (7 of 7) [12/02/2008 12:21:54 a.m.]


Programa Universidad Virtual

PRUEBAS DE
TABLA DE CONTENIDO
ESCRITORIO

3.4 CODIFICACIÓN

Cuando ya se ha diseñado completamente el algoritmo y se tiene escrito en


algún esquema de representación (pseudo-código o diagrama de flujo), el
siguiente paso es codificarlo en el lenguaje de programación definido para tal fin.

En este momento es cuando el programador interactua con el computador mediante


la herramienta de software que disponga para codificar en el lenguaje seleccionado.

EJEMPLO. Tómese como base el pseudo-código desarrollado en la sección anterior,


el programa en C++ para este pseudo-código sería:

#include <iostream.h>

int pertenece( int A[100], int n, int e)


{
bool bandera;
int i;
/* el codigo siguiente prueba si el elemento esta en el conjunto */
i=0
while(> i<n && A[i] != e )
{
i = i+1;
};
if( i == n )
{
bandera = falso;
}
else
{
bandera = verdadero;
};
return bandera;
};

void leer_conjunto( intA[100], int & n, char c )


{
int i;
int elemento;
char continuar;

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:22:22 a.m.]


Programa Universidad Virtual

/* el codigo siguiente lee el conjunto */


n = 0;
cout << “Desea ingresar elementos al conjunto”;
cout << c << “ (S/N)”;
cin >> continuar;
while( continuar == ‘S’ || continuar == ‘s’ )
{
cout << “Ingrese el elemento al conjunto” << A << “ :”;
cin >> elemento;

/* el codigo siguiente prueba si el elemento esta en el conjunto y de no ser así lo


adiciona */
if( !pertenece( A, n, elemento ) )
{
A[n] = elemento;
n = n+1;
}
else
{
cout << “Error: el elemento ya esta en el conjunto”;
};
cout << “Desea ingresar mas elementos al conjunto (S/N)” ;
cin>> continuar;
};
};
void main()
{
int n;
int m;
int elemento;
int A[100];
int B[100];
/* el codigo siguiente lee el conjunto A */
leer_conjunto( A, n, ‘A’ );
/* el codigo siguiente lee el conjunto B */
leer_conjunto( B, m, ‘B’ )
/* el codigo siguiente determina si el elemento esta en alguno de los dos conjuntos
*/
if( pertenece(A, n, elemento) || pertenece(B, m, elemento) )
{
cout << “El dato dado esta en alguno de los dos conjuntos”;
}
else
{
cout<< “El dato dado esta en ninguno de los conjuntos”;
};
};

__

PRUEBAS DE
TABLA DE CONTENIDO
ESCRITORIO

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:22:22 a.m.]


Programa Universidad Virtual

CODIFICACION TABLA DE CONTENIDOe

3.5 PRUEBAS DE ESCRITORIO

La prueba de escritorio es una herramienta útil para entender que hace


un determinado algoritmo, o para verificar que un algoritmo cumple con
la especificación sin necesidad de ejecutarlo.

Básicamente, una prueba de escritorio es una ejecución ‘a mano’ del algoritmo, por
lo tanto se debe llevar registro de los valores que va tomando cada una de
las variables involucradas en el mismo.

A continuación se muestra un ejemplo de prueba de escritorio del siguiente algoritmo:

suma :entero
entrada :entero
menor :entero

leer entrada
menor = entrada
suma = 0
mientras (entrada != 0) haga
si (entrada < menor) entonces
menor =entrada
fin_si
suma = suma + entrada
leer entrada
fin_mientras
escribir “valor Menor:”
escribir menor
escribir “Suma:”
escribir suma

INSTRUCCIÓN entrada menor suma Pantalla


leer entrada 10
menor = entrada 10
suma :=0 0
suma :=suma + entrada 10
leer entrada 7
menor = entrada 7
suma :=suma + entrada 17
leer entrada 9
suma :=suma + entrada 26
leer entrada 0

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:22:42 a.m.]


Programa Universidad Virtual

Escribir “valor menor:” Valor Menor


Escribir menor 7
Escribir “Suma:” Suma:
Escribir suma 26

__

CODIFICACION TABLA DE CONTENIDO

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:22:42 a.m.]


Programa Universidad Virtual

Tabla de contenido

MÓDULO 2: CONSTRUCTORES BÁSICOS (PARTE A)


4. LOS DATOS EN PROGRAMACIÓN
4.1 Datos
4.2 Variables
4.3 Literales
4.4 Constantes
4.5 Expresiones
Autoevaluación

5. ESTRUCTURAS DE CONTROL
5.1 Secuencia
5.2 Selección
5.3 Estructura de selección multiple
5.4 Codificación de algoritmos en lenguajes de programación
Autoevaluación

__

Tabla de contenido

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:23:47 a.m.]


Programa Universidad Virtual

CONSTRUCTORES
VARIABLES
BÁSICOS (PARTE A)

4.1 DATOS

Un conjunto es una colección ‘bien definida’ de objetos. Se


dice ‘bien definida’ si se sabe de manera exacta que elementos
están en la colección y que elementos no están. Existen dos
maneras de definir un conjunto: por extensión y por
comprensión.

Un conjunto es definido por extensión cuando se presentan


todo sus elementos entre llaves {}.

Ejemplos.

A = {a, b, c}

B = {0, 1, 2, 3, 4}

Un conjunto es definido por comprensión cuando los elementos


que lo conforman cumplen una propiedad dada.

Ejemplos.

C = {x | x es un número primo}

B = {x | x es una vocal}

A cada conjunto se le puede asignar uno o varios nombres;


dichos nombres constituyen el tipo de los elementos del
conjunto.

De manera informal, un dato es una pieza de información simple como un número,


un código, un hecho o una edad. De manera formal, un dato es un elemento
concreto de algún conjunto. El nombre del conjunto al que pertenece el
dato constituye el tipo del mismo.

Los tipos de datos más utilizados en programación son:

EJEMPLOS
El nombre asignado al conjunto de
Entero: 123<-1<0<2
números enteros.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:24:06 a.m.]


Programa Universidad Virtual

El nombre asignado al conjunto de


Real: 0.123<3.1415<-2.0
números reales.
El nombre asignado al conjunto de
Carácter: ‘a’‘*’‘+’‘;’
caracteres.
El nombre asignado al conjunto de
Booleano: falso verdadero
valores de verdad.
El nombre asignado al conjunto de
Cadena: Hola”“AbC123”
cadenas de caracteres.

Como se puede advertir en los ejemplos anteriores, cuando se trabaja


en programación es necesario:

Distinguir los números enteros de los números reales. Por ejemplo el 2 (sin
punto decimal), indica que el elemento es del conjunto de los enteros, mientras que
el 2.0 (con punto decimal), indica que es un elemento del conjunto de los reales.

Distinguir los símbolos y palabras que forman parte del sistema de representación
o codificación del algoritmo, de los usados para representar un dato concreto de
los tipos caracter y cadena de caracteres respectivamente. En este curso los datos
de tipo caracter son representados entre comillas simples (‘), mientras que los
datos de tipo cadena de caracteres son representados entre comillas dobles (“).
__

CONSTRUCTORES
VARIABLES
BÁSICOS (PARTE A)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:24:06 a.m.]


Programa Universidad Virtual

CONSTRUCTORES
LITERALES
BÁSICOS (PARTE A)

4.2 VARIABLES

Una variable es un símbolo que permite referenciar (señalar o demarcar) un


espacio en memoria en el que se puede almacenar un dato. Toda variable posee
tres características: nombre, tipo y estado.

4.2.1 Nombre o identificador.

El nombre de una variable es una secuencia de caracteres alfanuméricos (letras


y dígitos) y caracteres de subrayado, la cual siempre empieza por una letra.
En algunos lenguajes de programación (C++, C, Java), se hace distinción
entre mayúsculas y minúsculas mientras que en otros no (Pascal, Basic). Por
ejemplo, las variablesVelMax y velmax son diferentes en C mientras que son la
misma variable en Pascal.

Una buena técnica de programación es asignarle el nombre a una variable de


tal manera que indique por un lado el papel que desempeña dicha variable en
el algoritmo y por otro los posibles valores que almacena.

4.2.1.1 Ejemplos de nombre de variable.

● velocidad
● x
● valor1
● exponente
● val_max

4.2.2 Tipo.

El tipo de una variable es el mismo tipo de los datos que se pueden almacenar en
el espacio de memoria que la variable referencia. Por ejemplo, una variable de
tipo entero, es decir, que se ha declarado[1] como entera, sólo se puede usar
para referenciar datos de tipo entero. La cantidad de memoria, es decir, el espacio
en memoria en bits, asignada para almacenar un dato de un tipo depende del
sistema operativo y del compilador del lenguaje.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:25:33 a.m.]


Programa Universidad Virtual

En este curso una variable es declarada de la siguiente manera:

<nombre> : <tipo>

Donde, <nombre> es el nombre que se le dará a la variable y <tipo> es el tipo de


datos que la variable puede referenciar.

4.1.2.1 Ejemplos de declaración de variables.

● val_max : real
● contador : entero
● nombre : cadena
● letra : caracter
● bandera : booleano

Nota: Aplet es una aplicación desarrollada en lenguaje JAVA. Haz clik el gráfico
para observarla.

4.2.3 Estado o valor

El estado o valor de una variable es el dato almacenado en el espacio que


referencia la variable. El valor de una variable puede cambiar en el tiempo, es
decir, conforme el algoritmo se va ejecutando, pero solamente puede tomar
valores que pertenezcan al tipo de datos declarado para la variable.

[1] Declarar una variable es asignarle un nombre y definirle su tipo.


__

CONSTRUCTORES
LITERALES
BÁSICOS (PARTE A)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:25:33 a.m.]


Programa Universidad Virtual

CONSTRUCTORES
CONSTANTES
BÁSICOS (PARTE A)

4.3 LITERALES

Un literal es una secuencia de caracteres que representa un valor concreto.


Los literales son clasificados de acuerdo al tipo de datos que representan.
Las siguientes secciones describen la forma de los literales usada en este libro
(esta representación es específica para cada lenguaje de programación).

4.3.1 Literales enteros

Un literal entero es una secuencia de dígitos (0,1,..,9), posiblemente precedida por


el guión (-), que permite representar un dato de tipo entero.

4.3.1.1 Ejemplos de literales enteros.

● 12345
● 4768
● –138
● 2609
● 10

4.3.2 Literales reales

Un literal real es una secuencia de dígitos, posiblemente precedida por el guión, y


en la cual debe aparecer el punto decimal (.) que permite representar un dato de
tipo real. El punto decimal separa la parte entera de la parte decimal del número; si
no existe punto decimal el literal es considerado como un literal entero y
generalmente si después del punto no hay dígitos, el literal se considera incorrecto
[1]. Los siguientes son ejemplos de literales reales:

4.3.2.1 Ejemplos de literales reales.

● 3465.98
● 29.0
● -123.78
● 23.7e-4 (en notación científica 23.7e-4 equivale a 23.7 * 10-4)
● –3.9876

4.3.3 Literales de caracteres

Un literal de tipo carácter es una símbolo delimitado por comillas simples (‘)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:25:55 a.m.]


Programa Universidad Virtual

que permite representar al carácter ubicado entre las comillas simples.

4.3.3.1 Ejemplos de literales de carácter.

● 'a’ representa el caracter a


● ‘ ‘ representa el caracter espacio en blanco
● '3’ representa el caracter dígito 3
● '$’ representa el caracter de pesos.
● '?’ representa el caracter interrogación de cierre.

4.3.4 Literales Cadenas

Un literal de cadena es una secuencia de símbolos, delimitada por comillas


dobles, que sirve para representar la cadena de caracteres delimitada por las
comillas dobles.

4.3.4.1 Ejemplos de literales de carácter.

● “Pepito va al colegio” , representa la cadena Pepito va al colegio.


● “El área de la circunferencia (2*pi*r) es : ” , representa la cadena El área de
la circunferencia (2*pi*r) .

4.3.5 Literales booleanos

Son las palabras falso y verdadero, las cuales son usadas para representar los
dos valores de verdad.

[1] En muchos casos se puede utilizar notación científica

__

CONSTRUCTORES
CONSTANTES
BÁSICOS (PARTE A)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:25:55 a.m.]


Programa Universidad Virtual

CONSTRUCTORES
EXPRESIONES
BÁSICOS (PARTE A)

4.4 CONSTANTES

Una constante es un símbolo que permite referenciar un espacio en memoria en


el que hay un dato almacenado que no se puede cambiar. En términos generales,
una constante es una variable para la cual no se puede modificar o cambiar el
estado con el tiempo.

Las constantes se declaran de la siguiente manera:

<nombre> = <literal>

Donde, <nombre> es el nombre de la constante y <literal> es el literal que representa


el valor de la constante.

Una buena técnica de programación es usar letras mayúsculas para los nombres
de las constantes.

4.4.1 Ejemplos de constantes.

● PI = 3.1415926
● VELOCIDAD_LUZ = 300000000.0
● SALUDO_BASICO = “Hola, Buenos días”
● TAMANO_MAXIMO = 1000
● ESPACIO = ‘ ’

__

CONSTRUCTORES
EXPRESIONES
BÁSICOS (PARTE A)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:26:18 a.m.]


Programa Universidad Virtual

CONSTRUCTORES

BÁSICOS (PARTE A)

4.5 EXPRESIONES
Introduccion
4.5.1 Expresiones numericas
4.5.2 Expresiones logicas
4.5.3 Evaluacion de expresiones
4.5.4 Ejercicios de expresiones
4.5.5 Instrucciones sobre variables, literales y constantes

__

CONSTRUCTORES

BÁSICOS (PARTE A)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:26:38 a.m.]


Programa Universidad Virtual

EXPRESIONES
EXPRESIONES
NUMÉRICAS

4.5 EXPRESIONES

En muchas ocasiones, la ejecución de una tarea del algoritmo implica la realización


de un cálculo matemático (operaciones aritméticas y/o lógicas). Una expresión es
una serie de términos (constantes, literales, variables y funciones)
posiblemente agrupados mediante paréntesis y conectados mediante
operadores (aritméticos como +, - y lógicos como |,&), que representan un
cálculo matemático.

El proceso que permite determinar el valor de la expresión, es decir el resultado


del cálculo, es conocido como evaluación de expresión. Según el tipo del
resultado de la expresión, el cual es conocido como tipo de la expresión,
las expresiones se clasifican en:

Expresiones numéricas:Si el resultado de la expresión es un entero o un real.

Expresiones lógicas: Si el resultado de la expresión es un valor de verdad.

__

EXPRESIONES
EXPRESIONES
NUMÉRICAS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:26:51 a.m.]


Programa Universidad Virtual

EXPRESIONES EXPRESIONES LÓGICAS

4.5.1 EXPRESIONES NUMÉRICAS

Son expresiones en las que solamente aparecen operadores aritméticos ( +, -,


*, / ) , conectando términos de tipo numérico exclusivamente. Por ejemplo,
una expresión como:

( A + 5 ) * ( Y +piso(X+2.5) )

Es una expresión numérica si A es una variable de tipo entero (pues A esta


siendo sumada con un literal de tipo entero 5), Y es una variable de tipo entero y X
es una variable de tipo real (la función piso(X) calcula el entero más cercano al real
X por debajo o por encima, por ejemplo:

Por debajo piso(3.45) = 3 y piso(-4.678) = -5).

Por encima piso(3.65) = 4 y piso(-4.378) = -4)

Entre las funciones numéricas más usadas en programación se cuentan:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:27:16 a.m.]


Programa Universidad Virtual

__

EXPRESIONES EXPRESIONES LÓGICAS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:27:16 a.m.]


Programa Universidad Virtual

EVALUACION DE
EXPRESIONES
EXPRESIONES

4.5.2 EXPRESIONES LÓGICAS

Una expresión lógica es aquella, en la cual, el resultado se da en términos


de verdadero o falso. Generalmente una expresión lógica se construye a partir
de expresiones comparativas (dos expresiones numéricas relacionadas
mediante algún operador relacional[1]), de variables y/o literales booleanos, los
cuales se conectan mediante operadores lógicos.

Los operadores de comparación usados en programación son los siguientes:


mayor que (>), menor que (<), igual (=), mayor o igual que (>=), menor o igual
que (<=) y diferente (<>); mientras que los operadores lógicos usados son: o (|), y
(&) y la negación (~). En el siguiente cuadro se resumen las tablas de verdad de
estos operadores lógicos.

Tablas de verdad

Negación : (~)

Y lógico (&) y o lógico (|)

Por ejemplo, una expresión como:

(A + 5 >= 3) & (Y + piso(X + 2.5) <= 3 * X) | ~bandera

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:27:35 a.m.]


Programa Universidad Virtual

Es una expresión lógica si A y son de tipo entero, X es una variable de tipo real
y bandera es una variable de tipo booleano.

[1]Formalmente se dice operador de comparación y no relacional. El nombre


de relacional es dado por que estos operadores provienen de las relaciones de orden.
__

EVALUACION DE
EXPRESIONES
EXPRESIONES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:27:35 a.m.]


Programa Universidad Virtual

EXPRESIONES

4.5.3 EVALUACION DE EXPRESIONES


Introduccion
4.5.3.1 Precedencia de operadores
4.5.3.2 Ejemplos de evaluacion de expresiones

__

EXPRESIONES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:27:58 a.m.]


Programa Universidad Virtual

PRECEDENCIA DE
EVALUACION DE
OPERADORES
EXPRESIONES

4.5.3 EVALUACIÓN DE EXPRESIONES

Una expresión sea del tipo que sea se evalúa mediante el siguiente algoritmo:

Inicio
PASO 1. Reemplazar todas las variables de la expresión por
su valor.
PASO 2. Desde los paréntesis más internos hacia los más
externos mientras existan paréntesis y/o operadores haga :
2.1. Si una función no tiene todos sus argumentos evaluados,
evaluar cada uno de los mismos.
2.2. Evaluar toda función que tenga sus argumentos
evaluados y reemplazarla por su valor resultado.
2.3. Realizar las operaciones indicadas según la precedencia
de los operadores que actúan sobre números y/o valores de
verdad, es decir, términos ya evaluados.
2.4. Si sólo un número y/o valor de verdad se encuentra entre
paréntesis eliminar los paréntesis.
PASO 3. El número o valor de verdad que resulta es el valor
de la expresión.
Fin

Para que una expresión sea correcta, los términos que se conectan mediante
un operador deben ser del mismo tipo. Por ejemplo, si en una expresión se suma
una variable A con un literal entero, la variable debe ser tipo entero.
__

PRECEDENCIA DE
EVALUACION DE
OPERADORES
EXPRESIONES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:29:44 a.m.]


Programa Universidad Virtual

EJEMPLOS DE EVALUACIÓN DE
EVALUACION DE
EXPRESIONES
EXPRESIONES

4.5.3.1 PRECEDENCIA DE OPERADORES

La precedencia de operadores es un orden de evaluación estándar, que se le


ha asignado a los operadores para evitar excesivo uso de paréntesis, evitando
las posibles ambigüedades en el proceso de evaluación, es decir, evitando que
una expresión pueda tomar más de un valor.

Por ejemplo la expresión 3 + 4 * 5, es ambigua pues puede ser interpretada como:


(3 + 4) * 5 = 35 o como 3 + (4 * 5)=23, las cuales al ser evaluadas producen
resultados diferentes.

La precedencia de operadores está definida en la siguiente tabla:

Precedencia Operadores
8 ( ) Paréntesis
7 - (signo menos)
6 *, /, mod
5 +, - (substracción)
4 >, <, = ,>=, <=, <>
3 ~
2 &
1 |

Tabla 1. Precedencia de operadores

Entre más alta es la precedencia más rápido se debe evaluar el operador.

Nótese que los paréntesis tienen la máxima precedencia, es decir, lo que está
entre los paréntesis es lo primero que se evalúa; mientras que el | lógico tiene la
más baja precedencia, lo que indica que será el último en ser evaluado. Cuando
una expresión esta formada por operadores de la misma precedencia,
dichos operadores son evaluados de izquierda a derecha.

El operador mod, retorna el módulo (o residuo) de la división entera de dos


números, por ejemplo, 11 mod 3 = 2 y 11 mod 4 = 3.
__

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:30:02 a.m.]


Programa Universidad Virtual

EJEMPLOS DE EVALUACIÓN DE
EVALUACION DE
EXPRESIONES
EXPRESIONES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:30:02 a.m.]


Programa Universidad Virtual

EJERCICIOS DE
EVALUACION DE
EXPRESIONES
EXPRESIONES

4.5.3.2 EJEMPLOS DE EVALUACIÓN DE EXPRESIONES

Si los valores de las variables A, B y C son 5, 3 y 9 respectivamente, la


siguiente expresión -(3 + 4) * A + B * C es evaluada de la siguiente forma:

-(3 + 4) * 5 + 3 * 9 Reemplazando las variables por sus valores


-(7)*5+3*9 Paréntesis prioridad más alta (8)
-7*5+3*9 Eliminación paréntesis
-35+27 Multiplicación prioridad seis (6)
-8 Suma prioridad cinco (5)

Si los valores de las variables enteras A, B y C son 5, 3 y 9 respectivamente,


la siguiente expresión -(3 + 4) * A / B * C + B * C es evaluada de la
siguiente forma:

-(3 + 4) * 5 / 3 * 9 + 3 * 9 Reemplazando las variables por sus valores


-(7) * 5 / 3 * 9 + 3 * 9 Paréntesis prioridad más alta (8)
-7 * 5 / 3 * 9 +3 * 9 Eliminación paréntesis
-35 / 3 * 9 +27 Multiplicación prioridad seis (6) de izquierda
a derecha.
-11 * 9 +27 División prioridad seis (6) de izquierda a
derecha.
-99 +27 Multiplicación prioridad seis (6).
-72 Suma prioridad cinco (5)

Si A e Y son variables de tipo entero y X de tipo real, con valores 6, 8 y –


1.8 respectivamente, la expresión

(A + 5) * (Y+ piso(X+2.5))

Es evaluada de la siguiente manera:

1. Reemplazar todas las variables por su (6+5)*(8+piso(-1.8+2.5))


valor

2a. Si una función no tiene todos sus (6 + 5) * (8+ piso(0.7))


argumentos evaluados (los cuales
pueden ser a su vez expresiones),
evaluar cada uno de los mismos

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:30:32 a.m.]


Programa Universidad Virtual

2b. Aplicar toda función que tenga todos (6 + 5) * (8+ 0)


sus argumentos evaluados y
reemplazar la función por el valor
resultado de la función.
2c. Realizar las operaciones indicadas (11)*(8)
según la precedencia de los
operadores que actúan sobre
números y/o valores de verdad, es
decir, términos ya evaluados.
2d. Si sólo un número o un valor de 11*8
verdad se encuentra entre paréntesis
eliminar los paréntesis.
2c. Realizar las operaciones indicadas 88
según la precedencia de los
operadores que actúan sobre
números y/o valores de verdad, es
decir, términos ya evaluados.
3. El número o valor de verdad que 88
resulta es el valor de la expresión.

Sean A y B variables de tipo entero con valores 6 y 8 respectivamente,


la expresión (A > B+4) | ((A = 3) & ~(B < 4)) es evaluada como se muestra en
la siguiente página.

1. Reemplazar todas las (6>12)|((6=3)& ~(8<4))


variables por su valor.
2c. Realizar las operaciones (falso)|((falso)& ~(falso))
indicadas según la
precedencia de los
operadores que actúan sobre
números y/o valores de
verdad, es decir, términos ya
evaluados.
2d. Si sólo un número y/o valor falso | (falso & ~falso)
de verdad se encuentra entre
paréntesis eliminar los
paréntesis.
2c. Realizar las operaciones falso | (falso & verdadero)
indicadas según la
precedencia de los
operadores que actúan sobre
números y/o valores de
verdad, es decir, términos ya
evaluados.
2c. Realizar las operaciones falso | (falso)
indicadas según la
precedencia de los
operadores que actúan sobre
números y/o valores de
verdad, es decir, términos ya
evaluados.
2d. Si sólo un número y/o valor falso | falso
de verdad se encuentra entre
paréntesis eliminar los
paréntesis.
2c. Realizar las operaciones Falso
indicadas según la
precedencia de los
operadores que actúan sobre
números y/o valores de
verdad, es decir, términos ya
evaluados.
3. El número o valor de verdad Falso
que resulta es el valor de la
expresión

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:30:32 a.m.]


Programa Universidad Virtual

Como se puede apreciar en el primer ejemplo, la división de enteros da


como resultado un número entero y no un número real.

__

EJERCICIOS DE
EVALUACION DE
EXPRESIONES
EXPRESIONES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:30:32 a.m.]


Programa Universidad Virtual

INSTRUCCIONES SOBRE
EJEMPLOS DE VARIABLES, LITERALES Y

EVALUACIÓN DE EXPRESIONES CONSTANTES

4.5.4 EJERCICIOS DE EXPRESIONES

1. Si tiempo, velocidad y peso son variables de tipo real, contador, itera y suma son de
tipo entero, letra y primo son de tipo carácter y bandera es de tipo booleano, determinar
cuales de las siguientes expresiones son validas y cuales no; se debe justificar la respuesta.

a. (tiempo + itera) / (velocidad + peso)


b. piso(tiempo) + contador < itera * suma & ~bandera
c. tiempo * velocidad < bandera & peso >= 0.0
d. letra + contador * suma
e. techo(velocidad) * suma + piso(tiempo) * itera

2. Si tiempo, velocidad y peso son variables de tipo real, contador, itera y suma son de
tipo entero, letra y primo son de tipo carácter y bandera es de tipo booleano, con valores 3.0,
-4.5, 8.0, 5, -2, 30 y falso respectivamente, evaluar las siguientes expresiones

a. itera + piso(tiempo + velocidad) / (suma + itera)


b. letra <> primo & techo(tiempo) / piso(velocidad) + cuenta < 5
c. peso * velocidad / ( tiempo + 5.6 )
d. contador + (itera*itera * suma) / 4 - itera
e. bandera & (raiz2(tiempo) <= peso * velocidad)
f. contador < suma | tiempo > 1.0 & ~(suma = itera)

__

INSTRUCCIONES SOBRE
EJEMPLOS DE VARIABLES, LITERALES Y

EVALUACIÓN DE EXPRESIONES CONSTANTES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:31:14 a.m.]


Programa Universidad Virtual

EXPRESIONES

4.5.5 INSTRUCCIONES SOBRE VARIABLES, LITERALES


Y CONSTANTES

Las dos operaciones que se pueden realizar sobre una variable son modificar su
valor y mostrar su valor. Existen dos instrucciones diferentes que permiten modificar
el valor de una variable: asignación y lectura, mientras que existe sólo una forma
de mostrar el valor: escritura.

La única operación que se puede realizar sobre constantes y/o literales es mostrar
su valor y se usa de la misma manera como se muestra el valor de una variable.

4.5.5.1 Asignacion
4.5.5.2 Lectura y escritura
4.5.5.3 Ejercicios de instrucciones sobre variables

__

EXPRESIONES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:31:33 a.m.]


Programa Universidad Virtual

INSTRUCCIONES SOBRE
LECTURA Y ESCRITURA
VARIABLES, LITERALES Y
CONSTANTES

4.5.5.1 ASIGNACIÓN

La asignación es la instrucción por medio de la cual se puede modificar el valor de


una variable utilizando el resultado de una expresión. Para que la asignación
sea valida, es decir, se pueda realizar, la variable y la expresión deben ser del
mismo tipo.

La asignación tiene la siguiente forma:

<nombre> := <expresión>

Donde, <nombre> es el nombre de la variable, que debe ser previamente declarada,


y <expresión>es una expresión del mismo tipo de la variable <nombre>.

El símbolo := es usado para indicar que el valor de la expresión <expresión> es


almacenado en la variable <nombre>.

Para realizar una asignación (ejecutar), se sigue el siguiente algoritmo:

1. Evaluar la expresión.

2. Almacenar el resultado de la expresión en la dirección de memoria referenciada


por la variable.

3.2.1.1 Ejemplos de asignación

Si n es una variable de tipo entero que tiene el valor 5, la asignación


http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:31:51 a.m.]
Programa Universidad Virtual

n := n + 1

se ejecuta de la siguiente manera:

1. Evaluar la expresión (1. reemplazar todas la variables por n := 5 + 1


su valor)
1. Evaluar la expresión (2c. realizar las operaciones indicadas n := 6
según su precedencia)
2. Almacenar el valor en el espacio de memoria referenciado n=6
por la variable.

La variable n queda finalmente con el valor de 6.

Si n, m y kson variables de tipo entero y tienen los valores 5, 4 y –


3 respectivamente, la asignación m:=k + n * 5, se ejecuta de la siguiente manera:

1. Evaluar la expresión (1. Reemplazar todas la m :=-3 + 5 * 5


variables por su valor)
1. Evaluar la expresión (2c. realizar las operaciones m := 22
indicadas según su precedencia)
2. Almacenar el valor en el espacio de memoria m = 22
referenciado por la variable.

La variable m queda finalmente con el valor de 22.

Si A e Y son variables de tipo entero y X de tipo real, con valores 6, 8 y –


1.8 respectivamente, la asignación A := (A + 5) * (Y+ piso(X+2.5)), es ejecutada de
la siguiente manera:

1. Evaluar la expresión (La evaluación fue realizada en A :=88


los ejemplos de la sección anterior)
2. Almacenar el valor en el espacio de memoria A = 22
referenciado por la variable.

La variable A queda con el valor 22.

Sean A y B variables de tipo entero con valores 6 y 8 respectivamente, bandera


de tipo booleano con valor verdadero, la asignación:

bandera := (A > B+4) | ((A = 3) & ~(B < 4))

Es ejecutada como se muestra en la página siguiente.

1. Evaluar la expresión (La evaluación fue realizada en bandera :=falso


los ejemplos de la sección anterior)
2. Almacenar el valor en el espacio de memoria bandera = falso
referenciado por la variable.

La variable bandera queda con el valor de verdad falso.

Suponga que y es una variable de tipo real que tiene el valor –3.0, la asignación

y := 3 + y * y

Es ejecutada como se muestra en la siguiente página.


http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:31:51 a.m.]
Programa Universidad Virtual

1. Evaluar la expresión y :=12.0


2. Almacenar el valor en el espacio de memoria y = 12.0
referenciado por la variable.

La variable y queda finalmente con el valor de 12.0.

Como se puede apreciar en los ejemplos anteriores, la variable a la que se le


está asignando el resultado de la expresión puede aparecer en la expresión, sin
que ello sea un error. Se debe recordar que primero la expresión es
evaluada (tomando el valor que tengan las variables en ese momento),
y posteriormente se almacena el resultado en la variable.
__

INSTRUCCIONES SOBRE
LECTURA Y ESCRITURA
VARIABLES, LITERALES Y
CONSTANTES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:31:51 a.m.]


Programa Universidad Virtual

EJERCICIOS DE
INSTRUCCIONES SOBRE INSTRUCCIONES SOBRE
VARIABLES, LITERALES Y VARIABLES
CONSTANTES

4.5.5.2 LECTURA Y ESCRITURA

La instrucción lectura es la que le permite al usuario del algoritmo modificar el


valor de una variable, durante la ejecución del mismo. Esta instrucción espera que
el usuario ingrese un valor (mediante el teclado el usuario escribe el valor a
almacenar en la variable) y después, garantizando que sea del tipo apropiado,
lo asigna a la variable. La lectura tiene la siguiente forma:

En este curso una variable es leída de la siguiente manera:

leer (nombre)

donde, (nombre) es el nombre de la variable que se está leyendo.

4.5.5.2.1 Ejemplos de lectura

● leer (n)
● leer (m)
● leer (x)
● leer (y)

Si x, yson variables de tipo real y n, mson variables de tipo entero y si el usuario en


el primer ejemplo ingresa el valor de 30, después de ejecutar la instrucción de
lectura la variable n tendrá el valor de 30.

La escritura es la instrucción que le permite al usuario del algoritmo ver el valor


de una variable, una constante o un literal durante la ejecución del mismo.
Esta instrucción muestra dicho valor en la pantalla del computador. La escritura
tiene la siguiente forma:

En este curso una variable es escrita de la siguiente manera:

escribir (nombre)

donde, (nombre) es el nombre de la variable, constante o literal que se está


mostrando.

4.5.2.2.2 Ejemplos de escritura


http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:32:10 a.m.]
Programa Universidad Virtual

● escribir (n)
● escribir (m)
● escribir (x)
● escribir (y)
● escribir (cambio_linea )
● escribir (“Hola, buenos días” )

Si x, y son variables de tipo real y n, m son variables de tipo entero, en el


primer ejemplo si la variable n tiene el valor de 30, en la pantalla se presentará
dicho valor. En el último ejemplo en la pantalla aparecerá el texto Hola, buenos
días. En el quinto ejemplo se esta escribiendo un cambio de línea lo que tiene
como efecto que lo siguiente que se escriba aparecerá en la siguiente línea de
la pantalla del computador.

__

EJERCICIOS DE
INSTRUCCIONES SOBRE INSTRUCCIONES SOBRE
VARIABLES, LITERALES Y VARIABLES
CONSTANTES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:32:10 a.m.]


Programa Universidad Virtual

INSTRUCCIONES SOBRE
AUTOEVALUACION
VARIABLES, LITERALES Y
CONSTANTES

4.5.5.3. EJERCICIOS DE INSTRUCCIONES SOBRE VARIABLES

1. Si x, v y p son variables de tipo real, cont, i y k son variables de tipo entero, letra y
c son variables de tipo carácter, band y terminar son variables de tipo booleano,
MAX es una constante de tipo entero y PI es una constante de tipo real,
determinar cuales de las siguientes instrucciones son validas; se debe justificar
la respuesta

● leer (letra )
● escribir (MAX )
● leer (cont )
● escribir (x )
● leer (MAX)
● leer (v )
● x :=enteroAreal(k) + 2.0 * PI
● letra :=‘p’
● letra :=“p”
● letra :=p
● letra :=c
● p :=v / x * raiz2( p ) – band
● band :=(p-v / x*cuadrado(p)) | ~(terminar | x >=v)
● x :=“3.2444” + “1.4e-4”
● x :=3.2444 + 1.4e-4
● x :=‘v’ + ‘p’
● terminar :=p > v >=x
● terminar :=verdadero
● terminar :=“falso”
● terminar :=‘f’ <=letra
● x + 3.0 :=v
● v :=x * p + enteroAreal(caracterAentero(letra))
● band :=(x+v)*p | terminar | cont <=k + i
● k :=caracterAentero( letra + caracterAentero(c) ) + k

2. Si x,v y p son variables de tipo real, con valores 3.5, 1.4 y 6.0
respectivamente, determinar el valor de la variable z de tipo real al realizar cada
una de las asignaciones siguientes:

● z :=v - p / (x + p / x – v)
● z :=p / x / v + p / x * v
● z:=(v – 3.0 * x / p) / (4.0 – v / (5.0 + p / x))
● z:=cuadrado(v + raiz2( x + p )) – v * x

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:32:36 a.m.]


Programa Universidad Virtual

● z :=2.0*p – 4.0/v + 5.0*x/(3.0+v*p – x)

3. Si x, v y p son variables de tipo real, con valores 3.5, 1.4 y 6.0 respectivamente, i,
k y cont son variables enteras con valores 5, 2 y –4, respectivamente, letra y c
son variables de tipo carácter con valores ‘p’ y ‘t’ y bandera y terminar de
tipo booleano con valores falso y verdadero respectivamente. Determinar el valor
de cada una de las variables después de ejecutar las siguientes instrucciones, en
el orden en que aparecen.

● x :=v + enteroAreal( caracterAentero( letra ) )


● k :=cuadrado( k–2*cont ) + i*( cont – k / 2.0 )/cont
● v :=x + (p – raiz2(x) * ( v – x ) + 3.0) * p
● bandera :=(terminar | ~(i+2 <>cont | p>=v)) | ( x+v) = p
● cont := cont + 1
● i:= cont * realAentero(x * v – p/2.0) + k – i
● p :=p + x – enteroAreal( piso( p+x) + 5 )
● letra := enteroAcaracter( k )
● k := ( k + cont ) mod ( piso( p ) + piso( v ) )

4. Si x, v y p son variables de tipo real, con valores 3.5, 1.4 y 6.0 respectivamente, i,
k y cont son variables enteras con valores 5, 2 y –4, respectivamente, letra y c
son variables de tipo carácter con valores ‘p’ y ‘t’ y bandera y terminar de
tipo booleano con valores falso y verdadero respectivamente. Determinar el valor
de cada una de las variables después de ejecutar las siguientes instrucciones, en
el orden en que aparecen.

● v := x + (p – raiz2(x) * ( v – x ) + 3.0) * p
● bandera := (terminar | ~ (i+2 <=cont | p>=v)) | (x+v = p)
● i := cont * realAentero(x * v – p/2.0) + k – i
● x := v + raalAenterol( caracterAentero( letra ) )
● cont := cont + 1
● letra := enteroAcaracter( k )
● k := ( k + cont ) mod ( piso( p ) + techo( v ) )
● p := p + x – enteroAreal( piso( p+x) + 5 )

__

INSTRUCCIONES SOBRE
AUTOEVALUACION
VARIABLES, LITERALES Y
CONSTANTES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:32:36 a.m.]


Programa Universidad Virtual

CONSTRUCTORES
SELECCION
BÁSICOS(PARTE A)

5.1 SECUENCIA

Dada una lista de instrucciones <instrucción 1> <instrucción 2> ... <instrucción n>
la estructura de SECUENCIA permite la ejecución de dicha lista en el orden en
que aparecen las instrucciones, es decir, se ejecuta primero la
instrucción <instrucción 1> luego la instrucción <instrucción 2>, y por último
se ejecuta la instrucción <instrucción n> La forma general de la secuencia es:

<instrucción1>

<instrucción2>
.

.
<instrucción
n>

Una secuencia de instrucciones es llamada generalmente BLOQUE


DE INSTRUCCIONES.

5.1.1 Ejemplos de secuencia.

Aplicando la metodología de programación presentada en este curso, encontrar


los algoritmos que permiten resolver los siguientes problemas:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 5) [12/02/2008 12:33:32 a.m.]


Programa Universidad Virtual

Dado el radio de un círculo, calcular su área.

DIALOGO

Objetos Conocidos Un número que representa el radio de un circulo

Objetos Desconocidos Un número que representa el área de un circulo.

El número buscado corresponde al área del círculo con radio


Condiciones
igual al número dado.

ESPECIFICACIÓN

Entradas r Î Reales, (r es el radio del círculo).

Salidas a Î Reales, (a es el área del círculo).

Condiciones a = p * r2

DISEÑO

Primera Iteración:

Inicio
PASO 1. leer el valor del radio del círculo
PASO 2. calcular el área del círculo
PASO 3. escribir el área del círculo
Fin

Iteración Final:

PI = 3.1415926 /* se define la constante pi */


r: real /*se define la variable para el radio del círculo*/
a : real /* se define la variable para el área del círculo */

leer( r ) /* se lee el radio */


a := PI * cuadrado( r ) /* se calcula el área */

escribir( “El área es: ”, a ) /* se escribe el resultado */

PRUEBA DE ESCRITORIO

Este algoritmo cuenta con seis (6) líneas, las tres primeras (1-3) , son para definir
las variables y constantes usadas y las últimas tres (4-6), son las instrucciones
que son aplicadas sobre dichos datos. De esta manera la prueba de escritorio se
debe realizar solamente sobre las tres últimas líneas, teniendo en cuenta los

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 5) [12/02/2008 12:33:32 a.m.]


Programa Universidad Virtual

valores para las constantes y las variables.

LINEA r a ENTRADA SALIDA


4 5.0 5.0
5 78.53981
El área es:
6
78.53981

Un granjero tiene una cantidad X de animales de dos tipos: conejos y gansos. Si


la cantidad de patas total de los animales Y es conocida, ¿cuántos conejos y
cuantos gansos tiene el granjero?

DIALOGO

Objetos Conocidos La cantidad total de animales X y la cantidad de patas totales Y.

Objetos Desconocidos La cantidad de conejos y la cantidad de gansos.

La suma de los conejos y los gansos es igual a X. La suma de


Condiciones los patas de los conejos (cuatro por cada uno) y de los gansos
(dos por cada uno) es igual a Y.

ESPECIFICACIÓN

Entradas X, Y Î Naturales, (X es el total de animales, Y es el total de patas).

C, G Î Naturales, (C es el número de conejos, G es el número de


Salidas
gansos).

Condiciones X = G + C, Y = 2*G + 4*C

Aplicando un poco de álgebra a las condiciones anteriores, para expresar las


variables de salida C y G en términos de las variables de entrada X y Y, se tiene que:

G= (4*X - Y)/2, C = (Y - 2*X)/2

DISEÑO

Primera Iteración:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 5) [12/02/2008 12:33:32 a.m.]


Programa Universidad Virtual

Inicio
PASO 1. Leer las entradas
PASO 2. Realizar el cálculo
PASO 3. escribir los resultados
Fin

Segunda Iteración:

Inicio
PASO 1. Leer las entradas
PASO 1.1. Leer el número total de animales
PASO 1.2. Leer el número total de patas
PASO 2. Realizar el cálculo
PASO 2.1. Calcular el número de gansos
PASO 2.2. Calcular el número de conejos
PASO 3. escribir los resultados
PASO 3.1. escribir el número de gansos
PASO 3.2. escribir el número de conejos
Fin

Iteración Final:

x: entero /* se define la variable para el número total de animales */


y: entero /* se define la variable para el número total de patas de los
animales */
g: entero /*se define la variable para el número de gansos*/
c: entero /*se define la variable para el número de conejos*/
leer( x) /* lee el número total de animales */
leer( y) /* lee el número total de patas de los animales */
g:=(4*x - y)/2 /* calcula el número de gansos */
c :=(y - 2*x)/2 /* calcula el número de conejos */

escribir( “Cantidad de gansos:”, g)


escribir( “Cantidad de conejos:”, c)

PRUEBA DE ESCRITORIO

Este algoritmo cuenta con diez (10) líneas, las cuatro primeras (1-4), son para
definir las variables usadas y las últimas seis (5-10) son las instrucciones que
son aplicadas sobre dichos datos. De esta manera la prueba de escritorio se
debe realizar solamente sobre las líneas (5-10), teniendo en cuenta los valores
para las variables.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 5) [12/02/2008 12:33:32 a.m.]


Programa Universidad Virtual

LINEA x y g c ENTRADA SALIDA


5 50 50
6 140. 140
7 30
8 20
9 Cantidad de gansos: 30
10 Cantidad de conejos: 20

__

CONSTRUCTORES
SELECCION
BÁSICOS (PARTE A)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (5 of 5) [12/02/2008 12:33:32 a.m.]


Programa Universidad Virtual

CONSTRUCTORES BÁSICOS (PARTE A) ESTRUCTURA DE SELECCIÓN MULTIPLE

5.2 SELECCIÓN

La estructura de SELECCION permite la ejecución de un bloque de instrucciones o


de otro dependiendo del valor de una expresión lógica denominada CONDICION.
La forma general de la selección es:

si (condición) entonces

<bloque instrucciones 1>

sino

<bloque de instrucciones 2>

fin_si

Donde, <condición> es la expresión lógica que se evalúa para determinar el bloque


de instrucciones a ejecutar, <bloque instrucciones 1> es el conjunto de
instrucciones que se ejecuta si la condición evalúa a verdadero y
<bloque instrucciones 2> es el conjunto de instrucciones que se ejecuta si

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 9) [12/02/2008 12:35:03 a.m.]


Programa Universidad Virtual

la condición evalúa a falso.

5.2.1 Ejemplos de selección.

Dados un número entero entre 100 y 999 determinar si es palíndrome o no


lo es. Un número palíndrome si se lee igual al derecho y al revés. Por ejemplo, 101
es palíndrome (al derecho se lee 101 y al revés se lee 101), mientras que 203 no
lo es (al derecho se lee 203 y al revés se lee 302).

DIALOGO

OBJETOS DESCONOCIDOS Un texto.

OBJETOS CONOCIDOS Un número entero entre 100 y 999.

CONDICIONES El texto debe indicar si el número ingresado es palíndrome o no lo es.

ESPECIFICACIÓN

ENTRADAS n Î Enteros, (n es el número ingresado).

Texto Î Cadenas, (Texto es una cadena de caracteres indicando si el número es o


SALIDAS
no palíndrome).

CONDICIONES
Texto = “Es palíndrome ” si u = c, “No es palíndrome” en otro caso

con u = las unidades de n y c = las centenas de n

DISEÑO
http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 9) [12/02/2008 12:35:03 a.m.]
Programa Universidad Virtual

Primera Iteración:

Inicio
PASO 1. Leer el número.
PASO 2. Determinar si es palíndrome o no.
PASO 3. escribir el texto resultado.
Fin

Segunda Iteración:

Inicio
PASO 1. Leer el número.
PASO 2. Determinar si es palíndrome o no
PASO 2.1. Calcular las unidades del número
PASO 2.2. Calcular las decenas del número.
PASO 2.3. Calcular el texto resultado.
PASO 3. escribir el texto resultado.
Fin

Iteración Final:

n: entero /* se define la variable para el número */


u: entero /* se define la variable unidades del número*/
c: entero /*se define la variable centenas del número*/
texto: cadena /* define la variable para el texto */

leer( n ) /* lee el número */


u := n mod 10 /* calcula las unidades del número */
c := ( n / 100 ) mod 10 /* calcula las centenas del número */

si (u = c) entonces
texto :=“es palíndrome” /* el número es palíndrome */
sino
texto := “no es palíndrome” /* el número no es palíndrome */
fin_si

escribir( “El número ”)


escribir( texto )

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 9) [12/02/2008 12:35:03 a.m.]


Programa Universidad Virtual

PRUEBA DE ESCRITORIO

Este algoritmo cuenta con trece (13) líneas, las cuatro primeras (1-4), son para
definir las variables usadas y las últimas nueve (5-13) son las instrucciones que
son aplicadas sobre dichos datos. De esta manera la prueba de escritorio se
debe realizar solamente sobre las líneas (5-13), teniendo en cuenta los valores
para las variables.

Primer prueba de escritorio

LINEA n u c texto ENTRADA SALIDA


5 404 404
6 4
7 4
8 La condición es evaluada a verdadero, por lo tanto se pasa a la línea 9, la
siguiente línea al entonces de la selección en ejecución.
9 es palíndrome
10 Se salta hasta el fin_si de la selección en ejecución, es decir, hasta la línea 12
12 Se salta a la siguiente línea.
13 El número es palíndrome

Segunda prueba de escritorio

LINEA n u c texto ENTRADA SALIDA


5 725 404
6 7
7 5
8 La condición es evaluada a falso, por lo tanto se pasa a la línea 11, la siguiente
línea al sino de la selección en ejecución.
11 no es palíndrome
12 Se salta a la siguiente línea.
13 El número no es palíndrome

Dados tres números enteros calcular el máximo.

DIALOGO

OBJETOS DESCONOCIDOS Tres números enteros.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 9) [12/02/2008 12:35:03 a.m.]


Programa Universidad Virtual

OBJETOS CONOCIDOS Un número entero.

CONDICIONES El número buscado es el máximo de los tres números dados.

ESPECIFICACIÓN

A, B, C Î Enteros, (A es el primero número, B es el segundo número y C es el


ENTRADAS
tercer número).

SALIDAS Mayor Î Enteros, (Mayor es el máximo de los tres números dados).

CONDICIONES

DISEÑO

Primera Iteración:

Inicio
PASO 1. Leer los tres números
PASO 2. Determinar cual es el máximo
PASO 3. escribir el máximo
Fin

Segunda Iteración:

Inicio
PASO 1. Leer los tres números
PASO 1.1. Leer el primer número
PASO 1.2. Leer el segundo número
PASO 1.3. Leer el tercer número
PASO 2. Determinar cual es el máximo Si el primer número es mayor o igual a
los otros dos números el primero es el máximo.Si no es así y si el segundo número
es mayor o igual a los otros dos números el segundo es el máximo.De otra manera,
se tiene que el tercer número es el máximo.
PASO 3. escribir los resultados
Fin

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (5 of 9) [12/02/2008 12:35:03 a.m.]


Programa Universidad Virtual

Iteración Final:

a : entero /* se define la variable para el primer número */


b : entero /* se define la variable para el segundo número */
c : entero /*se define la variable para el tercer número */
mayor : entero /*se define la variable para el máximo */

leer( a ) /* lee el primer número */


leer( b ) /* lee el segundo número */
leer( c ) /* lee el tercer número */

si a b | a c entonces
mayor := a /* el máximo es a pues es mayor que b y c */
sino
si b a | b c entonces
mayor := b /* el máximo es b pues es mayor que a y c */
sino
mayor := c /* sino es ni a ni b entonces es c */
fin_si

fin_si

escribir( “El máximo de los tres es: ”, mayor )

PRUEBA DE ESCRITORIO

Este algoritmo cuenta con diecisiete (17) líneas, las cuatro primeras (1-4), son
para definir las variables usadas y las últimas trece (5-17) son las instrucciones
que son aplicadas sobre dichos datos. De esta manera la prueba de escritorio se
debe realizar solamente sobre las líneas (5-17), teniendo en cuenta los valores
para las variables.

Primer prueba de escritorio

LINEA a b c mayor
ENTRADA SALIDA
5 50 50
6 140 140
7 30 30
8 La condición es evaluada a falso, por lo tanto se pasa a la línea 11, la siguiente
al sino de la selección en ejecución.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (6 of 9) [12/02/2008 12:35:03 a.m.]


Programa Universidad Virtual

11 La condición es evaluada a verdadero, por lo tanto se pasa a la línea 12, la


siguiente línea al entonces de la selección en ejecución.
12 140
13 Se salta hasta el fin_si de la selección en ejecución, es decir, hasta la línea 15
15 Se salta a la siguiente línea.
16 Se salta a la siguiente línea.
17 El máximo de los tres es: 140

Segunda prueba de escritorio

LINEA a b c mayor ENTRADA SALIDA


5 90 90
6 -50 -50
7 70 70
8 La condición es evaluada a verdadero, por lo tanto se pasa a la línea 9, la siguiente
al entonces de la selección en ejecución.
12 90
13 Se salta hasta el fin_si de la selección en ejecución, es decir, hasta la línea 16
16 Se salta a la siguiente línea.
17 El máximo de los tres es: 90

Tercer prueba de escritorio

LINEA a b c mayor
ENTRADA SALIDA
5 20 20
6 10 10
7 30 30
8 La condición es evaluada a falso, por lo tanto se pasa a la línea 11, la siguiente
al sino de la selección en ejecución.
11 La condición es evaluada a falso, por lo tanto se pasa a la línea 14, la siguiente
línea al sino de la selección en ejecución.
14 30
15 Se salta a la siguiente línea.
16 Se salta a la siguiente línea.
17 El máximo de los tres es: 30

Como se puede apreciar en los ejemplos anteriores, una selección puede contener
(en cualquiera de sus dos bloques de instrucciones), lecturas, escrituras,
http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (7 of 9) [12/02/2008 12:35:03 a.m.]
Programa Universidad Virtual

asignaciones u otras selecciones.

Generalmente, cuando en la especificación de un problema se tiene una


variable especificada de la siguiente forma:

<expresión 1> si <condición 1>

<expresión 2> si <condición 2>

<variable> = .....

<expresión n> si <condición n>

<expresión final> en otro caso

Esta especificación se puede representar mediante el siguiente algoritmo:

si<condición1> entonces
<variable> := <expresión 1>
sino
si <condición 2>entonces
<variable> := <expresión 2>

sino
...............
sino
si <condición n>entonces
<variable>:= <expresión n>
http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (8 of 9) [12/02/2008 12:35:03 a.m.]
Programa Universidad Virtual

sino
<variable> := <expresión final>

fin_si
..............
fin_si

fin_si

__

CONSTRUCTORES BÁSICOS (PARTE A) ESTRUCTURA DE SELECCIÓN MULTIPLE

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (9 of 9) [12/02/2008 12:35:03 a.m.]


Programa Universidad Virtual

CODIFICACIÓN DE
CONSTRUCTORES ALGORITMOS EN LENGUAJES

BÁSICOS (PARTE A) DE PROGRAMACIÓN

5.3 ESTRUCTURA DE SELECCIÓN MULTIPLE

Mientras que las Estructuras de Selección Anidadas sirven para el


mecanismo general de toma de decisiones, las Estructuras de Selección
Múltiple proporcionan una manera muy práctica para seleccionar entre un conjunto
de opciones predefinidas.

seleccionar<opción> hacer

caso <constante_1>:
<bloque instrucciones 1>
caso <constante_2>:
<bloque instrucciones 2>

...............

caso <constante_n>:
<bloque instrucciones n>
caso <por defecto>:
<bloque instrucciones>
fin_seleccionar

Las Estructuras de Selección Múltiple operan de la siguiente manera:

● Primero se evalúa la expresión de cambio.


● El valor resultante se compara contra cada etiqueta case constante de valor entero.
● En una estructura de Selección Múltiple, todas las etiquetas Caso deben ser
distintas, el control se transfiere a la que coincide, o a por defecto, si
ninguna coincide.
● No hay una coincidencia secuencial, caso por caso, al momento de la ejecución.
● El control se transfiere directamente.
● Si la etiqueta de caso opcional por defecto no es dada y si nada coincide,
la ejecución de la selección múltiple se completa con éxito.
● El siguiente control se transfiere a una etiqueta de caso, las instrucciones en
la etiqueta seleccionada y todas las instrucciones bajo otras etiquetas de
caso después de ésta, se ejecutarán en secuencia. A este comportamiento se le
llama caída total y hace que la estructura de Selección Múltiple sea muy diferente
de una estructura de Selección Anidada.
● En cada etiqueta de caso puede haber cero, una o más instrucciones. Esto
permite que varias etiquetas de caso precedan a un grupo de instrucciones, lo que
http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:35:25 a.m.]
Programa Universidad Virtual

lo hace conveniente para ciertas situaciones.


● También fin_caso puede utilizarse para salir de la estructura de Selección Múltiple.
A menudo es el último elemento de cada Caso para evitar caídas completas. Al
evitar éstas, pierde importancia el orden en que se dan las etiquetas de caso (pero
se sugiere ser ordenado).

Para evitar toda clase de confusiones se recomienda la Estructura de


Selección Múltiple de la siguiente forma:

seleccionar < opción> hacer

caso <constante_1>:
<bloque instrucciones 1>
fin_caso
caso <constante_2>:
<bloque instrucciones 2>
fin_caso
...............

caso <constante_n>:
<bloque instrucciones n>
fin_caso
caso <por defecto>:
<bloque instrucciones>
fin_caso

fin_seleccionar

Ejemplo de Selección múltiple.

Una persona selecciona una transacción en un cajero automático

ANALISIS DEL PROBLEMA

Objetos Desconocidos Que transacción desea realizar el usuario

Los números correspondientes a las transacciones disponibles en el


Objetos Conocidos
cajero.

Condiciones El cajero debe ejecutar la transacción seleccionada por el usuario.

ESPECIFICACIÓN

n E Enteros entre 1 y 5, (n es el número ingresado por el usuario


Entradas
para seleccionar la transacción).

Salidas Ejecución de una Transacción .

El numero n seleccionado por el usuario debe corresponder a la


Condiciones
transacción seleccionada por el usuario

DISEÑO

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:35:25 a.m.]


Programa Universidad Virtual

Primera División:

Inicio
PASO 1. Leer el número.
PASO 2. Determinar la transacción y Ejecutarla.
Fin

Segunda División:

Inicio
Paso 1. Leer el número.
Paso 2. Determinar la transacción
Paso 2.1. si es 1
Paso 2.1.1. Ejecutar la transacción 1
Paso 2.1.2. Salir
Paso 2.2. si es 2
Paso 2.2.1. Ejecutar la transacción 2
Paso 2.2.2. Salir
Paso 2.3. si es 3
Paso 2.3.1. Ejecutar la transacción 3
Paso 2.3.2. Salir
Paso 2.4. si es 4
Paso 2.4.1. Ejecutar la transacción 4
Paso 2.4.2. Salir
Paso 2.5. si es 5
Paso 2.5.1. Ejecutar la transacción 5
Paso 2.5.2. Salir
Paso 2.5. si no esta en el rango
Paso 2.5.1. Salir
Fin

División Final:

n: entero /* se define la variable para la selección del usuario*/


leer (n) /* lee el número de la transacción seleccionada*/

seleccionar n hacer

caso 1:
<consignación>
fin_caso
caso 2:
<retiro>
fin_caso
caso 3:
<pago de servicios>
fin_caso
caso 4:
<cambio de clave>
fin_caso
caso 5:
<consulta de saldo>
fin_caso
fin_seleccionar

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:35:25 a.m.]


Programa Universidad Virtual

● Introducir el número del día de la semana e imprimir el nombre del


día correspondiente

__

CODIFICACIÓN DE
CONSTRUCTORES ALGORITMOS EN LENGUAJES

BÁSICOS (PARTE A) DE PROGRAMACIÓN

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:35:25 a.m.]


Programa Universidad Virtual

ESTRUCTURA DE
AUTOEVALUACIÓN
SELECCIÓN MULTIPLE

5.4 CODIFICACIÓN DE ALGORITMOS EN LENGUAJES


DE PROGRAMACIÓN

Para traducir un algoritmo representado en UN pseudo-código, al lenguaje


de programación C++, se deben seguir las siguientes reglas:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:35:49 a.m.]


Programa Universidad Virtual

Ejemplos.

1. El siguiente algoritmo que imprime el mayor de dos números enteros.

SEUDOCODIGO C++
procedimiento principal()
variables
a:entero
b:entero /* para mostrar en pantalla */
inicio #include <iostream.h>
void main(){
escribir ("Digite
numero:") leer (a) int a; /* a es entera */
escribir ("Digite int b; /* b es entera */
numero") cout << "Digite
leer (b) numero:";
si (a<b) entonces cin >> a;
cout << "Digite
numero:";
escribir
cin >>b;
("El
if( a<b ){
mayor
cout << "El mayor es:";
es:")
cout << b;
escribir
}
( b)
else{
cout <<"El mayor es:";
sino cout << a;
escribir ( "El mayor }
es:")
escribir (a)
}
fin_si

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:35:49 a.m.]


Programa Universidad Virtual

fin_procedimiento

Traducción de tipos:

Pseudo Código C++


float x;
x : real
double x;
contador : entero int contador;

letra : caracter char letra;


bandera : booleano bool bandera;

__

ESTRUCTURA DE
AUTOEVALUACIÓN
SELECCIÓN MULTIPLE

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:35:49 a.m.]


Programa Universidad Virtual

Tabla de contenido

MÓDULO 3: CONSTRUCTORES BÁSICOS (PARTE B)


6. ESTRUCTURAS REPETITIVAS
6.1 Introducción
6.1.1 Ciclo mientras
6.1.2 Ciclo HAGA-MIENTRAS
6.1.3 Ciclo repita-HASTA
6.1.4 Ciclo para
6.1.5 Tipo de variables útiles en la repetición
6.1.6 Correspondencia entre ciclos
6.1.7 Codificación de algoritmos en lenguajes de programación
AUTOEVALUACIÓN

__

Tabla de contenido

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:36:17 a.m.]


Programa Universidad Virtual

CONSTRUCTORES
CICLO MIENTRAS
BÁSICOS (PARTE B)

6.1 REPETICIÓN

Las estructuras de repetición, permiten la ejecución repetida de una lista o


secuencia de instrucciones (también llamada bloque de instrucciones). El número
de veces que el bloque de instrucciones se ejecutará se puede especificar de
manera explícita o a través de una condición que indica cuando se ejecuta de nuevo
o cuando no. A cada ejecución del bloque de instrucciones se le conoce como
una iteración.

Existen cuatro tipos principales de sentencias de repetición:

Ciclo mientras

Ciclo HAGA-MIENTRAS

Ciclo repita-HASTA

Ciclo para

A continuación se describe cada una de ellas.

__

CONSTRUCTORES
CICLO MIENTRAS
BÁSICOS (PARTE B)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:36:33 a.m.]


Programa Universidad Virtual

REPETICION CICLO MIENTRAS

6.1.1. CICLO MIENTRAS

El CICLO MIENTRAS ejecuta un bloque de acciones ‘mientras’ que una


condición dada se cumpla, es decir, cuando la condición evalúa a verdadero.
La condición es evaluada antes de ejecutar el bloque de acciones y si la condición
no se cumple, el bloque no se ejecuta. De esta manera es que el número
de repeticiones del bloque de acciones sea cero, pues, si la condición la primera
vez evalúa a falso, el bloque no será ejecutado alguna vez. La forma general del
ciclo mientras es la siguiente:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 6) [12/02/2008 12:37:05 a.m.]


Programa Universidad Virtual

mientras (condición) hacer

<bloque de instrucciones>

fin_mientras

Donde, (condición) es la condición que determina si el bloque de


acciones<bloque>es ejecutado o no. Si la condición evalúa a verdadero el bloque
es ejecutado y si evalúa a falso no es ejecutado. Después de ejecutar el bloque
de acciones se vuelve a evaluar la condición.

● Escribir en pantalla los numeros del uno al tres

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 6) [12/02/2008 12:37:05 a.m.]


Programa Universidad Virtual

4.1.1.1 EJEMPLOS.

Ejemplo 1. Dado un número natural n se desea calcular la suma de los


números naturales desde 1 hasta n.

DIALOGO:

Objetos Conocidos un número natural.

Objetos Desconocidos Un número natural.

El número buscado es la suma de los naturales empezando en cero hasta el número


Condiciones
dado.

ESPECIFICACIÓN:

Entradas n Î Enteros, (n es el número dado).

Salidas suma Î Enteros, (suma es la suma de los primeros n números naturales).

Condiciones

DISEÑO:

Primera Iteración:

1. Leer el número

2. Recorrer los números desde el cero hasta el número dado e irlos sumando.

3. escribir la suma
http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 6) [12/02/2008 12:37:05 a.m.]
Programa Universidad Virtual

Iteración Final:

n: entero /* se define la variable para el número */


suma: entero /* se define la variable para la suma */
i: entero /* se define la variable para recorrer los números entre 0 y n */

escribir( “Ingrese el número: ” )


leer(n ) /* lee el primer número */
suma :=0 /* inicia la suma en cero */

i :=0 /* empieza la variable que recorre los números en 0 */

mientras (i <=n) hacer


suma:= suma + i /* en cada iteración suma el número i */
i := i + 1 /* incrementa la variable en 1 para tomar el siguiente número en la
próxima iteración */

fin_mientras

escribir( “La suma es: ”, suma )

PRUEBA DE ESCRITORIO:

LINEA n i suma ENTRADA SALIDA


4 Ingrese el número:
5 5 5
6 0
7 0
8 La condición es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del ciclo,
es decir, pasa a la línea 9.
9 0
10 1
11 Se salta hasta la línea que contiene la condición del ciclo mientras en ejecución, es decir,
hasta la línea 8
8 La condición es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del ciclo,
es decir, pasa a la línea 9.
9 1
10 2

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 6) [12/02/2008 12:37:05 a.m.]


Programa Universidad Virtual

11 Se salta hasta la línea que contiene la condición del ciclo mientras en ejecución, es decir,
hasta la línea 8
8 La condición es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del ciclo,
es decir, pasa a la línea 9.
9 3
10 3
11 Se salta hasta la línea que contiene la condición del ciclo mientras en ejecución, es decir,
hasta la línea 8
8 La condición es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del ciclo,
es decir, pasa a la línea 9.
9 6
10 4
11 Se salta hasta la línea que contiene la condición del ciclo mientras en ejecución, es decir,
hasta la línea 8
8 La condición es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del ciclo,
es decir, pasa a la línea 9.
9 10
10 5
11 Se salta hasta la línea que contiene la condición del ciclo mientras en ejecución, es decir,
hasta la línea 8
8 La condición es evaluada a verdadero, por lo tanto se ejecuta el bloque de acciones del ciclo,
es decir, pasa a la línea 9.
9 15
10 6
11 Se salta hasta la línea que contiene la condición del ciclo mientras en ejecución, es decir,
hasta la línea 8
8 La condición evalúa a falso, por lo tanto no se ejecuta el bloque de acciones del ciclo y
este termina, es decir, pasa a la línea 12, la línea siguiente a la línea del fin_mientras del ciclo.
12 La suma es: 15

● Applet ejemplo 1

__

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (5 of 6) [12/02/2008 12:37:05 a.m.]


Programa Universidad Virtual

REPETICION CICLO MIENTRAS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (6 of 6) [12/02/2008 12:37:05 a.m.]


Programa Universidad Virtual

CICLO MIENTRAS CICLO REPITA-HASTA

6.1.2 CICLO HAGA-MIENTRAS

El CICLO HAGA-MIENTRAS es similar al ciclo mientras, la diferencia radica en


el momento de evaluación de la condición. En el ciclo mientras-haga la condición
se evalúa antes de la ejecución del bloque, en el ciclo HAGA-MIENTRAS la
condición se evalúa después de ejecutar el bloque de acciones, por lo tanto, el
bloque se ejecuta por lo menos una vez. El bloque se ejecuta nuevamente si
la condición evalúa a verdadero y no se ejecuta más si evalúa a falso. La
forma general del ciclo HAGA-MIENTRAS es la siguiente:

haga

<bloque de instrucciones>

mientras (condición)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 7) [12/02/2008 12:38:34 a.m.]


Programa Universidad Virtual

Donde, <bloque> es el bloque de acciones ejecutado y (condición) es la condición


que determina si el bloque es ejecutado de nuevo no. Si la condición evalúa
a verdadero el bloque es ejecutado de nuevo y si evalúa a falso no es ejecutado. Después
de ejecutar el bloque de acciones se evalúa la condición.

● Escribir en pantalla la suma parcial de los numeros del uno al tres

EJEMPLOS

Ejemplo 1. Realizar un programa que le presente un menú al usuario con


las siguientes opciones:

1. Leer dos números,

2. Sumar los dos números leídos,

3. Restarle al primer número el segundo,

4. Multiplicar los dos números,

5. Dividir el primer número dado por el segundo,

6. escribir el número resultado de la última operación realizada y 0. Para


terminar. Después de que el usuario determine la operación a realizar el
programa debe realizarla. Se debe garantizar que el usuario haya ingresado los
dos números antes de poder realizar cualquier operación y que no se puede
escribir un resultado sin la realización de una operación.

DIALOGO:

Objetos Conocidos La opción que el usuario hace y dos números reales.

Objetos Desconocidos Un número real o un texto.

El número buscado es el resultado de la última operación


realizada sobre los números dados. En el caso que no se
Condiciones
ingresarán datos o no se hubiere realizado una operación se
debe presentar un mensaje de error.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 7) [12/02/2008 12:38:34 a.m.]


Programa Universidad Virtual

ESPECIFICACIÓN:

a, b Reales (a, b son los números dados), opcion Enteros


Entradas
(opcion es la operación deseada por el usuario).

resp Reales, (resp es el resultado de la última operación


realizada sobre los números dados, si está existiera) y

Salidas texto Cadenas (texto es una cadena que indica que una
operación no ha sido realizada por que falta leer los datos o no se
ha realizado operación alguna o el valor de la operación).

desconocido si no se han leido a y b

a + b si a y b se han leido y opcion es 2.

resp = a - b si a y b se han leido y opcion es 3.

a * b si a y b se han leido y opcion es 4.

a / b si a y b se han leido y opcion es 5.


Condiciones

“Datos no leidos” si no se han leido a y b y opción es 2, 3, 4, 5 y


6

texto = “No se realizo operación si” opción es 6 y resp es


desconocido.

“El resultado es:”, resp. En otro caso.

DISEÑO:

Primera Iteración:

haga

1. Presentar menu

2. Leer opción

3. Realizar la operación de acuerdo a la opciónMientras opcion sea diferente


de terminar.

Segunda Iteración:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 7) [12/02/2008 12:38:34 a.m.]


Programa Universidad Virtual

haga

1. Presentar menu

2. Leer opción

3. Según sea opcion haga

3.1. caso 1: leer los números

3.2. caso 2: Sumar los números si ya han sido leidos

3.3. caso 3: Restar los números si ya han sido leidos

3.4. caso 4: Multiplicar los números si ya han sido leidos

3.5. caso 5: Dividir los números si ya han sido leidos

3.6. caso 6: escribir el resultado de la última operación, si ya se ha realizado


una operación.Mientras opcion sea diferente de terminar.

Iteración final:

a: real
b: real
c: real
datos_leidos: booleano
operacion_realizada: booleano
opcion : entero
datos_leidos := falso
operacion_realizada := falso

haga

escribir("Menu de operaciones")
escribir(cambioLinea)
escribir("0. Terminar")
escribir(cambioLinea)
escribir("1. Leer datos")
escribir(cambioLinea)
escribir("2. Sumar datos")
escribir(cambioLinea)
escribir("3. Restar datos")
escribir(cambioLinea)
escribir("4. Multiplicar datos")
escribir(cambioLinea)
escribir("5. Dividir datos")
escribir(cambioLinea)
escribir("6. Mostrar Resultado")
escribir(cambioLinea)

leer( opcion )

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 7) [12/02/2008 12:38:34 a.m.]


Programa Universidad Virtual

seleccionar (opcion) de

caso 1:
escribir("Ingrese el primer número")
leer( a )
escribir("Ingrese el segundo número" )
leer( b )

datos_leidos := verdadero
operacion_realizada := falso

caso 2:

si ( datos_leidos ) entonces
c := a + b
operacion_realizada := verdadero
sino
escribir( "Error. no se han leido los datos ****" )
fin_si

caso 3:

si ( datos_leidos ) entonces
c := a - b
operacion_realizada := verdadero
sino
escribir( "Error. no se han leido los datos ****" )
fin_si

caso 4:

si ( datos_leidos ) entonces
c := a * b
operacion_realizada := verdadero
sino
escribir( "Error. no se han leido los datos ****")
fin_si

caso 5:

si ( datos_leidos ) entonces
c := a / b
operacion_realizada := verdadero
sino
escribir( "Error. no se han leido los datos ****" )
fin_si

caso 6:

si ( operacion_realizada ) entonces
escribir(“El resultado de la última operación es:”)
escribir( c )

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (5 of 7) [12/02/2008 12:38:34 a.m.]


Programa Universidad Virtual

sino
escribir( “Error. no se han leido los datos ****” )
fin_si
otrocaso:

fin_seleccionar

mientras (opcion <> 0 )

Applet ejemplo 1 Haga mientras

Ejemplo 2. El problema de calcular la suma de los números naturales desde 1


hasta n, se puede solucionar usando el ciclo HAGA-MIENTRAS, a continuación
se describe el algoritmo solución:

n: entero
suma: entero
i: entero

escribir( "Digite el número: " )


leer( n )
suma := 0
i := 1

haga

suma := suma + i
i := i + 1

mientras (i <= n)

escribir( "La suma es: " )


escribir( suma )

Applet ejemplo 2 Haga mientras

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (6 of 7) [12/02/2008 12:38:34 a.m.]


Programa Universidad Virtual

__

CICLO MIENTRAS CICLO REPITA-HASTA

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (7 of 7) [12/02/2008 12:38:34 a.m.]


Programa Universidad Virtual

CICLO HAGA-MIENTRAS CICLO PARA

6.1.3 CICLO REPITA-HASTA

El CICLO REPITA-HASTA es similar al ciclo HAGA-MIENTRAS, la diferencia esta


en que el bloque de acciones se ejecuta nuevamente si la condición evalúa a falso
y no se ejecuta más si evalúa a verdadero. Sobra advertir que el bloque de
acciones se ejecuta por lo menos una vez. La forma general del ciclo repita-HASTA
es la siguiente:

repita

<bloque
de instrucciones>

hasta
(condición)

Donde, <bloque> es el bloque de acciones ejecutado y (condición) es la condición


que determina si el bloque es ejecutado de nuevo no. Si la condición evalúa a falso

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:38:53 a.m.]


Programa Universidad Virtual

el bloque es ejecutado de nuevo y si evalúa a verdadero no es ejecutado. Después


de ejecutar el bloque de acciones se evalúa la condición.

Escribir en pantalla la suma parcial de los numeros del uno al tres

EJEMPLOS.

Ejemplo 1. Desarrollar un programa que lea una serie de datos hasta que se
ingrese el dato 0 y calcule su suma.

DIALOGO:

Objetos Conocidos Una serie de números.

Objetos Desconocidos Un número.

El número buscado es la suma de los números conocidos, el


Condiciones
último número leído debe ser cero (0.0).

ESPECIFICACIÓN:

Entradas a1, a2, ..., an Reales (aies el i-esimo número leído).

Salidas resp Reales, (resp es la suma de los números leídos).

resp = a1 + a2 + ...,. + an la suma de los números leídos

Condiciones
an = 0.0 El último número leído es cero.

DISEÑO:

Primera Iteración:

Iniciar resultado en cero

repita

1. Leer número

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:38:53 a.m.]


Programa Universidad Virtual

2. Acumular número

Hasta que número sea igual a cero.

escribir resultado

Iteración Final:

n: entero
suma: entero

suma := 0

repita
escribir(“Ingrese el número:”)
leer( n )
suma := suma + n

hasta (n = 0 )

escribir(“La suma es:”, suma)

El problema de calcular la suma de los números naturales desde 1 hasta n,


se puede solucionar usando el ciclo repita-HASTA , a continuación se describe
el algoritmo solución:

n: entero
suma: entero
i: entero

leer( n )
suma := 0
i := 1

repita
suma := suma + i
i := i + 1

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:38:53 a.m.]


Programa Universidad Virtual

hasta (i > n )

escribir( “La suma es:”, suma )

__

CICLO HAGA-MIENTRAS CICLO PARA

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:38:53 a.m.]


Programa Universidad Virtual

TIPOS DE VARIABLES UTILES EN


CICLO REPITA-HASTA
REPETICIÓN

6.1.4. CICLO PARA

El CICLO PARA permite la ejecución repetida de un conjunto de acciones.


El número de veces que el bloque es ejecutado esta determinado por los valores
que puede tomar una variable contadora (de tipo entero), en un rango definido por
un límite inferior (inclusive) y un límite superior (inclusive). Después de ejecutar
el bloque de acciones en cada iteración, la variable contadora es incrementada en
uno (1) automáticamente y en el momento en que la variable sobrepasa el
límite superior el ciclo termina.

El valor final de la variable contadora depende mucho del lenguaje de


programación utilizado, por lo tanto, no es recomendable diseñar algoritmos
que utilicen el valor de la variable contadora de un ciclo para, después de ejecutar
el mismo. De la definición de ciclo para se puede inferir que el bloque de acciones
no se ejecuta alguna vez si el límite inferior es mayor al límite superior y que si
el límite superior es mayor o igual al límite superior, el número de veces que
el conjunto de acciones se ejecutará es igual a uno más el límite superior menos
el límite inferior. La forma general del ciclo para es la siguiente:

para (variable) := <lim inf> hasta (lim sup) hacer

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 6) [12/02/2008 12:39:29 a.m.]


Programa Universidad Virtual

<bloque de instrucciones>

fin_para

Donde <variable> es la variable contadora del ciclo, la cual debe ser de tipo
entero, <lim inf >es el valor inicial que toma la variable contadora, <lim sup> es
el valor final que puede tomar la variable contadora y <bloque>es el bloque
de acciones que es ejecutado en cada iteración, mientras la variable contadora
no sobrepase el límite superior. En cada iteración, después de ejecutar el bloque,
la variable contadora es incrementada en uno (1).

EJEMPLOS.

Ejemplo 1. Calcular las primeras tres filas de la tabla de multiplicar de un


número dado.

DIALOGO:

Objetos Conocidos Un número.

Objetos Desconocidos Tres números.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 6) [12/02/2008 12:39:29 a.m.]


Programa Universidad Virtual

Los números buscados son el resultado de multiplicar un número conocido,


Condiciones
por los números entre uno y tres.

ESPECIFICACIÓN:

Entradas n Enteros ( n es el número dado).

Salidas a1, a2, a3 Enteros, (ai es el i-esimo múltiplo del número dado).

Condiciones ai = n * i para 1 i 3

DISEÑO:

Primera Iteración:

Leer el número a calcularle la tabla de multiplicar

Para los números entre uno y tres calcular el múltiplo del número

Iteración Final:

n: entero
a: entero
i: entero

escribir(“Ingrese el número a calcularle la tabla de multiplicar:”)


leer( n )

para (i :=1 hasta 10) hacer

a := n * i
escribir(n)
escribir(“*”)
escribir( i)
escribir( “=”)
escribir( a)
escribir(cambioLinea)

fin_para
escribir(“Termino...”)

PRUEBA DE ESCRITORIO:

LINEA n I A ENTRADA SALIDA


Ingrese el
número a
4 calcularle la
tabla de
multiplicar:
5 3 3
6 1

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 6) [12/02/2008 12:39:29 a.m.]


Programa Universidad Virtual

Como es la
primera vez
que llega a
esta línea, se
asigna en la
variable
contadora el
límite inferior.
Ahora se
comprueba si
la variable
contadora es
menor o igual
al límite
superior. En
este caso es
cierto
entonces se
ejecuta el
bloque de
acciones del
ciclo para, es
decir, se pasa
a la línea
7 3
8 3*1=3
9 2
Se incrementa
la variable
contadora y se
vuelve a la
línea de inicio
del ciclo para,
es decir, línea
6.
Se comprueba
si la variable
contadora es
menor o igual
al límite
superior. En
este caso es
6 cierto
entonces se
ejecuta el
bloque de
acciones del
ciclo para, es
decir, se pasa
a la línea 7.
7 6
8 3*2=6
9 3
Se incrementa
la variable
contadora y se
vuelve a la
línea de inicio
del ciclo para,
es decir, línea
6.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 6) [12/02/2008 12:39:29 a.m.]


Programa Universidad Virtual

La variable
contadora es
menor que el
6
límite superior
se pasa a la
línea 7
7 9
8 3*3=9
9 4
Se incrementa
la variable
contadora y se
vuelve a la
línea de inicio
del ciclo para,
es decir, línea
6.
La variable
contadora no
es menor que
el límite
superior se
6
pasa a la línea
siguiente al
fin_para, es
decir, a la
línea 10.
10 Termino...

Ejemplo 2. El problema de calcular la suma de los números naturales desde 1 hasta n,


se puede solucionar usando el ciclo para, a continuación se muestra el algoritmo solución:

n: entero
suma: entero
i: entero

leer( n )
suma := 0

para (i := 1 hasta n) hacer

suma := suma + i

fin_para

escribir( “La suma es:”)


escribir( suma)

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (5 of 6) [12/02/2008 12:39:29 a.m.]


Programa Universidad Virtual

__

TIPOS DE VARIABLES UTILES EN


CICLO REPITA-HASTA
REPETICIÓN

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (6 of 6) [12/02/2008 12:39:29 a.m.]


Programa Universidad Virtual

CORRESPONDENCIA ENTRE
CICLO PARA
CICLOS

6.1.5 TIPOS DE VARIABLES UTILES EN REPETICIÓN

Cuando se diseñan algoritmos que incluyen estructuras de control repetitivas,


existen ciertas variables que cumplen una función específica en cada iteración
del ciclo; las más comunes son: las variables contadoras, las variables
acumuladoras y las variables bandera.

6.1.5.1 Variables contadoras

Como su nombre lo indica estas variables se usan fundamentalmente para contar,


por lo tanto deben ser de tipo entero. Un ejemplo de este tipo de variables es
la variable de control en un ciclo para. Una variable contadora se incrementa
(o decrementa) en un valor constante en cada iteración del ciclo. Es así como en
los algoritmos presentados anteriormente para resolver el styleproblema de calcular
la suma de los números naturales desde 1 hastan, la variable i es una variable contadora.

Ejemplo. Desarrollar un algoritmo que imprima los números impares en


orden descendente que hay entre 1 y 100.

Algoritmo Solución

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 6) [12/02/2008 12:40:54 a.m.]


Programa Universidad Virtual

i: entero

i := 99

mientras (i >=1) hacer

escribir( i)
escribir( ‘,’ )
i := i – 2

fin_mientras

En este caso i es una variable contadora, ya que en cada iteración del ciclo la
variable es decrementada en una cantidad fija (2).

4.1.1.2 Variables acumuladoras

La función de una variable acumuladora es almacenar valores numéricos


que generalmente se suman (o multiplican) en cada iteración, por lo tanto la
variable debe ser de tipo entero o real. Por ejemplo, en los diferentes
algoritmos presentados para solucionar el styleproblema de calcular la suma de
los números naturales desde 1 hasta n, la variable suma es una variable contadora.

Ejemplo. Calcular las suma de los cuadrados de los números entre 1 y 100.

Algoritmo Solución
http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 6) [12/02/2008 12:40:54 a.m.]
Programa Universidad Virtual

i: entero
suma: entero

i := 1
suma := 0

mientras (i <=100) hacer


suma := suma + i * i
i := i + 1
fin_mientras

escribir( “La suma de los cuadrados hasta 100 es:”)


escribir( suma )

En este caso suma es una variable acumuladora mientras que la variable i es contadora.

4.1.1.3 Variables bandera

Una variable bandera es utilizada dentro de la condición del ciclo, ya sea sin
negar, negada o conectada con una expresión booleana, para determinar cuando
un ciclo se sigue iterando o cuando no. De esta manera una variable bandera
debe ser de tipo booleano.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 6) [12/02/2008 12:40:54 a.m.]


Programa Universidad Virtual

Ejemplo. Realizar un programa que lea una serie de números reales y los sume.
El programa debe preguntar al usuario cuando desea ingresar un siguiente dato y si
el usuario responde que no desea ingresar más datos el programa debe confirmar
la respuesta. Si el usuario desea continuar ingresando datos se debe
seguir solicitando datos y si el usuario confirma su deseo de salir, el programa
debe mostrar la suma de los datos leídos y terminar.

Especificación:

donde,

datos es la colección de n números reales que el usuario ingresa hasta que decide
no continuar ingresando datos y sumaÎ R es la suma de dichos números.

Algoritmo Solución

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 6) [12/02/2008 12:40:54 a.m.]


Programa Universidad Virtual

bandera: booleano
suma: real
dato: real
c: caracter

bandera := verdadero
suma := 0.0

mientras (bandera) hacer

escribir( “Ingrese un dato:” )


leer (dato)
suma := suma + dato
escribir( “Desea continuar ingresando datos (S/N):” )
leer( c )
si (c = ‘N’ | c = ‘n’) entonces

escribir( “Realmente desea salir (S/N):” )


leer( c )
si (c = ‘S’ | c = ‘s’) entonces

bandera := falso

fin_si

fin_si

fin_mientras

escribir( “La suma es:”)


escribir( suma )

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (5 of 6) [12/02/2008 12:40:54 a.m.]


Programa Universidad Virtual

Vale la pena recordar que una variable del tipo booleano toma valores de verdad y
por lo tanto, por sí sola es una expresión lógica. Adicionalmente, la expresión
lógica bandera = verdadero es equivalente a la expresión lógica bandera.
__

CORRESPONDENCIA ENTRE
CICLO PARA
CICLOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (6 of 6) [12/02/2008 12:40:54 a.m.]


Programa Universidad Virtual

CODIFICACIÓN DE
TIPOS DE VARIABLES ALGORITMOS EN LENGUAJES

UTILES EN REPETICION DE PROGRAMACIÓN

6.1.6 CORRESPONDENCIA ENTRE CICLOS

En la teoría matemática de programación sólo es necesario un tipo de ciclo. En


esta sección se explican las correspondencias que hacen posible esta
afirmación, tomando como ciclo referencia el ciclo mientras-haga .

6.1.6.1 Correspondencia entre el ciclo MIENTRAS-HAGA (MH) y


el ciclo HAGA-MIENTRAS (HM)

La diferencia fundamental entre los ciclos MH y HM es que en el segundo se


ejecuta por lo menos una vez el bloque de acciones, mientras que en el primero hay
la posibilidad de que no se ejecute alguna vez. El ejecutar el bloque de acciones
una vez antes del ciclo MH permite modelar un ciclo HM, es decir:

haga mientras (condición) hacer

<bloque> <bloque>

mientras (condición) fin_mientras

6.1.6.2 Correspondencia entre el ciclo MIENTRAS-HAGA (MH) y


el ciclo REPITA-HASTA (RH)

Para determinar la correspondencia entre el ciclo MH y el ciclo RH, primero


se establecerá la correspondencia entre los ciclos HM y RH. La diferencia
fundamental entre los ciclos HM y RH es que en el primero se repite la ejecución
del bloque si la condición evalúa a verdadero mientras que en el segundo se repite
si evalúa a falso. De esta manera se tiene la siguiente correspondencia:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:41:11 a.m.]


Programa Universidad Virtual

haga repita

<bloque> <bloque>

mientras hasta
(condición) (condición)

Por lo tanto se obtiene la correspondencia:

repita mientras (condición) hacer

<bloque> <bloque>

hasta (condición) fin_mientras

6.1.6.3 Correspondencia entre el CICLO PARA (P) y el


ciclo MIENTRAS-HAGA (MH)

Formalmente, un ciclo para es una forma abreviada de un ciclo mientras-


haga , precedido por una asignación y que en cada iteración incrementa una
variable. Por lo tanto, el siguiente ciclo para:

para (variable := <lim inf> hasta <lim sup>)


hacer

<bloque>

fin _para

Es la abreviación del siguiente bloque de acciones:

<variable> := <lim inf>

mientras (<variable> < <lim sup>) hacer

<bloque>

<variable> := <variable> + 1

fin _mientras

__

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:41:11 a.m.]


Programa Universidad Virtual

CODIFICACIÓN DE
TIPOS DE VARIABLES ALGORITMOS EN LENGUAJES

UTILES EN REPETICION DE PROGRAMACIÓN

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:41:11 a.m.]


Programa Universidad Virtual

CONSTRUCTORES BÁSICOS
CORRESPONDENCIA
(PARTE B)
ENTRE CICLOS

6.1.7 CODIFICACIÓN DE ALGORITMOS EN LENGUAJES


DE PROGRAMACIÓN

Traducción de Estructuras Repetitivas A C++:

Pseudo Código C++


Mientras (condición) hacer while (condición) {

mientras bloque_instrucciones bloque_instrucciones

fin_mientras };
Haga do {

hacer-
bloque_instrucciones bloque_instrucciones
mientras

mientras (condicion) }while (condición);


para variable (lim_inf
hasta lim_sup) hacer for (var:=lim_inf;var <=
lim_sup; var ++){
bloque_instrucciones
para
bloque_instrucciones
lim_inf : valor inicial para
la variable lim_sup:valor }
final para la variable

El siguiente algoritmo muestra el uso de las estructuras repetitivas:

Pseudo Código C++


opcion : caracter

i: entero #include <iostream.h>

hacer void main


{

escribir ("Numeros del


0 al 10") char opcion;

para i:=0 hasta 10 int i:=0;


hacer do{

escribir

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:41:42 a.m.]


Programa Universidad Virtual

(i, " ")


cout<<"Numeros
del 0 al 10:";
fin_para
for (i=0; i<=10; i+
escribir ("Numeros
+){
del 0 al 10")

cout<<
i:=0
i <<" ";
i=i+1;
mientras (i<=0) hacer
escribir ("Desea
};
continuar ? S/N")
i:=0
mientras (i<=0) cout<<"Numeros del 0 al 10:";
hacer i=0;
while ( i<=10){
escribir
(i," ") cout<< i <<" ";
i:=i+1 i=i+1;

fin_mientras };
escribir ("Desea cout<< "Desea continuar ? S/N";
continuar ? S/N") cin >> opcion;
leer(opción)
}while(opcion == ´s´ || opcion ==´S´);
mientras (opcion =´s´ | opcion =´S
´)

__

CONSTRUCTORES BÁSICOS
CORRESPONDENCIA
(PARTE B)
ENTRE CICLOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:41:42 a.m.]


Programa Universidad Virtual

Tabla de contenido

MÓDULO 4: ARREGLOS Y MATRICES


7. ARREGLOS Y MATRICES
7.1 Arreglos
7.2 Cadenas de caracteres
7.3 Matrices
7.4 Codificación de algoritmos en lenguajes de programación
AUTOEVALUACION
Solución de la autoevaluación

__

Tabla de contenido

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:42:04 a.m.]


Programa Universidad Virtual

FORMA DE ACCESAR UN
ELEMENTO DE UN
ARREGLOS Y MATRICES
ARREGLO

ARREGLOS

De manera informal, un arreglo es una lista finita e indexada de elementos de


un mismo tipo. Una lista se dice indexada si para cada elemento de la lista existe
un único número natural que permite haga referencia a él. A tal número natural se
le llama el índice o subíndice del elemento que referencia.

De manera formal un arreglo de tamaño n de elementos de tipo A, es un elemento


del espacio n-dimensional del conjunto A, es decir, x es un arreglo de tamaño n del
tipo A si y solo si x An

Ejemplos.

● [3, -6, 1, 24, 8] es un arreglo de tamaño cinco y tipo entero.


● [4.2, 0.0, -33.76, 19.7e-2] es un arreglo de tamaño cuatro y de tipo real.
● [‘a’, ‘z’, ‘@’] es un arreglo de tamaño tres de tipo carácter.
● [5] es un arreglo de tamaño uno de tipo entero.
● [2.7, 0.6] es un arreglo de tamaño dos de reales.

Para referirse a cada elemento de un arreglo se utiliza su índice. El índice es


asignado generalmente por la posición que ocupa el elemento en el arreglo[1].
En este curso se asignarán los índices a los elementos de un arreglo partiendo
de cero y llegando hasta el índice n-1, donde n es el tamaño del arreglo.

Ejemplos.

● El elemento uno (1) del arreglo [3, -6, 1, 24, 8] es –6.


● El elemento cero (0) del arreglo [4.2, 0.0, -33.76, 19.7e-2] es 4.2.
● El elemento dos (2) del arreglo [‘a’, ‘z’, ‘@’] es ‘@’.
● El elemento cero (0) del arreglo [5] es 5.
● El elemento uno (1) del arreglo [2.7, 0.6] es 0.6.

El índice puede ser obtenido mediante cualquier expresión numérica que de


cómo resultado un número entero. Cuando se usa una expresión para obtener
un índice se debe garantizar que el resultado de la expresión este entre los
límites permitidos de los índices para el arreglo.

Ejemplos. Si se tiene el arreglo [4.2, 0.0, -33.76, 19.7e-2], la variable


i tiene el valor de uno (1) y la variable j tiene el valor de cuatro (4), entonces

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:44:04 a.m.]


Programa Universidad Virtual

● El elemento (i+j/2) del arreglo es 19.7e-2. Al evaluar la expresión da


como resultado 3.
● El elemento (j-3*i) del arreglo es 0.0. Al evaluar la expresión da como
resultado 1.
● El elemento (j*i) del arreglo no existe pues al evaluar la expresión da
como resultado 4 el cual no es un índice permitido (recuerde que los índices en
este seudo-código van de cero hasta uno menos que el tamaño del arreglo en
este ejemplo, los índices van de 0 hasta 3).
● El elemento (2*i-j) del arreglo no existe. Al evaluar la expresión da
como resultado –2.
● El elemento (j-2*i+1) del arreglo es 19.7e-2.

Como los espacios n-dimensionales en si mismos son conjuntos, es


natural preguntarse si se pueden definir variables del tipo arreglo. La respuesta a
esta pregunta es si. Para esto es importante determinar de manera precisa el
tamaño del arreglo, el cual no se puede modificar después de ser definido, es decir,
no se puede cambiar el tamaño de un arreglo con alguna instrucción[2].

La siguiente es la forma como se declaran variables del tipo arreglo en el seudo-


código usado en este curso:

<nombre> : arreglo[n] de <tipo>

Donde, <nombre> es el nombre de la variable, <tipo> es el tipo de datos del arreglo y n


es el tamaño del arreglo (debe ser un literal entero o una constante entera).

● Inicializa las posiciones de un arreglo en ceros

Ejemplos.

● Punto_2D : arreglo[2] de real


● Velocidades : arreglo[100] de real
● Texto : arreglo[MAX_TEXTO] de caracter
● Edades : arreglo[MAX_PERSONAS] de entero
● Banderas : arreglo[10] de booleano.

__

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:44:04 a.m.]


Programa Universidad Virtual

FORMA DE ACCESAR UN
ELEMENTO DE UN
ARREGLOS Y MATRICES
ARREGLO

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:44:04 a.m.]


Programa Universidad Virtual

ARREGLOS EJEMPLOS PRÁCTICOS

FORMA DE ACCESAR UN ELEMENTO DE UN ARREGLO

Para accesar un elemento de un arreglo se utiliza un índice.

Para obtener o modificar uno de los datos almacenados en una variable del tipo
arreglo se utiliza la siguiente notación de subíndice:

<nombre>[<indice>]

donde, <nombre> es el nombre de la variable de tipo arreglo e <indice> es el índice


que referencia al elemento que se quiere acceder.

Ejemplos. Si x es un arreglo de tamaño cuatro (4) de reales, que tiene los


siguientes elementos almacenados [4.2, 0.0, -33.76, 19.7e-2], si la variable i
tiene el valor de uno (1) y la variable j tiene el valor de cuatro (4), entonces

● x[i+j/2] retornaría el elemento tres del arreglo, es decir el valor 19.7e-2.


● x[j-3*i] retornaría el elemento uno del arreglo, es decir el valor 0.0.
● La asignación x[j-2*i+1]:= 2.2222 modificaría el arreglo x y lo dejaría
como [4.2, 0.0, -33.76, 2.2222].
● Si no se hace la asignación del ejemplo 3, la asignación x[0] := 10.0 dejaría
el arreglo x como [10.0, 0.0, -33.76, 19.7e-2]. Si se hace la asignación
del ejemplo anterior, el arreglo x quedaría como [10.0, 0.0, -33.76, 2.2222].
● x[2] retornaría el valor –33.76.

Cuando un arreglo es de enteros, un valor almacenado en el mismo se puede


utilizar como índice de un arreglo o como parte de una expresión numérica.

Ejemplos. Si x es un arreglo de tamaño cuatro (4) de enteros, que tiene los


siguientes elementos almacenados [4, 0, -33, 19], si la variable i tiene el
valor de uno (1), la variable j tiene el valor de cuatro (4) y k es una variable del
tipo entero, entonces

1. La asignación k := x[i+j/2]+3 dejaría en la variable k el valor 22.

2. x[x[i]+2*i] retornaría el elemento dos del arreglo, es decir el valor -33.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:44:43 a.m.]


Programa Universidad Virtual

3. La asignación x[x[0]-3*i] := 2 modificaría el arreglo x en la posición uno y


lo dejaría como [4, 2, -33, 19].

● Ingresa valores en un arreglo y luego los imprime.

__

ARREGLOS EJEMPLOS PRÁCTICOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:44:43 a.m.]


Programa Universidad Virtual

FORMA DE ACCESAR UN

ELEMENTO DE UN ARREGLO

EJEMPLOS PRÁCTICOS

Los arreglos son útiles cuando se requiere mantener y realizar operaciones sobre
una colección determinada de datos de un mismo tipo, por ejemplo:

♦ Cuando se realizan estudios estadísticos, para calcular la moda, varianza,


media, mediana, etc., de una colección de n datos, donde n es un valor conocido.

♦ En problemas de física vectorial, donde los vectores del espacio n-


dimensional son representados como arreglos de tamaño n de tipo real.

♦ En aproximaciones de funciones por medio de polinomios de grado n, para


realizar extrapolaciones e interpolaciones. En general, para realizar álgebra
de polinomios.

♦ Para representar circuitos eléctricos, estructuras químicas, máquinas, etc.

♦ Para manipulación de mensajes que se presentan al usuario.

♦ Encriptamiento y seguridad de datos.

Ejemplo. Se requiere un programa que calcule el promedio de una colección de


20 reales que el usuario ingresará.

Aquí esta el pseudo código para este programa, se deja la especificación del mismo
al lector.

Inicio
/* Las siguientes seis lineas de codigo leen el arreglo de reales */
para (i := 0 hasta 19) hacer
escribir (“ingrese el dato:”)
escribir (i)
escribir (cambioLinea)
leer (A[i])
fin_para
/* Las siguientes cuatro lineas de codigo calculan la suma de los
reales */
suma := 0
para (i:=0 hasta 19) hacer
suma := suma + A[i]

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:45:04 a.m.]


Programa Universidad Virtual

fin_para
/* la siguiente linea calcula el promedio */
promedio := suma / 20.0
/* las siguientes dos lineas imprimen el resultado */
escribir (“El promedio es:”)
escribir (promedio)
Fin

1.2.1 Ordenamientos
1.2.2 Búsquedas

__

FORMA DE ACCESAR UN

ELEMENTO DE UN ARREGLO

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:45:04 a.m.]


Programa Universidad Virtual

EJEMPLOS PRACTICOS BUSQUEDAS

ORDENAMIENTOS

En algunos casos el tipo de un arreglo tiene un orden total asociado a él. Por
ejemplo, los números enteros están ordenados totalmente y los caracteres
están ordenados totalmente por el ASCII asociado a cada uno. Un
ordenamiento sobre un arreglo es una operación que dado un arreglo retorna
el mismo arreglo con los elementos ordenados en forma ascendente o descendente.

Ejemplos de ordenamientos de arreglos:

Ejemplo (Tipo) Arreglo ascendentemente descendentemente


[1, 4, 2, -3,
1 (Entero) [-3, 0, 1, 2, 4, 8] [8, 4, 2, 1, 0, -3]
0, 8]
[‘3’, ‘A’, ‘a’, ‘
2 (Caracter) [‘ ‘, ‘#’, ‘3’, ‘A’, ‘a’] [‘a’, ‘A’,‘3’, ‘#’, ‘ ‘]
‘, ‘#’]
[3.1, 2.4, -
3 (Real) 12, 3.1, 0.5, [-12, 0.5, 2.4, 3.1, 3.1, 4.8] [4.8, 3.1, 3.1, 2.4, 0.5, -12]
4.8]

Para ordenar un arreglo se han desarrollado diversos algoritmos, entre los


cuales están burbuja, selección y quick-sort. El siguiente es el algoritmo
de ordenamiento ascendente por selección:

Inicio
para (i :=0 hasta n-2) hacer
para (j:=i+1 hasta n-1) hacer
si (A[i] > A[j]) entonces
/* Las siguientes 3 lineas de programa son muy famosas y
son conocidas
como el intercambio de variables o swapping */
auxiliar := A[i]
A[i] := A[j]
A[j] := auxiliar
sino
fin_si
fin_para
fin_para

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:45:31 a.m.]


Programa Universidad Virtual

Fin

● Organiza los valores de un arreglo llenado con anterioridad, de Mayor a Menor.

__

EJEMPLOS PRACTICOS BUSQUEDAS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:45:31 a.m.]


Programa Universidad Virtual

ORDENAMIENTOS ARREGLOS Y MATRICES

BUSQUEDAS

Una operación de búsqueda sobre un arreglo, es una operación que permite


encontrar un elemento en un arreglo que cumple una cierta propiedad, por ejemplo
el primer par, el elemento máximo, mínimo, la mediana, etc.

Una de las primeras operaciones de búsqueda sobre un arreglo que se


puede desarrollar es encontrar el primer elemento del mismo que cumpla con
una cierta propiedad, por ejemplo el primer par, el primer número primo, el
primer número negativo, etc. De manera muy general (y poco eficiente), un
algoritmo para este tipo de búsqueda tiene la forma:

Inicio
continuar := verdadero
i := 0
mientras ( i<n & continuar ) hacer
/* aunque aquí aparece como una asignación simple esta línea de
programa puede involucrar varias operaciones más. Es lo que en
la metodología de programación se llama división. */
cumple_propiedad := propiedad( A[i] )
/* si el elemento cumple la propiedad se deja de iterar el ciclo, el
elemento buscado es A[i]. si no se cumple se prueba el siguiente
elemento del arreglo */
si (cumple_propiedad) entonces
continuar := falso
sino
i := i + 1
fin_si
fin_mientras
/* si se encontro un elemento que cumple con la propiedad la
variable continuar se pone a falso y la variable contadora i, indica
cual es el elemento si no se encontra la variable continuar esta en
verdadero */
si (continuar := falso) entonces
escribir (“El elemento buscado es:”)
escribir (A[i])
sino
escribir (“No existe un elemento que cumpla con la propiedad”)
fin_si
Fin

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:45:57 a.m.]


Programa Universidad Virtual

Ejemplo. Desarrollar un algoritmo que permita encontrar el primer número par en


un arreglo de número enteros.

Inicio
continuar := verdadero
i := 0
mientras ( i<n & continuar ) hacer
cumple_propiedad := A[i] modulo 2 = 0
si (cumple_propiedad) entonces
continuar := falso
sino
i := i + 1
fin_si
fin_mientras
si (i < n) entonces
escribir (“El elemento buscado es:”)
escribir (A[i])
sino
escribir (“No existe un elemento que cumpla con la propiedad”)
fin_si
Fin

Ejemplo. Desarrollar un algoritmo que permita encontrar el primer número primo en


un arreglo de números enteros.

Inicio
continuar := verdadero
i := 0
mientras ( i<n & continuar ) hacer
/* las siguientes cinco lineas verifican si el elemento A[i] cumple la
propiedad de ser numero primo */
k := 2
mientras ( k<A[i] & A[i] modulo k <> 0 ) hacer
k := k + 1
fin_mientras
cumple_propiedad := k = A[i]
si (cumple_propiedad) entonces
continuar := falso
sino
i := i + 1
fin_si
fin_mientras
si (i < n) entonces
escribir (“El elemento buscado es:”)
escribir (A[i])

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:45:57 a.m.]


Programa Universidad Virtual

sino
escribir (“No existe un elemento que cumpla con la propiedad”)
fin_si
Fin

Este algoritmo se puede adaptar para encontrar no solo el primer elemento


que cumple una propiedad sino el m-esimo elemento que cumple con la propiedad, véase
el problema 2 del taller.

Aunque toda búsqueda se puede realizar con el algoritmo anterior, este resulta
poco eficiente en muchos casos, por ejemplo para calcular el máximo o mínimo de
un arreglo. El anterior algoritmo se puede modificar de acuerdo al problema concreto
a resolver.

Ejemplo. Desarrollar un algoritmo que calcule el máximo de un arreglo de reales.

Inicio
x :=A[0]
i := 1
mientras (i<n ) hacer
si (x < A[i]) entonces
x := A[i]
sino
fin_si
i := i + 1
fin_mientras
escribir (“El elemento buscado es:”)
escribir (A[i])
Fin

En algunos problemas, si los elementos del arreglo están ordenados las búsquedas se
pueden optimizar.

Ejemplo. Desarrollar un algoritmo que permita encontrar el elemento mínimo en


un arreglo que esta ordenado ascendentemente.

escribir “El elemento buscado es:”

escribir A[0]

Ejemplo. Desarrollar un algoritmo que permita encontrar la mediana de un arreglo que


esta ordenado ascendentemente.

escribir "El elemento buscado es:"

escribir A[n/2]

__

ORDENAMIENTOS ARREGLOS Y MATRICES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:45:57 a.m.]


Programa Universidad Virtual

ARREGLOS Y MATRICES

CADENAS DE CARÁCTERES

Una cadena de caracteres o simplemente cadena, es un arreglo de caracteres, el


cual siempre debe contar entre sus elementos a un caracter especial llamado fin
de cadena, el cual determina la longitud y el texto de la cadena. En este curso
se notará al carácter fin de cadena como ‘\0’.

Ejemplos.

1. [‘w’, ’q’, ’9’, ‘?’, ‘\0’, ‘j’] es una cadena de caracteres de tamaño seis (6).

2. [‘ ’, ’\0’, ’*’, ‘u’, ‘\0’, ‘K’, ‘=’] es una cadena de caracteres de tamaño siete (7).

3. [’\0’, ’b’, ‘)’, ‘\0’, ‘)’, ‘\0’] es una cadena de caracteres de tamaño seis (6).

4. [‘#’, ’\0’] es una cadena de caracteres de tamaño dos (2).

5. [‘_’, ’0’, ’1’, ‘3’, ‘\0’] es una cadena de caracteres de tamaño cinco (5).

La cantidad de caracteres que aparecen antes del primer fin de cadena determina
la longitud de una cadena. Es de aclarar que el tamaño y la longitud de una cadena
de caracteres no son iguales, la relación que existe entre las dos es que la longitud
es siempre menor que el tamaño de la cadena. Los caracteres que aparecen antes
del fin de cadena determinan el texto de la misma. Generalmente el texto de
una cadena es presentado entre comillas dobles (“).

Ejemplos.

1. [‘w’, ’q’, ’9’, ‘?’, ‘\0’, ‘j’] es una cadena de tamaño seis (6), longitud cuatro (4) y
texto “wq9?”.

2. [‘ ’, ’\0’, ’*’, ‘u’, ‘\0’, ‘K’, ‘=’] es una cadena de tamaño siete (7), longitud uno (1)
y texto “ “.

3. [’\0’, ’b’, ‘)’, ‘\0’, ‘)’, ‘\0’] es una cadena de tamaño seis (6), longitud cero (0) y
texto “”(la cadena vacía).

4. [‘#’, ’\0’] es una cadena de tamaño dos (2), longitud uno (1) y texto “#”.

5. [‘_’, ’0’, ’1’, ‘3’, ‘\0’] es una cadena de tamaño cinco (5), longitud cuatro (4) y
texto “_013”.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:47:09 a.m.]


Programa Universidad Virtual

En muchas ocasiones solo se presenta el texto de la cadena, pues es la parte


más importante de la cadena, además, a partir de este se puede inferir la longitud
de la misma.

Una variable de tipo cadena de caracteres se declara asi :

<variable> : arreglo[n] de caracter

donde, <variable>es el nombre de la variable de tipo cadena que se esta declarando y n es el


tamaño de la cadena de caracteres.

Ejemplos.

1. Texto : arreglo[20] de caracter

2. Saludo : arreglo[70] de caracter

Como las cadenas de carácter son uno de los datos más utilizados en programación, en
muchos lenguajes se han implementado funciones para las operaciones más comunes
sobre cadenas. La siguiente es una lista corta de estas operaciones:

Operación Descripción
longitudCadena( <cadena1> ) retorna la longitud de la cadena
copiarCadena( <cadena1>, crea una copia de la cadena <cadena2> en la
<cadena2> ) cadena <cadena1>
concatenarCadena( <cadena1>, Retorna la concatenación de <cadena1> con
<cadena2>) <cadena2> en <cadena1>.
retorna menos uno (-1) si <cadena1> es menor
compararCadenas( <cadena1>,
que <cadena2>, cero (0) si son iguales y uno
<cadena2> )
(1) en otro caso.*

* Para la comparación de la cadena <cadena1> con la cadena <cadena2> usa


el orden lexicográfico, esto es, primero compara el primer elemento del texto de
cada cadena usando el orden asociado a los caracteres. Si el primer elemento
de <cadena1> es menor que el primer elemento de <cadena2> entonces
<cadena1> es menor que <cadena2>, si es mayor entonces <cadena1> es mayor
que <cadena2>. Pero si son iguales se revisan los siguientes caracteres del texto
de cada cadena y se hace el mismo proceso que para el primer carácter. Se repite
el mismo proceso si los caracteres son iguales hasta que alguno de los textos de
las cadenas se termine. En tal caso el que primero se termine se considera
menor, pero si los dos terminan igual se consideran iguales. El siguiente es
el algoritmo de comparación usando el orden lexicográfico.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:47:09 a.m.]


Programa Universidad Virtual

Inicio
i := 0
mientras (cadena1[i] <> ‘\0’ & cadena2[i] <> ‘\0’ & cadena1[i] <>
cadena2[i]) hacer
i := i + 1
fin_mientras
si ( cadena1[i] = ‘\0’ ) entonces
si ( cadena2[i] = ‘\0’ ) entonces
x :=0
sino
x := -1
fin_si
sino
si ( cadena2[i] = ‘\0’ ) entonces
x := 1
sino
si ( cadena1[i] < cadena2[i] ) entonces
x := -1
sino
x := 1
fin_si
fin_si
fin_si
Fin

Ejemplos. Sean cad1 =“Texto uno (1)”, cad2 =“Otro texto 2-”, cad3 =“Adios !...” y
cad4 = “Texto dos (2)” cadenas de caracter.

1. concadenarCadena( cad1, cad2 ) deja a cad1 como “Texto uno (1)Otro texto 2-”.

2. concadenarCadena( cad3, cad1 ) deja a cad3 como “Otro texto 2-Texto uno (1)”.

3. copiarCadena( cad2, cad1 ) deja a cad2 como “Texto uno (1)”.

4. compararCadena( cad4, cad1 ) retorna uno (1) pues cad4 es mayor según
el orden lexicográfico que cad1.

5. compararCadena( cad1, “Texto uno (1)” ) retorna cero (0) pues el texto de cad1
es igual al texto enviado.

6. copiarCadena( cad2, “texto uno (1)”) deja a cad2como “texto uno (1)”.

7. Tome cad2 del ejemplo 8, comparar( cad1, cad2 )retorna menos uno (-1)
pues ‘T’es menor que ‘t’según el orden del ASCII.

8. concatenarCadena( “Hola mundo..”, cad1 ) deja a cad1 como “Hola mundo..


Texto uno (1)”.
__

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:47:09 a.m.]


Programa Universidad Virtual

ARREGLOS Y MATRICES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:47:09 a.m.]


Programa Universidad Virtual

ARREGLOS Y MATRICES

MATRICES

Como el espacio m-dimensional de un conjunto A, notado Am, es a su vez


un conjunto, es posible definir el espacio n-dimensional de Am, es decir, se
puede tener un arreglo de tamaño nde arreglos de tamaño mde un conjunto A.

Ejemplos.

1. [[1, 2], [0, 3], [8, -3]] es un arreglo de tamaño tres (3) de arreglos de tamaño
dos (2) de enteros.

2. [[0.3, 1.2, -1.2], [0.0, -2.7, 5.1], [9.4, 3.2, 1e-5]] es un arreglo de tamaño tres (3)
de arreglos de tamaño tres (3) de reales.

3. [[‘r’, ‘$’, ‘q’], [‘p’, ‘@’, ‘i’]] es un arreglo de tamaño dos (2) de arreglos de
tamaño tres (3) de caracteres.

Una matriz es un arreglo de tamaño n de arreglos de tamaño mde un tipo dado. Al


tamaño nse le conoce como número de filas y al tamaño m como número
de columnas. Estos nombres son debidos a la presentación de una matriz
como una tabla, donde la fila i-esima de la tabla corresponde con el arreglo i-esimo de
la matriz.

Ejemplos.

1. La matriz [[1, 2], [0, 3], [8, -3]] se presenta en forma de tabla como sigue

1 2
0 3
8 -3

2. La matriz [[‘r’, ‘$’, ‘q’], [‘p’, ‘@’, ‘i’]] se presenta en forma tabular como sigue

‘r’ ‘$’ ‘q’


‘p’ ‘@’ ‘i’

3. La matriz [[0.3, 1.2, -1.2], [0.0, -2.7, 5.1], [9.4, 3.2, 1e-5]] se presenta en forma
de tabla así

0.3 1.2 -1.2


0.0 -2.7 5.1
9.4 3.2 1e-5

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 6) [12/02/2008 12:47:56 a.m.]


Programa Universidad Virtual

En el pseudo código se define asi:

<nombre> : arreglo [n][m] de <tipo>

donde, <nombre>:es el nombre de la variable que se esta definiendo. <tipo>: es el


tipo de elementos almacenados en la matriz. n: es el número de filas de la matriz
(debe ser una constante o un literal entero). m: es el número de columnas de la
matriz (debe ser una constante o un literal entero).

Ejemplos.

4. M : arreglo[4][5] de entero define una variable con nombre M de tipo entero,


de cuatro (4) filas y cinco (5) columnas.

5. Tabla : arreglo[3][2] de caracter define una variable con nombre Tabla de


tipo caracter, de tres filas y dos columnas.

6. Cuadro : arreglo[4] de arreglo[3] de real define una matriz con nombre Cuadro
de tipo real, de cuatro filas por tres columnas.

7. Transicion :arreglo[10][10] de caracter, define una variable de tipo caracter,


de diez filas por diez columnas.

Para acceder cada uno de los elementos de la matriz se utiliza el doble


subíndice, donde el primer subíndice indica la fila del elemento y el segundo indica
la columna. Al igual que en arreglos el índice para fila varía entre cero (0) y el
número de filas menos uno (n-1), y el índice para columna varía entre cero (0) y
el número de columnas menos uno (m-1).

La notación en el pseudo código utilizado en este curso es la siguiente::

<nombre>[<fila>][<columna>]

donde, <nombre>: es el nombre de la variable de tipo matriz. <fila>: es una expresión


numérica (entera) que indica la fila del elemento a acceder. <columna>: es una expresión
numérica (entera) que indica la columna del elemento a acceder.

Ejemplos. Sean i y j variables enteras con valores 1 y 2 respectivamente y Tabla la


siguiente matriz de enteros,

3 -2 4 5
2 4 -8 0
0 10 13 1

1. Tabla[2][1], retorna el elemento que está en la fila dos y columna uno, es decir
10 (recuerde que se indexa desde cero).

2. Tabla[0][0], retorna el elemento que está en la fila cero y columna cero, es decir 3.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 6) [12/02/2008 12:47:56 a.m.]


Programa Universidad Virtual

3. Tabla[0][3], retorna el elemento que está en la fila cero y columna tres, es decir 5.

4. Tabla[2][0], retorna el elemento que está en la fila dos y columna cero, es decir 0.

5. Tabla[1][2], retorna el elemento que está en la fila uno y columna dos, es decir -8.

6. Tabla[j-i][j+i], retorna el elemento que está en la fila uno y columna tres, es decir 0.

7. Tabla[Tabla[j-i][j+i]][j-1], retorna el elemento que está en la fila cero y columna


uno, es decir -2.

8. La asignación Tabla[j][j+i] := 20, cambia el elemento que está en la fila dos y


columna tres por el valor 20, es decir, Tabla queda como:

3 -2 4 5
2 4 -8 0
0 10 13 20

9. Sin tener en cuenta la asignación del ejemplo ocho, la asignación:

Tabla[j-2][j*i] := Tabla[j-i][j+i] + 3

cambia el elemento que está en la fila cero y columna dos por el valor 3, es
decir, Tabla queda como:

3 -2 3 5
2 4 -8 0
0 10 13 1

Se puede apreciar en los ejemplos siete y nueve que cuando una matriz es
de enteros, un valor almacenado en la matriz se puede utilizar como índice o
como parte de una expresión numérica.

Las matrices son útiles cuando se tiene información en forma tabular que debe
ser mantenida y procesada. Ejemplos de información que se presenta en
forma tabular son: los sistemas de ecuaciones lineales (donde la
información proporcionada son los coeficientes de cada ecuación lineal), problemas
de optimización lineal, cuadros estadísticas, entre otros.

● Lee e imprime una Matriz

Ejemplo. Una empresa tiene una tabla con las unidades vendidas por cada mes de
un año, de los cuatro productos que vende. La tabla tiene la siguiente forma:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 6) [12/02/2008 12:47:56 a.m.]


Programa Universidad Virtual

Producto \ Mes 1 2 3 4 5 6 7 8 9 10 11 12
Producto 1
Producto 2
Producto 3
Producto 4

donde la fila indica el producto y la columna el mes del año. El elemento en la fila i
y columna j indica el número de unidades vendidas del producto i+1, en el mes j+1.

Realizar un programa que lea las unidades vendidas de cada producto por mes en
un año y calcule la cantidad de unidades vendidas de cada producto en un año,
la cantidad de unidades vendidas de los cuatro productos por cada mes, el
producto con menos ventas en un año y el mes en que más se vendió cada producto.

Dialogo:

Objetos conocidos: Una tabla de números de cuatro (4) filas por doce (12)
columnas que indica la cantidad de unidades vendidas de un producto por cada
mes de un año.

Objetos desconocidos: Una lista de números de tamaño cuatro (4) con la cantidad
de unidades vendidas de cada producto, otra lista de números de tamaño doce
(12) con las unidades vendidas en cada mes, un número que indica el producto
más vendido y una lista de números de tamaño cuatro (4) que indica en que mes
se vendió más cada producto.

Condiciones: La cantidad de unidades vendidas en un año de un producto es la


suma de las unidades vendidas del producto en cada mes. La cantidad de
unidades vendidas en un mes es la suma de las unidades vendidas de cada
producto en ese mes. El producto que más se vendió es el producto del que se
hayan vendido más unidades en un año. El mes en que más se vendió un producto
es el mes en el que más unidades del producto se hayan vendido. El elemento en
la fila i y columna j indica el número de unidades vendidas del producto i+1, en el mes j+1.

Especificación: Se deja al lector.

Algoritmo:

Inicio
/* Las variables usadas en el algoritmo*/
i : entero
j : entero
min : entero /* indice del producto menos vendido */
M : arreglo[4][12] de entero /* la tabla de ventas */
T : arreglo[4] de entero /* los totales por producto */
V : arreglo[12] de entero /* los totales por mes */
Max : arreglo[4] de entero /* meses de mas ventas por producto */
/* las siguientes diez lineas leen la tabla de ventas */
para (i :=0 hasta 11) hacer
para j := 0 hasta 3 hacer
escribir “Ingrese las ventas del producto ”
escribir j+1
escribir “ Para el mes “
escribir i+1
escribir cambio_linea

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 6) [12/02/2008 12:47:56 a.m.]


Programa Universidad Virtual

leer M[j][i]
fin_para
fin_para
/*las siguientes seis lineas calculan los totales de ventas por producto */
para i := 0 hasta 3 hacer
T[i] := 0
para j := 0 hasta 11 hacer
T[i] := T[i] + M[i][j]
fin_para
fin_para
/* las siguientes seis lineas calculan los totales de ventas por mes */
para i := 0 hasta 11 hacer
V[i] := 0
para j :=0 hasta 3 hacer
V[i] := V[i] + M[j][i]
fin_para
fin_para
/* las siguientes catorce lineas (incluyendo comentarios) calculan el
mes de mas ventas por producto */
para i := 0 hasta 3 hacer
/* se supone que el de mas ventas fue el primero */
Max[i] := 0
/* se compara con los demas y si hay uno mejor se cambia */
para j := 1 hasta 11 hacer
/* se compara el mes j-esimo con el que se lleva como mejorsi el mes
j-esimo es mejor se cambia por j el que se lleva */
si M[i][j] < M[i][Max[i]] entonces
Max[i] := j
fin_si
fin_para
fin_para
/* las siguientes catorce lineas (incluyendo comentarios) calculan el
producto menos vendido en el año */
/* se supone que el menos vendido es el producto cero */
min := 0
para i := 1 hasta 3 hacer
/* si hay uno menor se cambia */
si T[i] < T[min] entonces
min := i
fin_si
fin_para
/* se imprimen los resultados */
/* ventas totales por producto */
para i := 0 hasta 3 hacer
escribir “Unidades vendidas del producto “
escribir i+1
escribir T[i]
escribir cambio_linea
fin_para
/* ventas totales por mes */
para i := 0 hasta 11 hacer
escribir “Unidades vendidas en el mes “
escribir i+1

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (5 of 6) [12/02/2008 12:47:56 a.m.]


Programa Universidad Virtual

escribir V[i]
escribir cambio_linea
fin_para
/* mes en el que mas se vendio cada producto */
para i := 0 hasta 3 hacer
escribir “El mes en el que mas se vendio el producto “
escribir i+1
escribir“ fue el mes ”
escribir Max[i]
escribir cambio_linea
fin_para
/* producto menos vendido */
escribir “El producto menos vendido fue “
escribir min +1.
Fin

__

ARREGLOS Y MATRICES

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (6 of 6) [12/02/2008 12:47:56 a.m.]


Programa Universidad Virtual

CORRECCION
MATRICES
EVALUACION

7.4 CODIFICACIÓN DE ALGORITMOS EN C++

Para utilizar los arreglos unidimensionales (vectores)


y bidimensionales (matrices) en el lenguaje de programación Turbo
C++, se deben seguir las siguientes reglas:

Pseudo Código C++


ARREGLOS

Definición
X : arreglo[tam] de tipo tipo X[tam];
Arreglo

X[índice] X[índice]
Uso
Donde 0<=índice<= tam - 1 Donde 0<=índice<= tam - 1
MATRICES
Definición X : arreglo[tam1][tam2] de
tipo X[tam1][tam2];
Matrices tipo

X[i][j] X[i][j]
Uso 0<=i<=tam1-1 0<=i<=tam1-1
0<=i<=tam2-1 0<=i<=tam2-1

CADENA DE
CARACTERES
Definición S : arreglo [tamaño] de
char S[tamaño];
cadena caracter
S[i] S [i]
Acceso a
retorna el caracter de la retorna el caracter de la
posición
posición i + 1 posición i + 1
cin.getline(S,tam_max);
Lectura de
leer(S)
una cadena tam_max: tamaño máximo de
la cadena
longitudCadena(S)
strlen (s);
Longitud de la
cadena Retorna el número de
Retorna el número de caracteres
caracteres

Copiar una S1 := S2 strcpy (S1, S2);


cadena asigna cadena S2 a S1 asigna cadena S2 a S1

strcmp (S1, S2);


S1 < S2 retorna 0 si S1 y S2 son
Comparaciones
S1 > S2 ... iguales; menor que 0 si S1 <
S2 y mayor que 0 si S1> S2

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:48:30 a.m.]


Programa Universidad Virtual

Ejemplo. El siguiente algoritmo usa vectores, cadenas y matrices:

Pseudo Código C++


#include <iostream.h>
#include <stdio.h>
Procedimiento principal() #include <string.h>
variables void main (void){
a : arreglo[10] de real
cad: arreglo[30] de caracter float a[10];
m: arreglo[2][2] de caracter char cad[30];
i : entero char matriz[2][2];
j : entero
inicio
int i;
int j;
/*cargar arreglo con losnumeros del
12 al 21*/
/*cargar arreglo con los numeros del
12 al 21*/
para i:=0 hasta 9 hacer for (i=0; i<10; i++){

a[i]:=i+12; a[i]=i+12;

fin_para };
cout <<"\nImpresión del contenido de
escribir "impresión del contenido de arreglo\n";
arreglo" for (i=0; i<10; i++){
para i:=0 hasta 9 hacer
cout << a[i] << " ";
escribir( a[i] )
escribir( " " ) };
cout<<"\n";
fin_para /*cargar matriz por filas */
escribir( cambio_linea )
/*cargar matriz por filas */ for (i=0; i<2; i++){
para i:=0 hasta 1 hacer

for (j=0; j<2; j++){


para j:=0 hasta 1
hacer
cout <<
"Digite
escribir dato para
( "digite ["<<i<<"]
dato", ["<<j<<
i, j ) "] :";
leer( m cin
[i][j] ) >>matriz
[i][j];
fin_para
}

fin_para
/*imprimir contenido de matriz */ };
escribir "condenido de matriz"

para i:=0 hasta 1 hacer /*imprimir contenido de matriz */


escribir( cambio_linea ) cout << "condenido de matriz";
for (i=0; i<2; i++){
para j:=0 hasta 1
hacer cout <<"\n";
escribir( m[i][j] ) for (j=0; j<2; j++){
fin_para cout << matriz[i][j]
<<" ";
fin_para }

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:48:30 a.m.]


Programa Universidad Virtual

/*imprimir longitud de cad */


};
escribir( cambio_linea, "digite una
/*imprimir longitud de cad */
cadena :" )
cout <<"\nDigite una cadena :";
leer ( cad )
cin.getline( cad,10);
escribir( "cadena digitada : ", cad )
cout <<"Cadena digitada : " << cad
escribir( "longitud cadena :",
<<"\n ";
longitudCadena(cad) )
cout <<"\n Longitut cadena :" <<
strlen(cad) ;
fin_procedimiento
}

__

CORRECCION
MATRICES
EVALUACION

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:48:30 a.m.]


Programa Universidad Virtual

Contenido

Solución de los ejercicios de la autoevaluación

1. Luego de ejecutar el programa ¿Cuál numero es guardado en B[9]?

B[10] : entero;
j : entero;
Para j <-- 0 hasta 4 incr 1
B[j] <-- 2 * j + 1
Fin_Para
Para j <-- 5 hasta 9 incr 1
B[j] = B[9- j] – B[j - 1]
Fin_Para

Solución:

Se muestra como cada valor de B es calculado


B[0] = 1
B[1] = 3
B[2] = 5
B[3] = 7
B[4] = 9
B[5] = B[4] - B[4] = 0
B[6] = B[3] - B[5] = 7
B[7] = B[2] - B[6] = -2
B[8] = B[1] - B[7] = 5
B[9] = B[0] - B[8] = -4

2. Después de completar el siguiente programa ¿Cuántos elementos del arreglo A habrán


sido modificados?

A[10]: entero
j, x : entero
Para j <-- 1 hasta 6 incr 1
Leer x
Si (x – j < 0 || x – j > 9) entonces
Continuar al siguiente j;
Si_no
A[x - j] <-- j
Fin_Si
Fin_Para

Entradas : 8, 3, 10, 6, 7, 7

Solución:

Iteraciones dentro del arreglo

j = 1, A[7] = 1
j = 2, A[1] = 2

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:49:27 a.m.]


Programa Universidad Virtual

j = 3, A[7] = 3
j = 4, A[2] = 4
j = 5, A[2] = 5
j = 6. A[1] = 6

Han sido accedidos tres elementos A[1], A[2] y A[7]

3. Después de ejecutar el siguiente programa ¿Cual es el valor final de C[3]?

a[6], b[3], c[4]: entero;


i, j, k : entero;
a[6] <-- {12 41 52 57 77 -3};
b[3] <-- {17 34 81};
i <-- 0;
j <-- 0;
k <-- 0
Repetir
Mientras ( b[j] < a[i] ) hacer
c[k] <-- b[j];
k <-- k + 1;
j <-- j + 1;
Fin_Mientras
c[k] <-- a[i];
k <-- k + 1;
i <-- i + 1;
hasta (a[i] < 0)

Solución
La siguiente tabla sigue las variables a través de la ejecución del programa

i j k a [ i] b[j] c[k]
1 0 0 0 12 17 12
2 1 0 1 41 17 17
3 1 1 2 41 34 34
4 1 2 3 41 81 41

4. Luego de que el siguiente programa es ejecutado, ¿Cuántos valores diferentes


están contenidos en el arreglo A?

A[8]: entero
j, x: entero
Para j <-- 0 hasta 7 incr 1
Leer x
A[j] <-- x
Fin_Para
Para j <-- 7 hasta 0 incr -1
A[7 – j ] <-- A[ A[ j ] ]
Fin_Para

Entradas : 2,8,1,7,5,6,7,3

Solución

El Arreglo se llena en el primer ciclo For y queda de la siguiente forma:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:49:27 a.m.]


Programa Universidad Virtual

j 0 1 2 3 4 5 6 7
A[ 0 ] A[ 1 ] A[ 2 ] A[ 3 ] A[ 4 ] A[ 5 ] A[ 6 ] A[ 7 ]
valor 2 8 1 7 5 6 7 3

El siguiente ciclo hace una asignación a cada elemento siguiendo los siguientes pasos

1. Se reemplaza j por el valor correspondiente


2. Se reemplaza en A [ A[j] ] el valor correspondiente a A[ j ]

j A[ 7 - j ] < -- A[ A[ j ] ] Expresión
7 A[ 7 - 7 ] < -- A[ A[ 7 ] ] A[ 3 ] 7 A[ 0 ] < -- 7
6 A[ 7 - 6 ] < -- A[ A[ 6 ] ] A[ 7 ] 3 A[ 1 ] < -- 3
5 A[ 7 - 5 ] < -- A[ A[ 5 ] ] A[ 6 ] 7 A[ 2 ] < -- 7
4 A[ 7 - 4 ] < -- A[ A[ 4 ] ] A[ 5 ] 6 A[ 3 ] < -- 6
3 A[ 7 - 3 ] < -- A[ A[ 3 ] ] A[ 6 ] 7 A[ 4 ] < -- 7
2 A[ 7 - 2 ] < -- A[ A[ 2 ] ] A[ 7 ] 3 A[ 5 ] < -- 3
1 A[ 7 - 1 ] < -- A[ A[ 1 ] ] A[ 3 ] 6 A[ 6 ] < -- 7
0 A[ 7 - 0 ] < -- A[ A[ 0 ] ] A[ 7 ] 3 A[ 7 ] < -- 3

Recuerde que los elementos del arreglo van cambiando a medida que el ciclo se ejecuta asi:

A[j] 2 8 1 7 5 6 7 3
Iteración 0 7 8 1 7 5 6 7 3
Iteración 1 7 3 1 7 5 6 7 3
Iteración 2 7 3 7 7 5 6 7 3
Iteración 3 7 3 7 6 5 6 7 3
Iteración 4 7 3 7 6 7 6 7 3
Iteración 5 7 3 7 6 7 3 7 3
Iteración 6 7 3 7 6 7 3 7 3
Iteración 7 7 3 7 6 7 3 7 3

Al final el arreglo termina de la siguiente forma

A[ 0 ] A[ 1 ] A[ 2 ] A[ 3 ] A[ 4 ] A[ 5 ] A[ 6 ] A[ 7 ]
7 3 7 6 7 3 7 3

Se observa que existen tres valores diferentes 3, 6 y 7

La respuesta es 3

5. ¿cuál es el resultado de la suma de los elementos de la primera columna del arreglo c


luego de que el siguiente programa es ejecutado?

Entrada: 1, 2, 3, 4, 5, 6
Entrada: 6, 7, 8, 9, 10, 11

c[4][3], a[2][3], b[2][3]: entero


j, k : entero

Para j <-- 0 hasta 1 incr 1


Para k <-- 0 hasta 2 incr 1
Leer a[j][k];
Fin_Para
Fin_Para

Para j <-- 0 hasta 1 incr 1


Para k <-- 0 hasta 2 incr 1
Leer b[j][k];
Fin_Para
Fin_Para

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:49:27 a.m.]


Programa Universidad Virtual

Para j <-- 0 hasta 1 incr 1


Para k <-- 0 hasta 2 incr 1
c[2*j][k] <-- a[j][k];
c[2*j + 1][k] <-- b[j][k];
Fin_Para
Fin_Para

Solución:
El programa lee y genera los arreglos A y B de la siguiente manera

A B
1 2 3 6 7 8
4 5 6 9 10 11

Luego combina estos arreglos en el arreglo c

C
1 2 3
6 7 8
4 5 6
9 10 11

La primera columna contiene 1, 6, 4, 9 para un total de 20

__

Contenido

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:49:27 a.m.]


Programa Universidad Virtual

Tabla de contenido

MÓDULO 5: FUNCIONES Y PROCEDIMIENTOS


8. Funciones
9. Funciones recursivas
10. Procedimientos
11. Argumentos por valor y por referencia
12. Interacción del programa con las funciones y procedimientos
13. Variables locales y globales
AUTOEVALUACION

Haga Click

__

Tabla de contenido

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:53:21 a.m.]


Programa Universidad Virtual

FUNCIONES Y
FUNCIONES RECURSIVAS
PROCEDIMIENTOS

FUNCIONES

El concepto de función en programación se fundamenta en el concepto de


función matemática.

Una función, desde el punto de vista de la programación, se define como un


proceso que recibe valores de entrada (llamados argumentos) y el cual retorna
un valor resultado. Adicionalmente, las funciones son sub-programas dentro de
un programa que se pueden invocar (ejecutar) , desde cualquier parte del
programa, es decir, desde otra función, desde la misma función o desde el
algoritmo principal[1], cuantas veces sea necesario.

Las funciones se usan cuando existen dos o más porciones de algoritmo dentro de
un programa que son iguales o muy similares, por ejemplo, en un algoritmo se
puede emplear varias veces una porción de algoritmo que eleva a una potencia
dada un número real. De esta manera se define una función que al ser
invocada ejecute dicho código, y en el lugar donde estaba la porción de
algoritmo original, se hace un llamado (ejecución) de la función creada.

Una función se declara de la siguiente manera:

funcion nombre( arg1 : tipo1 , ..., argn : tipon ) : tipo

variables

<declaraciones>

inicio

<instrucciones>

retornar <valor>

fin_funcion

donde,

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:53:43 a.m.]


Programa Universidad Virtual

nombre: es el nombre de la función

argi: es nombre del argumento i-esimo de la función.

tipoi: es el tipo del i-esimo argumento de la función.

tipo: es el tipo de dato que retorna la función.

<declaraciones>: es el conjunto de variables definidas para la función (diferentes


a los argumentos).

<instrucciones>:es el conjunto de instrucciones que realiza la función.

<valor>:es el valor que retorna la función, puede ser una variable del tipo
que retorna la función o una expresión que de cómo resultado un dato del tipo
de retorno.

EJEMPLOS

Ejemplo 1. h: Reales x Reales ⇒ Reales

(a , b) Þ a2+2*b

funcion h ( a : real, b : real): real


variables

inicio

retornar a*a + 2*b

fin_funcion

Ejemplo 2. minimo: Reales x Reales x Reales ⇒ Reales

(a , b , c ) Þ a si a b y a c

Þ b si b a y b c

Þ c si c a y c b

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:53:43 a.m.]


Programa Universidad Virtual

funcion minimo( a : real, b : real , c : real ): real


variables
m : real

inicio

si a b | a c entonces

m := a

sino

si b a |b c entonces

m:= b

sino

m := c

fin_si

fin_si

retornar m

fin_funcion

[1] En la siguiente sección se dirá que es el algoritmo principal.

__

FUNCIONES Y
FUNCIONES RECURSIVAS
PROCEDIMIENTOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:53:43 a.m.]


Programa Universidad Virtual

FUNCIONES Y
PROCEDIMIENTOS
PROCEDIMIENTOS

FUNCIONES RECURSIVAS

Una función recursiva es una función que se define en términos de si misma,


es decir, que el resultado de la función depende de resultados de la misma función
en otros valores.

Se debe tener mucho cuidado en la definición de funciones recursivas, pues si no


se hace bien, la función podría requerir de un cálculo infinito o no ser
calculable. Observe las siguientes definiciones, una correcta y la otra incorrecta:

Definición Recursiva correcta

Esta bien definida porque se puede calcular el valor de la


función para cualquier valor que tome x. Por ejemplo si x =
3.5 se tiene que f(3.5) = 13.125 ya que:

f(3.5) = f(3.5-1.0)* 3.5 = f(2.5) * 3.5

f(2.5) = f(2.5-1.0)*2.5 = f(1.5) * 2.5

f(1.5) = f(1.5-1.0)*1.5 = f(0.5) * 1.5

f(0.5) = 1.0 (pues 0.5 £ 1.0) y de esta manera, el cálculo de la


función se devuelve.

f(1.5) = f(0.5)*1.5 = 1.0 * 1.5 = 1.5

f(2.5) = f(1.5)*2.5 = 1.5 * 2.5 = 3.75

f(3.5) = f(2.5)* 3.5 = 3.75 * 3.5 = 13.125

Definición Recursiva Incorrecta

Esta mal definida porque no se puede calcular el valor de la


función para cualquier valor que tome x. Por ejemplo,

si x = 3.5 se tiene que f(3.5) no se puede calcular ya


que:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:55:09 a.m.]


Programa Universidad Virtual

f(3.5) = f(3.5+1.0)* 3.5 = f(4.5) * 3.5

f(4.5) = f(4.5+1.0)*4.5 = f(5.5) * 4.5

f(5.5) = f(5.5+1.0)*5.5 = f(6.5) * 5.5

f(6.5) = ……

y nunca se termina este proceso

Una función recursiva es aquella que para calcular su valor en un dato


dado, generalmente necesita ser calculada en uno u otros valores. Un punto
de ruptura de la recursión es un valor del argumento para el cual la función no
tiene que ser calculada de nuevo en otros valores.

EJEMPLOS

Ejemplo 1. factorial : Entero Þ Entero

n Þ 1 si n 1

Þ n * factorial(n-1) en otro caso

Punto de ruptura: cuando n es igual a uno (1)

Algoritmo:

funcion factorial ( n : entero ) : entero


variables
m : entero
inicio
si (n <= 1) entonces
m := 1
sino
m := factorial(n-1) * n
fin_si
retornar m
fin_funcion

● El siguiente programa calcula el factorial de un número dado.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:55:09 a.m.]


Programa Universidad Virtual

Ejemplo 2. Fibonacci : Entero ® Entero

n Þ 1 si n 1

Þ fibonacci(n-1)+fibonacci(n-2) otro caso

Punto de ruptura: cuando n es menor o igual a uno (1)

Algoritmo:

funcion fibonacci( n : entero ) : entero variables


m : entero
inicio
si (n <= 1) entonces
m := 1
sino
m := fibonacci(n-1) + fibonacci(n-2)
fin_si
retornar m
fin_funcion

Ejemplo 3. suma_rara : Entero x Entero Þ Entero

(n , m ) Þ n si n>0 y m 0

Þ m si n 0 y 0 m

Þ suma_rara(n-2,m-3)+ suma_rara(m-2,n-3)+ m + n

Puntos de ruptura: cuando m es menor o igual a cero (0), y cuando n es menor o


igual a cero (0).

Algoritmo:

funcion suma_rara( n : entero, m : entero ) : entero


variables
s : entero
inicio
si (n > 0 | m <= 0) entonces
s := n
sino
si (n <= 0 | 0 <= m) entonces
s := m
sino
s := suma_rara(n-2,m-3)+ suma_rara(m-2,n-3)+ m + n
fin_si
fin_si
retornar s
fin_funcion

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:55:09 a.m.]


Programa Universidad Virtual

__

FUNCIONES Y
PROCEDIMIENTOS
PROCEDIMIENTOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:55:09 a.m.]


Programa Universidad Virtual

ARGUMENTOS POR VALOR Y


FUNCIONES Y
POR REFERENCIA
PROCEDIMIENTOS

PROCEDIMIENTOS

En muchos casos existen porciones de código similares que no calculan un valor si


no que por ejemplo, presentan información al usuario, leen una colección de datos
o calculan mas de un valor. Como una función debe retornar un único valor[1]
este tipo de porciones de código no se podrían codificar como funciones. Para
superar este inconveniente se creó el concepto de procedimiento. Un
procedimiento se puede asimilar a una función que no retorna un resultado, y
que puede retornar más de un valor mediante el uso de parámetros o argumentos
por referencia[2].

Los procedimientos son muy utilizados en los efectos laterales que se pueden llevar
a cabo: escribir en pantalla, modificar variables, leer datos, etc.

Un procedimiento se define de la siguiente manera

procedimiento nombre ( arg1: tipo1, ...)

<declaraciones variables>

inicio

<instrucciones>

fin_procedimiento

[1] Una función puede retornar más de un valor si ella usa argumentos por
referencia. En este texto los argumentos por referencia sólo se usarán en
los procedimientos ya que, es una muy mala técnica de programación el uso
de argumentos por referencia en funciones. Esta consideración se hace por
que matemáticamente una función no puede modificar los valores de los argumentos.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:55:27 a.m.]


Programa Universidad Virtual

[2] Los argumentos por referencia se tratarán en el siguiente aparte.

__

ARGUMENTOS POR VALOR Y


FUNCIONES Y
POR REFERENCIA
PROCEDIMIENTOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:55:27 a.m.]


Programa Universidad Virtual

FUNCIONES Y
FUNCIONES Y
PROCEDIMIENTOS
PROCEDIMIENTOS

ARGUMENTOS POR VALOR Y POR REFERENCIA

Argumentos por valor: los argumentos convencionales son por valor, es


decir a la función o procedimiento se le envía un valor que almacena en la
variable correspondiente al argumento, la cual es local, de manera que
su modificación no tiene efecto en el resto del programa.

Argumentos por referencia: sí un procedimiento tiene un argumento


por referencia, este no recibe un valor, sino una referencia a una variable, es decir
la misma variable (posición en memoria y valor) que envía el algoritmo que hace
el llamado al procedimiento con un alias (el nombre de la variable del argumento
que se recibe por referencia), por lo tanto cualquier modificación del argumento
tiene efectos en el algoritmo que realizó el llamado del procedimiento. Cuando
se ejecuta un procedimiento con uno o varios argumentos por referencia, ni un
literal ni una constante se pueden poner en la posición de alguno de
estos argumentos, es decir, ni las constantes ni los literales pueden ser pasados a
un procedimiento por referencia. Un argumento por referencia se
especifica anteponiendo la palabra referencia a su definición.

En el siguiente ejemplo el argumento A es pasado por referencia y el argumento B


es pasado por valor:

procedimiento Proc ( referencia A: entero, B: entero)

inicio

fin_procedimiento

Al realizar un llamado al procedimiento Proc, como el siguiente Proc(suma,


dato), si el procedimiento modifica el argumento A que recibe por referencia,
también se está modificando el contenido de la variable suma, pues suma y A en
este momento son la misma variable pero con dos nombres. Mientras que si
el procedimiento modifica el argumento que recibe por valor B, no está modificando

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 3) [12/02/2008 12:55:57 a.m.]


Programa Universidad Virtual

la variable dato, ya que al realizar el llamado, el procedimiento crea una


variable nueva para el argumento B, distinta de dato, con diferente posición
de memoria, pero copiando el contenido de la variable dato en el argumento B.

EJEMPLOS.

Ejemplo 1. Desarrollar un procedimiento que intercambie los valores de


dos variables enteras, es decir, que implemente el swapping para variables enteras.

procedimiento intercambio (referencia x : entero, referencia y :


entero)
variables
/* variable auxiliar para realizar el intercambio */
aux : entero
inicio
/* se almacena el valor de x en la variable aux */
aux := x
/* se almacena el valor de y en la variable x */
x := y
/* se almacena el valor original de x en la variable y */
y := aux
fin_procedimiento

Ejemplo 2. Desarrollar un procedimiento que lea una colección de hasta cien


(100) números reales.

procedimiento leer_arreglo (referencia n : entero, referencia A : arreglo[100] de real)


variables
i : entero
inicio
/* las siguientes cuatro lineas son para obtener el numero de
datos a leer. Se controla que no sea un numero invalido */
repita
escribir (“Ingrese el numero de reales a operar”)

leer (n)
hasta (0 < n | n <= 100)
/* las siguientes seis lineas leen los n datos a procesar */
para (i = 0 hasta n - 1) hacer

escribir( “Ingrese el dato ”)


escribir (i)
escribir (“-esimo”)
leer (A[i])

fin_para
fin_procedimiento

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 3) [12/02/2008 12:55:57 a.m.]


Programa Universidad Virtual

__

FUNCIONES Y
FUNCIONES Y
PROCEDIMIENTOS
PROCEDIMIENTOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 3) [12/02/2008 12:55:57 a.m.]


Programa Universidad Virtual

FUNCIONES Y
FUNCIONES Y
PROCEDIMIENTOS
PROCEDIMIENTOS

INTERACCIÓN DEL PROGRAMA CON LAS FUNCIONES Y


LOS PROCEDIMIENTOS

La estructura de un programa que utiliza funciones y/o procedimientos es la siguiente:

<declaración de funciones y/o procedimientos>

procedimiento principal()

variables

<declaración de variables programa>

inicio

<instrucciones>

fin_procedimiento

donde,

<declaración de funciones y/o procedimientos>: Es el conjunto de funciones


y procedimientos declarados que se usarán en el programa. Cada función
y procedimiento se definen como se mencionó en las anteriores secciones.

<declaración de variables programa>: Es el conjunto de variables que son


usadas únicamente por el algoritmo principal, es decir, por el algoritmo que
hace llamados a las funciones y/o procedimientos.

<instrucciones>: Es el algoritmo principal.


__

FUNCIONES Y
FUNCIONES Y
PROCEDIMIENTOS
PROCEDIMIENTOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:56:14 a.m.]


Programa Universidad Virtual

FUNCIONES Y

PROCEDIMIENTOS

FUNCIONES Y PROCEDIMIENTOS

Variables Globales: Variables definidas al comienzo del programa (antes


de cualquier función), que se pueden usar a lo largo de todo el programa, es
decir, dentro del algoritmo principal y en cada función definida en el programa.

Variables Locales: Variables que son definidas dentro de cada función y/


o procedimiento, y que solo se pueden usar en la función y/o procedimientos en la
que son declaradas.

Una buena técnica de programación es no usar o usar la menor cantidad de


variables globales, de tal forma que las funciones y/o procedimientos que se creen
no dependan de elementos externos, en este caso las variables globales, para
realizar su proceso. El no usar variables globales dentro de una función y/
o procedimiento garantiza su fácil depuración y seguimiento.

<definición de variables globales>

<declaración de funciones y/o procedimientos>

procedimiento principal()

variables
<declaración de variables programa>

inicio
<instrucciones>

fin_procedimiento

EJEMPLOS.

Ejemplo 1. Desarrollar un programa que calcule la serie de Laurent de la


función exponencial en un valor x dado por, con una cantidad de n+1 de términos.

Algoritmo:

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 4) [12/02/2008 12:56:45 a.m.]


Programa Universidad Virtual

funcion factorial( n: entero ) : entero


variables
m : entero
inicio
si (n <= 1) entonces
m := 1
sino
m factorial(n-1) * n
fin_si
retornar m
fin_funcionfuncion elevar ( x : real, n : entero ) : real
variables
y : real
i : entero
inicio
y 1.0
para i 1 hasta n haga y y*x
fin_para
retornar y
fin_funcion

funcion e( x : real, n : entero ) : real


variables
i : entero
suma : real
inicio
suma 0.0
para i 0 hasta n haga suma suma + elevar( x, i ) /
factorial( i )
fin_para
retornar suma
fin_funcion

procedimiento principal()
variables
n : entero
x : real
y : real
inicio
escribir “Digite el numero de terminos a calcular de e(x)”
leer n
escribir “Digite el valor sobre el que quiere calcular e(x)”
leer x
y e( x, n )
escribir “El valor de e(”
escribir x
escribir “) es “
escribir y
fin_procedimiento

Ejemplo 2. Desarrollar un programa que permita ingresar una colección de máximo

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 4) [12/02/2008 12:56:45 a.m.]


Programa Universidad Virtual

mil (1000) números enteros y la imprima en orden ascendente y descendente.

Algoritmo:

procedimiento intercambio( referencia x: entero, referencia y:


entero )
variables
/* variable auxiliar para realizar el intercambio */
aux : entero
inicio
/* se almacena el valor de x en la variable aux */
aux x
/* se almacena el valor de y en la variable x */
x y
/* se almacena el valor original de x en la variable y */
y aux
fin_procedimiento

procedimiento ordenar (n: entero, referencia A: arreglo[1000] de


entero)
variables
i : entero
j:entero
inicio
para i desde 0 hasta n-2 haga para j desde i+1 hasta n-1
haga si A[i]>A[j] entonces
intercambio ( A[i], A[j] )
sino
fin_si
fin_para
fin_para
fin_procedimiento

procedimiento escribir_ascendente ( n : entero,


referencia A : arreglo[1000] de entero )
variables
i : entero
inicio
para i 0 hasta n-1 haga escribir A[i]
escribir ” ”
fin_para
fin_procedimiento

procedimiento escribir_descendente ( n : entero,


referencia A : arreglo[1000] de entero )
variables
i : entero
inicio
para i 0hasta n-1 haga escribir A[n-1-i]
escribir ” ”
fin_para
fin_procedimiento

procedimiento leer_arreglo ( referencia n : entero,


referencia A : arreglo[1000] de entero )
variables
i : entero
inicio

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 4) [12/02/2008 12:56:45 a.m.]


Programa Universidad Virtual

/*
las siguientes cuatro lineas son para obtener el numero de
datos a leer. Se controla que no sea un numero invalido
*/
repita
escribir “Ingrese el numero de reales a operar”
leer n
hasta (0 < n n 1000)
/* las siguientes seis lineas leen los n datos a procesar */
para i 0hasta n-1 haga escribir “Ingrese el dato ”
escribir i
escribir “-esimo”
leer A[i]
fin_para
fin_procedimiento

procedimiento principal()
variables
n : entero
A : arreglo[1000] de entero
inicio
leer_arreglo( n, A )
ordenar( n, A )
escribir “Esta es la colección ascendentemente:”
escribir_ascendente( n, A )
escribir cambio_linea
escribir “Esta es la colección descendentemente:”
escribir_descendente( n, A )
escribir cambio_linea
fin_procedimiento

__

FUNCIONES Y

PROCEDIMIENTOS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 4) [12/02/2008 12:56:45 a.m.]


Programa Universidad Virtual

Tabla de contenido

MÓDULO 6: REGISTROS
14. Registros

__

Tabla de contenido

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html [12/02/2008 12:57:20 a.m.]


Programa Universidad Virtual

REGISTROS REGISTROS

REGISTROS

En programación un registro es el concepto que permite representar el


producto cartesiano generalizado, excluyendo los espacios n-dimensionales
que generalmente son representados mediante arreglos. En otras palabras,
un registro es un tipo de dato creado por el programador, compuesto por
otros tipos de datos, ya sean básicos, arreglos, matrices y/o
registros previamente declarados. A cada componente de un registro se
le conoce con el nombre de campo.

Un registro se declara de la siguiente manera:

<nombre> como

<nombre1> : <tipo1>

<nombre2> : <tipo2>

<nombren> : <tipon>

fin_tipo

donde,

<nombre>: es el nombre que se le pone al tipo que se está declarando.

<nombrei> : es el nombre del i-esimo campo del tipo.

<tipoi> : es el tipo del i-esimo campo del tipo.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 2) [12/02/2008 12:57:38 a.m.]


Programa Universidad Virtual

EJEMPLOS.

Ejemplo 1. Estudiante = {(nombre, codigo, notas) | nombre cadena,


codigo Z, notas R5}

Estudiante como

nombre : arreglo[100] de carácter

codigo : entero

notas : arreglo[5] de real

fin_tipo

Ejemplo 2. Caja = RxRxR ={(alto, ancho, largo) | alto R, ancho R, largo R}

Caja como

alto : real

ancho : real

largo : real

fin_tipo

Ejemplo 3. Complejo = RxR = { (x, y) | x R, y R }

Complejo como

x : real

y : real

fin_tipo

__

REGISTROS REGISTROS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 2) [12/02/2008 12:57:38 a.m.]


Programa Universidad Virtual

REGISTROS

Los registros se declaran al comienzo del programa, después de la


declaración de constantes y de la palabra reservada tipos y antes de
la declaración de cualquier función y/o procedimiento. El siguiente
esquema muestra la forma general de un programa escrito en el
pseudo lenguaje utilizado en este curso:

constantes

<declaración constantes>

tipos

<declaración registros>

<declaración funciones y/o procedimientos>

procedimiento principal()

variables

<declaración variables procedimiento principal>

inicio

<algoritmo principal>

fin_procedimiento

Cuando se ha declarado un registro, es decir un nuevo tipo, se pueden


declarar variables del mismo.

EJEMPLOS.

Ejemplo 1. z1 : Complejo. En este caso la variable z1 tiene dos


campos x e y de tipo real.

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (1 of 7) [12/02/2008 12:57:57 a.m.]


Programa Universidad Virtual

Ejemplo 2. x : Caja. En este caso la variable x tiene tres campos de


tipo real, alto, ancho y largo.

Ejemplo 3. e : Estudiante. En este caso la variable e tiene tres campos, el


primero es nombre el cual es de tipo cadena de caracteres de tamaño cien,
el segundo es código de tipo entero y el último es notas que es un arreglo
de tamaño cinco de reales.

Para obtener y/o modificar el valor de cualquier campo de un registro se utiliza


la siguiente notación:

<variable>.<campo>

donde,

<variable> : es el nombre de la variable de tipo registro.

<campo> : es el nombre del campo del registro, del cual


se quiere obtener el valor.

EJEMPLOS.

Ejemplo 1. Si x es una variable de tipo Caja

x.alto := 10 /* modifica el campo alto de x y lo deja en


10 */

x.ancho := (x.ancho / 2.0) /* divide el ancho de la caja x


por dos */

escribir( x.largo ) /* escribe en pantalla el largo de la


caja x */

volumen := x.largo*x.alto*x.ancho /* calcula el volumen de


la caja x*/

Ejemplo 2. Si z1 es una variable del tipo Complejo

norma := z1.x * z1.x + z1.y * z1.y /* calcula la


norma de z1 */

leer z1.x /* lee la parte x del complejo z1 */

escribir z1.y /* imprime la parte y del complejo z1 */

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (2 of 7) [12/02/2008 12:57:57 a.m.]


Programa Universidad Virtual

Ejemplo 3. Si e es una variable del tipo Estudiante

e.notas[0] := dato * 0.15 /* obtiene el 15% de


dato y lo almacena en la primer nota del
estudiante e */

/* las siguientes 5 lineas calculan el promedio de las notas de


e */

promedio := 0.0

para i := 0 hasta 4 hacer

promedio := promedio + e.notas[i]

fin_para

promedio := promedio / 5.0

Como cualquier otra variable, una variable de tipo registro puede ser
pasada como argumento a una función y/o procedimiento por valor o
por referencia.

Ejemplo. Desarrollar un programa que calcule la nota definitiva más alta de


un conjunto de 40 estudiantes, cada uno de los cuales tiene nombre, código y
cinco notas parciales.

Algoritmo:

constantes

/* el numero de caracteres maximo en el nombre */

TAMANO_NOMBRE = 100

/* el numero de estudiantes del curso */

N = 40

/* el numero de notas parciales de cada estudiante */

NUM_NOTAS = 5

tipos

/* El estudiante es un registro con nombre,

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (3 of 7) [12/02/2008 12:57:57 a.m.]


Programa Universidad Virtual

codigo y cinco notas */

Estudiante como

nombre : arreglo[TAMANO_NOMBRE] de caracter

codigo : entero

notas : arreglo[NUM_NOTAS] de real

fin_tipo

/* leer los datos de un estudiante, la variable


e es pasada

por referencia, lo que implica que la variable enviada

como argumento sera modificada */

procedimiento LeerEstudiante( referencia e :


Estudiante )

variables

i : entero

inicio

/* lee el nombre del estudiante */

escribir( “Digite el nombre del estudiante:”)

leer( e.nombre )

/* lee el codigo del estudiante */

escribir( “Digite el codigo del estudiante:”)

leer( e.codigo )

/* lee las cinco notas del estudiante */

para i := 0 hasta NUM_NOTAS-1 hacer

escribir( “Digite la nota ”, i, “-esima del estudiante ”, e.nombre, “:” )

leer( e.notas[i] )

fin_para

fin_procedimiento

/* calcula la nota definitiva de un estudiante,


la variable e

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (4 of 7) [12/02/2008 12:57:57 a.m.]


Programa Universidad Virtual

es pasada por valor lo que implica que la variable enviada

como argumento no sera modificada en esta función */

funcion definitiva( e : Estudiante ) : real

variables

i : entero

promedio : real

inicio

/* suma las notas parciales */

promedio := 0.0

para i := 0 hasta NUM_NOTAS-1 hacer

promedio := promedio + e.notas[i]

fin_para

/* divide la suma de notas parciales por el


numero de notas */

promedio := promedio / NUM_NOTAS

/* retorna la nota definitiva del estudiante */

retornar promedio

fin_funcion

/* calcula el maximo de una colección de N


reales */

funcion maximo( A : arreglo[N] de real ) : real

variables

max : real

i : entero

inicio

max := A[0]

para i := 1 hasta N-1 hacer

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (5 of 7) [12/02/2008 12:57:57 a.m.]


Programa Universidad Virtual

si max < A[i] entonces

max : A[i]

fin_si

fin_para

retornar max

fin_funcion

/* algoritmo principal */

procedimiento principal()

variables

curso : arreglo[N] de Estudiante

definitivas : arreglo[N] de real

i : entero

max : real

inicio

para i := 0 hasta N-1 hacer

escribir(“Datos del estudiante “, i, “-esimo”)

escribir cambio_linea

/* lee los datos del i-esimo estudiantes del curso */

LeerEstudiante( curso[i] )

/* calcula la definitiva del i-esimo estudiante */

definitivas[i] := Definitiva( curso[i] )

fin_para

/* calcula la nota maxima definitiva */

max := maximo( definitivas )

escribir( “La nota maxima definitiva fue: ”, max )

fin_procedimiento

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (6 of 7) [12/02/2008 12:57:57 a.m.]


Programa Universidad Virtual

__

REGISTROS

http://www.virtual.unal.edu.co/cursos/ingenieria/2001839/index.html (7 of 7) [12/02/2008 12:57:57 a.m.]

Das könnte Ihnen auch gefallen