Date post: | 08-Feb-2016 |
Category: |
Documents |
Upload: | carlos-vijil |
View: | 1,173 times |
Download: | 247 times |
UNIVERSIDAD TECNOLOGICA CENTROAMERICANA
UNITEC
METODOLOGIA DE LA PROGRAMACION
SEGUNDA EDICION
REVISADA
Ing. Rosbinda Pacheco Banegas
Lic. Alex R. Tábora Rivera
ESCUELA DE CIENCIAS DE LA COMPUTACION
Y TELECOMUNICACIONES
2007
ii
Título: Metodología de la Programación segunda edición, 2005.
Revisión y reimpresión, 2007.
Autora: Ing. Rosbinda Pacheco Banegas.
Autor de la primera edición: Lic. Alex Tábora Rivera.
Producción de la Escuela de Ciencias de la Computación y Telecomunicaciones. Revisión Técnico-educativa: Lic. Alex Tábora Rivera. Ing. Julio Figueroa. Derechos Reservados: EDUNITEC.
Asesoría Tecno-Pedagógica. Lic. Martha I. Zepeda. Diseño Gráfico Alejandro José López 005.1 P.116 Metodología de la Programación
Prohibida su reproducción sin permiso expreso de UNITEC © EDUNITEC, Tegucigalpa Honduras 2007
SOBRE LOS AUTORES
a Universidad Tecnológica Centroamericana presenta como un logro más de la
producción de su personal docente, la segunda edición del texto “Metodología de la
Programación” a cargo de la Ing. Rosbinda Pacheco Banegas, siendo la primera edición del
mismo de la autoría del Lic. Alex R. Tábora Rivera (1991).
Rosbinda Pacheco Banegas. La Ing Rosbinda Pacheco Banegas se graduó en la Universidad Nacional Autónoma de
Honduras (UNAH) de la carrera de Ingeniería Química Industrial, y actualmente estudia la
Licenciatura en Administración Industrial y de Negocios en la Universidad Tecnológica
Centroamericana (UNITEC-Laureate Internacional Universities)
Por más de 20 años, la Ing. Pacheco ha sido Docente Titular en el área de Programación a
nivel universitario, habiéndose iniciado en esta área, como discípula del Lic. Alex Tábora
R. reconocido estudioso investigador de la enseñanza de la Programación.
Laboró como docente de Matemática en la UNAH. Se desempeño como asistente del
Gerente de Planta en la Cervecería Hondureña S. A.
En su carrera como docente ha impartido clases en el área Econo-Administrativa,
coordinando Precálculo para Ciencias Económicas, en el área Físico Matemática impartió
Algebra, Cálculo y Programación para Ingeniería. Participó en cursos y proyectos sobre
informática educativa, además fue Coordinadora Administrativa del Centro de Cómputo del
Departamento de Matemática de la UNAH.
Realizó estudios en la Licenciatura de Matemática (UNAH), con orientación en
computación, y en Informática educativa en Murcia España.
Desde 1994 labora en la Universidad Tecnológica Centroamericana (UNITEC), y
actualmente es coordinadora del área de Programación I y II.
Su vocación como formadora, y dedicación a enriquecer el acervo académico del libro con
el que ya se contaba: “Metodología de la programación, Primera edición”, la motivó a
emprender este proyecto: “Metodología de la programación, Segunda edición”, para
L
ii
aprovechar todas su experiencia con la primera edición y procesar toda la retroalimentación
obtenida todos estos años.
La Ing. Pacheco no sólo ha sobresalido por sus excelentes técnicas pedagógicas, sino que
también por el trato especial con los alumnos. Ella también ha entrenado a muchos de sus
colegas para impartir clases de Programación, enseñándoles paso a paso y con paciencia las
mejores técnicas para poder transmitir y desarrollar de una forma eficaz el pensamiento
lógico que el estudiante necesita para lograr el éxito en la programación de algoritmos
Alex Tábora Rivera
El Lic. Alex Tábora Rivera obtuvo su Bachillerato Universitario en Matemática en la
Universidad Nacional Autónoma de Honduras (UNAH) y su Maestría en Ciencias en
Estadística Matemática en el Centro Interamericano de la Enseñanza de la Estadística
(CIENES) en Chile.
El Lic. Tábora se ha desempeñado como Programador y Analista de Sistemas
Computacionales, desde 1974, en proyectos y oficinas tanto del sector privado como
público.
Desde 1976, ha sido profesor de programación y de cursos afines en distintas universidades
del país. Fue coordinador de la Sección de Computación de la Universidad Nacional
Autónoma de Honduras, e introdujo la reforma de la enseñanza de la programación. Desde
1992 ha estado dictando cursos de programación en UNITEC.
El Lic. Tábora siempre se ha distinguido por su creatividad y su deseo de innovación en el
área de Programación, y por iniciativa de él se dieron los primeros pasos, que ahora se
plasman en esta segunda edición.
Licda. Alejandra B. de Guardado.
DEDICATORIAS De los autores:
Dedicamos este libro a la Lic. Norma Ponce de Sánchez quién creyó en este proyecto
De Ing. Rosbinda Pacheco Banegas:
A nuestro buen Dios, creador del universo y de quién proviene
toda ciencia y conocimiento.
A mi amado esposo: Augusto César Antúnez Ferrera.
A mis tres hijos
Aida Alejandra
Augusto César
Rosbinda
Por su apoyo y comprensión en todo el tiempo dedicado a este proyecto.
A mi padre (†)
A mi madre
A mis familiares y amigos(as)
A mis alumnos y ex-alumnos.
AGRADECIMIENTOS:
A la Lic. Karla Ramírez y a la Ing. Jessy Ayestas
Por su colaboración en el diseño y conceptualización de varios ejemplos desarrollados.
i
EL PRINCIPIO DE LA SABIDURIA ES EL TEMOR DE JEHOVA
i
Indice General
Introducción v Capítulo 1 Elementos de lógica Matemática 1
1.1 Proposiciones 1
1.2 Operadores Lógicos y Tablas de Verdad 7
La Negación (no) 7
La Conjunción (y) 9
La Disyunción (o) 10
1.3 Tautologías, Contradicciones y Equivalencias 16
1.4 Notación Booleana 21
Capítulo 2 Concepto de Computador y almacenamiento 23
2.1 Concepto de Von Neumann y de Programación 23
2.2 Concepto de almacenamiento y variable 26
2.3 Concepto de Asignación 30
2.4 Condiciones y su Evaluación 38
Capítulo 3 Técnica de Desglose 43
3.1 Introducción al Análisis de un Programa Objeto del Programa 43
3.2 Resumen del Análisis de acuerdo al modelo Von Neumann 46
3.3 Elementos en el Análisis de un P.O.P. Parte I 49
3.4 Desgloses y Pruebas de escritorio 59
3.4.1 Desgloses en Secuencia 60
3.4.2 Desglose con instrucciones de Decisión 72
3.4.3 Desglose con instrucciones de Repetición 83
ii
3.5 Elementos en el Análisisde un P.O.P. Parte II 98
3.5.1 Diagrama de Arbol de Decisiones 98
3.5.2 Repetición con Decisiones Anidadas 104
3.6 Concepto de Algoritmo 116
Capítulo 4 Fundamentos de Programación Estructurada 119
4.1 Concepto de Sistema 119
4.2 Bloques estructurados atómicos e introducción a la Notación de Diagrama de Flujo 121
4.3 Introducción al Seudocódigo Nolae con los B.e.a 126
4.4 Algoritmos seudocodificados con Concatenación 126
4.5 Algoritmos seudocodificados con Decisión 131
4.6 Algoritmos seudocodificados con Repetición 136
4.7 Diagramas de Flujo con Algoritmos Estructurados 144
4.8 Relación entre Desgloses, Algoritmos, Diagramas 149
4.9 Centinelas, Contadores Acumuladores 151
4.9.1 Centinelas 151
4.9.2 Contadores 153
4.9.3 Acumuladores 162
4.9.4 Repetición controlada por contador 167
Capítulo 5 Estructuras Derivadas 179
5.1 Asociatividad de la concatenación 179
5.2 Variantes y derivadas de la Decisión 181
5.2.1 La Decisión Abreviada 181
5.2.2 Las Decisiones anidadas y las decisiones Concatenadas 183
5.2.3 Bloque Caso 188
5.3 Variantes y derivadas de la Repetición 202
5.3.1 Bloque Para 202
5.3.1.1 Aplicaciones con: Contadores y Acumuladores 203
5.3.1.2 Aplicaciones: Sucesiones 208
5.3.1.3 Aplicaciones: Series Finitas 213
iii
5.3.2 Bloque repita-Hasta 221
Capítulo 6 Subalgoritmos y Arreglos (elementos de estructura de datos) 229
6.1 Subalgoritmos 229
6.2 Menús, una aplicación de los Subalgoritmos 234
6.3 Diagrama Jerárquico de procedimientos 250
6.4 Arreglos Unidimensionados 258
6.4.1 Operaciones con Arreglos 260
6.4.2 Arreglos Paralelos 266
6.4.3 Arreglos y subalgoritmos 272
APENDICES
A Ejercicios de las secciones: 2.2 a la 4.6 279
B Ejercicios de las secciones 4.7 a 5.2 289
C Ejercicios de las secciones 5.2 a 6.3 299
D Ejercicios de la sección (arreglos) 6.4 305
E Variantes en la resolución de algunos ejemplos y 307 Algunos ejercicios clásicos
Prácticas de Auto-evaluación, (lógica y tres parciales) 315
F Práctica de Laboratorio 01 Lenguaje de programación ADA95 321
G Listado de los ejemplos utilizados en los Capítulos 3 al 6 327 BIBLIOGRAFIA 331
iv
EL CORAZON DEL ENTENDIDO ADQUIERE SABIDURIA;
Y EL OIDO DE LOS SABIOS BUSCA LA CIENCIA
v
INTRODUCCION
La primera computadora fue construida a mediados del siglo pasado, y a comienzos del
siglo 21 el uso de la computadora se ha extendido prácticamente a todas las áreas del
quehacer humano. Científicos y artistas, ingenieros y abogados, administradores y médicos,
por mencionar algunos, hacen uso directo e indirecto de las computadoras. La expansión
del Internet a casi todos los rincones del planeta ha marcado un hito en la historia
tecnológica de la humanidad y ha permitido que millones se comuniquen diariamente
gracias a la existencia de las computadoras personales.
Ahora bien, para que la computadora pueda realizar una tarea es necesario que se le
proporcionen instrucciones de antemano, a esto le llamamos “programar la computadora”.
La interrogante común de los estudiantes es “¿Cómo comienzo a escribir un programa?”.
Este libro ha sido escrito para responder esa pregunta.
Al abordar la tarea de producir un programa lo primero que se tiene que hacer es analizar el
problema que la computadora va a resolver o la tarea que va a realizar, luego diseñar una
estrategia de solución para preparar un plan del programa. Todos estos pasos requieren
únicamente del conocimiento de los conceptos básicos de programación y de la
metodología correspondiente que se aprenderá al estudiar este material. Por lo que
cualquier estudiante con cierta experiencia en Álgebra y con suficiente ejercitación puede
llegar a ser capaz de producir programas de dificultad media.
No todas las carreras universitarias requieren profundizar en la programación. Para estos
estudiantes no es necesario llegar a ser un programador experto para aprovechar las
ventajas que ofrece un computador. Sin embargo, el conocer los principios de
programación le permite a este futuro profesional universitario tener una visión más
completa del trabajo que se realiza con las computadoras, le permite poder comunicarse con
los expertos y conocer el potencial y limitantes de la computadora como una herramienta de
trabajo. Le enriquece, en fin, sus perspectivas para la acertada toma de decisiones en cuanto
al área de computación se refiere.
El contenido del libro y su desarrollo están orientados para continuar con el aprendizaje de
un lenguaje (PASCAL, ADA 95, etc.); sin embargo, dicho contenido es independiente de
vi
cualquier lenguaje de programación. Más aun, la presentación del material permite que el
estudiante adquiera los conocimientos y destrezas fundamentales para aprender a programar
en cualquier lenguaje estructurado (y aún no estructurado).
Así que, el objetivo primordial de este libro, es el de preparar al estudiante en una
metodología que le permita analizar un problema de programación de computadoras, y
desarrollar la “lógica” del programa como paso previo a la codificación.
El Capítulo 1 presenta únicamente aquellos conceptos y terminologías elementales de la
lógica matemática requeridas en los capítulos siguientes.
En el Capítulo 2 se desarrollan los conceptos básicos de computador, almacenamiento y
variables, con énfasis en la asignación.
El tema de la técnica de desglose se trata en el Capítulo 3. En la PARTE I de éste, se
comienza con una introducción al análisis de problemas, como un paso previo para preparar
un plan del programa que contribuirá a resolver el problema propuesto y se presentan
además las estructuras básicas de la programación. En la PARTE II se introduce el uso de
Arboles de decisión como una valiosa herramienta de ayuda.
En los Capítulos 4 y 5 se presentan los fundamentos de la programación estructurado por
medio de los diagramas de flujo y el seudocódigo NOLAE. En el desarrollo de estos temas
importantes, se acentúa el aspecto conceptual sin descuidar la aplicación práctica. Se
presentan además variantes de la decisión y de la repetición que permiten enriquecer las
maneras de abordar y resolver problemas de mediana dificultad.
Los subalgoritmos son tratados en el Capítulo 6, se usan los menús como ejemplo de su
aplicación. También se incluye el inicio del estudio de los arreglos con las operaciones de
los arreglos manejadas por subalgoritmos.
Los Apéndices A, B, C, D presentan ejercicios para las distintas secciones del libro. El
Apéndice E presenta métodos alternativos de abordar algún tipo de ejercicios, y la
resolución de ejercicios típicos y de utilidad para personas que continuarán profundizado en
vii
el estudio de la programación, también se muestran exámenes para auto-evaluación del
estudiante. En el Apéndice G se presenta una sesión inicial en un lenguaje de programación
(ADA95).
En todos los capítulos, se desarrollan Ejemplos que ilustran aspectos teóricos previamente
introducidos, varios de los ejemplos son utilizados en las distintas secciones de este libro
para ir introduciendo progresivamente nuevos aspectos, cuando en explicaciones
posteriores se hacen referencia a dichos ejemplos, se indica en que página del texto se
encuentra.
En el Apéndice G se encuentra un listado de los Ejemplos numerados mencionados
anteriormente, a la par, se colocó, entre paréntesis, breves comentarios con palabras claves
para identificar sobre que trata y que aspecto ilustra. Para facilitar búsquedas, al final de la
línea se incluyó, el número de la página en donde se desarrollaron..
Ejemplo: Ejemplo 4.18 (Repetición controlada por contador, leer y sumar N números) pág.169
En todos los capítulos se colocaron, en recuadros, definiciones y palabras claves de la
teoría, también se resaltan en recuadros especiales comentarios y observaciones
importantes, la mayoría de los temas se presentan secciones de Ejercicios, en los cuales
también se citan ejercicios de los respectivos Apéndices, de tal manera que se cuenta con
un compendio de ejercicios variados y de aplicación práctica.
Es el deseo de los autores, que este libro sea de utilidad al lector para adoptar y desarrollar
una Metodología de la Programación.
viii
“Dímelo y lo olvidaré
Muéstramelo y lo recordaré;
Haciéndolo lo entenderé.”
La importancia de practicar
____________________________________________________________ 1
CAPITULO 1
ELEMENTOS DE LOGICA MATEMATICA
1.1 PROPOSICIONES
Ejemplos:
• Las computadoras se programan.
• 5 + 4 = 10
En estos ejemplos se ha afirmado algo, en la primera proposición se afirma algo verdadero
y en la segunda algo falso. Dicho de otra manera, la primera proposición es verdadera, la
segunda es falsa. Otros ejemplos podrían ser:
• La semana no tiene 14 días.
• 4 no es un número par.
En estos otros ejemplos se ha negado dos hechos o situaciones. En la primera proposición
se niega algo falso y en la segunda se niega algo verdadero, también se puede decir que la
primera proposición es verdadera y la segunda es falsa.
Toda proposición tiene que tener un valor de veracidad (o valor de verdad), el cual puede
ser VERDADERO o FALSO. Es decir, que toda proposición tiene que ser o bien
verdadera o bien falsa, pero no ambas.
Si se afirma algo verdadero, la proposición es verdadera.
Si se afirma algo falso, la proposición es falsa.
Si se niega algo verdadero, la proposición es falsa.
Si se niega algo falso, la proposición es verdadera.
Una proposición es la aseveración o negación de algo que puede ser verdadero o falso.
____________________________________________________________
2
Si una oración o frase no tiene valor de veracidad, es decir que no puede ser verdadera o
falsa, o de la cual no tiene sentido hablar de su veracidad, entonces tal oración NO es
proposición. Las siguientes frases u oraciones no son proposiciones:
Contraejemplo Razón por la cual NO es proposición
• ¿De qué color es tu camisa? es una oración interrogativa
• ¡ Qué lindo día hace hoy ¡ oración exclamativa y una apreciación subjetiva
• Por favor, sume el primer número con el último. es una oración imperativa
• ___________ es mi hermano. está incompleta
En estos contraejemplos, se considera que no tiene sentido decir que la frase u oración es
verdadera o falsa ( oraciones interrogativas, exclamativas, imperativas o subjetivas).
Las proposiciones se representan por medio de letras minúsculas del alfabeto, así:
• p: Hoy es lunes
• q: Llueve
• r : 2 + 2 ≠ 4
Proposiciones Abiertas:
La siguiente es una proposición verdadera:
• La unidad monetaria de Honduras es el Lempira,
Se representa por p. y se dice que el valor de verdad p es V (se utiliza F para falso). Si se
omite la palabra Lempira se deja el espacio correspondiente, se tiene:
• La unidad monetaria de Honduras es el __________________
De acuerdo al concepto inicial, lo anterior no seria una proposición. Es necesario llenar el
espacio en blanco para que se pueda asignar un valor de verdad. Si se coloca la palabra
“Yen” se obtiene:
• La unidad monetaria de Honduras es el Yen.
que resulta ser una proposición, pero falsa. Este tipo de expresión incompleta, que puede
convertirse en una proposición, será llamada proposición abierta. Se debe notar que una
proposición abierta no es una proposición, pero puede convertirse en una proposición,
verdadera o falsa, al llenar el espacio en blanco.
____________________________________________________________ 3
En este ejemplo cualquier denominación monetaria del mundo (peso, euro, marco, dólar,
franco, etc. que son nominaciones monetarias en género masculino) podría colocarse en el
espacio y la frase incompleta se convierte en proposición, en algunos casos verdadera y en
otros falsa, por ejemplo:
• La unidad monetaria de Honduras es el Lempira. ( V )
• La unidad monetaria de Honduras es el Euro. ( F )
No se puede llenar el espacio con nombres de universidades, ya que no tendría sentido decir
que una universidad es la unidad monetaria de Honduras. (A menos, claro está, que se
escoja el nombre de una universidad como nombre de la unidad monetaria).
Variables
De esta manera, la proposición abierta anterior se rescribe:
• La unidad monetaria de Honduras es el x
y se dice que la expresión resultante, es una proposición abierta que se puede representar
por p(x).
Se observa que al llenar espacio de la proposición abierta, ésta se transforma en una
proposición que puede ser verdadera o falsa. En el ejemplo anterior el universo sería el
conjunto:
U = {peso, euro, lempira, dólar, yen, …} Por otra parte, el universo puede ser considerado hasta cierto punto como arbitrario, es
decir que uno puede escogerlo de acuerdo a los objetivos de un estudio o problema
específico. Por ejemplo, para la proposición abierta: “x > 0” el universo podría ser el
conjunto de números enteros o bien podría ser el conjunto de todos los números reales,
dependiendo con que clase de números interese o convenga trabajar. En caso de
incertidumbre en cuanto a la selección de un universo, generalmente se selecciona el
Al espacio en blanco de una proposición abierta se le llamará variable y se representará
por una letra (como x, y, z).
El conjunto de valores que pueden colocarse en el espacio en blanco, o que pueden sustituir a x, se denomina el Universo de discurso de la variable, o simplemente el universo de x, que se representa por Ux o simplemente U.
____________________________________________________________
4
universo más amplio posible, que es el conjunto de todos los valores posibles que
convierten la proposición abierta en una proposición, ya sea ésta verdadera o falsa.
El universo determina generalmente lo que se llama el tipo de la variable. Como en ejemplo
“x > 0” el Universo es un conjunto de números, se dice que la variable es de tipo numérico.
Si x representa un número de personas, convendría entonces escoger U como el conjunto de
números enteros positivos.
Predicador
En una proposición se pueden tener dos variables, como por ejemplo:
__________es el hijo de _________________
Que se representa por:
P(x,y): x es el hijo de y
A continuación se presentan varios ejemplos de proposiciones abiertas y sus respectivos
universos.
Ejemplos 1.1
1. p(x) : 4 x = 7 U podría ser el conjunto de números enteros.
2. p (y) : Maria se matriculó en UNITEC, en la carrera y.
U = {y/y es una carrera de UNITEC}
3. p(x,y) : x es el padre de y
U = {(x, y)/x nombre de varón, y nombre de persona} Debe acordarse que cuando se llena espacio (la variable) de una proposición abierta con un
valor del universo, la proposición abierta se transforma en una proposición. Sea la
proposición abierta es p(x) y un valor del universo a, entonces el “llenado” de x por el
valor específico a, se representa por p(a). El valor de veracidad de p(a) dependerá de “a”.
Para algunos valores de U, p(a) será Verdadera y para otros valores de U, p(a) será Falsa.
Lo anterior se ilustra en los siguientes ejemplos:
A una proposición abierta también se le llama predicado y se representa por p(x), q(x),
r(x,y), etc., donde x representa a la variable.
____________________________________________________________ 5
Ejemplos 1.2
1. p(x) : x es la moneda de Japón
p (el Yen) : El Yen es la moneda de Japón (Verdadero) 2. p(x) : x es un número mayor que 20
p (12) : 12 es un número mayor que 20 (Falso) 3. p(x,y) : x es un múltiplo de y
p (35,5) : 35 es un múltiplo de 5 (Verdadero)
Ejemplo 1.3 Si q (z) : z es un país que colinda con Honduras El U mas amplio que se puede considerar es el conjunto de todos los países. El conjunto
solución sería: C.S. = {Guatemala, El Salvador, Nicaragua}
Ya que si en vez de z, se coloca uno de estos nombres de países, la proposición tiene valor
de verdad V. O sea que q (Guatemala) es Verdadera, lo mismo que q (El Salvador) y
q (Nicaragua), mientras que q (Costa Rica), q (Chile), etc., son Falsas.
Ejemplo 1.4
Sea U = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} y
p(x) : x > 5, entonces C.S. = { 6, 7, 8, 9 }
Evaluación de Predicados
El Conjunto Solución (representado por C.S.) lo conforman aquellos elementos de U
que hacen que la proposición sea verdadera.
Evaluar lógicamente o simplemente evaluar una proposición abierta para un valor
dado de la variable significa determinar el valor de veracidad, Verdadero o Falso, que
tiene la proposición una vez que se “llena” la variable (o se “sustituye” la variable) por
el valor dado. Véanse los siguientes ejemplos:
____________________________________________________________
6
Ejemplos 1.5 a) Evaluar lógicamente la proposición abierta “x + 3 = 5” para 1 (o para x = 1).
Para evaluar la proposición, se coloca 1 en la variable y obteniéndose “1 + 3 = 5” y
como no es cierto, se evalúa lógicamente la proposición como FALSA. b) Evaluar “La capital de Francia es ____________”, para el valor “París”.
Llenando el espacio con el valor se obtiene: “La capital de Francia es París” y se
determina que el valor lógico de la proposición es VERDADERO. c) Evaluar q(x, y): x es un múltiplo de y, para (100,10).
Al sustituir los valores (en el orden indicado) se obtiene “100 es múltiplo de 10” y la
proposición que resulta es VERDADERA. d) Evaluar r(x, y, z): x + 3y > z para x=2, z = 5, y = -1
Al sustituir los valores indicados: 2 + 3(-1) > 5 que al simplificar queda como:
2 - 3 > 5
-1 > 5 lo cual es una proposición FALSA.
EJERCICIOS 1.1
1. ¿Cuales de las siguientes frases u oraciones constituyen proposiciones,
proposiciones abiertas o ninguna de ellas?
a) Los ríos del planeta Marte son rojos. ___________
b) ¿Qué día es hoy? ___________
c) Los valientes no lloran. ___________
d) x es un valor mayor que 100. ___________
e) El sueldo no sobrepasa 1000 lempiras. ___________
f) Maria es la tía de ____________. ___________
g) Estudia cada día para que apruebes el curso. ___________
h) Si estudias cada día aprobaras el curso. ___________
i) y – x = 23 ___________
j) Fuiste al cine o al circo. ___________
k) z < 30 ___________
____________________________________________________________ 7
2.- .Determine la variable y establezca un universo “apropiado” para cada una de las
siguientes proposiciones abiertas.
a) n es un número par.
b) __________ es un miembro del Congreso Nacional.
c) El color favorito de Picasso fue el y.
d) “La luna es de queso” es una proposición cuyo valor de verdad es _____.
e) El impuesto sobre venta es de x %
f) 3 + 2* ( ___ - 5) = 17
g) La pared mide z metros.
h) x < 23.5
3. Encuentre el C.S. de las proposiciones del ejercicio anterior. 4. Evalúe las siguientes proposiciones abiertas con los valores indicados. a). “__________ es un departamento de Honduras.” para el valor “Olancho” b) “___- 3 = 6” para el valor 9 c) y > x + 5, para x = 3, y = 5 d) “t es un número par” para el valor 13
e) “x – y = 4 y” para (10,2)
1.2 OPERADORES LOGICOS Y TABLAS DE VERDAD La Negación (no) Si se tiene la proposición
• p: La semana tiene 7 días (V),
Se puede, a partir de ella, construir una nueva proposición negando su contenido, así:
• La semana no tiene 7 días o bien
• No es cierto que la semana tenga 7 días
Estas nuevas proposiciones (que se consideran equivalentes entre si), se denominan la
negación de p, que se representa por ~p (que se lee “no p”). Y si p es verdadera, su
negación es falsa; y viceversa, si p es falsa, ~p es verdadera. Esta situación la representa en
____________________________________________________________
8
la siguiente tabla, que se denomina una tabla de verdad, en donde se consideran todas las
posibles combinaciones de valores de verdad para p y ~p.
p ~p
V F
F V
Ejemplo 1.6
Dada la proposición q: 2 + 2 ≠ 4, redactar ~q y determinar su valor de verdad
Solución: Proposición Valor de verdad
q: 2 + 2 ≠ 4 (F) es la proposición original, su negación es:
~ q: ~ (2 +2 ≠ 4) (V) ó en forma equivalente ~ q: 2 + 2 = 4 (V) Considerando el ejemplo anterior, se presenta una tabla de equivalencia de negación para
símbolos matemáticos:
SIMBOLO NEGACION = ≠ ≠ = > ≤ ≥ < < ≥ ≤ >
Ejemplo 1.7 Ejemplo 1.8
p(x): 2 + 3 * x > 10 q(x, y): x < y
~p(x): ~ (2 + 3 * x > 10) ~ q(x, y): ~(x < y)
~ p(x): 2 + 3 * x < 10 ~ q(x, y): x > y
____________________________________________________________ 9
La Conjunción “y” Dadas dos proposiciones p y q, por ejemplo:
p : Hoy es lunes
q : está lloviendo
Se puede formar una nueva proposición uniéndolas por medio de la conjunción “y”, de esta
manera:
Hoy es lunes y está lloviendo
La que se considera una proposición y que se representa por: p ^ q
Al ser p ^ q una proposición, tiene que tener un valor de veracidad, el cual dependerá del
valor de veracidad de p y del valor de veracidad de q, que por definición vienen dados por
la siguiente tabla:
Cada línea de la tabla representa un caso de las posibles combinaciones de valores V y F de
p y q, y el valor que se le asigna a p ^ q.
Se dice que p y q son proposiciones simples o primitivas, no se pueden descomponer más,
“p y q “es una proposición compuesta, no es simple y se descompone en p y en q.
Según lo que se puede observar de la tabla de verdad de la conjunción si se toma la segunda
línea, si “Hoy es Lunes” es verdadero, pero “está lloviendo” es falso; por definición “Hoy
es lunes y esta lloviendo” seria falso, de acuerdo a la segunda línea de la tabla. Se
concluye diciendo que la conjunción de “p y q” es únicamente verdadera cuando ambos p y
q lo son. El siguiente esquema ilustra lo expresado anteriormente.
p q p ^ q
V V V
V F F
F V F
F F F
La conjunción solamente es verdadera si las dos (proposiciones) son verdaderas.
____________________________________________________________
10
Ejemplo 1.9 Determinar el valor de verdad de p ^ q:
p ^ q: Hoy es martes ^ está lloviendo V ^ F • Evaluar cada proposición simple. ? F •Evaluar la conjunción.
• Se trabaja en forma de triángulo invertido1 Usando la Tabla de Verdad
La disyunción “o” También se puede obtener una nueva proposición a partir de las dos anteriores, p y q, si se
unen por medio de la disyunción “o”. Y se denota por “p v q”
Cuyos valores de verdad se definen por medio de la siguiente tabla
1 ) Trabajar en forma de triángulo invertido, implica que se colocarán los valores de verdad de las proposiciones en forma vertical, debajo de cada una y se copiarán todos los operadores que intervienen en la proposición compuesta, se irán evaluando hasta obtener el valor de verdad final de ésta, el cual quedará en la base del triángulo.
P q p ^ q
V V V
V F F F V F
F F F
p q p v q
V V V
V F V
F V V
F F F La disyunción solamente es falsa si ambas son falsas
____________________________________________________________ 11
Ejemplo 1.10 Con las mismas proposiciones del ejercicio anterior, determinar el valor de verdad de pvq: pVq: Hoy es martes v está lloviendo V v F •Evaluación de cada proposición simple.
? V • Evaluación de la disyunción.
Aparte de la negación, conjunción y disyunción, existen otros operadores lógicos que no se
estudiarán en este texto. Sin embargo, con estos tres se pueden construir expresiones
proposicionales más complejas, que al resultar de la aplicación de estos operadores una o
más veces, y al ser proposición tiene un valor de veracidad, que dependerá de que valor de
veracidad tengan p, q o r. Para analizar todos los posibles valores de veracidad que
pueda tener una proposición compuesta se construye una tabla de valores de veracidad, o
tabla de verdad para dicha proposición.
Ejemplo 1.11 Construir la tabla de verdad de (p v ~ q) Se comienza colocando las proposiciones en orden alfabético, y todas las posibles
combinaciones de V y F de p y q.
p q P v q
V V V
V F V
F V V
F F F
Observación 1.2.1 En general el número de combinaciones (renglones totales de la tabla) es 2ⁿ, en donde “n” es el número de proposiciones simples a considerar en la tabla, se comienza escribiendo todos esos casos, para “ p ” asignando la mitad de 4 o sea 2 V (de Verdadero) y 2 F (de Falsos), el cociente resultante 2, se divide nuevamente entre 2 obteniendo 1, así para “ q ”se alterna un (V) y un (F) hasta terminar.
____________________________________________________________
12
p q
V V
V F
F V
F F A continuación, se encuentran los valores que corresponderían a ~q:
p q ~q
V V F
V F V
F V F
F F V Luego por cada renglón se hace la conjunción de p con ~q observando los valores de las
columnas de p y de ~q, aplicando las reglas de la disyunción.
p q ~q p v ~ q
V V F V
V F V V
F V F F
F F V V La última columna corresponde a los valores de verdad de p v ~ q según los valores de p y
de q como se especifican en la tabla.
Los operadores lógicos y construcción de tablas de verdad se aplican a las proposiciones
abiertas tal como se aplican a las proposiciones.
Ejemplo 1.12 Sean p(x) : x > 0
q(x, y): x < y
Construir la tabla de: ~ q(x, y) ^ [~p(x) v q(x, y) ] y posteriormente evaluarla para
los valores: X = 5 e y = 2 Solución:
Por simplificación se escribirá ~q ^ (~ p v q) y construyendo la tabla, columna a columna
____________________________________________________________ 13
p q ~p ~p v q ~ q ~q ^ (~ p v q)
V V F V F F
V F F F V F
F V V V F F
F F V V V V
Tabla 1.2.1
.
Evaluar lógicamente la proposición compuesta anterior, para los valores de x e y dados: x = 5 y y =2 Se obtiene que:
p (5): 5 > 0 (sustituyendo 5 por x) es Verdadero y
q (5,2): 5 < 2, que es Falso.
Observando nuevamente la tabla de verdad:
p q ~p ~p v q ~ q ~q ^ (~ p v q)
V V F V F F
V F F F V F *
F V V V F F
F F V V V V
Tabla 1.2.1
Esto corresponde a la segunda línea* de la Tabla anterior, cuando p es V y q es F, y la
proposición “~q ^ (~ p v q)” sería ~ (5 < 2) ^ [~ (5 > 0) v (5 < 2)] que también se puede
Observación 1.2.3
Recuerde: la conjunción es verdadera solamente si las dos proposiciones son
verdaderas, resulta conveniente entonces, colocar primeramente (V) en donde las dos
proposiciones sean Verdaderas y posteriormente rellenar los restantes renglones de la
columna de interés con (F).
En forma semejante, la disyunción es falsa solamente si las dos son falsas, se deberá
colocar (F) en donde las dos proposiciones son falsas y después rellena con (V)
____________________________________________________________
14
evaluar lógicamente, asignando los valores de veracidad correspondientes a cada
proposición y aplicando la definición de los operadores lógicos, de la siguiente manera:
~ (5 < 2) ^ (~ (5 > 0) V (5 < 2))
~ F ^ (~ V F )
V ^ ( F v F )
V ^ F
F
Y se concluye que la proposición ~ (5 < 2) ^ (~ (5 > 0) v (5 < 2)) es Falsa, y como se
menciono previamente esto coincide con lo encontrado en la Tabla de verdad 1.2.1.
Ejemplo 1.13 Construir la tabla de (p v q) ^ ( ~ p v r)
Como el número de proposiciones simples es 3, se tiene que:
El número de renglones es = 2n = 2³ = 8, o sea que se tendrán 8 renglones en esta tabla.
p q r ~ p p v q ~ p v r (p v q) ^ (~p v r) V V V F V V V
V V F F V F F
V F V F V V V
V F F F V F F
F V V V V V V
F V F V V V V
F F V V F V F
F F F V F V F
Observación 1.2.4 Continuando con la Observación 1.2.1 de la tabla previa, ahora
intervienen 3 proposiciones simples (p, q, r), así n=3. Luego Renglones = 2³ = 8, para la
columna de “p” se tiene 8/2 = 4, se colocarán entonces cuatro (V) y cuatro (F), para “q” se
colocarán 4/2 =2, alternos dos (V) y dos (F), finalmente para “r”, 2/2=1 serán alternos un (V)
y un (F).
Método Directo
____________________________________________________________ 15
Ejemplo 1.14 Dadas las siguientes proposiciones abiertas, determinar el valor de verdad de la proposición compuesta: ~ p v (q ^ ~ r)
p(x): x * x ≠ 36, q(x, y): y + 1 < x, r(x, y): 2 * x > y /2
Para los valores de x = 6, y = 10 A. Método Largo: ~ p v (q ^ ~ r)
~(x * x ≠ 36) v ( (y + 1 < x) ^ ~ (2 * x > y/2) )
(x * x = 36) v ( (y + 1 < x) ^ (2 * x < y/2) )
Sustituyendo para x e y:
(6 * 6 = 36) v ( (10 + 1 < 6) ^ (2 * 6 < 10/2) )
(36 = 36) v ( (11< 6) ^ (12 < 5) )
V v (F ^ F)
V v F
V
B. Método de Sustitución (o Directo , es el mas corto): p(x): x * x ≠ 36 q(x, y): y + 1 < x r(x, y): 2 * x > y /2
P (6) : 6 * 6 ≠ 36 q (6,10) : 10 + 1 < 6 r (10): 2 * 6 > 10/2
36 ≠ 36 (F) 11 < 6 (F) 12 > 5 (V)
Sustituyendo los valores de verdad encontrados en la proposición de interés: ~ p v (q ^ ~ r),
~ F v ( F ^ ~ V )
V v ( F ^ F )
V v F
V C. Usando la Tabla de Verdad (habiendo evaluado previamente cada proposición):
p q r ~ p ~ r q ^ ~ r ~p v (q^ ~ r) V V V F F F F V V F F V V V V F V F F F F V F F F V F F F V V V F F V F V F V V V V F F V V F F V F F F V V F V
RESPUESTA: El valor de verdad de ~ p v (q ^ ~ r) es V
____________________________________________________________
16
Como se puede observar, coincide con el valor de verdad encontrado utilizando los
métodos previamente mencionados.
EJERCICIOS 1.2.1
1. Construya las tablas de verdad para las siguientes proposiciones:
a) ~ p ^ q
b) ~(~p) ^ p c) ~ (~ p v q)
d) ~ ( p ^ q) v ( p ^ ~ q )
e) ~ p v ( r ^ s)
f) p ^ (~ r ^ s )
g) (r v ~ t) ^ ~q
h) p v ~ (r v ~p)
i) ( p v s ) ^ (( ~ q ^ s ) v p )
j) ~ (p ^ ~ (~ r ^ ~ s))
2. Dadas p ( x ) : x < 10 y q ( x,y ) : x = y
a) Construya la tabla para p v ( ~ p ^ q )
b) Encuentre el valor de verdad para el caso de que:
i) x = 5 y = 5
ii) x = 3 y = 0
iii) x = 11 y = 11
iv) x = 20 y = 7
1.3 TAUTOLOGIAS, CONTRADICCIONES Y EQUIVALENCIAS Considérese la tabla de verdad de p v ~ p
p ~p p v ~p
V F V
F V V
____________________________________________________________ 17
Resulta que la proposición p v ~ p es siempre verdadera, independientemente de los valores
que tome p, se dirá que p v ~ p es una tautología. Por otra parte, si se considera la proposición p ^ ~ p
Por último, considerando las proposiciones (~ p ^ ~ q) y ~ ( p v q )
Se elaborará las tablas de verdad de cada una de ellas, se tiene para (~ p ^ ~ q):
Ahora para ~ ( p v q):
p q p v q ~ (p v q)
V V V F V F V F F V V F F F F V
Se puede observar que sus valores de verdad son los mismos (comparar las últimas columnas de ambas tablas). En esta situación se dice que las proposiciones son equivalentes y se denota así:
~ ( p v q ) ⇔ ( ~ p ^ ~ q )
P ~p p ^ ~p
V F F
F V F
p q ~p ~q ~ p ^ ~ q
V V F F F V F F V F F V V F F F F V V V
Una tautología es una proposición cuya tabla resulta en “Verdadera” en cada
Se puede observar, por el contrario, que p ^ ~ p siempre es falsa, sin importar los
valores de verdad que tome p. En este caso se dice que la proposición p ^ ~ p es una
contradicción.
____________________________________________________________
18
Ejemplo 1.15 Demostrar que las siguientes proposiciones son equivalentes:
p v (q v r) y (p v q) v r Solución: se hará una tabla de verdad para cada una, por simplificación se utilizarán las
mismas columnas de p, q y r ya que son comunes en ambas proposiciones compuestas:
Se concluye entonces que las dos proposiciones anteriores son equivalentes.
Es decir: p v (q v r) ⇔ (p v q) v r
P q r q v r p v (q v r) p v q (p v q) v r
V V V V V V V
V V F V V V V
V F V V V V V
V F F F V V V
F V V V V V V
F V F V V V V
F F V V V F V
F F F F F F F
Son Equivalentes
Dos proposiciones son equivalentes cuando para cada renglón (de sus respectivas tablas de verdad) tienen los mismos valores de verdad.
____________________________________________________________ 19
Leyes básicas de la lógica Existen muchas proposiciones equivalentes que permiten, entre otros fines no menos
importantes, comprender y simplificar proposiciones complejas, y que se resumen en la
siguiente tabla:
Leyes Básicas de la Lógica
Doble negación
~ ( ~ p ) ⇔ p
Conmutatividad
p v q ⇔ q v p p ^ q ⇔ q ^ p
Asociatividad
( p v q ) v r ⇔ p v ( q v r ) ( p ^ q ) ^ r ⇔ p ^ ( q ^ r )
Distributividad
p ^ ( q v r ) ⇔ ( p ^ q ) v (p ^ r ) p v ( q ^ r ) ⇔ ( p v q ) ^ ( p v r )
Identidad
p v F ⇔ p p ^ V ⇔ p
Ídem potencia
p v p ⇔ p p ^ p ⇔ p
Elemento absorbente
p ^ F ⇔ F p v V ⇔ V
Absorción
p ^ ( p v q ) ⇔ p v ( p ^ q ) ⇔ p
DeMorgan
~ ( p v q ) ⇔ ~ p ^ ~ q, ~ ( p ^ q ) ⇔ ~ p v ~ q
____________________________________________________________
20
EJERCICIOS 1.3
1.- Compruebe que las expresiones de las leyes básicas de la lógica constituyen
realmente equivalencias.
2.- Suponga que x = 3, y = -2. Traduzca a lenguaje simbólico las siguientes expresiones
y encuentre su valor de verdad.
i) x es mayor que 20 pero y no es positivo
j) x está entre 2 y 4 (sin tomar los valores de 2 y 4)
k) No se cumple que x sea mayor que 2 o menor que 6; pero y tampoco es
menor que –10
l) ó x es mayor que 10 ó es menor que 1
m) y no es igual a –1, pero x si lo es.
3.- Llene los espacios vacíos en las siguientes tablas:
a)
b)
P q p ~ q
V V F F
V F V
F V F
F F V F
p q q ~ ( )
V V
V F V F F
F V V F
F F F V
____________________________________________________________ 21
c)
1.4 NOTACION BOOLEANA
Otra forma de representar los valores V y F es utilizando 1 y 0 respectivamente. Esta
notación se llama boolena.
De esta manera las tablas de los operadores lógicos básicos siguiendo la costumbre de
colocar primero los valores 0 (falso) quedaría de la siguiente manera:
Negación: Conjunción:
p q r (p ) ~q
V V V F
V V F V F V
V F V V
V F F V V
F V F F F
F V F F
F
F
p ~p
0
1
1
0
P q p ^ q
0
0
1
1
0
1
0
1
0
0
0
1
____________________________________________________________
22
Disyunción:
P q p v q
0
0
1
1
0
1
0
1
0
1
1
1
_______________________________________________________________ 23
CAPITULO 2
CONCEPTO DE COMPUTADOR Y ALMACENAMIENTO
2.1 CONCEPTO VON NEUMANN Y DE PROGRAMACION
Aparte de velocidad y precisión, la característica fundamental que diferencia a la
computadora de otras máquinas es el hecho de que puede almacenar previamente los datos
que va a procesar, los resultados obtenidos y más aún, las instrucciones para efectuar una
tarea. La computadora es capaz de recibir las instrucciones de antemano, de “memorizar”
dichas instrucciones y de ejecutarlas en el momento en que se le ordene. De la misma
manera puede aceptar de antemano los datos con que se va a trabajar, memorizarlos o
almacenarlos para utilizarlos en el momento en que las instrucciones se lo indiquen. Este
conjunto de instrucciones que se le proporcionan al computador para realizar una tarea
específica constituyen lo que se llama un programa. En los capítulos siguientes se
desarrollan técnicas para planificar los programas para la computadora y se presentará la
metodología para diseñar un plan previo para producir un programa. Para aprender a producir un programa es necesario conocer cuales son los grandes
componentes de una computadora y cual es la función de cada uno de ellos. Existen
muchos diseños y arquitecturas para computadoras, cuya descripción esta fuera de los
objetivos de este libro, y para efectos de este estudio, se considerará un modelo basado en
el de Von Neumann.
Gráficamente y de manera simplificada nuestro modelo de computador consta de tres
componentes: Unidad de Entrada, Unidad Central de Proceso y Almacenamiento y Unidad
de Salida, relacionadas de la manera siguiente:
Entrada U.C.P y
Almacenamiento Salida
_______________________________________________________________ 24
UNIDAD DE ENTRADA
Es un componente de la computadora, por medio del cual el usuario se comunica con la
computadora al introducir datos o instrucciones. Se puede pensar en principio que el
teclado es la unidad de entrada, sin embargo existen muchos dispositivos para este fin,
como el “Mouse”, el lector del código de barras, el micrófono, etc. La computadora
solicita ingreso de datos de acuerdo al programa que previamente se le ha proporcionado.
Del inglés INPUT (entrada) se toma la letra inicial I, con que muchas veces se refiere a las
unidades de entrada.
UNIDAD DE SALIDA
Es el componente por medio del cual la computadora se comunica con el usuario. A través
de los dispositivos de salida la computadora proporciona los resultados deseados, interroga
sobre las acciones que debe o puede tomar, y proporciona alguna otra información, todo
ello según las instrucciones del programa que esté ejecutando. Un monitor (como el de TV)
o una impresora en papel, los parlantes, etc., constituyen los medios de salida más
comunes; pero no son los únicos. También del inglés OUTPUT (salida) se toma la inicial
O para referirse a la salida.
UNIDAD CENTRAL DE PROCESO Y ALMACENAMIENTO Constituye la parte medular de la computadora en donde se efectúan las operaciones
básicas del proceso. Se pueden distinguir tres componentes principales:
Unidad de Control
Interpreta las instrucciones y dirige el resto de dispositivos para la ejecución del programa. Unidad Lógica / Aritmética
Efectúa los cálculos aritméticos requeridos (sumas, productos, etc.) y puede evaluar la
veracidad o falsedad de algunas proposiciones y efectuar operaciones lógicas.
Almacenamiento o Memoria
Guarda o almacena los datos y las instrucciones. Se puede distinguir lo que se llama la
memoria principal (que se conoce como la Memoria de Acceso Aleatorio, o RAM –
Random Access Memory), y la memoria auxiliar, que aunque más extensa, no es tan veloz
_______________________________________________________________ 25
(en las computadoras se puede considerar que la memoria auxiliar reside en los discos
magnéticos).
Cuando se programa un computador, se escriben las instrucciones de acuerdo a cierto
código preestablecido dentro de la sintaxis de un lenguaje de programación de
computadoras. Por ejemplo, si se desea que la computadora calcule el porcentaje de
impuesto sobre la venta, no se usa el español para indicar la instrucción “calcule el 12% de
la venta” (aunque ello es posible), sino que se deberán usar las reglas de un lenguaje de
programación como ADA, por ejemplo “IMP:= VAL_VEN * 0.12;”.
EJERCICIOS 2.1
1. Determine la Veracidad (V) o Falsedad (F) de las siguientes proposiciones.
_____ Normalmente las computadoras van ejecutando las instrucciones de un programa a
medida que se le van proporcionando.
Unidad Lógica/Aritmética
CONTROL
Memoria-Almacenamiento
Principal
Memoria Auxiliar
Unidad Lógica/Aritmética
Unidad de CONTROL
Memoria –Almacenamiento
Principal
Aprender un lenguaje de programación, consiste en aprender las reglas para
codificar las instrucciones que forman un programa que la computadora ejecutará
cuando se le indique.
_______________________________________________________________ 26
_____ Por medio de las unidades I/O se establece una comunicación con la computadora.
_____ Una vez que se determina y escribe en lenguaje natural las instrucciones para la
computadora, se tienen que codificar en un lenguaje de programación para
proporcionárselo al computador.
_____ La unidad de control puede ejecutar instrucciones como multiplicaciones y
divisiones.
_____Una unidad de entrada podría ser un reconocedor de la voz humana.
2.2 CONCEPTO DE ALMACENAMIENTO Y VARIABLE Como se ha indicado anteriormente, el hecho de que la computadora puede almacenar los
datos y las instrucciones (programas), previo a su ejecución, distingue a la computadora de
cualquier máquina (cuando cualquier otra máquina tiene esta capacidad se dice que está
“computarizada”). La computadora puede distinguir que porciones de la memoria
contienen instrucciones (programas) y que porciones contienen datos. Tanto los programas
como los datos pueden estar en la memoria principal o en la auxiliar. Por ahora se
abordara el problema de almacenar datos numéricos.
Concepto de Variable
.
Si el dato es numérico, se dice que la variable es numérica. Imagínese una variable como
una caja con una etiqueta para distinguirla de las otras. A la variable se le asigna un
nombre, que es el que se coloca en la etiqueta. Dentro de la caja se “guarda” el dato que se
desea. Ejemplo gráfico:
De esta manera, la variable tiene dos componentes:
TOTAL
11550000
Una variable es un espacio reservado en la memoria en donde se puede almacenar un dato
_______________________________________________________________ 27
El nombre de la variable, que sirve para identificarla
El valor de la variable, que es el dato que se almacena El nombre de la variable es fijo, pero su valor “varia” según los requerimientos del
programa en cuestión.
Para agilizar el trabajo, se simplifica el dibujo de la caja de la siguiente manera:
Nombre
Valor
El dibujo anterior muestra una variable llamada TOTAL cuyo valor es 1,500. Se dirá que
1,500 está almacenado en la variable TOTAL. Otras formas de expresar esta situación
son:
La variable TOTAL contiene 1,500.
Se ha guardado 1,500 en TOTAL
En TOTAL se puso 1,500
TOTAL vale 1,500
Se asignó 1,500 en TOTAL
Ejemplo 2.1 Dibuje una memoria con 3 variables y almacene un 18 en la variable SALDO, un 15 en la
variable PAGO y en la variable RESTO guarde el numero 34.
Primero se dibuja las tres cajas (una al lado de la otra) de la siguiente manera:
Luego se toma la primera instrucción “almacene 18 en la variable SALDO”. Para ello se
escoge una caja, por ejemplo la primera y se identifica con el nombre SALDO.
TOTAL
1,500
_______________________________________________________________ 28
SALDO
Y se coloca el número 18
SALDO
18
De la misma manera se procede con las siguientes dos instrucciones, y se llega a
SALDO PAGO RESTO
18 15 34
La forma en que se ha indicado las instrucciones: “almacene 18 en la variable SALDO” no
ha está codificada en ningún lenguaje de programación (lo cual se estudiará más adelante),
sino que se expresa en nuestro lenguaje natural. Para efectos de comprender como trabaja
la computadora, se ejecutan las instrucciones del modelo de computador adoptado,
representando las variables como las cajas dibujadas, y escribiendo en la pizarra o en una
hoja de papel lo que haría la computadora.
Ejemplo 2.2 Realice la prueba de escritorio para las siguientes instrucciones:
1. Almacene un 10 en la variable T45
2. En TOTAL guarde 2300
3. Ponga 24 en la variable IMPUESTO
Se dibuja la memoria con tres variables y siguiendo los pasos anteriores se obtiene el
siguiente resultado.
A la acción de ejecutar las instrucciones a lápiz, simulando un computador, se le
llama prueba de escritorio (P.E.).
_______________________________________________________________ 29
T45 TOTAL IMPUESTO
10 2,300 24
El nombre de una variable es una palabra que sigue ciertas reglas, como esta palabra sirve
para identificar una variable, se llamará identificador. Las reglas generales para un identificador de variable que se estarán utilizando son las
siguientes:
1. Debe comenzar con una letra.
2. Después de la letra inicial se pueden utilizar más letras o números.
3. No se aceptan espacios en blanco, símbolos que indican operaciones ( +, - , *, / ),
signos de puntuación y otros caracteres especiales.
4. Se acepta el subrayado “ _ ”.
5. Pueden utilizarse mayúsculas y minúsculas indistintamente.
6. Pueden utilizarse hasta 80 caracteres, pero lo más apropiado es que no sea muy
largo, ni muy corto que no exprese el uso. Por ejemplo, TOTAL es mejor que T.
7. Cada lenguaje de programación tiene su conjunto de palabras reservadas que no se
pueden utilizar como identificadores, por lo tanto, no se debe escoger un
identificador que este en la lista de dichas palabras.
EJERCICIOS 2.2
Para cada ejercicio dibujar una memoria con 4 o 5 variables y realizar las instrucciones que
se indican: 1. Ponga un 80 en CALIFICACION
Guarde un 85 en PROMEDIO
Almacene un 90 en REPOSICION
Coloque un 92 en TAREA
2. En ALTURA guarde 1.80
En PESO almacene 140
En CINTURA ponga 31
3. Coloque -5.7 en X762
Guarde en TFC4 el numero 0.002
Ponga -2/3 en HY23
En YT_23 almacene 100000
_______________________________________________________________ 30
2.3 CONCEPTO DE ASIGNACION En la sección anterior se utilizan varias palabras del lenguaje común para indicar el
almacenamiento (guarde, almacene, ponga, etc.). Ahora se procede a uniformar la
terminología para efectos de simplificación.
De esta manera el último ejemplo se reescribiría:
1. Asigne 10 a la variable T45
2. A TOTAL asígnele 2300
3. Asigne 24 en IMPUESTO. Una manera simbólica para representarlos es utilizando una flecha con punta hacia la
izquierda, como se muestra a continuación:
1. T45 10
2. TOTAL 2300
3. IMPUESTO 24 Se puede observar que la flecha apunta hacia la izquierda, donde se encuentra el
nombre de la variable que se está asignando. A la derecha se coloca el valor que se
desea almacenar. Una variable puede ser reasignada con un nuevo valor. Por ejemplo si se ejecuta la
instrucción K 6, se tiene :
K
6
Si luego si se quiere ejecutar la instrucción K 14, primero se borra el 6
K
Y se escribe el 14
Se escoge el término asignar para indicar el almacenamiento de un valor en una variable.
_______________________________________________________________ 31
K
14
Lo cual es el resultado final de las dos asignaciones
K 6
K 14
Ejecutadas una después de la otra.
Una variable puede ser reasignada todas las veces que se indique en el programa (es
decir las veces que se desee o se considere conveniente de acuerdo a los objetivos del
programa). El valor anterior a la reasignación se pierde irremediablemente.
Obviamente que si se desea conservar un valor en la memoria, no se utilizará la misma
variable en la asignación correspondiente. Como en la prueba de escritorio resulta
incómodo estar borrando cada vez que se reasigna el valor de una variable, se
acostumbra tachar el número que se pierde. Por ejemplo, en las asignaciones anteriores
primero se tiene K 6
Luego al ejecutar K 14
Primero se tacha el 6 luego se escribe el 14
K K
6 6
14
En el último dibujo aún se puede ver que, aunque tachado, el 6 fue el primer número
que se asigna, pero para efectos de ejecución del programa este número 6 ya no existe,
en su lugar está el 14. En el modelo de computador adoptado, en una variable sólo se
K
6
_______________________________________________________________ 32
puede almacenar un solo dato y del mismo tipo de la variable (i.e. si la variable es
numérica, sólo se puede guardar un número a la vez en esa variable).
Como la asignación pierde completamente el valor previo a una nueva asignación, se
dice que es destructiva. Aunque la característica suena negativa, de hecho es muy
ventajosa ya que permite reutilizar las variables y minimizar el uso de la memoria que
constituye un recurso escaso (ahora menos que antes), evitando así almacenar números
que ya no se necesitan.
Ejemplo 2.3 Realizar la prueba de escritorio para las siguientes asignaciones :
T 10
R 2
R 43
T 87
Las asignaciones se ejecutan en el orden que aparecen
T 10 R 2 R 34 T 87
No solamente valores constantes se pueden asignar (como el 10, 12, 2, 34 y 87 del ejemplo
anterior), sino también el valor de otras variables, u operaciones entre los valores de otras
variables.
T 10
T R 10 2
T R 10 2
34
T R 10 2
87 34
_______________________________________________________________ 33
Ejemplo 2.4 Realice la prueba de escritorio para las siguientes asignaciones
RIS 10
X2 RIS + 3
TOT RIS
SOL 5 * X2 (el asterisco * indica multiplicación)
Solución RIS 10
RIS
10
X2 RIS + 3
Al encontrar a RIS se busca el valor que tiene asignado y se le suma 3, el valor que se
obtiene se le asigna a X2.
RIS X2
10 13
Al sustituir 10 por RIS, en la expresión aritmética RIS +3, se dices que se ha evaluado
(encontrado el valor) de la expresión.
A continuación se ejecuta TOT RIS
RIS X2 TOT
10 13 10
En este caso, se dice que se ha pasado el valor de RIS a TOT, o que se ha copiado o movido
el valor de RIS a TOT. Obsérvese que RIS mantuvo su valor, no lo perdió.
_______________________________________________________________ 34
Finalmente se ejecuta SOL 5 * X2
RIS X2 TOT SOL
0 13 10 65
En una asignación, el nombre de la variable asignada puede aparecer en la expresión de la
derecha, ejemplo:
Ejemplo 2.5
A 23
A A + 5
En este caso primero se asigna 23 en A, luego al evaluar la expresión A + 5 se obtiene 28,
que se asigna a la misma variable A.
Primero …Luego
A A
23 23
28
Cuando en las asignaciones intervienen varias operaciones aritméticas, se debe considerar
la prioridad en las operaciones. La menor prioridad la tienen las sumas y las restas, después
siguen el producto y la división y finalmente tienen mayor prioridad los paréntesis y las
potencias, esto se muestra el siguiente gráfico:
Observación 2.3.1. Puede notar que la asignación es diferente del igual “=” en las
matemáticas, si a ambos lados se cancela A, se obtiene que 0 es igual a 5 lo que no
es cierto
_______________________________________________________________ 35
Jerarquía de las operaciones
En el caso de operaciones con la misma prioridad, se realizan por orden de aparición de
izquierda a derecha.
Para realizar pruebas de escritorio de asignaciones que involucren expresiones aritméticas,
siempre se debe considerar, la prioridad en las operaciones.
Ejemplo 2.6 p 20
q 5
r p + q
r r + 5
q q * 2
s p – q * (2 – r/q) (1)1
Para determinar el valor de “s” se considera la prioridad en las operaciones
anteriormente citadas, así:
(1)S p – q * (2 – r/q)
S 20 – 10 * (2 – 30/10)
S 20 – 10 * (2 – 3)
S 20 – 10 * (–1)
S 20 + 10
S 30
1 Se ilustra el desarrollo de las operaciones respetando la prioridad en las operaciones
p q r s (1)
20 5 25 30
10 30
+, -
*, /
( ), potencias
Menor Prioridad
Mayor Prioridad
_______________________________________________________________ 36
EJERCICIOS 2.3.1 Para cada ejercicio realice la prueba de escritorio para el conjunto de instrucciones que se
indican.
1. a 10
b 17
c a + b
d b – a
e a * b
f a – 4 * (e – b)
g a²
2.- Tot 100
Res 70
Dif Tot – Res
Tot 300
Res 210
Dif Tot – Res
3.- N 1
P 0
N n + 1
P P + 5
N N + 1
P P + 7
N N + 1
P P – 2
4.- X 1
Signo –1
X X * 3
Signo – Signo
T Signo * X
_______________________________________________________________ 37
X X * 3
Signo – Signo
T Signo * X
5.- Q 3
R 2
D (Q – 1)² / (1 – 1 / (R + 1))
6.- A 10
B 2
C A – 2 * B
D 1 – B² / (C – 2 ) – A * (1 – B)
7- X 8
Y sqrt (X + 1)
Z, | 1–Y | + 2
8.- dey 21
inj 1 / sqrt (dey + 4)
pli (22 – dey) / 10 * inj
9.- X1 5
X2 7
Cambio X1
X1 X2
X2 Cambio
10.- a 10 rem 2
B 15
C (a + b) * 4
D c rem 3
Observación 2.3 2: • sqrt significa raíz cuadrada y • “a rem b” es el residuo de dividir a entre b en
aritmética entera, no se admiten decimales.
_______________________________________________________________ 38
CONDICIONES Y SU EVALUACION
Una de las ventajas de la computadora, es que en el programa se puede indicar varios
caminos que la computadora puede escoger según sea el caso, a partir de alguna condición
que satisfaga o no los datos.
• En una condición generalmente se compara variables, expresiones aritméticas con
constantes u otras variables. Por ejemplo:
TOT > 0
SALDO – 200 < 1200
IMPUESTO – VENTA = COMISION
• Expresiones lógicas de estas comparaciones:
NUM_VENTAS > 100 ó VAL_VENTAS > 5,660.50
No se cumple que (PAGO < 500 y DEDUCCION < 30)
• Se utilizan entonces operadores relacionales y/o lógicos, los cuales se enlistan a
continuación:
Operadores relacionales Operadores lógicos
Símbolo
Descripción Símbolo Descripción
> Mayor que < Menor que ⌐ ó ~ Negación (no)
= Igual ≠ Distinto
^
Conjunción (y)
≤ Menor o igual ≥ Mayor o igual
v Disyunción (o)
En este sentido se considera que una condición como una proposición abierta, en
donde las variables que aparecen son efectivamente variables de la memoria
previamente asignadas.
Evaluar una condición significa que se sustituyen las variables por los valores que
aparecen en la memoria y se determina un valor de verdad (V o F).
_______________________________________________________________ 39
a) TOTAL < 1000
b) PAGO – IMPTO > 900
c) PAGO > 200 y SALDO < 700
d) No (TOTAL < 1000)
Ejemplo 2.7
De acuerdo al estado de la siguiente memoria, evalúe las condiciones que se presentan.
En cada caso se sustituye el nombre de la variable por su valor y se evalúa la condición
según las reglas de la aritmética y la lógica matemática.
a) TOTAL < 1000 al sustituir 800 < 1000 es Verdadera
b) PAGO- IMPTO > 100 sustituyendo 750 – 50 > 900 efectuando la resta
700>900 lo que resulta Falso.
c) PAGO > 200 y SALDO < 700 sustituyendo (750 > 200) y (700 < 700)
esta proporción y ésta
es verdadera es Falsa.
Aplicando la tabla de la conjunción se tiene que V y F resulta ser FALSO
Utilizando el método directo se tiene:
(750 > 200) Y (700 < 700)
V ^ F •Evaluación de las proposiciones simples.
F •Evaluación de la conjunción.
TOTAL PAGO IMPTO SALDO
800 750 50 700
_______________________________________________________________ 40
d) No (TOTAL < 1000) Sustituyendo se obtiene No (800 < 1000)
Como la proposición dentro de los paréntesis es Verdadera, su negación resulta
Falsa
Utilizando el método directo se tiene:
No (800 < 1000) • Evaluación de la desigualdad
~ V • Evaluación de la negación.
F
Ejemplo 2.8
Realizar primero las asignaciones y luego evaluar las condiciones: Pago 1500
Impto 0.12 * Pago
Total Pago + Impto
Saldo 2000 - Total
1) Total > 0 (V) 2) Saldo – 200 < 1200 (V)
1680 > 0 320 – 200 < 1200
V 120 < 1200
V
3) No se cumple que (Impto > 100) ó (pago < 500 y saldo = 320) (F)
~ (180 > 100) v ((1500< 500) ^ (320 = 320))
~ V v ( F ^ V)
F v F
F
Pago Impto Total Saldo
1500 180 1680 320
_______________________________________________________________ 41
EJERCICIOS 2.4
En cada ejercicio realizar primero las asignaciones y luego evaluar las condiciones:
1.- M 23
N M – 17
M + N < 30
M > 0
N = 4
2.- Pago 567
Impto pago * 0.12
Total pago + Impto
Impto 45
Pago < 600 ó total < 700
No se cumple que (pago > 500 y total < 400)
3.- I 1
J I + 1
K I + 2 * J
I = J – 1
K – J ≥ 2
No se cumple que (K ≠ 5 ó J * I < 10)
4.- x 45
y 36
_______________________________________________________________ 42
x – y ≠ 0
3 < (y + x) ó y = 36
x < 45
y = 36
x ≠ 45 ó y = 36
x > 0 e y > 0
x > 0 e y < 0
x > 0 ó y < 0
______________________________________________________________________ 43
CAPITULO 3
TÉCNICA DE DESGLOSE 3.1 INTRODUCCIÓN AL ANÁLISIS DE UN PROBLEMA OBJETO DEL
PROGRAMA (P.O.P.)
Entre otras razones, se utilizan las computadoras para que realicen tareas de manera más
eficiente y rápida que los seres humanos. Para que una computadora realice un trabajo es
necesario que tenga almacenada las instrucciones necesarias para ejecutarlo. A este
conjunto de instrucciones se conoce como programa, y a la acción de escribir estas
instrucciones se le llama programar. Al programar se debe diseñar un conjunto de instrucciones que la computadora pueda
“entender”1. Para ello se escoge cierto lenguaje para la computadora tienen un significado
específico de acuerdo a cierto “código” que una o varias personas haya preparado. Por
ejemplo para indicarle que almacene el número 7 en la variable T, se puede escribir así: MOVE 7 TO T o también así:
T := 7 ; Dependiendo de la forma en que se decida escribir la asignación, se tendrá un código
distinto. Las diferentes formas de escribir las instrucciones para la computadora son lo que
se conoce como lenguajes de programación. Una persona que diseña y produce programas
se llama “programador” y una persona que utiliza un programa para resolver un problema
o realizar una tarea se llama “usuario”.
El propósito de este libro es el de proporcionar un método y técnica para producir
programas.
1 “Entender” o sea que al proporcionársele una instrucción sea capaz de realizar la acción indicada por la instrucción.
______________________________________________________________________ 44
Para ilustrar los conceptos básicos de la programación, se considera el problema que tiene
un profesor para procesar las distintas evaluaciones que tiene en un curso y que involucra
varios componentes: dos exámenes parciales a 20% c/u, 1 examen final de 30%, 3
proyectos a 5% c/u y 15% en tareas y pruebas. El profesor califica cada examen, tarea,
proyecto, etc. sobre la base de 100%; por lo tanto, para encontrar la calificación final de
cada estudiante tiene que efectuar varios cálculos aritméticos. Esta tarea, aparte de tediosa,
requiere de mucho cuidado por la naturaleza de la misma, por lo que constituye una
situación muy apropiada de aplicación de la computadora. Para simplificar su trabajo, el profesor decide usar la computadora para resolver el
problema del cálculo de calificaciones de sus estudiantes, para ello tiene a su disposición la
alternativa de usar un paquete (como hoja de cálculo electrónico) o de diseñar un programa
específico para su tarea. Con el propósito de ejemplificar la programación, se supone que el
profesor decide contratar una persona para que le prepare el programa, que es el
programador. El programador tiene que conocer y entender todos los elementos involucrados en el
proceso de los datos (en este caso las operaciones aritméticas para encontrar los promedios
finales), para poder codificar apropiadamente las instrucciones que proporcionará a la
computadora, o para poder programar apropiadamente la computadora. El profesor tendrá
que explicar detalladamente al programador cual es la naturaleza del problema, que es lo
que desea obtener del programa, que datos se tienen que proporcionar y que cálculos que se
tienen que realizar. Es importante observar que en este ejemplo se presentan dos tipos de problemas:
• El problema del profesor de calcular las calificaciones finales de sus estudiantes,
problema que ha decidido resolver mediante la computadora.
• El problema del programador que consiste en comprender lo que el profesor desea y
producir el programa respectivo para que la computadora resuelva el problema del
profesor.
Al primer problema se le llama “problema objeto del programa”, que se abrevia p.o.p. El
segundo problema es el de producir un programa, para lo cual se tiene que preparar un plan
y proceder con cierta sistematización. El desarrollo del plan tiene que comenzar con un
análisis del p.o.p. Al analizar un problema se separa o descompone en sus partes hasta que
______________________________________________________________________ 45
se llegue a tener un conocimiento fundamental de sus elementos, principios, y la relación
entre ellos. El p.o.p. es el problema del usuario y el producir un programa es el problema
del programador.
Al partir del análisis se esboza un plan que se va detallando y perfeccionando
sucesivamente, una vez que se tiene un plan del programa se procederá a codificar las
instrucciones, probar su efectividad y finalmente a ejecutarlo para obtener la solución del
p.o.p..
Es importante poder diferenciar claramente los dos problemas. El problema del
programador contratado no es en si el de calcular y obtener las calificaciones finales de los
estudiantes, sino el de producir un programa que las obtenga. Una vez que el programa esté
listo (sin errores) y el profesor le proporciona al computador las calificaciones parciales
para el cálculo del promedio final, por lo que el rol que desempeña el profesor es el de
usuario del programa. El usuario no necesariamente tiene que ser programador, y el
programador no necesariamente tiene que ser usuario del programa. Así como no es
necesario que una persona construya la casa en que vive, y un ingeniero constructor no
tiene porque vivir en las casas que construye. Por lo tanto, el usuario no tiene porque
analizar el problema que le preocupa, lo que desea es una solución al mismo. Si decide usar
la computadora para resolver su problema, la computadora ejecuta el programa que se le
indique y que ha sido preparado para ese fin específico.
El análisis le permite al programador conocer a profundidad el p.o.p. dependiendo de la
complejidad del p.o.p. el análisis puede ser tan corto o extenso como lo ameriten los
conocimientos y experiencia personales. Y a medida que se desarrollen las habilidades de
programación, ciertos programas no ameritarán ningún análisis; ya sea porque se han
desarrollado programas parecidos o porque se entiende a cabalidad el p.o.p. por su relativa
simplicidad.
En las secciones posteriores se estarán abordando ciertos p.o.p. cuyo tratamiento no amerite
en realidad mayor análisis, pero que se estarán analizando para fines pedagógicos con el
propósito de ejemplificar las técnicas que pueden ser útiles en el análisis de problemas más
complejos.
______________________________________________________________________ 46
EJERCICIOS 3.1
Conteste brevemente las siguientes preguntas: 1 ¿Porqué el programador debe entender a cabalidad el p.o.p.? 2 ¿Qué se logra al analizar un p.o.p.? 3.- ¿Qué relación existe entre un programa, la computadora y el p.o.p.? 4.- ¿Cuál es la diferencia entre el problema del usuario y el problema del programador? 5.- ¿Qué problemas ameritan mayor análisis? 3.2 RESUMEN DEL ANÁLISIS DE ACUERDO AL MODELO VON NEUMANN El propósito del análisis de un p.o.p. es el de disponer de todos los elementos necesarios
para preparar un plan del programa que resolverá el p.o.p.. El formato del análisis no es
único, algunos problemas requerirán un enfoque muy distinto a otros, la originalidad o
experiencia del analista le imprime un sello distintivo al análisis; la complejidad o
naturaleza del problema determina la profundidad del análisis, etc.. No obstante, por muy variado y original que resulte el análisis, la metodología que se
presenta en este texto requiere que se prepare un resumen del análisis encaminado a la
producción del programa.
El formato del resumen del análisis está relacionado con el modelo de computador
propuesto.
En primera instancia se determina cual es el objetivo del programa con respecto al p.o.p., es
decir, que resultados va a proporcionar la computadora, cual es la SALIDA. Luego se debe
definir cual será la ENTRADA. Lo que significa que describe que tipo de datos se le
l P R O C E S O 0
______________________________________________________________________ 47
proporcionarán al computador para obtener la SALIDA requerida. En la práctica, al
ejecutar un programa, normalmente primero se realizan las tareas de ENTRADA y luego
las de SALIDA. Sin embargo al realizar el resumen del análisis se hace énfasis en la
SALIDA para no perder de vista cual es la meta, que es lo que se desea obtener.
La SALIDA se especifica de manera cualitativa y de manera cuantitativa, lo mismo que la
ENTRADA. Preferiblemente se considera la ENTRADA mínima requerida para obtener la
SALIDA deseada.
En el párrafo anterior se han utilizado los términos ENTRADA y SALIDA, para indicar el
conjunto de datos que se le proporcionarán al computador (posiblemente vía teclado) y el
conjunto de datos que la computadora proporcionará (vía monitor o impresora). Estos
mismos términos se han utilizado para indicar los dispositivos (teclado y monitor) para
efectuar los procesos de ENTRADA y SALIDA. El estudiante no debe confundir el uso de
la terminología, la cual queda clara según el contexto en que se utilice. De esta manera los
términos ENTRADA y SALIDA se han usado hasta ahora en tres formas distintas: • Para indicar un dispositivo o componente de la computadora.
• Para indicar un proceso o una actividad.
• Para indicar un conjunto de datos.
Una vez que se ha indicado la SALIDA y la ENTRADA que involucra el programa, se
procede a esbozar el proceso que se sigue para obtener los resultados deseados a partir de
los datos de entrada.
El resumen del análisis sigue el siguiente formato:
Ejemplo 3.1 (Resumen del Análisis, calificaciones)
Para el caso del problema de obtener las calificaciones finales de un curso universitario, el
resumen del análisis podría ser como el siguiente:
Resumen del Análisis SALIDA: (cuantitativamente) cualitativamente ENTRADA: (cuantitativamente) cualitativamente PROCESO: Expresado de manera resumida en un lenguaje natural.
______________________________________________________________________ 48
Resumen del Análisis SALIDA: (40 números) Las calificaciones finales de los 40 estudiantes. ENTRADA: (varios números) Las calificaciones parciales de los 40 estudiantes. PROCESO: De manera repetitiva y para cada estudiante se hará lo siguiente:
• Proporcionar al computador las calificaciones parciales de un estudiante.
• Calcular la nota final del estudiante, basándose en las fórmulas
correspondientes.
• Imprimir o desplegar en el monitor, la nota final del estudiante.
EJERCICIOS 3.2 Complete brevemente las siguientes oraciones: 1.- Cuando se dice que la ENTRADA de datos se realiza al principio de un
programa, el término ENTRADA se refiere a:
_______________________________________________________________
2.- Al indicar que la SALIDA de un programa la constituyen los promedios finales
de un curso, el término SALIDA se refiere a:
_______________________________________________________________
3.- Si se asevera que la Unidad Lógica/Aritmética se encuentra en la unidad de
PROCESO Central, la palabra PROCESO se refiere a:
_______________________________________________________________
4.- Sin importar lo extenso de un análisis, en el resumen siempre se especificará:
_______________________________________________________________ 5.- Es importante tener muy claro cual es la SALIDA de un programa ya que:
_______________________________________________________________ 3.3 ELEMENTOS EN EL ANÁLISIS DE UN P.O.P. PARTE I
______________________________________________________________________ 49
No se proporciona un método rígido para desarrollar el análisis de un p.o.p.. La dificultad
del mismo, la experiencia y formación del analista son factores que influyen en la forma y
extensión del análisis. Sin embargo siempre debe tenerse en cuenta que:
• El análisis de un p.o.p. está orientado al diseño del plan de un programa.
• Los componentes básicos que se desean comprender y definir son:
o La salida
o La entrada
o El proceso
• El análisis debe conducir al formato del resumen que contiene los componentes
básicos.
• Debe profundizarse el análisis hasta definir claramente los componentes anteriores
No debe realizarse más análisis de lo necesario, si ya se han definido los componentes
básicos. Cabe mencionar decir que después de realizar un Plan de Análisis que culmina en
la realización de un Resumen del Análisis, se introducirá una técnica para generar
desgloses. Estos desgloses (pueden validarse con “Pruebas de Escritorio” simulando al
computador con papel y lápiz), posteriormente se transformará a un pseudocódigo
algorítmico que se llama Nolae o Notación lineal de algoritmos estructurados (al que
también se le pueden aplicar directamente las pruebas de escritorio), éste puede fácilmente
traducirse o codificarse en una gran diversidad de lenguajes de programación. El programa
ya codificado se introduce al computador al igual que los datos, obteniéndose así, la
solución del p.o.p. planteado. (Véase esta secuencia ilustrada en la Figura 3.3)
______________________________________________________________________ 50
Figura 3.3
El analista tiene la libertad de realizar el análisis de la manera que considere eficaz y
efectiva. Existen muchos caminos apropiados y correctos para llegar al resumen del
análisis, sin embargo a continuación se presentan a través del estudio de casos algunos
elementos que pueden ser útiles para el desarrollo de un análisis de p.o.p.
Ejemplo 3.2 (Promedio final de un estudiante) Caso 1: Se toma de nuevo el problema del profesor sobre el cálculo de los promedios finales, pero
que para fines de simplificación se considera que únicamente tiene un solo estudiante. Una
vez que se resuelva la situación para un estudiante, se aplicará el análisis para considerar
todos los estudiantes del curso.
El problema consiste en preparar el análisis para el plan del programa que calcule el
promedio final de un estudiante. Previamente se presentó como podría ser un resumen del
análisis y ahora se verá como se puede llegar a ese resumen.
El primer elemento que se presenta es el denominado “ejemplo de escritorio”.
P. O. P Plan del Análisis
SOLUCION
Desglose 1er.y 2do.
Algoritmo Nolae
Código en Lenguaje
Ada95
Resumen del Análisis
Prueba de escritorio
Prueba de escritorio
DATOS
______________________________________________________________________ 51
El propósito del ejemplo de escritorio es el de ganar experiencia operativa con respecto a
la solución del p.o.p., de visualizar situaciones que no se presentan explícitamente en el
planteamiento del problema y de investigar casos especiales y su tratamiento.
EJEMPLO DE ESCRITORIO
Se supone que un estudiante obtuvo las siguientes calificaciones:
NOTA PORCENTAJE (ponderación) Primer examen parcial 85 (20%)
Segundo examen parcial 90 (20%)
Examen final 80 (30%)
Proyecto 1 95 ( 5% )
Proyecto 2 100 ( 5% )
Proyecto 3 100 ( 5% )
Tarea 1 70 (15% en total)
Tarea 2 85
Quiz 1 80
Tarea 3 100
Exposición 90
Quiz 2 90
Tarea 4 100
Para los exámenes, se multiplica cada calificación por el porcentaje y se suman los resultados, tal como se muestra a continuación:
Primer examen parcial 85 X (0. 20 ) = 17.0 (1)
Segundo examen parcial 90 X (0. 20 ) = 18.0
Examen final 80 X (0. 30 ) = 24.0
Puntos ganados por exámenes = 59.0 (1)Obsérvese que para calcular los porcentajes se multiplica la nota por el porcentaje
dividido entre 100, de la siguiente manera:
85 X 20% = (85) (20) = (85) (0.20) = 17.0 100
El ejemplo de escritorio consiste en seleccionar un ejemplo o varios ejemplos y
resolverlos manualmente, generalmente con lápiz y papel, y posiblemente con una
calculadora manual.
______________________________________________________________________ 52
De la misma manera se trabaja con los proyectos:
Proyecto 1 95 X ( 0.05 ) = 4.75
Proyecto 2 100 X ( 0.05 ) = 5.00
Proyecto 3 85 X ( 0.05 ) = 4.25
Puntos ganados por proyectos = 14.0
Con respecto a las tareas, quices, etc., si se les da el mismo valor, el camino más rápido es
el de encontrar el promedio y luego aplicar el porcentaje. Para calcular el promedio se
suman todas las notas y se dividen entre el número de notas, en este caso son 7.
Tarea 1 70
Tarea 2 85
Quiz 1 80
Tarea 3 100
Exposición 90
Quiz 2 90
Tarea 4 100 615 Promedio = = 87.86 Suma 615 7
Por lo tanto los puntos ganados por proyectos serían: 87.86 x 0.15 = 13.05
Finalmente si se suman los distintos puntajes se obtiene: Promedio Final = 59 + 14 + 14 = 86 % El ejemplo de escritorio anterior ha permitido trabajar con los detalles y proporciona un
conocimiento operativo de la naturaleza del problema.
Como en el problema existen muchos datos, los cuales deberán ser almacenados en la
memoria de la computadora, se considera conveniente en este análisis identificar las
variables y se prepara el DICCIONARIO DE VARIABLES.
DICCIONARIO DE VARIABLES
El Diccionario de Variables es un listado completo de las variables identificadas por su
nombre, con sus tributos y una breve descripción de la variable.
______________________________________________________________________ 53
En algunas ocasiones es apropiado presentar los nombres de las variables en orden
alfabético; en esta ocasión se hará conforme se ha ido presentando en el ejemplo de
escritorio para asegurar que la lista esté completa.
PARCIAL1 Primer examen parcial Número sin decimales entre 0 y 100
PARCIAL2 Segundo examen parcial Número sin decimales entre 0 y 100
EXFINAL Examen final Número sin decimales entre 0 y 100. ..
PROYEC1 Proyecto 1 :
PROYEC2 Proyecto 2 :
PROYEC3 Proyecto 3 :
TAREA1 Tarea 1 :
TAREA2 Tarea 2 :
QUIZ1 Quiz 1 :
TAREA3 Tarea 3 :
EXPOSICION Exposición :
QUIZ2 Quiz 2 :
TAREA4 Tarea 4 :
PROMFINAL Promedio final Número con 2 decimales entre 0 y 100
Los nombres de las variables se escogen de tal manera que permita identificarlas fácilmente
con la naturaleza del valor que se depositará en ellas. Por ejemplo es mejor el nombre
“PROMFINAL” que simplemente “P”. Por supuesto, un nombre más descriptivo:
PROMEDIO_FINAL_DEL_ESTUDIANTE podría ser completamente descriptivo, pero
no es práctico al momento de programar, dada la extensión del mismo.
No se requiere presentar un diccionario de variables cuando el problema involucra un
pequeño número de variables, especialmente si los nombres escogidos definen muy bien la
naturaleza de la variable y lo que representa.
Actualmente, con la ayuda de procesadores de palabras es sencillo ordenar los nombres de
las variables en orden alfabético y se puede presentar de la siguiente manera:
Diccionario de Variables
EXFINAL Examen final
EXPOSICION Exposición
______________________________________________________________________ 54
PARCIAL1 Primer examen parcial
PARCIAL2 Segundo examen parcial
PROMFINAL Promedio final
PROYEC1 Proyecto 1
PROYEC2 Proyecto 2
PROYEC3 Proyecto 3
QUIZ1 Quiz 1
QUIZ2 Quiz 2
TAREA1 Tarea 1
TAREA2 Tarea 2
TAREA3 Tarea 3
TAREA4 Tarea 4
FORMULAS Los cálculos que intervienen en la solución de un p.o.p. se pueden expresar en un lenguaje
coloquial, por ejemplo: “Sumar las calificaciones de los acumulativos y dividir el resultado
entre 7”. Afortunadamente el álgebra provee un lenguaje simbólico el cual además de
simplificar la escritura, resulta preciso y sin ambigüedades, a través de las fórmulas.
Cuando en un p.o.p se efectúan muchos cálculos, o éstos son un tanto complejos, se recurre
al uso de fórmulas para describir tales cálculos. Cuando se considera conveniente presentar
las fórmulas en el análisis, es importante revisar el contexto dentro del cual son aplicables.
En el problema del cálculo de promedios finales se definirán primero otras variables para
cálculos intermedios, las cuales se agregan al diccionario de variables:
PG_EXAMEN Puntos ganados por exámenes
PG_PROYECTO Puntos ganados por proyectos
ACUMULATIVO Puntos ganados por tareas, quices, etc.
PROM_FINAL Promedio final del estudiante
A continuación se escriben las fórmulas correspondientes:
______________________________________________________________________ 55
PG_EXAMEN = PARCIAL1 * 0.20 + PARCIAL2 * 0.20 + EXFINAL * 0.302
PG_PROYECTO = PROYEC1 * 0.05 + PROYEC2 * 0.05 + PROYEC3 * 0.05
ACUMULATIVO = (TAREA1 + TAREA2 + TAREA3 + TAREA4 +
EXPOSICIÓN + QUIZ1 + QUIZ2) / 7 * 0.15
PROM_FINAL = PG_EXAMEN + PG_PROYECTO + ACUMULATIVO
Se puede observar que en el ejemplo del problema del profesor para obtener los promedios
finales de sus estudiantes se han utilizado tres elementos en el análisis:
• EJEMPLO DE ESCRITORIO
• DICCIONARIO DE VARIABLES
• FORMULAS
Se pudo haber comenzado con las fórmulas y el diccionario para luego realizar el ejemplo
de escritorio. No existen reglas al respecto, La experiencia y formas personales de pensar
determinarán el estilo de realizar un análisis.
Con lo anterior el análisis está completo, y se procederá a resumirlo. RESUMEN DEL ANALISIS SALIDA: (1 número) el promedio final de un estudiante. ENTRADA: (13 números) las distintas calificaciones del estudiante.
(Véase el Diccionario de Variables)
PROCESO: Inicialmente se proporcionan al computador las calificaciones del
estudiante. A continuación se calculan los puntos ganados por examen, por
proyectos y acumulativos, aplicando las fórmulas correspondientes. El
promedio final se obtiene sumando los puntos ganados. Por último se envía a
imprimir el resultado.
Cuando se dice que se le proporciona al computador 13 números, se quiere indicar que por
medio de la unidad de entrada (que podría ser el teclado) se le introduce al computador
los 13 números que almacena en la memoria.
2 Se utilizará el asterisco “*” en lugar del símbolo de multiplicar “X”
______________________________________________________________________ 56
En el ejemplo, las distintas calificaciones del estudiante se almacenarán en las variables
cuyos nombres aparecen en el diccionario. Para referirse a la acción de entrada de números
al computador se usa el verbo “leer”. De esta manera, si da a leer al computador el
valor de PARCIAL1, se esta indicando que a través de la unidad de entrada se le
proporciona al computador un número que se almacena en la variable llamada
PARCIAL1. De acuerdo al ejemplo de escritorio, ese número es 85, el cual será tecleado y
almacenado en PARCIAL1.
A su vez, para indicar que la computadora proporciona un resultado (que lo realiza a
través de la unidad de SALIDA) se dice que “imprime el resultado”, pensando que la salida
la lleva a cabo por medio de la impresora; o bien, se dice que “despliega” los resultados,
para indicar que los muestra a través del monitor o pantalla. Por los momentos y para los
fines de este capitulo es indiferente el medio por el cual se produce la salida, por lo cual se
utilizarán los términos “desplegar”, “imprimir” o “escribir” como si fueran sinónimos. Ahora se introducirá otro elemento que se puede utilizar en el análisis de un p.o.p. por
medio del siguiente problema.
Ejemplo 3.3 (Pendiente e intercepto)
Preparar un análisis para un programa por medio del cual se le proporcionan al computador
las coordenadas de dos puntos P y Q en el plano cartesiano y se pide que encuentre la
pendiente y la ordenada en el origen de la recta que pasa por los puntos P y Q.
DESARROLLO DEL ANALISIS Suponiendo que se cuenta con una base mínima de geometría analítica, es apropiado revisar
los conceptos involucrados en el ejercicio planteado. Esto significa que se revisa los
conceptos teóricos del problema, por lo que se introduce el “marco teórico” en este
ejemplo.
PARCIAL1
85
______________________________________________________________________ 57
Marco teórico
Dados dos puntos en el plano cartesiano P: (x,y)
Q: (w,z)
Si los puntos son distintos, y no se encuentran alineados verticalmente, existe una y solo
una recta que pasa por P y Q, la pendiente de la recta viene dada por la fórmula:
∆y y – z
m = = ∆x x – w que es válida siempre y cuando ∆x ≠ 0 ó sea que x – w ≠ 0 (es decir x ≠ w)
La ordenada en el origen (intercepto en “y”) se puede encontrar aplicando la siguiente
fórmula:
b = y – m x
Por otra parte, se puede dibujar uno o varios gráficos para poder tener una mayor idea del
planteamiento expuesto.
Gráficos Se consideran las dos posibilidades, cuando x ≠ w y cuando x = w, en el primer caso la
recta no es vertical (su pendiente existe) y en el segundo caso la recta es vertical (se dice
que la pendiente no existe o que es infinita)
y y L
L
x x
x ≠ w x = w
Para efectos de simplificar el programa, se supone que ciertas condiciones con respecto a
los datos se cumplen de antemano. Estas premisas o condiciones supuestamente válidas en
el desarrollo del problema, se denominan hipótesis.
______________________________________________________________________ 58
HIPOTESIS 1. Las coordenadas de los puntos corresponden a puntos distintos.
2. Los puntos no determinan una recta vertical, por lo cual se tiene que x ≠ w. La hipótesis 2 asegura que x – w sea distinto de cero, por lo cual la división será posible, y
se puede encontrar la pendiente.
EJEMPLO DE ESCRITORIO Con el marco teórico ya desarrollado, se procede a realizar un ejemplo en el papel para
tener una experiencia práctica del planeamiento, esto brinda la oportunidad de poder a su
vez darse cuenta de cualquier otro aspecto no contemplado anteriormente.
Sean P:(4,11) Q:(1,5)
1 – 5 6
entonces, m = = = 2 4 – 1 3 Ahora se encuentra el intercepto en el eje “y” :
b = y – m x
= 11 – 2(4) = 11 – 8 = 3
Por lo tanto: la pendiente es m = 2
y el intercepto es b = 3
Finalmente se procede a redactar el… RESUMEN DEL ANALISIS SALIDA: (2 números) La pendiente m y el intercepto b
ENTRADA: (4 números) X, Y, W, Z, los dos pares de coordenadas de los puntos P y Q
en el plano cartesiano.
PROCESO: Primero se dan a leer al computador los datos (x, y, w, z) y se aplican las
fórmulas de la pendiente y del intercepto. Los resultados obtenidos se envían
a imprimir.
______________________________________________________________________ 59
EJERCICIOS 3.3.
Para cada uno de los siguientes ejercicios se deberá diseñar un programa; prepare el análisis
con su respectivo resumen para el plan del programa. 1.- Se proporciona al computador el valor de venta de cuatro artículos y se desea
imprimir el valor total de la venta, el valor del impuesto sobre venta y el monto total
a pagar.
2.- Dados los coeficientes a, b y c de una ecuación cuadrática: ax2 +bx + c = 0
encontrar las raíces o soluciones de la ecuación.
3.- En una encuesta se entrevistaron 7 personas. Se les preguntó si poseían
computadoras. Al computador se le proporcionarán las respuestas de manera
codificada: un 1 cuando la respuesta fue “Si” y un 0 cuando a respuesta fue “No”.
Se desea determinar cuantas personas poseen computadoras
4.- Tres personas deciden asociarse para iniciar una empresa y cada una contribuye con
cierta cantidad de dinero. Se le proporciona al computador estas cantidades y se
desea conocer el porcentaje de participación a cada socio.
5.- La fórmula de espacio-tiempo de la caída libre puede simplificarse por:
S = ½ g t² + vot + So
Donde g representa el valor de la gravedad, vo es la velocidad inicial y So es la
distancia inicial recorrida. Si se proporcionan valores para t, vo y So, se desea
encontrar el valor de S correspondiente.
3.4 DESGLOSES Y PRUEBAS DE ESCRITORIO Una vez que se ha llegado al resumen del análisis, se comienza a preparar el plan del
programa en pasos sucesivos. En la parte de PROCESO del resumen, se especifica en
términos muy generales los principales pasos que se realizan para lograr la solución del
p.o.p.. Al preparar el plan del programa se irá identificando los distintos componentes del
proceso, la secuencia y forma de ejecutarse. Se hará partiendo de lo general y llegando a lo
particular de una manera sistemática; se dice que se va desglosando el problema en
subproblemas más pequeños; de tal manera que al final se tendrá un plan completo y
detallado para el programa.
______________________________________________________________________ 60
3.4.1 DESGLOSES EN SECUENCIA Ejemplo 3.4 (Secuencia, Sueldo neto)
PROBLEMA: Preparar un análisis y desglose para un programa en el cual se desea calcular
el sueldo neto a pagar a un obrero que trabaja por horas. Algunas de las horas trabajadas
son extras y se le pagan el doble. Además de deducírsele la aportación por el Seguro Social,
se le deduce una cantidad por pago de vivienda.
Solución ANALISIS
Antes de comenzar con un ejemplo de escritorio, se pueden hacer algunas anotaciones
generales llamadas Estrategia, en ella se harán algunas consideraciones generales que
serán de mucha utilidad en ejercicios posteriores y avanzados, en los cuales ya no se
dependerá de realizar ejemplos de escritorio detallados.
ESTRATEGIA:
Se comienza definiendo cuales serán las salidas y las entradas de este programa:
Por salidas se entenderá a lo que se desea obtener y mirar ya sea en el monitor o impreso en
un papel. En este caso son:
Salidas: Ingreso bruto, deducción del seguro social y sueldo neto.
Las entradas que son los datos que se deberán introducir o teclear por medio de un
teclado u otro medio y son:
Entradas: Pago por hora, horas trabajadas, horas extra y pago de vivienda. 1.- EJEMPLO DE ESCRITORIO Se escogen datos ejemplos de manera arbitraria, como ser:
Este proceso de refinamiento de la solución partiendo de los elementos generales a los más
particulares en distintos niveles para diseñar un programa se denomina Diseño descendente.
______________________________________________________________________ 61
Pago base por hora = 2.50 Horas Trabajadas = 147.00
Horas extras = 25
Deducción IHSS de un 3.5 %
Pago vivienda = 190.00 El ingreso bruto sería:
Por horas ordinarias 147 X 2.50 = 367.50
Por horas extras 25 X 2.50 X 2 = 125.00
Ingreso total = 492.00 Las deducciones serían:
Aportaciones (3.5%) IHSS 492 X0.035 = 17.22
Vivienda = 190.00
207.22
Por lo tanto el sueldo neto sería : 492 - 207.22 = 284.78
2.- DICCIONARIO DE VARIABLES
Identificador Descripción . PHORA Pago base por hora HTRABAJ Horas ordinarias trabajadas
HEXTRAS Horas extras trabajadas
DIHSS Deducción para el IHSS
VIVIENDA Pago de vivienda
INGBRUTO Ingreso total bruto
TDEDUC Total de deducciones
SNETO Sueldo Neto HIPOTESIS
1.- HTRABAJADAS > 0
2.- INGBRUTO Será a 600.00 y mayor (>) que VIVIENDA 3.- FORMULAS
1.- INGBRUTO = HTRABAJ * PHORA + HEXTRAS * PHORA * 2
2.- DIHSS = INGBRUTO * 0.035
3.- TDEDUC = DIHSS + VIVIENDA
4.- SNETO = INGBRUTO – TDEDUC
______________________________________________________________________ 62
4.- RESUMEN DEL ANALISIS
SALIDA: ( 3 números ) INGBRUTO, DIHSS Y SNETO
ENTRADA: ( 3 números ) PHORA, HTRABAJ, HEXTRAS, VIVIENDA
PROCESO: Después de leer los datos, se procede a efectuar los cálculos
aplicando las fórmulas y se imprimen los resultados.
5.-DESGLOSE
Puede notarse que en la descripción del proceso en el resumen anterior se pueden distinguir
tres pasos importantes que ejecutaría el programa
1.- LECTURA DE DATOS
2.- CALCULOS
3.- IMPRESION DE RESULTADOS
El bosquejo anterior se denomina “Primer Desglose” o “Desglose a nivel 1”. Es importante
observar que en el primer desglose no se detallan los pasos, únicamente se describen en
forma general y en el orden en que se ejecutarán. En el ejemplo, primero se ejecuta el
número 1, luego el 2 y finalmente el 3, de acuerdo a la numeración y orden secuencial en
que se han presentados los pasos. Cuando las instrucciones se realizan en secuencia, una }
Observación 3.4.1.1: La salida de los tres números que se indican es selectiva en este
caso; se puede discutir si la salida puede ser más amplia (que incluya el total de
deducciones, por ejemplo). Originalmente, en el planteamiento del problema, únicamente se
solicita el sueldo neto. Sin embargo, en este tipo de problemas el estudiante puede incluir
ciertos resultados intermedios en la salida, según considere conveniente y de acuerdo a la
naturaleza del problema.
Es también de interés hacer notar que el problema anterior quizá no amerite tanto análisis (y
que en la práctica generalmente no se diseña un programa como el del ejemplo que
encuentra el sueldo neto para un solo empleado). El propósito de seleccionar un problema
simple y sencillo, es el de minimizar la complejidad del problema para concentrarse en la
metodología de preparación de programas usada en este texto.
______________________________________________________________________ 63
después de otra, se dice que las instrucciones están concatenadas o que su estructura es una
concatenación.
A continuación se detalla cada uno de los tres pasos anteriores.
1.- LECTURA DE LOS DATOS 1.1 Leer de Pago base por hora
1.2 Leer de Horas ordinarias trabajadas
1.3 Leer de Horas extras trabajadas
1.4 Leer de Pago de Vivienda
2.- CALCULOS 2.1 Cálculo del Ingreso Bruto (Fórmula-1)
2.2 Cálculo de la deducción IHSS (Fórmula-2)
2.3 Cálculo del total de deducciones (Fórmula-3)
2.4 Cálculo de Sueldo Neto (Fórmula-4)
3.- IMPRESIÓN DE RESULTADOS 3.1 Impresión del Ingreso Bruto
3.2 Impresión del total de deducciones
3.3 Impresión del sueldo neto
Y así se completa el segundo desglose. De esta manera se tiene un plan del programa con
11 instrucciones sencillas (desde la 1.1 hasta la 3.3) que se ejecutan una tras otra en el
orden en que se presentan; es decir, las instrucciones están en secuencia o concatenación.
Este ejemplo ilustra la organización típica de las instrucciones de acuerdo al modelo de
computador adoptado; instrucciones de entrada de datos, instrucciones de proceso interno e
instrucciones de salida. Sin embargo, no siempre este es el orden en que se ejecutan las
instrucciones.
6.- PRUEBA DE ESCRITORIO (P.E.)
Una manera de comprobar si el desglose está correcto es probándolo. Se hace el papel de la
computadora, y con la ayuda de lápiz y papel se procede a ejecutar las instrucciones. Como
se ha mencionado anteriormente las lecturas corresponden a operaciones de entrada de
______________________________________________________________________ 64
datos. Esto significa que los datos que dispone el usuario se los comunica al computador
por medio de una unidad de entrada, o sea que el usuario teclea los datos, los cuales son
almacenados en las variables de la memoria, y de esta manera se lleva a cabo la lectura de
los datos. Ver Figura 3.3
Nuevamente, al distinguir los elementos de la prueba de escritorio (P.E.) se debe recurrir al
modelo de computador adoptado y de esta manera se determinarán tres componentes en la
prueba de escritorio:
Datos Para representar los datos que el usuario le proporcionaría al computador,
que serían los que se estarán tecleando.
Memoria Para representar las variables y sus valores.
Salida Para representar lo que aparecería en la pantalla o que sería impreso en el
papel.
Para realizar la P.E. es conveniente tomar inicialmente los datos del ejemplo de escritorio
para comparar los resultados. Los datos se escriben en el orden en que van leyendo y, para
no perder la secuencia se irán tachando de la lista para indicar que ya han sido introducidos
en la memoria. Al ejecutar la P.E. se debe realizar las operaciones evitando forzar los
resultados que se desea tener. Se debe tener en mente que la P.E. se realiza para comprobar
la validez de las instrucciones escritas y para verificar que el orden en que se han escrito
también esté correcto.
Se comienza dibujando los componentes de la prueba de escritorio:
Datos: 2.50, 147, 25, 190
Memoria:
______________________________________________________________________ 65
Salida:
En la salida, la primera figura representa la pantalla del monitor y la segunda un trozo de
papel que sale de la impresora. En las P.E. se dibuja cualquiera de ellas indistintamente por
ahora.
Se van ejecutando las instrucciones, una por una, en el orden indicado ya que se presentan
de manera secuencial.
1.1 Leer pago base por hora
De forma parecida a la asignación, se identifica con un nombre la variable receptora
y poner en su valor el número correspondiente. En este caso el primero que se
encuentra en la lista de datos de entrada, el cual se tacha para indicar que ha
pasado del teclado a la memoria.
Datos: 2.50, 147, 25, 190
Memoria:
PHORA
2.50
Salida:
En las mismas figuras se realizan las siguientes lecturas, una por una, de la misma forma,
ó
______________________________________________________________________ 66
hasta llegar a lo siguiente:
Datos: 2.50, 147, 25, 190 Memoria:
PHORA HTRABAJ HEXTRAS VIVIENDA
2.50 147 25 190
Salida:
A continuación se procede a ejecutar los cálculos que corresponden a las asignaciones. No
es innecesario recordar que estos cálculos se ejecutan uno por uno; que uno por uno se van
apuntando en la memoria, de manera secuencial, hasta llegar a lo siguiente:
Datos: 2.50, 147, 25, 190
Memoria:
PHORA HTRABAJ HEXTRAS VIVIENDA
2.50 147 25 190
INGBRUTO DIHSS TDEDUC SNETO
492 15.47 205.47 286.53
______________________________________________________________________ 67
Salida:
Finalmente en la escritura de los resultados, las instrucciones se realizan una por una. Así: 3.1 Impresión del ingreso bruto ( INGBRUTO)
En este caso se inspecciona el contenido de la variable INGBRUTO y se escribe en
la figura que representa la salida. Nótese, que en este caso el valor del INGBRUTO
en la memoria queda intacto, no se pierde. A diferencia de la escritura y la
asignación, la escritura NO es destructiva.
Luego, se obtiene: Salida:
Se realiza el resto de las instrucciones de salida, una por una, inspeccionando los valores y
escribiéndolos en la pantalla:
Salida:
Al comparar estos resultados con los del ejemplo de escritorio se comprueba que el
desglose escrito está correcto.
492.00
492.00 15.47 205.47 286.53
______________________________________________________________________ 68
Se hará un REPASO de lo visto hasta ahora desarrollando el siguiente ejemplo: Ejemplo 3.5 (Repaso, Secuencia, Venta de dos artículos) Preparar el análisis para el plan de un programa, en el cual se le proporciona al computador
los precios de venta de dos artículos y se desea imprimir el total a pagar por el comprador,
se deberá considerar el 12% de impuesto.
ESTRATEGIA Se comenzará definiendo cuales serán las salidas y las entradas de este programa:
Por salidas se refiere a lo que se desea obtener y mirar ya sea en el monitor o impreso en
un papel. En este caso es el total a pagar por el cliente incluyendo el 12% de impuesto, lo
cual es un número.
Pantalla Salida
Por entradas se refiere a los datos que se le proporciona al computador, que se introducen
por medio de la unidad de entrada (Ejemplo teclado), y que serán almacenados en la
memoria. Para el ejemplo son los dos precios de los artículos: Precio del artículo 1 y Precio
del artículo 2, o sea dos números:
Teclado
Entrada
1120.00
Salida Total
1120.00 seria el Total, así en forma resumida:
Entrada Precio del artículo 1 Precio del artículo 2
______________________________________________________________________ 69
PLAN DEL ANALISIS
1. EJEMPLO DE ESCRITORIO:.Con él se inicia el análisis, en el cual se resuelve el
problema a mano con datos específicos
Precio del 1er. artículo = 425
Precio del 2do. artículo = 575 Subtotal =425 +575 = 1000 Isv =1000 * 0.12 = 120 Total = 1000 + 120 = 1120
2. DICCIONARIO DE VARIABLES
Identificador Descripción
Precio1 Precio del artículo 1
Precio2 Precio del artículo 2
Subtotal Subtotal
ISV Impuesto sobre ventas
Total Total a pagar por el cliente
3. FORMULAS
Subtotal =precio1 + precio2 (Fórmula-1)
Isv =subtotal * 0.12 (Fórmula-2)
Total =subtotal + isv (Fórmula-3)
4. RESUMEN DEL ANALISIS SALIDA: (1 número) Total ENTRADA: (2 números) Precio1, Precio2 PROCESO: Inicialmente se introduce a la computadora precio1, precio2, se
calcula el subtotal, isv y el Total con las fórmulas respectivas, finalmente se imprime el Total.
Datos de entrada supuestos
______________________________________________________________________ 70
Antes de proceder al desglose se comenta nuevamente la relación entre las entradas con la
lectura y las salidas con la impresión: Leer: (Lectura) es la instrucción que se encarga de tomar un valor que el usuario
proporciona a través de un dispositivo de entrada (p.e. teclado) y lo almacena en una
variable. En el ejemplo de escritorio se enunció que las entradas eran dos números: el
precio del primer artículo y el precio del segundo artículo y se introdujeron los valores 425
y 575 para cada uno.
Las instrucciones para almacenar los valores tecleados en las variables correspondientes
serían:
Leer El Precio del Artículo 1 (Precio1)
Leer El Precio del Artículo 2 (Precio2)
Imprimir: (Impresión) es la instrucción que toma el valor de una variable y lo muestra al
usuario a través de un dispositivo de salida (p.e. monitor). A la acción de escribir también
se le conoce como impresión. En el ejemplo de escritorio se detalló que la salida era
1120.00. Este valor está contenido en la variable Total. La instrucción que muestra este
valor en la pantalla sería:
Imprimir el Total a Pagar por el Cliente (Total).
Considerando lo anterior, se identificarán los distintos componentes del Proceso del
Resumen del Análisis, su secuencia y forma de ejecutarse. Se hará partiendo de lo general y
llegando a lo particular, de manera sistemática; se dice que se va desglosando el problema
en sub-problemas más pequeños.
5. DESGLOSES Desglose 1 er. Nivel
1. Lectura de datos
2. Cálculos
3. Impresión de resultados
______________________________________________________________________ 71
Desglose 2do Nivel
1. LECTURA DE DATOS
1.1 Leer Precio1
1.2 Leer Precio2
2. CALCULOS
2.1 Calcular Subtotal (Fórmula-1)
2.2 Calcular Isv (Fórmula-2)
2.3 Calcular Total (Fórmula-3)
3. IMPRESIÓN DE RESULTADOS
3.1 Imprimir Total
6. PRUEBA DE ESCRITORIO Datos: 425, 575 Memoria: Salida
EJERCICIOS 3.4.1 1.-Haga el desglose de los EJERCICIOS 3.3 con la prueba de escritorio respectiva. 2.-Para los siguientes problemas se desea el análisis y desglose para los programas que
resuelvan los siguientes problemas. (Realice la P.E para comprobación).
a) Se desea programar una máquina vendedora de boletos que esta “computarizada” y
que reconoce y acepta billetes de 1, 2, 5 y 10 lempiras. Cada boleto cuesta Lps. 6.00
y se le da a leer la cantidad de boletos que se desean y la cantidad de billetes de las
distintas denominaciones que se le da. El programa deberá calcular el cambio que se
devuelve.
Precio1 Precio2 Subtotal ISV Total
425 575 1000 120 1120 1120
______________________________________________________________________ 72
b) La computadora lee una cantidad de tiempo en horas, minutos y segundos, y calcula
el total de segundos que corresponden al tiempo dado.
c) Conociendo la base y la altura de un triángulo, se desea encontrar el área del mismo.
d) Del Apéndice A, pág.279-280, (desgloses en secuencia):
d.1) Ejercicios del 1 al 4
d.2) Ejercicios del 5 al 8
d.3) Ejercicios del 9 al 12
d.4) Ejercicios 13 y 14
3.4.2 DESGLOSE CON INSTRUCCIONES EN DECISION
Ejemplo 3.6 (Decisión, Venta con descuentos)
PROBLEMA Realizar el análisis y preparar el desglose correspondiente para un programa
que se producirá para la siguiente situación:
En una tienda se otorgará a los clientes descuentos en sus compras. Si el valor de la venta
(excluyendo el 12% de impuesto sobre venta-isv) es de de Lps. 200.00 ó menos, se le
concede un descuento del 10%, si es de más de Lps. 200.00, el descuento será de 20%. Se
le proporciona al computador el valor de la venta, se desea calcular el descuento, el Isv. y el
valor total a pagar.
ANALISIS
EJEMPLO(S) DE ESCRITORIO
Considérense dos Casos:
1.- La venta es de Lps. 200.00 ó menos
2.- La venta es de más de Lps. 200.00 (En lenguaje simbólico: Venta > 200.00,
se escogió arbitrariamente)
______________________________________________________________________ 73
EJEMPLO DE ESCRITORIO 1
El valor de la venta es de Lps. 150.00
El descuento sería de 10% o sea Lps. 15.00 (1)
Subtotal, Valor de venta con descuento Lps. 135.00
12 % ISV Lps. 16.20
Total a pagar Lps. 151.20
(1) Para calcular un porcentaje de una cantidad, se multiplica la cantidad por el valor del
porcentaje y se divide entre 100. En este ejemplo el descuento se calculó así:
(150) (10) = 15 ó bien (150) (0.10) = 15 100
EJEMPLO DE ESCRITORIO 2
El valor de venta es de Lps. 300.00
EL descuento sería de 20% o sea 60.00 ___________
Subtotal, (Valor de venta con descuento) Lps. 240.00
12 % isv 28.80 ___________
TOTAL a pagar Lps. 268.80
2.- DICCIONARIO DE VARIABLES
NOMBRE DESCRIPCION UNIDADES
Val_Venta Valor de la venta sin isv. (En Lps.)
Descuento Valor del descuento (En Lps.)
Subtotal Nuevo valor de venta con descuento (En Lps.)
Isv Valor del isv. (En Lps.)
Total Total a pagar (En Lps.)
______________________________________________________________________ 74
3.- FORMULAS
Descuento = Val_Venta * 0.10 Caso 1 (Fórmula-1)
Descuento = Val_Venta * 0.20 Caso 2 (Fórmula-2)
Subtotal=Val_Venta – Descuento (Fórmula-3)
Isv= Subtotal * 0.12 (Fórmula-4)
Total = Subtotal_Val + Isv. (Fórmula-5)
4.- RESUMEN DEL ANALISIS
SALIDA: (4 números) Descuento, Subtotal, Isv, Total ENTRADA: (1 número) Val_Venta
PROCESO: Se lee el valor de la venta, se determina si es superior a 200 o no
calcular el descuento respectivo, luego se calcula el subtotal, el isv y
el total, para terminar imprimiendo los resultados.
5.- DESGLOSES 1er Nivel 1.- Lectura de dato
2.- Cálculo de Valores
3.- Impresión de resultados
2do Nivel Únicamente el 2do paso amerita mayor desglose 2.- CALCULO DE VALORES
2.1 Calcular deducción
2.2 Calcular Subtotal con deducción
2.3 Calcular Impto. Sobre venta
2.4 Calcular Total a pagar
3er Nivel Para efectuar los cálculos anteriores se aplican simplemente las fórmulas correspondientes,
excepto en el caso de la deducción (paso num. 2.1), en el cual antes de aplicar una de las
______________________________________________________________________ 75
dos fórmulas se tiene que determinar si el valor de venta es mayor a Lps. 200.00. 2.1 CALCULO DE LA DEDUCCION
2.1.1 Ver si el valor de venta es mayor de 200 (Val_venta > 200)
2.1.1.1 (Verdadero) Calcular la deducción con el 20%
2.1.1.2 (Falso) Calcular la deducción con el 10%
Nótese que si el valor de venta no es mayor de 200 en el Ramal Falso no se pregunta si es
menor o igual qué 200, pues esto es tácito, ya que una proposición solo tiene dos valores
de verdad: V o F.
RESUMEN DEL DESGLOSE Como se ha ido refinado (desglosado) algunos pasos de manera separada, cuando se
consideró que se deberían detallar con mayor profundidad; resulta entonces conveniente
integrar las partes en un solo desglose que constituirá el plan del programa que resolverá el
problema propuesto (el p.o.p).
1. LECTURA DEL DATO
1.1 Leer Val_venta 2. CALCULO DE VALORES
2.1 Ver si el Val_venta > 200
2.1.1 (Verdadero) Calcular la deducción con el 20% (Fórmula-1)
2.1.2 (Falso) Calcular la deducción con el 10% (Fórmula-2)
2.2 Calcular Subtotal con deducción (Fórmula-3)
2.3 Calcular impuesto sobre venta (Fórmula-4)
2.4 Calcular total a pagar (Fórmula-5)
3. IMPRESIÓN DE RESULTADOS
3.1 Imprimir Val_venta, Descuento, Subtotal, Isv, Total3 (1)
3 Se pueden imprimir varios valores en una misma instrucción, pero siempre se preferirá imprimir un valor en cada inciso.
______________________________________________________________________ 76
En la sección anterior las instrucciones estaban organizadas de manera secuencial. Una se
ejecutaba después de la otra, en el orden en que se presentaban. Se dijo que las
instrucciones estaban concatenadas o bien que su estructura es la concatenación. En el ejemplo se encuentran dos instrucciones: 2.1.1 y 2.1.2 que se presentan una seguida
de la otra y con numeración correlativa, pero que NO se ejecutan de manera secuencial. La
ejecución de 2.1.1 y de 2.1.2 depende de la condición “Val_Venta >200” y dependiendo del
resultado de la evaluación, que puede ser V o F, se ejecuta 2.1.1 o 2.1.2
correspondientemente, PERO NO AMBAS. Se dirá entonces que la instrucción 2.1 tiene la estructura de una decisión, en el desglose
antes de la condición Val_venta >200, se colocan las palabras Ver si denotando que para
determinar que curso de acción se va a tomar, se Verificará primero si la condición (de
decisión) se cumple o no. En una estructura de decisión se evalúa una condición; como en
este ejemplo, si la condición resulta Verdadera, se ejecuta la instrucción 2.1.1. (Y se ignora
la 2.1.2). Pero si la condición es Falsa, se ejecuta la instrucción 2.1.2 (se ignora la 2.1.1).
De tal manera que sólo una de las dos instrucciones 2.1.1 ó 2.1.2 se ejecutará al realizar la
decisión 2.1. Después de ejecutar la decisión 2.1. Se procede con 2.2, ya que 2.1 y 2.2 están
concatenadas, seguidamente se ejecutan 2.3 y 2.4.
A la instrucción 2.1.1 se le llama la “rama Verdadera” de la decisión, a 2.1.2 la “rama
Falsa”. Por lo tanto, se puede resumir, que ejecutar una decisión implica evaluar la
condición de la decisión y ejecutar una y solo una de sus dos ramas.
6.- PRUEBA DE ESCRITORIO Para probar completamente el desglose anterior, se tienen que hacer dos pruebas de
escritorios con dos datos distintos, para poder probar las dos ramas.
Los resultados de las pruebas son las siguientes: Prueba 1 Datos1: 150
______________________________________________________________________ 77
Memoria Salida:
Val_Venta Descuento Subtotal Isv Total
150 15 135 9.45 144.45
Prueba 2 Datos2: 300 Memoria: Salida:
Val_Venta Descuento Subtotal Isv Total
300 60 240 16 256
Ejemplo 3.7 (Decisión, Boletos Tegucigalpa, San Pedro Sula SPS)
Una compañía de transporte dispone del servicio entre las ciudades de Tegucigalpa y San
Pedro Sula. Se ofrecen dos tipos de tarifa (Primera clase y clase económica) de
Lps. 200.00 y Lps 110.00 respectivamente. Se le proporciona al programa el número de
boletos y el código de tarifa deseado (Código = 1 para primera clase, código = 2 para clase
económica) y se desea conocer el total a pagar (asumir que los boletos que se compran son
de la misma tarifa).
Reescribiendo la información anterior en forma esquemática se tiene:
15.00 135.00 9.45 144.45
15.00 135.00 9.45 144.45
Observación 3.4.2.1: Quizás hubiera sido conveniente agregar el valor de la venta
en la lista de valores a imprimir, normalmente esto se hace en la práctica. Por
ahora, el enfoque de este texto se centrará en el diseño de la “lógica” del programa;
y a medida que se avance en la presentación de los temas, se irán perfeccionando
las propuestas de solución.
______________________________________________________________________ 78
Categoría Código Precio 1er Clase 1 Lps. 200.00
Clase económica 2 Lps. 110.00
ESTRATEGIA: Se definen las Entradas y Salidas además, se Verificara si el código es igual a 1 o no para
asociar el precio por boleto correspondiente, vale decir que si el código no es 1 se entiende
tácitamente que es igual 2, se considera que no existe la posibilidad de equivocación al
introducir el código (1 ó 2), lo anterior implica que se utilizará una estructura de decisión,
mostrando un esquema se tiene:
Cod Salida Pago Entrada Nbol
1. EJEMPLO DE ESCRITORIO
2.- DICCIONARIO DE VARIABLES
Identificador Descripción .
Cod Código del tipo de tarifa
Nbol Número de boletos
Pago Total a pagar
3.- FORMULAS
Pago = 200 * Nbol (Fórmula-1)
Pago = 110 * Nbol (Fórmula-2)
Caso I Caso II Nbol = 2 Nbol = 3 Cod = 1 (*) Cod = 2 (**) Pago = 200 * 2 = 400 Pago = 110 * 3 = 330
Si Cod = 1 (V) Precio = 200 (*) (Cod =2 ) (F) Precio = 110 (**)
______________________________________________________________________ 79
4.- RESUMEN DEL ANALISIS SALIDA: (1 número) Pago
(1 mensaje)
ENTRADA: (2 números) Nbol, Cod
PROCESO: Se lee Número de boletos (Nbol) y Código (cod), si Cod=1, se calcula el
Pago, con 1, sino con 2, y se imprime Pago con su respectivo mensaje.
5.- DESGLOSES
1er. Nivel
1. Lectura de datos
2. Cálculos
3. Impresión de resultados
2do. Nivel
1. LECTURA DE DATOS
1.1 Leer Nbol
1.2 Leer Cod
2. CALCULOS (CLASIFICACION)
2.1. Ver si Cod = 1
2.1.1 (V) Calcular pago (Fórmu1a-1)
2.1.2 (F) Calcular pago (Fórmu1a-2)
3. IMPRESIÓN DE RESULTADOS
3.1 Imprimir “Total a pagar Lps: ” Leer observación 3.4.2.2
3.2 Imprimir Pago
______________________________________________________________________ 80
A continuación se comentará sobre las distintas estructuras que intervienen en la
resolución de este ejercicio
Análisis de Estructuras Concatenación: 1, 2, 3
1.1, 1.2
3.1, 3.2
Se colocan en grupos por renglón para enfatizar la secuencia
entre las instrucciones
Decisión: 2.1
Es el numeral en que comienza la condición de la decisión, está a la izquierda de la expresión Ver si.
6.- PRUEBA DE ESCRITORIO
Datos 1: 2, 1
Memoria: Salida:
Nbol Cod Pago
2 1 400
Total a Pagar Lps. 400
Observación 3.4.2.2. Para imprimir mensajes se hará lo siguiente:
• Definir el mensaje, este acepta palabras, espacios en blanco, símbolos especiales, etc.
• Encerrarlo entre comillas.
• Preferiblemente se escribe en instrucciones separadas los mensajes y el
contenido de las variables (Instrucciones 3.1, 3.2 del desglose anterior). En
algunas ocasiones se puede hacer en la misma impresión, teniendo el cuidado
de separa los mensajes de las variables con una coma “,” , por ejemplo:
3.1 Imprimir “Total a pagar Lps. ”, Pago
______________________________________________________________________ 81
Datos 2: 3, 2
Memoria: Salida:
Ejemplo 3.8 (Decisiones anidadas, Clasificar un número en negativo, cero y positivo.) Determinar e imprimir si un número es positivo, negativo o cero. ESTRATEGIA:
Negativo
Salida Mensaje Cero ó Entrada X
Positivo
• Se clasificará el número X de acuerdo a los siguientes criterios:
Negativo X < 0, Cero X = 0, Positivo X > 0
• Se usará: la recta real y DECISIONES ANIDADAS (Se ampliará este tema en el
la sección 3.5 Diagramas de Arbol)
RESUMEN DEL ANALISIS: SALIDA: (1 Mensaje) “Negativo”, “Cero” o “Positivo”
ENTRADA: (1 número) X
Nbol Cod Pago
3 2 330 Total a Pagar Lps. 330
0
0
Si X < 0 (V)
(F)
(F)
(V) ●0
Si X = 0
“Negativo”
“Cero”
“Positivo” 0
______________________________________________________________________ 82
PROCESO: Se lee el número X, mediante decisiones anidadas (Ver mas adelante la
Observación 3.4.2.3) se clasifica (X) e imprime el mensaje correspondiente.
6. DESGLOSES 1er. Nivel 1. Lectura de datos
2. Clasificación e impresión 2do. Nivel 1. LECTURA DE DATOS
1.1 Leer X
2. CLASIFICACION E IMPRESION
2.1 Ver Si X < 0
2.1.1 (V) Imprimir “Negativo”
2.1.2 (F) Ver Si X = 0
2.1.2.1 (V) Imprimir “Cero”
2.1.2.2 (F) Imprimir “Positivo”
6.-. PRUEBA DE ESCRITORIO Dato 1: 0 Dato 2: -3 Dato 3: 8 Memoria: Memoria: Memoria:
Salida Salida Salida
X
8
X
-3
X
0
Observación 3.4.2.3: En los ramales (V) o (F) de una decisión, se puede a su vez
haber otra decisión con sus respectivos Ramales, en el ejemplo anterior se nota que
la decisión 2.1 posee en su ramal (F) la decisión 2.1.2
Cero
Negativo Positivo
______________________________________________________________________ 83
EJERCICIOS 3.4.2 Para cada uno de los problemas que se presentan se deberá preparar el análisis y desglose
del programa correspondiente:
1.- Dado el sueldo de un trabajador, aplicarle un aumento del 15% si su sueldo es inferior
a L. 1000.00 y 12 % en caso contrario. Imprimir el nuevo sueldo.
2.- Modificar el problema de la planilla de pagos suprimiendo la hipótesis que limita el
ingreso bruto a Lps. 600.00. Si el ingreso bruto es de Lps.600.00 ó mas, la deducción
por el IHSS es fija de Lps. 120.00.
3.- Ejercicios de estructuras de decisión en el Apéndice A del 15 al 21. 4.- Una persona tiene una cantidad D de dinero en depósito en una cuenta de ahorro y
desea retirar una cantidad R. Se da a leer D y R, si R es mayor o igual que D, el retiro
se reduce a la cantidad depositada y se determina la nueva disponibilidad de Dinero,.en
caso contrario se deberá imprimir Fondos insuficientes (Referencia ejercicio 3.5 inciso
2 “Hacerlo siguiente” para ramales con mas de una instrucción)
3.4.3 DESGLOSE CON INSTRUCCIONES EN REPETICION Ejemplo 3.9 (Repetición centinela, Alquiler de automóvil, Kilometraje) Preparar un análisis y desglose para un programa en el cual: Se leen varios números que corresponden al kilometraje recorrido por varios clientes de una
compañía que alquila automóviles. Se cobra Lps. 200.00 base por alquiler del automóvil y
Lps. 0.50 por cada kilómetro (Km.) recorrido, Sin embargo si el kilometraje excede
100 kms. El costo por Km., es únicamente de Lps. 0.35 y la base es de Lps. 215.00,
Se desea calcular el pago que efectuó cada cliente de acuerdo al kilometraje leído. Al final
de los números de colocará un valor ficticio de cero (centinela), para indicar fin de datos.
ESTRATEGIA:
Se procesará cada cliente es decir se calculará el pago de cada cliente, uno por uno, dentro
______________________________________________________________________ 84
de un proceso repetitivo que se realizará siempre y cuando el kilometraje sea distinto de
cero (Km ≠ 0). Cuando Km = 0, el proceso termina. Para calcular cada pago, se Verificará
si Km > 100 o no para aplicar las tarifas correspondientes, ya que éstas cambian en la base
y el precio por Km. recorrido, simbólicamente se tiene:
Salida Pago (Varios) Entrada Km (Varios)
• Decisión
Se deberá usar una decisión para el cálculo del pago, ya que según sea el valor del
kilometraje recorrido (Km > 100), cambia la base y el precio por Km. recorrido.
• Repetición
Valor ficticio de fin de datos (centinela igual a cero) Km = 0
Condición de repetición Km ≠ 0
1.- EJEMPLO DE ESCRITORIO
Caso 1
Kms. = 150 se cobra a 0.35 c. el Km.
Pago = Base + gasto por kilometraje (kilómetros recorridos X costo por kilómetro)
= 215 + 0.35 * 150
= 215 + 52.50 = 267.50
Caso 2
Kms. = 60 se cobra a 0.50 c. el Km.
Pago = Base + gasto por kilometraje (kilómetros recorridos X costo por kilómetro)
= 200 + 0.50 * 60
= 200 + 30 = 230
Verificar si km > 100 (V) base = 215 Costo por Km = 0.35
(F) base = 200 Costo por Km = 0.50
______________________________________________________________________ 85
2.-DICCIONARIO DE VARIABLES Identificador Descripción .
Km Kilómetros recorridos
Pago Pago por el alquiler del vehículo
3.- FORMULAS Pago = 215 + 0.35 * Km (Fórmula-1) Pago = 200 + 0.50 * Km (Fórmula-2) 4.- RESUMEN DEL ANALISIS SALIDA: (Varios números) Pago de cada cliente, pago
1 en cada ciclo
ENTRADA: (Varios números) El kilometraje de cada cliente, Km
1 en cada ciclo
PROCESO: Consiste fundamentalmente en un proceso repetitivo que se realiza
mientras el kilometraje leído sea distinto de cero. Dentro del proceso
se calcula e imprime el pago.
O bien
Proceso repetitivo controlado por centinela (Km ≠ 0), en el cual para
cada cliente se lee el valor de Km, si Km > 100, se calcula el Pago
con 1, sino con 2, y se imprime el Pago.
5.- DESGLOSE
Un primer intento de desglose comprendería únicamente el proceso repetitivo dentro del
cual se realiza el proceso, cliente por cliente, se puede expresar de la siguiente manera.
PROCESO DE CALCULO POR CLIENTE Siempre y cuando el kilometraje leído sea distinto de cero (o sea, mientras Km ≠ 0), repetir
lo siguiente:
______________________________________________________________________ 86
El problema con este intento es que asume que se conoce Km., el cual en realidad NO se ha
leído aún. Por lo cual es necesario disponer de ciertos pasos iniciales antes del proceso
repetitivo. De esta manera, una mejor propuesta sería la siguiente:
1.- PASOS INICIALES
1.1 Leer el primer dato (Km) 2.- PROCESO DE CÁLCULO POR CLIENTE
2.1 Mientras Km sea distinto de cero (Km ≠ 0) hacer lo siguiente repetidamente
2.1.1 Realizar el Proceso del Cliente
2.1.2 Leer el siguiente dato (Km)
Se desarrolla un nivel de desglose mayor para 2.1.1
2.1.1. PROCESO POR CLIENTE
2.1.1.1 Ver si Km. > 100
2.1.1.1.1 (V) Calcular pago con Fórmula-1 Caso 1
2.1.1.1.2 (F) Calcular pago con Fórmula-2 Caso 2
2.1.1.2 Imprimir el valor del pago
* Síntesis del Desglose 1.- PASOS INICIALES
1.1 Leer el primer dato (Km.)
2.- PROCESO DE CÁLCULO POR CLIENTE
2.1 Mientras Km. sea distinto de cero (Km. ≠ 0) hacer lo siguiente repetidamente
2.1.1 PROCESO POR CLIENTE
2.1.1.1 Ver si Km. > 100
2.1.1.1.1 (V) Calcular pago con Fórmula-1 Caso 1
2.1.1.1.2 (F) Calcular pago con Fórmula-2 Caso 2
2.1.1.2 Imprimir el valor del pago
2.1.2 Leer el siguiente dato (Km.)4
4 Leer la Observación 3.4.3.1 en la siguiente página.
______________________________________________________________________ 87
Se puede observar que el primer desglose sería: 1.- PASOS INICIALES
2.- PROCESO
Ya no se dice que el primer paso es “1.- LECTURA DE DATOS”, pues en este paso
solamente se lee el primer dato, hasta después en el “2.- PROCESO” repetitivo, se lee el
resto de los datos. Se adoptará entonces, el siguiente desglose general:
Desglose 1er. Nivel
1.- Pasos Iniciales
2.- Proceso
3.- Pasos Finales
Por brevedad el inciso 2.1.1 Realizar el proceso del cliente, se omitirá y se detallarán los
subincisos correspondientes en forma concatenada:
Observación 3.4.3.1 Las líneas marcadas con una “estrella”, son las 3 características de una repetición controlada con centinela, cuando de las variables de entrada se ha seleccionado la que se comparará con el Centinela (dato no posible) se deberá:
Leer (el primer dato) VARIABLE
En la línea del mientras se compara VARIABLE ≠ Centinela
Al final del rango se debe Leer (el siguiente dato) VARIABLE
Vale decir que aunque por error se omitiera esta lectura, de todas maneras el programa regresaría a evaluar la condición de repetición, y al no modificar el valor de la VARIABLE se entraría a un ciclo de repetición o “Loop” infinito, ¿Cuándo pararía?
______________________________________________________________________ 88
Desglose 2do. Nivel
1.- PASOS INICIALES
1.1 Leer el primer dato (Km.) 2.- PROCESO DE CÁLCULO POR CLIENTE
2.1 Mientras Km. sea distinto de cero (Km ≠ 0) hacer lo siguiente repetidamente
2.1.1 Ver si Km. > 100
2.1.1.1 (V) Calcular pago con Fórmula-1 Caso 1
2.1.1.2 (F) Calcular pago con Fórmula-2 Caso 2
2.1.2 Imprimir el valor del pago
2.1.3 Leer el siguiente dato (Km.)
6.- PRUEBA DE ESCRITORIO
Supóngase que se tienen tres clientes: el primero con 150 Km, el segundo con 60 Km. y
el tercero con 100. No se olvide que se debe agregar el cero, para indicar fin de datos.
Se dirá en este caso que “cero” desempeña el papel de “Centinela”.
Se comienza dibujando el esquema de la P.E. Datos: 150, 60, 100, 0 Memoria Salida
Luego se ejecuta el paso 1.1, Lectura del primer dato
Pago= 215 + 0.35 * Km Fórmula-1 Pago= 200 + 0.50 * Km Fórmula-2
Observación 3.4.3.2 Al conjunto de instrucciones que se repiten, que en este
caso son: 2.1.1
2.1.2 Se llama RANGO de la Repetición
2.1.3
______________________________________________________________________ 89
Datos: 150, 60, 100, 0 Memoria Salida
Km.
150
Se sigue con el Paso 2.1. El proceso repetitivo se ejecutará siempre y cuando Km. no sea
cero. Por lo cual se evalúa la condición “Km ≠ 0” y se encuentra qué su valor de verdad es
(V), esto permite realizar el proceso repetitivo y se pasa al paso 2.1.1 que constituye una
decisión en donde se evalúa la condición “Km > 100” la condición resulta (V), y se
calcula el Pago (paso 2.1.1.1) que realmente es una asignación.
Datos: 150, 60, 100, 0 Memoria
Km Pago
150
267.50
Como se ejecuta la rama V (paso 2.1.1.1) de la decisión, se ignora el paso 2.1.1.2, y se
realiza el paso 2.1.2, la impresión del Valor del Pago. En la salida …
Salida
Finalizando con la lectura del siguiente valor de Km instrucción 2.1.3
267.50
______________________________________________________________________ 90
Datos: 150, 60, 100, 0 Memoria Salida
Km Pago
150
60
267.50
Con lo cual termina la primera ejecución de las instrucciones dentro del proceso repetitivo.
Se esta listo para comenzar con las instrucciones de repetición. Pero antes de repetir, se
revisa si la condición previa a la repetición (Km ≠ 0) todavía se mantiene. El nuevo valor
de Km de 60 que efectivamente es diferente de cero (paso 2.1). y al evaluar la condición.
Km no es mayor que 100 (paso 2.1.1) por lo cual se procede con el paso 2.1.1.2: (F)
Datos: 150,60, 100, 0 Memoria
Km Pago
150
60
267.50
223.00
Se continúa con la impresión del Pago de este cliente (2.1.2) Salida
Se realiza el paso 2.1.3, que es la lectura para el siguiente ciclo
267.5
267.50 230.00
______________________________________________________________________ 91
Datos: 150, 60, 100, 0 Memoria
Km Pago
150
60
100
267.50
230.00
Se regresa a revisar la condición para continuar con la repetición y puesto que se cumple
que 100 es distinto de cero, se recomienza con el paso 2.1. con la decisión 2.1.1 en la
condición “Km > 100” es F, lo que se aplica la fórmula del caso 2 (2.1.1.2), y se imprime el
resultado (2.1.2).
Salida
Se termina el ciclo, leyendo el siguiente dato (paso 2.1.3) Datos: 150, 60, 100, 0 Memoria Salida
Km Pago
150
60
100
0
267.50
230.00
250.00
Y aunque se sepa que ya no hay más datos, se debe regresar a revisar si la condición de
repetición se sigue cumpliendo o no. Como en este caso Km = 0, se tiene que la condición
“Km ≠ 0” no se cumple (es Falsa); y por lo tanto, ya NO se realiza otro ciclo más de la
repetición y el proceso termina.
267.50 237.00 250.00
267.50 230.00 250.00
______________________________________________________________________ 92
Análisis de Estructuras Concatenación: 1, 2, 3
2.1.1, 2.1.2, 2.1.3
Decisión: 2.1.1 Repetición: 2.1 (Numeral a la izquierda de la palabra MIENTRAS del desglose)
Ejemplo 3.10 (Repetición centinela, Boletos Tegucigalpa, SPS.) modificación del
Ejercicio 3.7 de Desglose de Decisión: Una compañía de transporte dispone del servicio entre las ciudades de Tegucigalpa y San
Pedro Sula. Se ofrecen dos tipos de tarifa (Primera clase y clase económica) de
Lps. 200.00 y Lps 110.00 respectivamente. Se le proporciona al programa el número de
boletos y el código de tarifa deseado (Código=1 para primera clase, código=2 para clase
económica) y se desea conocer el total a pagar (asumir que los boletos que se compran son
de la misma tarifa).por varios clientes y al finalizar colocar el mensaje FIN DEL
PROGRAMA.
Utilice un valor ficticio de fin de datos (o centinela) adecuado.
ESTRATEGIA: Trabajando de manera más simplificada se tiene: (Varios) (Varios)
Salida Pago Entrada Nbol
Cod
Observación 3.4.3.3: Este ejemplo se realizó previamente solamente para un
cliente (Ejemplo 3.7), ahora será para varios clientes utilizando un proceso
repetitivo, las entradas, los casos y fórmulas son muy semejantes, se recomienda
que al ver el desarrollo de este ejercicio se hagan comparaciones uno a uno entre
los 6 pasos elaborados para ambos ejercicios.
______________________________________________________________________ 93
• Decisión: Verificar si cod = 1, precio de los boletos es 200 sino 110, así serán
diferentes fórmulas para calcular el pago.
• Repetición: Se procesarán varios clientes y se deberá utilizar un valor ficticio de fin
de datos, escogiendo uno de los datos de entrada: Nbol o Cod para utilizarlo como
centinela con un valor no posible, así:
Centinela Nbol = 0,
Redactando la Condición de repetición, se tiene Nbol ≠ 0
1. EJEMPLO DE ESCRITORIO
2.-DICCIONARIO DE VARIABLES
Identificador Descripción .
Cod Código del tipo de tarifa
Nbol Número de boletos
Pago Total a pagar
3. FORMULAS Pago = 200 * Nbol (Fórmula-1)
Pago = 110 * Nbol (Fórmula-2)
4. RESUMEN DEL ANALISIS SALIDA: (Varios números, mensajes) Pago
1 por ciclo, 1 por ciclo
ENTRADA: (Varios números) Nbol, Cod
2 por ciclo
Caso I Caso II Caso III Nbol = 2 Nbol = 3 Nbol = 0 Cod = 1 Cod = 2 Pago = 2 * 200 = 400 Pago = 3 * 110 = 330
______________________________________________________________________ 94
PROCESO: Repetición controlada por centinela (Nbol ≠ 0), en el cual para cada
cliente Se lee el Número de boletos (Nbol) y Código (cod), si Cod=1,
se calcula el Pago con Fórmula-1, sino con Fórmula-2, y se
imprime el Pago con su respectivo mensaje. Al terminar el proceso
imprimir un mensaje de despedida.
5. DESGLOSES 1er. Nivel 1. Pasos Iniciales
2. Proceso
3. Pasos finales
2do. Nivel 1. PASOS INICIALES
1.1 Leer el primer dato, Nbol
2. PROCESO
2.1 Mientras Nbol ≠ 0 hacer lo siguiente repetidamente
2.1.1 Leer cod --Del primer cliente faltaba leer su código5
2.1.2 Realizar el PROCESO POR CLIENTE
2.1.3 Leer el siguiente dato, Nbol
3. PASOS FINALES
3.1 Imprimir “Fin del Programa” El inciso 2.1.1 requiere un nivel mayor de desglose, ya que como se mencionó en la
estrategia el cálculo del pago depende de si se cumple que Cod = 1, además para cada
cliente se deberá imprimir dicho pago, solamente se suprime el titular PROCESO POR
CLIENTE
5 Del primer cliente solamente se había leído el número de boletos (Nbol), se tenía pendiente leer el código (cod).
______________________________________________________________________ 95
DESGLOSE 2do Nivel
1. PASOS INICIALES
1.1 Leer Nbol
2. PROCESO
2.1 Mientras Nbol ≠ 0 hacer lo siguiente repetidamente
2.1.1 Leer Cod 6
2.1.2 Ver Si Cod = 1
2.1.2.1 (V) Calcular Pago (Fórmula-1)
2.1.2.2 (F) Calcular Pago (Fórmula-2)
2.1.3 Imprimir “Total a pagar: Lps ”, Pago
2.1.4 Leer (el siguiente) Nbol
3. PASOS FINALES
3.1 Imprimir “Fin del Programa”
6. PRUEBA DE ESCRITORIO Dato: 2, 1, 3, 2, 0 Memoria: Salida:
Análisis de Estructuras
Concatenación: 1, 2, 3
2.1.1, 2.1.2, 2.1.3, 2.1.4
Decisión: 2.1.2
Repetición: 2.1
6 Como se mencionó antes, del primer cliente solamente se había leído el Número de boletos (nbol) solicitados, así que se tenía pendiente leer el código (cod).
Nbol Cod Pago
2
3
0
1
2
400
330
Total a pagar Lps.400 Total a pagar Lps.330 Fin del programa
______________________________________________________________________ 96
Comparando los PROCESOS de los Resumen del Análisis de los Ejemplos 3.7 y el 3.10
para uno y para varios clientes:
En el último ejercicio se adicionó un mensaje de despedida que pudiera no ir, así que la
diferencia entre ambos desgloses es únicamente Repetición controlada por centinela
(cero, Nbol ≠ 0), en el cual para cada cliente, el lector esta listo para convertir a procesos
de repetición los ejercicios de las secciones anteriores, solamente se debe tener cuidado de
incorporar las 3 líneas características de una repetición que se mencionaron en la
Observación 3.4.3.2.
Proceso del Resumen del Análisis UN cliente
Ejemplo 3.7
VARIOS clientes (repetitivo)
Ejemplo 3.10
Se lee Número de boletos(Nbol) y
Código (cod), si Cod=1, se calcula el
Pago, con Fórmula-1, sino con
Fórmula- 2, y se imprime Pago con
su respectivo mensaje.
Repetición controlada por centinela
(Nbol ≠ 0), en el cual para cada
cliente
Se lee el Número de boletos(Nbol) y
, Código (cod,) si Cod=1, se calcula el
Pago con Fórmula-1, sino con
Fórmula-2, y se imprime el Pago
con su respectivo mensaje.
Al terminar el proceso imprimir un
Mensaje de despedida final
Observación 3.4.3.4 Hasta el momento para el desarrollo de los ejemplos y
ejercicios indicados se han utilizado: lecturas, impresiones, asignaciones o cálculos,
se ha trabajado concatenadamente, o hemos decidido (Ver si…) o se ha realizado
procesos repetitivos (Mientras Variable ≠ Centinela haga repetidamente).
______________________________________________________________________ 97
EJERCICIOS 3.4.3 Para cada uno de los problemas que se presentan se deberá preparar el análisis y desglose
del programa correspondiente:
1.- Una maestra tiene varios estudiantes en un curso en donde practica 3 exámenes, los
resultados de los exámenes los promedia para obtener nota final. Introduce al
computador las tres notas de cada estudiante y de esa ir obteniendo uno por uno, su
nota final Al final de las notas, le introduce al computador tres ceros, para indicar
fin de datos.
2.- Modificar el problema de la planilla de pago, Ejemplo 3.4, pág. 63 para que se
puedan procesar la Información de varios trabajadores. (Usar centinela para indicar
fin de datos).
3.- Se leen varios números distintos de cero, encontrar el valor absoluto de cada uno de
ellos.
4.- Dado un número clasificarlo como negativo, cero o positivo (mensajes).
5.- Del Apéndice A, ejercicios 22 al 24, pág. 280-281.
______________________________________________________________________ 98
3.5 ELEMENTOS EN EL ANALISIS DE UN P.O.P. PARTE II
3.5.1 DIAGRAMA DE ARBOL DE DECISIONES Ejemplo 3.11 (Árbol de decisiones, Decisiones anidadas, Mayor de 3 números) Hacer el análisis y desglose para un programa en el cual se leen tres distintos números a, b,
c; y se determina cual de ellos es el mayor.
ANALISIS DIAGRAMA DE ARBOL DE DECISIONES Una estrategia para determinar cual de los tres números a, b ó c es el mayor, es la
comparación de los números entre sí, de dos en dos. Por ejemplo, se puede comenzar
comparando a con b, evaluando la condición “a > b”. Si es V, se sabrá que efectivamente “a
es mayor que b”, en caso contrario, se puede concluirá que a < b, ya que por hipótesis son
diferentes. Esta situación se puede representar de la siguiente manera en el diagrama que a
continuación se presenta y que se llama diagrama de árbol.
V
a > b
F
Si resulta que a > b, no se puede todavía llegar a ninguna conclusión ya que no se conoce la
relación entre a y c. Por ello, a continuación se pregunta si “a > c”, que se agregará en el
diagrama.
V
V a > c
F
a > b
F
______________________________________________________________________ 99
Ahora bien, si las dos condiciones son V, significa que a es mayor que los otros dos
números, y por lo tanto a es el mayor de los tres.
b c a
Si a > b y c > a (es decir que “a > c” es F), se tiene una situación como la que está
representada la recta real:
b a c
Por lo que “c” es el mayor de los tres, y estas conclusiones se agregan al diagrama de árbol
siguiente:
V a, “mayor”
a > c
V F c, “mayor”
a > b
F
Los segmentos de recta del diagrama se denominan las “ramas” del árbol, y a los extremos
de los segmentos le llaman los “nodos”. Como en las dos ramificaciones superiores del
diagrama se llegó a una conclusión, se considera que ya no se desarrollan más y se puede
decir que las conclusiones “a mayor” y “c mayor” son las “hojas” del árbol. Siguiendo con
el símil de botánica, al primer nodo (donde se coloca la primera condición “a > b”) se
conoce como la raíz del árbol. Se continua con la ramificación inferior, que corresponde a
la rama Falsa de la raíz, y se compara a con c, en el caso de que a > c, se puede concluir
que b es el mayor (¿Porqué?).
______________________________________________________________________ 100
a, “mayor”
V
a > c
V
F c, “mayor”
a > b
V b, “mayor”
F
a > c
F
En la ramificación incompleta se tiene que a > b y a > c son ambas falsas, lo que equivale a
que a < b y a < c. Como a es menor que ambas, se puede concluir que a es el menor de los
tres, pero no se tiene información con respecto a cual de los otros dos números b y c, es el
mayor. Por ejemplo podría suceder que:
a = 3 b = 7 c = 6
En donde a > b y a > c resultan ser falsas. En este caso el mayor es b.
Otro caso podría ser:
a = 3 b = 5 c = 9
En donde c resulta ser el mayor. En vista de lo anterior se agrega una comparación más al
diagrama, lo que permite completarlo.
______________________________________________________________________ 101
V a, “mayor”
V a > c
F c, “mayor”
a > b V b, “mayor”
F a > c V b, “mayor”
F
b > c
F c, “mayor”
El diagrama anterior permite desarrollar la “lógica” del programa, por lo que se considera
que el análisis está completo y se puede redactar el resumen respectivo.
Obsérvese que en la construcción del diagrama de árbol se utilizan otros elementos del
análisis que por su brevedad no se nombra explícitamente, como sucedió en el ejemplo de
escritorio en donde se asignaron valores específicos a: a, b y c; y se usaron otros gráficos
para representar los valores en la recta real. Lo anterior muestra que se puede utilizar varios
elementos del análisis de manera simultánea, según se considere que se requieran.
RESUMEN DEL ANALISIS SALIDA: (1 número, 1 mensaje) Mensaje que indica cual número a, b ó c es el mayor
(ver diagrama)
ENTRADA: (3 números) a, b, c
PROCESO: Se leen los números y se procede a determinar e imprimir cual es el mayor
mediante varias comparaciones entre ellos, de acuerdo al diagrama de árbol
anterior.
______________________________________________________________________ 102
DESGLOSES 1er. Nivel 1.-LECTURA DE DATOS
2.-COMPARACIONES E IMPRESION Niveles superiores
2.- COMPARACION E IMPRESIÓN
2.1 Ver si a > b
2.1.1 (V) Ver si si a > c
2.1.1.1. (V) Imprimir a, “mayor”
2.1.1.2. (F) Imprimir c, “mayor”
2.1.2 (F) Ver si a > c
2.1.2.1. (V) Imprimir b, “mayor”
2.1.2.2. (F) Ver si b > c
2.1.2.2.1. (V) Imprimir b, “mayor”
2.1.2.2.2. (F) Imprimir c, “mayor” El desglose anterior requiere de cinco pruebas de escritorio distintas (con cinco conjuntos
de datos diferentes) para probar todas las distintas opciones.
EJERCICIOS 3.5.1 I. Realizar la prueba de escritorio de los siguientes desgloses, con los conjuntos de
datos que se proporcionan:
a) 1.-PASOS INICIALES 1.1 Asignar 0en T
1.2 Asignar 1 en N
2.-PROCESO
2.1 Mientras N sea menor que 5 hacer lo siguiente repetidamente:
2.1.1 Leer un valor de X
2.1.2 Ver si X es menor que 0
2.1.2.1 (V) Multiplicar X por -1 y sumárselo a T
2.1.2.2 (F) Sumar el valor de X a T
2.1.3 Incrementar N en 1 (N N + 1)
______________________________________________________________________ 103
3.-IMPRESIÓN
3.1 Imprimir el valor de T
b) 1. LECTURA DE DATOS:
1.1. Leer el valor del CODIGO 1.2. Leer el valor del PAGO
2. COMPARACIONES CALCULO E IMPRESIÓN
2.1. Ver si CODIGO > 5:
2.1.1. (V) Asignar 10 en TARIF
2.1.2. (F) Asignar 15 en TARIF
2.2. Leer DEDUC
2.3. Ver si DEDUC > 100
2.3.1. (V) Hacer lo siguiente secuencialmente
2.3.1.1. Multiplicar TARIF x PAGO y el resultado asignarlo a TOTAL
2.3.1.2 Restar DEDUC de TOTAL
2.3.1.3 Imprimir TOTAL
2.3.2 (F) Hacer lo siguiente secuencialmente
2.3.2.1 Multiplicar TARIF por 0.8
2.3.2.2 Multiplicar TARIF x PAGO y resultado Asignarlo en TOTAL
3.2.3 Restar DEDUC de TOTAL
2.3.2.4 Imprimir TOTAL y DEDUC
Datos 1: 6, -1, 0, 3, -5
Datos 2: 2, 2, 2, 2, 2
Datos 3: -3, -3, -3, -3, -3
Datos 1: 7, 2150, 150
Datos 2: 6, 1200, 80
Datos 3: 2, 4000, 300
Datos 4: 4, 600, 30
Datos 5: 5, 100, 10
Observación 3.5.1 Si el ramal 2.3.1 Verdadero o
2.3.2 Falso de una decisión tiene dos o más
instrucciones se utilizará la instrucción
general HACER LO SIGUIENTE y se indentará a
la derecha los subíndices correspondientes.
______________________________________________________________________ 104
II. En los siguientes ejercicios desarrolle el análisis y desglose para el programa respectivo
(Compruebe con una P.E.):
1.- Se leen las longitudes de los lados de un triángulo. Determinar si el triangulo es
equilátero, isósceles propio o escaleno. (Isósceles propio = dos lados congruentes, el
tercer lado no congruente).
2.- Conociendo los coeficientes de una ecuación cuadrática, determinar si las raíces son
reales o no.
3.- Dados Las coordenadas de dos puntos en el plano cartesiano, determinar si los
puntos son iguales, o bien si determinan una recta horizontal, vertical u oblicua
4.- Se tienen varios números enteros positivos, si el número es mayor que 10 se desea
encontrar su triple, en caso contrario se debe calcular su doble.
5.- En una tienda se ofrece crédito a ciertos clientes. Se tienen los montos de la deuda y
el número de meses de mora. Se cobrará un recargo de 2% por mora. Se desea
calcular el monto pendiente de pago de cada cliente (incluye el recargo).
6.- Para una causa de beneficencia se han formado varios grupos de personas, casa
grupo tiene un número distinto de miembros y se han comprometido a adoptar Lps.
1,000.00 por grupo independientemente del tamaño de cada grupo. Dentro de cada
grupo los miembros han decidido adoptar equitativamente. Se le proporciona al
computador el número de miembros de cada grupo y se desea calcular la aportación
por miembro de cada grupo
3.5.2. REPETICION CON DECISIONES ANIDADAS Ejemplo 3.12 (Árbol de decisión, Repetición centinela, Aumentos por categoría)
Ejercicio del Apéndice A, No.36
Dados la categoría y el sueldo de un trabajador, calcule el aumento correspondiente
teniendo en cuenta la siguiente tabla. Imprima la categoría del trabajador y su nuevo sueldo.
Categoría Aumento
1 15%
2 10%
3 8%
______________________________________________________________________ 105
ESTRATEGIA
(Varios) (Varios) Salidas Categoría Entradas Categoría Nuevo_s Sueldo Se necesitará utilizar:
• Decisiones anidadas: ya que el aumento varia según la categoría, se deben hacer
clasificaciones según esta (categoría), para ello, se utilizará un árbol de decisiones
V Aumento del 15 %
Aumento del 10%
Categoría=1 V
F categoría = 2
F
Aumento del 8%
• Proceso repetitivo controlado por centinela (categoría o sueldo), escogiendo la
categoría con un valor no posible = 99 (no es 1, 2 o 3)
Condición de repetición: Categoría ≠ 99
1. EJEMPLO DE ESCRITORIO
Caso I Caso II
Categoría = 2 Categoría = 1
Sueldo = 2,000 Sueldo = 3,000
Aumento = 2,000 * 0.10 = 200 Aumento = 3,000 * 0.15 = 450
Nuevo_S = 2,000 + 200 = 2,200 Nuevo_S =3,000 + 450 = 3,450
Observación 3.5.2.1 : Cuando la categoría = 2 (V) se considerará un aumento
del 10%, si la categoría no es igual a 2 , se asume entonces que ese
ramal falso corresponderá a la categoría = 3 en forma tácita sin preguntar por
ello, así se evita una condición de decisión adicional.
______________________________________________________________________ 106
2. DICCIONARIO DE VARIABLES Identificador Descripción .
Categoría Categoría
Sueldo Sueldo Inicial
Aumento Aumento
Nuevo_S Nuevo sueldo
3. FORMULAS
Aumento = Sueldo * 0.15 (1)
Aumento = Sueldo * 0.10 (2)
Aumento = Sueldo * 0.08 (3)
Nuevo_S = Sueldo + Aumento (4)
4. RESUMEN DEL ANALISIS
SALIDA: (Varios números) Categoría, Nuevo_s
2 en cada ciclo
ENTRADA: (Varios números) Categoría, Sueldo
2 en cada ciclo
PROCESO: Proceso repetitivo controlado por centinela (99, Categoría ≠ 99), en
el cual, para cada empleado se lee la categoría y el sueldo, y mediante
decisiones anidadas, se calcula el aumento respectivo (Ver
DIAGRAMA DE ARBOL), calcular e imprimir N_sueldo.
Observación 3.5.2.2 Note que para todas la Categorías se podría realizar un
ejemplo Caso, pero con los ya realizados se nota que para las diferentes
categorías solamente varia el porcentaje de aumento.
______________________________________________________________________ 107
5. DESGLOSES 1er. Nivel
1. Pasos Iniciales
2. Proceso
2do. Nivel
1. PASOS INICIALES 1.1 Leer Categoría
2. PROCESO 2.1 Mientras Categoría ≠ 99 hacer lo siguiente repetidamente
2.1.1 Leer Sueldo
2.1.2 Calcular aumento (Fórmulas) (*)
2.1.3 Calcular Nuevo_S
2.1.4 Imprimir “Categoría”, Categoría
2.1.5 Imprimir “Nuevo sueldo”, Nuevo_S
2.1.6 Leer Categoría
(*)
DESGLOSE 2do NIVEL 1. PASOS INICIALES 1.1 Leer Categoría
2. PROCESO
2.1 Mientras Categoría ≠ 99 hacer lo siguiente repetidamente
2.1.1 Leer Sueldo
2.1.2 Ver si Categoría = 1
2.1.2.1 (V) Calcular aumento (Fórmula-1)
2.1.2.2 (F) Ver si Categoría = 2
2.1.2.2.1 (V) Calcular el aumento (Fórmula-2)
2.1.2.2.2 (F) Calcular el aumento (Fórmula-3)
2.1.3 Calcular Nuevo_S (Fórmula-4)
2.1.4 Imprimir “Categoría : ”, Categoría
Aumento = Sueldo * 0.15 Aumento = Sueldo * 0.10 Aumento = sueldo * 0.08 Nuevo_S = Sueldo + Aumento
El cálculo del aumento requerirá mas detalle (desglose), requiriéndose decisiones anidadas, y la ayuda del Diagrama de Árbol previamente mostrado
______________________________________________________________________ 108
2.1.5 Imprimir “Nuevo sueldo : ”, Nuevo_S
2.1.6 Leer Categoría
El lector puede ver en el Apéndice E en el Ejemplo E.1otra forma de desarrollar este
ejercicio 6. PRUEBA DE ESCRITORIO Datos: 2, 2000, 1, 3000, 99
Memoria Salida:
Categoría
Sueldo Aumento
Nuevo_S
2
1 99
2,000
3,000
200
450
2,200
3,450
Análisis de Estructuras Concatenación: 1,2 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.1.5, 2.1.6
Decisión: 2.1.2, 2.1.2.2 Repetición: 2.1
Ejemplo 3.13 (Árbol de decisiones, Repetitivo centinela, Lavado de autos, Apéndice A No. 37) Un grupo de personas dedicadas al negocio de lavado de automóviles, necesita un programa
para que determine cuanto tiene que pagar cada cliente de acuerdo a la siguiente tabla de
servicio: Tipo de Servicio Precio___
1. Lavado Exterior Lps. 25.00
2. Lavado Interior Lps. 30.00
3. Lavado Exterior e Interior Lps. 35.00
4. Lavado de Motor Lps. 40.00
Además de los servicios, se ofrece un descuento del 7% si se llevan dos o más automóviles.
Categoría: 2 Nuevo Sueldo: 2,200 Categoría: 1 Nuevo Sueldo: 3,450
______________________________________________________________________ 109
Se proporcionará al computador, el tipo de servicio y el No. de automóviles, calcular el
total a pagar por cliente.
ESTRATEGIA:
(Varios)
Salida (Varios) Entrada Tipo
Pagos N_autos
Se debe tomar en cuenta lo siguiente: • Se utilizarán Decisiones anidadas, como los precios varían según el tipo de servicio
seleccionado, así se deberá clasificar según el Tipo, como hay un descuento a
considerar, se debe tener antes un Subtotal , así para calcular dicho subtotal se
necesitará un Diagrama de árbol:
Subtotal N_autos * 25
V
Tipo=1 V Subtotal N_autos * 30
F Tipo=2 V Subtotal N_autos * 35
F
Tipo =3
F Subtotal N_autos * 40
• Como se mencionó previamente, para hacer el árbol de decisiones se debe considerar un
descuento lo que implica tener que calcular un Subtotal para posteriormente
independientemente del tipo de servicio seleccionado, y según el N_autos .calcular un
descuento
Si N_autos > 2 (V) se aplicará un descuento del 7% o del
(F) 0% en caso contrario
______________________________________________________________________ 110
• Repetición, seleccionando como variable centinela (Valor ficticio de fin de datos)
N_autos igual a cero y la condición de la repetición: N_autos ≠ 0
1. EJEMPLO DE ESCRITORIO
2. DICCIONARIO DE VARIABLES
Identificador Descripción . Tipo Tipo de servicio
N_autos Número de autos
Subtotal Subtotal
Desc Descuento
Total Total a pagar
3. FORMULAS
Subtotal = N_autos * 25 (Fórmula-1)
Subtotal = N_autos * 30 (Fórmula-2)
Subtotal = N_autos * 35 (Fórmula-3)
Caso I Caso II Caso III
N_autos = 3 N_autos = 1 N_autos = 0
Tipo = 4 Tipo = 2
Subtotal = 3 * 40 = 120 Subtotal = 1 * 30 = 30
Desc = 0.07 * 120 = 8.4 Desc = 0 (1)
Total = 120 – 8.4 = 111.6 Total = 30 – 0 = 30
(1) Observación 3.5.2.3: En los casos en donde hay MUCHAS VARIANTES
conviene seleccionar para el Caso I datos en los que apliquen todas ellas, para
posteriormente en un Caso II tratar de llevar estos en forma paralela y hacer
coincidir las fórmulas, por ejemplo que en ambos casos el total sea subtotal –
descuento, debiendo entonces, en el Caso II, asignar 0 (cero) a descuento. En
algunos ejercicios se estarán indicando formas alternativas para resolver
problemas (ver Apéndice E, ejemplos E.1, E.2).
______________________________________________________________________ 111
Subtotal = N_autos * 40 (Fórmula-4)
Desc = 0.07 * Subtotal (Fórmula-5)
Total = Subtotal - Desc (Fórmula-6)7
4. RESUMEN DEL ANALISIS
SALIDA: (Varios números) Total
1 en cada ciclo
ENTRADA: (Varios números) Tipo, N_autos
2 en cada ciclo PROCESO: Proceso repetitivo controlado por centinela (N_autos ≠ 0), para cada
cliente se lee N_autos y el tipo, mediante decisiones anidadas
(Diagrama de árbol adjunto), se calcula el subtotal respectivo,
posteriormente, si N_autos ≥ 2, se calcula el descuento que
corresponde. Al final se calcula e imprime Total.
5. DESGLOSES
1er. Nivel
1. Pasos Iniciales
2. Proceso (ó Clasificación e impresión)
3. Pasos Finales
2do. Nivel
1. PASOS INICIALES
1.1 Leer N_autos
2. PROCESO
7 Note que el subtotal solamente varía en el precio de cada tipo de servicio, posteriormente se estudiarán simplificaciones al respecto, ver Capítulo IV Ejemplo 4.12 previo al estudio del seudocódigo Nolae (Ver Apéndice E, ejemplo E.2).
______________________________________________________________________ 112
2.1 Mientras N_autos ≠ 0 hacer lo siguiente repetidamente
2.1.1 Leer Tipo
2.1.2 Ver Si Tipo = 1
2.1.2.1 (V) Calcular Subtotal (Fórmula-1)
2.1.2.2 (F) Ver Si Tipo = 2
2.1.2.2.1 (V) Calcular Subtotal (Fórmula-2)
2.1.2.2.2 (F) Ver Si Tipo = 3
2.1.2.2.2.1 (V) Calcular Subtotal (F-3)
2.1.2.2.2.2 (F) Calcular Subtotal (F-4) 2.1.3 Ver Si N_autos ≥ 2
2.1.3.1 (V) Calcular Desc (Fórmula-5)
2.1.3.1 (F) Asignar 0 a Desc
2.1.4 Calcular Total (Fórmula-6)
2.1.5 Imprimir “Total a Pagar”, Total
2.1.6 Leer (siguiente) N_autos 6. PRUEBA DE ESCRITORIO Datos: 3, 4, 1, 2, 0 Memoria:
N_autos Tipo Subtotal Desc Pago
3 1 0
4
2
120
30
8.4
0
111.6
30
Salida
Total a Pagar: 111.6
Total a Pagar: 30
Muchas Gracias
______________________________________________________________________ 113
Análisis de Estructuras Concatenación: 1, 2, 3 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.1.5, 2.1.6 Decisión: 2.1.2, 2.1.2.2, 2.1.2.2.2, 2.1.3 Repetición: 2.1 Ejemplo 3.14 (Árbol de decisiones, decisión anidada, variable real, rangos, CI,) Dado el Coeficiente Intelectual de un estudiante, clasificarlo conforme a los siguientes
rangos (considerar que el CI es una variable real). ____CI Rango .
CI < 80 Subnormal
80 < CI ≤ 110 Normal
CI >110 Superior ESTRATEGIA:
Subnormal
Salida 1 Mensaje Normal ó Entrada CI
Superior • Repetición controlada por centinela, condición de repetición: CI ≠ 0 • Decisiones anidadas, ilustradas con un Diagrama de árbol.
V “Subnormal”
“Normal”
CI < 80 V
F CI < 110
F
“Superior”
______________________________________________________________________ 114
Adicionalmente se ilustran los rangos con la ayuda de la recta real, y se recordará que:
• Si una cantidad “no es menor” entonces es “mayor o igual",
• Sino es menor o igual es estrictamente mayor (Ver la Tabla No.1 del Capítulo 1)
Puede resultar mas claro al lector diseñar el árbol de decisiones respectivo, se empleó la
recta real para ilustrar gráficamente los rangos involucrados.
En vista de que en este ejercicio no hay que realizar ningún cálculo y que la única variable
de entrada es el CI se procederá al…
4.- RESUMEN DEL ANALISIS
Subnormal
SALIDA: (Un mensaje) Normal
Superior
80 110 |
80
110
110
Si CI < 80 (V)
(F)
11080
(F)
Si CI ≤ 110
(V)
“Subnormal”
“Normal”
“Superior”
80 110|
Observación 3.5.2.4: Para el segundo intervalo no es necesario realizar una decisión
compuesta 80 ≤ CI y CI ≤ 110, la primera parte no es necesaria pues si resulta
falsa la condición CI < 80 la consecuencia inmediata es que CI > 80 (o 80 < CI) y
ya no es necesario plantearlo, basta preguntar solamente CI ≤ 110
______________________________________________________________________ 115
ENTRADA: (Un número) CI
PROCESO: Se lee el CI del alumno y mediante decisiones anidadas se clasificará
el CI imprimiendo el mensaje correspondiente (Ver diagramas
adjuntos)
5. DESGLOSES
1er. Nivel 1. Pasos Iniciales
2. Proceso (Clasificación e impresión)
2do. Nivel 1. PASOS INICIALES
1.1 Leer CI
2. PROCESO (CLASIFICACION E IMPRESION)
2.1 Ver Si CI < 80
2.1.2. (V) Imprimir “Normal”
2.1.2 (F) Ver Si CI < 110
2.1.2.1 (V) Imprimir “Normal”
2.1.2.22 (F) Imprimir “Superior”
6. PRUEBA DE ESCRITORIO
Datos1: 100 Datos2: 75 Datos3: 125 Memoria: Memoria: Memoria:
CI CI CI 100 75 125
Salida Salida Salida
Normal Subnormal Superior
______________________________________________________________________ 116
Análisis de Estructuras Concatenación: 1, 2 Decisión: 2.1 2.1.2
Vale decir que el lector ya está en la capacidad de realizar varios ejercicios relacionados,
del Apéndice A (del, ejercicios del 46 al 55), pero como se puede ver en el desarrollo de los
ejemplos 3.12, 3.13 y 3.14, la numeración detallada que da el Desglose ya se torna
engorrosa, así que en las secciones subsiguientes se aprenderá a utilizar una notación mas
sencilla que facilitará el desarrollo de dichos ejercicios, vale decir que la metodología
utilizada hasta ahora siempre es válida y el lector debe conservarla para seguir
desarrollando buenos hábitos en la programación, muchas veces se necesitará escribir
ejemplos de escritorio, tener siempre claras las Salidas y las Entradas, etc..
3.6 CONCEPTO DE ALGORITMO
Todos los desgloses que se han presentado son ejemplos de algoritmos; y, en realidad,
representan el tipo de algoritmos que serán de interés en este libro. Se puede observar que
estos algoritmos se pueden realizar únicamente con ayuda de lápiz y papel, en lo que se ha
llamado prueba de escritorio (P.E.). Si el resultado de la ejecución del algoritmo es la
misma, independientemente del ejecutor (suponiendo que el ejecutor realiza la P-E
correctamente); se dirá que el algoritmo está bien definido, Los algoritmos que se han
diseñado de manera descendente, o sea por medio de desgloses sucesivos, son susceptibles
de codificarse de cierta manera para que la computadora “entienda” y los pueda ejecutar. El
algoritmo codificado para la computadora constituye un programa.
Hasta el momento se ha visto que las instrucciones dentro de un algoritmo pueden
ejecutarse de tres maneras distintas:
Observación 3.5.2.5. Las explicaciones brindadas para ilustrar las Decisiones
anidadas en repetición utilizando este tipo de rangos, aplican a variables enteras o
discretas y a variables reales o continuas
Se entenderá por algoritmo al conjunto finito de pasos o instrucciones claras, precisas y sin ambigüedad; que aplicadas en un número finito de veces conducen a la realización de una tarea específica.
______________________________________________________________________ 117
1.- Una seguida de otra, en la forma en que se presentan.
2.- Dependiendo de la evaluación de una condición, una o un conjunto de instrucciones
se ejecuta y otras u otra no.
3.- Una o un conjunto de instrucciones se pueden ejecutar varias veces, repetidamente,
dependiendo de la evaluación de una condición. Estas tres formas distintas de organizar o estructurar la ejecución de las instrucciones se
llaman las estructuras básicas y son:
1.-La concatenación o secuencia.
2.-La decisión o selección.
3.-La repetición o iteración. Cuando un algoritmo se fundamenta en estas tres estructuras, se dice que el algoritmo está
estructurado.
EJERCICIOS 3.6 I.-- Diseñar algoritmos para resolver las siguientes situaciones:
a).- Cambiar la llanta de un vehículo
b).- Cocinar un huevo revuelto (“picado”)
c).- Proceso de tu matrícula
d).- Ir al cine
e).- Preparar una taza de café
II.- Determina si los siguientes son algoritmos:
a) 1.- Realiza el paso 2
2.- Volver al paso 1
b) 1.- Pasar al siguiente paso
2.- Pasar al siguiente paso
3.- Pasar al siguiente paso
4.- Pasar al siguiente paso
______________________________________________________________________ 118
Continuar….
c) Con una calculadora en mano realizar las siguientes instrucciones para sumar
5 y 2:
1.- Presiona la tecla con el número 5
2.- Presiona la tecla con el signo +
3.- Presiona la tecla con el número 2
4.- Presiona la tecla el símbolo =
5.- Lee la respuesta en la pantalla de la calculadora
______________________________________________________________________ 119
CAPITULO 4 FUNDAMENTOS DE PROGRAMACION ESTRUCTURADA 4.1 CONCEPTO DE SISTEMA
Considerando el concepto más general de sistema:
Conceptualizado de esta manera, resulta más difícil ejemplificar que no es un sistema por la
generalidad del concepto.
A continuación algunos ejemplos:
a) El sistema respiratorio del cuerpo humano
b) El sistema óseo de Juan Pérez.
c) El sistema solar.
d) El sistema político de la República de Honduras.
e) El sistema del diseño estructural del edificio de la Municipalidad.
Dado un sistema, se puede determinar la “frontera” del mismo. Esta frontera distingue lo
que está dentro del sistema de lo que está afuera. La frontera puede ser concreta o no. Lo
que está afuera de la frontera del sistema se llama el “medio ambiente” del sistema.
“Un sistema es un conjunto de objetos o entes que están relacionados de alguna
______________________________________________________________________ 120
Medio ambiente Frontera (puede ser Intangible)
Figura 4.1
Tanto la definición de la frontera, como la del medio ambiente (m.a.) de un sistema, es un
tanto convencional, dependerá de cómo se aprecie o desee apreciar el sistema desde los
puntos de vista de los intereses u objetivos de algún estudio particular que involucre el
sistema.
Los sistemas se pueden clasificar de distintas maneras, y se considerarán únicamente dos de
ellas.
• Por su interrelación con su medio ambiente, los sistemas pueden ser:
o Cerrados: Cuando NO admiten interacción con su medio ambiente.
o Abiertos: Cuando admiten interacción con su medio ambiente.
• Por su cambio en el tiempo (o algún período de tiempo)
o Estáticos: Cuando no varían en el tiempo (o en algún período de tiempo
referencial).
o Dinámicos: Cuando admiten cambios en el tiempo.
Para los fines de este libro la computadora es un sistema abierto y dinámico. Sus
componentes fundamentales: software y hardware interactúan con su medio ambiente que
es el usuario (el ser humano u otras máquinas) de quien recibe y envía datos o información.
Para otros fines, el medio ambiente de la computadora podría ser algo más amplio, podría
incluir el medio físico en donde se coloca la computadora y/o las fuentes de energía
eléctrica donde se conecta. Para efectos de la programación nos interesa el procesamiento
de los datos, por lo cual el dinamismo del sistema se refleja en los cambios que suceden en
la memoria. Por otra parte, al ser el sistema abierto, recibe y proporciona información a su
medio ambiente que es el usuario.
Sistema
______________________________________________________________________ 121
No se debe perder de vista que la computadora actúa bajo las instrucciones de un programa,
así que, para que la computadora pueda ser un sistema abierto es necesario que disponer de
instrucciones que le permitan interactuar con el usuario. De esta manera se tienen
instrucciones de ENTRADA y de SALIDA; además instrucciones que le permiten al
computador cambiar los estados de la memoria o sea de los contenidos de las variables a
partir de otras variables.
En resumen, la computadora como sistema abierto requiere de cuatro tipos de instrucciones
básicas:
1.- Instrucciones que permitan al usuario transmitir datos o información hacia la
computadora.
2.- Instrucciones que permitan al usuario obtener información o datos de la
computadora.
3.- Instrucciones que permitan cambiar el contenido de las variables, en función del
contenido de otras variables.
4.- Instrucciones que permitan al sistema no realizar cambios.
Estas instrucciones básicas se caracterizarán en la siguiente sección.
4.2 BLOQUES ESTRUCTURADOS ATOMICOS E INTRODUCCION A LA
NOTACION DE DIAGRAMA DE FLUJO
Las flechas indican el orden en que se ejecutan las instrucciones dentro del algoritmo, por
lo que el símbolo anterior es un componente de lo que se conoce como diagrama de flujo.
Un bloque estructurado es una instrucción o conjunto de instrucciones de un algoritmo
y se representa por medio de un rectángulo, dibujando con una base horizontal, y con
una (y sólo una) flecha de entrada y una (y sólo una) flecha de salida.
______________________________________________________________________ 122
En este enfoque, no toda instrucción o estructura será válida en la construcción de los
algoritmos estructurados, por lo que se tiene que definir con cierto detalle cuales son los
bloques estructurados (b.e.) con que se estará desarrollando este capítulo.
Los párrafos anteriores no especifican cuales son en sí los bloques estructurados (b.e.), sino
su representación. Ahora se van a introducir los distintos b.e., y siguiendo con la notación
gráfica, se presentan cuatro b.e. básicos, que se llaman los bloques estructurados atómicos.
(b.e.a)
Bloques estructurados atómicos 1.- Lectura : Se efectúa la lectura de las variables que aparecen en la lista L. Leer
una variable significa que se toma un dato del exterior y se almacena en la variable
especificada, tal como se ha hecho en la sección 3.4.
2.- Escritura: Se realiza la impresión de las variables o mensajes que se indican en
la lista L. Imprimir una variable (que puede ser impresa en el papel por medio de
una impresora o mostrado en un monitor) significa imprimir su contenido, como en
los ejemplos de la sección 3.4 (páginas
3.- Asignación: En la variable V se asigna el valor de la expresión E. Corresponde al
almacenamiento en las variables de la memoria, según se ha estudiado en la sección
2.3.
1. lectura:
2. escritura:
3. asignación:
4. nulo:
lea L
escriba L
V E
nulo
______________________________________________________________________ 123
4.- Nulo: El bloque nulo le indica al computador que no haga nada, lo que en
muchos casos es equivalente a indicarle que siga con la siguiente instrucción de
acuerdo al flujo del algoritmo, Más adelante se verá su importancia.
Ejemplo 4.1 (Diagrama de Flujo, concatenación, Planilla de sueldos)
Elaborar el Diagrama de flujo del Ejemplo 3.4 (pág. 60), Planilla de sueldos de la sección 3.4.1
DICCIONARIO DE VARIABLES PHORA Pago base por hora VIVIENDA Pago vivienda
HTRABAJ Hrs ordin.trabajadas INGBRUTO Total Ing.bruto
HEXTRAS Hrs extras trabajadas TDEDUC Total deducción
DIHSS Deducción IHSS SNETO Sueldo neto
Fórmulas:
INGBRUTO = HTRABAJ * PHORA +HEXTRAS * PHORA * 2 (Fórmula-1) DIHSS = INGBRUTO * 0.035 (Fórmula-2) TDEDUC = DIHSS + VIVIENDA (Fórmula-3) SNETO = INGBRUTO – TDEDUC (Fórmula-4) DESGLOSE
1.- LECTURA DE DATOS
1.1 Lectura de Pago base por hora
1.2 Lectura de Horas ordinarias trabajadas
1.3 Lectura de Horas extras trabajadas
1.4 Lectura de Pago de vivienda
2.- CALCULOS
2.1 Calculo del Ingreso Bruto (Fórmula-1)
2.2 Cálculo de la deducción IHSS (Fórmula-2)
2.3 Cálculo de total de deducciones (Fórmula-3)
2.4 Cálculo del Sueldo Neto (Fórmula-4)
3.- IMPRESIÓN DE RESULTADOS
3.1 Impresión del Ingreso Bruto
3.2 Impresión del total de deducciones
3.3 Impresión del sueldo neto
______________________________________________________________________ 124
En la representación en diagrama de flujo del algoritmo correspondiente, se agregan los
símbolos extremos de inicio y final (que no son b.e.), y se tiene el siguiente diagrama:
1.1 Lectura de Pago base por hora 1.2 Lectura de Horas ord. Trabajadas 1.3 Lectura de Horas ext. Trabajadas 1.4 Lectura de Pago de Vivienda
2.1 Cálculo del Ingreso Bruto
2.2 Cálculo de la deducción
2.3 Cálculo del total de deduc.
2.4 Cálculo del Sueldo Neto
3.1 Impresión del Ingreso Bruto
3.2 Impresión del total de deduc.
3.3 Impresión del sueldo neto
Inicio
Lea PHORA
Lea HEXTRAS
Lea HTRABAJ
Lea VIVIENDA
INGBRUTO HTRABAJ * PHORA + HEXTRAS * PHORA*2
IHSS DIHSS INGBRUTO * 0.035
TDEDUC DIHSS + VIVIENDA
SNETO INGBRUTO - TDEDUC
Escriba INGBRUTO
Escriba TDEDUC
Escriba SNETO
Final
______________________________________________________________________ 125
En el ejemplo anterior se tienen dos representaciones del mismo algoritmo. En el lado
izquierdo se encuentra el desarrollo del desglose y a la par el diagrama de flujo. Dentro de
los rectángulos del diagrama se pudo haber colocado las instrucciones tal como aparecen en
el desglose, pero abreviando, se simplificó y estandarizó el lenguaje técnico para expresar
los algoritmos.
La notación que se usará no será gráfica (como los diagramas de flujo que son planos) sino
lineal y será muy similar al código de lenguajes de programación como: PASCAL, ADA95,
etc. Por tal razón la notación simplificada que se estará usando para representar los
algoritmos se conoce como un seudocódigo, y en particular el seudocódigo que se empleará
es el NOLAE (NOtación Lineal para Algoritmos Estructurados).
EJERCICIOS 4.2
1.- Determine que gráficos constituyen b.e. y cuales no ( explique porqué no) (a)
(b) (d) ( c ) (e) (f)
______________________________________________________________________ 126
NOtación Lineal de Algoritmos Estructurados
BLOQUE NOlae
Lectura lea
Escritura escriba
Asignación V ← E
Nulo nulo
Figura 4.2.1
4.3. INTRODUCCION AL SEUDOCODIGO NOLAE CON LOS b.e.a. La notación NOLAE para los b.e.a. prácticamente ya ha sido introducido con sus
representaciones en diagrama de flujo y es la siguiente (Ver figura 4.2.1):
1.- Lectura lea L ó lea L 2.- Escritura escriba L ó escriba L 3.- Asignación V E 4.- Nulo nulo ó nulo
4.4.- ALGORITMOS SEUDOCODIFICADOS CON CONCATENACION La concatenación de instrucciones es la forma más natural en que generalmente se
presentan las instrucciones y de hecho ya se ha estado haciendo desde la sección 4.2. Ahora
se procederá a introducir el concepto formalmente.
AsignaciónLectura
Medio Ambiente
S i s t e m a
Escritura
Frontera
______________________________________________________________________ 127
Si se tienen dos b.e.
Y se hace coincidir la salida del primero con la entrada del segundo, se tiene lo siguiente:
Por definición, se considera que forman un nuevo b.e.
Obsérvese que en las reglas de representación de los b.e. en diagrama de flujo se respetan:
un rectángulo con base horizontal, con una flecha de entrada y una de salida.
El bloque anterior NO es un b.e.a (no es lectura, ni escritura, ni asignación, ni nulo) sino
que es compuesto y resulta de aplicar la estructura de concatenación a B1 y B2.
Si interesara lo que está dentro del b.e. anterior, se puede representar de la siguiente
manera:
La concatenación puede ser extendida a tres o más b.e. como se vio en el ejemplo de la
sección 4.2. Así, por ejemplo, el b.e. compuesto que resulta de la concatenación de 3 b.e. se
puede representar de la siguiente manera en el diagrama de flujo
B1
B2
B1 B2
B1 B2
______________________________________________________________________ 128
A continuación se mostrarán los seudocódigos en Nolae de algunos de los Ejemplos
desarrollados en secciones anteriores, en ellos se utilizarán todos los bloques estructurados
vistos hasta el momento.
Ejemplo 4.2 (Nolae, Concatenación, leer dos números, imprimir suma)
Se tiene un desglose para un algoritmo en el cual se leen dos números A y B, se calcula su
suma y se imprime 1.- Leer los números A y B
2.- Calcular su suma y almacenarla en S
3.- Imprimir el valor de S La representación en NOLAE, lo mismo que la representación en diagrama de flujo,
comienza con la palabra inicio y termina con la palabra final que implícitamente indican
concatenación. Por otra parte las instrucciones, cuando están concatenadas, se separan por
coma “ , ”. Luego, el algoritmo en seudocódigo se puede escribir así:
Inicio lea A, B, S A + B, escriba S final Sin embargo, para mayor claridad, se colocan las instrucciones concatenadas una bajo otra,
al mismo margen, de la manera siguiente:
Inicio lea A, B
S A + B
escriba S Final
También se puede sustituir el estilo de negrita por el de subrayado para las palabras claves
de Nolae
Inicio lea A, B
S A + B
escriba S
Final
______________________________________________________________________ 129
Ejemplo 4.3 (Nolae, Decisión, Venta de dos artículos.)
Elaborar el seudocódigo del problema planteado en el Ejemplo 3.5, en el cual: se le
proporciona al computador los precios de venta de dos artículos y se desea imprimir el total
a pagar por el comprador, se deberá considerar el 12% de impuesto.
Se obtuvo el siguiente Desglose 2do Nivel:
1. LECTURA DE DATOS
1.1 Leer Precio1
1.2 Leer Precio2
2. CALCULOS
3. IMPRESION DE RESULTADOS
3.1 Total
A continuación, se presentan algunas reglas sencillas para reescribir este desglose en Nolae: a. Se omitirán los títulos del primer desglose (1, 2, 3).
b. Se emplearán las palabras reservadas (equivalentes del desglose) en Nolae.
c. En lugar de citar las fórmulas para los cálculos se colocarán las fórmulas mismas en el
formato de asignaciones.
d. Se agregarán en donde correspondan las palabras Inicio y Final.
e. Se utilizarán “INDENTACIONES” en lugar de las numeraciones con subincisos
propios del Desglose.
Después de aplicar las reglas antes citadas, se presenta a continuación el algoritmo
solicitado y a la par el desglose correspondiente (con el propósito de facilitar la
comprensión del lector).
Subtotal =precio1 + precio2 (Fórmula-1)
Isv =subtotal * 0.12 (Fórmula-2)
Total =subtotal + isv (Fórmula-3)
2.1 Calcular Subtotal (Fórmula-1)
2.2 Calcular Isv (Fórmula-2)
2.3 Calcular Total (Fórmula-3)
Fórmulas:
______________________________________________________________________ 130
DESGLOSE NOLAE Inicio 1.1 Leer Precio1 lea Precio1
1.2 Leer Precio2 lea Precio2
2.1 Calcular Subtotal (Fórmula_1) Subtotal ← Precio1 + Precio2
2.2 Calcular Isv (Fórmula_2) Isv ← Subtotal * 0.12
2.3 Calcular Total (Fórmula_3) Total ← Subtotal + Isv
3.1 Imprimir Total escriba Total
Final
EJERCICIOS 4.4
1.- Realizar la (s) prueba (s) de escritorio para cada uno de los algoritmos que se
presentan. Tome en cuenta que las pruebas de escritorio de un algoritmo
seudocodificado en Nolae, se realizan de igual manera que en los Desgloses.
a) inicio datos 1: 20, 4
lea x, y datos 2: 5, 6
t x – y²
q 20 – t
Escriba t, q
final
Observación 4.4 Al codificar en Nolae, no se cuenta con las numeraciones que
provee el Desglose, así, las indentaciones toman relevancia, por ejemplo inicio y final
deben colocarse al mismo nivel, las instrucciones del cuerpo del algoritmo, para el
caso de una concatenación deben ir indentadas más a
la derecha en el mismo margen, esto se resalta con
líneas verticales como las mostradas:
______________________________________________________________________ 131
4.5.- ALGORITMOS SEUDOCODIFICADOS CON DECISION
Para construir el b.e. generado por una decisión se necesita una condición C y dos b.e.: B1
y B2. La Condición se representará por un rombo y obteniendo el siguiente diagrama:
b) inicio S 0 datos 1: 2, 3, 6
lea K2 datos 2: 0, -1, 7
escriba “Inicio de cálculos” datos 3: -2, 0, 3
S S + K2 * 5
lea tron, R2D2
S S + tron * (R2D2-5)
escriba S
final
c) inicio dato : 5 escriba “Teclee un número”
lea num
D 2 * num
escriba “El doble del número leído es”, D
final
B1
CV F
Punto de salida
______________________________________________________________________ 132
Por definición, el b.e. que se obtiene es un b.e. compuesto generado por una decisión, a B1
se le llama la rama verdadera y a B2 la rama falsa. Se puede remarcar el b.e. como se indica
en el diagrama que sigue:
De nuevo se puede observar que se satisfacen las reglas de representación de un b.e. A la
flecha de salida se le llama también el punto de salida (de encuentro) o el final de la
decisión. También se puede observar que el flujo, desde la flecha de entrada a la flecha de
salida, pasa o bien por B1 o bien por B2, pero no ambas, dependiendo de la veracidad o
falsedad de la condición C.
Si la condición C es Verdadera, se ejecuta B1 (ignorándose B2) y así se completa la
ejecución de la decisión. Pero, si resulta que C es Falsa, se ejecuta B2 y no B1. Ejecutar la
decisión no solamente implica la evaluación de la condición C, sino además la ejecución de
una (y sólo una) de sus ramas. La representación en Nolae es: si C entonces B1 sino B2 fin-si O bien, usando márgenes:
V F
Punto de salida
B2
C
Si C si C entonces entonces B1 B1 sino ó sino B2 B2 Fin-si Fin-si
______________________________________________________________________ 133
Ejemplo 4.4 (Nolae, Decisión, Venta con descuento) Diseñar el algoritmo en seudocódigo Nolae del Ejemplo 3.6 (pág.72) de la Sección 3.4.2., en el
cual se otorgan distintos porcentajes de descuento según sea el monto de la Venta.
DICCIONARIO DE VARIABLES NOMBRE DESCRIPCION UNIDADES_ Val_Venta Valor de la venta sin isv (en Lps.) Descuento Valor del descuento (en Lps.) Subtotal Subtotal con descuento (en Lps.) Isv Valor del Isv (en Lps.) Total Total a Pagar (en Lps.)
DESGLOSE
1. LECTURA DEL DATO
1.1. Leer Val_Venta
2. CALCULO DE VALORES
2.1. Ver si el Val_Venta es mayor de 200
2.1.1. (Verdadero) Calcular la deducción con el 20% (Fórmula-1)
2.1.2. (Falso) Calcular la deducción con el 10% (Fórmula-2)
2.2. Calcular Subtotal con deducción (Fórmula-3)
2.3. Calcular Impto. Sobre venta (Fórmula-4)
2.4. Calcular total a pagar (Fórmula-5)
3. IMPRESIÓN DE RESULTADOS
3.1. Imprimir Descuento, Subtotal, Isv, Total El algoritmo representado en seudocódigo Nolae es: Inicio lea valventa si val_venta > 200 entonces
descuento val_venta * 0.2 sino
descuento val_venta * 0.1 fin si Subtotal val_venta – descuento
isv subtotal *0.12
total subtotal + isv
escriba val_venta, descuento, subtotal, isv, total final
______________________________________________________________________ 134
Detallando mejor las salidas, separando cada variable y escribiendo mensajes apropiados
para cada una de ellas, se obtiene el siguiente algoritmo:
Inicio
lea val_venta
si val_venta > 200
entonces
descuento val_venta * 0.2
sino
descuento val_venta * 0.1
fin si
subtotal val_venta – descuento
isv subtotal *0.12
total subtotal_val + isv
escriba “Venta Lps. “, Val_venta
escriba “Descuento Lps “, descuento
escriba “Subtotal Lps “, subtotal
escriba” Impuesto Lps. “, isv
escriba “Total a pagar Lps. ”, total
final
Ejemplo 4.5 (Nolae, Decisión, Boletos Tegucigalpa, SPS) Escribir el algoritmo en seudocódigo Nolae del Ejemplo 3.7 pág. 77,(Decisión, Boletos
Tegucigalpa, SPS)
Una compañía de transporte dispone del servicio entre las ciudades de Tegucigalpa y San
Pedro Sula. Se ofrecen dos tipos de tarifa (Primera clase y clase económica) de
Lps. 200.00 y Lps 110.00 respectivamente. Se le proporciona al programa el número de
boletos y el código de tarifa deseado (Código=1 para primera clase, código=2 para clase
económica) y se desea conocer el total a pagar. Asumir que los boletos que se compran son
de la misma tarifa. ¿Porqué?.
El algoritmo solicitado se muestra a continuación:
Con más detalle aún sería: escriba “Venta Lps ” escriba Val_venta
______________________________________________________________________ 135
Inicio Lea Cod
Lea Nbol
Si Cod = 1
entonces
Pago 200 * Nbol
sino
Pago 110 * Nbol
Fin-si
Escriba “Total a pagar: Lps. ”, Pago
Final
Una variante del Nolae de las decisiones incluye las Decisiones Anidadas,
mostradas previamente en el Ejemplo 3.8 (pág.81)a continuación un ejemplo:
Ejemplo 4.6 (Nolae, Decisiones anidadas, número negativo, cero positivo)
Escribir el algoritmo en seudocódigo Nolae de un programa en el cual se debe determinar e
imprimir si un número es positivo, negativo o cero. Ver Ejemplo 3.8 (pág.81). El desglose 2do. Nivel obtenido se presenta a continuación, colocando a la par su
codificación en Nolae: (1. Lectura de datos) Inicio 1.1 Leer X lea X (2. Clasificación e Impresión) 2.1 Ver Si X < 0 Si X < 0 entonces 2.1.1 (V) Imprimir “Negativo” escriba “Negativo” sino 2.1.2 (F) Ver Si X = 0 Si X = 0 entonces 2.1.2.1 (V) Imprimir “Cero ” Escriba “Cero” 2.1.2.2 (F) Imprimir “Positivo ” sino Escriba “Positivo” Fin-si
Fin-si Final Escrito en una forma mas clara se tiene:
______________________________________________________________________ 136
Inicio
lea X
Si X < 0
entonces
escriba “Negativo
sino Si X = 0
entonces
escriba “Cero”
sino
escriba “Positivo ”
Fin-si
Fin-si
Final
4.6 ALGORITMOS SEUCODODIFICADOS CON REPETICION
La repetición tiene únicamente dos componentes: una condición C y un b.e. “B”. Su
representación en diagrama de flujo es la siguiente:
Observación 4.5.1: Todas las decisiones deben terminar con un fin si. En las
decisiones anidadas, los fin si se irán colocando de adentro hacia fuera y un renglón
más abajo, recordando en general que se utilizarán en forma agrupada las palabras :
Si entonces sino fin si
Observación 4.5.2. Las pruebas de escritorio de un algoritmo seudocodificado en
Nolae, se realizan de igual manera que en los Desgloses.
______________________________________________________________________ 137
Figura 4.6.1 Por definición el bloque compuesto que resulta de aplicar la estructura de repetición es
también un b.e.
Como el flujo lo indica, primero se evalúa la condición C. Si es verdadera se procede a
ejecutar B, y se vuelve a evaluar C. De tal manera que mientras C sea verdadera se estará
repitiendo la ejecución de B. Siempre, al terminar la ejecución de B, se regresa a evaluar la
condición C. Una vez que C sea F, la ejecución de la repetición termina y se producirá la
salida del bloque; el cual se puede delimitar como se grafica a continuación.
Figura 4.6.2
Al b.e. que se repite, o sea B, se le llamará RANGO de la repetición Observe que la repetición es la única estructura en donde el flujo se dirige hacia atrás,
cuando se regresa a evaluar la condición C para determinar si se continua o no repitiendo
la ejecución del b.e. B.
En el seudocódigo, la repetición se expresa de la siguiente manera:
CV
F
B
C
B V
F
______________________________________________________________________ 138
mientras C haga B fin mientras Y, en el estilo con márgenes se puede representar la estructura de la siguiente manera:
No debe confundirse la repetición con la decisión. En la decisión NO se ejecutan todas las
instrucciones que aparecen, únicamente las de la rama verdadera o las de la rama falsa,
pero no ambas. En la repetición todas las instrucciones del rango se ejecutan una o varias
veces repetitivamente. Una condición es un componente común en ambas estructuras, y en
ambas también se evalúa a condición, En la decisión la condición determina que camino
tomar (la rama V o la rama F), pero en la repetición determina si el Rango tiene que seguir
ejecutándose o no. En la repetición, por lo tanto, no se habla de rama V o rama F.
Ejemplo 4.7 (Nolae, Repetición, Kilometraje) Elaborar el algoritmo en Nolae del Ejemplo 3.9 (pág.83)de la sección 3.4.3, que trata de
una Compañía que alquila automóviles y cobra a sus clientes según el kilometraje
recorrido.
Reescribiendo las fórmulas y la síntesis del desglose se tiene: FORMULAS Caso 1 Pago = 200 + 0.50 * Km Fórmula-1
Caso 2 Pago = 215 + 0.35 * Km Fórmula-2
Síntesis del DESGLOSE 1.- PASOS INICIALES 1.1 Leer el primer dato (Km) 2. PROCESO
2.1 Mientras Km. sea distinto de cero (Km≠ 0) hacer lo siguiente repetidamente
2.1.1 Ver si Km. > 100
2.1.1.1 (V) Calcular pago con Fórmula-1 Caso 1
2.1.1.2 (F) Calcular pago con Fórmula-2 Caso 2
2.1.2 Imprimir el valor del pago
2.1.3 Leer el siguiente dato (Km.)
mientras C haga mientras C haga
B ó B
fin mientras fin mientras
______________________________________________________________________ 139
Representando el algoritmo en Nolae, se tiene lo siguiente: Inicio lea Km
mientras Km ≠ 0 haga
si Km < 100
entonces
Pago 200 + 0.50 * Km
sino
Pago 215 + 0.35 * Km
fin si
escriba Pago
lea Km
fin mientras
final
Observe que las instrucción 2.1 y 2.2 están concatenadas, y a su vez el desglose de la 2.1 es
una concatenación de 2.1.1. y 2.1.2; resulta entonces que se puede considerar que 2.1.1,
2.1.2 y 2.1.3 forman una concatenación de tres elementos. Esta consideración permite
simplificar la redacción del seudocódigo.
Ejemplo 4.8 (Nolae, repetición, Boletos Tegucigalpa, SPS)
Escribir el seudocódigo Nolae del Ejemplo 3.10 (pág.92) en la sección 3.4.3, que dice lo
siguiente
Una compañía de transporte dispone del servicio entre las ciudades de Tegucigalpa y San
Pedro Sula. Se ofrecen dos tipos de tarifa (Primera clase y clase económica) de
Lps. 200.00 y Lps 110.00 respectivamente. Se le proporciona al programa el número de
boletos y el código de tarifa deseado (Código=1 para primera clase, código=2 para clase
económica) y se desea conocer el total a pagar (asumir que los boletos que se compran son
de la misma tarifa).por varios clientes y al finalizar colocar el mensaje FIN DEL
PROGRAMA.
Utilice un valor ficticio de fin de datos (o centinela) adecuado
______________________________________________________________________ 140
Inicio
Lea Nbol Mientras Nbol ≠ 0 haga
Lea Cod
Si Cod = 1
entonces Pago 200 * Nbol
sino Pago 110 * Nbol
Fin-si
escriba “Total a a pagar: Lps. ”, Pago
Lea Nbol
Fin-Mientras
Escriba “Fin del Programa ”
Final
Para ejercitar más este tipo de seudocódigo, se presentan los siguientes ejemplos que muestran algunas variantes:
Ejemplo 4.9 (Nolae, Repetición centinela, CI)
Elaborar un algoritmo para resolver lo siguiente:
Dado el Coeficiente Intelectual de varios estudiantes, clasificarlos conforme a los rangos
mostrados (considerar que el CI es una variable real).
CI Rango
CI < 80 Subnormal
80 < CI ≤ 110 Normal
CI >110 Superior).
En el Capítulo 3 se desarrolló este ejemplo pero sin repetición, (por favor vea el Ejemplo
3.8, pág.81) ahora se hará repetitivo.
Estrategia:
(Varios) (Varios)
Salida Mensaje Entrada CI
______________________________________________________________________ 141
• Se utilizarán Decisiones anidadas, ilustradas con Diagrama de árbol (se deja al
lector la elaboración del mismo)
• 2. Se modificará el ejercicio utilizando: Repetición controlada por centinela (CI ≠ 0)
Inicio Lea CI Mientras CI ≠ 0 haga
Si CI < 80
entonces
Escriba “Subnormal”
sino
Si CI ≤ 110
entonces
Escriba “Normal”
sino
Escriba “Superior”
Fin-si
Fin-si
Lea CI
Fin-Mientras
Final
A continuación se muestra la PE con los siguientes datos PRUEBA DE ESCRITORIO
Datos: 80, 120, 100, 0
Memoria: Salida:
CI
80
120
100
0
Subnormal
Superior
Normal
______________________________________________________________________ 142
Ejemplo 4.10 (Nolae, Decisiones anidadas, Repetición con centinela, Lavado de Autos) Codificar en Nolae el Ejemplo 3.13 (pág.108), el cual se desarrolló hasta un segundo
desglose, remitirse al enunciado en el Capítulo 3, Sección 3.5.(pág 108).
Inicio
Lea N_autos
Mientras N_autos ≠ 0 haga
Lea Tipo
Si Tipo = 1
entonces
Subtotal 25 * N_autos
sino
Si Tipo = 2 entonces Subtotal 30 * N_autos
sino
Si Tipo = 3 entonces Subtotal 35 * N_autos sino
Subtotal 40 * N_autos Fin-si Fin-si
Fin-si
Si N_auto ≥ 2
entonces Desc Subtotal * 0.07
sino Desc 0
Fin-si
Total Subtotal - Desc
escriba Total
lea N_autos
Fin-Mientras
Final
______________________________________________________________________ 143
Ejemplo 4.11 (Nolae, Decisiones anidadas, Lavado de Autos, variante)
Elaborar un algoritmo para el ejemplo anterior, pero simplificando las fórmulas (subtotal). Se presentará una variante del ejemplo anterior Ejemplo 4.10 (pág.142) consistente en una
simplificación de las fórmulas en el Subtotal. Se puede observar que la diferencia entre
estas fórmulas es solamente el precio en el servicio, se asignarán entonces estos valores a
la variable precio, para utilizar una sola fórmula para el subtotal que será:
Subtotal precio *N_autos Inicio Lea N_autos
Mientras N_autos ≠ 0 haga
Lea Tipo
Si Tipo = 1
entonces
Precio 25
sino
Si Tipo = 2 entonces Precio 30 sino Si Tipo = 3 entonces Precio 35 sino
Precio 40 Fin-si
Fin-si Fin-si
Subtotal Precio * N_autos
Si N_auto ≥ 2
entonces Desc Subtotal * 0.07
sino Desc 0 Fin-si Total Subtotal - Desc
escriba Total
lea N_autos Fin-Mientras
Final
______________________________________________________________________ 144
EJERCICIOS 4.6
4.7 DIAGRAMACION DE FLUJO DE ALGORITMOS ESTRUCTURADOS
Los algoritmos escritos en el seudocódigo se representan en diagramas de flujo por medio
de b.e. que se resumen de la siguiente manera:
1.- Realizar la prueba de escritorio para el algoritmo
inicio
lea M ; i 0
mientras M > 12 haga
lea R
si R > 5
entonces T T + R
sino T T + 2 * R
fin si
i i + 1
escriba i, “TOTAL”, T
lea M
fin mientras datos: 16, 14, 4, 10, 3, 2, 11
final
2.- Realizar la seudocodificación del Ejemplo 3.12, pág.104, (Aumentos por
categoría) 3.- Apéndice A, Ejercicio II incisos del 25 al 29.
4.-- Apéndice A, Ejercicios III.
5.--Apéndice A, Ejercicios del 47 al 51.
6.- Apéndice A, Ejercicios del 52 al 55.
______________________________________________________________________ 145
Lectura
Escritura
B. e. Atómicos Asignación
Nulo
Bloques Estructurados B.e. Concatenación
B. e. Compuestos Decisión
Repetición
que se han representado de la siguiente manera: b.e. atómicos
b.e. compuestos (estructurados): Concatenación, decisión y repetición.
Estos se ilustraron previamente en las secciones 4.4, 4.5 y 4.6, de manera informal, en este
capítulo se tratarán con más profundidad, a continuación se muestran la representación de
la concatenación:
De igual manera existen gráficos para representar los demás b.e. compuestos, los cuales se
muestran de manera comparativa en los gráficos siguientes.
lea L
Lectura Escritura
escriba L
V E
Asignación Nulo
nulo
B1 B2
______________________________________________________________________ 146
Ejemplo 4.12 Dibujar el diagrama de flujo del algoritmo del Ejemplo 4.7, pág.138, (Repetición centinela, Kilometraje) inicio
lea Km
mientras Km ≠ 0 haga
si Km < 100
entonces
Pago 200 + 0.5 * Km
sino
Pago 215 + 0.35 * Km
fin si
escriba Pago
lea Km
fin mientras
final
Final
B1
B2
B3
Inicio Inicio
B1
BB2
Final
B4
Inicio
B1
Final
B2
B3 B4
B5
C V F
C V
F
Concatenación Decisión Repetición
______________________________________________________________________ 147
Resolución del Ejemplo 4.12: DIAGRAMA DE FLUJO
V
V
F
F
Se muestran con diferentes cuadros punteados la identificación de las distintas
estructuras del diagrama.
lea Km
Pago 200 + 0.5 *Km
Escriba.pago lea Km
Inicio
Km ≠ 0 Km <100
Pago 215 +0.35* Km
Final
lea Km
Final
Pago 200 + 0.5 Km
Esc.pago lea KmKm ≠ 0 Km <100
Pago 215 +0 .35 Km
Inicio
V
V
F
F
______________________________________________________________________ 148
EJERCICIOS 4.7
1.- Redibujar el siguiente diagrama de flujo, identificando claramente las distintas estructuras que lo forman (sugerencia: se pueden marcar con distintos colores).
2.- Dibujar el diagrama de flujo de los algoritmos de los Ejemplos del Capítulo 4
a) Ejemplo 4.6
b) Ejemplo 4.8
c) Ejemplo 4.9
d) Ejemplo 4.10
e) Ejemplo 4.11
f) De los EJERCICIOS 4.6. Inciso 2, pág 144
Inicio
B1 B2 C1
B3 B4
B6
C3
B8
B7
Final
C2 B5
V
V
V F
F
F
______________________________________________________________________ 149
4.8.- RELACION ENTRE DESGLOSES, ALGORITMOS Y DIAGRAMAS
Se ha estudiado que un algoritmo es un conjunto finito de instrucciones con ciertas
características. Estas instrucciones se pueden escribir en lenguaje natural (la forma en que
normalmente se habla) como en los desgloses o bien por medio de un lenguaje técnico
como el seudocódigo Nolae. Aún más, se puede utilizar un seudocódigo menos exigente
que esté entre el lenguaje natural y el seudocódigo Nolae. También se ha visto que la
estructura del algoritmo se puede representar gráficamente por medio de diagramas de
flujo. Todas estas formas constituyen medios diferentes para representar un algoritmo dado.
A continuación se presenta un resumen de la utilidad, ventajas y desventajas de cada una de
estas formas.
Desglose El desglose permite desarrollar la lógica del algoritmo de manera descendente. Permite ir
“descubriendo” la estructuración del algoritmo de lo general a lo particular. Hasta llegar a
las instrucciones específicas (b.e. atómicos). Tiene la facilidad de que se puede usar el
lenguaje natural, por lo cual es posible la expresión de acuerdo a la manera personal de
pensamiento.
Por otra parte, tiene la desventaja de que no siempre es preciso y que su traducción a un
lenguaje de programación no es inmediata. Aunque para efectos didácticos se han
desarrollado desgloses para ejercicios sencillos, en la práctica, para el programador
experimentado o al estudiante avanzado de programación, el desarrollo de desgloses no es
necesario en problemas de poca complejidad. También es de notar que el flujo de las
instrucciones no es tan evidente y su seguimiento requiere de cierto esfuerzo y alguna
experiencia o ejercitación previa.
Seudocódigo El seudocódigo es preciso ya que cada palabra tiene un significado específico y sólo uno.
Además, cada instrucción o estructura tiene una y sólo una representación; por lo que
constituye una manera más exacta y detallada del tipo de algoritmos de interés en
______________________________________________________________________ 150
computación. El seudocódigo define rigurosamente un algoritmo sin el tecnicismo extremo
de las sintaxis de los lenguajes de programación. Otra ventaja considerable de los
seudocódigos es que están escritos con palabras del idioma natural, que aunque restringidas
a un significado muy específico, permiten recordarlo fácilmente. Esto es particularmente
válido en el ámbito del idioma español, ya que la gran mayoría de los lenguajes de
programación usan términos tomados de la lengua inglesa. El seudocódigo se asemeja
mucho al código de un lenguaje de programación, por lo que su traducción a éste es casi
directa; siendo independiente del lenguaje de programación que se haya escogido (sin
embargo, esta traducción es un tanto laboriosa en lenguajes no estructurados.). También, el
algoritmo en un seudocódigo se presta a una revisión completa y detallada de su lógica por
medio de pruebas de escritorio.
Igual que en el desglose, el flujo de las instrucciones no es tan evidente. Su nivel de detalle
no siempre permite simplificaciones o resúmenes como en el caso del desglose que puede
desarrollarse a distintos niveles. En el caso de programas muy largos o que su utilización no
es muy práctica. Al ser independiente de los lenguajes de programación y construir una
base para cualquiera de ellos, no siempre involucra todas las instrucciones específicas y/o
especiales de los lenguajes de programación.
Diagramas de flujo Como todas las representaciones gráficas, permite una visualización más completa de la
estructuración del algoritmo. El flujo de ejecución del algoritmo está indicado con claridad
por medio de las flechas y las bifurcaciones están inequívocamente representadas por
medio de los rombos de las condiciones, por lo que es de fácil seguimiento. Para muchos es
el medio que mejor muestra la “lógica” del algoritmo, y que efectivamente, es el caso de
bifurcaciones “ hacia atrás”, como en la repetición que el flujo es evidente. Por lo tanto
para el que se inicia en la programación resulta más comprensible que los desgloses o
seudocódigos. Su traducción a un lenguaje de programación no es difícil, especialmente si
para los bloques atómicos se utilizan la terminología de un seudocódigo o bien se utilizan
otros símbolos específicos en vez de los rectángulos (por ejemplo un trapezoide para la
entrada-salida). Un diagrama de flujo puede representar distintos niveles de desgloses de un
algoritmo, en donde los bloques representan procesos complejos que no se detallan,
______________________________________________________________________ 151
equivalentes al primero o segundo desglose del algoritmo. Los diagramas de flujos son muy
útiles en la enseñanza, ya que muestran con claridad, como se ha mencionado
anteriormente, la lógica de un algoritmo o porción del mismo. Son útiles para la
introducción de las estructuras, como se ha visto en este mismo libro.
Entre las desventajas se pueden mencionar: que para algoritmos con muchas instrucciones
no es práctico a un nivel profundo de detalle. Tampoco resulta práctico para el diseño
descendente, que es la modalidad de desarrollo de algoritmos en este curso. Para su diseño
especifico, aún en algoritmos sencillos, la técnica del diagrama de flujo como desarrollo de
la lógica de un programa, presume que el diseñador ya sabe lo que tiene que hacer. (A
menos, por supuesto, que se esté ensayando y probando; pero en este caso resulta engorroso
por el dibujo del mismo). Cabe mencionar que para algunos que tienen “buena lógica” para
los programas y que se han iniciado con los diagramas de flujo, éste constituye la forma
ideal de desarrollar programas. Pero la instrucción que sigue a cada instrucción, o en el
peor de los casos, las instrucciones que da inicio a un algoritmo, no siempre es evidente
para el común de los mortales que se está introduciendo al campo de la programación.
Didácticamente, el diagrama de flujo mal utilizado, puede abrir camino a una mala
estructuración de un algoritmo y a fomentar malos hábitos de programación.
Específicamente cuando se trazan flechas sin mucho cuidado o se dejan flujos incompletos.
Puede inducir al uso indiscriminado de “goto’s”, (si no sabe lo que es un “goto”, es mejor
que no lo sepa por un buen tiempo), que si bien pueden codificarse en la mayoría de los
lenguajes, resultan en “programas espagüeti”
4.9.- CENTINELAS, CONTADORES Y ACUMULADORES 4.9.1 Centinelas
Aunque no ha sido mencionado por su nombre ya se ha utilizado este concepto en el
Ejemplo 3.9 (pág.83) de la sección 3.4.3 y luego se utilizó también en la sección 4.6
Ejemplo 4.7 (pág.138), su algoritmo se muestra a continuación:
Básicamente un centinela (llamado también bandera) es una variable cuyo valor
representa un estado de una situación específica.
______________________________________________________________________ 152
Ejemplo 4.13(Centinela, Nolae, Kilometraje) Dado el siguiente algoritmo, se analizará el uso de un centinela inicio
lea Km
mientras Km ≠ 0 haga
si Km < 100 entonces
Pago 200 + 0.5 * Km sino
Pago 215 + 0.35 * Km fin si escriba Pago
lea Km
fin mientras
final
En el algoritmo la variable Km toma un “valor centinela” (que es 0) que indica fin de datos
y que permite terminar el ciclo repetitivo. En este caso la situación específica es “ya no hay
más datos válidos que procesar” otra aplicación se puede ver en los Ejemplos 4.10
(pág.142) con la variable Numero de autos, toma un valor centinela de 0 y en el Ejemplo
3.12 (pág. 104)en donde la variable categoría toma un “valor centinela” que es 99.
En el caso de las Repeticiones controladas por Centinela, para seleccionar la variable que se
comparará con un valor centinela, se deberá considerar lo siguiente:
De la lista de las Variables de Entrada,
Seleccionar aquella que de una manera rápida se pueda determinar que tiene valores
no posibles
Normalmente, muchos programas se diseñan para que desde un principio no acepten datos
incorrectos, de tal manera que si un dato es inválido, no se permite su ingreso o subsecuente
almacenamiento. En relación a la escogencia de los CENTINELAS se supondrá que no se
cometen errores al introducir los datos y que el valor escogido como tal, si es un valor que
se puede teclear.
En el Ejemplo 3.12 (pág. 104)en el que dados la categoría (1, 2, 3) y el sueldo de un se
calcula el aumento y el nuevo sueldo del trabajador. Para seleccionar la variable centinela
______________________________________________________________________ 153
puede pensarse que Cero para el “sueldo” puede ser una buena opción, también para la
“categoría” las opciones posibles son 1, 2 ó 3 y aunque se considere que el usuario no se
equivoca al teclear los datos, se puede escoger cualquier valor que no sea uno de estos, las
posibilidades son infinitas, se pudiera escoger: 4, -1, 99, etc., para el ejemplo se escogió
99, así el usuario podrá teclear: 1, 2, 3 ó 99.
Otro uso de centinelas (Banderas) se ejemplificará mas adelante en aplicaciones de
generación de secuencias de números (sucesiones), vale decir que las BANDERAS
también se utilizan para denotar un cambio de estado, por ejemplo en búsquedas, se
acostumbra inicializar la Bandera en un valor y si determinada condición establecida se
cumple en al menos un caso, se cambia de valor la bandera; bastará entonces preguntar en
una decisión por el valor de dicha bandera, para así concluir con lo pertinente.
4.9.2 Contadores
En muchos algoritmos se requiere ir contando ya sea los datos que se van leyendo o los
ciclos que se repiten en una estructura mientas-haga o cualquier otra situación de interés,
en estos casos se utilizará un contador.
Se realizarán varios ejemplos para ilustrar diferentes aplicaciones de los contadores.
Ejemplo 4.14 (Contador) Realizar la prueba de escritorio de las siguientes asignaciones: N 0
N N +1
N N+1
N N+1
Un contador consiste en una variable que se inicia en general en un valor cero y que se
va incrementando (de 1 en 1 en la mayoría de las veces) a medida que se cuenta lo que
se desea.
______________________________________________________________________ 154
Prueba de escritorio:
Memoria:
Ejemplo 4.15 (Contadores, Votación entre 2 candidatos.) Realizar el escrutinio de una elección entre dos candidatos (ADAN y BETO) por un
número impar de votantes, considerando que todos los votos son válidos y que no hay votos
en blanco, lo votos estarán codificados con un 1 si el voto es para ADAN, y con un 2 si el
voto es para BETO, al final de los datos se colocará como centinela “ 9 ”
ESTRATEGIA
Gana ADAN (Varios)
• S Un mensaje o E Voto Gana BETO
• Asumiendo que se tienen todas las papeletas de la votación de la siguiente manera
• Se tiene un proceso repetitivo controlado por centinela, cuya condición de
repetición es Voto ≠ 9.
• Se necesita un contador de votos para cada uno de los candidatos,
CA será el contador de votos de ADAN y
CB será el contador de votos de BETO
N Se puede observar que se inicializó la variable N en
0
1
2
3
en Cero que es neutro aditivo, posteriormente se incrementó en 1 y
se obtuvo 1, se vuelve a incrementar N en 1 y se obtine el valor
de 2, así sucesivamente hasta terminar.
1 Voto de ADAN 1
2 Voto de BETO 2
1
1
2
9 Marca de fin de datos, ya no hay mas votos
______________________________________________________________________ 155
Ambos deben inicializarse en cero ya que antes de comenzar con el conteo ningún
candidato tiene votos, posteriormente según el voto sea igual a 1 o a 2, se deberá ir
incrementando cada contador CA o CB, se debe tener presente que estos contadores
se incrementaran de uno en uno (ver Ejemplo 4.14 en pág.153) así:
CA CA + 1 ó
CB CB + 1, se requerirá entonces de una
• Una decisión para incrementar el voto a quien corresponda (en un ciclo de Retición)
• Una decisión fuera del ciclo repetitivo comparando los contadores y publicando al
ganador:
DICCIONARIO DE VARIABLES
Identificador Descripción .
CA Contador de votos de ADAN
CB Contador de votos de BETO
Voto Voto contenido en la boleta
RESUMEN DEL ANALISIS
SALIDA: (Un mensaje) “Gana ADAN” ó “Gana BETO”
ENTRADA (Varios números) Voto
1 por ciclo
PROCESO: Se inicializan los contadores en cero (CA, C(B), se realiza un proceso
repetitivo controlado por centinela (Voto ≠ 9) en el cual para cada persona
se lee su voto, si voto =1 se incrementa el contador CA sino el contador CB,
finalmente se imprime el ganador.
Si voto = 1 (V) … incrementar 1 voto a ADAN (voto =2 ) (F)… incrementar 1 voto a BETO
Si CA >CB (V) …publicar Gana ADAN (F) …publicar Gana BETO
______________________________________________________________________ 156
DESGLOSES
Desglose 1er. Nivel
1. Pasos Iniciales
2. Proceso
3. Pasos finales
Desglose 2do Nivel 1. PASOS INICIALES
1.1 Inicializar el contador de votos de ADAN (CA) en Cero
1.2 Inicializar el contador de votos de BETO (CB) en Cero
1.3 Leer Voto
2.- PROCESO
2.1 Mientras Voto ≠ 9 hacer lo siguiente repetidamente
2.1.1 Ver si Voto = 1
2.1.1.1 (V) Incrementar en 1 el contador de ADAN
2.1.1.2 (F) Incrementar CB en 1
2.1.2 Leer el siguiente Voto
3.- PASOS FINALES
3.1 Ver si CA > CB
3.1.1 (V) Imprimir “Gana ADAN”
3.1.2 (F) Imprimir “Gana BETO”
Note que 2.1.1.1 y 2.1.1.2 son diferentes en forma, pero equivalentes en la asignación
respectiva.
______________________________________________________________________ 157
Seudocódigo Nolae Inicio
CA 0 -- Inicializar un contador (1) CB 0 (2)
lea Voto
mientras Voto ≠ 9 haga
si Voto = 1 entonces CA CA +1 -- Incrementar un voto (3) sino CB CB +1 (4) fin si lea Voto
fin mientras
si CA > CB entonces escriba “Gana ADAN” sino escriba “Gana BETO” fin si (5)
final
PRUEBA DE ESCRITORIO Datos: 1, 2, 1, 1, 2, 9
Memoria Salida
CA CB Voto
0
1
2
3
0
1
2
1
2
1
1
2
9
Gana ADAN
______________________________________________________________________ 158
Considerando el último inciso de la observación anterior, si en el ejemplo que nos ocupa si
se quisiera publicar cuantos votantes participaron, se deberán agregar las siguientes Líneas:
Votantes CA + CB Línea (6)
Escriba “Total de votantes: “, votantes Línea (7)
Ejemplo 4.16 (Conteo de clientes con 20% y 10% de descuento, hace referencia al Ejemplo 4.4, pág.133)
El enunciado modificado es el siguiente:
En una tienda se otorgará a los clientes descuentos en sus compras. Si el valor de la venta
(excluyendo el 12% de impuesto sobre venta-isv) es de de Lps. 200.00 ó menos, se le
concede un descuento del 10%, si es de más de Lps.200.00, el descuento será de 20%. Se
le proporciona al computador el valor de la venta, se desea calcular el descuento, el isv. y el
valor total a pagar, se imprimirá solamente el Total a pagar por el cliente.
Además se desea determinar:
A cuantos clientes se les otorgo el 20% de descuento
A cuantos clientes se les otorgo el 10% de descuento
El Total de clientes atendidos,
Se usará como marca de fin de datos 0, Val_Venta = 0
Observación 4.9.2 Los contadores tienen en general tres momentos:
1) Inicialización en general en cero y antes de un Ciclo Repetitivo, ejemplo CA 0
2) Incremento generalmente en 1 en un Ciclo Repetitivo: CA CA +1
Note que se escribe la MISMA VARIABLE a AMBOS LADOS de la asignación
respectiva, esta asignación se colocará estratégicamente en el flujo del programa
según corresponda.
3) Al finalizar el Ciclo repetitivo: Se pueden imprimir: escriba CA
o se pueden hacer otras operaciones con ellos e imprimirlos como datos con
______________________________________________________________________ 159
El algoritmo respectivo se muestra en el Ejemplo 4.4 ,pág. 133, (con la variante de que
solamente se imprimirá el total a pagar). Utilizando como ayuda el diccionario de variables
y cambiando convenientemente un poco el orden usual de un plan de análisis, se procederá
a diseñar el algoritmo solicitado.
DICCIONARIO DE VARIABLES
Identificador Descripción TIPO de dato
Val_Venta Valor de la venta sin isv (Real en Lps.)
Descuento Valor del descuento (Real en Lps.)
Subtotal Subtotal,Nuevo valor de venta con descuento (Real en Lps.)
Isv Valor del Isv (Real en Lps.)
C_20 Contador de clientes con 20% descuento (Entero)
C_10 contador de clientes con 10% descuento (Entero)
N_Clientes Clientes totales atendidos (Entero)
Este ejemplo ya se abordó previamente, las modificaciones a incorporar consistirán en
adicionar dos contadoras C_20 y C_10, para su implementación se considerarán los tres
momentos de los contadores mencionados en la Observación 4.9.2
Para determinar los clientes totales atendidos N_Clientes, existen dos alternativas:
• Utilizar un contador con su respectivo incremento: N_Clientes N_Clientes + 1 ó
• Calcularlo sumando C_20 y C_10, así: N_Clientes C_20 + C_10
• ESTRATEGIA
S (Varios)
Total
-----------------+--------------- Asignación Característica C_20, Clientes con 20% de descuento: C_20 C_20 + 1
S C_10, Clientes con 10% de descuento: C_10 C_10 + 1
N_Clientes Total de clientes atendidos N_clientes C_20 + C_10
______________________________________________________________________ 160
E (Varios)
Val_Venta
Note que en las Salidas se tienen variantes:
En el primer grupo la salida es de varios totales a pagar (uno por cliente) y
Posteriormente números únicos correspondientes a los reportes solicitados
RESUMEN DEL ANALISIS
SALIDA : (Varios números) Total
1 por ciclo y además
(3 números y sus mensajes) C_20, C_10 , N_clientes
ENTRADA (Varios números) Val_venta
1 por ciclo
PROCESO: Se inicializan los contadores en cero (C_20, C_10), se realiza un proceso
repetitivo controlado por centinela (Val_Venta ≠ 0) en el cual para cada
cliente se lee el Valor de la venta Val_venta, se determina si es superior a
200 o no para calcular el descuento respectivo e incrementar los contadores
correspondientes, luego se calcula el subtotal, el isv y el total, para terminar
imprimiendo el TOTAL a pagar por el cliente. Al finalizar se calcula el total
de clientes N_clientes y se imprimen los reportes solicitados
A continuación el respectivo algoritmo, considerando todo lo detallado en la Estrategia y
Resumen del Análisis previos.
______________________________________________________________________ 161
Algoritmo
Inicio
C_20 0 (1)
C_10 0 (2)
……….. (3)
Lea Val_venta
Mientras Val_venta ≠ 0 haga
Si Val_venta > 200 (4)
Entonces
Deduccion Val_venta * 0.20
C_20 C_20 + 1 (5)
Sino
Deduccion Val_venta * 0.10
C_10 C_10 + 1 (6)
Fin si
Subtotal Val_venta - deduccion
Isv subtotal *0.12
Total Subtotal + isv
Escriba “Total a pagar Lps. “, total
………. (7)
Lea Val_venta
Fin mientras
N_clientes C_20 + C_10 ………. (8)
Escriba “Clientes con 20% de descuento: “; C_20 (9)
Escriba “Clientes con 10% de descuento: “; C_10 (10)
Escriba “Total de clientes atendidos: “; N_clientes (11)
Final
Comentarios de la líneas numeradas del (1) al (11): Líneas (1) y (2) Se inicializan los contadores antes de entrar al Ciclo Repetitivo.
______________________________________________________________________ 162
Líneas (4,5, 6) Evaluando la condición Si Val_venta > 20 se cumple, se realiza el ramal
(V) en donde a los clientes se les da el 20% de descuento, entonces es ahí donde se
debe contar a los clientes a los que se les dio ese descuento, se hará colocando el
incremento del contador respectivo C_20 en la Línea (5)
Si dicha condición no se cumple, el programa lleva al ramal (F), que corresponderá
a los clientes a quienes se les da un descuento del 10%, debiendo colocarse el
incremento del contador C_10 en ese mismo ramal o sea la Línea (6)
Líneas (3, 7) Si el total de clientes se hubiera calculado utilizando el contador N_clientes,
se necesitaría inicializarlo en la Línea 3, posteriormente se requerirían incrementos
de 1, así la línea 7 sería: N_Clientes N_Clientes +1
Línea (8) Se calcula el N_clientes como la suma de dos contadores C_20 + C_10.
Como se dijo antes, se puede utilizar un contador inicializado en cero:
N_clientes 0 en la Línea (3) incrementándolo en el proceso repetitivo
N_clientes N_clientes +1 en la Línea (7)
En consecuencia se tendría que omitir la Línea (8).
Líneas (9, 10, 11) Se imprimen las estadísticas o reportes con sus respectivos mensajes 4.9.3 Acumuladores Otra necesidad que frecuentemente se encuentra en los problemas de programación, y
especialmente en aquellos de aplicación comercial, es la de encontrar totales o subtotales de
varias cantidades. Es decir, encontrar la suma de varios números. La manera por excelencia
de resolver este problema es por medio del concepto de acumulador aditivo.
Un acumulador aditivo es una variable que se inicializará en 0 y a la cual sucesivamente
se le van sumando distintos valores, precisamente los valores cuya suma se busca.
Este concepto no está aislado de lo que se hace en la vida práctica cuando se suman varios
números.
Las características de estos acumuladores serán análogas a las mostradas en la
Observación 4.9.2, estas se muestran en la siguiente observación:
______________________________________________________________________ 163
Ejemplo 4.17 (Ingreso total, Conteo de Boletos de Tegucigalpa y San Pedro Sula) En el Ejemplo 4.8, pág.139-140, (Viajes Tegucigalpa, San Pedro Sula, boletos de primera
clase y clase económica) se quiere determinar cuantos boletos de primera clase y de clase
económica se vendieron y cual fue el Ingreso total del día.
ESTRATEGIA
(Varios) (Varios)
• S Pago E Nbol
Cod
------------------+--------------------------- Asignación Característica
Total Boletos de primera clase C_primera C_primera C_primera + nbol
S Total Boletos de primera clase C_econo C_econo C_econo + nbol
Ingresos totales T_ing T_ing T_ing + pago
Note en las asignaciones sugeridas, que C_primera contará los boletos vendidos de primera
clase, considerando que cada cliente pude comprar varios boletos (nbol) del mismo tipo el
Observación 4.9.3 Los Acumuladores tienen en general tres momentos:
1) Inicialización en general en cero y antes de un Ciclo Repetitivo, ejemplo
Acum 0
2) Incremento generalmente en una variable X, ubicada en un Ciclo Repetitivo
Acum Acum +X
Note que se escribe la MISMA VARIABLE a AMBOS LADOS en la
asignación respectiva.
Esta se colocará estratégicamente en el flujo del programa correspondiente.
3) Al finalizar el Ciclo repetitivo:
Se pueden hacer otros cálculos con los contadores, manipularlos, imprimirlos
como datos estadísticos, reportes, etc..
______________________________________________________________________ 164
incremento entonces no será de 1 sino de los nbol comprados, lo mismo aplica para
C_econo.
DICCIONARIO DE VARIABLES (Se alterará el orden de su ubicación con fines didácticos)
Identificador Descripción Tipo de dato Cod Código del tipo de tarifa Entero Nbol Número de boletos Entero Pago Total a pagar Real C_primera contador de boletos de primera clase Entero C_econo contador de boletos de clase económica Entero T_ing Ingresos totales de la empresa Real El lector deberá completar los espacios en blanco en las líneas numeradas del siguiente
algoritmo propuesto, posteriormente deberá verificar si sus respuestas son correctas en la
siguiente página:
Inicio ………….… (1)
…………… (2)
……………. (3)
Lea Nbol Mientras Nbol ≠ 0 haga
Lea Cod
Si Cod = 1 entonces Pago 200 * Nbol …………… (4)
sino
Pago 110 * Nbol
……………. (5)
Fin-si escriba “Total a a pagar: Lps. ”, Pago ………………… (6)
Lea Nbol Fin-Mientras …………....... (7)
…………… (8)
……………. (9) Escriba “Fin del Programa ”
Final
Llene los espacios en blanco
inicializando cada uno de los
contadores y acumuladores,
colocando sus incrementos en
las líneas correspondientes,
finalizando con los reportes
solicitados, en la siguiente
página puede comparar sus
respuestas:
______________________________________________________________________ 165
Inicio O b s e r v a c i o n e s
C_primera 0 (1) Tipo de dato entero (pueden ir en la misma línea)
C_econo 0 (2) No se escribe punto decimal “0”
T_ing 0.0 (3) Tipo real, en su inicialización se utilizará punto decimal “0.0”
Lea Nbol
Mientras Nbol ≠ 0 haga
Lea Cod
Si Cod = 1
entonces
Pago 200 * Nbol
C_primera C_primera + nbol (4)
sino
Pago 110 * Nbol
C_econo C_econo + nbol (5)
Fin-si
escriba “Total a pagar: Lps. ”, Pago
T_ing T_ing + pago (6)
Lea Nbol
Fin-Mientras
Escriba “Boletos de primera clase vendidos: “, C_primera (7)
Escriba “Boletos de clase economica: “, C_econo (8)
Escriba “Ingresos Totales Lps.”, T_ing (9)
Escriba “Fin del Programa ”
Final
Algunas Líneas de este algoritmo requieren comentarios especiales:
Líneas (1,2) Para ahorrar espacio, en Nolae se acostumbra colocar en un mismo
renglón la inicialización de contadores del mismo tipo numérico, en este caso tipo
entero, así:
C_primera 0, C_econo 0 (1)
Línea (3) Inicialmente no se ha recaudad nada, así que se inicializa T_ing en cero.
______________________________________________________________________ 166
Por razones didácticas, las inicializaciones que correspondan a distintos tipos de
datos se escribirán agrupadas en diferente renglón, las inicializaciones previas
corresponden a datos enteros pero T_ing es un dato real. T_ing admite números
decimales y su inicialización se indica con punto decimal “0.0”.
Líneas (4) y (5) Se incrementan los contadores respectivos en Nbol (no en 1) pues cada
cliente compra Nbol etos.
Línea (6) Se Acumula el pago por cada cliente que recién se ha calculado.
Líneas (7, 8, 9) Se imprime el reporte estadístico solicitado.
Se deja al lector realizar la prueba de escritorio correspondiente con los siguientes datos:
Datos 3, 1, 4, 2, 5, 1,0
Otra manera directa de entender como funciona un contador o un acumulador es realizando
una prueba de escritorio.
EJERCICIOS 4.9.3 1) Realizar la prueba de escritorio del siguiente algoritmo inicio
i 1
lea X
mientras X > 0 haga
si X > 50
entonces i i + 1
sino escriba “<0 = 50”
fin si
lea X
fin mientras
escriba “Se tienen ”, i, “ números mayores que 50” final
Conteste las siguientes preguntas: ¿Cuál es el último valor de i? ¿Qué hace este algoritmo?
La repetición (mientras) se puede controlar con condiciones diversas, no solamente con centinelas
______________________________________________________________________ 167
2.- Realizar la P.E. de los siguientes algoritmos 2.1) inicio
c 0
mientras c <3 haga
escriba “Hola”
c c + 1
fin mientras
escriba “Se repitió 3 veces” final 2.2)
inicio i 1
mientras i < 3 haga
escriba “Hola”
i i + 1
fin mientras
escriba “Se repitió 3 veces”
final ¿ Cuál es el último valor de i ? ________ ¿Por qué?____________________
4.9.4 Repetición controlada por contador
Se introducirá este tema utilizando los últimos dos EJERCICIOS 4.9.3. incisos 2.1) y 2.2),
como se puede observar, con ambos algoritmos se obtiene la misma salida (3 saludos), el
primero tiene la conveniencia que es natural pensar que inicialmente no se ha realizado un
ciclo y que se comience con el contador C inicializado en cero, observe que la condición de
la repetición no incluye al 3 (i < 3). El segundo algoritmo inicializa el contador i en 1 a
pesar de que aún no se ha realizado ningún ciclo y su condición de repetición si incluye a 3
(i < 3). El lector pudo comprobar que ambos algoritmos producen la misma salida, y
controlan la repetición con la ayuda de un contador.
Después de realizar las pruebas de escritorio,
2.1) y 2.2) Conteste las siguientes preguntas:
¿Qué semejanzas tienen las salidas y que
diferencias encuentra en las inicializaciones de los
contadores y en las condiciones de repetición?.
______________________________________________________________________ 168
¿Cuál algoritmo será mejor para estos fines? En este libro se utilizará el algoritmo 2.2), esta
decisión, está influenciada por la conveniencia de poder introducir mas adelante el
BLOQUE PARA (sección 5.3.1).
Por el momento el algoritmo 2.2) se utilizará para realizar lo que se llama Repetición
controlada por contador, que tiene la siguiente estructura:
Si se desea repetir el Rango N- veces en donde el valor de N es leído, se tendría: Inicio
Lea N
i 1
mientras i < N haga
escriba “Esta es la vez numero: ”, i
i i + 1
fin mientras
escriba “Se repitió”, N, “veces”
final
Realizando la prueba de escritorio con el siguiente dato se tiene:
i 1 REPETICION CONTROLADA POR CONTADOR
mientras i < 3 haga
Rango
i i + 1
fin mientras Leer el la siguiente página la Observación 4.9.4.1
______________________________________________________________________ 169
PRUEBA DE ESCRITORIO
Dato: 4
Memoria Salida
N I
4
1
2
3
4
5
A continuación se presentan varios ejemplos para ilustrar esta nueva manera de controlar
una repetición:
Ejemplo 4.18 (Repetición controlada por contador, leer y sumar N números) Diseñar un algoritmo que lea N números y que imprima su suma
Observación 4.9.4.1 Las líneas marcadas con una , son las 3 características de una repetición controlada por Contador: (i)
Inicialización del contador i (en general) en 1, i 1
En la línea del mientras se compara i < N veces Note que el rango se realizará n - veces
Al final del rango se incremente i en 1, i i+1 Vale decir que aunque por error se omitiera esta incremento, de todas maneras el programa regresaría a evaluar la condición de repetición, y al no modificar el valor del contador C se entraría a un ciclo de repetición o “Loop” infinito, ¿Cuándo pararía?
Esta es la vez numero 1
Esta es la vez numero 2
Esta es la vez numero 3
Esta es la vez numero 4
Observación 4.9.4.2 La REPETICION CONTROLADA POR CONTADOR se
utilizará cuando se conoce el número de veces en que se realizará el Rango, ya sea
porque sea una constante dada o porque sea posible leer este número como dato(N).
______________________________________________________________________ 170
ESTRATEGIA
N (un número)
S Suma E X, El número en un ciclo
(1 número) (N+1 número) Observación 4.9.4.3
• Se utilizará una repetición controlada por contador, pues se sabe cuantas veces se
deberá realizar el Proceso de leer un número y acumular sus suma (N veces).
Observación 4.9.4.2
• Para calcular el promedio se requerirá, acumular la suma de todos los números que
se irán leyendo.
1.- EJEMPLO DE ESCRITORIO (y explicaciones adicionales)
Este concepto no está aislado de lo que se hace en la vida práctica cuando se suman varios
números. Por ejemplo:
Deteminar la suma de : 3 5 2 7 4
El lector habrá encontrado que el resultado es 21. Muy posiblemente comenzó sumándole
el 5 al primer 3 (lo cuál es 8) luego agregó 2 para obtener 10. Al sumarle el 7 que sigue
obtuvo 17; y finalmente a 17 sumó 4 para totalizar 21. Observando el proceso con más
cuidado se puede notar que se van obteniendo subtotales que son sumas parciales de los
datos procesados (sumados en este caso) hasta un momento dado, se dice que es el valor
acumulado hasta ese instante. No debe ser difícil reconocer que cada “instante”
corresponde a un ciclo de un proceso repetitivo en donde se suma un nuevo valor al
subtotal acumulado hasta entonces:
Observación 4.9.4.3 En forma cuantitativa, las Entradas del ejercicio son N + 1
datos ya que se da a leer N (1 dato) que será el número de veces que se realizará el
ciclo y N números que se van a sumar. En este ejercicio, se suman N=5 Números,
así los datos son : N + 1 = 5 + 1 = 6 números.
______________________________________________________________________ 171
S = 3 + 5 + 2 + 7 + 4 = 21 0 + 3 = 3 … + 5 = 8 … + 2 = 10 … + 7 = 17 … + 4 = 21
• Se necesitará un contador para controlar que el ciclo se efectúe N veces y además un
acumulador aditivo para ir sumando los números leídos, llamados X.
De nuevo, una manera práctica de fijar ideas es realizando la P.E. del algoritmo del ejemplo
correspondiente. Como se sabe que se sumarán N (cinco) números, se utilizará un contador
para controlar la repetición. Inicio Suma 0 Lea N --Se lee cuantos números se van a sumar.
i 1
mientras i < N haga
lea X
Suma Suma + X
i i + 1
fin mientras
escriba “ La suma de los numeros es : “, Suma
final Realizar la prueba de escritorio con los siguientes datos:
PRUEBA DE ESCRITORIO
Datos: 5, 3, 5, 2, 7, 4
Memoria Salida
Suma N i X
0 3 8 10 17 21
5 1 2 3 4 5 6
3 5 2 7 4
La suma de los numeros es: 21
______________________________________________________________________ 172
Ejemplo 4.19 (Repetición controlada por contador, acumuladores, descuentos, promedios) Modificar el Ejemplo 4.16 (pág.158) considerando que es posible leer el N clientes como
dato (por tanto ya no se contabilizará el N_clientes), que no se cobra el impuesto isv, y que
se desea saber lo siguiente:
• Ventas promedio con el 20% de descuento.
• Ventas promedio con el 10% de descuento.
ESTRATEGIA Retomando algunos aspectos de la estrategia del Ejemplo 4.16 (pág 158), se planteará lo
que corresponde a las modificaciones planteadas, comenzando por determinar las Salidas y
las Entradas.
N (1 número)
S (Varios) E Val_Venta (N números) Total
La entrada son:N + 1 números, leer la Observación 4.9.4.3 (pág.170)
Surgen nuevas Salidas con valores únicos, como se indica a continuación:
----------------------- + ------------------------- ASIGNACION CARACTERISTICA
C_20, Clientes con 20% de descuento, C_20 C_20 + 1
C_10, Clientes con 10% de descuento, C_10 C_10 + 1
Ingresos_20 Ingresos_20 Ingresos_20+total
S (1)V_prom_20 V_prom_20 Ingresos_20/C_20
Cálculo que requiere haber acumulado
previamente los Ingresos_20
Ingresos_10 Ingresos_10 Ingresos_10+total
V_prom_20 Idem V_prom_10 Ingresos_10/C_10
(1)Para calcular las ventas promedio V_prom_20 realizadas con el 20% de descuento, se
requiere dividir los Ingresos totales de las ventas con el 20% de descuento (Ingresos_20)
entre el total de clientes a los que se les otorga ese descuento o sea C_20, Así: V_prom_20 Ingresos_20 / C_20, Un razonamiento similar se aplica a V_prom_10
______________________________________________________________________ 173
Inicio
C_20 0, C_10 0 (1)
Ingreso_20 0.0, Ingreso_10 0.0 (2)
Lea N_clientes (3)
I 1 (4)
Mientras i < N_clientes (5)
Lea Val_venta (6)
Si Val_venta > 200 (7)
Entonces
Deduccion Val_venta * 20 (8)
Total Val_venta – deduccion (9)
C_20 C_20 + 1 (10)
Ingreso_20 Ingreso_20 + Total (11)
Sino
Deduccion Val_venta * 10 (12)
Total Val_venta- deducción (13)
C_10 C_10 + 1 (14)
Ingreso_10 Ingreso_10 + Total (15)
Fin si
Escriba “Total a pagar Lps. ”,total (16)
I I + 1 (17)
Fin mientras (18)
V_prom_20 ingresos_20 / C_20 ………. (19)
V_prom_10 ingresos_10 / C_10 ………. (20)
Escriba “Clientes con 20% de descuento: ”; C_20 (21)
Escriba “Clientes con 10% de descuento: ”; C_10 (22)
Escriba “Ventas promedio para Clientes con 20% de descuento: ”, V_prom 20(23)
Escriba “Ventas promedio para Clientes con 10% de descuento: ”, V_prom 10(24)
Fina
______________________________________________________________________ 174
Comentarios para algunas líneas del algoritmo:
Línea (1) Inicialización de los contadores de clientes, (Valores enteros “0”).
Línea (2) Inicialización de los acumuladores de ingresos (Valores reales con decimales “0.0”).
Líneas (4, 5, 17) Repetición controlada por contador.
Línea (6) En el Rango están todas las lecturas de Val_venta, diferente de cuando se usó
centinela en el Ejemplo 4.16, en donde se requería una lectura inicial antes de entrar
a la repetición, y posteriormente otra lectura al final del Rango
Líneas (9, 13) A diferencia del Ejemplo 4.16 que calculaba el Total después de la decisión,
ya que se necesita acumular los ingresos por categoría, es necesario totalizar en el
Ramal correspondiente.
Líneas (10 y 11, 14 y 15) Se incrementan los contadores y acumuladores correspondientes
Línea (16) Se imprime el total a cobrar al cliente en forma concatenada a la decisión
preliminar ya que a todos los clientes sin distinción se les va a cobrar, no es
necesario escribir la misma línea en cada uno de los ramales de la decisión.
Líneas (19 y 20) Se calculan las ventas promedio de cada uno de los distintos tipos
haciendo las operaciones necesarias. Note que estas se obtienen de un cálculo, las
ventas promedio no son acumuladores ni contadores.
Líneas (21 al 24) Se imprimen los reportes solicitados utilizando rótulos amistosos que
facilitarán la comprensión de los mismos.
Se deja al lector realizar la prueba de escritorio respectiva utilizando los siguientes datos PRUEBA DE ESCRITORIO Datos: 4, 250, 100, 300, 80
A continuación se presenta otro tipo de acumulador llamado Acumulador Multiplicativo
Observación 4.9.4.4. En secciones y capítulos subsiguientes, se estudiarán otras
particularidades en aplicaciones Comerciales”, en donde se utilizarán: contadores
acumuladores, otros bloques como el Bloque Caso; el Bloque Para, el Repita_Hasta.
______________________________________________________________________ 175
Ejemplo 4.20 (Repetición controlada por contador, Productorio de N números)
Diseñar un algoritmo en el que dados N números se calcule e imprima el producto de todos
ellos (productorio de N números). Posteriormente realizar la prueba de escritorio con los
siguientes datos:
Datos : 5, 3, 5, 2, 7, 4
Solución:
La Estrategia es igual que la empleada en el Ejemplo 4.18, con las diferencias existentes
entre la adición y el producto. Los resultados parciales de acumular el producto se pueden
representar como sigue:
P = 3 * 5 * 2 * 7 * 4 = 840
….. 1 * 3 = 3
…… *5 = 15
…..* 2 = 30
……. *7 = 210
…… * 4 = 840
Observación 4.9.4.5 Existe el Acumulador Multiplicativo, que igualmente tiene 3
Momentos:
• Inicialización antes de un ciclo repetitivo: P 1
• Incremento generalmente en un ciclo repetitivo: P P * num
• Impresión final: escriba P.
Este posteriormente servirá para calcular Productorios (acumulación del producto de
varios números), potencias, factoriales, etc., en el Capítulo 5 se presentaran más
Ejemplos ilustrativos.
______________________________________________________________________ 176
El algoritmo final es:
Inicio Producto 1
Lea N
I 1
Mientras i < N haga
Lea X
Producto Producto * X
I i+1
Fin mientras
escriba “ El producto de los numeros es : ”, Producto
final
PRUEBA DE ESCRITORIO
Datos: 5, 3, 5, 2, 7, 4
Memoria Salida
Producto N i X
1 3 15 30
210 840
5 1 2 3 4 5 6
3 5 2 7 4
El producto de los numeros es: 840
Observación 4.9.4.6
* En general los contadores y acumuladores aditivos, se inicializan en CERO que
es el elemento neutro de la adición, en cambio los acumuladores multiplicativos en
general se inicializan en UNO que es el elemento neutro de la multiplicación, ya
que todo número multiplicado por uno (1) vuelve a dar el mismo número.
* Los contadores son un caso especial de los acumuladores, así
i. Todo contador es un acumulador pero.
ii. NO todo acumulador es contador.
______________________________________________________________________ 177
EJERCICIOS 4.9.4. En cada caso diseñe un algoritmo para los p.o.p. propuestos:
1.- En una tienda se otorga un descuento del 10% a personas que realizan compras por
un valor de Lps. 200.00 o más. Se dan a leer al computador los totales de cada
factura (no se conoce de antemano la cantidad de facturas) y se desea determinar a
cuántas facturas se les favoreció con el descuento.
2.- Ampliar el algoritmo del problema anterior para calcular el ingreso total de la
tienda.
3- Un profesor tiene 40 estudiantes con tres calificaciones parciales cada uno.
Calcular el promedio de cada estudiante para determinar cuantos aprueban, cuantos
reprueban el curso, y la nota promedio del curso.
4.- Ampliar el algoritmo anterior para N estudiantes. 5.- Calcular la suma de los cuadrados de los primeros 10 números enteros positivos 6.- Dados N números distintos de cero contar cuantos son positivos y cuantos negativos. 7.- Se tienen 12 ecuaciones de segundo grado. Determinar cuántas tienen soluciones no
reales.
8.- Construir la tabla de equivalencia de temperaturas en grados centígrados a grados
Fahrenheit, para los valores en C de la siguiente tabla:
C F
0 1 2 3 4 5 6 7
9.- Modificar el algoritmo del problema anterior para:
a) Valores en C de: 0, 10, 20, 30,…70
b) Valores en C de: -15, -10, -5, 0, 5,…,40 Del Apéndice B realizar los ejercicios del 10 al 18:
10. Ejercicio I incisos 1 al 3
______________________________________________________________________ 178
11. Ejercicio I incisos 4 y 5
12. Ejercicio I inciso 6
13. Ejercicio III incisos 12 a)
14. Ejercicio III incisos 12 b)
15. Ejercicio III incisos 12 c)
16. Ejercicio VI incisos 24 y 25
17. Ejercicio VI incisos 26 y 27 hasta aquí del Apéndice B.
18. Imprimir los números del 1 al 100 sin proporcionar ninguna entrada. 19. Leer varios números hasta encontrar uno que sea mayor de 100. 20. Leer varios números e ir calculando su suma, hasta que ésta sobrepase a 200. 21.- Calcular la nota media de N estudiantes. 22 Calcular la suma de las N potencias de 2.
Para resolver los siguientes ejercicios el lector deberá investigar o consultar con tu maestro 23. Se leen 40 números, encontrar el mayor de ellos.
En el Apéndice E, encontrará el algoritmo (Ejemplo E.3, pág. 313) para encontrar
el mayor de 4 números y la posición que ocupa éste en la lista de números.
24. Se leen 25 números, encontrar cual es el menor de los números leídos y la posición
que ocupa en la lista de números (la observación del ejercicio 24).
25. Se proporcionan al computador dos tiempos (medidos en horas, minutos y
segundos). Determinar cual es el mayor y encontrar su diferencia en horas, minutos
y segundos (es necesario conocer la diferencia entre aritmética entera y real, y el
manejo de sus cocientes y residuos).
26. Una tienda de suministros de computadoras vende diskettes de cierto tipo al por
menor y mayor. La unidad la vende a Lps. 100.00. La caja de 10 los vende a
Lps.90.0. (Si una persona necesitara 45 diskettes, compraría 4 cajas a Lps. 90.00 y 5
a Lps.10.00 c/u). Se tienen 70 facturas de estas ventas canceladas en efectivo, y para
efectos de comprobación con la cajera, se introducirá por cada factura la cantidad de
diskettes vendidos. Calcular el ingreso total (no hay impuesto de venta).
27. Del Apéndice B, Ejercicio IV inciso 19 (pág. 293)
___________________________________________________________________ 179
CAPITULO 5 ESTRUCTURAS DERIVADAS 5.1 ASOCIATIVIDAD DE LA CONCATENACION
Se ha estudiado que la concatenación se forma a partir de dos b.e. según lo muestra el
siguiente diagrama.
Si se aplica el concepto estrictamente, sólo se podría concatenar dos b.e. y nada más. De tal
manera que si se necesita una secuencia de tres o más bloques se tendría que ir
concatenando de par en par de la siguiente manera:
Concatenando 1 con 2 y resulta A.
Luego, concatenando A con 3 y se obtiene un b.e. llamado B. Que en detalle sería:
B1 B2
1 2 3 A
3 A
3 A B
___________________________________________________________________ 180
La anterior no es la única forma de concatenar estos bloques, por ejemplo, se puede
concatenar 2 con 3 y obtener C:
Luego, se puede concatenar 1 con C y obtener D:
Sin embargo, se puede notar que tanto el bloque B como el D son equivalentes, ya que
ambos se ejecutan 1, 2 y 3 en ese orden, (note que el orden NO cambia) sin importar la
forma en que se hayan agrupado interiormente. Por esta razón se dice que la concatenación
es asociativa, y por lo tanto, independientemente de la forma que se agrupe internamente, el
resultado es equivalente, por esto se puede prescindir de las agrupaciones internas y
simplemente representar el b.e. compuesto de la siguiente manera:
3A
B
1 2
3 C
1 2
3C
1 2
D
1 2 3
___________________________________________________________________ 181
Que es la forma en que se han estado presentando los algoritmos anteriormente, esto es,
concatenando 3 o más bloques según ha sido necesario de acuerdo a la estrategia del
algoritmo.
Se puede observar de lo anterior que no se trata en sí de una nueva estructura (es decir la
concatenación de 3 b.e.), sino de una forma simplificada de sucesivas concatenaciones.
También, únicamente por comodidad y simplicidad en el lenguaje, se habla de la
concatenación de 3 o más b.e., que es lo que en el capítulo 4 se expuso como una extensión
de la concatenación.
Para concluir, se debe hacer notar que el propósito de esta sección ha sido el de formalizar
la “extensión” de la concatenación y proporcionar un vistazo del formalismo matemático de
cómo pueden ser tratados los conceptos de la programación estructurada.
5.2 VARIANTES Y DERIVADAS DE LA DECISION
5.2.1 La decisión abreviada
En determinadas ocasiones la rama falsa de una decisión es el bloque nulo, es decir no se
efectúa ninguna instrucción en dicho ramal En Nolae esta decisión se escribiría: Bajo el entendido de que si la rama falsa no se presenta, debe asumirse únicamente que
corresponde al bloque nulo. La decisión en este caso se denominará “abreviada”. Debe
observarse que no se trata de una nueva estructura, sino de un caso particular de la
estructura básica de la decisión, que por comodidad se expresa de manera más sencilla.
La representación de diagrama de flujo es:
Si C Si C Entonces entonces B1 ó B1 Sino fin si Nulo Fin si
___________________________________________________________________ 182
El diagrama anterior realmente equivale a:
Ejemplo 5.1 (Decisión abreviada, segmento Premio, Apéndice A No.42, pág.285)
Si el grupo de personas que van a una cafetería es de mas de 3 personas, el grupo gana un
premio.
Si Numero_personas >3
Entonces Escriba “Ganaste un premio” Sino
nulo Fin si La seudocodificación del algoritmo se podría simplificar omitiendo la rama falsa y
simplemente se escribirá:
V F
B1 nulo
C
V F
B1 B2
CC
___________________________________________________________________ 183
Si Numero_personas >3
Entonces
Escriba “Ganaste un premio”
Fin si
5.2.2 Las decisiones anidadas y las decisiones concatenadas
Cuando se tiene una decisión dentro de otra decisión, se dice que esta última está anidada
dentro de la primera. Se pueden tener varias decisiones anidadas, como en el ejercicio de
encontrar el mayor de 3 números de la sección 3.5 (ejemplo de árbol de decisiones). El
nombre se debe a una analogía con la forma en que los pájaros construyen sus nidos, ciertos
patrones circulares hechos de ramitas dentro de otros más grandes. El seudocódigo de un
árbol de decisiones con varias decisiones involucra decisiones anidadas. Algunos lenguajes
de programación disponen de instrucciones que simplifican la notación de este tipo de
decisiones. A continuación, se retoma el Ejemplo 3.11 (pág.98)de la sección 3.5:
Ejemplo 5.2. (Nolae, Árbol de decisiones, el mayor de 3 números) V a, “es mayor” a > c V F c, “es mayor” a > b F V “b mayor” a>c
Y el desglose correspondiente es: 1.- LECTURA DE DATOS
1.1 Leer a
1.1 Leer b
1.1 Leer c
V b, “es mayor” F b > c F c,”es mayor”
___________________________________________________________________ 184
2.- COMPARACIONES E IMPRESION
2.2 Ver si a > b
2.2.1 (V) Ver si a > c
2.2.1.1. (V) Imprimir a, “es mayor”
2.2.1.2 (F) Imprimir c, “es mayor”
2.2.2. (F) Ver si a < c
2.2.2.1 (V) Imprimir b, “es mayor”
2.2.2.2. (F) Ver si b > c
2.2.2.2.1 (V) Imprimir b, “es mayor”
2.2.2.1.2 (F) Imprimir c, “es mayor”
El seudocódigo correspondiente tiene la siguiente forma: Inicio
lea a,b,c
si a > b
entonces
si a >c
entonces escriba a, “es mayor”
sino escriba c, “es mayor”
fin si
sino
si a < c
entonces escriba b, “es mayor”
sino
si b > c
entonces escriba b, “es mayor”
sino escriba c, “es mayor”
Fin si
fin si
fin si
final
___________________________________________________________________ 185
Es importante poder realizar el seguimiento de algoritmo al efectuar una P.E. Para ello se
debe ubicar los puntos de salida de cada decisión. Obsérvese que en este algoritmo sólo
existe una concatenación y es la de la lectura con la decisión mayor.
Otra forma de seudocodificar es subrayando las palabras claves y colocar los bloques de
cada ramal un renglón mas abajo, como se muestra a continuación:
Inicio lea a,b,c
si a > b
entonces
si a >c entonces
escriba a, “es mayor” sino
escriba c, “es mayor” fin si
sino
si a < c
entonces
escriba b, “es mayor”
sino
si b > c entonces
escriba b, “es mayor” sino
escriba c, “es mayor”
fin si
fin si
fin si
final
A continuación se presentan Diagramas que ilustran este algoritmo.
___________________________________________________________________ 186
Decisión.
En un ejemplo como el anterior, un diagrama de flujo es más claro para seguir el algoritmo.
La anterior es la mejor forma de dibujar el diagrama, ya que muestra claramente cuales son
los b.e. (en este caso de decisión) que se subordinan unos dentro de otros y los puntos de
salida son fácilmente identificables.
Otra solución al mismo problema la proporciona el siguiente algoritmo:
Lea a,b,c,
“a mayor”
a>b
a>c
b>c
a>c
“c mayor” “b mayor” “b mayor” “c mayor”
F F
V V V
F
Lea a,b,c, a>b
V
F
a>c
a>c
“c mayor”
“a mayor” V
F
“b mayor”
b>c
V
F“c mayor”
“b mayor”
F
V
___________________________________________________________________ 187
Inicio Lea a,b,c, Si a > b y a > c entonces escriba a “es mayor” fin si
Si b > a y b > c entonces escriba b “es mayor” fin si
Si c > a y c > b entonces escriba c “es mayor” fin si
Final
O escrito de otra manera:
Inicio
Lea a
Lea b
Lea c
Si a > b y a > c
entonces
escriba a, “es mayor” fin si
Si b > a y b > c
entonces
escriba b, “es mayor” fin si
Si c > a y c > b
entonces
escriba c, “es mayor” fin si
Final
Desde el punto de vista de la estructuración son diferentes ya que aquí las decisiones (que
son abreviadas) NO están anidadas, sino que concatenadas. Esto significa que después de
realizar la primera decisión, ya sea que la condición haya sido evaluada V ó F, la segunda
se ejecuta irremediablemente y lo mismo la tercera. No se debe considerar que los tres
mensajes se escriben uno después de otro, sino que las evaluaciones de las tres condiciones
compuestas se realizan. En uno de los casos se ejecuta la escritura del mensaje y en los
otros dos no (ya que se ha supuesto que los números son diferentes).
___________________________________________________________________ 188
El diagrama de flujo en este caso tiene la siguiente forma:
5.2.3 BLOQUE CASO
En algunas situaciones tenemos una porción de un algoritmo de la siguiente forma y que
involucra decisiones anidadas:
Si i=1
entonces B1 Sino Si i=2 entonces B2 Sino si i=3 entonces “a mayor”
B3 B4
En donde B1,…., B4 representan b.e. (ya sean atómicos o compuestos).
Lea a,b,c,
“a mayor”
a > b y
a > c
b > a y
b > c “b mayor”
V
V
V
F
F
F
inicio
c > a y
c > b
“c mayor”
finfin
___________________________________________________________________ 189
Esta estructura compuesta aparece muchas veces, por lo que se ha decidido simplificar su
representación denotándola así:
Caso i
i=1 :B1
i=2 :B2
i=3 :B3
sino :B4
fin-caso
Observe que NO se trata de decisiones concatenadas, sino anidadas. Ello significa entre
otras cosas, que una vez que se realiza uno de los bloques B, no se evalúan mas condiciones
y se va al final del bloque caso (a fin-caso).
Una forma alterna, más similar a algunos lenguajes de programación, sería:
Cada uno de los valores contra los cuales se compara i, no tienen porque estar aislados o en
algún orden específico. Los valores de comparación y los bloques B que se ejecutan de
acuerdo al caso, corresponden más bien a la naturaleza del p.o.p.. Por ejemplo,
Caso k
1, 2, 3 : B1
4, 5 : B2
6, 8, 9 : B3
fin-caso
A diferencia de las estructuras básicas, las derivadas no tienen una representación única en
diagramas de flujo o en diagrama de bloque. A continuación se presentan algunas de ellas.
Caso i
1: B1
2: B2 BLOQUE CASO, variante de la Decisión
3: B3
Sino: B4
fin-caso
___________________________________________________________________ 190
Ejemplo 5.3 (Bloque Caso, Biblioteca.)
En el reintegro de libros a una biblioteca, la persona encargada anota el estado del libro en
un registro para tal efecto. El estado del libro se ha codificado de la siguiente manera:
1.- Perfectas condiciones, como nuevo
2.- Buenas condiciones
3.- Completo, pero con desgaste natural
4.- Completo, maltratado o rayado
5.- Malas condiciones
B1 B2 B3 B4
i=2 i=3 i=1 sino
B2
B3
B4
2
3
1
sino
i
i
B1
___________________________________________________________________ 191
Se proporciona al computador los códigos de estado de cada libro y se desea un reporte con
la siguiente información:
REPORTE DE ESTADO DE LIBROS DEVUELTOS Estado Cantidad de libros % de libros
1 ----- ---.--- 2 ----- ---.--- 3 ----- ---.--- 4 ----- ---.--- 5 ----- ---.---
Total ------- ---.---
DESARROLLO ESTRATEGIA
Se utilizará un centinela para EOF, y dentro de un proceso repetitivo se irá contando los
libros que estén en un estado determinado (usaremos cinco contadores, uno para cada
estado). Una vez que se termine de leer los estados, se calculan los porcentajes y se
imprimen los resultados.
DICCIONARIO DE VARIABLES
E El estado de cada libro. (La variable E se lee tantas veces como libros hayan
sido devueltos. Cuando E=0, se detecta fin de archivo).
C1 Contador de libros en el estado 1 C2 Contador de libros en el estado 2 C3 Contador de libros en el estado 3 C4 Contador de libros en el estado 4 C5 Contador de libros en el estado 5 C1 Porcentaje de libros en el estado 1 C2 Porcentaje de libros en el estado 2 C3 Porcentaje de libros en el estado 3 C4 Porcentaje de libros en el estado 4 C5 Porcentaje de libros en el estado 5 TT Total de libros TP Total de porcentaje (se espera que sea 100 o muy cercano a 100)
RESUMEN DEL ANALISIS SALIDA: [Ver diseño de reporte]
___________________________________________________________________ 192
ENTRADA: (Varios números) por cada libro su código E del estado en que fue devuelto
(al final E=0 como centinela EOF) PROCESO: Primero se inicializan las variables contadores, y se lee el primer dato.
Luego, dentro de un proceso repetitivo, se irá incrementando el contador correspondiente,
dependiendo del valor de E, por medio de un bloque caso. Al final, se calculan los
porcentajes y se realiza la salida.
DESGLOSE
1.- Pasos Iniciales 1.1 Inicialización de contadores
1.2 Lectura del primer dato 2.- Conteo Mientras no EOF. Haga lo siguiente:
2.1 Incrementar el contador correspondiente, según sea el caso.
2.1.1 (E=1) Incrementar C1 2.1.2 (E=2) Incrementar C2 2.1.3 (E=3) Incrementar C3 2.1.4 (E=4) Incrementar C4 2.1.5 (E=5) Incrementar C5
3.- Promedios e Impresión 3.1 Calcular Promedios y Gran Totales. 3.2 Imprimir encabezados 3.3 Imprimir resultados de detalle por cada estado. 3.4 Imprimir líneas de totales
ALGORITMO
Inicio C1 0; C2 0; C3 0; C4 0; C5 0 Lea E Mientras E ≠ 0 haga
Caso E 1: C1 C1 + 1
2: C2 C2 + 1 3: C3 C3 + 1 4: C4 C4 + 1 5: C5 C5 + 1
fin caso
lea E
fin mientras
___________________________________________________________________ 193
TT C1+ C2 + C3 + C4 + C5
P1 C1/TT * 100 ; P2 ← C2/TT * 100
P3 C3/TT * 100 ; P4 ← C4/TT * 100
P5 C5/TT * 100
TP P1 + P2 + P3 + P4 + P5
escriba “..encabezados..”
escriba “1 ”,C1, “ ”,P1 escriba “2 ”,C2, “ ”,P2 escriba “3 ”,C3, “ ”,P3 escriba “4 ”,C4, “ ”,P4 escriba “5 ”,C5, “ ”,P5 escriba “1_________________”
escriba “Total ”,TT, “ ”,TP
final
Obsérvese que como las instrucciones de escritura de los encabezados son obvias, no se
escribirán en detalle y se sobreentenderá que corresponde a todas las líneas laterales del
encabezado del reporte. Sin olvidar que el seudocódigo tiende a simplificar la descripción
del algoritmo. En el lenguaje de programación tendríamos que escribir las líneas
respectivas a:
escriba “ REPORTE DEL ESTADO DE LIBROS DEVUELTOS”
escriba “ Estado Cantidad de libros % de libros”
escriba “____________________________________________”
A continuación se presenta un ejemplo en donde se combina el uso del Bloque Caso,
acumuladores, contadores y la repetición controlada por contador.
Ejemplo 5.4 (Bloque Caso, repetición controlada por contador, contadores, acumuladores, Categorías)
Dados la categoría y el sueldo de N empleados, calcule el aumento correspondiente teniendo
en cuenta la siguiente tabla. Imprima la categoría y nuevo sueldo de cada empleado.
CATEGORIA AUMENTO %
1 15
2 10
3 8
___________________________________________________________________ 194
Al final se desea un reporte en donde se indique:
• Total de empleados en cada categoría
• Total pagado en categoría
• Total pagado en Planilla
Este ejemplo se desarrolló con un centinela en el Capitulo 3, utilizando una repetición
controlada por centinela, se modificará para controlarla por contador sabiendo que son N
empleados, así que se harán las modificaciones pertinentes al desglose del Ejemplo 3.12
(pág.104).Algunas partes del Análisis se cambiarán de orden por motivos pedagógicos:
DICCIONARIO DE VARIABLES
Identificador Descripción__________ Categoria Categoria Sueldo Sueldo Inicial Aumento Aumento Nuevo_S Nuevo sueldo N_empleados Número de empleados Utilizando el desglose desarrollado previamente, el algoritmo correspondiente es: Inicio Lea N I 1
Mientras i < N haga Lea categoria
Lea sueldo Si categoria = 1 entonces aumento sueldo *0.15 sino Si categoria = 2 entonces aumento sueldo * 0.10 sino aumento sueldo *0.08 Fin-si
Fin-si
Nuevo_s Sueldo + aumento
Escriba Categoria
Escriba Nuevo_s
I i +1 Fin-Mientras
Final
___________________________________________________________________ 195
Utilizando el Bloque Caso se tiene:
Inicio Lea N I 1
Mientras i < N haga Lea categoria
Lea sueldo
Caso categoria
1: aumento sueldo * 0.15
2: aumento sueldo * 0.10
Sino: aumento sueldo *0.08
Fin caso
Nuevo_s Sueldo + aumento
Escriba categoria
Escriba Nuevo_s
I i + 1
Fin-mientras
Final
A continuación el diccionario de variables modificado para incorporar los reportes:
NUEVO DICCIONARIO DE VARIABLES
Identificador Descripción
Categoria Categoria
Sueldo Sueldo Inicial
Aumento Aumento
Nuevo_S Nuevo sueldo
N Número de empleados
E1 Empleados de la categoría 1
E2 Empleados de la categoría 2
E3 Empleados de la categoría 3
S1 Total pagado a los empleados de la categoría 1
S2 Total pagado a los empleados de la categoría 2
___________________________________________________________________ 196
S3 Total pagado a los empleados de la categoría 3
Planilla Total pagado en Planilla. La Estrategia sufrirá modificaciones, pues ahora se solicitan reportes estadísticos que
presentarán valores únicos
Estrategia
N (1 número)
Salidas Categoria (N números) Entradas Categoria (N números)
Nuevo_s (N números) Sueldo (N números)
Total de salidas: 2 * N números Total de entradas: 2*N +1 números
--------------+------------------- Asignaciones sugeridas
C1, C2, C3, C4 Empleados de cada categoría C1 C1 + 1
S S1, S2, S3 Total pagado en cada categoría S1 S1 + Nuevo_s
Planilla Planilla S1 + S2 + S3
Para acumular los Nuevos sueldos pagados en cada categoría se usará el BLOQUE CASO,
pero se requiere tener el total a pagar ya calculado en cada una de las ramas de este, para
poder, según lo solicitado, contar y acumular por categoría.
ALGORITMO
Inicio E1 0, E2 0, E3 0
S1 0.0, S2 0.0, S3 0.0
___________________________________________________________________ 197
Lea N
I 1
Mientras i < N haga
Lea categoria
Lea sueldo
Caso categoria
1: aumento sueldo * 0.15
Nuevo_s Sueldo + aumento
E1 E1 + 1
S1 S1 + Nuevo_s
2: aumento sueldo * 0.10
Nuevo_s Sueldo + aumento
E2 E2 + 1
S2 S2 + Nuevo_s
Sino: aumento sueldo *0.08
Nuevo_s Sueldo + aumento
E3 E3 + 1
S3 S3 + Nuevo_s Fin caso
Escriba categoria
Escriba Nuevo_s
I i + 1
Fin-mientras
Planilla S1 + S2+S3
Escriba “Empleados de la categoría 1: “, E1
Escriba “Empleados de la categoría 2: “, E3
Escriba “Empleados de la categoría 3: “, E3
Escriba “Total pagado a empleados de la categoría 1: Lps. “, S1
Escriba “Total pagado a empleados de la categoría 2: Lps. “, S2
Escriba “Total pagado a empleados de la categoría 3: Lps. “, S3
Escriba “Planilla Total Lps.: “, Planilla
Final
___________________________________________________________________ 198
Ejemplo 5.5 (Lavado de autos, Bloque caso, contadores y acumuladores) Retomando el Ejemplo de una Agencia de Lavado de Autos (Ejemplo 3.13, pág.108), cuyo
seucódigo original se muestra en primera instancia en el Ejemplo 4.10, (pág.142) se usará
el Bloque Caso y se adicionarán estadísticas que incluyan: cantidad de clientes e ingresos
por tipo de servicio, los cambios se adicionarán paulatinamente.
Utilizando el BLOQUE CASO se tiene el siguiente Algoritmo:
Inicio Lea N_autos
Mientras N_autos ≠ 0 haga
Lea Tipo
Caso tipo
1: Subtotal 25 * N_autos
2: Subtotal - 30 * N_autos
3: Subtotal 35 * N_autos
Sino: Subtotal 40 * N_autos
Fin caso
si N_auto ≥ 2 entonces Desc Subtotal * 0.07 sino Desc 0 Fin-si
Total Subtotal - Desc
Escriba Total
Lea N_autos Fin-mientras
Final Antes de incorporar los reportes solicitados se modificará el Diccionario de variables y se
mostrarán las asignaciones sugeridas.
Identificador Descripción
Tipo Tipo de servicio
N_autos Número de autos
Subtotal Subtotal
___________________________________________________________________ 199
Desc Descuento
Total Total a pagar
C1 Clientes atendidos con el servicio tipo 1
C2 Clientes atendidos con el servicio tipo 2
C3 Clientes atendidos con el servicio tipo 3
C4 Clientes atendidos con el servicio tipo 4
Ing1 Ingresos por el servicio tipo 1
Ing2 Ingresos por el servicio tipo 2
Ing3 Ingresos por el servicio tipo 3
Ing4 Ingresos por el servicio tipo 4 Asignaciones sugeridas
C1,C2,C3,C4 ………Clientes de cada Tipo, C1 C1+1
S Ing1, Ing2, Ing,3, Ing.4 Ingresos de cada Tipo Ing1 Ing1 + Total
Ing2 Ing2 + Total Para acumular los ingresos por tipo “Ing1 Ing1 + Total” en el BLOQUE CASO, se
requiere haber calculado el total como: “total subtotal + descuento”, en vista de que
resulta engorroso introducir la decisión mostrada en cada opción del Bloque Caso:
si N_auto ≥ 2 entonces Desc Subtotal * 0.07 sino Desc 0 Fin-si
Se puede simplificar el ejercicio asignando solamente los porcentajes de descuento,
previo al Bloque caso:
si N_auto ≥ 2
entonces porcentaje_desc 0.07 sino porcentaje_desc 0.0 fin-si
El algoritmo final es:
___________________________________________________________________ 200
Inicio
C1 0, C2 0, C3 0, C4 0
Ing1 0.0, Ing2 0.0, Ing3 0.0, Ing4 0.0
Lea N_autos
Mientras N_autos ≠ 0 haga
Lea tipo
si N_auto ≥ 2 entonces porcentaje_desc 0.07 sino porcentaje_desc 0.0 Fin-si
Caso tipo
1: Subtotal ← 25 * N_autos
Descuento subtotal * porcentaje_desc
Total subtotal - descuento
C1 C1 +1
Ing1 Ing1 + Total
2: Subtotal ← 30 * N_autos
Descuento subtotal * porcentaje_desc
Total subtotal - descuento
C2 C2 +1
Ing2 Ing2 + Total
3: Subtotal ← 35 * N_autos
Descuento subtotal * porcentaje_desc
Total subtotal - descuento
C3 C3 +1
Ing3 Ing3 + Total
sino: Subtotal ← 40 * N_autos
Descuento subtotal * porcentaje_desc
Total subtotal - descuento
C4 C4 +1
Ing4 Ing4 + Total
Fin caso
Escriba Total
Lea N_autos
Fin-mientras
___________________________________________________________________ 201
Escriba “Clientes a los que se les brindo servicio de tipo 1”; C1
Escriba “Clientes a los que se les brindo servicio de tipo 2”; C2
Escriba “Clientes a los que se les brindo servicio de tipo 3”; C3
Escriba “Clientes a los que se les brindo servicio de tipo 4”; C4
Escriba “Ingresos por servicio de tipo 1”; Ing1
Escriba “Ingresos por servicio de tipo 2”; Ing2
Escriba “Ingresos por servicio de tipo 3”; Ing3
Escriba “Ingresos por servicio de tipo 4”; Ing4
Final
Se deja al lector una prueba de escritorio con los siguientes datos Datos: 5, 2, 1, 1, 2, 3, 4, 3, 2, 4, 3 EJERCICIOS 5.2.3 En cada problema desarrollar un breve análisis, desglose y algoritmo
1.- Se tienen 4 planillas en una elección para junta directiva estudiantil. Los
300 votos se introducen al computador codificados. Se desea obtener los
resultados de la votación.
2.- Un banco ofrece 6 tasas de interés anual distinto según el tipo de préstamo
que se solicita (codificados del 1 al 6). Se desea calcular el interés total
que se obtendrá para veinte clientes que solicitan distintos montos en
diferentes plazos (Asumir interés simple).
3.- Aparte del sueldo base, una compañía de venta de computadoras ofrece un
porcentaje como comisión a sus representantes de venta. Se alimentan las
facturas con los códigos de los vendedores y los valores de la venta.
Calcular el pago total de cada vendedor, y el valor total de las comisiones.
Del Apéndice B los siguientes ejercicios:
4. Ejercicios II inciso 11.
5. Ejercicios No.7 y 8.
6. Ejercicio No. 9.
7. Ejercicio No. 10.
___________________________________________________________________ 202
5.3.- VARIANTES Y DERIVADAS DE LA REPETICION
5.3.1 Bloque Para
En el Capítulo 4 sección 4.9 se estudió la repetición controlada por contador cuyo
esquema general fue:
Lea Valor_final
C Valor_inicial
Mientras C < Valor_final haga
B1
C C+1
Fin mientras Ahora se introducirá un Bloque equivalente pero abreviado llamado BLOQUE PARA,
siempre y cuando el contador o “índice” sea entero y los incrementos sean de uno en uno,
como se muestra a continuación:
En seudocódigo, el Bloque Para resume varias de las líneas del seudocódigo anterior:
Lea Valor_final
C Valor_inicial
Para I Valor_inicial, Valor_final haga
B1 BLOQUE PARA
Fin-Para
El efecto del ciclo de repetición Para es repetir el bloque de instrucciones B1 (RANGO) un
número fijo de veces. Efectivamente, se repite Valor _final - Valor_inicial + 1 veces
Cuando se ejecuta un ciclo Para, en la memoria se declara la variable de control (I en este
caso) y se inicializa en el Valor_inicial, luego se ejecuta el bloque de instrucciones B1. Una
vez terminadas todas las instrucciones de B1, la Variable de Control o Índice se
incrementan en uno (1) automáticamente y se vuelve a repetir todas las instrucciones del
bloque B1. La repetición se termina en el momento que la variable de control llega a tener
un valor mayor que el Valor_ final.
___________________________________________________________________ 203
Valor_inicial y Valor_final pueden ser variables o constantes.
A continuación se presentan varias aplicaciones del Bloque Para. Se utilizará ejemplos del
Capítulo 4, que fueron ya desarrollados utilizando la Repetición controlada por Contador,
se incluirán también ejemplos en donde se generan secuencias numéricas y la suma de éstas
(series y sucesiones).
5.3.1.1 Bloque Para y su uso con contadores y acumuladores
Ejemplo 5.6 (Bloque Para, leer y sumar N números) Diseñar un algoritmo que lea N números y que imprima su suma (utilice el bloque Para). En el Ejemplo 4.18, (pág.171) se obtuvo el siguiente algoritmo: Inicio
Suma 0 (A1) Lea N (A2)
i 1 (A3)
mientras i < N haga (A4)
lea X (A5)
Suma Suma + X (A6)
I I + 1 (A7)
fin mientras (A8)
escriba “ La suma de los números es : “, Suma
final
Utilizando el Bloque Para, el algoritmo solicitado es:
Inicio
Suma 0 (B1) Lea N (B2)
Para i 1, N haga (B3)
lea X (B4)
Suma Suma + X (B5)
fin para (B6)
escriba “ La suma de los números es : “, Suma
final
___________________________________________________________________ 204
Observe que:
Línea (A3) Desaparece pues con el Bloque Para, ya no es necesario la línea previa de
inicialización de I en 1, I 1, ésta queda absorbida en la Línea (B3).
Línea (A4) Queda modificada por la Línea (B3).
Línea (A7) La última línea del rango desaparece, ya no necesario escribir el incremento de I
en uno, en el Bloque Para este incremento es tácito, I I + 1.
La prueba de escritorio es igual a la mostrada en el Ejemplo 4.18
Ejemplo 5.7 (Bloque Para, contadores, acumuladores, descuentos, ingresos totales) Determinar si el posible codificar el Ejemplo 4.19. utilizando el Bloque Para.
El enunciado del ejercicio original es el siguiente:
En una tienda se otorgará a los clientes descuentos en sus compras. Si el valor de la venta
es de de Lps. 200.00 ó menos, se le concede un descuento del 10%, si es de más de
Lps.200.00, el descuento será de 20%. Se le proporciona al computador el valor de la
venta, se desea calcular el descuento, el isv. y el valor total a pagar. Se sabe que se
atenderán N clientes, que no se cobra el impuesto isv, y que se desea saber lo siguiente:
• El total a pagar por cada cliente
• Ventas totales (Lps.) con el 20% de descuento.
• Ventas totales (Lps.) con el 10% de descuento.
Observando el Algoritmo final del Ejemplo 4.19, se puede determinar que al ser una
repetición controlada por contador, fácilmente se puede codificar utilizando el Bloque Para.
Observación 5.3.1.1.
Para i 1, N Se lee : para i desde 1 hasta N, el índice “i” comienza en 1 y
tiene incrementos de 1 en 1 hasta llegar a N, en N +1 se sale del ciclo
___________________________________________________________________ 205
inicio C_20 0, C_10 0 (1)
Ingreso_20 0.0, Ingreso_10 0.0 (2)
Lea N (3)
Para 1 1, N haga (4)
Lea Val_venta (5)
Si Val_venta > 200 (6)
Entonces
Deduccion Val_venta * 20 (7)
Total Val_venta – deduccion (8)
C_20 C_20 + 1 (9)
Ingreso_20 Ingreso_20 + Total (10)
Sino
Deduccion Val_venta * 10 (11)
Total Val_venta- deducción (12)
C_10 C_10 + 1 (13)
Ingreso_10 Ingreso_10 + Total (14)
Fin si
Escriba “Total a pagar Lps. “,total (15)
Fin para (16)
Escriba “Clientes con 20% de descuento: “, C_20 (19)
Escriba “Clientes con 10% de descuento: “, C_10 (20)
Escriba “Ventas con 20% de descuento: “, Ingreso_20 (21)
Escriba “Ventas con 10% de descuento: “, Ingreso_10 (22)
Fina
Comentarios sobre algunas líneas del algoritmo anterior: Línea (1) Inicialización de los contadores de clientes, (Valores enteros “0” )
Línea (2)Inicialización de los acumuladores de ingresos, (Valores reales o decimales “0.0” )
Línea (3)Se lee el Numero N de clientes, que será el Valor_final del Bloque Para.
Líneas (4, 16) Repetición utilizando un BLOQUE PARA con un Valor_final o máximo de
N (clientes).
___________________________________________________________________ 206
Línea (5) En el Rango del Bloque Para se realizan todas las lecturas de Val_venta, esto es
diferente de cuando se usa repetición controlada por un centinela, (ver Ejemplo
4.16, pág. 158) en el que el primer valor de Val_venta se lee antes de ingresar al
“mientras” y de nuevo se vuelve a leer al final del rango de la repetición.
Líneas (7, 8) A diferencia del Ejemplo 4.16 , (pág. 158)que calculaba el total después de la
decisión, en vista de que se necesita acumular los ingresos por categoría, es
necesario totalizar en el Ramal correspondiente.
Líneas (9, 10; 13,14) Se incrementan los contadores y acumuladores correspondientes.
Línea (15) Se imprime el total a cobrar al cliente en forma concatenada a la decisión
preliminar ya que a todos los clientes sin distinción se les va a cobrar, por lo tanto
no es necesario escribir la misma línea en cada uno de los ramales de la decisión.
Líneas (17 y 18) Se calculan las ventas promedio de cada uno de los distintos tipos
haciendo las operaciones necesarias. Note que estas se obtienen de un cálculo, las
ventas promedio no son acumuladores ni contadores.
Líneas (19 al 22) Se imprimen los reportes solicitados utilizando rótulos amistosos que
facilitarán la comprensión de los mismos.
Se deja al lector realizar la prueba de escritorio respectiva utilizando los siguientes datos
Datos: 4, 250, 100, 300, 80
A continuación se presenta un ejemplo que utiliza el Bloque Caso (sección 5.2.3),
Bloque para, contadores y acumuladores.
Ejemplo 5.8 (Bloque Para, Bloque Caso, contadores, acumuladores, Categorías) Escribir un algoritmo modificando el mostrado en el Ejemplo 5.4, de tal manera que se
calcule el aumento de sueldo ahora para N empleados
Inicio E1 0, E2 0, E3 0
S1 0.0, S2 0.0, S3 0.0
Lea N
Para i 1, N haga
Lea categoria
Lea sueldo
___________________________________________________________________ 207
Caso categoria
1: aumento sueldo * 0.15
Nuevo_s Sueldo + aumento
E1 E1 + 1
S1 S1 + Nuevo_s
2: aumento sueldo * 0.10
Nuevo_s Sueldo + aumento
E2 E2 + 1
S2 S2 + Nuevo_s
Sino: aumento sueldo *0.08
Nuevo_s Sueldo + aumento
E3 E3 + 1
S3 S3 + Nuevo_s
Fin caso
Escriba categoria
Escriba Nuevo_s
Fin-para
Planilla S1 + S2+S3
--La impresión del reporte es igual . . .
EJERCICIOS 5.3.1.1 En cada problema desarrollar un breve análisis, desglose y algoritmo
1.- Imprima N veces el mensaje “Hola mundo”.
2.- Genere la Tabla de multiplicación del 5.
3.- Genere la Tabla de multiplicación del número N (se debe leer N).
4.- Genere todas las tablas de multiplicación rotulando debidamente cada una
de ellas
Del Apéndice B los siguientes ejercicios:
5. Ejercicio No. 25.
6. Ejercicio No. 26.
7. Ejercicio No. 27.
___________________________________________________________________ 208
5.3.1.2 Aplicaciones del Bloque Para, Sucesiones A continuación realizaremos ejemplos de aplicación de los conceptos de: contadores,
acumuladores aditivos y multiplicativos, etc. generando:
Sucesiones de números, que son secuencias de números que siguen cierto patrón.
Ejemplo 5.9 (Bloque Para, Sucesión, números pares, inicialización en cero)
Sin datos de entrada, generar la siguiente sucesión
2, 4, 6, 8, 20 términos (los números pares son positivos)
ESTRATEGIA
Entrada NO hay, los números Salida (20 números)
Se generan internamente X
• Proceso repetitivo controlado por el Bloque Para, se realizará 20 veces.
• Podemos observar que los números se generan si vamos sumamos 2 a cada uno.
2, 4, 6, 8,
2 2 2 Esto sugiere un acumulador aditivo con incrementos de 2, así:
X X + 2
ALGORITMO
Inicio
X 0 (1)
Para i 1, 20 haga (2)
X x + 2 (3)
Escriba X (4)
Fin para (5)
Final
Comentarios sobre este algoritmo:
Líneas (2 y 5) Controlarán que el RANGO se realice 20 veces.
Línea (1) Sabiendo que los números se generarán en incrementos de 2, y que la expresión
___________________________________________________________________ 209
correspondiente es X X + 2, la variable X se debe iniciar en 0 para que 0 + 2 del
primer 2, los demás números, no presentan particularidades.
Línea (3) La primera vez que se ingresa al ciclo, se genera el primer número de la sucesión: 2 Línea (4) Después de general el número de interés, ya está listo para imprimirse.
PRUEBA DE ESCRITORIO Para propósitos de simplificación modificaremos la Línea (2)
Para i 1, 4 haga (2) -- Solamente 4 Números.
Datos: No hay Memoria Salida
X i
0
2
4
6
8
1
2
3
4
5
A continuación se presenta otra manera de resolver este problema, iniciando el valor de la
variable X directamente en 2.
Ejemplo 5.10 (Bloque Para, Sucesión, números pares, inicialización en 2) Sin datos de entrada, generar la siguiente sucesión
2, 4, 6, 8, 20 términos
Modificación del Ejemplo 5.9 Inicio
X 2 (1)
Para i 1, 20 haga (2)
Escriba X (3)
X x + 2 (4)
Fin para (5)
Final
2 4 6 8
___________________________________________________________________ 210
Comentarios sobre el algoritmo anterior:
Línea (1) La modificación planteada será inicializar X en el primer valor de la sucesión: 2
Línea (3) La primera vez que entramos al ciclo, X ya tiene el valor de 2, y se deberá
imprimir inmediatamente. Si se colocara previamente la instrucción
X x + 2 se obtendría el número 4 y no se habría impreso el 2 inicial deseado.
Línea (4) En el primer ciclo, después de imprimir el valor vigente de X, se genera el
siguiente número que será impreso en el siguiente ciclo.
El Rango se efectuará siempre 20 veces, así que la instrucción Escriba X incluida en éste
nos garantiza que se que se imprimirán los mismos 20 números.
Se recomienda al lector el análisis de las Líneas (3,4) de los algoritmos
correspondientes a este ejemplo y al del anterior (Ejemplo 5.9), observará que éstas
están intercambiadas.
PRUEBA DE ESCRITORIO
Para propósitos de simplificación modificaremos la Línea (2) I
Para i 1, 4 haga (2) --Solamente 4 números
Datos: No hay Memoria Salida
X i
2
4
6
8
10
1
2
3
4
5
Note que se generó un número mas … el 10 pero no se imprimó púes el contador i controló
o detuvo la repetición.
Ejemplo 5.11 (Bloque Para, Potencias de 3) Generar la siguiente sucesión
3, 9, 27 , … N términos
2 4 6 8
___________________________________________________________________ 211
ESTRATEGIA
N
Entrada (La cantidad de números Salida N números
que se desear imprimir )
• Proceso repetitivo que se realizará N veces, se utilizará el Bloque Para.
• Observando la secuencia de números el próximo sería 81, se trata de las potencias de 3,
se van acumulando multiplicaciones sucesivas por * 3.
Se requerirá de un Acumulador Multiplicativo, inicializado en 1 (Pudiera ser 3)
Pot 1
3, 9, 27, 81, …. N términos
1 *3=3
… *3=9 … *3=27 … *3=81 La asignación para el acumulador sería pot pot * 3, con todas estas consideraciones se
procederá a escribir el algoritmo: ALGORITMO Inicio
Lea N
pot 1
Para i 1, N haga
pot pot * 3
Escriba pot
Fin para
final
Se deja al lector la realización de la Prueba de Escritorio respectiva con Dato: 4
___________________________________________________________________ 212
Ejemplo 5.12 (Bloque Para, potencias de 3, signos alternos) Generar la siguiente sucesión
3, − 9, 27 , −81 … N términos
ESTRATEGIA
N
Entrada (La cantidad de números Salida signo_pot (N números)
que se desear imprimir )
• Son aplicables las consideraciones del ejemplo anterior, la modificación introducida son
los signos alternos.
• Se conserva la magnitud de los números generados pero se introducirá la variable signo
mediante una Prueba de Escritorio.
Prueba de escritorio Memoria
Signo −1
Signo − signo
Signo − signo
Signo −signo
La sucesión empieza con 3 positivo así que en base a la Observación 4.9.11 se inicializará
la variable Signo en -1
ALGORITMO Inicio
Lea N
Signo
-1
1
-1
1
Observación 5.3.1.2.1. Cada vez que se ejecuta
signo − signo, se va alternando el signo de negativo a positivo o viceversa,
según se inicialice con -1 o +1.
___________________________________________________________________ 213
Signo − 1
pot 1
Para i 1, N haga
Signo −signo
pot pot * 3
signo_pot signo * pot
Escriba signo_pot
Fin para
final
PRUEBA DE ESCRITORIO Datos: 4 Memoria Salida
N Signo pot I signo_pot
4 -1
1
-1
1
−1
1
3
9
27
81
1
2
3
4
5
3
− 9
27
− 81
5.3.1.3 Aplicaciones del Bloque Para, Series finitas Otra aplicación de acumuladores y contadores son las SERIES.
Ejemplo 5.13. (Bloque Para, Serie finita, suma de pares) Calcular el valor de la siguiente serie: 2 + 4 +6 +8 + …50 términos Revisar los Ejemplos 5.9 (pág 208) y 5.10 (pág.209)
Observación 5.3.1.2.2: Se conservará
el signo positivo de las potencias de 3,
para alternar el signo dichas potencias,
se deberán multiplicar por la variable
Signo, y se creará una nueva variable
signo_pot.
3 − 9 27 − 81
Las series finitas, son el resultado de sumar números que siguen un determinado patrón
o secuencia (o sea la suma de los elementos de una sucesión). Sin pretender poner
mucho rigor matemático, se dirá que en éstas el resultado es un número.
___________________________________________________________________ 214
Para tener mas claridad se puede replantear el ejercicio, así: Calcular el valor de la Suma:
Suma = 2 + 4 +6 +8 + … 50 términos:
ESTRATEGIA
Entrada NO hay, los números Salida Suma
Se generan internamente (1 Número)
• Proceso repetitivo controlado por contador, se realizará 50 veces.
• Se sugiere un acumulador aditivo con incrementos de 2, así:
X X + 2 para generar los sumandos requeridos.
• Suma es un acumulador aditivo:
Suma suma + X, que a su vez tendrá que inicializarse en Cero.
ALGORITMO
Inicio
Suma 0 (1)
X 2 (2)
Para i 1, 50 haga (3)
Suma Suma + X (4)
X X+ 2 (5)
Fin para (6)
Escriba “El valor de la serie es: “, suma (7) Final
Se generan términos que se incrementarán en 2 los cuales a su vez se irán sumando
y acumulando en el acumulador Suma.
El algoritmo merece otros cometarios adicionales:
Línea (1) Inicialización del acumulador Suma en cero.
Línea (2) Inicialización de los términos a sumar que a su vez se incrementarán
internamente de dos en dos.
Línea (3) Bloque Para que inicia en 1 y realiza el Rango (líneas 4 y 5)50 veces.
___________________________________________________________________ 215
Línea (4) Incremento del acumulador suma en el valor del término generado X.
Línea (5) Se genera el nuevo término el cual se acumulará hasta en el siguiente ciclo,
esto implica que el último término generado no se utilizará.
Línea (7) Al finalizar el Bloque para o ciclo repetitivo, se imprime una sola vez (púes
es un solo número), el valor final de la Suma.
Ejemplo 5.14 (Bloque Para, Sucesión, serie, fracciones signos alternos)
Sin datos de entrada, diseñar algoritmos para lo solicitado a continuación:
5.14.a) La sucesión −1/2, 2/5, −3/8, 4/11, …30 términos (solo indicar los cocientes)
5.14.b) La serie S = −1/2 + 2/5 −3/8 + 4/11 - 30 términos (calcular la suma indicada)
Desarrollo del ejemplo 5.14.a)
• El numerador de las fracciones podría ser el índice “ i ” mismo del Bloque Para,
pues comienza en 1 y sus incrementos son de uno en uno.
• El signo del numerador se puede obtener como se mostró en el Ejemplo 5.12
debiendo comenzar Signo en 1 positivo pues en el ciclo signo − signo daría el
primer signo “−” que se necesita para signo_i (o signo_numerador).
• El denominador comienza en 2 y crece en incrementos de 3, así el denominador será
un acumulador: denominador denominador + 3.
• Se solicita que la sucesión se observe con los cocientes indicados o sea usando la
pleca “ / ” , esto se logra imprimiendo el signo_i, la pleca en literal y el
denominador como tal.1
1 Estos ejemplos son triviales y en general requerirían solamente imprimir el resultado de los números generados, pero con el propósito de desarrollar la lógica del alumno se detallan las variantes presentadas.
Observación 5.3.1.3. Revisando las pruebas de escritorio de los ejercicios realizados
previamente, se puede observar que la casilla de memoria del índice …
… i muestra los números 1, 2, 3, 4, 5….lo cual no es de extrañar pues así se
cuenta en forma natural. Lo anterior puede ser muy útil para el desarrollo de
ejercicios en donde ciertas variables puedan obtenerse operando con el índice i, por
ejemplo: 2*i, (i+1)/2, el Factorial de un número N!, etc.
___________________________________________________________________ 216
ALGORITMO
Inicio
denominador 2 (1)
signo 1 (2)
Para i 1, 30 haga (3)
signo −signo (4)
signo_i signo * i (5)
escriba signo_i, “ / “, denominador (6)
denominador denominador + 3 (7)
Fin para
Final
Algoritmo 5.14 a)
Es recomendable leer de nuevo todos los aspectos considerados en la ESTRATEGIA de
este ejercicio y relacionar cada aspecto con las líneas enumeradas del algoritmo anterior.
PRUEBA DE ESCRITORIO
para tres términos Para i 1, 3 haga (3)
Memoria Salida
Denominador Signo I signo_i
2
5
8
11
1
-1
1
-1
1
2
3
4
- 1
2
-3
Ejemplo 5.14.b) (S = −1/2 + 2/5 −3/8 +…)
NOLAE
Inicio Serie 0 (1)
denominador 2 (2)
signo 1 (3)
-1 / 2 2 / 5 -3 / 8
___________________________________________________________________ 217
Para i 1, 30 haga (4)
signo −signo (5)
signo_i signo * i (6)
cociente signo_i / denominador (7)
serie serie + cociente (8)
denominador denominador + 3 (9)
Fin para
Escriba “Serie = ”, serie (10)
Final
Comentarios al algoritmo:
• Línea (1) Serie es un acumulador aditivo que se inicializa en cero.
• La generación de los numeradores con su signo y sus denominadores se analizó en el
ejercicio anterior inciso 5.14.a, (pág. 216)
• En la sucesión del inciso a) se escribieron los términos solamente indicando el cociente
ver Línea (6) que lee escriba signo_i, “ / “, denominador (6)
Pero al tratarse ahora de la serie correspondiente, en donde efectivamente se suman
los términos el cociente deberá efectuarse como se indica en la Línea (7).
• Línea (8) Serie se incrementa en el cociente generado previamente Línea (7)
PRUEBA DE ESCRITORIO para tres términos Para i 1, 3 haga (4) Memoria Salida
Serie denominador Signo i signo_i cociente
0
-0.5
-0.1
-0.475
2
5
8
1
-1
1
-1
1
2
3
4
- 1
2
-3
- 0.5
0.4
-0.375
Ejemplo 5.15 (Bloque Para, Serie y Sucesión incrementos alternos) Generar la siguiente sucesión de números 0, 1, 5, 6, 10, 11, 15, 16….25 términos
Serie = -0.475
___________________________________________________________________ 218
Se puede observar que los incrementos varían comienza con 1, después 4 y sigue en
forma alterna:
0, 1 , 5, 6, 10, 11, 15,…
1 4 1 4 1 4 ESTRATEGIA Para resolverá esta nueva variante, se utilizará una BANDERA (mencionadas, al inicio de
la Sección 4.9 del capítulo 4), estas son útiles para indicar cambios de estado, sus valores
estarán cambiando de valores convenientemente de -1 a 1. y esto servirá en una
decisión en particular como un interruptor para cambiar de:
Ramal Verdadero (con un incremento de 1) a
Ramal Falso (con un incremento de 4) ALGORITMO Inicio Bandera 1 (1) Num 0 (2) Para i 1, 25 haga (3) Escriba Num (4) Si Bandera = 1 (5) Entonces Num Num + 1 (6) Bandera -1 (7) Sino Num Num + 4 (8) Bandera 1 (9) Fin si Fin para Final Comentarios al algoritmo: Línea (1) Se inicializa la Bandera en un valor arbitrario igual a 1 Línea (2) Se inicializa el valor de Num en cero que es el primer valor de la sucesión
Línea (4) Impresión del número en turno de la sucesión
Línea (5) Se verifica mediante una decisión el valor de la bandera si es 1 hace el ramal (V)
Línea (6) Generación del siguiente término con un incremento den 1 y
___________________________________________________________________ 219
Línea (7) Se cambia el valor de la Bandera a - 1para que en la subsiguiente vez el
programa haga el ramal (F) y se realice el incremento de cuatro Línea (8) y
en la Línea (9) se cambiará el valor de la bandera a 1 para volver a
incrementar en uno.
A continuación se muestra la prueba de escritorio PRUEBA DE ESCRITORIO para 5 términos Para i 1, 5 haga (3) Memoria Salida
Bandera num i
1
--1
1
-1
1
0
1
5
6
10
11
1
2
3
4
5
6
Queda al lector realizar el algoritmo de la respectiva Serie.
Otra aplicación de acumulador multiplicativo es el cálculo del factorial de un número N, la
notación usada es N!, a continuación se brinda un Marco Teórico.
El Factorial de un número entero N > 0 se denota como N! se define por:
1 si N=0 o si N=1
N! = N * (N-1) * (N-2) * (N-3) * … *1 si N > 2
Ejemplo 5.16 (Factorial, Bloque Para) Para N = 4, Calcular 4! ESTRATEGIA Por definición significa lo siguiente:
4! = 4 * 3 * 2 * 1 , o reescribiéndolo convenientemente es igual a
Leer la Observación 5.3.1.3, en la pág.215)
0 1 5 6 10
___________________________________________________________________ 220
4! = 1 * 2 * 3 * 4 = 24 Reconoce el lector ¿Quién progresa en esa forma?
1*1=1
1 * 2=2
2 * 3=6
6 * 4 = 24
• Este es un ejercicio en donde se utiliza un acumulador Multiplicativo que llamamos
Factorial, el cual se inicializa en 1 y …
• Luego en un ciclo de repetición se acumula su producto con los Indices generados
convenientemente 1, 2, 3, 4. Cuando el índice generado sobrepasa el límite superior
4 o Valor_final, el ciclo termina su ejecución.
• Se acumulan los productos de los Indices que se van generando. Podemos utilizar el
bloque para tal fin y además para controlar el ciclo repetitivo que deberá realizarse 4
veces.
NOLAE
Inicio
Factorial 1 (1)
Para i 1, 4 haga (3)
Factorial factorial *i (4)
Fin para
escriba “el factorial de 4 es . “, factorial (7) Final
Se deja al lector realizar la prueba de escritorio respectiva. EJERCICIOS 5.3.1.2
Para los siguientes ejercicios elabore el algoritmo correspondiente:
1. Del Apéndice C los incisos 4, 5.
2. Del Apéndice C los incisos 6, y 7.
3. Generar la sucesión 3, 5, 10, 12, 15, …. 20 términos
___________________________________________________________________ 221
4. Generar la sucesión 1/5, 2/10, 3/15,…….8/40
5. Ejercicios del Apéndice B inciso 21 (sucesiones)
6. Ejercicios del Apéndice B, inciso 22 (series)
7. Calcular la suma de las potencias de 2
8. Generar la sucesión 2, 4, 6, 8, 10… 35 términos, utilizando el Bloque para y
operando con el índice de éste, es decir sin utilizar un acumulador
9. Leer varios números hasta encontrar uno que sea mayor de 100. (Ver el
EJERCICIO 4.6. inciso.1 (pág. 144), EJERCICIO 4.9.3. inciso 1 (pág.208), en
donde la condición de repetición es una comparación)
10- Leer varios números e ir calculando su suma, hasta que ésta sobrepase a 200.
5.3.2 Bloque “Repita-hasta”
Los procesos repetitivos se han logrado con el bloque de repetición:
Mientras C haga
B
fin mientras
En este caso primero se evalúa la condición C para ejecutar el bloque B. Sin embargo, no
siempre es deseable que se evalúe C primero antes de ejecutar B, y el siguiente esquema
aparece a menudo:
Que dibujando en diagrama de flujo sería:
B
Mientras no C haga REPITA HASTA
B
Fin mientras
___________________________________________________________________ 222
Figura 5.3.2.1
La representación anterior se puede simplificar de la siguiente manera:
Figura 5.3.2.2
A la estructura anterior se le llamará el Bloque “Repita”. En si no constituye una nueva
estructura básica, sino mas bien derivada de la repetición.
Observe, que como b.e. se representan las reglas de una entrada y una salida.
B
B V
F
┐C
B
C B F
V
___________________________________________________________________ 223
Figura 5.3.2.3
En el “Repita-hasta”, se inicia con la ejecución de B, y luego se evalúa la condición C, si es
Falsa (a diferencia de la repetición) se vuelve a ejecutar B, y así sucesivamente hasta que C
es Verdadera. Una vez que C es verdadera, se llega a la salida del bloque.
En seudocódigo, se representa de la siguiente manera: Ejemplo 5.17 (Repita-hasta, Suma) Se desea un programa en el cual se sumen varios números hasta que la suma sea mayor que
200, al final imprimir el valor de la suma S.
Estrategia: (Varios)
Salida S Entrada Num
• La suma de los números S es un acumulador, que se inicializa en Cero.
B
C
V
F
Repita En donde C es una condición de repetición y
B B es un bloque estructurado que constituye el
Hasta que C Rango
___________________________________________________________________ 224
• Considerando que al iniciar no se tiene una condición “Centinela” se utilizará el
Repita hasta que la condición S > 200 sea (V)erdadera
El Algoritmo resultante es: Inicio S 0 (1)
Repita (2)
Lea Num (3)
S s + Num (4)
Hasta que S > 200 (5)
Escriba “La suma es: ”, S (6)
Final A continuación se muestra la prueba de escritorio paso a paso con los datos dados:
Datos: 100, 50, 65
Memoria: Salida:
S Num
0
100
100
Línea (1): Inicializa S en cero, y en la
Línea (2): NO existe una condición que limite la primera entrada al ciclo de repetición
Línea (3): Se lee número 100
Línea (4): y se acumula en S, no como resultado 100.
Línea (5): Evaluando la condición es 100 >200 como resulta Falsa, se continua con
La repetición y se vuelve a realizar el Rango de ésta.
___________________________________________________________________ 225
Datos: 100, 50, 65 Memoria: Salida:
S Num
0
100
150
100
50
Línea (3): Se lee el número 50.
Línea (4) y se acumula en S, dando como resultado 150.
Línea (5) Se evalúa la condición 150 >200, como resulta Falsa, se continua con la
repetición y se vuelve a realizar el Rango de ésta.
Datos: 100, 50, 65, 10 Memoria: Salida:
S Num
0
100
150
210
100
50
65
Línea (3): Se lee el número 65
Línea (4): y se acumula en S, da como resultado 210.
Línea (5): Se evalúa la condición 210 >200, como resulta Verdadera, ya no se continua
con la Repetición, ya que ésta se hace Hasta que efectivamente S >200.
Como se cumplió que 210 > 200, no se continua Repitiendo el Rango.
La suma es: 210
___________________________________________________________________ 226
Ejemplo 5.18 (Repita-hasta, Kilometraje)
Elaborar el seudocódigo del Ejemplo 4.7, pág. 138, (alquiler de vehículos, cobro por
Kilometraje) utilizando el Bloque Repita-Hasta, se leerá el primer Kilometraje antes de
entrar al Bloque, considerando que el primer valor leído de Kilometraje (Km) será distinto
de cero y se deberá leer de nuevo al finalizar el Rango de éste.
Con las consideraciones anteriores, se puede esperar las mismos resultados obtenidos
cuando se aplicó la repetición controlada por centinela ver figura
Figura 5.3.2.4
Por razones de espacio se omitió el inicio y final de cada uno de los algoritmos.
Observe las condiciones de repetición:
Una es la negación de la otra:
Km ≠ 0 Km = 0
• Ambas poseen lectura previa al bloque de repetición y al final del Rango
• En la repetición controlada por centinela, se tiene una lectura previa a la repetición, de
otra manera, no se tendría un valor inicial para evaluar la condición Km ≠ 0, además si
este es cero se entra al ciclo y no se realiza ni una vez.
Repetición controlada por centinela Bloque Repita-Hasta
lea Km
mientras Km ≠ 0 haga
si Km < 100
entonces
Pago 200 + 0.5 *Km
sino
Pago 215 + 0.35 *Km
fin si
escriba Pago
lea Km
fin mientras
lea Km
Repita
si Km < 100
entonces
Pago 200 + 0.5 * Km
sino
Pago 215 + 0.35 * Km
fin si
escriba Pago
lea Km
Hasta que Km=0
___________________________________________________________________ 227
• En el caso del bloque Repita-hasta, no es necesario tener una lectura previa (ni que se
cumpla alguna condición) para entrar a la repetición, si se dejase la lectura del
Kilometraje (Km.) al inicio del Rango ésta pudiera ser Cero.
La siguiente porción de algoritmo es incorrecta, porque (si Km = 0) se continuaría
procesando información para un valor no válido, se hace necesario la suposición de que
el primer valor leído no puede ser igual a cero.
Por lo que es aconsejable utilizar el Bloque Repita-hasta bajo el supuesto de que:
• El ciclo se realizará al menos una vez, y
• Se realizará una lectura antes de entrar al Bloque y otra al finalizar el rango de
este.
Repita Lea Km
si Km < 100
entonces
Pago 200 + 0.5 * Km
sino
Pago 215 + 0.35 * Km
fin si
Hasta- que Km ≠ 0
:
etc.
Observación 5.3.2. En el Apéndice E (Ejemplo E.4, pág. 314) se encuentra otra
variante de la repetición, siempre se utiliza el mientras, pero la repetición está
controlada por la RESPUESTA DEL USUARIO, se hace una pregunta sobre si se
desea seguir o no procesando información, si la respuesta es afirmativa (´´S´ o ´s´
se continua el proceso, si la respuesta es no (‘N’ ó ‘n’ ) el proceso termina. Se
solicita al lector que estudie con detenimiento el ejemplo que ahí se ilustra.
___________________________________________________________________ 228
EJERCICIOS 5.3.2
1. Elaborar un algoritmo en Nolae del Ejemplo 3.10, pág.92, o Ejemplo 4.8, pág 140.
(Boletos Tegucigalpa, SPS) utilizando el Repita-Hasta.
2. Ejercicios del Apéndice C incisos del 1 al 3 (pág.299).
3. Se deberá hacer un programa para un supermercado que pregunte para cada cliente:
el precio del artículo, la cantidad de artículos del mismo tipo que lleva. Además
deberá permitir que se le indique cuando terminan los artículos de un cliente para
ofrecer el total de la venta. El programa debe indicar el total de la venta del cliente
y preguntar si se atenderá otro cliente. Adicionalmente se desea que también
controle el corte de las cajas, por lo que debe ofrecer como salidas el total de ventas
del día, y el total de ingresos por impuestos
4. La comercializadora El GLOBO vende al por mayor zapatos estilo "ZZ",
manteniendo tres tipos de tarifa:
• TARIFA A: para mayoristas de la zona norte, el precio de cada par es de L. 220.00
• TARIFA B: para mayoristas de la zona central, el precio de cada uno es de L. 210.00
• TARIFA C: para mayoristas de la zona sur, el precio de cada uno es de L. 200.00
Se lee la tarifa y el número de artículos a comprar y se desea imprimir el total de la
venta y el tipo de tarifa, el 12% de impuesto sobre ventas y el total a pagar por el
cliente.
Al final diseñe un reporte que muestre:
• La cantidad de pares de zapatos vendidos en cada Tarifa.
• Total de clientes atendidos.
• Ingreso total de la comercializadora al final del día.
• Monto de la venta promedio por cliente.
NOTA: Para los Ejercicios 3 y 4 (Apéndice E, ejemplo E.4, pág. 314) se deberá utilizar la
repetición controlada por RESPUESTA DEL USUARIO, en el ejercicio 4 se deberá
utilizar un Bloque Caso con variables tipo carácter para las tarifas.
______________________________________________________________________ 229
CAPITULO 6 SUBALGORITMOS, ARREGLOS Y ELEMENTOS DE ESTRUCTURAS DE DATOS 6.1 Subalgoritmos
Para desarrollar un estilo que facilite la mantenibilidad (fácil mantenimiento), la legibilidad
(fácil lectura), la modularidad (agrupada por tareas afines) de programas más complejos, es
altamente recomendable que se utilicen los subalgoritmos. Además de ello, los
subalgoritmos tienen la ventaja del Reuso es decir, se definen una vez y posteriormente
pueden ser reutilizados todas las veces que el programador lo considere conveniente,
ahorrando muchas líneas de código que de otra manera se estarían repitiendo
innecesariamente. En general cuando se determine que hay líneas de código que se están utilizando con
frecuencia para realizar una tarea específica, será conveniente agruparlas y asignarles un
nombre en particular (preferiblemente que haga alusión a la tarea principal que realiza.) y
se invocarán cuando sea necesario. Este tema será introducido por medio de ejemplos sencillos para enfatizar la diferencia
entre su definición y su uso o invocación. Los subalgorimos se ejecutan cuando son
llamados o INVOCADOS, así como cuando una persona responde cuando se le llama por
su nombre. En el capítulo 3 de este libro se utilizan desgloses de primer y segundo nivel, en este
momento se debe tener presente esto, para aplicar dichos principios en el ejemplo que
mostramos a continuación:
Ejemplo 6.1 (Promedio de un estudiante, Introducción a los subalgoritmos) Diseñar el algoritmo para un programa en el cual, dados el número de cuenta y las 3
calificaciones de un alumno, calcule e imprima su promedio simple y el mensaje Aprobo ó
Reprobo según sea el caso.
Un subalgoritmo es un algoritmo que necesita ser llamado o invocado por otro
algoritmo para su ejecución.
______________________________________________________________________ 230
Estrategia: Promedio Cuenta
Salida mensaje Aprobo ó Entrada nota1
Reprobo nota2
nota3
• Después de calcular el promedio, se necesita una decisión
El algoritmo resultante es: Inicio lea cuenta (1) lea nota1 (2)
lea nota2 (3)
lea nota3 (4)
Promedio (nota1+ nota2 + nota3)/3 (5)
si promedio > 60 (6)
entonces (7)
Mensaje “Aprobo” (8)
sino (9)
Mensaje “Reprobo” (10)
fin si (11)
escriba promedio (12)
escriba mensaje (13) Final Algoritmo 6.1
Se puede observar que:
En que las Líneas del 1 al 4 se realiza la … LECTURA DE DATOS
Las líneas del 5 al 11se realizan los … CALCULOS Y CLASIFICACION
Finalmente en las líneas 11 y 12 se hace la … IMPRESIÓN DE RESULTADOS
Si promedio > 60 (V) el alumno Aprueba
(F) Sino Reprueba
______________________________________________________________________ 231
Las líneas que se han agrupado y asociado a los distintos titulares, se podrán ubicar, de tal
manera, que se divide el Programa propuesto en 3 subalgoritmos y se les nombra de manera
particular con un “Nombre”, a continuación la DEFINICION (o líneas de código) de los
subalgoritmos de interés.
Ejemplo 6.2 (Subalgoritmos, Promedio de un estudiante)
Inicio (Lectura) -- Se coloca el nombre entre paréntesis. Línea (0) lea cuenta (1)
lea nota1 (2)
lea nota2 (3)
lea nota3 (4)
Final
En la Línea (0) se puede observar que, al lado de la palabra Inicio se coloca entre paréntesis el nombre del subalgoritmo. Inicio ( Calculos_y_clasificacion) Promedio (nota1+ nota2 + nota3)/3 (5)
si promedio > 60 (6) entonces (7) Mensaje “Aprobo ” (8)
sino (9) Mensaje “Reprobo” (10)
Fin si (11) Final
Inicio (Impresion) escriba promedio (12) escriba mensaje (13) Final
Cada uno de los tres segmentos anteriores es un subalgoritmo, en este momento se ha
realizado la DEFINICION de cada uno de ellos y se les asignó un nombre.
En general se dirá que cuando un algoritmo llama (o invoca) a un subalgoritmo por su
“Nombre” el subalgoritmo se ejecuta y al finalizar éste, se regresa al algoritmo original que
lo INVOCO, continuando éste su ejecución normalmente.
A continuación se muestra el Programa Principal en el cual se ejemplificará como se realiza
la INVOCACION de los subalgoritmos anteriores.
______________________________________________________________________ 232
Inicio (Principal)
Lectura --en la invocación basta colocar el nombre del subalgoritmo Calculos_y_Clasificacion Impresión
Final Algoritmo 6.2 En el ejemplo desarrollado se ilustra el orden en la ubicación física de los subalgoritmos y
del algoritmo principal, es decir, primero se colocarán los subalgoritmos y posteriormente
el algoritmo Principal.
En el desarrollo de la prueba de escritorio del Algoritmo 6.2, se considera lo siguiente:
Al INVOCAR Lectura, se remite al subalgoritmo Lectura en su DEFINICION, al finalizar
éste se regresa al punto de partida inicial (en este caso el Principal), para realizar la
siguiente instrucción concatenada con ella, que es el llamado o INVOCACION al
subagoritmo Calculos_y_clasificacion y así sucesivamente, hasta terminar.
La ejecución del algoritmo 6.1) es igual a la del Algoritmo 6.2), el lector puede realizar
dos Pruebas de escritorio de para cada uno de ellos con los siguientes datos, y comparar las
Memorias y Salidas finales:
Datos1: 40, 50, 60
Datos2: 60, 70, 80
Un subalgoritmo a su vez puede llamar o invocar a otro, por lo que se establece el siguiente
principio:
Además, los nombre asignados a los subalgoritmos deben seguir las mismas reglas para los
identificadores estudiadas en el Capítulo 2. Ejemplo 6.3 (Subalgoritmos, Promedio de N alumnos) Modificar el Ejemplo 6.2 (pág 231), para N alumnos Solución: Los subalgoritmos LECTURA, CALCULOS_Y_CLASIFICACION e IMPRESIÓN,
Toda DEFINICION de un subalgoritmo debe estar colocada antes del algoritmo (u
otro subalgoritmo) que lo va a llamar o INVOCAR.
______________________________________________________________________ 233
siguen siendo válidos, solamente se requiere utilizar un Bloque Para pues bastará leer el
Número de alumnos (N_alumnos) para tener el Valor Tope, el nuevo algoritmo es:
Inicio
Lea N_alumnos
Para i 1, N_alumnos
Lectura
Calculos_y_Clasificacion
Impresion
Fin para Final EJERCICIOS 6.1 1.- Modificar el Ejemplo 6.2 (pág. 231) para que calcule e imprima número de
Aprobados, número de Reprobados, y la nota promedio de todo el curso.
2.- Del Apéndice C, hacer los ejercicios 10 al 13 (pág. 299,300). 3.- Para ser aceptado en la “Universidad Luz del saber” se debe tener un promedio de la
secundaria superior a 80% y se requiere haber aprobado el examen de admisión con
una nota de 70% o más, diseñar un programa que utilice los siguientes
subalgoritmos y procese varios alumnos:
LECTURA: para leer el promedio y la nota de examen de cada aspirante
SELECCION: para determinar si el alumno será aceptado o no en la Universidad
ESCRITURA. Imprimirá el promedio, nota y el mensaje Aceptado o Rechazado
4.- Para la elaboración de un censo poblacional de N municipios, se le ha asignado un
código numérico a cada municipio, se ha registrado, con la mayor aproximación
posible, el número de habitantes que tienen y la extensión territorial de cada uno de
ellos (medidas en hectáreas). Diseñar un programa en (el lenguaje que su profesor le
indique) que clasifique los municipios por categorías según el número de habitantes
que posea, ver tabla adjunta:
______________________________________________________________________ 234
El programa deberá, imprimir el código del municipio, número de habitantes,
hectáreas y el mensaje de la clasificación correspondiente (Nota: todos los
municipios deberán quedar clasificados).
Además se debe generar un reporte con la siguiente información:
• Número de municipios en cada una de las categorías.
• Población Total en cada una de las categorías.
• Código del municipio ubicado en la mayor cantidad de Hectáreas de terreno y la
categoría de este.
• Código del municipio con la menor cantidad de Hectáreas de terreno y su categoría.
6.2 MENUS, UNA APLICACIÓN DE LOS SUBALGORITMOS Otra aplicación de los subalgoritmos son los MENUS
Se introduce el uso de éstos con el ejemplo de una calculadora:
Ejemplo 6.4 (Menús, Calculadora) Se desea un programa que, de manera repetitiva, sume o reste dos números, según se le
indique. Para ello, presentara un <<Menú>> de opciones hasta que se selecciones la opción
de terminar el programa.
RANGO habitantes CATEGORIA / MUNICIPIO
Menor de 1,000 INCIPIENTE
De 1,000 a 5,000 EN DESARROLLO
De 5,001 a 10,000 FLORECIENTE
Mas de 10, 001 MADURO
Un MENU es un conjunto de opciones (generalmente numeradas) que se presentan al
usuario para su selección, cada opción conlleva a la ejecución de una tarea específica.
______________________________________________________________________ 235
DESARROLLO DE UN BREVE ANALISIS Se presentará el siguiente menú.
Figura 6.2.1
Si la opción escogida es 1, se solicitarán los números que se van a sumar y se escribe el
resultado, como se indica en el siguiente diseño de pantalla.
Figura 6.2.2
Y, de manera similar, para el caso de la resta. DESGLOSE
1. Proceso repetitivo de presentación del menú Repetir
1.1 Presentación del menú
1.2 Selección del caso 1 ó 2, para efectuar operaciones hasta que la opción sea 3.
El desglose anterior lleva a la necesidad de utilizar el Bloque Repita-hasta
Proporcione los números que se van a sumar: X =__ Y =__ La suma es :_____ Teclee <<Enter>> para continuar
MENU
1. Sumar dos números 2. Restar dos números 3. Terminar el programa
Teclee el número de su opción: __
______________________________________________________________________ 236
2do. Desglose
1.2 Según sea el caso para la opción:
1.2.1 (Opción = 1) Solicitar los números, sumarlos e imprimirlos
1.2.2 (Opción = 2) Solicitar los números, restarlos e imprimirlos
Como se puede observar se utilizará bloque caso pues la opciones son números enteros
Se comienza diseñando la pantalla principal que estará presentando el MENU de opciones
cuyo diseño se mostró previamente (Figura 6.2.1), este procedimiento se llama
Pantalla_Menu: y consistirá de varias escrituras y una lectura única de la OPCION.
Inicio(Pantalla_ Menu) (1)
Limpia_Pantalla (2)
escriba “MENU”
escriba “1.- Sumar dos números”
escriba “2.- Restar dos números”
escriba “3.- Terminar el programa”
escriba “Teclee el numero de su opción”
Lea OPCION
Final
El procedimiento “Limpia_Pantalla” de la Línea (2), existe en los lenguajes de
programación y su finalidad, como dice su nombre es Limpiar la Pantalla, de manera que
en las corridas, las salidas previas al llamado de éste, no son visibles al usuario (como una
página nueva)
Posteriormente se hará el procedimiento Suma, de acuerdo al diseño mostrado en la Figura
6.2.2 (pág. 235), en el cual los mensajes son asociados a la escritura y los valores de X e y
deberán leerse.
Inicio (Suma)
Limpia_Pantalla
escriba “Proporcione los números que se van a sumar”
______________________________________________________________________ 237
escriba “X = ”
lea X
escriba “Y = ”
lea Y
S X + Y
escriba “La suma es : ”, S
escriba “Teclee <<Enter>> para continuar ” --Efecto de una lea Pausa
Final El último lea (sin parámetro) sirve para que la computadora ESPERE la pulsación de la
tecla ENTER para continuar con el programa.
Ahora se continuará con el procedimiento Resta, que resulta similar al de Suma
Inicio (Resta )
Limpia_Pantalla escriba “Proporcione los números que se van a restar”
escriba “X = ”
lea X
escriba “Y = ”
lea Y
R X - Y
escriba “La resta es : ”, R
escriba “Teclee <<Enter>> para continuar ”
lea Final
Como se mencionó anteriormente en el paso de los desgloses, ya que Repetidamente se
estará presentando esta pantalla con opciones para “1.- Sumar y 2.- Restar” hasta que la
opción sea “3. Terminar”, se recurrirá al Bloque “Repita hasta”, entonces el algoritmo
principal se escribe así:
______________________________________________________________________ 238
Pensando en una Prueba de escritorio, se puede observar que se exhibirá primero el Menu
principal (Figura 6.2.1. pág.235) con la ejecución del procedimiento Pantalla_Menu, al
ingresar la opción (por ejemplo) 1 se continua con el Bloque Caso y se llama o INVOCA al
procedimiento Suma, en este (Figura 6.2.2. pág.235 ) se piden los dos números a sumar etc.
y salimos del Bloque Caso, y como “hasta que OPCION =3” es (F), se regresa a realizar de
nuevo el Rango, y se ejecuta otra vez Pantalla_Menu, que vuelve a exhibir el menú
principal.
El “sino” del Bloque Caso es útil en los casos en que ninguna de las opciones definidas se
cumpla. Por ejemplo cuando el usuario erróneamente presiona el número “5”. El sino lo
lleva a un bloque nulo, (lo cual no implica que ira a la opción “3.-Terminar” ya que ésta
no es un procedimiento), se sale del Bloque Caso, y como no se ha cumplido que
“OPCION = 3”, regresa a realizar el Rango para presentar de nuevo la pantalla del MENU.
El subalgoritmo Pantalla_Menu presenta literales de las opciones para el usuario, con toda
la libertad propia de estos (espacios en blanco, caracteres especiales, etc.), no deben
confundirse con los nombres de los procedimientos que hacen posible el desarrollo de
dichas opciones, dichos nombres deberán seguir todas las reglas de identificadores
indicadas en el. Capítulo 2, y están como opciones del Bloque Caso.
Inicio (Principal)
Repita
Pantalla_Menu
Caso OPCION
1: Suma
2: Resta ESQUEMA GENERAL DE UN MENU ITERATIVO
Sino: nulo
fin caso
hasta que OPCION = 3
Final
______________________________________________________________________ 239
Opciones presentadas en el
procedimiento, Pantalla_ Menu
Invocación a los procedimientos
En el Bloque Caso
Put(“1.-Sumar dos números”)
Put(“2.-Restar dos números”)
Caso opcion 1: Suma 2: Resta
Ejemplo 6.5 (Menús, Agencia Turismo Islas)
Una agencia de viajes va a proporcionar tres paquetes turísticos, con un costo base para dos
personas y un costo adicional por persona extra, según se muestra en la siguiente tabla.
PAQUETE DESTINO PRECIO DOS PERSONAS PRECIO PERSONA EXTRA
1 Islas Bahía 2,500.00 1,000.00
2 México 4,800.00 2,500.00
3 Madrid 15,000.00 9,000.00 El precio incluye transporte aéreo, hotel y desayuno por cuatro días y tres noches. Cada uno
de los paquetes tiene opciones adicionales que se pagan por aparte por cada persona.
1. Islas de la Bahía
a. Clases de esquí acuático 300.00 por persona
b. Visitas a delfines 80.00 por persona
2. México
a. Visitas a las pirámides 60.00 por persona
b. Presentación Ballet Folklórico 50.00 por persona
c. Visita a Garibaldi 200.00 por persona
3. Madrid
a. Visita a Valencia 270.00 por persona
______________________________________________________________________ 240
Con el propósito de atender los clientes se desea un programa de consulta para calcular
costos totales según el paquete y las opciones escogidas. Por lo cual, el programa deberá
presentar una pantalla así:
La cual deberá aparecer siempre que se termine con un cliente para esperar a atender el
siguiente.
Si por ejemplo, el cliente pide el paquete # 1, se deberá ir preguntando sobre el # de
personas que escogieron determinada opción para los cálculos de los costos, (si ninguna
persona escoge o desea una opción, el numero de personas NO será 0). Al final de la
consulta, la pantalla quedará así:
MENU
1. Islas de la Bahía 2. Ciudad de México 3. Madrid España 4. Salir del programa
¿Cuál es su opción: ? _____
PAQUETE : ISLAS DE LA BAHIA
Cantidad de personas extra ___________________ Cantidad de personas a esquí acuático __________ Cantidad de personas visita a delfines _________ Costo del Viaje : Costo base para 2 personas Lps. _________ Subtotal _________ Impuesto _________ Gran Total Lps. _________ Teclee <<Enter>> para continuar
______________________________________________________________________ 241
DESARROLLO
Nuevamente se diseñarán subalgoritmos.
Se puede observar que un desglose general para el programa de consulta es el siguiente:
1. Repetir sucesivamente lo siguiente :
1.1 Mostrar el menú en la pantalla
1.2 Atender la consulta del cliente según sea el caso :
1.2.1 (opción = 1) Consulta para Islas
1.2.2 (opción = 2) Consulta para México
1.2.3 (opción = 3) Consulta para Madrid
Hasta que se escoja la opción = 4 para salir del programa. La codificación de este desglose general será el algoritmo principal, el cual invoca a los
subalgoritmos utilizados
Se considerarán los siguientes subalgoritmos. NOMBRE PROPOSITO Pantalla_Menu Presentar el menú en la pantalla
Islas Consulta para el paquete Islas
México Consulta para el paquete México
Madrid Consulta para el paquete Madrid
DICCIONARIO DE VARIABLES
Opcion Opción del Menú principal
CE Cantidad de personas extra
Pesq Cantidad de personas que tomarán clase de esquí acuático
Pdelf Cantidad de personas visita a delfines
Costo_ce Costo por persona extra
Costo_Pesq Costo por las clases de esquí acuático
Costo_Pdef Costo por la visita a delfines
Costo Subtotal
Impto Impuesto sobre ventas (12%)
Total Total a pagar por que paquete
______________________________________________________________________ 242
Inicio (Pantalla_Menu)
Limpia_Pantalla
escriba “ MENU ”
escriba “ ______ ”
escriba
escriba “ 1.- Islas de la Bahía ”
escriba “ 2.- Ciudad de México”
escriba “ 3.- Madrid, España”
escriba
escriba “ 4.- Salir del Programa”
escriba “ ¿Cuál es su opción : ?”
lea OPCION
Final
Inicio (Islas)
Limpia_Pantalla
escriba “ Paquete: Islas de la Bahía”
escriba
escriba “Cantidad de personas extras”
lea Ce
costo_Ce Ce * 1500.00
escriba “Cantidad de personas esquí acuático”
lea Pesq
costo_pesq pesq * 300
escriba “Cantidad de personas visita a delfines”
lea Pdelf
costo_pdelf Pdelf * 80
Costo 2500 + costo_ce+ costo_pesq + costo_pdelf
impto costo * 0.12
Total costo + impto
escriba “Costo base para 2 personas Lps. 2,500.00”
escriba “Sub. total ”, costo
escriba “Impuesto ”, impto
______________________________________________________________________ 243
escriba “ GRAN TOTAL ”, Total
escriba “Teclee <<Enter>> para continuar”
lea
Final
El subalgortimo Islas puede elaborarse de manera que “costo” sea un ACUMULADOR
ADITIVO, en el caso de que en las salidas se requieran impresiones de cálculos
intermedios, se deberán separar los cálculos según convenga
Inicio (Islas)
Limpia_Pantalla escriba “Paquete: Islas de la Bahía” escriba costo 2500
escriba “Cantidad de personas extras: ”
lea Ce Costo costo + Ce * 1500.00 -- Acumula
escriba “Cantidad de personas a esquí acuático: ”
lea Pesq
costo costo + pesq * 300 -- acumula
escriba “Cantidad de personas visita a delfines”
lea Pdelf
costo costo + Pdelf * 80 -- acumula
impto costo * 0.10 -- Usa otra variable pues impto se imprimirá
Total costo + impto
escriba “Costo base para 2 personas Lps. 2,500.00” -- es un literal
escriba “Sub. total ”, costo
escriba “Impuesto ”, impto
escriba “ GRAN TOTAL ”, Total
escriba “Teclee <<Enter>> para continuar”
lea Final De la misma manera se sigue con los otros dos procedimientos México y Madrid.
El algoritmo principal es:
______________________________________________________________________ 244
Inicio Repita Pantalla_Menu
Caso OPCION
1: Islas 2: México 3: Madrid Sino: nulo
fin caso
hasta que OPCION = 4 Final Ejemplo 6.6 (Menús, Agencia Turismo Islas, preguntas en preferencias, contadores, acumuladores, reportes) Modificar el ejercicio anterior de la siguiente manera:
1) Para el paquete Islas, las únicas opciones serán:
a) Preguntar Numero de personas y que el programa determine si hay personas
extras
b) Preguntar si habrá personas que irán a visitar a los delfines
Si la respuesta es Si Teclear ‘S’o ‘s’ si es NO teclear ‘N’o ‘n’
En el caso de responder que ‘s’ preguntar el número de personas que irá y hacer los
cálculos respetivos.
2) Incluir la opción de reportes que en cualquier momento brinde lo siguiente :
a) Paquetes vendidos de cada tipo b) Ingresos por cada tipo de paquete c) Ingresos totales de la agencia de turismo
El nuevo menú Principal se deberá ver así:
MENU
1. Islas de la Bahía 2.- Ciudad de México 3.- Madrid España 4.- Reporte de Paquetes vendidos y los Ingresos generados 5.-Salir del programa
¿Cuál es su opción: ? _____
______________________________________________________________________ 245
Solución: Ya que se cuenta con el algoritmo básico del ejemplo anterior Ejemplo 6.6, se comenzará
por ampliar el diccionario de variables e ilustrando las asignaciones para los contadores y
acumuladores que se necesitarán
DICCIONARIO DE VARIABLES
Opcion Opción del Menú principal : : Total Total a pagar por que paquete
Nuevas variables Asignación
P_islas Paquetes vendidos para Islas de la Bahia P_islas P_islas +1
P_mex Paquetes vendidos para México P_mex mex +1
P_madrid Paquetes vendidos para Madrid P_madrid P_madrid +1
Ing_islas Ingresos por la venta de paquetes a las Islas Ing_islas Ing_islas+Total
Ing_mex Ingresos por la venta de paquetes a México Ing_mex Ing_mex+Total
Ing_madrid Ingresos por la venta de paquetes a Madrid Ing_madrid Ing_madrid+Total
Ing._Total Ingreso total de la Agencia de turismo Ing_Total Ing_islas+ …
Ing_mex+ Ing_madrid
En primera instancia el subalgoritmo Pantalla_Menu se modificará al surgir una nueva
opción que es Reporte
Inicio (Pantalla_Menu)
Limpia_Pantalla
escriba “ MENU ” escriba “ ______ “
escriba “ 1. Islas de la Bahía ”
escriba “ 2. Ciudad de México”
escriba “ 3. Madrid, España”
escriba “ 4. Reporte de Paquetes vendidos y los Ingresos generados” escriba escriba “ 5. Salir del Programa ” escriba escriba “ ¿Cuál es su opción : ?”
lea OPCION
Final Algoritmo 6.6a
______________________________________________________________________ 246
A pesar de que primero se colocan los subalgoritmos y posteriormente el principal, por
fines didácticos se empezará a desarrollar este último, para visualizar mejor la lógica total
del programa, así como también las inicializaciones necesarias
Inicio
P_islas 0, P_mex 0, P_madrid 0 (1)
Ing_islas 0.0, Ing_mex 0.0, Ing_madrid 0.0 (2)
Repita (3)
Pantalla_Menu (4)
Caso OPCION (5)
1: Islas (6)
2: México (7)
3: Madrid (8)
4: Reporte (9)
Sino: nulo (10) fin caso (11) hasta que OPCION = 5 (12) Final (13)
Algoritmo 6.6b Comentarios por Línea:
Línea (1): Inicialización de los contadores de paquetes vendidos, estos se deben colocar
antes de entrar a la repetición (¿Por qué?)
Línea (2): Inicialización de los acumuladores de ingresos, como ya hemos dicho antes,
estos serán de tipo real o float, así que colocaremos punto decimal 0.0
Línea (9): Se agregó la invocación al subalgoritmo REPORTE
Línea (12): Ahora que tenemos la opcion 4. REPORTE, el Rango del Bloque Repita se
estará realizando repetitivamente ahora hasta que la OPCION = 5
Ahora se modificará el subalgoritmo ISLAS, lo que implica preguntas al usuario,
comparaciones e incrementos en los acumuladores y contadores.
Inicio (Islas)
Limpia_Pantalla escriba “ Paquete: Islas de la Bahía”
______________________________________________________________________ 247
escriba costo 2500 -- Costo por 2 personas
escriba “Cantidad de personas:”
lea N_per si N_per > 2 -- El paquete ya incluye 2 personas entonces
Costo costo + (N_per-2) * 1500.00 -- Acumula Fin si
escriba “Desean ir esquí acuático S/N? ”
lea Resp
si Resp = ‘S’ o Resp= ‘s’ -- Cubre la posibilidad de mayúsculas y minúsculas
entonces
lea Pesq
costo costo + pesq * 300 -- Acumula
fin si -- si no van a esquí el costo sigue igual no se incrementa
impto costo * 0.10 -- Usa otra variable pues impto se imprimirá
Total costo + impto
escriba “Costo base para 2 personas Lps. 2,500.00”
escriba “Subtotal “, costo
escriba “Impuesto “, impto Línea (22)
escriba “ GRAN TOTAL “, Total Línea (23)
P_islas P_islas + 1 --Se cuenta el paquete
Ing_islas Ing_islas + total --Acumula esta venta
escriba “Teclee <<Enter>> para continuar”
lea Final Subalgoritmo 6.6.c Algunas de las líneas agregadas están en negritas, conteniendo comentarios pertinentes. Se
puede observar que los incrementos de acumuladores y contadores se realizan en el cuerpo
de este subalgoritmo, ya que las inicializaciones se hicieron en el algoritmo principal, de
igual manera se modificarán los subalgoritmos Mexico o Madrid y para terminar se
detallará el subalgoritmo REPORTE
______________________________________________________________________ 248
Inicio (Reporte) Escriba “Paquetes vendidos a Islas de la Bahia”
Escriba P_islas
Escriba “Paquetes vendidos a Islas de la Bahia”
Escriba P_Mex
Escriba “Paquetes vendidos a Islas de la Bahia”
Escriba P_Madrid
Escriba “Ingresos por venta de paquetes a Islas de la Bahia”
Escriba Ing_Islas
Escriba “Ingresos por venta de paquetes a Mexico”
Escriba Ing_Mex
Escriba “Ingresos por venta de paquetes a Madrid” Escriba Ing_Madrid
final Algoritmo 6.6d
Ejemplo 6.7 (Menús, Agencia Turismo Islas, reporte al final) Modificar el Ejemplo anterior 6.6 mostrando ahora el REPORTE al final del día Solución En ocasiones el REPORTE debe mostrarse al salir del menú, en cuyo caso los
subalgoritmos Islas, Mexico, Madrid quedan igual los cambios ocurren en:
• Pantalla_menu pues ya no se presenta la opcion REPORTE (queda el menú
original) y en el …
• Programa principal, ya que REPORTE no esta en el Bloque caso, sino al finalizar el
Repita Hasta, obtenemos lo siguiente:
Inicio P_islas 0, P_mex 0, P_madrid 0 (1)
Ing_islas 0.0, Ing_mex 0.0, Ing_madrid 0.0 (2)
Repita (3)
Pantalla_Menu (4)
Caso OPCION (5)
1: Islas (6)
2: México (7)
______________________________________________________________________ 249
3: Madrid (8)
Sino: nulo (9)
fin caso (10)
hasta que OPCION = 4 (11)
Reporte (12)
Final (13)
Algoritmo 6.7a
A su vez un subalgoritmo puede invocar a otro subalgoritmo. Por ejemplo para todos los
paquetes del ejemplo anterior puede existir la opción de pagar al contado o al crédito en
cuyo caso el total a pagar se incrementa en un 6%.
Los cambios a introducir involucran definir el Subalgoritmo “Forma _de_pago”, que se
escribe así:
Inicio (Forma_de_pago)
Escriba “Forma de pago 1- contado 2 Tarjeta de credito ?”
Lea Resp
Si resp = 1 Entonces Total total + total*0.06 -- acumulamos en la misma variable
Fin si --para imprimirla en Islas Final
Algoritmo 6.7b
Este Subalgoritmo sería invocado entre las Líneas (22) y (23) del algoritmo 6.6c (pág.247) : :
escriba “Sub. total “, costo
escriba “Impuesto “, impto Línea (22)
Forma_de_pago -- Invocación del subalgoritmo
escriba “ GRAN TOTAL “, Total Línea (23)
P_islas P_islas + 1 --Contamos el paquete
Ing_islas Ing_islas + total --Acumulamos esta venta
escriba “Teclee <<Enter>> para continuar”
lea
Final (islas) Algoritmo (parte) 6.7c
______________________________________________________________________ 250
Este subalgoritmo “”Forma_de_pago” deberá colocarse antes del que lo invoca o sea Islas. Se asignarán ejercicios adicionales para esta sección, hasta después de haber obtenido
familiaridad con una útil herramienta llamada Diagrama Jerárquico de Procedimientos, que
se presenta a continuación:
6.3. DIAGRAMA JERARQUICO DE PROCEDIMIENTOS (DJP) Cuando se van a utilizar subalgoritmos o procedimientos, el hecho de colocarlos en
determinado orden puede crear confusión, se hace útil entonces emplear un…
Los Diagramas Jerárquicos no se deben confundir con los Diagramas de Flujo, se ilustrará
su uso, aplicándolos a los ejemplos realizados con anterioridad.
Ejemplo 6.8 (DJP, Menús, calculadora) Elaborar el Diagrama Jerárquico de Procedimientos (DJP) del Ejemplo 6.2.1 (Calculadora)
Principal
Pantalla_Menu Sumar Restar
Observación 6.3.1 El Diagrama Jerárquico de procedimiento ilustra los
subalgoritmos utilizados y la relación (jerarquíca) de invocación por el programa o
subalgoritmo principal o por otros subalgoritmos, además es una gran ayuda para
colocarlos físicamente en el orden correcto, es decir:. de abajo hacia arriba y de
izquierda a derecha
Diagrama Jerárquico procedimientos (DJP), este consiste en colocar los nombres de los
procedimientos (en rectángulos) en la jerarquía de su invocación (mediante líneas
rectas), lo cual da una idea del orden físico en que irán colocados éstos en el algoritmo
o programa principal.
______________________________________________________________________ 251
Se puede observar que el programa principal invoca a estos tres subalgoritmos, y aunque lo
haga de manera repetitiva, solamente se dibujarán una vez.
El orden físico en que se coloca los subalgoritmos será de abajo hacia arriba y de izquierda
a derecha, en la forma en que están apuntando las flechas
• Subalgoritmo Pantalla_menu
• Subalgoritmo Sumar
• Subalgoritmo Restar
• Algoritmo o procedimiento Principal
Además un principio general es que el subalgoritmo llamado debe estar colocado arriba del
que lo invoca.
Ejemplo 6.9 (DJP, Menús, Agencia Turismo Islas) Elaborar el Diagrama Jerárquico de Procedimientos (DJP) del Ejemplo 6.6 (Agencia de
turismo)
La idea de las invocaciones la tenemos en el algoritmo 6.6b (pág. 246)el Principal
Luego el orden es:
• Subalgoritmo Pantalla_Menu
• Subalgoritmo Islas
• Subalgoritmo Mexico
• Subalgoritmo Madrid
• Subalgoritmo Reporte
• Algoritmo principal o programa principal
Principal
Pantalla_Menu Islas Madrid Mexico Reportes
______________________________________________________________________ 252
Ejemplo 6.10 (DJP, Menús, Agencia Turismo Islas, Reporte, Forma_pago) Elaborar el Diagrama Jerárquico de Procedimientos (DJP) del Ejemplo 6.7 (Agencia de
turismo, con REPORTE y otro subalgoritmo Forma_de_pago) e indicar el orden de los
subalgoritmos
Luego el orden es:
• Subalgoritmo Forma_de_pago
• Subalgoritmo Pantalla_Menu
• Subalgoritmo Islas
• Subalgoritmo Mexico
• Subalgoritmo Madrid
• Subalgoritmo Reporte
• Algoritmo principal o programa principal
Observación: el subalgoritmo Forma_de_pago, solamente se coloca una vez, a pesar de que
es invocado o llamado 3 veces, además observa que debe ir antes de los subalgoritmos que
lo llaman.
Ejemplo 6.11 (DJP, Menús, Agencia Turismo Biosfera, mas subalgoritmos) La Agencia de turismo “Los Viajeros”, realiza excursiones turísticas, desea un seudocódigo
para determinar cuanto tiene que pagar cada cliente. Las excursiones que se ofrecen son las
siguientes:
Principal
Pantalla_Menu Islas Madrid Mexico Reportes
Forma_de_pago Forma_de_pago Forma_de_pago
______________________________________________________________________ 253
Todas las excursiones incluyen transporte y hospedaje.
En caso que el grupo incluya más de 3 personas, el precio por excursión se
incrementara en L. 1000,00 para el tipo 1 y 2 y en L. 1400.00 para el tipo 3.
Si el grupo así lo desea para solicitar que se le incluya un plan de comida el cual tiene
un costo de L. 100.00 diarios por persona para los tipo 1 y 3, L. 150.00 para el tipo 2.
El seudocódigo deberá calcular el ingreso según el tipo de excursión, ingreso total de
la empresa.
Nota: Diseñar el DJP a utilizar
Solución
Se dará una solución parcial a este ejercicio, el algoritmo principal tendrá la misma forma
Típica que involucra un Repita hasta y un Bloque caso.
Se necesitará un subalgoritmo para la Pantalla_Menu que llamaremos ahora P_M y
subalgoritmos para cada uno de los Paquetes que llamaremos: BAHIA, COPAN, BIOS. Por
otro lado vemos que en todos tenemos costos por personas extras y por comida, así que
recurriremos a los procedimientos P_EXTRA y COMIDA. Además nos auxiliaremos del
DJP
TIPO DESCRIPCION Precio X Grupo de 3 personas
1 ISLAS DE LA BAHIA L. 5000.00
2 RUINAS DE COPAN L. 7000.00
3 BIOSFERA DEL RIO PLATANO L. 6000.00
Principal
P_M Bahia Bios Copan
P_extra Comida Comida Comida P_extra P_extra
______________________________________________________________________ 254
Se puede ver que, cada Paquete turístico está llamando a los mismos dos subalgoritmos
P_extra y Comida, estos deben diseñarse de tal manera que abarquen las variantes de todos
los Paquetes, ejemplificando esto con el paquete Copan se tiene lo siguiente:
Inicio (Copan)
Limpia_Pantalla
costo 7000 --Costo por 3 personas
P_extra -- Invoca dos subalgoritmos
Comida
escriba “Total a pagar Lps” , Costo
Ing_copan Ing_copan + costo --Acumula esta venta
escriba “Teclee <<Enter>> para continuar”
lea
Final
Similarmente para el subalgoritmo Bahia
Inicio (Bahia)
Limpia_Pantalla
costo 5000 -- Costo por 3 personas
P_extra -- Invoca dos subalgoritmos
Comida
escriba “Total a pagar Lps” , Costo
Ing_bahia Ing_bahia + costo --Acumula esta venta
escriba “Teclee <<Enter>> para continuar”
lea
Final
Queda al lector el diseño del subalgoritmo Bios
¿Como elaborar los procedimientos P_ext y Comida para que sean útiles para todos los
paquetes?…se usará un Bloque Caso de la OPCION seleccionada para asignar los distintos
precios por persona extra que se tienen y de igual manera para los distintos planes de
Comida
______________________________________________________________________ 255
Inicio (P_ext)
Escriba “Ingrese el numero de personas en la excursión”
Lea N_per
Si N_per >3
Entonces
Caso OPCION
1, 2 : Costo costo + (N_per-3) * 1000
3 : costo costo + (N_per-3) * 1400
Sino nulo
Fin caso
Fin si
Final
Inicio (Comida)
Escriba “Desea tomar el plan de comidas (S/N) ? ”
Lea Resp
Si Resp = ‘S’ o Resp = ‘s’
entonces
Escriba “Numero de dias”
Lea dias
Escriba “Numero de personas”
Lea per_comi
Caso OPCION
1, 3 : Costo costo + Per_comi * dias * 100
2 : costo costo + Per_comi * dias * 150
Sino nulo Fin caso
Fin si Final Otra manera de hacerlo sería ir calculando costos por rubro para después sumar todos
estos en el algoritmo del paquete respectivo ejemplo:
______________________________________________________________________ 256
Inicio (P_ext)
Escriba “Ingrese el numero de personas en la excursión”
Lea N_per
Si N_per >3
Entonces
Caso opcion
1, 2 : Precio_Ext 1000
3 : Precio_Ext 1400
Sino nulo
Fin caso
Costo_Ext (N_per-3) * Precio_Ext
Sino Costo_Ext 0
Fin si Final Inicio (Comida)
Escriba “Desea tomar el plan de comidas (S/N) ? ” Lea Resp
Si Resp = ‘S’ o Resp = ‘s’
entonces
Escriba “Numero de dias”
Lea dias
Escriba “Numero de personas”
Lea Per_comi
Caso opcion
1, 3 : precio_comida 100 2 : precio_comida 150 Sino nulo
Fin caso
Costo_comida Per_comi * dias * precio_comida
Sino Costo_comida 0
Fin si Final En el paquete turístico respectivo se calcula el costo así:
______________________________________________________________________ 257
Costo 5000 + Costo_Ext + Costo_comida ó
Costo 7000 + Costo_Ext + Costo_comida etc.
Por otro lado el subalgoritmo REPORTE es semejante al diseñado en el Ejemplo 6.6
mostrado en el Algoritmo 6.6d (pág. 248). Para finalizar se muestra el algoritmo principal:
Inicio Ing_bahia 0.0, Ing_copan 0.0, Ing_bios 0.0 (1)
Repita (2) Pantalla_Menu (3)
Caso OPCION (4) 1: Bahia (5) 2: Copan (6) 3: Bios (7) Sino: nulo (8) fin caso (9) hasta que OPCION = 4 (10)
Reporte (11) Final (12)
Recapitulando y considerando el DJP diseñado al inicio de este ejemplo, el orden de los
subalgoritmos es:
• Subalgoritmo P_extra
• Subalgoritmo Comida
• Subalgoritmo P_M
• Subalgoritmo Bahia
• Subalgoritmo Copan
• Subalgoritmo Bios
• Subalgoritmo Reporte
• Algoritmo principal o programa principal.
EJERCICIOS 6.3
1.- Diseñar el DJQ del Algoritmo 6.1.1.b
2.- Diseñar el DJP de los Ejercicios 6.1 inciso 2 y 3, pág.233.
3.- Ejercicios selectos del Apéndice C, incisos del 14 al 16, pág.300.
4.- Ejercicios selectos del Apéndice C, incisos del 17 al 20, pág.300-302.
5.- Ejercicios selectos del Apéndice C, incisos del 21 al 23, pág. 302-304.
______________________________________________________________________ 258
6.4 Arreglos Unidimensionados
Como se estudiará más adelante, los arreglos facilitan obtener datos de la memoria y el
acceso eficiente a ellos. Los arreglos son útiles cuando una lista de datos se debe procesar
más de una vez.
Todas las variables que se han consideradas han sido de tipo simple, es decir que solo
consiste de una casilla de memoria, en cambio para una variable de tipo estructurado se
tiene una colección de casillas de memoria, en las cuales el orden de los elementos es
importante:
Para distinguir las distintas posiciones del arreglo se “indexan”, es decir, a la variable X se
le coloca un Índice o número entero entre paréntesis
X(1) X(2) X(3) X(4)
Arreglo X
Observación 6.4a Las aplicaciones de los arreglos son diversas, una de éstas se
estudiarán más adelante, en el Ejemplo 6.16 (pág. 268) y es cuando una lista de valores
leídos Z son procesados, y posteriormente se necesitan para otra aplicación. Si se usa la
misma variable Z para todas las lecturas, solamente se habrá conservado el último valor
de la misma, en cambio si Z es un arreglo se conservarán en casillas de memoria
diferentes los distintos valores leídos, pudiéndose utilizar éstos nuevamente.
Un arreglo es un conjunto de variables con el mismo nombre y el mismo tipo de dato.
También un arreglo es una estructura conveniente para almacenar elementos datos
continuos, homogéneos y ordenados; continuos porque físicamente uno está próximo al
otro, homogéneos pues los datos son del mismo tupo y ordenados porque se accesa cada
dato a través de un índice.
______________________________________________________________________ 259
Se pueden realizar las distintas operaciones, esto se puede confirmar haciendo la
siguiente…
Prueba de escritorio X (1) 10 I 2
X(i) 2 * X(1)
X(i+1) X(1) + X(2)
X(4) 5 * X(i – 1)
Lea X(3) Dato 6
Escriba X(I +1)
Memoria: Salida
O en forma equivalente para el arreglo X X(1) 10
X(2) 20
X(3) 30 6
X(4) 50
Haciendo una analogía entre un arreglo y un edificio de apartamentos. El nombre del
arreglo es el nombre del edificio y los elementos son los apartamentos, cada uno tiene un
Número índice, que corresponde al de un apartamento, así Riz (4) corresponderá el
apartamento 4. Si se tratara de las contribuciones de 3 socios, contribución (2), es la
contribución del segundo socio.
X(1) X(2) X(3) X(4) I 10
20 30
6 50 2
6
Observación 6.4b Se tienen dos ambientes de memoria,
uno son las casilla de memoria del o los arreglos, y otro la
casilla de memoria usual
______________________________________________________________________ 260
EJERCICIOS 6.4 Dado el siguiente arreglo B: Memoria
B(1) B(2) B(3) B(4) B(5) B(6)
8
10 -3 2 4 0
Hacer la prueba de escritorio de cada uno de los siguientes incisos: a.) escriba B(6) b) I 25
X B(5) X B (i-23) escriba X escriba X
c) X 3 d) I 1
Y 8 Y B(i) B(Y-3) x + y B(y-4) 3 escriba B(3) escriba B(3) escriba B(5)
6.4.1 Operaciones con Arreglos Para la lectura de 3 elementos del arreglo X (arreglo de longitud 3), inicialmente podríamos
pensar en el siguiente algoritmo
Inicio
Lea X(1)
Lea X(2)
Lea X(3)
Final
… pero si el arreglo tiene muchos elemento este método no resulta práctico, recordando
entonces al Bloque Para, se mostró como éste utiliza un índice que se incrementa de uno
en uno y en los ejemplos desarrollados en el Capítulo 4 se vio que la secuencia típica del
índice general es: 1, 2, 3, 4, 5 . A continuación se ilustrará con un ejemplo, como se
combinan los Arreglos con el Bloque Para.
______________________________________________________________________ 261
Ejemplo 6.12 (Arreglos, Leer un arreglo de longitud N)
Diseñar un algoritmo para leer el arreglo A de longitud N
Solución:
ESTRATEGIA
(N+1, números)
Salida Ninguna Entrada N
Arreglo A
• Se comenzará leyendo la longitud del arreglo.
• Se utilizará un Bloque Para, que proporcionará los índices del arreglo.
Inicio
Lea N
Para i 1, N haga
Lea A(i)
Fin para
Final
PRUEBA DE ESCRITORIO
Datos: 5, 4 , 8, -4, 0, 7
Memoria: Salida NO hay
Arreglo X
Vale decir que se pueden usar variantes para la representación en la Memoria de los
elementos de un Arreglo como ser:
N i X(1) X(2) X(3) X(4) X(5) 4 8
-4 0 7 5 1 2 3 4 5 6
______________________________________________________________________ 262
a)
b) O en forma equivalente para el arreglo X X
En esta variante el Nombre del arreglo se escribe
arriba, en la esquina superior izquierda y en la
primera fila solamente se colocan los índices
c) Otra manera es Vertical, d) Y finalmente solo el Nombre y los índices escribiendo Variable e índices X
X(1) 4 1 4
X(2) 8 2 8
X(3) -4 3 -4
X(4) 0 4 0
X(5) 7 5 7
Ejemplo 6.13 (Arreglos, manipulación, lectura, cálculos, escritura) Diseñar un algoritmo en el cual se lea un arreglo A de longitud 4, se calcule el promedio
Prom de sus elementos, imprima el arreglo original y el promedio Prom. Se solicita que la
lectura y escritura del arreglo sea amistosa Solución
ESTRATEGIA (4 números) (5 números)
Entrada Arreglo A Salida Arreglo A
Prom
X(1) X(2) X(3) X(4) X(5)
4 8
-4 0 7
1 2 3 4 5
4 8
-4 0 7
______________________________________________________________________ 263
• Para calcular el promedio, es necesario acumular la suma de los elementos del
arreglo, comenzaremos entonces inicializando en cero un acumulador S
• Al finalizar de acumular la suma de los elementos S, se calculará Prom
• Utilizaremos un Bloque Para, el que nos proporcionará los índices del arreglo
• A esta altura del curso, muy probablemente ya has visto los Fundamento de un
Lenguaje de Programación, así introduciremos mensajes amistosos en lectura e
impresión de los elementos del arreglo, entonces diseñaremos la impresión de los
letreros:
• A( 1 ) =___ lectura ó A( 1 ) = 10 escritura
Observe que lo que está en Negrillas son literales, lo demás son variables
Inicio
S 0
Para i 1, 4 haga
escriba “A( ” Al usuario se le pedirá la información así: escriba i A( 1 ) =__ se teclee el valor(lea)
escriba “ ) = ” lea A(i)
S s + A(i)
Fin para
Prom S / 4
Escriba “El arreglo leido es: ”
Para i 1, 4 haga
escriba “A( ” El usuario mirará la información así: escriba i A( 1 ) = 10 se escribe el valor
escriba “ ) = ”
escriba A(i)
fin para
escriba “El promedio de los elementos es: ”
escriba Prom
Final
______________________________________________________________________ 264
A continuación se muestra la prueba de escritorio de este algoritmo con una salvedad: en
las salidas no escribiremos los rótulos amistoso diseñados previamente, pues da lugar a
confusión
PRUEBA DE ESCRITORIO
Datos: 5, 4 , 7, -4,
Memoria: Salida
Arreglo X
Ejemplo 6.14 (Arreglos, elemento mayor y su posición)
Problema: En el arreglo Sueldo se guarda el sueldo de N empleados, imprimir el mayor
sueldo y el codigo del empleado (que coincide con el índice) con el mayor sueldo.
(Consultar apéndice E, Ejemplo elemento mayor de una lista de números)
ESTRATEGIA (N + 1 números) (2 números)
Entrada N (longitud) Salida Mayor_sueldo
Arreglo Sueldo codigo
Suponiendo que el Arreglo es de longitud 4 se tiene lo siguiente:
Sueldo
1 6000
2 9000
3 10000
4 7000
X(1) 5
X(2) 4
X(3) 7
X(4) - 5
S i Prom 0
5
9
17
12
1 1
2 2
3 3
4 4
5 5
3 El promedio de los elementos es: 3
Se puede ver que el mayor sueldo es 10000 y
corresponde al empleado con índice o código 3, se
continuará con la estrategia para obtener esta respuesta
con un algoritmo apropiado:
______________________________________________________________________ 265
• Se lee todo el arreglo, como un hábito, si están en memoria los elementos, se
pueden hacer varias y diversas operaciones. En una programación modular es
preferible tener separadas las operaciones, para poder después reutilizar dichos
“módulos”
• Para encontrar el sueldo mayor, se comienza suponiendo que el primer elemento
Sueldo(1) es el mayor_sueldo con índice o codigo = 1)
• Desde el segundo elemento en adelante, se recorre el resto del arreglo con la ayuda
de un Bloque Para, y se va comparando el supuesto mayor_sueldo con el resto de
los elementos, si un elemento es mayor que el supuesto mayor, entonces se hacen
las reasignaciones correspondientes del nuevo mayor y la posición de este.
Inicio
Lea N
Para i 1, N haga
escriba “Sueldo empleado ” Al usuario se le pedirá la información así: escriba i Sueldo empleado 1 = ___
escriba “ = ” lea sueldo(i)
Fin para
Mayor_sueldo sueldo(1)
Codigo 1
Para i 2, N haga -- Se comparará del segundo elemento en adelante
Si Sueldo (i) > Mayor_sueldo
Entonces
Mayor_sueldo Sueldo(i)
Codigo i Fin si fin para
escriba “El Mayor sueldo es: Lps ”
escriba Mayor_sueldo
escriba “de el empleado con codigo : ”
escriba Codigo
Final
______________________________________________________________________ 266
PRUEBA DE ESCRITORIO Datos: 4, 6000, 9000, 10000, 7000
Memoria Salida Sueldo
N Mayor_sueldo codigo i 1 6000
2 9000
3 10000
4 6000
9000
10000
1
2
3
1 2 2 3 3 4 4 5 5
4 7000
6.4.2 Arreglos Paralelos Se entenderá por arreglos paralelos aquellos que tienen la misma longitud y tipos de dato y
que en el contexto en que estén, los elementos de estos que posean el mismo índice están
relacionados al mismo item.
Ejemplo 6.15 (Arreglos paralelos, Pagos quincenales, planilla) El sistema de pago para los N empleados de la empresa “PAGABIEN” es quincenal, se
guardan los pagos de la Primer quincena y de la segunda quincena en dos 2 arreglos
llamados PQ y SQ respectivamente. Diseñar un programa que lea los dos arreglos, se
trabaje con ambos arreglos en forma paralela, y se calcule el sueldo MENSUAL
devengado por cada uno de los empleados, así como también el total de la planilla
ESTRATEGIA (2*N + 1 números)
N (longitud) (N +1 números)
Entrada Arreglo PQ Salida Arreglo MENSUAL
Arreglo SQ Planilla
• Suponiendo que por conveniencia la longitud N de todos los arreglos es 3 se
plantea lo siguiente: El elemento i-ésimo del arreglo mensual resulta de sumar las
quincenas respectivas
El Mayor sueldo es Lps 10000 de el empleado con codigo: 3
______________________________________________________________________ 267
PQ SQ MENSUAL
1 3000 1 1000 1 4000
2 4000 + 2 2000 = 2 6000
3 5000 3 3000 3 8000 Planilla: 18000 Para calcular MENSUAL(1) PQ(1) + SQ(1) 4000 = 3000 + 1000
MENSUAL(2) PQ(2) + SQ(2) 6000 = 4000 + 2000
MENSUAL(3) PQ(3) + SQ(3) 8000 = 5000 + 3000
Observa que en cada fórmula el índice es el mismo, así generalizando la fórmula del
i-ésimo elemento de Mensual es:
MENSUAL(i) PQ(i) + SQ(i) Esta es importante ya que es la que se escribirá en el Rango del Bloque Para
• La planilla se calcula sumando todos los elementos del arreglo MENSUAL, ésta
variable es entonces un Acumulador
• Los arreglos PQ y SQ se pueden leer de dos maneras:
a) Verticalmente: es decir leer todos los sueldos de la Primera Quincena y
posteriormente los de la Segunda ó se pueden leer en forma …
b) Paralela: es decir para cada empleado se pueden leer simultáneamente sus
dos quincenas, en este ejemplo, se usará esta última.
Inicio
Lea N
Planilla 0.0
Para i 1, N haga
escriba “Empleado ” Para el Empleado 1 se leerán las 2 quincenas
escriba i Empleado 2
lea PQ(i) _
lea SQ(i) _
MENSUAL(i) PQ(i) + SQ(i)
Planilla Planilla + mensual (I)
Fin para
3000+1000=4000
______________________________________________________________________ 268
Escriba “Empleado Mensualidad”
Para i 1,n haga
Escriba i, “ ”, Mensual (i)
Fin para
Escriba “Planilla Lps. ”
Escriba planilla
Final
El lector debe elaborar la prueba de escritorio con los siguientes datos:
PRUEBA DE ESCRITORIO Datos: 3, 3000, 1000, 4000, 2000, 5000, 3000
Memoria
PQ SQ MENSUAL N Planilla I
1 1 1
2 2 2
3 3 3
Salida
El lector deberá encontrar el empleado que obtuvo el menor sueldo y cual es su
Número de empleado (que coincide con el índice), ver Ejemplo 6.14
Ejemplo 6.16 (Arreglos Paralelos. Porcentajes de aportación) Una sociedad anónima tiene m socios. Cada socio ha hecho una aportación de C lempiras.
¿Cuál es el porcentaje de participación de cada socio, PORC?
Empleado Mensualidad
______________________________________________________________________ 269
ESTRATEGIA
(M + 1 números) (M números)
Entrada N (No. De Socios) Salida Arreglo Porc
Arreglo C (no necesariamente como arreglo)
• Para calcular el porcentaje de aportación se debe dividir cada C(i) entre el total de
las aportaciones, este total se obtiene sumando todos los elementos del arreglo, de
tal manera que primero se debe calcular este total, para luego proceder a dividir
cada C(i) entre total. Vemos aquí la utilidad de conservar el valor de las
aportaciones, pues el arreglo C se necesita utilizar en dos momentos, primero para
calcular la suma y posteriormente para calcular el porcentaje
• Para determinar el elemento i-ésimo del arreglo Porc, usaremos un ejemplo de
escritorio
C Porc
1 400 1
2 1000 2
3 600 3
Total: 2000 Los Porcentajes de aportación son:
Porc(1) (400 / 2000) * 100=20 % ó Porc (1) C(1) / total *100
Porc(2) (1000/ 2000) * 100=50 % Porc (2) C(2) / total *100
Porc(3) (600 / 2000) * 100=30 % Porc (3) C(3) / total *100
Observa que para cada aportante el índice de Porc es el mismo que el de C, entonces la
fórmula del i-ésimo término será entonces: Porc(i) C(i) / total *100
inicio
Total 0 lea M para i 1, M haga
lea C (i) Total Total + C (i) fin para
______________________________________________________________________ 270
escriba “Socio Porcentaje de aportación”
para j 1, m haga
Porc (j) C (j) / Total *100
escriba Porc(j)
fin para final
Se deja al lector realizar la prueba de escritorio con los siguientes datos: PRUEBA DE ESCRITORIO Datos 3, 400, 1000, 600 C Porc i Total j
1 400 1
2 1000 2
3 600 3
Salida
En ocasiones el índice de los elementos de un arreglo puede ser un contador, a continuación
un ejemplo para ilustrar estos casos.
Ejemplo 6.17 (Arreglos, Contadores como índices de un Arreglo) Se dan a leer un arreglo E de números enteros positivos de longitud 5, se desea formar el
arreglo PAR con los números pares que contenga éste.
ESTRATEGIA (5 números) Salida Arreglo PAR Entrada Arreglo E
Socio Porcentaje de aportacion
______________________________________________________________________ 271
La longitud del Arreglo E es conocida, la del arreglo PAR no. Se recomienda realizar un
ejemplo de escritorio ya que esto siempre es de utilidad.
E PAR 1 3 1 4
2 4 2 6
3 6 3 10
4 7
5 10
• Como se indicó en la Observación 6.4.2 se utilizará la instrucción rem
Si E(i) rem 2 = 0 el número será par y lo contaremos como tal, nuestra variable CP será
el contador de números pares
• Para genera los índices requeridos para el arreglo PAR utilizaremos el contador CP, de
tal manera que no podremos saber de antemano la longitud de este arreglo.
Inicio Cp 0
Para i 1, 5 haga
si E(i) rem 2 = 0
entonces
Cp Cp +1
Par(cp) E(i)
Fin si
Fin para
Escriba “Arreglo de numeros pares”
Para k 1, cp haga
Escriba Par(k)
Fin para
Final
Se deja al lector realizar la prueba de escritorio con los siguientes datos
Observación 6.4.2: Un número es par cuando al dividirlo entre 2 el residuo es cero, si trabajamos en aritmética entera, todos los lenguajes de programación tienen “instrucciones”(ejemplo rem) que nos devuelven los residuos de divisiones así: 19 rem 2 devuelve el residuo de dividir 19 entre 2: 1
4 rem 2 la división es exacta el residuo es 0, por tanto es par.
______________________________________________________________________ 272
PRUEBA DE ESCRITORIO
Datos 3, 4, 6, 7, 10
Memoria: Salida:
6.4.3 Arreglos y subalgoritmos En varias ocasiones se pueden utilizar subalgoritmos en operaciones que requieren el uso
de arreglos, a continuación se presentan maneras diversas de realizar dichas operaciones
mediante el desarrollo de un ejercicio de tres maneras diferentes.
. Ejemplo 6.18 (Arreglos paralelos, Subalgoritmos i-ésimos, Pagos quincenales, planilla) Ver ejemplo 6.15, pág.266-267) El sistema de pago para los N empleados de la empresa “PAGABIEN” es quincenal, se
guardan los pagos de la Primer quincena y de la segunda quincena en dos 2 arreglos
llamados PQ y SQ respectivamente. Diseñar un programa que lea los dos arreglos, se
trabaje con ambos arreglos en forma paralela, y se calcule el sueldo MENSUAL
devengado por cada uno de los empleados, así como también el total de la planilla
Solución: El lector debe revisar detalladamente el desarrollo del EJEMPLO 6.15, solamente se harán
modificaciones que consistirán en dividir el programa en subalgoritmos.
• Los subalgoritmos a utilizar serán los siguientes:
a) LECTURA Paralela de los elementos i-ésimos de los dos arreglos PQ y SQ.
b) MENSUALIDADES_PLANILLA: Cálculo de la mensualidad de cada empleado y
acumulación de ésta para totalizar la planilla.
c) REPORTE: Impresión de la mensualidad de cada empleado y de la planilla.
E PAR 1 3 1 4 Cp i k
2 4 2 6
3 6 3 10
4 7
5 10
______________________________________________________________________ 273
• Como es conocido el Número de empleados se utilizará el Bloque Para
• Los subalgoritmos LECTURA y MENSUALIDADES_PLANILLA se invocará en
el rango del Bloque Para, al finalizar éste, se invocara al subalgoritmo REPORTE,
pues se requiere haber calculado y acumulado todas las mensualidades de los
empleados.
• Los subalgoritmos se desarrollarán siguiendo la misma lógica mostrada en el Ejemplo 15. Inicio (Lectura)
escriba “Empleado ”
escriba i
lea PQ(i)
lea SQ(i) final
Inicio (Mensualidad_planilla)
MENSUAL(i) PQ(i) + SQ(i)
Planilla Planilla + mensual (I)
Final Inicio(Reporte)
Escriba “Empleado Mensualidad”
Para i 1,n haga
Escriba i, “ ”,Mensual (i)
Fin para
Escriba “Planilla Lps. ”
Escriba planilla
Final Inicio (Principal)
Lea N
Planilla 0.0
Para i 1, N haga
LECTURA
MENSUALIDAD_PLANILLA
Fin para REPORTE final
______________________________________________________________________ 274
Ejemplo 6.19 (Arreglos paralelos, Subalgoritmos completos, Pagos quincenales, planilla) Variante de los Ejemplos 6.15 (pág.267) y 6.18(pág.273) El sistema de pago para los N empleados de la empresa “PAGABIEN” es quincenal, se
guardan los pagos de la Primer quincena y de la segunda quincena en dos 2 arreglos
llamados PQ y SQ respectivamente. Diseñar un programa que lea los dos arreglos, se
trabaje con ambos arreglos en forma paralela, y se calcule el sueldo MENSUAL
devengado por cada uno de los empleados, así como también el total de la planilla.
• Además se deberá indicar el mayor sueldo y a que empleado corresponde,
considerando que el codigo de éste coincide con el índice respectivo.
• Se solicita que cada subalgoritmo utilizado realice una tarea específica completa, y
que sea un subalgoritmo completo es decir que procese a los N empleados.
Solución:
• Se le solicita al lector el estudio detallado de los ejemplos anteriormente citados.
• Se aplicarán algunas variantes, aprovechando el hecho de que los datos leídos de las
quincenas quedan almacenados en la memoria para posteriores aplicaciones. .Los subalgoritmos a utilizar serán los siguientes:
a) LECTURA: Paralela de dos arreglos PQ y SQ.
b) MENSUALIDADES_PLANILLA: Cálculo e impresión de todas las mensualidades y de
la planilla.
c) MAYOR: Determinación del mayor sueldo y del empleado a quien corresponde.
Considerando lo anterior, el algoritmo principal propuesto es: Inicio (Principal)
LECTURA
MENSUALIDADES_PLANILLA:
MAYOR
Final
A continuación se presenta la definición de cada uno de los subalgoritmos a utilizar:
______________________________________________________________________ 275
Inicio (Lectura)
Lea N_empleados
Para i 1, N haga
escriba “Empleado ”
escriba i
lea PQ(i)
lea SQ(i) fin para
final Inicio(Reporte)
Escriba “Empleado Mensualidad”
Para i 1,n haga
MENSUAL(i) PQ(i) + SQ(i)
Planilla Planilla + mensual (I)
Escriba i, “ ”,Mensual (i)
Fin para
Escriba “Planilla Lps. ”
Escriba planilla
Final
Inicio (Mayor)
Mayor mensual(1)
Posición 1
Para i 2, N haga
Si mensual(i) > mayor
Entonces Mayor x(i) Posición i
Finsi
Fin para
Escriba“El mayor sueldo es “, mayor
Escriba“y correponde al empleado No. : “, posicion
final
En el Ejemplo 6.14 (pág 265)
se utiliza y explica este
algoritmo.
______________________________________________________________________ 276
Se deber recordar que después de definir cada subalgoritmo, se escribe el programa
principal (ya previamente diseñado), desde el cual se realizarán las invocaciones
respectivas.
Ejemplo 6.20 (Arreglos paralelos, Menus, Pagos quincenales, planilla) Variante de los Ejemplos 6.15 (pág. 267-268) y 6.19 (pág.274-275) El sistema de pago para los N empleados de la empresa “PAGABIEN” es quincenal, se
guardan los pagos de la Primer quincena y de la segunda quincena en dos 2 arreglos
llamados PQ y SQ respectivamente. Diseñar un programa que lea los dos arreglos, se
trabaje con ambos arreglos en forma paralela, y se calcule el sueldo MENSUAL
devengado por cada uno de los empleados, así como también el total de la planilla.
Además se deberá indicar el mayor sueldo y a que empleado corresponde, considerando
que el codigo de éste coincide con el índice respectivo.
• El problema deberá resolverse utilizando subalgoritmos y MENUS.
• Se presentará el siguiente menú.
Figura Solución:
Se le solicita al lector el estudio detallado de los ejemplos anteriormente citados Ejemplo
6.15 (pág. 267-268) y 6.19 (pág.274-275), en el Ejemplo 6.19 (pág.274-275), ya se
diseñaron los subalgoritmos a utilizar, así que solamente se enlistarán.
Menu Principal
1. Mensualidades y planilla 2. Mayor sueldo y a quien corresponde 3. Terminar el programa
Teclee el número de su opción: __
______________________________________________________________________ 277
a) LECTURA Paralela de dos arreglos PQ y SQ.
b) MENSUALIDADES_PLANILLA: Cálculo e impresión de todas las
mensualidades y de la planilla.
c) MAYOR: Determinación del mayor sueldo y del
empleado a quien corresponde
Siempre con fines didácticos y de acuerdo a lo mostrado en la sección 6.2 de este libro, se
plantea el siguiente algoritmo:
Inicio (Principal)
LECTURA
Repita
Pantalla_Menu
Caso opcion
1: MENSUALIDADES_PLANILLA:
2: MAYOR
Sino : nulo
Fin caso
Hasta que opcion = 3
final
Solamente falta definir el subalgoritmo Pantalla_Menu de la siguiente manera:
Inicio (Pantalla_Menu)
Escriba “ Menu pricipal”
Escriba “1.- Mensualidades y planilla.”
Escriba “2.- Mayor sueldo y a quien corresponde.”
Escriba. “3.- Terminar el programa. ”
Escriba
Escriba. “Teclee su opcion: ”
Lea opcion
Final
______________________________________________________________________ 278
Este ejemplo tiene limitaciones, las lecturas se tienen que realizar antes de proceder a otras
opciones, además no es posible escoger la opción 2 sin antes .haber ejecutado la opción 1,
aun así se escogió este ejemplo con fines didácticos y considerando que se pueden realizar
validaciones del mismo.
EJERCICIOS 6.5 1.- Diseñar un algoritmo para la siguiente situación:
En la ferretería “Clavo de oro” cuentan con 10 artículos estrella de los cuales se
desea saber su inventario en Lps y el inventario total de la ferretería, para ello se
cuenta con la siguiente información:
COD Arreglo de codigos de los productos
UNIDADES Arreglo de Unidades por producto
PRECIO_U Arreglo de los precios unitarios por producto
INV_PROD Se deberá crear un arreglo de inventario por producto Lps
INVENTARIO Inventario total, este es un número
2.- Se tiene un arreglo de tamaño N cuyos elementos son ceros y unos. Elabore el
seudocódigo para que coloque los “ceros” primero, y los “unos” después.
3.- Ejercicios sobre Arreglos en el Apéndice D (pág.305-306) de este libro, incluyendo
el ejercicio No.16 pues se requieren subalgoritmos con Menús.
4.- Se necesita procesar las calificaciones de un grupo de N estudiantes para lo cual se
desea un programa que haga lo siguiente.
a. Utilice un subprograma "LECTUDATOS" para leer los nombres y los
promedios de los estudiantes en 2 arreglos paralelos.
b. Determine por medio de un subprograma cuales fueron los estudiantes con
mayor promedio y menor promedio respectivamente.
c. Imprima por medio del subprograma IMPRESION los nombres y promedios
de los estudiantes con excelencia académica (promedio mayor o igual que 90).
NOTA: Utilice menús y arreglos.
__________________________________________________________________
279
APENDICE A I. Escribir el Análisis y el desglose de los programas que resuelven los siguientes problemas.
Realice la Prueba de Escritorio respectiva.
ESTRUCTURAS SECUENCIALES
1. Escriba un programa que pida al usuario que introduzca dos números, que imprima la suma, el producto, la diferencia y el cociente de ambos números.
2. Escriba un programa que acepte como entrada el radio de un círculo e imprima su diámetro,
circunferencia y su área. Emplee el valor constante 3.14159 para π.
3. Escriba un programa para calcular la distancia entre dos puntos en el plano. Dados P( X1,Y1), Q(X2,Y2), la distancia entre P y Q es: Distancia = 22 )12()12( yyxx −+−
4. Escriba un programa que acepte como entrada el numero de horas trabajadas a la semana por un empleado, y el pago por hora. Debe calcular el salario bruto, la deducción de l RAP-FOSOVI consistente en el 1.5% del salario bruto, la deducción del sindicato que equivale a un 1% del sueldo bruto y el salario neto.
5. La Tierra no es una esfera; está ligeramente aplanada por los polos y es mas bien un
esferoide aplanado. La fórmula para su volumen es:
Volumen = ba 2
34π
Hacer un programa que acepte como entrada el valor de a y b y que calcule el volumen.
6. Un estudio empírico ha mostrado que la relación entre volumen y presión para vapor sobrecalentado es: Presión = 4.11000 −v donde v es el volumen. Hacer un programa para calcular la presión.
7. Hacer un programa donde se ingresan el largo y ancho en metros de un terreno rectangular, se calcula el área y el valor del terreno sabiendo que cada metro cuadrado vale Lps. 560.00
8. Dado el costo de un artículo vendido y la cantidad de dinero entregada por el cliente,
calcule e imprima el cambio que debe entregársele al mismo.
9. Leer el peso de un hombre (en libras) e imprimirlo en Kilogramos y en Gramos. Nota: 1 lb = 0.454 Kg. , 1 lb = 454 gr.
10. Los surtidores de una gasolinera registran lo que surten en galones, pero el precio de la gasolina está fijado en litros. Calcular e imprimir lo que hay que cobrarle al cliente.
11. Se emplean varios métodos para depreciar bienes de capital, uno de ellos es el método de
Balance Disminuido. El valor del artículo al final del año (n) es: Valor = nrvo )1( − donde vo es el valor inicial , r es la tasa de depreciación y n el año.
Haga un programa para calcular dicho valor ingresando vo, n y r.
12. Una persona desea determinar cuanto tiene que gastar en un viaje de cierta cantidad de kilómetros, considerando que su vehículo gasta un número dado de kilómetros/galón. El precio
__________________________________________________________________
280
de la gasolina es de L. 45.00. Se leerá el número de kilómetros a recorrer y el número de kilómetros que recorre el vehículo por galón. Nota: verificar que las “unidades” de sus fórmulas sean congruentes.
13. La oficina de admisiones de un instituto tecnológico, desea calcular cuanto tiene que pagar
un estudiante anualmente si el precio de la matrícula es de L. 400.00, el precio por cada asignatura es de L. 150.00, el costo por uso de laboratorio es de un 15% del total de costo por asignaturas. El costo mensual por uso de materiales (10 meses) esta dado como un 40% del triple de la edad del estudiante.
14. Un empresario quiere determinar en cuanto tiempo puede entregar sus productos desde
Tegucigalpa a San Pedro Sula, y desde Tegucigalpa a La Ceiba, si ha fijado como regla que sus conductores manejen a una velocidad de 80 km./hora.
ESTRUCTURAS DE DECISION
15. La densidad de una sustancia esta dada por la fórmula d = m/v, en donde m es la masa y v
el volumen. Si se proporciona la masa y el volumen determinar si la sustancia se hundirá o flotará en el agua (e imprimir el mensaje correspondiente). La sustancia se hundirá si la densidad es mayor que uno.
16. Dado como dato el sueldo y el nombre de un trabajador, aplicarle un aumento del 15% si su
sueldo es inferior a L. 1000.00 y 12 % en caso contrario. Imprimir el nombre y el nuevo sueldo del trabajador.
17. Se dan como datos el nombre y 5 calificaciones de un alumno, debe imprimirse el nombre, el
promedio y la palabra “APROBADO” si el alumno tiene promedio mayor o igual de 60 y la expresión “NO APROBADO” en caso contrario.
18. Determinar e imprimir si un número es positivo, negativo o cero. 19. Calcular el precio del billete ida y vuelta en ferrocarril, conociendo la distancia del viaje de ida
y el tiempo de estancia. Se sabe además que si el número de días de estancia es superior a 7 días y la distancia total (ida y vuelta) es superior a 800 Km., el billete tiene una reducción del 30%. El precio por kilómetro es de L. 0.17. El costo por día de estancia es de Lps 900.00
20. Calcular el salario semanal de los empleados de una empresa, sabiendo que dicho salario se
calcula en base a las horas trabajadas durante la semana y de acuerdo a un precio por hora trabajada especificado, si las horas trabajadas se pasan de 40 horas semanales, estas se consideran como extraordinaras y se pagan a razón de 1.5 veces la hora ordinaria.
21. Dados los valores de p, q, determine si los mismos satisfacen la siguiente expresión: p³ + q³ - 2 * p² < 680 ESTRUCTURAS DE REPETICION 22. Elaborar el desglose repetitivo para los ejercicios de la primera sección de estructuras secuenciales indicados: a) 4 b) 8 c) 9 d) 10 Utilizar centinelas apropiados. 23. Elaborar el desglose repetitivo para los ejercicios de la sección de estructuras de decisión
indicados: a) 16 b) 17 c) 20 Utilizar centinelas apropiados.
__________________________________________________________________
281
24. Se desea elaborar un programa para calcular la nota final de cada uno de los estudiantes matriculados en un curso de programación I. Durante el curso se dan tres exámenes ponderados a 15, 20 y 25, un acumulativo que consta de tres partes: un trabajo de investigación de 10%, tareas de 10 % y un proyecto final de 20%. Si se proporcionan al computador estos datos en base a 100 puntos, calcular la nota final de cada alumno, Utilizar como centinela Primer examen igual a cero.
II A continuación se presenta la seudocodificación para algunos problemas de esta guía con el
objetivo de ilustrar el estilo adoptado en clase, además se solicita realizar la prueba escritorio con los datos indicados:
25. Seudo código para problema 2 de estructuras secuenciales
Inicio lea n1
lea n2 datos1: 3, 5
suma←n1+n2 datos2: -1, 10
resta←n1-n2
mult←n1*n2
escriba suma
escriba resta
escriba mult
final
26. Seudo código para problema 16 de Estructuras de Decisión
Inicio Lea sueldo
Lea nombre datos1: 800, Jose
Si sueldo <1000 datos2: 2000, Pedro
entonces aumento←sueldo * 0.15 Sino aumento←sueldo * 0.12 Fin si
Nvo_sueldo←sueldo + aumento
escriba Nombre
escriba Nvo_sueldo
final
27. Se presenta el seudocódigo para problema 23 que es el ejercicio 16 hecho repetitivo de Estructuras de Repetición y se le solicita que realice la prueba de escritorio con los siguientes datos:
Las decisiones contienen: si entonces sino fin si
__________________________________________________________________
282
Inicio DATOS:800, Jose, 2000, Pedro , 3500, Marcos, 0, 5000, Juan
lea sueldo mientras sueldo ≠ 0 haga
lea nombre
si sueldo < 1000 entonces aumento←sueldo*0.15 sino aumento←sueldo*0.12 fin-si Nvo_sueldo←sueldo + aumento
escriba Nombre
escriba Nvo_sueldo
lea sueldo
fin-mientras final
28. Elaborar la prueba de escritorio con los siguientes DATOS: 1,10,3,1,2,5,-99,5,0
inicio lea tipo
Mientras tipo ≠ haga lea dias si tipo=1 entonces Recargo 10.00* dias Sino Si tipo=2 entonces Recargo 15.0 * dias Sino Recargo 20.0 * dias Fin si Fin si si dias <= 3 entonces
adicional 0 sino Adicional Recargo * 0.15 Fin si Total Recargo + Adicional Escriba “El total a pagar es “,Total lea tipo
fin mientras escriba “Fin de dia”
final
La estructura de repetición contiene mientras C haga fin mientras al final
La solución está al final de este Apéndice
__________________________________________________________________
283
29. Prueba de escritorio con los siguientes DATOS: 1,3,6,2,2,1,1,4,0,9
Inicio Lea NUM
SUBTOT 0 Mientras NUM ≠ 0 haga Lea TIPO TOTAL NUM+SUBTOTAL si TIPO = 1 entonces SUBTOT NUM*5 escriba “Es clase A” sino si tipo= 2 entonces SUBTOT NUM*10
escriba “Es clase B” sino si tipo=3 entonces SUBTOT NUM*15 escriba “Es clase C” sino SUBTOT NUM*20
Escriba “ Es clase D” Fin si Fin si Fin si escriba NUM escriba TOTAL lea NUM fin mientras escriba “Fin de Programa” final III. Elaborar los algoritmos de los ejercicios :
30.- a) 34, 7, 10 b) 15, 17, 20 c) 23, 24 IV. Para los siguientes ejercicios: Elabore un Plan de análisis resumido (Resumen del análisis
completo) , el pseudocódigo NOlae y prueba de escritorio con datos convenientes. ESTRUCTURAS SECUENCIALES
31. En las olimpiadas, el tiempo que realizan los participantes en la competencia de velocidad en pista, se mide en minutos, segundos y centésimas. Por otra parte, la distancia que recorren, se expresa en metros. Calcule la velocidad de los participantes, en Kilómetros por hora.
32. El número de sonidos emitidos por un grillo en un minuto (N), es una función de la temperatura. Como resultado de esto, es posible determinar el nivel de la temperatura haciendo uso de un grillito como termómetro. La Fórmula para la función es: T = N / 4 + 40
Dado N calcule la temperatura aproximada.
La solución está al final de este Apéndice
__________________________________________________________________
284
33. Una empresa desea calcular la comisión de ventas para cada uno de sus tres vendedores, el porcentaje de comisiones es de 10%, 12% y 15% respectivamente. Si se proporcionan las ventas realizadas por cada uno, determinar cuanto le pago la empresa a cada vendedor por concepto de comisiones y el total de comisiones pagado por la empresa.
34. Una empresa desea obtener el 40% de ganancia sobre el costo en la venta de sus productos.
Dado el costo unitario y el número de unidades solicitadas de un determinado producto, determinar el precio de venta unitario de dicho producto y el total a pagar por las unidades solicitadas.
35. En una agencia de alquiler de automóviles, al proporcionarle al computador el número de días
que fue alquilado el automóvil y él numero de kilómetros recorridos; calcular el total a pagar por el cliente si por cada kilómetro se pagan L. 0.75, L. 400.00 por cada día, 10% de impuesto y además se paga L. 800.00 por seguro.
ESTRUCTURAS DE DECISION:
36. Dados la categoría y el sueldo de un trabajador, calcule el aumento correspondiente teniendo en cuenta la siguiente tabla. Imprima la categoría del trabajador y su nuevo sueldo.
CATEGORIA AUMENTO
1 15%
2 10
3 8
4 7 37. Un grupo de personas dedicadas al negocio de lavado de automóviles, necesita un programa
para que determine cuanto tiene que pagar cada cliente de acuerdo a la siguiente tabla de servicios:
TIPO DE SERVICIO PRECIO
1. – LAVADO EXTERIOR Lps. 25.00
2. - LAVADO INTERIOR Lps. 30.00
3. - LAVADO EXTERIOR E INTERIOR Lps. 35.00
4. - LAVADO DE MOTOR Lps. 40.00 Además de los servicios, se ofrece un descuento del 7% si se llevan dos o más automóviles. Se proporcionara al computador, el Tipo de servicio y No. de automóviles, calcular el total a pagar por el cliente.
38. Una distribuidora de artículos vende al por mayor y tiene tres tipos de tarifas:
• TARIFA A:Si se compran de 1 a 99 artículos, el precio de cada uno es de L. 150.00 • TARIFA B:Si se compran de 100 a 499 artículos, el precio de cada uno es de L. 145.00 • TARIFA C: Si son 500 o mas artículos, el precio de cada uno es de L. 140.00
Se lee el número de artículos (no la tarifa) a comprar y se desea imprimir el total de la venta, el 12% de impuesto sobre ventas y el total a pagar por el cliente.
__________________________________________________________________
285
39. Se leerá el sueldo por hora y horas trabajadas por semana por un empleado, y se necesita conocer la cuota de la deducción y salario neto. La deducción es calculada de acuerdo al salario bruto mensual. Si el salario bruto es menor de L. 600.00 no existe deducción. Si el salario bruto mensual esta entre L. 600.00 y L. 1000.00 la deducción es fija de L. 25.00; Sin embargo, si el salario es mayor a los L. 1000.00 la deducción es de un 7.5% del salario.
40. En una tienda efectúan un descuento a los clientes dependiendo del monto de la compra. El
descuento se efectúa con base al siguiente criterio: • Si el monto es menor a L.1000.00 no hay descuento • Si el monto está comprendido entre L. 1000.00 y L. 3000.00 inclusive, descuento del 5% • Si el monto está comprendido entre L. 2000.00 y L. 8000.00 inclusive, descuento del 11% • Si el monto es mayor a L. 8000.00, descuento del 12% Dado el monto de la compra de un cliente, determinar lo que debe pagar. 41. Calcular el valor de la función F de acuerdo a las siguientes condiciones:
f= 10 + el doble de x/360 si x <= 100 f= 25*x/3 + triple de x si 100 < x <= 350 f=x + 3*x+100 si x > 350
42. En una cafetería se venden básicamente tres tipos de comida: 1 - desayuno, 2 - almuerzo, 3 - cena con precios de L. 22.00, L 30.00 y L. 40.00 por persona respectivamente. Además se ofrece una jarra de refresco gratis si el grupo es de mas de tres personas. Si se proporciona el código de la comida (1, 2 o 3) y el número de personas en el grupo, determinar el total a pagar por el grupo, e imprimir el mensaje "Jarra Gratis" cuando sea necesario.
43. Una tienda que se dedica a la venta de electrodomésticos realiza la mayoría de las ventas al
crédito. Debido a la tardanza con que sus clientes realizan los pagos, la tienda ha decidido cobrar un 2% de interés diario por mora por 5 días o menos de retraso, y 5% diario por mas de 5 días. Si se proporciona al computador el monto del préstamo y los días de retraso calcular el cargo por mora.
44. En un cierto país el impuesto que se debe pagar por los artículos que se calcula mediante la
siguiente regla: los primeros Lps.20 no causan impuesto, los siguientes Lps. 20 tienen el 30% de impuesto y el resto el 40% de impuesto, pero si el costo del producto es mayor a Lps. 500, entonces en lugar de 40% se cobra el 50%. Diseñe un programa que lea el costo básico de un artículo y calcule su precio total. Precio total =precio básico + impuesto
45. Un contador necesita un programa para que le calcule el gasto por depreciación anual de ierto
equipo de acuerdo a la siguiente tabla de depreciación:
TIPO DE EQUIPO DEPRECIACION
1 4 Años
2 5 Años
3 7 Años
4 10 Años
__________________________________________________________________
286
La depreciación anual se calcularía dividiendo el valor del equipo entre los años que este se deprecia según la tabla anterior. Se proporcionará al computador el valor del equipo, calcular la depreciación anual.
NOTA: En los ejercicios en donde hay clasificaciones, se recomienda utilizar Arboles de decisión con Decisiones Anidadas ya que en el caso de clasificar variables discretas (valores como 1, 2, 3, etc.) facilita la introducción del bloque caso en el segundo parcial, ocasionalmente puede utilizar decisiones abreviadas concatenadas.
ESTRUCTURAS DE REPETICION 46. Se desea elaborar un programa para calcular la nota final de cada uno de los estudiantes
matriculados en un curso de programación I. Durante el curso se dan tres exámenes ponderados a 15, 20 y 25, un acumulativo que consta de tres partes: un trabajo de investigación de 10%, tareas de 10 % y un proyecto final de 20%. Si se proporcionan al computador estos datos en base a 100 puntos, calcular la nota final de cada alumno.
47. Calcule al aumento de sueldo para un grupo de empleados de una empresa, teniendo en cuenta los siguientes criterios:
• Si el sueldo es inferior a L. 1000.00 : Aumento 15%
• Si el sueldo está comprendido entre L. 1000.00 y L. 2,500.00 inclusive : Aumento 10%
• Si el sueldo es mayor a L. 2500.00 : Aumento 8%
Se debe imprimir el nombre y el nuevo sueldo del trabajador.
48. Hacer repetitivos los ejercicios: a) 32 b) 33 c) 34 d) 37 e) 40 f) 42
49. En un parque de juegos infantiles la entrada para niños mayores de 10 años es de L. 8.00 y
L. 5.00 para menores de 10. Si el grupo incluye 2 o más niños, el precio por cada uno es de L. 6.50. Ya que la permanencia en el parque requiere de la presencia de adultos, se le cobrara L. 10.00 por cada adulto. Si se proporciona al computador el núero de niños que entran, la edad en caso que sea solamente uno y el número de adultos, determinar el total a pagar por el grupo.
50. La Compañía de luz “Del Centro” desea imprimir los recibos de cobro de los cuentahabientes, en el último período. Por cada cliente se ingresa su nombre, dirección, registro inicial y registro final. El cobro se efectúa en base a la siguiente tabla:
51. Construya un programa que dados como datos el modelo de un vehículo y su precio, determine el valor final que debe pagar el comprador. El concesionario esta haciendo descuentos teniendo en cuenta el modelo, con base en la siguiente tabla:
CONSUMO TARIFA
140 KVH o menos Lps.. 3.20
Los siguientes 170 KVH Lps. 0.15 por KVH
Exceso sobre 310 KVH Lps.0.10 por KVH
__________________________________________________________________
287
52. En la Universidad se necesita obtener una lista de los alumnos candidatos a la
facultad de Economía, Administración, Contabilidad e Ingeniería en Computación. Las condiciones para ser seleccionado como presunto candidato para entrar a la facultad, varían según la carrera y se presentan a continuación:
Condiciones para facultad de Economía Semestre >= 5 y promedio >= 8.5
Condiciones para facultad de Administración Semestre>= 6 y promedio >=8.8 Condiciones para facultad de Contabilidad Semestre >= 6 y promedio >=8.5 Condiciones para facultad de Computación Semestre >= 6 y promedio >=8.8
Para cada uno de los estudiantes de la universidad, se ingresa su número de cuenta, carrera en que está inscrito, semestre que cursa y promedio general hasta el momento, imprimir el mensaje correspondiente (Seleccionado como candidato o No fue seleccionado).
53. Una compañía que se dedica al envío de paquetes, cobra L. 1.80 mas una cantidad basada
en el paquete de acuerdo a la siguiente tabla:
PESO EN LIBRAS PRECIO POR LIBRA
25 O MENOS L. 0.15
45 O MENOS L. 0.25
MAS DE 45 L. 0.35 Hay un cargo adicional de L. 2.00 si el volumen del paquete excede los 15 pies cúbicos. Si se proporciona el volumen y el peso determinar el total a pagar por el cliente. (Si su profesor lo solicita, imprima la cantidad de paquetes que se enviaron dentro de los rangos descritos en la tabla, y el total de paquetes con cargo adicional).
54. Una fábrica de automóviles tiene varios empleados trabajando en dos turnos: mañana(0) y tarde(1). Considerando al número de horas semanales trabajadas, se desea calcular el sueldo semanal devengado por cada empleado si se sabe que todos trabajan 5 días a la semana y bajo las siguientes tarifas
• L. 60.00 por hora: turno de la mañana • L. 80.00 por hora: turno de la tarde Además si se pasan de 40 horas semanales, las horas se consideran extraordinarias y se paga a razón de: • 2 veces la hora ordinaria para el turno de la mañana • 3 veces la hora ordinaria para el turno de la tarde
(Si su profesor lo solicita, imprimir: total de empleados en cada una de las jornadas) 55. Leer varios números enteros no negativos, calcular el mayor y el menor de ellos.
MODELO DESCUENTO
Cutlass 8%
Cavalier 5%
Chevy 6%
Century 9%
__________________________________________________________________
288
SOLUCION DE PROBLEMAS SELECTOS
No. 28
Memoria: TIPO DIAS RECARGO ADICIONAL TOTAL
1 3 2
-99
10 1 5
100 20 75
15 0
11.25
115 20
86.25
Salida:
No. 29
Memoria Salida:
NUM TIPO SUBTOTAL TOTAL 1 6 2 1 0
3 2 1 4
0 15 60 10 20
1 21 62 11
El total a pagar es 115
El total a pagar es 20
El total a pagar es 86.25
Fin del dia
Es Clase C 1 1 Es Clase B 6 21 Es Clase A 2 62 Es Clase D 1 11
Por razones de legibilidad, no se tacharon valores en la Memoria. Solamente quedarían sin tachar, es decir como valores vigentes las últimas filas de cada casilla que están en negrillas
__________________________________________________________________
289
APENDICE B I. Elaborar un resumen de análisis y algoritmo en NOLAE para cada uno de los
siguientes ejercicios: 1. Realizar el escrutinio de una elección entre dos candidatos por un número impar de
votantes, con todos los votos válidos. Publicar el candidato ganador y cuantos votos obtuvo cada uno de ellos. Código del candidato A= 0, código del candidato B=1. Marca de fin de datos = 9.
2. En la compañía “Paga Bien” solicitan un programa para calcular el nuevo sueldo de sus
empleados, en dicho programa se da a leer el sueldo de cada trabajador y se le aplica un aumento del 20% si su sueldo es inferior a Lps. 4000.00 y 15% en caso contrario, se deberá publicar el nuevo sueldo y al final se deberá indicar lo siguiente:
• A cuantos empleados se les aumento el 20% y a cuantos el 15% • Cuantos empleados hay en total. • El total de la nueva Planilla.
3. Se desea elaborar un programa para calcular la nota final para cada uno de los estudiantes matriculados en la clase de Programación I. Durante el curso se dan tres exámenes teóricos ponderados en 15%, 20% y 25% , y los acumulativos prácticos respectivos incluyen : trabajos de investigación, tareas y proyectos ponderados en : 10%, 15% y 15%. Si se proporcionan las calificaciones todas en base a 100 puntos, calcular e imprimir la nota final de cada alumno. Determinar cuantos estudiantes aprobaron y cuantos reprobaron la clase. Brindar además las siguientes estadísticas: • Total de alumnos con nota entre 0 y 40 • Total de alumnos con nota entre 41 y 59 • Total de alumnos con nota entre 60 y 80 • Total de alumnos con nota entre 80 y 100 • El promedio general de la clase Nota: Resolver este ejercicio considerando las notas como números reales.
4. Se desea elaborar un programa para calcular la nota final para cada uno de los N estudiantes matriculados en la clase de Programación I. Durante el curso se dan tres exámenes teóricos ponderados en 15%, 20% y 25% , y los acumulativos prácticos respectivos incluyen: trabajos de investigación, tareas y proyectos ponderados en : 10%, 15% y 15%. Para aprobar la asignatura se debe aprobar separadamente la teoría de la práctica es decir, se debe sacar una nota mayor o igual a 36% en los exámenes y en los acumulativos una mayor o igual a 24% , en el caso de no aprobar una de las dos aunque la suma de ambas sea superior a 60%, el alumno reprueba con 58%. Si se proporcionan las calificaciones todas en base a 100 puntos, calcular e imprimir la nota final de cada alumno, con el mensaje aprobó o reprobó correspondiente.
Además se solicita la siguiente información: ● Cuantos estudiantes aprobaron y cuantos reprobaron la clase. ● Nota promedio de los estudiantes que aprobaron el curso. ● Nota promedio de los estudiantes que reprobaron el curso.
__________________________________________________________________
290
5. Dados la categoría y el sueldo de varios empleados, calcule el aumento correspondiente teniendo en cuenta la siguiente tabla. Imprima la categoría y el nuevo sueldo de cada empleado.
CATEGORIA AUMENTO %
1 15
2 10
3 8
4 7 Al final se desea un reporte en donde se indique:
• El total a pagar en aumentos de sueldo para cada categoría • Total de empleados en cada categoría • El sueldo promedio por categoría • Total pagado
6. Los dueños de el Carwash "CARRO LIMPIO", necesitan un programa que determine cuanto tiene que pagar cada cliente de acuerdo a la siguiente tabla de servicios:
Además si se llevan dos o más automóviles. se ofrece un descuento del 7% para todos los tipos de servicio. Se proporcionará al computador, el Tipo de servicio y No. de automóviles, calcular el total a pagar por el cliente. Al final indique:
• Total de automóviles a los que se les brindó cada uno de los servicios • Ingreso por cada uno de los tipos de servicio brindados • Ingreso total del negocio al final del día • Total de clientes con descuento.
7. Una distribuidora de artículos "yy" vende al por mayor y tiene diferentes precios según
los volúmenes de compra: • Si se compran de 1 a 99 artículos, el precio de cada uno es de Lps. 150.00 • Si se compran de 100 a 499 artículos, el precio de cada uno es de Lps. 145.00 • Si son 500 o mas artículos, el precio de cada uno es de Lps. 140.00 Se lee el número de artículos a comprar y se desea imprimir el total de la venta, el 12% de Impuesto sobre ventas y el total a pagar por el cliente. Al final diseñe un reporte que Muestre: • La cantidad de artículos vendidos en cada rango. • Total de clientes atendidos. • Ingreso total de la distribuidora al final del día.
TIPO DE SERVICIO PRECIO
1. – LAVADO EXTERIOR Lps. 30.00
2. – LAVADO INTERIOR Lps. 40.00
3.- LAVADO EXTERIOR E
INTERIOR
Lps. 50.00
4. – LAVADO DE MOTOR Lps. 60.00
__________________________________________________________________
291
• Monto de la venta promedio por cliente.
8. La comercializadora El GLOBO vende al por mayor zapatos estilo "ZZ", manteniendo tres tipos de tarifa: • TARIFA A: para mayoristas de la zona norte, el precio de cada par es de L. 220.00 • TARIFA B: para mayoristas de la zona central, el precio de cada uno es de L. 210.00 • TARIFA C: para mayoristas de la zona sur, el precio de cada uno es de L. 200.00 Se lee la tarifa y el número de artículos a comprar y se desea imprimir el total de la venta y el tipo de tarifa, el 12% de impuesto sobre ventas y el total a pagar por el cliente. Al final diseñe un reporte que muestre: • La cantidad de pares de zapatos vendidos en cada Tarifa • Total de clientes atendidos • Ingreso total de la comercializadora al final del día • Monto de la venta promedio por cliente
9. Un negocio de estacionamiento vehicular ha clasificado los espacios o lotes para
estacionar, de la siguiente manera:
Tipo de Espacio Precio de Pago / hora Precio de Pago/día
1. Fijo bajo Techo Lps. 20.00 Lps. 100.00
2. Fijo sin Techo Lps. 15.00 Lps. 75.00
3. Movible (detrás de otro vehículo) Lps. 10.00 No Hay Diseñe un Algoritmo que haga lo siguiente: a) De como entrada:
● El tipo de estacionamiento contratado ● El numero de horas de estacionamiento (< = 24 horas) y ● Un indicador para especificar si es por hora o por día.
b) Calcule e imprima el pago de cada cliente por concepto de estacionamiento. c) Además, al final del día se requiere la siguiente información:
c.1) Ingreso total por cada tipo de estacionamiento c.2) El ingreso total del negocio. c.3) El total de clientes atendidos en el día. c.4) El tiempo promedio de estacionamiento por cliente.
10. En una Gasolinera que vende cuatro tipos de combustible a los precios mostrados en la siguiente tabla:
COMBUSTIBLE PRECIO/GALON
Diesel (D) Lps. 25.00
Regular (R) Lps. 35.00
Suprema (S) Lps. 40.00
Especial (E) Lps. 45.00
__________________________________________________________________
292
Además, si el cliente así lo desea, se da el servicio de lavado del automóvil bajo las siguientes condiciones:
El costo normal del lavado es de Lps. 40.00. Si la compra de combustible es mayor a los Lps. 400.00 el lavado del automóvil es
gratis. Si el consumo de combustible es menor de Lps. 200.00 el costo del lavado es el
normal. Pero la compra en combustible esta entre Lps. 200.00 y Lps. 400.00 inclusive, el
cliente recibe una rebaja en el costo del lavado equivalente al 20 % sobre el exceso a los Lps. 200.00.
Diseñe un algoritmo para un programa que haga lo siguiente:
a) Se de como entrada el tipo de combustible ( D, R, S o E) y el numero de galones de combustible que compra el cliente. Además se dará de entrada la respuesta del cliente, si desea o no el servicio de lavado.
b) Para cada cliente calcule el costo del combustible, el costo del lavado del automóvil si el cliente lo pidió y el valor total a pagar (suma de ambos costos).
c) Imprima los valores anteriormente calculados.
d) Además, que al final del día brinde la siguiente información:
d.1) El total del ingreso diario del negocio por concepto de venta de combustible, servicio de lavado y el ingreso total.
d.2) También, calcule e imprima el consumo promedio de combustible por cliente.
II. 11.-- Realice la prueba de escritorio del siguiente algoritmo, en el cual se ha utilizado
BLOQUE CASO, Contadores y Acumuladores:
Inicio DATOS: 3, 5, N, 2, 1,E, 1, 10, N, 0, 3
Ing_1 0.0 , Ing_2 0.0 , Ing_3 0.0, Ing_total 0.0 c_per 0 escriba "Ingrese código" lea código Mientras código ≠ 0 haga
escriba "Ingrese numero de personas" lea nper
escriba ”Ingrese tipo de cliente (N/E) :” lea cliente
c_per c_per + nper Caso código 1: total Nper * 15 caso cliente
'N', `n’ : descuento total*0.05 'E', ‘e’ : descuento total*0.07
sino: nulo fin caso
total total-descuento Ing_1 ing_1 + total
__________________________________________________________________
293
2: total nper*35 ing_2 ing_2 + total
3: total nper*60 ing_3 ing_3 + total
sino : Nulo fin caso
escriba "el total a pagar es ", total escriba "Ingrese siguiente codigo"
lea codigo fin mientras ing_total ing_1 + ing_2 + ing_3 escriba "El numero de personas atendidas fue ", c_pe escriba "El ingreso por tipo 1 fue ", ing_1 escriba "El ingreso por tipo2 fue ", ing_2 escriba "El ingreso por tipo3 fue ", ing_3 escriba "El total de ingresos del dia fue ", ing_total
Fin Nota: La solución de este ejercicio está al final de este Apéndice III. Codificar en un lenguaje de programación, los ejercicios del Apéndice A
) 25, 9, 10, 15, 26, 18, 20
12. b) 27, 28, 24, 36, 37
12.c) 42, 44, 53, 54, 48d), 48e), 48f)
IV. Elaborar un resumen de análisis, además un Programa en un Lenguaje de programación para cada uno de los siguientes ejercicios:
13.- Calcular la nota media de N estudiantes 14. En la distribuidora “El Diamante”, todos los vendedores tienen como sueldo base Lps.
5000.00, las comisiones ganadas son el 10% del monto total de las ventas realizadas. Diseñar un programa en el cual para cada empleado se lea su Numero de empleado y las ventas totales realizadas en el mes, el programa deberá imprimir el Numero de empleado su sueldo mensual. Además deberá calcular: las comisiones y el sueldo promedio de estos
15. Imprimir los números del 1 al 100 sin proporcionar ninguna entrada. 16. Determinar el mayor de 20 números. 17. Determinar el menor de n números. 18. Elaborar un programa para calcular el factorial de un número entero positivo.
Ej. Factorial de 6, 6! = 1 * 2 * 3 * 4 * 5 * 6 = 720 a. Dado un número entero positivo, determinar el número de docenas contenidas en
él.. Ejemplos: 32 2 docenas 48 4 docenas
19. Dado un número entero positivo, determinar el número de dígitos que tiene e imprimir dígitos de derecha a izquierda o sea las unidades, decenas, centenas etc..
Ejemplos: 164 4 6 1 3 dígitos 23458 8 5 4 3 2 5 dígitos
__________________________________________________________________
294
20. En la venta de accesorios de computadoras e impresoras, venden cajas de Discos compactos, si la caja de 10 unidades cuesta Lps. 200 , y cada unidad de Cd cuesta Lps 25.00, cuanto deberá pagar un cliente que desea N Discos compactos.
21. Elaborar un programa que imprima las siguientes sucesiones:
a) 1, 4, 7, 10, 13, … (50 términos) b) -6, -3, 0, 3, 6, 9,… ( n términos) c) 1, 5, 8, 12, 15, 19, … (25 términos) d) 1/2, -1/4, 1/8, -1/16, … (50 términos) e) 1!, 2!, 3!, 4!, 5!, … ( n términos) f) 3 / 2! , 9 / 3!, 27 / 4!,... (60 términos) g) 0, 1, 1, 2, 3, 5, 8, 13 (80 términos) h) 2/4, 3/9, 4/16… (20 términos)
22. Calcule el valor de S:
a) S = 2 + 4 + 8 + 16 + … ( n términos) b) S = -2 /1 + 4/2 – 6/4 + 8/7 – 10/11 + 12/ 16,... (10 términos) c) S= 2 + 5*3 + 8*4 + 11*5 + 14*6 + ... (n términos) d) S =1! + 2! + 3! + 4! + 5!, … (50 términos)
V. Realizar la prueba de escritorio del siguiente programa en Ada 95
23. DATOS: 10 With Ada.Text_Io,Ada.Integer_Text_Io,Ada.Float_Text_Io; Use Ada.Text_Io,Ada.Integer_Text_Io,Ada.Float_Text_Io; Procedure Serie is
C, Num, N, Den : Integer; Sum:float;
Begin
Num:=2; C:=1; Den:=1; Sum:=0.0; Put("Ingrese numero de terminos deseados: "); Get(N);skip_line; While C <= n loop
Put(Num,0); Put("/"); Put(Den,0); New_line; Num:=num+2; Den:=den+num; Sum:=sum+float(num)/float(den); C:=C+1;
End loop;
__________________________________________________________________
295
New_line; Put("La suma total es : "); Put(Sum,0,2,0);new_line;
End Serie;
Nota: la solución de este ejercicio está al final de este Apéndice
VI. Elaborar un resumen de análisis y un Programa en un lenguaje de Programación para cada uno de los siguientes ejercicios:
24. Dada una lista de 200 números enteros positivos entre 1 y 100, encuentre la suma. 25. Una agencia de alquiler de autos desea un programa que le sirva de apoyo al empleado
encargado de atención al cliente. Para el uso del cliente, la empresa cuenta con la siguiente flota de autos:
TIPO DESCRIPCION COSTO Lps. CANTIDAD
1 4 x 4 400.00 5
2 Turismo pequeño 200.00 10
3 Turismo grande 300.00 6
4 Busito 600.00 2
El programa deberá permitir alquilar autos a los clientes, verificando que éstos se encuentren disponibles, aceptar las devoluciones de autos y volverlos a colocar como disponibles, listar los ingresos por tipo de auto y listar el número de veces que se ha alquilado cada tipo de auto.
26. En una cafetería se venden básicamente tres tipos de comida: 1 - desayuno, 2 – almuerzo, 3 - cena con precios de L. 22.00, L 30.00 y L. 40.00 por persona respectivamente. Además se ofrece una jarra de refresco gratis si el grupo es de mas de tres personas. Si se proporciona el código de la comida (1, 2 o 3) y el número de personas en el grupo, determinar el total a pagar por el grupo, e imprimir el mensaje "Jarra Gratis" cuando sea necesario.
Indicar al final del día: El número de personas atendidas, el ingreso por cada tipo de comida, el total de Jarras Gratis dadas a los clientes y el Ingreso total del día
27. En una tienda de equipo de cómputo, “EXCALIBUR S de RL”, se utiliza una computadora
para emitir la facturación a los clientes. A la computadora se le da entrada al nombre del cliente, el código del artículo y la cantidad de artículos que lleva y el precio unitario de cada artículo. Emita la factura incluyendo: Nombre del cliente, precio del artículo, subtotal, impuesto sobre ventas y total a pagar (emita una hipótesis). Para completar el problema anterior, se desea saber el ingreso total del día, así como el Total de impuesto sobre ventas del día.
28. Un aserradero ha decidido computarizar el área de ventas, y desea que a partir de los datos
de grueso, ancho y largo de la madera a comprar indique el número de pies tablares.
La fórmula es la siguiente: Pies ( Grueso * Ancho * Largo ) / 12
__________________________________________________________________
296
Recuerde que una persona puede llevar madera de diferentes largos, gruesos y anchos. Si el precio del pie tablar es de Lps. 5.60, calcule las siguientes estadísticas: • El monto a pagar de cada cliente • El total de pies tablares que lleva cada cliente • El ingreso total al final del día • El total de pies tablares vendidos al final del día • El total de pies tablares vendidos al final del día de madera de 1" de grueso
29. Se deberá hacer un programa para un supermercado que pregunte para cada cliente: el
precio del artículo, la cantidad de artículos del mismo tipo que lleva y si al artículo se le aplica el impuesto o no. Además deberá permitir que se le indique cuando terminan los artículos de un cliente para ofrecer el total de la venta. El programa debe indicar el total de la venta del cliente y preguntar si se atenderá otro cliente. Adicionalmente se desea que también controle el corte de las cajas, por lo que debe ofrecer como salidas el total de ventas del día, y el total de ingresos por impuestos.
VII. Realizar la Prueba de escritorio del siguiente programa, en el cual se encuentran 2
WHILE dentro de otro WHILE 30. With Ada.Text_Io, Ada.Integer_Text_Io; Use Ada.Text_Io, Ada.Integer_Text_Io; Procedure Letras is con_a,con_b,a,b,n:Integer; Begin
N:=0; a:=3; b:=3; While n < 4 loop
con_a:=a; While con_a /= 0 loop
Put("a"); con_a:=con_a-1;
End loop; con_b:=b; While con_b /= 0 loop
Put("b"); con_b:=con_b-1;
End loop; New_line; a:=a+1; b:=b+1; n:=n+1;
End loop; End Letras;
Nota: la solución de este ejercicio está al final de este Apéndice NOTA: En este momento el alumno estará en la capacidad de codificar en ADA y emplear
correctamente, lo siguiente: CONST, PUT , PUT_LINE , GET , SKIP_LINE, Inicializacion de variables,
__________________________________________________________________
297
IF C THEN ELSE END IF; WHILE C– LOOP - END LOOP; CASE <VARIABLE> IS WHEN 1 => B1; WHEN 2 => B2; WHEN OTHERS=>B3; END CASE; CONVERSION DE TIPOS, FORMATOS DE SALIDA
SOLUCION A PROBLEMAS SELECTOS Ejercicio II Memoria:
CODIGO NPER CLIENTE CPER TOTAL ING1 ING2 ING3 ING_TOTAL DESCUENTO
3
2
1
5
1
10
N
E
N
5
6
16
300
35
1500
1425
1425 35 300 1760 75
Salida en Pantalla Ejercicio V Memoria:
N C NUM DEN SUM 10 1
2 3 4 5 6 7 8 9 10
2 4 6 8
10 12 14 16 18 20
1 5
11 19 29 41 55 71 89
109
0.0 0.80 1.35 1.77 2.11 2.40 2.66 2.88 3.09 3.27 3.44
El total a pagar es 300 Ingrese el codigo El total a pagar es 35 Ingrese el codigo El total a pagar es 1425 Ingrese el codigo El numero de personas atendidas fue 16 El ingreso por tipo 1 fue 1425 El ingreso por tipo2 fue 35 El ingreso por tipo3 fue 300 El total de ingresos del dia 176
__________________________________________________________________
298
Salida en Pantalla Ejercicio VII Memoria: Salida en Pantalla: CON_A CON_B A B N
3 2 1 0 4 3 2 1 0 5 4 3 2 1 0 6 5 4 3 2 1 0
3 2 1 0 4 3 2 1 0 5 4 3 2 1 0 6 5 4 3 2 1 0
3 4 5 6 7
3 4 5 6 7
0 1 2 3 4
Ingrese numero de terminos deseados: 2/1 4/5 6/11 8/19 10/29 12/41 14/55 16/71 18/89 20/109 La suma total es : 3.44
aaabbb aaaabbbb aaaaabbbbb aaaaaabbbbbb
__________________________________________________________________
299
APENDICE C I. VARIANTES DE LA REPETICION Utilizando las diferentes estructuras de programación repetitivas, elaborar los Algoritmos y Programas en Ada 95 (u otro lenguaje de programación) para los ejercicios que a continuación se describen. Ciclo Repita-Hasta 1.- Leer varios números y acumularlos hasta que el total de la suma de los mismos sea mayor a
200, se deberá imprimir la cantidad de números que se leyeron. 2.- Calcular e imprimir el producto de 2 números introducidos por teclado, esta operación se
hará para varios números en forma repetitiva hasta que el usuario decida salirse (Ciclo controlado por respuesta de usuario). Además se deberá imprimir cuantas multiplicaciones se efectuaron y cual fue el producto de la ultima.
3.- Imprimir los primeros 100 términos de la serie Fibonachi
0,1,1,2,3,5,8,13,21….. Ciclo Para 4.- Escriba la suma de los primeros N números enteros pares 5.- Escriba la suma de los primeros N números enteros impares 6.- Escriba la suma que contenga N términos de la siguiente sucesión
S = 1-3/4+5/7-7/10+9/13-11/16…..hasta N términos. 7.- Imprimir los primeros 100 términos de la serie Fibonachi , en la cual a partir de un 0 y un 1
se genera el siguiente número sumando los dos anteriores.
0,1,1,2,3,5,8,13,21….. Ciclo Mientras-Haga 8.- Se lee una secuencia de números positivos para hacer lo siguiente:
a) Calcular el número con mayor valor en la secuencia b) Calcular el número con menor valor en la secuencia c) Calcular el promedio de la secuencia
9.- Imprimir los primeros 100 términos de la serie Fibonachi , en la cual a partir de un 0 y un 1
se genera el siguiente número sumando los dos anteriores: 0,1,1,2,3,5,8,13,21 II. PROCEDIMIENTOS 10.- Si se depositan "P" lempiras en una cuenta de ahorros que paga un interés I compuesto
anualmente, entonces después de "N" años, el monto presente de la cuenta esta dada por: A = P(l+i)n
a. Escriba un subprograma para calcular "A". b. Escriba un programa que llame al subprograma del inciso "a" para calcular el interés
total recibido por una persona que deposita "P" dólares en la cuenta.
__________________________________________________________________
300
11. Se desea un programa que lea una serie de enteros de entrada. Para cada uno deberá imprimir un mensaje que señale si el número es par o no. Utilice un subprograma para determinar sí el número es par o no.
12.- Se desea un programa que utilice un subprograma para ordenar los elementos de un arreglo.
(en orden ascendente ó descendente). 13.- En cierto país el impuesto que se debe pagar por los artículos se calculan mediante la siguiente
regla: Los primeros $20 no causan impuesto, los siguientes $20 tienen el 30% de impuesto y el resto el 40% de impuesto, pero si el costo del producto es mayor a $500 entonces en lugar del 40% se cobra el 50%.
a. Elabore un subprograma que calcule el impuesto para un artículo dado. b. Elabore un programa de dado el costo básico llame el subprograma del inciso a para
calcular el imprimir el precio total. PROCEDIMIENTOS Y MENUS 14.- Elabore un programa que permita al usuario calcular el área de la superficie y el volumen de
uno de los siguientes sólidos. 1. Una esfera 2. Un cono 3. Una pirámide 4. Un cilindro
El programa deberá utilizar un menú de opciones y un subprograma para una de las opciones.
15.- Dada la categoría y el sueldo de un trabajador se desea calcular el aumento correspondiente
teniendo en cuenta la siguiente tabla.
a) Elabore un subprograma PLUS que calcule el aumento para un trabajador. b) Construya un programa que utilice el subprograma PLUS para calcular el nuevo
sueldo. 16. Elabore un programa que simule una calculadora de bolsillo con las operaciones básicas. 1. Sumar (enteros positivos y cero o enteros negativos) 2. Restar 3. Multiplicar 4. Dividir 5. Raíz cuadrada Utilice subprogramas y menu de opciones. En la opcion 5 utilizar un submenu 1. Enteros
positivos y cero 2. Enteros negativos 3. Regresar al Menu Principal 17. Se desea un pseudocódigo para que muestre un menú de opciones para procesar conversiones
según sea requerido por el usuario. Las conversiones que se pueden realizar son las siguientes:
CATEGORIA AUMENTO 1 15 2 10 3 8 4 7
__________________________________________________________________
301
TIPO CONVERSION 1. METROS A CENTIMETROS 2. GRADOS CENTIGRADOS A GRADOS FAHRENHETT Y VICEVERSA 3. LIBRAS A KILOGRAMOS Y GRAMOS Al final, se desea conocer cuantas conversiones se realizaron de cada tipo. Suponiendo que
cada conversión tuviera un costo de L. 0.40, excepto la tercera conversión que tiene un costo de L. 0.50, determinar cuanto ganaría el programador por el alquilar de su programa.
18. Una empresa que se dedica a realizar excursiones turísticas, desea un pseudocódigo para
determinar cuanto tiene que pagar cada cliente. Las excursiones que se ofrecen son las siguientes:
TIPO DESCRIPICION PRECIO X GRUPO DE TRES PERSONAS
1 ISLAS DE LA BAHIA L. 5000.00
2 RUINAS DE COPAN L. 7000.00
3 BIOSFERA DEL RIO PLATANO L. 6000.00 Todas las excursiones incluyen transporte y hospedaje. En caso que el grupo incluya más de 3 personas, el precio por excursión se incrementara en L.
1000,00 para el tipo 1 y 2 L. 1400.00 para el tipo 3. Si el grupo así lo desea para solicitar que se le incluya un plan de comida el cual tiene un costo
de L. 100.00 diarios por persona para los tipo 1 y 3, L. 150.00 para el tipo 2. Para poder realizar excursiones a La Mosquitia y a la Biosfera del Río Plátano es necesario
tener conocimientos de primeros auxilios. Si el cliente no lo tiene, este podrá tomar un curso que se ofrece 2 semanas antes del viaje a un costo de L. 300.00 por persona.
Cada persona deberá pagar una cantidad de L. 25.00, el cual es destinado al fondo para el
"DESARROLLO ECOLOGICO". El pseudocódigo deberá calcular el ingreso según el tipo de excursión, ingreso total de la
empresa y el número de personas que tomar el curso de primeros auxilios. 19.- Una tienda de alquiler de videos ha clasificado sus películas de la siguiente manera.
CATEGORIA DESCRIPCION ALQUILER POR DIA
1 DRAMA L. 8.00
2 TERROR L.10.00
3 ACCION L. 9.00 Si la persona ha sido cliente por más de 2 años, se le rebaja L.0.50 por cada día adicional al
primero.
__________________________________________________________________
302
Las películas de DRAMA y ACCION, son las que contienen más estrenos; si la película alquilaba es estreno el alquiler se incrementa en L. 1.50 por día.
Para las películas ACCION se ofrece un descuento de un 10% siempre y cuando las película
sea rentada un día viernes, sábado o domingo. Elaborar Pseudocódigo, utilizando menús y subrutinas, para que calcule el total a pagar por el
cliente, además se necesita determinar cuantas películas se rentaron de cada tipo y el total de ingreso de la tienda.
20. Una empresa hotelera, se dedica principalmente al alquiler de varias casa y apartamentos en la
playa y los ha clasificado de la siguiente manera.
CLASIFICACION DESCRIPCION ALQUILER POR SEMANA
1 DEPTO. 2 CUARTOS L. 1500.00
2 DEPTO. 3 CUARTOS L. 1800.00
3 CASA L. 2100.00 Los tipos 1 y 2 se ofrecen, si el cliente así los desea, con cocineta a un precio adicional de L.
500.00 por persona. Las casas se ofrecen con aire acondicionado central, a un precio adicional de L. 400.00. En el
caso que el alquiler se haga por mas de una semana la empresa ofrece un descuento del 8% para los tipos 1 y 2 y 10% para las casas.
En caso que la persona interesada sea extranjera, a esta se le deberá cobrar un impuesto turístico del L. 120.00
Elaborar Pseudocódigo, utilizando menús y subrutinas, para que calcule el total a pagar por el
cliente, total de habitaciones que se rentaron de cada tipo, y total de ingreso de la empresa. 21.- Una agencia de alquiler de automóviles, ofrece a sus clientes básicamente tres tipos de carros.
TIPO DESCRIPCION ALQUILER BASE
1 TURISMO
L. 1000.00
2 MINI-VAN L. 1500.00
3 TURISMO STATION WAGON L. 2000.00 Los autos turismo se ofrecen con asientos para bebes, a un precio de 230 c/u. Los autos mini-van, se ofrecen con parrilla para cargar por un precio de L. 300.00 por semana. El gerente de agencia ha determinado que los turismos Wagon son los autos que sufren mayor
deterioro, por lo tanto ha decidido cobrar L. 10.00 por cada día adicional a la primera semana. La agencia también ofrece el servicio de rescate vial, para lo cual se cobra L. 150.00, L. 200.00
y L. 250.00 para cada tipo respectivamente.
__________________________________________________________________
303
El cliente puede optar por realizar el pago con tarjeta de crédito o al contado, en caso que se utilice la tarjeta de crédito habrá un recargo del 3% por servicios. En caso de pagos de contado, se ofrece un descuento del 10% en tipo 1 y 2, y 12% para los autos turismo station wagon.
Elaborar el pseudocódigo, utilizando menús y subrutinas, para que calcule el total a pagar por el cliente y además el número de autos que se rentaron de cada tipo e ingreso total de la agencia.
22. Una empresa dedicada a la producción de software ofrece a sus clientes aplicaciones
comerciales clasificado de la siguiente manera:
TIPO DESCRIPCION COSTO
1 CONTABILIDAD BASICA L. 1000.00
2 CONTABILIDAD DE COSTOS L. 1500.00
3 CONTABILIDAD AVANZADA L. 2000.00 Las aplicaciones comerciales se venden por número de licencia según el número de localidades del cliente. La primera licencia esta incluida dentro del costo del paquete, para cada licencia adicional se cobra Lps.200.00 por cada una.
Si el cliente así lo desea (Respuesta S o N) se le ofrece un plan de mantenimiento del software a un precio adicional de Lps.8,000 para la modalidad 1, 9,000 para la 2 y 10,000 para la 3.
Para la modalidad 2 y 3 se debe comprar un manual de usuario a un precio adicional del L500.00 a los clientes que compren mas de una licencia se les otorga un descuento del 25% del precio del manual.
Elaborar el pseudocódigo, utilizando menús y subrutinas, para que calcule el total a pagar por
el cliente y además el número de licencias que se vendieron de cada tipo e ingreso total de la empresa.
23. Como parte de una campaña motivacional, una empresa ha iniciado un plan de
incentivos económicos entre sus empleados, el plan esta dividido en 3 incrementos: a) Un incremento sobre su sueldo actual (depende del departamento al que pertenecen)
b) Una bonificación para aquellos empleados con antigüedad mayor a 5 años
c) Una bonificación del 5% sobre su sueldo para aquellos empleados que cumplieron con las metas establecidas por sus jefes inmediatos (Se deberá preguntar si el empleado cumplió o NO las metas)
Departamento Incremento sobre sueldo actual. Bonificación por antigüedad A.- Producción 20% L. 0.00
B.-.Administración 25% L.500.00
C.- Ventas 18% L. 1000.00 Si se da como entrada el departamento en el cual se encuentra el empleado, el sueldo actual y si cumplió las metas establecidas, se deberá elaborar el seudocódigo utilizando los conceptos
__________________________________________________________________
304
de subprogramas y menús para que calcule e imprima el aumento otorgado y el nuevo sueldo para cada uno de los empleados, Además como apoyo a la administración se requiere un reporte con los siguientes datos:
a) Total pagado por la empresa por concepto de incrementos por tipo de departamento
b) Total pagado por la empresa por concepto de incrementos por antigüedad
c) Total empleados que cumplieron las metas
d)- Total empleados para cada categoría.
__________________________________________________________________
305
APENDICE D ARREGLOS 1. Se desea un programa que permita ingresar 100 número en dos arreglos, los primeros 50 en el
arreglo llamado A y los segundos 50 en el arreglo llamado B. Una vez ingresados los números, el programa debe calcular la suma de los elementos de los dos arreglos y almacenarlos en un arreglo llamado C. Ej. C[1] A[1] + B[1]
2. Una lista de 30 números deberán ser guardados en el arreglo ORIGINAL. Debe crear un
programa que forme el arreglo INVERTIDO con los mismos números en el arreglo ORIGINAL, pero en sentido inverso.
Ej. INVERTIDO[1] ORIGINAL[30] 3. Se desea guardar una lista de 20 números en un arreglo llamado NOSOTROS. Determinar
cuantos números contenidos en el arreglo son positivos, cuantos son cero y cuantos son negativos.
4. Calcule la suma de los valores contenidos en un arreglo de tamaño n. 5. Se tiene un arreglo de tamaño n cuyos elementos son ceros y unos. Elabore el seudocódigo
para que coloque los ceros primero seguido de los unos. 6. Cuatro arreglos, cada uno de longitud 40, deberán ser formados a partir de 160 números
suministrados a la computadora. Determine cual es el arreglo con suma mayor y cual es el arreglo con suma menor.
7. Encontrar el elemento menor, y la celda en la que se encuentra, de un arreglo llamado
GRANDE de n elementos. 8. Una lista de 200 números deberán ser guardados intercaladas en dos arreglos, UNOS y OTROS.
Un arreglo, AQUELLOS, tendra el resultado de la multiplicación de los anteriores de la siguiente manera:
• Primer elemento de UNOS por el último elemento de OTROS • Segundo elemento de UNOS por el penúltimo elemento de OTROS 9. Elaborar un seudocódigo para que guarde en cada celda de un arreglo de tamaño 30, el factorial
correspondiente al índice de cada celda. Ej. Para la celda 4 se deberá almacenar 4!
10. Una tienda tiene 4 almacenes, donde cada almacén tiene 10 departamentos. Las ventas de cada almacén están almacenadas en 4 arreglos de longitud 10 cada uno. Determine el total de las ventas por departamento, por almacén y de toda la tienda.
11. Una cafetería de gran tamaño ofrece a sus clientes 200 productos totalmente distintos. Como
entrada de datos a la computadora se proporcionará la factura que contiene el código de la comida (1–200) y el precio de venta. Determinar cuantas comidas se vendieron de cada tipo, el ingreso total de la cafetería correspondiente a ese día. Suponer que cada factura corresponde a un cliente.
12. En una ferretería, “FECOSA”, se utiliza una computadora para emitir la facturación a los
__________________________________________________________________
306
clientes. A la computadora se le da entrada al nombre del cliente, el código del artículo y la cantidad de artículos que lleva. El precio del artículo se obtiene de ubicar el código del artículo en el arreglo PRECIO. El código del artículo corresponde al número del elemento dentro del arreglo. Emita la factura incluyendo precio total del artículo, subtotal, impuesto sobre ventas y total general.
TIP: Para indicar el fin de los artículos se utilizará 0 como código.
13. La Escuela Agrícola “Centro Lenca” nos ha solicitado un programa para controlar la
producción de leche de sus vacas. Se sugiere un arreglo VACA de 30 elementos, donde en cada celda se almacenará el número de litros de leche que produce una vaca. Se desea conocer cual fue el día de mayor producción, cual fue el día de menor producción y cual fue el promedio de producción.
14. Para complementar el programa anterior, se nos dijo que de las 50 vacas que tienen, se desea
conocer cual es la vaca que mas produce en promedio, y cual es la que menos produce. TIP: Para esto se debe crear un arreglo llamado PRODUCCION, donde se almacenará el promedio de producción de los arreglos arriba mencionados.
15.- Se desea un programa que utilice un subprograma para ordenar los elementos de un arreglo. (en orden ascendente ó descendente).
16. Se necesita procesar las calificaciones de un grupo de N estudiantes para lo cual se desea un
programa que haga lo siguiente. a. Utilice un subprograma "LECTUDATOS" para leer los nombres y los promedios de
los estudiantes en 2 arreglos paralelos. b. Determine por medio de un subprograma cuales fueron los estudiantes con mayor
promedio y menor promedio respectivamente.
c. Imprima por medio del subprograma IMPRESION los nombres y promedios de los estudiantes con excelencia académica (promedio mayor o igual que 90).
NOTA: Optativo usar menús
17. Modifique el problema 5 de tal forma que el subprograma LECTUDATOS garantice que cada promedio este entre 0 y 100 inclusive.
__________________________________________________________________
307
APENDICE E VARIANTES EN LA RESOLUCION DE ALGUNOS EJEMPLOS Y ALGUNOS EJERCICIOS CLASICOS En el presente texto, se hace referencia a este Apéndice que presenta ejercicios varios, que son
variantes de los ya desarrollados, o cuya temática no fue abordada en el mismo, pero que se
considera que son convenientes para el lector, por su aplicación en cursos avanzados.
E.1 - Ejemplo 3.12b(Aumentos por categoría, decisiones anidadas, árboles de decisión, repetición)
Ejercicio del Apéndice A, No.36
Dados la categoría y el sueldo de un trabajador, calcule el aumento correspondiente teniendo en cuenta la siguiente tabla. Imprima la categoría del trabajador y su nuevo sueldo.
Categoría Aumento
1 15%
2 10% 3 8%
ESTRATEGIA (Varios) (Varios) Salidas Categoría Entradas Categoría Nuevo_s Sueldo Se necesitará utilizar:
• Decisiones anidadas: ya que el aumento varia según la categoría, se deben hacer
clasificaciones según esta (categoría), para ello, utilizaremos un árbol de decisiones
V Aumento del 15 %
Aumento del 10%
Categoria=1 V
F Categoria = 2
F
Aumento del 8%
• Proceso repetitivo controlado por centinela (categoria o sueldo), escogiendo la categoría
con un valor no posible = 99 (no es 1, 2 o 3)
Condición de repetición Categoria ≠ 99
__________________________________________________________________
308
Antes de comenzar el ejemplo de escritorio, observe las fórmulas del Ejemplo 3.12 y podrá notar
que la única diferenta en las fórmulas del aumento es solamente el porcentaje, lo demás es igual, así
que se dejará los ramales de las decisiones anidadas lo más simplificadas posible, asignando
solamente el porcentaje propiamente dicho.
1. EJEMPLO DE ESCRITORIO Caso I Caso II Categoría = 2 Categoría = 1
Sueldo = 2,000 Sueldo = 3,000
Porcentaje = 0.10 porcentaje =0.15
Aumento =2,000 * 10 =200 Aumento =3,000 * 0.15 =450
Nuevo_S =2,000 +200 =2,200 Nuevo_S =3,000 +450 =3,450
2. DICCIONARIO DE VARIABLES
2. DICCIONARIO DE VARIABLES
Identificador Descripción Categoria Categoría
Sueldo Sueldo Inicial
Porcentaje Porcentaje de aumento
Aumento Aumento
Nuevo_S Nuevo sueldo
3. FORMULAS Aumento = Sueldo * porcentaje (F-1)
Nuevo_S = Sueldo + Aumento (F-2)
Obsérvece que de las 3 fórmulas que se tenían con el método anterior ahora quedan reducidas a 1
4.RESUMEN DEL ANALISIS
SALIDA: (Varios números) Categoria, Nuevo_s
2 en cada ciclo
ENTRADA: (Varios números) Categoria, Sueldo
2 en cada ciclo
Observación :Note que se asigna el porcentaje de aumento para cada Categoría, así las
fórmulas se reducirán a una: Aumento sueldo * porcentaje
Aumento = Sueldo * 0.15 (Fórmula-1) Aumento = Sueldo * 0.10 (Fórmula-2) Aumento = Sueldo * 0.08 (Fórmula-3)
Estas son las fórmulas convencionales:
__________________________________________________________________
309
PROCESO: Proceso repetitivo controlado por centinela (Categoría ≠ 99) , en el cual,
para cada empleado se lee la categoría y el sueldo, y mediante decisiones anidadas, se asigna el
porcentaje de aumento respectivo (Ver DIAGRAMA DE ARBOL) , Calcular el aumento y al final
calcular e imprimir N_sueldo.
5. DESGLOSES 1er. Nivel
1. Pasos Iniciales
2. Proceso 2do. Nivel
1. Pasos Iniciales
1.1 Leer Categoría 2. Proceso
2.1 Mientras Categoría ≠ 99 haga lo siguiente repetidamente
2.1.1 Leer Sueldo
2.1.2 Ver Si Categoría = 1
2.1.2.1V) Asignar 0.15 a porcentaje
2.1.2.2 (F) Ver Si Categoría = 2
2.1.2.2.1 (V) Asignar 0.10 a porcentaje
2.1.2.2.2 (F) Asignar 0.08 a porcentaje
2.1.3 Calcular Aumento (Fórmula-1)
2.1.3 Calcular Nuevo_S (Fórmula-2)
2.1.4 Imprimir “Categoría : ”, Categoria
2.1.5 Imprimir “Nuevo sueldo : ”, Nuevo_S
2.1.6 Leer Categoría 6. PRUEBA DE ESCRITORIO Datos: 2, 2000, 1, 3000, 99 Memoria Salida:
categoría Sueldo porcentaje Aumento Nuevo_S
2
1
99
2,000
3,000
0.10
0.15
200
450
2,200
3,450
categoría 2 Nuevo sueldo 2,200 categoría 1 Nuevo sueldo 3,450
__________________________________________________________________
310
E.2-Ejemplo 3.13b (Lavado de autos, árbol de decisión ,repetitivo, Apéndice A No. 37) Un grupo de personas dedicadas al negocio de lavado de automóviles, necesita un programa para
que determine cuanto tiene que pagar cada cliente de acuerdo a la siguiente tabla de servicio:
Tipo de Servicio _Precio___
1. Lavado Exterior Lps. 25.00
2. Lavado Interior Lps. 30.00
3. Lavado Exterior e Interior Lps. 35.00
4. Lavado de Motor Lps. 40.00
Además de los servicios, se ofrece un descuento del 7% si se llevan dos o más automóviles. Se proporcionara al computador, el tipo de servicio y el No. de automóviles, calcular el total a pagar por cliente. ESTRATEGIA: ( Varios) Entrada Tipo Salida (Varios)
N_autos Pagos
Se debe tomar en cuenta lo siguiente: • Decisiones anidadas, como los precios varían según el tipo de servicio seleccionado, se deberá
clasificar según el Tipo, Como hay un descuento a considerar, se debe tener antes un Subtotal ,
así para calcular dicho subtotal se necesitará un …
Diagrama de árbol. Al igual que el ejemplo anterior las fórmulas convencionales solamente
difieren en el precio del servicio brindado, en las decisiones anidadas solamente se asignarán
los valores respectivos, reduciendo así el número de fórmulas:
Precio 25
V
Tipo=1 V Precio 30
F Tipo=2 Precio 35
F V
Tipo =3
F Precio 40
__________________________________________________________________
311
• Como se mencionó anteriormente, para hacer el árbol de decisiones se debe considerar un
descuento lo que implica tener que calcular un subtotal para posteriormente
independientemente del tipo de servicio seleccionado, y según el N_autos .calcular un
descuento.
si N_autos ≥ 2 (V) se aplicará un descuento del 7 % o del
(F ) 0 % en caso contrario
• Repetición, seleccionando como variable centinela (Valor ficticio de fin de datos) N_autos igual
a cero, condición de la repetición: N_autos ≠ 0
1. EJEMPLO DE ESCRITORIO
Caso I Caso II Caso III
N_autos = 3 N_autos = 1 N_autos = 0
Tipo = 4 Tipo = 2
Subtotal = 3 * 40 = 120 Subtotal = 1 * 30 = 30
Desc = 0.07 * 120 = 8.4 Total = 30
Total = 120 – 8.4 = 111.6
2. DICCIONARIO DE VARIABLES Identificador Descripción
Tipo Tipo de servicio
N_autos Número de autos
Precio Precio de cada uno de los servicios
Subtotal Subtotal
Desc Descuento
Total Total a pagar
3. FORMULAS Subtotal =N_autos * precio (F-1)
Desc = 0.07 * Subtotal (F-2)
Total = Subtotal - Desc (F-3)
Ver Capítulo IV Ejemplo 4.11 simplificaciones al respecto.
Nota que de las 4 fórmulas que se tenían con el método anterior ahora quedan reducidas a 1
Subtotal = N_autos * 25 (F-1) Subtotal = N_autos * 30 (F-2) Subtotal = N_autos * 35 (F-3) Subtotal = N_autos * 40 (F-4)
Fórmulas convencionales
__________________________________________________________________
312
4. RESUMEN DEL ANALISIS SALIDA: (Varios números) Total
1 en cada ciclo ENTRADA: (Varios números) Tipo, n_autos
2 en cada ciclo PROCESO: Proceso repetitivo controlado por centinela (N_autos ≠ 0), para cada cliente se lee
n_autos y el tipo, mediante decisiones anidadas (Diagrama de árbol adjunto), se asigna el precio
por el servicio correspondiente, seguidamente se calcula el subtotal respectivo, posteriormente si
n_autos ≥ 2, se calcula el descuento que corresponde .Al final se calcula e imprime Total.
5. DESGLOSES
1er. Nivel
1. Pasos Iniciales
2. Proceso (Clasificación e impresión)
3. Pasos Finales
2do. Nivel
1. Pasos Iniciales
1.1 Leer N_autos 2. Proceso
2.1 Mientras N_autos ≠ 0 haga lo siguiente repetidamente 2.1.1 Leer Tipo 2.1.2 Ver Si Tipo = 1 2.1.2.1 (V) Asignar 25 a Precio 2.1.2.2 (F) Ver Si Tipo = 2 2.1.2.2.1 (V) Asignar 30 a Precio 2.1.2.2.2 (F) Ver Si Tipo = 3 2.1.2.2.2.1 (V) Asignar 35 a Precio 2.1.2.2.2.2 (F) Asignar 40 a Precio 2.1.3 Calcular Subtotal (F-1)
2.1.4 Ver Si N_autos ≥ 2 2.1.3.1 (V) Hacer lo siguiente 2.1.3.1.1 Calcular Desc (F-2) 2.1.3.1.2 Calcular el Total (F-3) 2.1.3.1 (F) Asignar Subtotal a total 2.1.5 Imprimir Total 2.1.5 Imprimir “Total a Pagar : Lps. ”, Total 2.1.6 Leer (siguiente)N_autos 6. PRUEBA DE ESCRITORIO Datos: 3, 4, 1, 2, 0
__________________________________________________________________
313
Memoria:
N_autos Tipo Precio Subtotal Desc Total 3 1 0
4
2
40
30
120
30
8.4
111.60
30
Salida En la sección 3.5 se determino el mayor de 3 números utilizando un Arbol de Decisiones, si se trata
de mas de 3 números las comparaciones son difíciles de manejar, se presenta a continuación un
algoritmo para…
Ejemplo E.3 Determinar el mayor de una lista de 4 Números y su posición en la lista. Algoritmo Inicio C o m e n t a r i o s Lea X
Mayor X Se asume que el primer número leído es el mayor
Posición 1 por tanto está en la primera posición
Para i 2, N haga Desde el siguiente número en adelante
Lea X
Si X > mayor Compara si hay otro mayor que el supuesto mayor
Entonces
Mayor X de ser así, ese es el nuevo número mayor
Pos i y también se guarda su posición.
Fin si
Fin para
Escriba “El numero mayor es: “
Escriba mayor
Escriba “su posición en la lista de numeros es: “
Escriba posición
Fina
Total a Pagar:Lps.111.60 Total a Pagar:Lps.30 Muchas Gracias
__________________________________________________________________
314
Se deja la prueba de escritorio al lector con los siguientes datos: PRUEBA DE ESCRITORIO Datos: 4, 6, 8, 3 Memoria: Salida:
X Mayor posicion I
En este libro se han presentado diferentes maneras de realizar una repetición, por ejemplo: • La controlada por un centinela • Controlada por un contador • El Bloque Para • Controlada por una condición varia (por ejemplo x >200)
A continuación se presenta la controlada POR RESPUESTA DEL USUARIO Ejemplo E.4 Diseñar un algoritmo en el cual, de manera repetitiva, se de cómo entrada el monto de la venta de cada cliente y se le cobre considerando el 12 % de impuesto. Solulción: 1. ESTRATEGIA (Varios) (Varios) Salidas pago Entradas Venta Respuesta (‘N’ ó ‘n’ • Se deberá preguntar si se desea atender a mas clientes, cuando la respuesta sea ‘N’ de No o ‘n’ de “no”, el proceso terminará, se estará utilizando entonces variables tipo carácter para la Respuesta Algoritmo inicio Respuesta ‘S’ -- se inicializa con ‘S’para poder compara en el Mientras en el 1er.ciclo Mientras respuesta = ‘S’ o respuesta = ‘n’ haga Lea Venta Pago Venta + Venta * 0.12 -- ó pago Venta * 1.12 Escriba pago Escriba “¿Desea atender a otro cliente: (S/N) : ?” Lea respuesta Fin mientras final
__________________________________________________________________
315
EXAMEN CORTO No.1
1.- Dadas las siguientes expresiones, coloque en el espacio en blanco la(s) palabra(s) según aplique la clasificación: Proposición, Proposición Abierta o Ninguna.(12% ) a) Y*(2) +3*X=4 PROPOSICION ABIERTA
b) Este examen esta difícil NINGUNA
c) Programación I no es requisito para ____________ PROPOSICION ABIERTA
d) La mejor Universidad de Honduras es UNITEC NINGUNA
2.- Según las reglas para los identificadores de Variables, indique cual de los siguientes nombres están SI correctos y cuales NO (cuando sea Incorrecto, asignar un nombre que cumpla con dichas reglas, si no asigna un nombre correcto no se considerara válida la respuesta. (12%) Si/No Nombre correcto a.- 200Saldo NO Saldo200
b.- Total_pago SI __________________
c.- (mayor’r) NO Mayor_r
d.- Impuesto/ventas NO Impuesto_s_ventas
3.- Dadas las siguientes proposiciones abiertas
P(x) : x -10 = 20 s(x,y): x = y + 20 r(y): y * y =100 a) Construya la tabla de verdad de ~ p v (r ˆ s) (10%)
c) Determinar el valor de verdad de ~ p v (r ˆ s) utilizando el método directo (triángulo invertido) para los valores de: x = 10 y = -10 (10%)
Y compare su resultado con el de la Tabla de verdad del inciso a) Sustituyendo
P(10): 10 – 10 = 20 s(10, -10) : 10 = -10 + 20 r(-10) : (-10) * (-10) = 100
0 = 20 10 = 10 100 = 100 (F) (V) (V)
p r s ~ p r ˆ s ~ p v (r ˆ s) V V V F V V V V F F F F V F V F F F V F F F F F F V V V V V F V F V F V F F V V F V F F F V F V
__________________________________________________________________
316
~ p v ( r ˆ s )
~ F v ( V ˆ V)
V v V
V 4.- Encuentre el valor de verdad de las condiciones mostradas a continuación, realice
primero las asignaciones y reasignaciones dadas. Utilice el método del triángulo invertido:
4.1.- pago 567 4.2.- bono pago * 0.10 4.3.- total pago + bono 4.4.- bono 45 4.5.- total pago + bono (5%)
a) (No se cumple que (pago > 500 y bono < 40)) o (bono = 45) (10%) b) (pago + bono > 1000) o (bono < 45+50) (10%)
5.- Explique cada una de las partes de las partes de la Unidad Central de Proceso (17%)
__________________________________________________________________
317
EXAMEN PARCIAL I INSTRUCCIONES
Desarrolle los siguientes problemas en una forma clara y ordenada.
I. Coloque en el espacio en blanco la palabra que da sentido a lo planteado (10%)
1. ______________ Unidad que ejecuta los cálculos aritméticos y puede evaluar la
veracidad o falsedad de algunas proposiciones y efectuar operaciones lógicas
2.________________Acción de ejecutar las instrucciones a lápiz, simulando un
computador.
3. _______________Término para indicar el almacenamiento en una variable
4. ______________ Espacio reservado en la memoria donde podemos almacenar un dato.
5. ______________ Unidad que interpreta las instrucciones y dirige el resto de los
dispositivos para la ejecución del programa
II Para el siguiente desglose haga lo siguiente:
FORMULAS TOTAL VAL * NUM * 2 (F1) TOTAL VALOR * NUM * 3 (F2)
DATOS: 1,4,3, 3, 1,2, -0, 8,1
1. Pasos Iniciales 1.1 Leer NUM 2. Proceso 2.1 Mientras NUM ≠ 0 haga 2.1.1 Leer VAL 2.1.2 Asignar 0 a TOTAL 2.1.3 Ver si NUM = 1 2.1.3.1 (V) Calcular TOTAL según F1 2.1.3.2 (F) Calcular TOTAL según F2 2.1.4 Imprimir VALOR 2.1.5 Imprimir TOTAL 2.1.6 Leer NUM 2.2 ver si TOTAL < 20 2.2.1 (V) Asignar 1 a VALOR
2.2.2 (F) Asignar 0 a VALOR 2.3 Imprimir VALOR
Cual es el centinela utilizado en el desglose anterior? (5%) Identifique las estructuras utilizando los numerales (5%) Utilizando las fórmulas y datos, realice una prueba de escritorio
para el desglose anterior (20%)
__________________________________________________________________
318
III. Una empresa dedicada a la fabricación de puertas, necesita un programa para calcular el total a pagar por el cliente. Los tipos de puertas y los precios se presentan en la tabla a continuación:
Código Descripción Precio (Lps.) 1 Puerta de Pino 600.00 2 Puerta de Cedro 800.00 3 Puerta de Caoba 1300.00
Los códigos de los tipos de puertas son los que se muestran en la tabla. Dicha empresa tiene la siguiente promoción: si el cliente compra 3 puertas o más se otorga un descuento del 20% en el tipo 1 y un 30% en el tipo 2 y 3. Se le pide preparar un análisis del problema, algorimo en NOLAE, para un programa que calcule el total a pagar por concepto de entradas al concierto. Se deberá de proporcionar el código del revelado y el número de rollos a revelar. Se asume que cada cliente solicita revelados del mismo tipo. • Ejemplo de escritorio (5 %) • Diccionario de variables (5 %) • Formulas (5 %) • Resumen del análisis (5 %) • Programa en NOLAE (20 %) (Nota: Usar centinela) (Total 40 %)
__________________________________________________________________
319
EXAMEN PARCIAL II
Ejercicio #1 (20%)
Responda las siguientes preguntas, muestre su procedimiento cuando sea necesario: 1. ¿Cuáles son los dos tipos de cláusulas (no librerías) que se utilizan en un programa en
ADA 95? 2. Dadas las siguientes declaraciones: X: Integer; Y:Float; haga la prueba de escritorio
para estas asignaciones: X:= 8; Y:= 7.5; Y:= Y*5.0 + FLOAT(X); 3. Escriba el nombre del tipo de las variables que sólo pueden almacenar un símbolo
especial, un dígito o una letra. Ejercicio # 2 (30%).
Escriba el seudocódigo de un programa que calcule e imprima el valor de S:
S = 2/3 + 4/6 + 6/9 + 8/12 + ,... (51 términos) Ejercicio # 3 (50%)
El administrador de una maquila en donde se fabrican distintos tipos de camisetas, necesita un programa para calcular el total a pagar por cada cliente, considerando que la gerencia desea ganar un 10% sobre los costos de material. La información que se tiene la provee el Ingeniero de Planta, y se muestra en las siguientes tablas:
Descripción camiseta Yardas Tela /camiseta 1.- Camiseta para dama Tipo Alfa 1.5 2.- Camiseta juvenil Tipo Orion 2.0 3.- Camiseta para caballero Tipo Omega 1.5
Tipo Alfa 0.5
Tipo de Tela Precio por Yarda Alfa Lps 40
Orion Lps 30 Omega Lps 25
El programa deberá solicitar el Tipo de camiseta a comprar y Cantidad (de camisetas) a comprar, se deberá calcular el costo por materiales y el total a pagar por el cliente. Además al final del día se desea la siguiente información:
• Costos totales por materiales de cada uno de los tipos de camiseta vendidos • Ingresos por las ventas de cada uno de los tipos de camiseta
__________________________________________________________________
320
EXAMEN PARCIAL III
EJERCICIO 1 Usando procedimientos; escriba un programa en Ada para determinar si 20 solicitantes pueden optar a un préstamo en una entidad bancaria. Inicialmente se leen los datos para cada solicitante: valor del préstamo, ingreso mensual y valor de otras propiedades. El préstamo será otorgado a los solicitantes con ingreso mensual mayor de Lps. 10,000.00 y que obtengan más de 6 puntos. Los puntos se obtienen como sigue:
• 6 puntos, si el salario es mayor del valor de las propiedades y 2 puntos en caso contrario
• 4 puntos, si el valor del préstamo es menor o igual al ingreso mensual y 2 en caso contrario.
Se sugiere: Hacer un procedimiento (LECTURA) para leer los datos de cada solicitante Hacer un procedimiento para calcular total de puntos (CALCULO) Hacer un programa para imprimir respuesta al cliente, incluyendo el valor del préstamo y total de puntos obtenidos. (IMPRESIÓN) Ejercicio 2 Usando subrutinas y menús hacer un programa en Ada-95 para calcular lo que cada cliente debe pagar por alquiler de teléfono, los precios por minuto y la empresa se describen a continuación: EMPRESA Valor por minuto
1. TELHABLA Lps. 6.00 2. LORATEL Lps. 5.50 3. PERITEL Lps. 3.00
El programa debe solicitar información de los clientes: Tipo de cliente: Nuevo(N) o Viejo(V), Empresa y numero de Minutos utilizados El programa debe calcular el total a pagar por el cliente, dando un descuento del 5% si es cliente viejo para producto 1 y 3 y del 10% para producto 2. Además preparar un reporte que muestre lo siguiente:
1. Total de ingresos 2. Total de minutos pagados en LORATEL 3. Total de clientes atendidos
__________________________________________________________________
321
APENDICE F PRACTICA DE LABORATORIO LENGUAJE DE PROGRAMACION ADA95 INSTRUCCIONES: La presente guía de laboratorio está elaborada para ayudarte en la clase de Programación I, debes seguir las instrucciones descritas. Si tienes alguna duda consulta con tu maestro o tutor. F.1 PRIMER PROGRAMA (concatenación)
Para comenzar a trabajar, debe arrancar su computadora y entrar a Windows Estando en la ventana principal, activa el menú inicio y ubíquese en Programas. Seleccione GNAT ADA95 COMPILER y luego de un clic a ADA GIDE. Estando el editor de ADA escribir el siguiente programa tal como se muestra a continuación.
(click FILE escoger New) -------------------------------------------DIGITE EL SIGUIENTE PROGRAMA----------------------------
-- NOMBRE : PROMEDIO -- Este programa mediante la asignación, calcula el promedio de tres -- alificaciones e imprime las tres calificaciones y el promedio. -- Programa elaborado por Nombre del alumno: , Fecha: With Ada.Text_IO; use Ada.Text_IO; With Ada.Integer_Text_IO; use Ada.Integer_Text_IO; Procedure promedio is Nota1:Integer; Nota2:Integer; Nota3:Integer; Prom:Integer; No_Exam:Integer; Begin No_Exam:=3; Nota1:=80; Nota2:=95; Nota3:=75; Prom:=(nota1+nota2+nota3)/No_Exam; Put( “ CALCULO DE PROMEDIO”); New_Line; Put(“Nota del primer examen: “); Put(nota1);New_Line; Put(“Nota del segundo examen: “); Put(nota2);New_Line; Put(“Nota del tercer examen: “); Put(nota3);New_Line; Put(“Promedio Final: “); Put(prom); Put(“Teclee << enter>> para continuar”); -- Para hacer una pausa Skip_Line; -- en su programa End Promedio;
__________________________________________________________________
322
Una vez que haya editado el programa debe compilarlo presionando F3, el compilador solicitará salvar su programa, debe guardarlo con promedio; identifique sus errores en la ventana inferior, de un click sobre el primer error y el cursor se ubicara en la parte del programa en donde este ocurrió, corrija y pase al segundo error con un click, repita el procedimiento de corrección para cada error indicado.
Si tuvo errores y los corrigió compile el programa nuevamente. Cada vez el compilador pedirá
guardar las modificaciones.
Ejecute o corra el programa presionando F4, vea sus resultados y compruebe
Para regresar al editor de ADA presione la tecla ENTER (cerrando la ventana ….).
Debe guardar su programa en su disco.
Para grabaciones subsiguientes use CTRL +S NOTA: Si el ejercicio anterior lo está haciendo con su maestro de la clase, sugiero que se modifique, leyendo los datos desde el teclado, es decir usado get(nota1), get(nota2), get(nota3) y los skp_line (respectivos) en vez de la asignación. Compilar nuevamente el programa y observar que aparece la pantalla limpia y el cursor pulsando, teclear las notas presionando <<Enter>> por cada nota que introduce. Lo anterior lleva a la necesidad de hacer un programa amigable y lo hacemos escribiendo un mensaje antes de cada get, así por ejemplo:
Sustituir la instrucción Get(Nota1) por lo siguiente:
Put(“Introduzca la nota 1: “); Get(Nota1); skip_line; -- colocar skip_line después de cada lectura
-- numérica y de tipo caracter. OBS:Después de hacer una modificación a un programa en ADA siempre se deberán “salvar” los
cambios antes de volver a compilar y correr su programa.
F.2
SEGUNDO PROGRAMA (concatenación)
Instrucciones: Compile y corra el programa dado a continuación. Salvelo con el nombre Suma. -------------------------------------------------------------------- -- NOMBRE: SUMA -- -- Este programa calcula la suma de dos números enteros -- los cuales son leídos desde el teclado ------------------------------------------------------------------------------ with Ada.Text_IO, Ada.Integer_Text_IO;
__________________________________________________________________
323
use Ada.Text_IO, Ada.Integer_Text_IO; procedure Suma is x, y, sum : Integer; begin Get(x); Skip_line; Get (y); Skip_line; sum:=x+y; put(" La Suma = "); put(sum); end Suma; Observación: En el programa no puede utilizarse una variable que tenga el mismo nombre con que se salvo dicho programa. Ahora se modificara el programa anterior, haciéndolo amistoso. Insertar la siguiente línea : Put(“Teclee un numero: “) antes de Get(x): Insertar Put(Teclee otro numero: “); antes de Get(y); F.3 TERCER PROGRAMA (decisión) Edite y compile el siguiente programa. Sálvelo con el nombre Venta -- NOMBRE: VENTA -- -- Este programa lee la venta de un artículo, luego le -- hace un descuento, le calcula el impuesto sobre venta -- y calcula el total a pagar. Al final imprime el descuento, -- nuevo valor, impuesto sobre venta y total a pagar. --------------------------------------------------------------------- with Ada.Text_IO, Ada.float_Text_IO; --1 use Ada.Text_IO, Ada.float_Text_IO; --2 procedure Venta is --3 Val_venta, Descuento, Nuevo_val, isv, Total : float; --4 Begin --5 Put("Ingrese el valor de la venta: "); --6 Get(Val_venta);skip_line; --7 If val_Venta > 200.00 --8
then --9 Descuento:=Val_Venta*0.2; --10
else --11 Descuento:=Val_Venta*0.1; --12
end if; --13
__________________________________________________________________
324
Nuevo_Val:=Val_Venta-Descuento; --14 isv:=Nuevo_val*0.12; --15 Total:=Nuevo_val+isv; --16 New_Line; --17 Put("Descuento:");Put(Item=>descuento,fore=>5,aft=>2,exp=>0);--18 New_Line; --19 Put("Nuevo Valor:");Put(Nuevo_Val,0,2,0); --20 New_Line; --21 Put("Impuesto sobre Venta:");Put(isv,0,2,0); --22 New_Line; --23 Put("Total a Pagar:");Put(Total); --24 end Venta; --25 Nota: En este programa se ilustra el formato de salida de los numero reales La línea 18 presenta en el Put algunos “PARAMETROS” que significan lo siguiente:
Item : Variable o constante a imprimir Fore : Número de espacios reservados para posicionar los dígitos
ubicados antes del punto decimal y ajustados hacia la derecha. Aft : Número de dígitos ubicados después del punto decimal Exp : Determina la representación exponencial del número.
Si Exp =>0, el número se escribe sin parte exponencial. De lo contrario los números lucen como 1.23E+01, y no son fácilmente legibles.
F.4 CUARTO PROGRAMA (Repetición) Edite y compile el siguiente programa. Salvarlo con el nombre Alquiler -- -- NOMBRE: ALQUILER -- Este programa utiliza un ciclo repetitivo para calcular -- el pago por cliente por el alquiler de un automovil, -- imprime el pago, además calcula el total recaudado -- por la empresa -- with Ada.Text_Io, Ada.Float_Text_Io; use Ada.Text_Io, Ada.Float_Text_Io; procedure Alquiler is
Km, Pago : Float;
Recaudado : Float; --* Ver llamada al final de la pagina begin
Recaudado:=0.0; --para números reales colocar siempre decimales, * --Ver llamada al final del ejercicio…
Put("INGRESE EL KILOMETRAJE: "); Get(Km);Skip_line;
__________________________________________________________________
325
While Km /=0.0 loop if Km < 100.0 -- Variable float al compararse con una Constante numérica
--a esta se le agrega punto decimal then
Pago:=200.0+0.5*Km; else
Pago:=215.0+0.35*Km; end if; Recaudado:=Recaudado+Pago; Put("Total a pagar:");Put(Item=>Pago,Fore=>8,Aft=>2,exp=>0); New_Line; Put("INGRESE EL KILOMETRAJE: "); Get(Km);Skip_line;
end loop; Put(“Total de ingresos Lps “); Put(recaudado,0,2,0); end Alquiler; Observación: En ADA95 es posible inicializar variables al mismo tiempo que se declara el tipo de esta, por ejemplo en el caso anterior es posible escribir la variable Recaudado en la sección de declaración de variables de la siguiente manera:
Recaudado : Float:=0.0; Así, la línea de inicialización de la variable (en el cuerpo del programa) Recaudado:=0.0; ya no es necesaria.
__________________________________________________________________
326
APENDICE G
LISTADO DE LOS EJEMPLOS UTILIZADOS EN LOS CAPITULOS 3 AL 6
__________________________________________________________________
327
APENDICE G
LISTADO DE LOS EJEMPLOS UTILIZADOS EN LOS CAPITULOS 3 AL 6
CAPITULO 3 Página 3.3 ELEMENTOS EN EL ANÁLISIS DE UN P.O.P. PARTE I 43 Ejemplo 3.1 (Resumen del Análisis, calificaciones) 48 Ejemplo 3.2 (Promedio final de un estudiante) 50 Ejemplo 3.3 (Pendiente e intercepto) 56 3.4 DESGLOSES Y PRUEBAS DE ESCRITORIO 59 3.4.1 DESGLOSES EN SECUENCIA 60 Ejemplo 3.4 (Secuencia, Sueldo neto) 60 Ejemplo 3.5 (Repaso, Secuencia, Venta de dos artículos) 68 3.4.2 DESGLOSE CON INSTRUCCIONES EN DECISION 72 Ejemplo 3.6 (Decisión Venta con descuentos,) 72 Ejemplo 3.7 (Decisión, Boletos Tegucigalpa, San Pedro Sula SPS,) 77 Ejemplo 3.8 (Decisión anidada, Clasificar un número en negativo, cero y positivo.) 81 3.4.3 DESGLOSE CON INSTRUCCIONES EN REPETICION 83 Ejemplo 3.9 (Repetición centinela, Kilometraje) 83 Ejemplo 3.10 (Repetición centinela, Boletos Tegucigalpa, SPS.) 92 3.5 ELEMENTOS EN EL ANALISIS DE UN P.O.P PARTE II 98 3.5.1 DIAGRAMA DE ARBOL DE DECISIONES 98 Ejemplo 3.11 (Arbol de decisiones, Mayor de 3 números,) 98 3.5.2. REPETICION CON DECISIONES ANIDADAS 104 Ejemplo 3.12 (Arbol de decisiones, Repetición centinela, Aumentos por categoría,) 104
Ejercicio del Apéndice A, No.36 Ejemplo 3.13 (Arbol de decisiones, Repetición centinela, Lavado de autos, 108
Apéndice A No. 37) Ejemplo 3.14 (Arbol de decisiones, decisión anidada, variable real, rangos, CI,) 113 CAPITULO 4 119 4.2.1 BLOQUES ESTRUCTURADOS ATOMICOS E
INTRODUCCION A LA NOTACION DE DIAGRAMA DE FLUJO 121 Ejemplo 4.1 (Diagrama de Flujo, Concatenación, Planilla de sueldos) 123 4.4.- ALGORITMOS SEUDOCODIFICADOS CON CONCATENACION 126 Ejemplo 4.2(Nolae, Concatenación, Leer dos números, imprimir suma) 128 Ejemplo 4.3 (NOlae , Decisión, Venta de dos artículos) 129 4.5.- ALGORITMO SEUDOCODIFICADOS CON DECISION 131 Ejemplo 4.4 (Nolae, Decisión, Venta con descuento) 133
__________________________________________________________________
328
Ejemplo 4.5 (NOlae, Decisión, Boletos Tegucigalpa, SPS) 134 Ejemplo 4.6 (Nolae, Decisiones anidadas, Número negativo, cero positivo) 135 4.6 ALGORITMOS SEUCODODIFICADOS CON REPETICION 136 Ejemplo 4.7 (Nolae, Repetición centinela, Kilometraje) 138 Ejemplo 4.8 (Nolae, Repetición centinela, Boletos Tegucigalpa, SPS) 139 Ejemplo 4.9 (Nolae, Repetición centinela, CI) en mención Ej 3.8 140 Ejemplo 4.10 (Nolae, Decisiones anidadas, Repetición centinela, Lavado de Autos) 142 Ejemplo 4.11 (Nolae, Decisiones anidadas, Repetición centinela, Lavado de Autos,
variante) 143 4.7 DIAGRAMACION DE FLUJO DE ALGORITMOS ESTRUCTURADOS 144 Ejemplo 4.12 (Diagrama de flujo del algoritmo del Ejemplo 4.7
(Repetición centinela,Km.) 146 4.9. - CENTINELAS, CONTADORES Y ACUMULADORES 151 4.9.1 Centinelas 151 Ejemplo 4.13 (Centinela, NOlae, Kilometraje) 152 4.9.2 Contadores 153 Ejemplo 4.14 (Contador) 153 Ejemplo 4.15 (Contadores, Votación entre 2 candidatos.) 154 Ejemplo 4.16 (Conteo de clientes con 20% y 10% de descuento,
referencia al Ejemplo 4.4) 158 4.9.3 Acumuladores 162 Ejemplo 4.17 (Ingreso total, Conteo de Boletos de Tegucigalpa y San Pedro Sula) 163 4.9.4 Repetición controlada por contador 167 Ejemplo 4.18 (Repetición controlada por contador, leer y sumar N números) 169 Ejemplo 4.19 (Repetición controlada por contador, acumuladores,descuentos,
promedios) 172 Ejemplo 4.20 (Repetición controlada por contador, Productorio de N números) 175 CAPITULO 5 ESTRUCTURAS DERIVADAS 179 5.1 ASOCIATIVIDAD DE LA CONCATENACION 179 5.2 VARIANTES Y DERIVADAS DE LA DECISION 181 5.2.1 La decisión abreviada 181 Ejemplo 5.1 (Decisión abreviada, segmento Premio, Apéndice A No.42) 182 5.2.2 Las decisiones anidadas y las decisiones concatenadas 183 Ejemplo 5.2 (Nolae, Arbol de decisiones, el mayor de 3 números) 183 5.2.3 BLOQUE CASO 188 Ejemplo 5.3 (Bloque Caso, Biblioteca.) 190 Ejemplo 5.4 (Bloque Caso, Categorías, repetición controlada por contador, contadores, 193 acumuladores) Ejemplo 5.5 (Lavado de autos, Bloque caso, contadores y acumuladores) 198
__________________________________________________________________
329
5.3.- VARIANTES Y DERIVADAS DE LA REPETICION 202 5.3.1 Bloque Para 202 5.3.1.1 Bloque Para y su uso con contadores y acumuladores 203 Ejemplo 5.6 (Bloque Para, leer y sumar N números) 203 Ejemplo 5.7 (Bloque Para, contadores, acumuladores, descuentos, ingresos totales) 204 Ejemplo 5.8 (Bloque Para, Bloque Caso, , contadores, acumuladores, Categorías) 206 5.3.1.2 Aplicaciones del Bloque Para, Sucesiones 208 Ejemplo 5.9 (Bloque Para, Sucesión , números pares, inicialización en cero) 208 Ejemplo 5.10 (Bloque Para, Sucesión, números pares, inicialización en 2) 209 Ejemplo 5.11 (Bloque Para, Potencias de 3,) 210 Ejemplo 5.12 (Bloque Para, potencias de 3, signos alternos, ) 212 5.3.1.3 Aplicaciones del Bloque para, Series 213 Ejemplo 5.13 (Bloque Para Serie, suma de pares) 213 Ejemplo 5.14 (Bloque Para, Sucesión, serie, fracciones signos alternos) 215 Ejemplo 5.15 (Bloque Para Serie y Sucesión incrementos alternos) 217 Ejemplo 5.16 (Bloque Para, Factorial) 219 Ejemplo 5.3.2 Bloque “Repita-hasta” 221 Ejemplo 5.17 (Repita-hasta, Suma) 223 Ejemplo 5.18 (Repita-hasta, Kilometraje) 226 CAPITULO 6 229 SUBALGORITMOS, ARREGLOS Y ELEMENTOS DE ESTRUCTURAS DE DATOS 6.1 Subalgoritmos 229 Ejemplo 6.1 (Introducción a los subalgoritmos, Promedio de un estudiante) 229 Ejemplo 6.2 (Subalgoritmos, Promedio de un estudiante) 231 Ejemplo 6.3(Subalgoritmos Promedio de N alumnos) 232 6.2 MENUS, UNA APLICACIÓN DE LOS SUBALGORITMOS 234 Ejemplo 6.4 (Menús, Calculadora) 234 Ejemplo 6.5 (Menús, Agencia Turismo, Islas) 239 Ejemplo 6.6 (Menús, Agencia Turismo, Islas, preguntas en preferencias, contadores,
acumuladores, reportes) 244 Ejemplo 6.7 (Menús, Agencia Turismo Islas, reporte al final) 248 6.3. DIAGRAMA JERARQUICO DE PROCEDIMIENTOS (DJP) 250 Ejemplo 6.8(DJP, Menús, calculadora) 250 Ejemplo 6.9 (DJP, Menús, Agencia Turismo, Islas) 251 Ejemplo 6.10 (DJP, Menús, Agencia Turismo, reporte) 252 Ejemplo 6.11(DJP, Menús, Agencia Turismo, Biosfera, mas subalgoritmos) 252 6.4 Arreglos Unidimensionados 258 6.4.1 Operaciones con Arreglos 260 Ejemplo 6.12 (Arreglos, Leer un arreglo de longitud N) 261 Ejemplo 6.13 (Arreglos, manipulación, lectura, cálculos, escritura) 262 Ejemplo 6.14 (Arreglos, elemento mayor y su posición) 264
__________________________________________________________________
330
6.4.2 Arreglos Paralelos 266 Ejemplo 6.15 (Arreglos paralelos, Pagos quincenales, planilla) 266 Ejemplo 6.16 (Arreglos Paralelos, Porcentajes de aportación) 268 Ejemplo 6.17 (Arreglos, Contadores como índices de un Arreglo) 270 6.4.3 Arreglos y subalgoritmos 272 Ejemplo 6.18 (Arreglos paralelos, Subalgoritmos i-ésimos, Pagos quincenales,
planilla) 272 Ejemplo 6.19 (Arreglos paralelos, Subalgoritmos completos, Pagos quincenales,
planilla) Variante de los Ejemplos 6.15 y 6.18 274 Ejemplo 6.20 (Arreglos paralelos, Menús, Pagos quincenales, planilla) Variante de los Ejemplos 6.15 y 6.19 276
__________________________________________________________________
331
BIBLIOGRAFÍA
1.- “Fundamentos de Ada 95”. Autor Eraldo Ventura Panchamé. Co-autora Ing. Rosbinda
Pacheco Banegas, año 2002, UNITEC.
2. “Fundamentos de Programación”, Autor Luis Joyanes A., Luis Rodríguez, Matilde
Fernández a.. Editorial Mc Graw Hill, Segunda Edición, Año 2003
3. Referencia. Metodología de la Programación. Autor Luis J. Aguilar. Editorial McGraw
Hill 1era. Edición.
4. Referencia. “Ada 95 The craft of object oriented programming”. Autor John English
University of Brighton, Editorial Prentice Hall, Edición version 1.0. Año 1997 .
5. “Turbo Pascal con aplicaciones 4.0-6.0.”, México: Grupo Editorial Iberoamérica,
segunda edición , 1992.