Você está na página 1de 19

4

Todo el mtodo consiste en el orden y la disposicin de los objetos sobre los cuales hay que centrar la penetracin de la inteligencia para descubrir alguna verdad. Nos mantendremos cuidadosamente fieles a l si reducimos gradualmente las proposiciones complicadas y oscuras a proposiciones ms simples, y luego, si partiendo de la intuicin de las que son las ms simples de todas, procuramos elevarnos por los mismos escalones o grados al conocimiento de todas las dems. Ren Descartes Reglas para la direccin de la mente Regla V - 1628. El presente captulo introduce dos elementos clave para disear con xito cualquier programa en la mayora de los lenguajes de programacin: primero, variables y tipos de datos; segundo: instrucciones y estructuras de instrucciones bsicas, y adems, una leve muestra de cmo disponer de los anteriores para resolver problemas tpicos sencillos. Estos elementos condicionan el mtodo algortmico para el trabajo con computadores pues, como se mencion en el captulo 1, uno de sus pasos ms importantes consiste en el establecimiento de relaciones mentales recurrentes entre las incgnitas del problema y precisamente los elementos que se muestran a continuacin, por lo que se recomienda atencin y entrenamiento con este material. El conjunto de estas asociaciones mentales ya era referido en la poca de Descartes como intuicin, trmino que mantiene aun ese significado pero con la adicin de la idea de actividad mental inconsciente. El siguiente material trata de ser independiente de los lenguajes de programacin, si bien est basado en estructuras que estn presentes en la mayora de estos lenguajes, ms no en todos, y se resume en la siguiente frase: un programa est compuesto de constantes, variables, expresiones e instrucciones.

4.1

Datos

En el captulo 2 se mencion que un dato es un elemento que alimenta un algoritmo junto con frmulas y restricciones para resolver incgnitas. La idea de lo que realmente son los datos est relacionada con la idea de que estos representan las propiedades llamadas atributos o caractersticas de una entidad que la distinguen por estar presentes en ella. As, se define en informtica a un dato como un smbolo que representa la descripcin de un atributo. Observe que, segn esta definicin, las incgnitas de un problema tambin entran en la categora de datos, de manera que se utiliza el trmino incgnita para sealar el nombre de un dato de valor desconocido. Existen distintas clasificaciones de datos segn distintos niveles de descripcin: segn su uso, segn su origen, etc. Para los propsitos de este curso se utilizarn dos clasificaciones bsicas: segn la simbologa utilizada y segn la cantidad de informacin que representa. Segn la simbologa utilizada, se tiene que un dato puede ser: - numrico: incluyendo nmeros enteros y reales. - alfanumrico: incluyendo caracteres individuales y cadenas de caracteres. - lgico: representa slo dos valores: verdadero y falso.

definido: palabra que, sin ser un dato alfanumrico, representa un atributo. Segn la cantidad de informacin, se tiene que un dato puede ser: - simple: cuando el dato representa la descripcin de un solo atributo - estructurado: cuando el dato identifica un grupo de atributos que pueden ser manipulados individual o colectivamente.
Actualmente, los lenguajes de programacin extienden estas clasificaciones para ofrecer una mayor cantidad de tipos de datos que se ajustan a necesidades especficas de programacin. Ms adelante se vern las que ofrece Object Pascal.

A PROPSITO

4.2

Constantes

En programacin existen dos clases de constantes: - El dato constante, o simplemente el valor, que es precisamente el smbolo que representa la descripcin de un atributo. As, 20, -562 y 3.141592 son ejemplos de constantes numricas; Hola, prueba y Pascal son ejemplos de constantes alfanumricas y Cierto y Falso, son ejemplos de constantes lgicas.

Pag. 4-2

Cap.4: Elementos Bsicos de Programacin

La constante almacenada, trmino que se refiere a un valor que permanece almacenado en una localidad de memoria identificada con un nombre, permitiendo entonces que ese nombre pueda sustituir al valor en la escritura de programas, al igual que con la variable. Ejemplos de ellas son las constantes pi y e que almacenan 3.14159265358979 y 2.718281828 respectivamente.

4.3.2 Expresiones alfanumricas


Son las que operan y dan como resultado cadenas alfanumricas o caracteres individuales. Normalmente se usan para componer cadenas a partir de otras ms simples, por lo que el nico operador que ofrecen muchos lenguajes es el operador de concatenacin +, aunque si ofrecen una buena cantidad de funciones. Ejemplos de expresiones alfanumricas son: Hola + que tal Esta + es + una + prueba

4.3

Expresiones

En programacin, el concepto de expresin es similar al concepto de expresin en matemticas: una coleccin de operandos y operadores que, una vez evaluada, representa un valor. En matemticas, una expresin se construye con constantes, variables y funciones, combinadas con operadores para producir valores numricos. As, se ve que la siguiente expresin: 10x + sen(x) est formada por la constante 10, la variable x, la funcin sen(x), el operador + y el operador de multiplicacin no mostrado, implcito, de tal modo que si la variable x se sustituye por un valor y con l se evala la expresin, se tendr como resultado otro valor. En programacin, el concepto de expresin se extiende a operandos y operadores no numricos, por lo que se pueden encontrar expresiones alfanumricas que producen caracteres o cadenas y lgicas que producen slo los valores lgicos Cierto y Falso.

4.3.3 Expresiones lgicas


Tambin llamadas predicados, son aquellas expresiones que, una vez evaluadas, slo representan los valores Verdadero y Falso. En su formacin pueden aparecer operandos de cualquier clase combinados con los operadores lgicos AND, OR y NOT y con los operadores de relacin =, <, >, /, y . En la determinacin del valor de certidumbre de la expresin se utilizan las reglas de la lgica formal vistas en el captulo 1. Ejemplos de expresiones lgicas son: -4 < 5 a = z (x 0) and (y 0) ((A B) and not(B C)) or (A = B)
Los operadores lgicos AND, OR y NOT pueden ser escritos usando los smbolos , y respectivamente.

A PROPSITO

4.3.1 Expresiones aritmticas


Son, evidentemente, aquellas que arrojan un valor numrico. Sus operandos son constantes, variables y funciones y sus operadores son los operadores matemticos conocidos. Es conveniente tener en mente que los lenguajes de programacin no ofrecen todos los operadores o todas las funciones que ofrecen las matemticas, por ello se aconseja construir expresiones en formas sencillas an cuando para lograrlo haya que dividirlas en varias partes. Hasta ahora, los computadores se construyen con dos juegos de instrucciones aritmticas similares: uno para nmeros enteros y otro para nmeros fraccionarios o de punto flotante. Por ello, es conveniente que el programador distinga en todo momento entre expresiones enteras y expresiones reales, tratando de cumplir con las normas de compatibilidad que traen todos los lenguajes. Estas normas declaran bsicamente que, con algunas excepciones, valores de distintos tipos no deben mezclarse para formar una expresin. De hecho, muchos lenguajes ofrecen operadores y funciones que atienden esta diferenciacin.
Los lenguajes como Pascal y C permiten A PROPSITO que operandos enteros aparezcan en expresiones reales. Tambin ofrecen mecanismos para transformar enteros en reales y viceversa.

Ejemplo 4-1
La siguiente tabla muestra una serie de variables con valores almacenados:
VARIABLE: VALOR: V1 1 V2 12.5 CH1 Hola CH2 Tu VL1 Cierto VL2 Falso

Con estas variables se pueden formar las siguientes expresiones lgicas, cuyo valor de certidumbre tambin se muestra:
V1 < V2 V1 = V2 NOT (V1 = V2) CH1 = CH2 VL1 = Cierto

Cierto Falso Cierto Falso Cierto

CH1 = Tu NOT (CH2 = Tu) VL1 VL2 VL1 VL2

Falso Falso Cierto Falso Cierto

(V1 = 1) AND (V2 / 10) (V1 < V2) OR (NOT (V2 < 100)) (VL1 VL2) OR NOT (VL2 Cierto)

Cierto Cierto Cierto

En el ejemplo anterior se mostraron expresiones con operandos de igual tipo. En expresiones lgicas pueden aparecer operandos de distinto tipo siempre que se atiendan las siguientes reglas:

Programacin con Delphi

Ing. Jos Ricardo Vargas

Elementos Bsicos de Programacin

Pag. 4-3

trminos unidos por operadores de relacin, deben ser compatibles trminos unidos por operadores lgicos, deben ser lgicos an cuando estn formados por operandos no lgicos.

asigne, haga o calcule y almacene para indicar una instruccin de asignacin.

Ejemplo 4-3
El funcionamiento de la asignacin y la invocacin se ilustra en la siguiente tabla utilizando notacin de diagramas de flujo: A B CH A A 15 A a 3*X+5 A+1 En una variable de nombre A se almacena el valor 15. En una variable de nombre B se almacena el contenido de una variable de nombre A En una variable de nombre CH se almacena el valor a El valor que resulta de evaluar la expresin 3x+5 se almacena en la variable A Al valor almacenado en la variable A se le suma 1 y este resultado se almacena en la variable A sustituyendo el anterior.

Ejemplo 4-2
Tomando las mismas variables del ejemplo anterior, se tiene que las siguientes expresiones no tienen sentido, pues comparan variables de distinto tipo o no compatibles:
V1 = CH1, V1 = VL1, V1 > CH2, CH1 = Cierto V1 es de tipo numrico, CH1 es de tipo alfanumrico y VL1 es de tipo lgico; no se puede comparar un nmero con una palabra o una palabra con un valor lgico. Sin embargo, expresiones complejas pueden ser construidas as: (V1 = 1) AND (CH2 = Tu) AND (VL1 = Cierto)

Cierto

Observe que esta expresin est formada por tres trminos aquellos encerrados entre parntesis unidos por operadores AND y que cada una de ellas tiene un valor de certidumbre:
(V1 = 1) (CH2 = Tu) (VL1 = Cierto)

Numrica Alfanumrica Lgica

Cierto Cierto Cierto

Si una expresin lgica est formada por una variable lgica que se compara con una constante lgica, es suficiente con escribir slo la variable. As, tomando la variable VL1 del ejemplo anterior, se tiene que: (VL1 = Cierto) tiene el mismo valor de certidumbre que VL1

A PROPSITO

4.4

Manipulacin de Variables

Ya se ha dicho que el acto de programar es un acto de manipulacin de variables o, lo que es lo mismo, de los datos almacenados en las variables. Luego, la primera pregunta a responder es: cmo se almacena un valor en una variable? O, dicho de otra forma cules son las maneras de introducir valores en variables y luego acceder a ellos? Pues bien, existen varias formas, algunas de las cuales son: - la asignacin - la invocacin - la entrada de datos - la salida de datos

Observe los dos ltimos ejemplos. En ellos se ilustra el funcionamiento de la instruccin de asignacin cuando en ella aparece una expresin: primero se evala la expresin y luego, el valor resultante se almacena en la variable. As mismo, en el ltimo ejemplo tambin se observa que el valor almacenado en la variable A es utilizado en la expresin y luego sustituido por el valor resultante de la evaluacin de la misma, es decir que si al principio la variable A almacenaba un 15, luego de esa asignacin, almacenar un 16. En la literatura de programacin, se menciona que la asignacin es una operacin destructiva, debido a que cuando se efecta, cualquier valor almacenado previamente en la variable, es sustituido por el nuevo.

4.4.2 Entrada de Datos


Es una operacin en la que una variable recibe un valor proveniente de un dispositivo de entrada como un teclado, un modem, un mouse, etc. o proveniente de un archivo de datos. Generalmente, si un dato proviene de un dispositivo de entrada que proporciona la respuesta directa de un usuario como un teclado, el programa se detiene hasta que el usuario ingresa su respuesta en el dispositivo. Luego de ello, el valor introducido se almacena automticamente en una variable y el programa contina su ejecucin; por ello se habla de leer variables, de hecho, as se nombra la operacin en pseudocdigo. La lectura de datos tambin es una operacin destructiva. El smbolo utilizado en un diagrama de flujo para representar una operacin de entrada desde el teclado es el siguiente:
variable

4.4.1 Asignacin e invocacin


La asignacin es una instruccin que instruye al computador a que tome un valor constante y lo almacene en una variable, as de sencillo. A partir del momento en que se realiza una asignacin, puede utilizarse ese valor almacenado con solo invocar el nombre de la variable, tanto en expresiones como en otras instrucciones. Cuando se utilizan diagramas de flujo, la asignacin se representa con el signo en un bloque de operacin. Generalmente se dibuja esta flecha apuntando de derecha a izquierda. En pseudocdigo, se utilizan palabras como
Programacin con Delphi

Igualmente, si el dato ledo proviene de un archivo, el smbolo es el siguiente:


variable Ing. Jos Ricardo Vargas

Pag. 4-4

Cap.4: Elementos Bsicos de Programacin

Por ltimo, si el dato ledo proviene de otra fuente, el smbolo es el siguiente:


variable

4.5

Instrucciones

En pseudocdigo, simplemente se utilizan palabras descriptivas de cada caso.

4.4.3 Salida de Datos


Es la operacin mediante la cual un dato almacenado en una variable es enviado a un dispositivo de muestra o a uno de impresin o a uno de comunicacin como el monitor, impresora, modem, etc. o a un archivo de datos. Luego de esta operacin, el valor del dato permanece en la variable, es decir, que lo que se enva al dispositivo de salida es una copia del dato. Por ello, la salida de datos no es una operacin destructiva. Los smbolos utilizados en un diagrama de flujo para representar una operacin de salida hacia el monitor, hacia un archivo o hacia un dispositivo no definido o especfico, son, respectivamente, los siguientes:
variable variable variable

Llamadas tambin sentencias por su traduccin en ingls sentences son las rdenes que instruyen al computador para que lleve a cabo ciertas tareas algunas de ellas se vern ms adelante. Una primera clasificacin las divide en los dos siguientes grupos: - Instrucciones que slo manipulan variables. - Instrucciones que alteran la secuencia del programa. Las principales instrucciones del primer grupo ya fueron reseadas en 4.4. Las del segundo grupo sern vistas a continuacin pero antes es oportuno sealar que estas instrucciones, as como esta clasificacin, si bien constituyen slo una parte de todo el espectro de posibilidades que ofrecen actualmente los lenguajes de programacin, son consideradas suficientes para elaborar cualquier programa. Todas ellas tienen su smbolo especfico en los diagramas de flujo.

4.6

Instrucciones de Seleccin

Ejemplo 4-4
Disee un diagrama de flujo que, dadas las coordenadas cartesianas (x, y) de un punto en el plano, determine sus coordenadas polares (r, ). Resp.: Un breve anlisis del problema indica que se tienen dos datos de entrada que se llamarn x e y, introducidos por el teclado, y que se solicitan dos datos de salida o incgnitas, correspondientes a las coordenadas polares del par x,y que se llamarn r y t, y que se mostrarn en pantalla. El nombre de las variables es decisin del programador pero se aconseja utilizar nombres descriptivos de los datos.

INICIO

x, y t r atan(y/x) x 2 + y2 r, t
FIN

Son instrucciones con las que se puede controlar el flujo de ejecucin de un programa mediante la seleccin de un valor que es resultado de la evaluacin de una expresin, generalmente lgica y llamada expresin de control. Son tambin llamadas instrucciones de decisin pues en apariencia, el programa decide cul camino tomar segn el valor de una expresin. Estas instrucciones pueden ser clasificadas segn el nmero de alternativas que ofrece la evaluacin de la expresin de control, de la siguiente manera: - seleccin simple - seleccin doble - seleccin mltiple Seleccin simple: Permite la operacin de una o varias instrucciones slo cuando el valor arrojado por la expresin de control coincide con un valor predeterminado, de lo contrario, el programa sigue su curso normal ejecutando la siguiente instruccin. Dado que generalmente la expresin de control E.C. es una expresin lgica, es ms comn encontrarla en la forma mostrada en (b) de la figura 4.1.

E.C.

v1

E.C.
Falso

Cierto

Instrucciones

Instrucciones

(a)

(b)

(c) Si E.C = Cierto entonces ejecute Instruccin

Figura 4-1 Seleccin simple

Programacin con Delphi

Ing. Jos Ricardo Vargas

Elementos Bsicos de Programacin

Pag. 4-5

Ejemplo 4-5
Disee un algoritmo que imprima el valor absoluto de un nmero ledo del teclado. Resp.: (a)
INICIO

Ejemplo 4-6
Disee un algoritmo que lea un nmero del teclado e imprima la palabra Positivo si ste es positivo o nulo, y que imprima Negativo si el nmero lo es. Resp.: (a)
INICIO

X X X<0
no si no

X
Positivo

X<0

si Negativo

X
FIN FIN

(b)
PASO PASO PASO PASO 1: 2: 3: 4: Lea la variable X Si X<0 entonces haga X = -X Imprima X Fin

(b)
PASO 1: PASO 2: PASO 3: Lea la variable X Si X<0 entonces imprima Negativo Si no, entonces imprima Positivo Fin

Observe que se han utilizado las palabras si y no en lugar de Cierto y Falso en la instruccin de seleccin. Esta es una prctica normal. A veces se utiliza tambin V y F o C y F.

Observe que de nuevo se han utilizado las palabras si y no en lugar de Cierto y Falso en la instruccin de seleccin como si se tratara de una pregunta.

Seleccin doble: Permite la operacin de una o varias instrucciones cuando el valor arrojado por la expresin de control coincide con un valor predeterminado, de lo contrario, permite la operacin de otra instruccin u otro grupo de instrucciones.

Seleccin mltiple: Permite la operacin de varios grupos de instrucciones, seleccionados segn un valor arrojado por la expresin de control. En numerosas ocasiones, la expresin de control no existe como tal sino que es sustituida por una variable o por una expresin aritmtica.
(a)

(a)

E.C.
Falso

Cierto

E.C. Instrucciones A
v1 v2 v3 v4 vi vN

Instrucciones B

Inst.

Inst.

Inst.

Inst.

Inst.

Inst.

Falso

E.C.

Cierto

(b) Segn sea E.C, haga: V1: Instruccin 1 V2: Instruccin 2

Instrucciones B

Instrucciones A

Vn: Instruccin N

Figura 4-3 Seleccin mltiple


(c) Si E.C = Cierto entonces ejecute Instruccin 1 si no, ejecute Instruccin 2

Figura 4-2 Seleccin doble

Existe tambin una forma de seleccin mltiple denominada a veces seleccin triple en la que la expresin de control se reduce a una comparacin de magnitudes entre dos valores, permitiendo que el flujo de control vaya por uno o por otro camino, segn la relacin de tamao que exista entre estos. En este caso, la
Ing. Jos Ricardo Vargas

Programacin con Delphi

Pag. 4-6

Cap.4: Elementos Bsicos de Programacin

expresin de control se escribe X:Y, que se interpreta: cmo es X en relacin a Y.


(a) <

X:Y
=

>

E.C.

Cierto

Instrucciones

Falso

Inst.

Inst.

Inst.

Figura 4-5 Repeticin tpica

(b) Segn sea X:Y, haga: <: Instruccin 1 =: Instruccin 2 >: Instruccin 3

Figura 4-4 Seleccin triple

Ejemplo 4-7
Modifique el diagrama de flujo del ejemplo anterior para que adicionalmente imprima la palabra Nulo si el valor ledo por el teclado es as.
Resp.: (a) INICIO

X
>

X:0
= Nulo

<

Positivo

Negativo

FIN

(b)
PASO 1: PASO 2: Lea la variable X Segn sea X:0 haga: <: Imprima Negativo =: Imprima Nulo >: Imprima Positivo Fin

PASO 3:

4.7

Instrucciones de Repeticin

Son, obviamente, mecanismos que permiten que otras instrucciones se ejecuten un cierto nmero de veces. Se dice mecanismo y no instruccin debido a que un mecanismo de repeticin puede ser implementado con instrucciones de seleccin. Ello no significa que no existan instrucciones dedicadas a ello, pero, es ms fcil comenzar a comprender la repeticin como una implementacin de la seleccin.

Cada vez que se ejecuta la instruccin o el grupo de instrucciones que se repiten, se dice que se ejecuta una repeticin. A cada repeticin se le denomina iteracin, bucle, ciclo o lazo loop en ingls. Observe en la figura anterior que el mecanismo de repeticin se compone de tres elementos: - una instruccin de seleccin que controla el nmero de repeticiones llamada control o comprobacin - un grupo de instrucciones que se repiten. A este grupo a veces se le denomina cuerpo - una transferencia del flujo de control del programa a un punto anterior Observe este ltimo elemento: hasta ahora se haba visto que el flujo de control del programa siempre estaba dirigido de tal manera que toda instruccin se ejecutaba inmediatamente despus de la instruccin anterior y siempre en el sentido desde el inicio y hasta el final. Ahora se ve que tambin es posible dirigir este flujo a cualquier rincn del programa. En pseudocdigo, se escribe como: vaya al paso x. En la figura anterior tambin se observa que despus de cada repeticin se ejecuta la instruccin de seleccin, de modo que el mecanismo da como resultado una sucesin de instrucciones, comprobacin, instrucciones, comprobacin, etc.. Note que el valor de la expresin lgica de esta comprobacin debe cambiar en algn momento, pues de lo contrario las repeticiones seguirn indefinidamente. Debido a ello, el programador debe atender con mucha atencin la siguiente norma: Entre las instrucciones que se repiten, debe haber alguna que modifique el valor de la expresin de control para asegurar la salida oportuna de las repeticiones. Algunos lenguajes tienen instrucciones dedicadas a un tipo especial de repeticin que se ocupan por si solas del cumplimiento de la norma, por lo que el programador puede descuidar la misma. De hecho, Pascal cuenta con una. Existen distintas formas de colocar la instruccin de comprobacin con respecto a las instrucciones que se repiten, ocasionando distintas versiones de un mismo mecanismo, como se muestra en la figura siguiente.

Programacin con Delphi

Ing. Jos Ricardo Vargas

Elementos Bsicos de Programacin

Pag. 4-7

Ejemplo 4-9
Cuerpo E.C.
Cierto Cierto

Cuerpo

E.C.

Falso (a)

Falso (b)

Disee un diagrama de flujo que, dadas las coordenadas cartesianas (x, y) de un punto en el plano, determine sus coordenadas polares (r, ). El diagrama deber poder calcular un nmero no conocido de puntos. Resp.: (a)
PASO 1: PASO 2: PASO PASO PASO PASO 3: 4: 5: 6: Lea X, Y y K Haga T = Arctan(Y/X) Haga R = X 2 + Y 2 Imprima T y R Si K 0 vaya al paso 1 Fin

Figura 4-6 Formas de ciclos

Observe que en (a) de la figura anterior, la expresin de control se evala antes de las instrucciones a repetir, por lo que existe la posibilidad de que esas instrucciones no se ejecuten nunca. En (b) se observa lo contrario, por lo que las instrucciones a repetir se ejecutan al menos una vez.

(b)
INICIO

Ejemplo 4-8
Disee un algoritmo que imprima los nmeros naturales desde 1 hasta 100. Resp. (a):
INICIO

x, y, k t r atan(y/x)
x 2 + y2

N 1 N>100
no si

r, t k=0
si FIN no

N N N+1 (b)
PASO PASO PASO PASO PASO PASO 1: 2: 3: 4: 5: 6: Haga N=1 Si N>100 entonces vaya al paso 6 Imprima N Haga N=N+1 Vaya al paso 2 Fin FIN

Este diagrama es una modificacin del diagrama del ejemplo 4.2, en el que se analizaba un solo punto. Ahora el usuario deber ingresar las coordenadas del punto y un nmero adicional k. Este nmero deber ser cero si se desea terminar con la ejecucin del programa, de lo contrario, cualquier otro nmero provocar la repeticin del programa.

El funcionamiento de este algoritmo es como sigue: A una variable llamada N se le asigna el valor 1. Seguidamente se comprueba mediante una instruccin de seleccin, si el valor almacenado en N es mayor que 100; como obviamente no lo es, entonces ese valor se imprime para luego ser incrementado en una unidad. Este proceso contina hasta que el valor de N es igual a 101, momento en el que la comprobacin har que el flujo de control se dirija hacia el fin del diagrama. En este diagrama, el cuerpo del mecanismo de repeticin est formado por tres instrucciones: la de salida de datos, la asignacin N N+1 y la transferencia hacia el paso 2; observe que la ltima asignacin, por cierto, es la instruccin que modifica el valor de la expresin de control N>100. Si surgiera alguna duda sobre el funcionamiento del diagrama, se sugiere una corrida en fro con un valor mximo ms pequeo, por ejemplo, 10 en lugar de 100.

De los dos ejemplos anteriores se deduce que los mecanismos de repeticin pueden ser implementados conociendo o sin conocer el nmero de veces que se repetir el cuerpo de instrucciones como en el ejemplo 4.6. En los casos en que se conozca, se puede utilizar la instruccin de repeticin, cuya forma es la siguiente:
# NV, VI, VF, INC donde: #= Etiqueta o rtulo indica el nmero de un conector que cierra el esquema cclico NV = Nombre de variable VI = Valor inicial VF = Valor final INC = Incremento de la variable En pseudocdigo: Para NV = VI hasta VF, con INC, haga pasos Xi..Xj Figura 4-7 Instruccin de Repeticin

Programacin con Delphi

Ing. Jos Ricardo Vargas

Pag. 4-8

Cap.4: Elementos Bsicos de Programacin

Tanto VI como VF e INC pueden ser constantes o variables, generalmente enteras. Al ejecutarse esta instruccin, la variable denotada por NV llamada variable de control tomar un valor inicial VI, este valor ser comparado inmediatamente con el valor final VF; si se valor es menor o igual a VF, entonces se ejecutar el cuerpo de instrucciones una vez. Luego, el valor almacenado en la variable ser aumentado en una cantidad dada por INC la cual, por cierto, si es omitida, se supone igual a uno. De nuevo el valor de la variable de control se vuelve a comparar con VF, repitindose todo el proceso hasta que el valor de la variable de control sea mayor que VF. En un diagrama de flujo, el bloque de la instruccin de repeticin se coloca al principio del cuerpo de instrucciones a repetir; el final de dicho cuerpo estar indicado por un smbolo de conexin con un rtulo igual al de la instruccin de repeticin. En pseudocdigo, Xi...Xj denota los pasos que se repiten con esta instruccin.

tiene su propia identidad como instruccin de transferencia incondicional y su uso est actualmente restringido a los pseudocdigos y a algunas situaciones especiales en algunos lenguajes, debido principalmente a dos razones:
1.

2.

Los lenguajes de programacin ofrecen alternativas ms convenientes. Estas determinan la llamada Programacin Estructurada, que busca un mejor aprovechamiento de los recursos del lenguaje y el establecimiento de hbitos de programacin ordenados. Su uso indiscriminado puede resultar en programas excesiva e innecesariamente complicados y difciles de leer, incluso para el autor del programa.

Ejemplo 4-10
Disee un algoritmo que imprima los nmeros naturales desde 1 hasta 100. Resp: (a)
INICIO

De hecho, algunos cursos de programacin prefieren evitar mencionarlo. Sin embargo, a pesar del desarrollo actual de los lenguajes, se mantiene la presencia de esta instruccin como respaldo para solucionar algunas situaciones difciles, sobre todo por programadores novatos. En este curso se tratar de utilizarla racionalmente.
En la literatura de computacin, se encuentra que la combinacin de una instruccin de seleccin con una instruccin de transferencia incondicional, por ejemplo Si E.C. entonces vaya al paso ..., se denomina Instruccin de Transferencia Condicional.

A PROPSITO

10 N,1,100 N 10
FIN

4.9

Construccin de algoritmos sencillos

(b)
PASO 1: PASO 2: PASO 3: Para N=1 hasta 100 repita el paso 2 Imprima N Fin

Con el material visto hasta el momento, puede el lector aventurarse a escribir algoritmos para resolver problemas sencillos. Sin embargo, es conveniente comenzar analizando algunos algoritmos que contienen elementos sealados por la experiencia como tiles en toda clase de programas. Tambin se trata de vencer la resistencia que ofrece toda actividad al ser realizada por primera vez, con la ayuda de ejemplos.

En este diagrama, la variable de control es N, que, por cierto, es la misma que se imprime. El rtulo de la instruccin de repeticin es 10. Este nmero no obedece a ninguna norma especfica. Observe la ausencia de un valor para el incremento, ya que ste es igual a uno. Observe igualmente, cmo se simplifica el algoritmo con el uso de esta instruccin.

4.10 Programas Selectivos


Se comenzar con uno de los problemas ms sencillos de la programacin cientfica: la evaluacin de frmulas matemticas. Un algoritmo que lo resuelve tiene la estructura general de un programa, tal como se presentaba en la literatura de programacin hasta hace relativamente poco tiempo: ENTRADA PROCESAMIENTO SALIDA

La instruccin de repeticin admite modificaciones para usar condiciones distintas de las mostradas anteriormente. Adicionalmente, estas se han implementado en algunos lenguajes. Ms adelante se vern algunas de ellas y particularmente las que ofrece Pascal.

4.8

Transferencia Incondicional

En ejemplos anteriores se pudo observar el uso de una instruccin de la forma vaya al paso ... por su traduccin del ingls GO TO para implementar una estructura de repeticiones. Pues bien, esta instruccin
Programacin con Delphi

Por ejemplo, considere el siguiente problema: elabore un diagrama de flujo para evaluar la funcin y = 0.5x2 + 10x cuyo anlisis es directo: encontrar la incgnita y para un valor ledo de x:

Ing. Jos Ricardo Vargas

Elementos Bsicos de Programacin


INICIO

Pag. 4-9

que el esquema general se modifique para quedar como se muestra:


Entrada

x y 0.5x + 10x y
FIN
2

ENTRADA
Procesamiento Salida

PROCESAMIENTO

SALIDA

No se acostumbra a colocar los mensajes de solicitud de datos en los diagramas de flujo, porque estos se utilizan generalmente en la etapa de diseo de la estrategia general del algoritmo.

A PROPSITO

Pasando a un nivel mayor de complejidad, considere el siguiente argumento: el programa anterior funciona para evaluar un solo valor de x. Si se desea evaluar ms de un valor de x, observe la siguiente modificacin:
INICIO

Un nivel de complicacin adicional se presenta si se quiere evaluar la funcin, pero ahora no en un punto si no en un intervalo, por ejemplo, entre -10 y 10 para valores de x cada 0.1:
INICIO

x, ch x y 0.5x2 + 10x y y x,y


no

-10

0.5x2 + 10x

ch = N
si FIN

x =10
no

si

x
PASO PASO PASO PASO PASO 1: 2: 3: 4: 5: Lea los valores de x y ch 2 Haga y = 0.5x + 10x Imprima y Si ch N vaya al paso 1 Fin

x + 0.1

FIN

Ahora, se hace uso de una variable adicional ch para controlar hasta cundo se ejecuta el programa, a costa de tener que introducir dos datos en lugar de uno en cada ejecucin: el programa se repite hasta que se introduzca el valor N para la variable ch. Por cierto, se ha preguntado por qu un valor como N para la variable ch? Pues porque sta puede ser respuesta a una pregunta como Desea calcular otro valor (S/N)? que comnmente aparece durante la ejecucin de algunos programas con el propsito de que el usuario ingrese una de las letras S o N. De hecho, se puede modificar el pseudocdigo para que quede de la siguiente manera:
PASO PASO PASO PASO PASO PASO PASO PASO 1: 2: 3: 4: 5: 6: 7: 8: Imprima Ingresar valor Lea el valor de x 2 Haga y = 0.5x + 10x Imprima y Imprima Desea calcular otro valor (S/N)? Lea el valor de ch Si ch N vaya al paso 1 Fin

Observe que primero se evala la funcin para un valor de x igual a -10 el valor inicial. Luego se verifica que este valor es igual a 10 el valor final y, si no lo es, se incrementa en 0.1, es decir, que la prxima evaluacin se hace para una valor de x igual a -9.9, luego para -9.8, -9.7, etc. hasta que alcance el valor final. Para finalizar, resulta conveniente que el programador tome en cuenta las siguientes recomendaciones: - Si la frmula a evaluar es larga o complicada, divdala en partes y asigne cada parte a una variable. - Si una variable en una expresin aparece como denominador, evite la posibilidad de divisiones por cero. Esto se hace verificando primero si el valor almacenado en esa variable es nulo. Dado entonces que este diagrama hace uso exclusivo de un esquema de repeticin, tambin puede ser clasificado como un diagrama repetitivo o iterativo.

4.11 Programas Iterativos


La capacidad de los computadores de repetir instrucciones permite resolver problemas que anteriormente resultaban laboriosos y hasta imposibles por la cantidad de operaciones que involucraban. Por ello, la llamada estructura repetitiva se considera uno de los elementos indispensables para elaborar casi cualquier
Ing. Jos Ricardo Vargas

As, parece que el computador estuviera conversando con el usuario, razn por la que a programas as construidos se les denomina conversacionales o interactivos y hacen

Programacin con Delphi

Pag. 4-10

Cap.4: Elementos Bsicos de Programacin

programa y su dominio es indispensable en la preparacin de todo programador.


Se puede observar la existencia de tres estructuras de instrucciones: la estructura secuencial, la estructura selectiva y la estructura repetitiva. Algunas de ellas o todas estn siempre presentes en cualquier programa; de hecho, existe un teorema que dice que cualquier algoritmo puede ser elaborado con estas tres estructuras.

Ejemplo 4-11
Dada la siguiente serie:

A PROPSITO

1 1 1 1 2 = 1+ 2 + 2 + 2 + ....+ 2 6 N 2 3 4
disee un diagrama de flujo para calcular el valor de usando la serie. Detenga el clculo de la misma cuando el ltimo trmino sumado sea menor que 10-6. El diagrama debe contar el nmero de trminos calculados.
Resp:
INICIO

En el apartado anterior se present un ejemplo de algoritmo que hace uso de instrucciones de repeticin. Considere ahora el siguiente ejemplo, donde se presenta un algoritmo para calcular la suma de los primeros mil nmeros naturales:
INICIO

SUM N T 2

1/N2 SUM+T
-6

i S S i
no

1 0 S+i i+1

Inicializacin

SUM
Acumuladora

T < 10

si

Contadora

no

N+1

PI

6 * SUM
PI,N
FIN

i >1000
si

S
FIN

En este ejemplo slo hay dos variables involucradas i y S. Observe que a la variable i se le ha llamado contadora y a la variable S se le ha llamado acumuladora: Una variable contadora tiene un incremento constante durante las repeticiones. Si esta variable est involucrada en la expresin de control de las repeticiones, se dice que el esquema es un esquema iterativo por conteo. Una variable acumuladora tiene un incremento que depende generalmente de una expresin aritmtica, por lo que este incremento no siempre es constante. Cuando la variable acumuladora o alguna parte de la expresin que define el incremento estn involucradas en la expresin de control de las repeticiones, se dice entonces que el esquema iterativo es un esquema de aproximaciones sucesivas. El ejemplo anterior corresponde a un esquema de repeticiones por conteo. El siguiente, corresponde a uno de aproximaciones sucesivas:

Observe en este ejemplo que la variable T, que forma parte de la expresin que define a SUM, es la involucrada en la expresin de control de las repeticiones. La variable N es, en este caso, la variable contadora. Los ejemplos mostrados son, por supuesto, una pequea muestra de las posibilidades que ofrece la programacin. Ms adelante se ofrecen otros ejemplos que pretenden mostrar la metodologa bsica de la programacin aplicada a una diversidad de problemas con el propsito de dar una idea del funcionamiento del mtodo algortmico y de cmo es el proceso de construccin de programas.

Preguntas de repaso
1. Qu representa un Dato? En qu se diferencia de una incgnita? Qu es un atributo? 2. Cmo se clasifican los datos? Describa cada una de las clasificaciones. 3. Qu es una constante? Cuntos tipos de constantes hay? En qu se diferencian? 4. Qu es una expresin? De qu est compuesta? Cuntos valores representa? 5. Cuntos tipos de expresiones brevemente cada uno de ellos. hay? Describa

Programacin con Delphi

Ing. Jos Ricardo Vargas

Elementos Bsicos de Programacin

Pag. 4-11

6. Qu es una expresin lgica? Qu valores representa? Cules son sus operadores? Cules son sus operandos? 7. Se pueden construir expresiones lgicas con operandos alfanumricos? Se puede comparar un operando alfanumrico con otro numrico? 8. Qu es un operando lgico? Con cules operadores pueden unirse operandos lgicos? 9. Cules son las cuatro maneras de manipular directamente valores en variables? 10. Qu es una asignacin? Qu es una invocacin? En qu se diferencian? 11. Puede aparecer una variable en una asignacin y en una invocacin a la vez? 12. Se puede asignar a una variable el contenido de otra variable? Existe alguna restriccin? 13. Por qu se dice que la asignacin es una operacin destructiva? Se puede decir lo mismo de la invocacin? 14. Qu es una operacin de entrada de datos? De cules fuentes pueden provenir los datos? 15. Por qu se dice que la entrada de datos es una operacin destructiva? En qu se diferencia de la asignacin? 16. Es posible que una operacin de entrada de datos detenga temporalmente la ejecucin de un programa? Explique. 17. En qu consiste la salida de datos? Es esta una operacin destructiva? Qu sucede con el valor almacenado en una variable luego de una operacin de salida? 18. Qu es una instruccin? Cmo se clasifican? 19. Qu es una instruccin de seleccin? Cuntas y cules instrucciones de seleccin hay? 20. Describa brevemente la instruccin de seleccin simple. De cul tipo debe ser la expresin de control? 21. Describa brevemente la instruccin de seleccin doble. En qu se diferencia de la seleccin simple? 22. Describa brevemente la instruccin de seleccin mltiple. En qu se diferencia de las anteriores? Qu papel juega y de qu tipo es la expresin de control? 23. Qu es un mecanismo de repeticin? Cmo puede implementarse un mecanismo de repeticin con instrucciones de seleccin? 24. Qu nombres se les da a las repeticiones? De qu elementos de compone un mecanismo de repeticin? 25. Qu condicin debe haber en el grupo de instrucciones para asegurar la salida oportuna de las iteraciones?
Programacin con Delphi

26. Describa brevemente la instruccin de repeticin. 27. En qu consiste la transferencia incondicional? Es aconsejable su uso? 28. En qu consiste la transferencia condicional? Cmo puede utilizarse para implementar mecanismos de repeticin? 29. Qu es un programa interactivo o conversacional? Qu es un programa repetitivo? 30. Qu es una variable contadora? Y una variable acumuladora?

Ejercicios resueltos
x - - x 0 f(x) = 0 x 5 x/ 5 disee un diagrama de flujo para evaluar f(x) en un x. Resp.: Incgnita: el valor de una funcin evaluada en un punto: variable y. Dato: el punto a evaluar: variable x. Frmulas y restricciones: dadas en el enunciado. Idea: Este es un problema que se resuelve mediante un diagrama cuya estructura coincide con la estructura simple de entrada-procesamiento-salida: se lee un valor de x, se evala la funcin segn el intervalo donde est ubicado y se imprime el resultado. El intervalo es ubicado mediante instrucciones de seleccin. Observe que hay cuatro intervalos pero slo tres bloques de seleccin, pues si el punto no est en los tres primeros intervalos, entonces est en el ltimo. 0 sen(x) e(x-1) x4+4 si si si si
INICIO

1.

Dada la funcin

x x < -
no si

x<0
no

si

sen(x)

x<5
no

si

e(x-1)

x+4 x, y
FIN

Ing. Jos Ricardo Vargas

Pag. 4-12

Cap.4: Elementos Bsicos de Programacin

Dados dos puntos en el plano por sus coordenadas (x1, y1) y (x2, y2), disee un diagrama de flujo para calcular la ordenada y correspondiente a una abscisa x situada entre x1 y x2 usando interpolacin lineal. Se debe verificar que x1< x2. Resp.: Incgnita: el valor de una ordenada: variable y. Datos: las coordenadas de los puntos extremos y la abscisa cuya ordenada se busca: variables con nombres similares a los del enunciado. Frmulas: para el clculo de la ordenada: y=m(x-x1)+y1 donde m=(y2-y1)/(x2-x1) Restricciones: por el enunciado, los datos deben cumplir que x1 < x2. Idea: Leer los valores de entrada y verificar inmediatamente si stos cumplen con la condicin x1<x2. De no cumplirse esta condicin se imprime un mensaje de indicacin de error y se invita al usuario a introducir nuevamente los datos. Si se cumple la condicin impuesta, se evalan las frmulas y se imprime el resultado.

2.

Dado un punto en el plano por sus coordenadas (x, y), disee un diagrama de flujo para determinar en cul cuadrante se encuentra. Resp.: Incgnita: un mensaje que indique el cuadrante donde se ubica un punto. Datos: las coordenadas x,y de un punto: variables del mismo nombre. Frmulas: el cuadrante donde se ubica un punto viene dado por el signo de las coordenadas del mismo. Restricciones: Verificar que el punto introducido no sea el 0,0 pues este no se encuentra en ningn cuadrante. Idea: Leer y verificar las coordenadas del punto. Luego, mediante bloques de seleccin, verificar primero el signo de la coordenada x pues l determina si el punto se ubica del lado izquierdo o derecho del eje y. Una posterior verificacin del signo de la ordenada indicar el cuadrante.

3.

INICIO INICIO

x, y x<0
no no si

x1, y1, x2, y2, x x1<x2


si

y<0
no

si

error

y<0
no

si

m y

(y2 y1) (x2 x1)


m(x-x1)+y1 y
FIN

1
FIN

4.

Disee un diagrama de flujo para determinar en cuntos meses se duplica un capital C colocado a un inters anual A, donde A se expresa como porcentaje.

Resp.: Incgnita: el nmero de meses en que se duplica cierto capital: variable M. Datos: El capital inicial y el inters anual: variables C y A respectivamente. Idea: A menos que se indique lo contrario, los problemas que involucran el clculo de capitales, intereses, etc. son problemas de inters compuesto, donde el inters ganado en una unidad de tiempo, se agrega al capital. Por lo tanto, este inters agregado tambin ganar intereses, lo que har que el capital aumente con el tiempo. Ahora bien, dado que el inters del enunciado es anual, ste
Programacin con Delphi Ing. Jos Ricardo Vargas

Elementos Bsicos de Programacin

Pag. 4-13

debe ser convertido en inters mensual variable AM para que el clculo del capital mensual se lleve a cabo con la siguiente frmula: Capital = Capital ant + (Capital ant AM/100) donde Capital ant es el capital del mes anterior. Entonces, el problema se reduce a calcular, mes por mes, el capital acumulado y compararlo con el doble del capital inicial hasta que esta cantidad se alcance, lo que establece un esquema repetitivo. Por ejemplo, suponga un capital inicial de 1000 Bs y un inters anual de 12%, en esas condiciones el inters mensual ser de 1% y el capital acumulado en los primeros cuatro meses ser: C1 = 1000 + (1000 1/100) = 1100 C2 = 1100 + (1100 1/100) = 1111 C3 = 1111 + (1111 1/100) = 1122.11 C4 = 1122.11 + (1122.11 1/100) = 1133.33 Estos clculos se repiten hasta que se alcance o se sobrepase la cantidad de 2000 Bs. En cada clculo se incrementa el valor de la variable M para imprimirlo una vez finalizado el grupo de clculos.
INICIO

Restricciones: Los cuatro datos ingresados deben ser numricos. Idea: Leer e imprimir inmediatamente los cuatro valores. Comparar sucesivamente el primer valor con el segundo. ste con el tercero y este otro con el cuarto. En cada caso, si el primer valor es mayor que el siguiente, estos se intercambian utilizando una variable auxiliar AUX por qu?. Cada intercambio provoca el valor 1 en una variable FL cuyo propsito es indicar que hubo un intercambio pues, cuando no se realicen ms intercambios, las cuatro variables contendrn nmeros ordenados y el proceso deber terminar. Es una prctica comn utilizar esta clase de variables, denominadas "banderas" por flag en ingls, para indicar en algn lugar de un programa, que ha ocurrido un suceso.

INICIO

A, B, C, D A, B, C, D FL 0
si Aux

C, A CA AM M CA C A/12 1
no

A>B
no

Aux

FL

B>C
no

si Aux

Aux

FL

C>D
no

si Aux

Aux

FL

CA+(CA*AM/100) CA/2*C
si no

FL=0
si

M+1

A, B, C, D
FIN

M
FIN

Disee un diagrama de flujo para ordenar en forma creciente cuatro nmeros. Resp.: Incgnita: el contenido de cuatro variables numricas, impreso en orden creciente. Variables A, B, C y D. Datos: cuatro nmeros ingresados sin orden entre si. Variables A, B, C y D. Frmulas: no es necesaria ninguna frmula..

5.

Programacin con Delphi

Ing. Jos Ricardo Vargas

Pag. 4-14

Cap.4: Elementos Bsicos de Programacin

Disee un diagrama de flujo para encontrar los nmeros primos comprendidos entre 2 y 1000. Resp.: Incgnita: la lista de los nmeros primos comprendidos entre 2 y 1000. Datos: no se consideran datos de entrada. El algoritmo generar los resultados. Restricciones: los resultados deben ser menores que 1000. Idea: generar, mediante una variable contadora N, todos los nmeros enteros a partir de 3 ya que se sabe que 2 es primo. Cada valor que tome N ser analizado para determinar si es primo. Dado que, por definicin, un nmero primo slo es divisible entre s mismo y la unidad, el anlisis se reduce a investigar si N es divisible por algn nmero situado entre 2 y N . Si resulta que no es divisible por alguno de esos nmeros, entonces se imprime. En este ejemplo, la prueba para saber si un nmero es divisible entre otro se lleva a cabo mediante el operador mod, que devuelve el resto de la divisin entre dos operandos. Si el resto de la divisin entre N y J es nulo, entonces N es divisible entre J y, por lo tanto, no es primo.
INICIO

6.

Disear un diagrama de flujo para encontrar los nmeros capicas de tres cifras. Resp.: Incgnita: la lista de los nmeros comprendidos entre 100 y 999 que sean capicas. Datos: no se consideran datos de entrada. El algoritmo generar los resultados. Restricciones: los resultados deben ser mayores que 99 y menores que 1000. Idea: se presentan dos soluciones. Primera: similar al problema anterior, genera mediante una variable contadora N, todos los nmeros enteros entre 100 y 999. Cada uno de estos valores es analizado para determinar si es capica extrayendo los dgitos de la unidad y de la centena pues, si stos son iguales, el nmero es capica. La segunda solucin no genera todos los nmeros enteros entre 100 y 999 sino aquellos que son capicas al formarlos con un dgito variable K que se repetir a propsito en la unidad y en la centena. Nota: en este y en los siguientes diagramas, x significa parte entera de x.

7.

a) INICIO

b) INICIO

2 N J M 3 2 C N mod J
si no

K J

100
K/10

K J A

1 0

K-(J*10)
K/100

K+(J*10)+(K*100) A J
no

M=0
no

A=C
si

J+1

J
si

J+1 K
no

K K+1

J = 10
si

J N
no

K
no

K+1

N N
no

K =1000
si FIN

K =10
si FIN

N+1

N/1000
si FIN

Programacin con Delphi

Ing. Jos Ricardo Vargas

Elementos Bsicos de Programacin

Pag. 4-15

Tres nmeros naturales A, B y C forman una terna pitagrica cuando entre ellos se cumple la relacin A2+B2 = C2. Disee un diagrama de flujo para determinar todas las ternas pitagricas tales que A1000 y B1000. Resp.: Incgnita: la lista de todas las ternas pitagricas tales que A1000 y B1000. Datos: no se consideran datos de entrada. El algoritmo generar los resultados. Restricciones: tanto A como B deben ser menores o iguales que 1000, no as el nmero C. Idea: es evidente que en el dominio de los nmeros reales, cualquier combinacin de A y B producir una terna pitagrica real. Aqu se buscan aquellas que produzcan un nmero C entero, para lo cual simplemente se generan todas las posibles combinaciones de A y B y se analiza el resultado para determinar si ste es entero.
INICIO

8.

9.

Disee un diagrama de flujo para determinar los nmeros naturales de tres cifras que no tengan dgitos repetidos. Resp.: Incgnita: una lista de los nmeros naturales de tres cifras sin dgitos repetidos. Datos: no se consideran datos de entrada. El algoritmo generar los resultados. Restricciones: los resultados deben ser mayores que 99 y menores que 1000. Idea: igual que los anteriores, para resolver este problema se aplica el esquema de generar todos los nmeros comprendidos en el intervalo y verificar cada uno de ellos. Si cumple con la condicin, se imprime, de lo contrario, se pasa al siguiente. En este caso se deben aislar los dgitos que forman el nmero para ver si son iguales.

INICIO

A B C

1 1
A 2 + B2

K A B
si

100
K/100

K/10-(A*10)

C= C
no

A,B,C

K-(A*100)-(B*10)

A
si

A+1

(A=B) (B=C) (A=C)

no

A1000
no

si

B A 1
si

B+1
no

K+1
si

B1000
no FIN

K>999

FIN

Programacin con Delphi

Ing. Jos Ricardo Vargas

Pag. 4-16

Cap.4: Elementos Bsicos de Programacin

10. Disee un diagrama de flujo que lea N nmeros y determine el mayor. Considere que N no es conocido. Resp.: Incgnita: el mximo valor de una serie de nmeros ledos por el teclado y la cantidad de estos. Datos: una serie de nmeros cuya cantidad no se conoce. Restricciones: no hay restricciones para los datos. Idea: Leer el primer nmero y suponer que este es el mayor. Luego, leer los siguientes acompaando cada uno de otro nmero distinto de uno. Este otro nmero es una bandera para indicar el fin de la lista pues cuando el usuario lo desee, lo indicar ingresando un 1 junto al ltimo nmero de la lista. Cada valor ingresado es comparado con el mayor para sustituirlo si alguno resultara mayor. Un contador N lleva la cuenta de los nmeros ingresados.
INICIO

Num Max N Num 1

11. Dada la funcin f(x) = x2-3x-14, disee un diagrama de flujo para verificar si sta cambia de signo en el intervalo [-5, 5]. Utilice incrementos de 0.1. Resp.: Incgnita: un mensaje que indique si la funcin cambia de signo en el intervalo. Datos: no habr datos de entrada. Se conoce la funcin y el intervalo. Restricciones: se debe evaluar la funcin cada 0.1 unidades de abscisa. Idea: evaluar la funcin para los puntos de abscisa comprendida en el intervalo, comenzando con el menor valor de ste. En cada evaluacin se verificar si la funcin es negativa o positiva. De ser positiva, el valor de una variable XP, que inicialmente es nulo, se transforma en 1. Igualmente, si en alguna parte del intervalo la funcin es negativa, el valor de otra variable XN pasar tambin a ser 1. Si en algn momento de estas evaluaciones las dos variables, XP y XN son iguales, entonces hubo un cambio de signo en el intervalo, lo cual se indica con un mensaje y se concluye la ejecucin del programa.
INICIO

X XP XN Y

-5 0 0

Num, Fl N N+1
no

X2-(3*X)-14 Y< 0
no si

Num>Max
si

XN

Max
no

Num

XP Fl=1
si

1
Si cambia de signo

N, Max
FIN

XP0 XN0 no

si

X/5
no

si

No cambia de signo

X+0.1

FIN

Programacin con Delphi

Ing. Jos Ricardo Vargas

Elementos Bsicos de Programacin

Pag. 4-17

12. Un caracol cae en un pozo de H metros de profundidad. Durante el da asciende Ld metros, pero durante la noche resbala y desciende Ln metros. Disee un diagrama de flujo que, simulando el movimiento del caracol, calcule el nmero de das, horas, minutos y segundos que necesita para salir del pozo. Resp. Incgnitas: DIAS, HORAS, MIN, SEC. Datos: H, LD, LN Idea: Una variable acumuladora (A) llevar la cuenta de la distancia ascendida por el caracol cada 24 horas comparndola con la altura del pozo. Al mismo tiempo, otra variable (S) acumular el tiempo transcurrido en bloques de 12 horas convertidos en segundos. Una vez se haya superado la altura del pozo, se desecha la fraccin del da que sobra y el resto se transforma en das, horas, minutos y segundos con una serie de frmulas que el estudiante debe verificar. OJO: Se supondr que los datos de entrada son correctos: reales positivos tales que Ld>Ln y Ld<H.
INICIO

13. Disee un diagrama de flujo para calcular el factorial de un nmero.


INICIO

Num Max Num


si

N=0 N=1 no

Fact

Fact A Fact

N N-1 Fact*A

A=1
no

si

1
S A S - 43200 A - LD

N, Fact
FIN

A-1

H, LD, LN S A S A 0 0

S S+(H-A)*43200/LD

S+43200
DIAS S / 86400

A+LD A /H
no si HORAS (S-DIAS*86400)/3600

14. En un tablero de ajedrez se coloca un grano de arroz en la primera casilla, en la segunda se coloca el doble de granos que en la anterior y se contina as hasta completar la totalidad del tablero. Disee un diagrama de flujo para imprimir una tabla donde cada lnea contenga el nmero de la casilla, el nmero de granos de esa casilla y la suma de los granos acumulados hasta esa casilla.
INICIO

1
S S-DIAS*86400-HORAS*3600 MIN S / 60 S-MIN * 60

S C Gr S

0 1 1 S+Gr

S A

S+43200 A - LN

SEG

DIAS, HORAS, MIN, SEG


FIN

C, Gr, S C = 64
si

Nota: En los siguientes problemas se da el diagrama de flujo resuelto. Se pide al estudiante, el anlisis del mismo incluyendo la idea que conduce al algoritmo.

no

C Gr

C+1 2*Gr
FIN

Programacin con Delphi

Ing. Jos Ricardo Vargas

Pag. 4-18

Cap.4: Elementos Bsicos de Programacin

15. Disee un diagrama de flujo que lea un nmero real y determine el nmero de cifras enteras y el nmero de cifras decimales que lo forman.
INICIO

1 T PD*J T = T
no si

comunican a otras tres y no lo vuelven a comentar, y as sucesivamente. Disee un programa que, siguiendo el proceso de propagacin, determine en cuntos meses se entera del mismo una poblacin de N habitantes.
INICIO

R NE N PD ND J
log R +1 R

N P M S 1 0 0 S+P S>N
no si

ND

ND+1

R-N 0 10ND 1 NE, ND


FIN

M
FIN

M P

M+1 P*3

16. Disee un diagrama de flujo que para calcular nmeros combinatorios. Estos tienen la forma:
m! m = n n! (m n)!
INICIO

1 (P+J)>M
no no si

M, N

18. Sabiendo que una pareja de conejos da origen a otra pareja cada mes a partir de los dos meses de vida, disee un diagrama de flujo para determinar cuntas parejas habr al cabo de N meses si se parte de una pareja recin nacida. Considere que la mortalidad de los conejos en esos meses es nula.
INICIO

M>0 N>0 M>N


si

P1 P2 J

P1*(P+J) P2*J J+1

N C1 1 C2 1 PC 1 MES 1
si

M-N
si

P<N
no

N COMB P1/P2

P1 P2 J 1

1 1 1

MES=N COMB
FIN no

PC MES C1 C2

C1+C2 MES+1 C2 PC

PC
FIN

17. Una persona se entera de un secreto y al cabo de un mes lo comunica a otras tres personas, sin volverlo a comentar. Cada una de esas tres personas conserva el secreto durante un mes, al cabo del cual lo
Programacin con Delphi

Ing. Jos Ricardo Vargas

Elementos Bsicos de Programacin


x 3 x 5

Pag. 4-19

19. Dada la siguiente serie: S = x +

3!

5!

+ ...

disee un diagrama de flujo que calcule el valor de S para un valor de x ledo. Detenga el clculo de la serie cuando el ltimo trmino sumado sea menor que un valor EPS, tambin ledo como dato. El proceso no debe llevar ms de 100 iteraciones.
INICIO

1 J K S J+1 K+2 S+T

X, EPS S J K F F T X 1 3 1

K*(K-1)*F XK / F

(T<EPS) (J>100) no

si

S
FIN

Ejercicios Propuestos
1. Escriba un algoritmo que lea tres argumentos numricos y halle la diferencia entre el mayor de los tres y el menor de los tres. 2. Escriba un diagrama de flujo que, dada una hora en horas, minutos y segundos, de 0 a 12, calcule el ngulo que formaran en un reloj de agujas la horaria con el minutero y el minutero con el segundero. 3. El algoritmo de Euclides para hallar el mximo comn divisor de dos nmeros n y m, indica que si m es divisor de n, entonces la respuesta es m. De lo contrario, la respuesta es que es el mximo comn divisor de (n mod m) y m. Escriba un diagrama de flujo para hallar el MCD de dos nmeros enteros usando este algoritmo y para hallar el mnimo comn mltiplo MCM de estos, sabiendo que: MCM(n, m) MCD(n, m) = n m 4. Modifique el problema resuelto n 18 para tomar en consideracin que cada conejo muere a los nueve meses de vida. 5. Calcule el valor de mediante la siguiente serie:
Programacin con Delphi

1 1 1 2 + 2 + 2 + ..... = 8 32 5 7 Detenga el clculo de los trminos cuando alguno de ellos sea menor que 10-8 o se alcancen 50 iteraciones. 6. Un nmero natural es perfecto si la suma de sus divisores, excepto l mismo, es igual al mismo nmero. Escriba un diagrama de flujo que determine si un nmero es perfecto. 7. Escriba un diagrama de flujo que determine los nmeros perfectos menores que 10000. 8. Dos nmeros naturales son amigos si la suma de los divisores de uno, excepto l mismo, es igual al segundo y viceversa. Escriba un diagrama de flujo que determine si dos nmeros son amigos. 9. Escriba un diagrama de flujo que calcule las parejas de nmeros A y B que sean amigos tales que A<10000 y B<10000. 10. Escriba un diagrama de flujo que multiplique dos nmeros enteros mediante la multiplicacin rusa. sta sucesivamente multiplica por 2 al multiplicando y divide entre 2 al multiplicador hasta que este ltimo toma el valor 1. El producto de los dos nmeros es la suma de los multiplicandos que corresponden a los multiplicadores impares. 11. Escriba un algoritmo que determine los puntos de coordenadas enteras situados dentro de un crculo de radio R centrado en el origen. 12. En un concesionario de autos se usa una codificacin para identificar lo que se vende as: 1 si es un auto nuevo, 2 si es un auto usado y 3 si es un repuesto. La comisin de los vendedores se ha establecido as: 5% del precio de venta de un auto nuevo hasta un mximo de 1.000.000 Bs, 7% del precio de venta de uno usado hasta un mnimo de 70.000 Bs y 8% en repuestos. Disee un algoritmo que lea un cdigo y un precio y calcule la comisin correspondiente. 13. Una asociacin de profesionales exige a sus miembros el pago de una cuota anual que depende del sueldo del profesional y que se ha establecido de la siguiente manera: 1+
Sueldo mensual Bs. Cuota Anual Bs.

Menos de 750.000 Entre 750.000 y 1.500.000 Ms de 1.500.000

90.000 90.000 + (1% del excedente sobre 750.000) 120.000 + (1.5% del excedente sobre 1.500.000)

Escriba un algoritmo que lea un valor de Sueldo y calcule la correspondiente cuota anual.

Ing. Jos Ricardo Vargas

Você também pode gostar