P. 1
89105045-MetodologiaDeLaProgramacion.pdf

89105045-MetodologiaDeLaProgramacion.pdf

|Views: 216|Likes:

More info:

Published by: Carmen María Mendoza on Feb 19, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

04/30/2014

pdf

text

original

Sections

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

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

ii

SOBRE LOS AUTORES

L

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

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.

ii

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.

EL PRINCIPIO DE LA SABIDURIA ES EL TEMOR DE JEHOVA

i

Indice General

Introducción Capítulo 1 1.1 1.2 Elementos de lógica Matemática Proposiciones Operadores Lógicos y Tablas de Verdad La Negación (no)

v 1 1 7 7 9 10 16 21 23 23 26 30 38 43 43 46 49 59 60 72 83

La Conjunción (y) La Disyunción (o) 1.3 1.4 Capítulo 2 2.1 2.2 2.3 2.4 Capítulo 3 3.1 3.2 3.3 3.4 Tautologías, Contradicciones y Equivalencias Notación Booleana Concepto de Computador y almacenamiento Concepto de Von Neumann y de Programación Concepto de almacenamiento y variable Concepto de Asignación Condiciones y su Evaluación Técnica de Desglose Introducción al Análisis de un Programa Objeto del Programa Resumen del Análisis de acuerdo al modelo Von Neumann Elementos en el Análisis de un P.O.P. Desgloses y Pruebas de escritorio 3.4.1 3.4.2 3.4.3 Desgloses en Secuencia Desglose con instrucciones de Decisión Desglose con instrucciones de Repetición i Parte I

3.5

Elementos en el Análisisde un P.O.P. 3.5.1 Diagrama de Arbol de Decisiones

Parte II

98 98 104 116 119 119 121 126 126 131 136 144 149 151 151 153 162 167 179 179 181 181 183 188 202 202 203 208 213

3.5.2 Repetición con Decisiones Anidadas 3.6 Capítulo 4 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 Concepto de Algoritmo Fundamentos de Programación Estructurada Concepto de Sistema Bloques estructurados atómicos e introducción a la Notación de Diagrama de Flujo Introducción al Seudocódigo Nolae con los B.e.a Algoritmos seudocodificados con Concatenación Algoritmos seudocodificados con Decisión Algoritmos seudocodificados con Repetición Diagramas de Flujo con Algoritmos Estructurados Relación entre Desgloses, Algoritmos, Diagramas Centinelas, Contadores Acumuladores 4.9.1 Centinelas 4.9.2 Contadores 4.9.3 4.9.4 Capítulo 5 5.1 5.2 Acumuladores Repetición controlada por contador

Estructuras Derivadas Asociatividad de la concatenación Variantes y derivadas de la Decisión 5.2.1 La Decisión Abreviada 5.2.2 Las Decisiones anidadas y las decisiones Concatenadas 5.2.3 Bloque Caso

5.3

Variantes y derivadas de la Repetición 5.3.1 Bloque Para 5.3.1.1 Aplicaciones con: Contadores y Acumuladores 5.3.1.2 Aplicaciones: Sucesiones 5.3.1.3 Aplicaciones: Series Finitas ii

5.3.2

Bloque repita-Hasta

221

Capítulo 6 6.1 6.2 6.3 6.4

Subalgoritmos y Arreglos (elementos de estructura de datos) 229 Subalgoritmos Menús, una aplicación de los Subalgoritmos Diagrama Jerárquico de procedimientos Arreglos Unidimensionados 6.4.1 Operaciones con Arreglos 6.4.2 Arreglos Paralelos 6.4.3 Arreglos y subalgoritmos 229 234 250 258 260 266 272

APENDICES A B C D E Ejercicios de las secciones: 2.2 a la 4.6 Ejercicios de las secciones Ejercicios de las secciones 4.7 a 5.2 5.2 a 6.3 279 289 299 305
307 315

Ejercicios de la sección (arreglos) 6.4
Variantes en la resolución de algunos ejemplos y Algunos ejercicios clásicos Prácticas de Auto-evaluación, (lógica y tres parciales)

F G

Práctica de Laboratorio 01

Lenguaje de programación ADA95 321 327 331

Listado de los ejemplos utilizados en los Capítulos 3 al 6

BIBLIOGRAFIA

iii

EL CORAZON DEL ENTENDIDO ADQUIERE SABIDURIA; Y EL OIDO DE LOS SABIOS BUSCA LA CIENCIA

iv

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 v

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

vi

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.

vii

“Dímelo y lo olvidaré Muéstramelo y lo recordaré; Haciéndolo lo entenderé.”

La importancia de practicar

viii

CAPITULO 1

ELEMENTOS DE LOGICA MATEMATICA
1.1 PROPOSICIONES Ejemplos: Una proposición es la aseveración o negación de algo que puede ser verdadero o falso. • 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, Si se afirma algo falso, Si se niega Si se niega algo verdadero, algo falso,

la proposición es verdadera. la proposición es falsa. la proposición es falsa. la proposición es verdadera.

____________________________________________________________ 1

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 • • • • ¿De qué color es tu camisa? ¡ Qué lindo día hace hoy ¡ Razón por la cual NO es proposición es una oración interrogativa oración exclamativa y una apreciación subjetiva es una oración imperativa está incompleta

Por favor, sume el primer número con el último. ___________ es mi hermano.

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.

____________________________________________________________ 2

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. La unidad monetaria de Honduras es el Euro. (V) (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 Al espacio en blanco de una proposición abierta se le llamará variable y se representará por una letra (como x, y, z). De esta manera, la proposición abierta anterior se rescribe: • por p(x). 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. 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 ____________________________________________________________ 3 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

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

____________________________________________________________ 4

Ejemplos 1.2
1. p(x) : x es la moneda de Japón p (el Yen) : El Yen es la moneda de Japón 2. p(x) : x es un número mayor que 20 p (12) : 12 es un número mayor que 20 3. p(x,y) : x es un múltiplo de y p (35,5) : 35 es un múltiplo de 5 (Verdadero) (Falso) (Verdadero)

El Conjunto Solución (representado por C.S.) lo conforman aquellos elementos de U que hacen que la proposición sea verdadera.

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

____________________________________________________________ 5

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 Al sustituir los valores indicados: para x=2, z = 5, y = -1 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 ___________ ___________ ___________ ___________ ___________ ___________ ___________ ___________ ___________ ___________ ___________

____________________________________________________________ 6

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 No es cierto que la semana tenga 7 días o bien

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

____________________________________________________________ 7

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 V F ~p F V

Ejemplo 1.6
Dada la proposición q: 2 + 2 ≠ 4, redactar ~q y Solución: Proposición q: 2 + 2 ≠ 4 ~ q: ~ (2 +2 ≠ 4) ~ q: 2 + 2 = 4 Valor de verdad (F) (V) (V) es la proposición original, su negación es: ó en forma equivalente determinar su valor de verdad

Considerando el ejemplo anterior, se presenta una tabla de equivalencia de negación para símbolos matemáticos: SIMBOLO NEGACION

= ≠ > ≥ < ≤
Ejemplo 1.7
p(x): 2 + 3 * x > 10 ~p(x): ~ (2 + 3 * x > 10) ~ p(x): 2 + 3 * x < 10

≠ = ≤ < ≥ >
Ejemplo 1.8
q(x, y): x < y ~ q(x, y): ~(x < y) ~ q(x, y): x > y

____________________________________________________________ 8

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:

p V V
F F

q V F
V F

p^q V F
F F
La conjunción solamente es verdadera si las dos (proposiciones) son verdaderas.

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.

____________________________________________________________ 9

Ejemplo 1.9
Determinar el valor de verdad de p ^ q: p ^ q: Hoy es martes V ^ ^ ? F está lloviendo F • Evaluar cada proposición simple. •Evaluar la conjunción. • Se trabaja en forma de triángulo invertido1 Usando la Tabla de Verdad P V q V p^q V

V
F F

F
V F

F
F F

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 p V V F q V F V pvq V V V

F

F

F

La disyunción solamente es falsa si ambas son falsas

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.

____________________________________________________________ 10

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 ? V p V q V Pvq V •Evaluación de cada proposición simple. • Evaluación de la disyunción.

V
F F

F
V F

V
V F

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

____________________________________________________________ 11

p V V F F

q V F V F

A continuación, se encuentran los valores que corresponderían a ~q: p V V F F q V F V F ~q F V 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 V V F F q V F V F ~q F V F V pv~q V V F 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) : q(x, y): los valores: Solución: Por simplificación se escribirá ~q ^ (~ p v q) y construyendo la tabla, columna a columna ____________________________________________________________ 12 x>0 x<y ~ q(x, y) ^ [~p(x) v q(x, y) ] y posteriormente evaluarla para e y=2 X=5

Construir la tabla de:

p
V V F F

q
V F V F

~p
F F V V

~p v q
V F V V

~q
F V F V

~q ^ (~ p v q)
F F F V Tabla 1.2.1

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

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 q (5,2): 5 < 2, (sustituyendo 5 por x) es Verdadero que es Falso. y

Observando nuevamente la tabla de verdad:

p V V F F

q V F V F

~p F F V V

~p v q V F V V

~q F V F V

~q ^ (~ p v q) F F F 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

____________________________________________________________ 13

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

Método Directo

~ F ^ (~ V V ^ F

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.

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

p
V V V V F F F F

q
V V F F V V F F

r
V F V F V F V F

~p
F F F F V V V V

pvq
V V V V V V F F

~pvr
V F V F V V V V

(p v q) ^ (~p v r)
V F V F V V F F

____________________________________________________________ 14

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 V v v v V ( (11< 6) (F F ^ ^ F) (12 < 5) )

B. Método de Sustitución (o Directo , es el mas corto):
p(x): x * x ≠ 36 P (6) : 6 * 6 ≠ 36 36 ≠ 36 (F) q(x, y): y + 1 < x q (6,10) : 10 + 1 < 6 11 < 6 (F) r(x, y): 2 * x > y /2 r (10): 2 * 6 > 10/2 12 > 5 (V)

Sustituyendo los valores de verdad encontrados en la proposición de interés: ~ p v (q ^ ~ r),
~Fv(F^~V) Vv(F^F) V v F

V C. Usando la Tabla de Verdad (habiendo evaluado previamente cada proposición):
p V V V V F F F F q V V F F V V F F r V F V F V F V F ~p F F F F V V V V ~r F V F V F V F V q^~r F V F F F V F F ~p v (q^ ~ r) F V F F V V V V

RESPUESTA: El valor de verdad de ~ p v (q ^ ~ r) es V ____________________________________________________________ 15

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) b) c) d) e) f) g) h) i) j) 2. Dadas a) b) ~p^q ~(~p) ^ p ~ (~ p v q) ~ ( p ^ q) v ( p ^ ~ q ) ~ p v ( r ^ s) p ^ (~ r ^ s ) (r v ~ t) ^ ~q p v ~ (r v ~p) ( p v s ) ^ (( ~ q ^ s ) v p ) ~ (p ^ ~ (~ r ^ ~ s)) p ( x ) : x < 10 Construya la tabla para i) ii) iii) iv) x=5 x=3 x = 11 x = 20 y=5 y=0 y = 11 y=7 y q ( x,y ) : x = y

pv(~p^q)

Encuentre el valor de verdad para el caso de que:

1.3

TAUTOLOGIAS, CONTRADICCIONES Y EQUIVALENCIAS

Considérese la tabla de verdad de p v ~ p p V F ~p F V p v ~p V V

____________________________________________________________ 16

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.

Una tautología es una proposición cuya tabla resulta en “Verdadera” en cada
Por otra parte, si se considera la proposición p ^ ~ p P V F ~p F V p ^ ~p F F

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.
Por último, considerando las proposiciones (~ p ^ ~ q) y ~(pvq) (~ p ^ ~ q):

Se elaborará las tablas de verdad de cada una de ellas, se tiene para

p
V V F F

q
V F V F

~p
F F V V

~q
F V F V

~p ^ ~q
F F F V

Ahora para ~ ( p v q): p
V V F

q
V F V

pvq
V V V

~ (p v q)
F F 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í: ~(pvq) ⇔ (~p^~q)

____________________________________________________________ 17

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:

P V V V V F F F F

q V V F F V V F F

r V F V F V F V F

qvr V V V F V V V F

p v (q v r) V V V V V V V F

pvq V V V V V V F F

(p v q) v r V V V V V V V F

Son Equivalentes Dos proposiciones son equivalentes cuando para cada renglón (de sus respectivas tablas de verdad) tienen los mismos valores de verdad.

Se concluye entonces que las dos proposiciones anteriores son equivalentes. Es decir: p v (q v r) ⇔ (p v q) v r

____________________________________________________________ 18

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 pvq⇔qvp p^q⇔q^p

Asociatividad (pvq)v r⇔pv(qvr) (p^q)^r⇔p^(q^r)

Distributividad p ^ ( q v r ) ⇔ ( p ^ q ) v (p ^ r ) pv(q^r)⇔(pvq)^(pvr)

Identidad pvF⇔p pvp⇔p p^V⇔p p^p⇔p

Ídem potencia

Elemento absorbente p^F⇔F pvV⇔V Absorción p^(pvq)⇔pv(p^q)⇔p

DeMorgan ~ ( p v q ) ⇔ ~ p ^ ~ q, ~(p^q)⇔~pv~q

____________________________________________________________ 19

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) P V V F F q V F V F F V F V F p ~q F

b) p V V F F q V F V F V V F F F V F q ~( )

____________________________________________________________ 20

c)

p V V V V F F F F

q V V F F V V

r V F V F F F V F F V V F

(p

) ~q V V F F

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: p 0 1 ~p 1 0

Conjunción:

P 0 0 1 1

q 0 1 0 1

p^q 0 0 0 1

____________________________________________________________ 21

Disyunción: P 0 0 1 1 q 0 1 0 1 pvq 0 1 1 1

____________________________________________________________ 22

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:

U.C.P y Entrada Almacenamiento Salida

_______________________________________________________________ 23

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 _______________________________________________________________ 24

(en las computadoras se puede considerar que la memoria auxiliar reside en los discos magnéticos).

Unidad Unidad Lógica/Aritmética Lógica/Aritmética

Unidad de CONTROL CONTROL

Memoria Auxiliar

Memoria – MemoriaAlmacenamiento Almacenamiento Principal Principal

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

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

_____ 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
. Una variable es un espacio reservado en la memoria en donde se puede almacenar un dato

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

1500

De esta manera, la variable tiene dos componentes: _______________________________________________________________ 26

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:

TOTAL 1,500

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. 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 Otras formas de expresar esta situación

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

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 18 PAGO 15 RESTO 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. A la acción de ejecutar las instrucciones a lápiz, simulando un computador, se le llama prueba de escritorio (P.E.).

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.

_______________________________________________________________ 28

T45 10

TOTAL 2,300

IMPUESTO 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 3. Coloque -5.7 en X762 Guarde en TFC4 el numero 0.002 Ponga -2/3 en HY23 En YT_23 almacene 100000 _______________________________________________________________ 29 2. En ALTURA guarde 1.80 En PESO almacene 140 En CINTURA ponga 31

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. Se escoge el término asignar para indicar el almacenamiento de un valor en una variable. 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 2. TOTAL 3. IMPUESTO 10 2300 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 K 14, primero se borra el 6

Y se escribe el 14

_______________________________________________________________ 30

K 14

Lo cual es el resultado final de las dos asignaciones K K 6 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 K 6 Luego al ejecutar K Primero se tacha el 6 K 6 14 luego se escribe el 14 K 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

_______________________________________________________________ 31

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 R R T 10 2 43 87

Las asignaciones se ejecutan en el orden que aparecen T T 10 10 T 10 R 2 R 2

R T 10

34 R 2 34

T T 10 87

87 R 2 34

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.

_______________________________________________________________ 32

Ejemplo 2.4
Realice la prueba de escritorio para las siguientes asignaciones RIS X2 TOT SOL 10 RIS + 3 RIS 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 10

X2 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 10 X2 13

RIS TOT 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ó. _______________________________________________________________ 33

Finalmente se ejecuta SOL RIS 0 X2 13

5 * X2 TOT 10 SOL 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 A 23 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 A 23 …Luego A 23 28

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

_______________________________________________________________ 34

Jerarquía de las operaciones

( ), potencias *, / +, Menor Prioridad 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. Mayor Prioridad

Ejemplo 2.6
p q r r q s Para 20 5 p+q r+5 q*2 p – q * (2 – r/q) (1)1 determinar el valor de “s” se considera la prioridad en las operaciones p 20 q 5 10 r 25 30 s (1) 30

anteriormente citadas, así:
(1)

S

p – q * (2 – r/q) 20 – 10 * (2 – 30/10) 20 – 10 * (2 – 3) 20 – 10 * (–1) 20 + 10 30

S S S S S

1

Se ilustra el desarrollo de las operaciones respetando la prioridad en las operaciones

_______________________________________________________________ 35

EJERCICIOS 2.3.1 Para cada ejercicio realice la prueba de escritorio para el conjunto de instrucciones que se indican. 1. a b c d e f g 10 17 a+b b–a a*b a – 4 * (e – b) a²

2.-

Tot Res Dif Tot Res Dif

100 70 Tot – Res 300 210 Tot – Res 1 0 n+1 P+5 N+1 P+7 N+1 P–2 1 –1 – Signo X*3 Signo * X

3.-

N P N P N P N P

4.-

X X T

Signo Signo

_______________________________________________________________ 36

X T 5.Q R D 6.A B C D 7X Y Z, 8.dey inj pli 9.X1 X2 X1 X2 10.- a B C D

X*3 – Signo Signo * X 3 2 (Q – 1)² / (1 – 1 / (R + 1)) 10 2 A–2*B 1 – B² / (C – 2 ) – A * (1 – B) 8 sqrt (X + 1) | 1–Y | + 2 21 1 / sqrt (dey + 4) (22 – dey) / 10 * inj 5 7 X1 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. X2 Cambio 10 rem 2 15 (a + b) * 4 c rem 3

Signo

Cambio

_______________________________________________________________ 37

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 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. • 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 Símbolo > < = ≠ ≤ ≥ Descripción Mayor que Menor que Igual Distinto Menor o igual Mayor o igual Operadores lógicos Símbolo Descripción Negación (no) Conjunción (y) Disyunción (o)

ó

~

^
v

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

_______________________________________________________________ 38

Ejemplo 2.7
De acuerdo al estado de la siguiente memoria, evalúe las condiciones que se presentan.

TOTAL PAGO 800 750

IMPTO SALDO 50 700

a) TOTAL < 1000 b) PAGO – IMPTO > 900 c) PAGO > 200 y SALDO < 700 d) No (TOTAL < 1000) 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 efectuando la resta lo que resulta Falso.

b) PAGO- IMPTO > 100

sustituyendo 750 – 50 > 900 700>900

c) PAGO > 200 y SALDO < 700 sustituyendo (750 > 200) y (700 < 700) esta proporción es verdadera y ésta 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 F •Evaluación de las proposiciones simples. •Evaluación de la conjunción.

_______________________________________________________________ 39

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) ~ V F • Evaluación de la desigualdad • Evaluación de la negación.

Ejemplo 2.8
Realizar primero las asignaciones y luego evaluar las condiciones: Pago Impto Total Saldo 1500 0.12 * Pago Pago + Impto 2000 - Total 2) Saldo – 200 < 1200 320 – 200 < 1200 120 < 1200 V 3) No se cumple que (Impto > 100) ó (pago < 500 y saldo = 320) ~ (180 > 100) v ((1500< 500) ^ (320 = 320)) ~V F v v F ( F ^ V) F (F) (V) Pago 1500 Impto 180 Total 1680 Saldo 320

1) Total > 0 (V) 1680 > 0 V

_______________________________________________________________ 40

EJERCICIOS 2.4

En cada ejercicio realizar primero las asignaciones y luego evaluar las condiciones: 1.M N 23 M – 17

M + N < 30 M>0 N=4

2.-

Pago Impto Total Impto

567 pago * 0.12 pago + Impto 45

Pago < 600 ó total < 700 No se cumple que (pago > 500 y total < 400)

3.-

I J K

1 I+1 I+2*J

I=J–1 K–J≥ 2 No se cumple que (K ≠ 5 ó J * I < 10)

4.-

x y

45 36

_______________________________________________________________ 41

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

_______________________________________________________________ 42

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.

______________________________________________________________________ 43

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 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 ______________________________________________________________________ 44 prepare el programa, que es el

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.

______________________________________________________________________ 45

EJERCICIOS 3.1 Conteste brevemente las siguientes preguntas: 1 2 ¿Porqué el programador debe entender a cabalidad el p.o.p.? ¿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.

l

PROCESO

0

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 ______________________________________________________________________ 46

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:

Resumen del Análisis
SALIDA: (cuantitativamente) cualitativamente Ejemplo 3.1 (Resumen del Análisis, calificaciones) ENTRADA: (cuantitativamente) cualitativamente Para el caso del problema de obtener las calificaciones finales de un curso universitario, el PROCESO: Expresado ser como resumida en resumen del análisis podría de manerael siguiente: un lenguaje natural.

______________________________________________________________________ 47

Resumen del Análisis SALIDA: (40 números) Las calificaciones finales de los 40 estudiantes. Las calificaciones parciales de los 40 estudiantes.

ENTRADA: (varios números) 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

______________________________________________________________________ 48

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)

______________________________________________________________________ 49

P. O. P

Plan del Análisis

Prueba de escritorio Resumen del Análisis Desglose 1er.y 2do. Algoritmo Nolae

SOLUCION

Código en Lenguaje Ada95 Prueba de escritorio

DATOS

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

______________________________________________________________________ 50

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. 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 Segundo examen parcial Examen final Proyecto 1 Proyecto 2 Proyecto 3 Tarea 1 Tarea 2 Quiz 1 Tarea 3 Exposición Quiz 2 Tarea 4

85 90 80 95 100 100 70 85 80 100 90 90 100

(20%) (20%) (30%) ( 5% ) ( 5% ) ( 5% ) (15% en total)

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 Segundo examen parcial Examen final 85 X (0. 20 ) 90 X (0. 20 ) 80 X (0. 30 ) = = = = 17.0 18.0 24.0 59.0
(1)

Puntos ganados por exámenes
(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

______________________________________________________________________ 51

De la misma manera se trabaja con los proyectos: Proyecto 1 Proyecto 2 Proyecto 3 Puntos ganados por proyectos 95 X ( 0.05 ) = 100 X ( 0.05 ) = 85 X ( 0.05 ) = = 4.75 5.00 4.25 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 Tarea 2 Quiz 1 Tarea 3 Exposición Quiz 2 Tarea 4 Suma 70 85 80 100 90 90 100 Promedio = 615 7 615 = 87.86

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

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 PARCIAL2 EXFINAL PROYEC1 PROYEC2 PROYEC3 TAREA1 TAREA2 QUIZ1 TAREA3 QUIZ2 TAREA4 Primer examen parcial Segundo examen parcial Examen final Proyecto 1 Proyecto 2 Proyecto 3 Tarea 1 Tarea 2 Quiz 1 Tarea 3 Quiz 2 Tarea 4 Número sin decimales entre 0 y 100 Número sin decimales entre 0 y 100 Número sin decimales entre 0 y 100. .. : : : : : : : : : : Número con 2 decimales entre 0 y 100

EXPOSICION Exposición

PROMFINAL Promedio final

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 EXPOSICION Examen final Exposición

______________________________________________________________________ 53

PARCIAL1 PARCIAL2 PROMFINAL PROYEC1 PROYEC2 PROYEC3 QUIZ1 QUIZ2 TAREA1 TAREA2 TAREA3 TAREA4

Primer examen parcial Segundo examen parcial Promedio final Proyecto 1 Proyecto 2 Proyecto 3 Quiz 1 Quiz 2 Tarea 1 Tarea 2 Tarea 3 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 PG_PROYECTO ACUMULATIVO PROM_FINAL Puntos ganados por exámenes Puntos ganados por proyectos Puntos ganados por tareas, quices, etc. Promedio final del estudiante

A continuación se escriben las fórmulas correspondientes:

______________________________________________________________________ 54

PG_EXAMEN PG_PROYECTO ACUMULATIVO PROM_FINAL

= PARCIAL1 * 0.20 + PARCIAL2 * 0.20 + EXFINAL * 0.302 = PROYEC1 * 0.05 + PROYEC2 * 0.05 + PROYEC3 * 0.05 = (TAREA1 + TAREA2 + TAREA3 + TAREA4 + EXPOSICIÓN + QUIZ1 + QUIZ2) / 7 * 0.15 = 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”

______________________________________________________________________ 55

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.

PARCIAL1 85 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. ______________________________________________________________________ 56

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 m= ∆x = x–w y–z

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–mx 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 L y L

x x≠ w x=w

x

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.

______________________________________________________________________ 57

HIPOTESIS 1. 2. Las coordenadas de los puntos corresponden a puntos distintos. 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 entonces, m = 4–1 Ahora se encuentra el intercepto en el eje “y” : b=y–mx = 11 – 2(4) = 11 – 8 = 3 Por lo tanto: la pendiente es y el intercepto es m=2 b=3 = 3 6 = 2

Finalmente se procede a redactar el… RESUMEN DEL ANALISIS SALIDA: (2 números) La pendiente m y el intercepto b 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. ______________________________________________________________________ 58

ENTRADA: (4 números)

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.3.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. 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. ______________________________________________________________________ 59

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.

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:

______________________________________________________________________ 60

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 Por horas extras 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 : 2.- DICCIONARIO DE VARIABLES Identificador PHORA HTRABAJ HEXTRAS DIHSS VIVIENDA INGBRUTO TDEDUC SNETO HIPOTESIS 1.HTRABAJADAS > 0 2.INGBRUTO Será a 600.00 y mayor (>) que VIVIENDA Descripción . Pago base por hora Horas ordinarias trabajadas Horas extras trabajadas Deducción para el IHSS Pago de vivienda Ingreso total bruto Total de deducciones Sueldo Neto 492 - 207.22 = 284.78 = 367.50 25 X 2.50 X 2 = 125.00 Ingreso total = 492.00

3.- FORMULAS 1.2.3.4.INGBRUTO = DIHSS TDEDUC SNETO = = = HTRABAJ * PHORA + HEXTRAS * PHORA * 2 INGBRUTO * 0.035 DIHSS + VIVIENDA INGBRUTO – TDEDUC

______________________________________________________________________ 61

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.

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.

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.2.3.LECTURA DE DATOS CALCULOS 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 } ______________________________________________________________________ 62

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 1.3 1.4 2.Leer de Horas ordinarias trabajadas Leer de Horas extras trabajadas Leer de Pago de Vivienda

CALCULOS 2.1 Cálculo del Ingreso Bruto 2.2 2.3 2.4 Cálculo de la deducción IHSS Cálculo del total de deducciones Cálculo de Sueldo Neto

(Fórmula-1) (Fórmula-2) (Fórmula-3) (Fórmula-4)

3.-

IMPRESIÓN DE RESULTADOS 3.1 Impresión del Ingreso Bruto 3.2 3.3 Impresión del total de deducciones 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 ______________________________________________________________________ 63

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 Salida Para representar las variables y sus valores. 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, Memoria: 25, 190

______________________________________________________________________ 64

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, ______________________________________________________________________ 65

hasta llegar a lo siguiente: Datos: 2.50, 147, 25, 190 Memoria: PHORA 2.50 HTRABAJ 147 HEXTRAS 25 VIVIENDA 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, Memoria: 147, 25, 190

PHORA 2.50

HTRABAJ 147

HEXTRAS 25

VIVIENDA 190

INGBRUTO 492

DIHSS 15.47

TDEDUC 205.47

SNETO 286.53

______________________________________________________________________ 66

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:

492.00

Se realiza el resto de las instrucciones de salida, una por una, inspeccionando los valores y escribiéndolos en la pantalla: Salida:
492.00 15.47 205.47 286.53

Al comparar estos resultados con los del ejemplo de escritorio se comprueba que el desglose escrito está correcto. ______________________________________________________________________ 67

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
1120.00

1120.00 seria el Total, así en forma resumida: Salida Total

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 Entrada Precio del artículo 1 Precio del artículo 2

______________________________________________________________________ 68

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 Datos de entrada supuestos Precio del 2do. artículo = 575 Subtotal =425 +575 = 1000 Isv =1000 * 0.12 = 120 Total = 1000 + 120 = 1120 2. DICCIONARIO DE VARIABLES Identificador Precio1 Precio2 Subtotal ISV Total 3. FORMULAS Subtotal =precio1 + precio2 Isv =subtotal * 0.12 Total =subtotal + isv 4. RESUMEN DEL ANALISIS SALIDA: ENTRADA: PROCESO: (1 número) Total (2 números) Precio1, Precio2 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. (Fórmula-1) (Fórmula-2) (Fórmula-3) Descripción Precio del artículo 1 Precio del artículo 2 Subtotal Impuesto sobre ventas Total a pagar por el cliente

______________________________________________________________________ 69

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

______________________________________________________________________ 70

Desglose 2do Nivel 1. LECTURA DE DATOS 1.1 Leer Precio1 1.2 Leer Precio2 2. CALCULOS 2.1 Calcular Subtotal 2.2 Calcular Isv 2.3 Calcular Total (Fórmula-1) (Fórmula-2) (Fórmula-3)

3. IMPRESIÓN DE RESULTADOS 3.1 Imprimir Total

6.

PRUEBA DE ESCRITORIO

Datos: 425, 575 Memoria: Precio1 425 Precio2 575 Subtotal 1000 ISV 120 Total 1120 Salida

1120

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

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) d.2) d.3) d.4) Ejercicios del 1 al 4 Ejercicios del 5 al 8 Ejercicios del 9 al 12 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.2.La venta es de Lps. 200.00 ó menos La venta es de más de Lps. 200.00 (En lenguaje simbólico: Venta > 200.00, se escogió arbitrariamente)

______________________________________________________________________ 72

EJEMPLO DE ESCRITORIO 1 El valor de la venta es de El descuento sería de 10% o sea Subtotal, Valor de venta con descuento 12 % ISV Total a pagar Lps. 150.00 Lps. 15.00 (1) Lps. 135.00 Lps. 16.20 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 100 EJEMPLO DE ESCRITORIO 2 El valor de venta es de EL descuento sería de 20% o sea Subtotal, (Valor de venta con descuento) 12 % isv TOTAL a pagar 2.- DICCIONARIO DE VARIABLES NOMBRE Val_Venta Descuento Subtotal Isv Total DESCRIPCION Valor de la venta sin isv. Valor del descuento Nuevo valor de venta con descuento Valor del isv. Total a pagar UNIDADES (En Lps.) (En Lps.) (En Lps.) (En Lps.) (En Lps.) Lps. 300.00 60.00 ___________ Lps. 240.00 28.80 ___________ Lps. 268.80 ó bien (150) (0.10) = 15

______________________________________________________________________ 73

3.- FORMULAS Descuento = Val_Venta * 0.10 Descuento = Val_Venta * 0.20 Subtotal=Val_Venta – Descuento Isv= Subtotal * 0.12 Total = Subtotal_Val + Isv. 4.- RESUMEN DEL ANALISIS SALIDA: (4 números) Descuento, Subtotal, Isv, Total Val_Venta Caso 1 Caso 2 (Fórmula-1) (Fórmula-2) (Fórmula-3) (Fórmula-4) (Fórmula-5)

ENTRADA: (1 número) 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.2.3.2do Nivel Únicamente el 2do paso amerita mayor desglose 2.CALCULO DE VALORES 2.1 2.2 2.3 2.4 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 ______________________________________________________________________ 74 Calcular deducción Calcular Subtotal con deducción Calcular Impto. Sobre venta Calcular Total a pagar Lectura de dato Cálculo de Valores Impresión de resultados

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 2. Leer Val_venta

CALCULO DE VALORES 2.1 Ver si el Val_venta > 200 2.1.1 (Verdadero) Calcular la deducción con el 20% 2.1.2 (Falso) Calcular la deducción con el 10% 2.2 2.3 2.4 Calcular Subtotal con deducción Calcular impuesto sobre venta Calcular total a pagar (Fórmula-1) (Fórmula-2) (Fórmula-3) (Fórmula-4) (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.

______________________________________________________________________ 75

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

______________________________________________________________________ 76

Memoria Val_Venta 150 Descuento 15 Subtotal 135 Isv 9.45 Total 144.45

Salida: 15.00 135.00 9.45 144.45

Prueba 2 Datos2: Memoria: Val_Venta 300 300 Salida: Descuento 60 Subtotal 240 Isv 16 Total 256 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.

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:

______________________________________________________________________ 77

Categoría 1er Clase Clase económica ESTRATEGIA:

Código 1 2

Precio Lps. 200.00 Lps. 110.00

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 Nbol

Salida

Pago

Entrada

Si Cod = 1 (Cod =2 )

(V) Precio = 200 (*) (F) Precio = 110 (**)

1. EJEMPLO DE ESCRITORIO Caso I Nbol = 2 Cod = 1 (*) Pago = 200 * 2 = 400 2.- DICCIONARIO DE VARIABLES Identificador Cod Nbol Pago 3.- FORMULAS Pago = 200 * Nbol Pago = 110 * Nbol (Fórmula-1) (Fórmula-2) Descripción Número de boletos Total a pagar . Caso II Nbol = 3 Cod = 2 (**) Pago = 110 * 3 = 330

Código del tipo de tarifa

______________________________________________________________________ 78

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: ” 3.2 Imprimir Pago
Leer observación 3.4.2.2

______________________________________________________________________ 79

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

A continuación se comentará resolución de este ejercicio

sobre las distintas estructuras que intervienen en la

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: Nbol 2 Cod 1 Pago 400 Salida: Total a Pagar Lps. 400

______________________________________________________________________ 80

Datos 2: 3, 2 Memoria: Nbol 3 Cod 2 Pago Total a Pagar Lps. 330 330 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 Positivo • Se clasificará el número X de acuerdo a los siguientes criterios: Negativo • X < 0, Cero X = 0, Positivo X>0 ó Entrada X

Se usará: la recta real y DECISIONES ANIDADAS (Se ampliará este tema en el la sección 3.5 Diagramas de Arbol)

Si X < 0 (V)
0

“Negativo”

(F) Si X = 0 (V) (F) RESUMEN DEL ANALISIS: SALIDA: (1 Mensaje) “Negativo”, “Cero” o “Positivo”
0

● 0
0

“Cero” “Positivo”

ENTRADA: (1 número) X

______________________________________________________________________ 81

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

6.-. PRUEBA DE ESCRITORIO Dato 1: 0 Memoria: X 0 Salida Cero Dato 2: -3 Memoria: X -3 Salida Negativo Dato 3: 8 Memoria: X 8 Salida Positivo

______________________________________________________________________ 82

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.4.Ejercicios de estructuras de decisión en el Apéndice A del 15 al 21. 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 ______________________________________________________________________ 83

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)

Verificar si km > 100 (V) base = 215 (F) • Decisión base = 200

Costo por Km = 0.35 Costo por Km = 0.50

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. = 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 Pago = Base + gasto por kilometraje (kilómetros recorridos X costo por kilómetro)

______________________________________________________________________ 84

2.-DICCIONARIO DE VARIABLES Identificador Km Pago 3.- FORMULAS Pago = 215 + 0.35 * Km Pago = 200 + 0.50 * Km 4.- RESUMEN DEL ANALISIS SALIDA: ENTRADA: (Varios números) Pago de cada cliente, pago 1 en cada ciclo (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: (Fórmula-1) (Fórmula-2) Descripción Kilómetros recorridos Pago por el alquiler del vehículo .

______________________________________________________________________ 85

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 2.Leer el primer dato (Km)

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 2.1.1.1.2 (F) Calcular pago con Fórmula-2 2.1.1.2 Imprimir el valor del pago * Síntesis del Desglose 1.PASOS INICIALES 1.1 2.Leer el primer dato (Km.) Caso 1 Caso 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 2.1.1.1.2 (F) Calcular pago con Fórmula-2 2.1.1.2 Imprimir el valor del pago 2.1.2 Leer el siguiente dato (Km.)4 Caso 1 Caso 2

4

Leer la Observación 3.4.3.1 en la siguiente página.

______________________________________________________________________ 86

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?

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:

______________________________________________________________________ 87

Desglose 2do. Nivel 1.PASOS INICIALES 1.1 Leer el primer dato (Km.) 2.Pago= 215 + 0.35 * Km Fórmula-1 Pago= 200 + 0.50 * Km Fórmula-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 2.1.1.2 (F) Calcular pago con Fórmula-2 2.1.2 Imprimir el valor del pago 2.1.3 Leer el siguiente dato (Km.) Caso 1 Caso 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 2.1.3 Se llama RANGO de la Repetición

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 ______________________________________________________________________ 88

Datos: 150, 60, 100, 0 Memoria Km. Salida

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 267.50

Finalizando con la lectura del siguiente valor de Km instrucción 2.1.3

______________________________________________________________________ 89

Datos: 150, 60, 100, 0 Memoria Km Pago 267.5 150 60 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 267.50 Salida

150 60

267.50 223.00

Se continúa con la impresión del Pago de este cliente (2.1.2) Salida 267.50 230.00

Se realiza el paso 2.1.3, que es la lectura para el siguiente ciclo ______________________________________________________________________ 90

Datos: 150, 60, 100, 0 Memoria Km 150 60 100 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 267.50 237.00 250.00 Pago 267.50 230.00

Se termina el ciclo, leyendo el siguiente dato (paso 2.1.3) Datos: 150, 60, 100, 0 Memoria Km 150 60 100 0 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. Pago 267.50 230.00 250.00 267.50 230.00 250.00 Salida

______________________________________________________________________ 91

Análisis de Estructuras Concatenación: 1, 2, 3 2.1.1, 2.1.2, 2.1.3 Decisión: Repetición: 2.1.1 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. 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.

ESTRATEGIA: Trabajando de manera más simplificada se tiene: (Varios) Salida Pago Entrada (Varios) Nbol Cod ______________________________________________________________________ 92

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 Caso I Nbol = 2 Cod = 1 Pago = 2 * 200 = 400 Caso II Nbol = 3 Cod = 2 Pago = 3 * 110 = 330 Caso III Nbol = 0

2.-DICCIONARIO DE VARIABLES Identificador Cod Nbol Pago Descripción Código del tipo de tarifa Número de boletos Total a pagar .

3. FORMULAS Pago = 200 * Nbol Pago = 110 * Nbol (Fórmula-1) (Fórmula-2)

4. RESUMEN DEL ANALISIS SALIDA: ENTRADA: (Varios números, mensajes) Pago 1 por ciclo, 1 por ciclo (Varios números) Nbol, Cod 2 por ciclo

______________________________________________________________________ 93

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

______________________________________________________________________ 94

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 2.1.2.2 (F) Calcular 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 Salida: Cod 1 2 Pago 400 330 Total a pagar Lps.400 Total a pagar Lps.330 Fin del programa (Fórmula-1) (Fórmula-2)

2.1.3 Imprimir “Total a pagar: Lps ”, Pago

Memoria: Nbol 2 3 0

Análisis de Estructuras Concatenación: Decisión: Repetición: 1, 2, 3 2.1.1, 2.1.2, 2.1.3, 2.1.4 2.1.2 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).

______________________________________________________________________ 95

Comparando los PROCESOS de los Resumen del Análisis de los Ejemplos 3.7 y el 3.10 para uno y para varios clientes:

Proceso del Resumen del Análisis
UN cliente VARIOS clientes (repetitivo)

Ejemplo 3.7

Ejemplo 3.10
Repetición controlada por centinela (Nbol ≠ 0), en el cual para cada cliente

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

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.

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

______________________________________________________________________ 96

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.4.5.Se leen varios números distintos de cero, encontrar el valor absoluto de cada uno de ellos. Dado un número clasificarlo como negativo, cero o positivo (mensajes). Del Apéndice A, ejercicios 22 al 24, pág. 280-281.

______________________________________________________________________ 97

3.5 3.5.1

ELEMENTOS EN EL ANALISIS DE UN P.O.P. DIAGRAMA DE ARBOL DE DECISIONES

PARTE II

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>b F ______________________________________________________________________ 98 a>c F

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>c V 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é?). F c, “mayor” a, “mayor”

______________________________________________________________________ 99

a, “mayor” V a>c V F a>b V 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 b, “mayor” c, “mayor”

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.

______________________________________________________________________ 100

V V a>c F a>b F a>c F V

a, “mayor”

c, “mayor” b, “mayor” V b>c F c, “mayor” b, “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.

______________________________________________________________________ 101

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. a) Realizar la prueba de escritorio de los siguientes desgloses, con los conjuntos de datos que se proporcionan: 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) 2.1.2.2 (F) Multiplicar X por -1 y sumárselo a T Sumar el valor de X a T N + 1)

2.1.3 Incrementar N en 1 (N

______________________________________________________________________ 102

3.-IMPRESIÓN 3.1 Imprimir el valor de T Datos 1: Datos 2: Datos 3: b) 1. 6, 2, -3, -1, 2, -3, 0, 2, -3, 3, 2, -3, -5 2 -3

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: Datos 2: Datos 3: Datos 4: Datos 5:

7, 2150, 150 6, 1200, 80 2, 4000, 300 4, 600, 5, 100, 30 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.

______________________________________________________________________ 103

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 1 2 3 Aumento 15% 10% 8%

______________________________________________________________________ 104

ESTRATEGIA (Varios) Categoría Nuevo_s (Varios) Categoría Sueldo

Salidas

Entradas

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
Categoría=1

Aumento del 15 % Aumento del 10% V

F

categoría = 2 F Aumento del 8%

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.

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 Categoría = 2 Sueldo = 2,000 Aumento = 2,000 * 0.10 = 200 Nuevo_S = 2,000 + 200 = 2,200 Categoría = 1 Sueldo = 3,000 Aumento = 3,000 * 0.15 = 450 Nuevo_S =3,000 + 450 = 3,450 Caso II

______________________________________________________________________ 105

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.

2. DICCIONARIO DE VARIABLES Identificador Categoría Sueldo Aumento Nuevo_S 3. FORMULAS Aumento = Sueldo * 0.15 Aumento = Sueldo * 0.10 Aumento = Sueldo * 0.08 Nuevo_S = Sueldo + Aumento 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. (1) (2) (3) (4) Descripción . Categoría Sueldo Inicial Aumento Nuevo sueldo

______________________________________________________________________ 106

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

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 2.1.2.2 (F) Ver si Categoría = 2 2.1.2.2.1 (V) Calcular el aumento 2.1.2.2.2 (F) Calcular el aumento 2.1.3 Calcular Nuevo_S 2.1.4 Imprimir “Categoría : ”, Categoría ______________________________________________________________________ 107 (Fórmula-2) (Fórmula-3) (Fórmula-4) (Fórmula-1)

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: Memoria Categoría 2 1 99 Sueldo 2,000 3,000 Aumento 200 450 Nuevo_S 2,200 3,450 2, 2000, 1, 3000, 99 Salida: Categoría: Nuevo Sueldo: Categoría: Nuevo Sueldo: 2 2,200 1 3,450

Análisis de Estructuras Concatenación: Decisión: Repetición: 1,2 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.1.5, 2.1.6 2.1.2, 2.1.2.2 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 1. Lavado Exterior 2. Lavado Interior 3. Lavado Exterior e Interior 4. Lavado de Motor Precio___ Lps. 25.00 Lps. 30.00 Lps. 35.00 Lps. 40.00

Además de los servicios, se ofrece un descuento del 7% si se llevan dos o más automóviles. ______________________________________________________________________ 108

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) Pagos Entrada Tipo 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 necesitará un Diagrama de árbol: Subtotal V Tipo=1 F Tipo=2 F Tipo =3 F • Subtotal N_autos * 40 V Subtotal N_autos * 30 V Subtotal N_autos * 35 N_autos * 25 subtotal se

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

______________________________________________________________________ 109

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 Caso I N_autos = 3 Tipo = 4 Subtotal = 3 * 40 = 120 Desc = 0.07 * 120 = 8.4 Total = 120 – 8.4 = 111.6 Tipo = 2 Subtotal = 1 * 30 = 30 Desc = 0
(1)

Caso II N_autos = 1

Caso III N_autos = 0

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

2. DICCIONARIO DE VARIABLES Identificador Tipo N_autos Subtotal Desc Total Descripción . Tipo de servicio Número de autos Subtotal Descuento Total a pagar

3. FORMULAS Subtotal = N_autos * 25 Subtotal = N_autos * 30 Subtotal = N_autos * 35 (Fórmula-1) (Fórmula-2) (Fórmula-3)

______________________________________________________________________ 110

Subtotal = N_autos * 40 Desc = 0.07 * Subtotal Total = Subtotal - Desc

(Fórmula-4) (Fórmula-5) (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).

______________________________________________________________________ 111

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 2.1.2.2 (F) Ver Si Tipo = 2 2.1.2.2.1 (V) Calcular Subtotal 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 2.1.3.1 (F) Asignar 0 a Desc 2.1.4 Calcular Total 2.1.5 Imprimir “Total a Pagar”, Total 2.1.6 Leer (siguiente) N_autos (Fórmula-6) (Fórmula-5) (Fórmula-2) (Fórmula-1)

6. PRUEBA DE ESCRITORIO Datos: 3, 4, 1, 2, 0 Memoria: N_autos 3 1 0 Tipo 4 2 Subtotal 120 30 Desc 8.4 0 Pago 111.6 30

Salida Total a Pagar: 111.6 Total a Pagar: 30 Muchas Gracias

______________________________________________________________________ 112

Análisis de Estructuras Concatenación: Decisión: 1, 2, 3 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.1.5, 2.1.6 2.1.2, 2.1.2.2, 2.1.2.2.2, 2.1.3 2.1

Repetición:

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 CI < 80 80 < CI ≤ 110 CI >110 ESTRATEGIA: Subnormal Salida 1 Mensaje Normal Superior • • Repetición controlada por centinela, condición de repetición: CI ≠ 0 Decisiones anidadas, ilustradas con un Diagrama de árbol. V CI < 80 F CI < 110 F “Superior” ______________________________________________________________________ 113 “Subnormal” “Normal” V ó Entrada CI Rango Subnormal Normal Superior .

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)

Si CI < 80 (V) 80 (F) 80 Si CI ≤ 110 80 (V) 80 (F) 110
110

“Subnormal” | 110 | 110

110 “Normal”

“Superior”

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 y falsa la condición CI < 80 la consecuencia inmediata es que CI > 80 (o 80 < CI) ya no es necesario plantearlo, basta preguntar solamente CI ≤ 110

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

______________________________________________________________________ 114

ENTRADA: PROCESO:

(Un número)

CI

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 Memoria: CI 100 Datos2: 75 Memoria: CI 75 Datos3: 125 Memoria: CI 125

Salida Normal

Salida Subnormal

Salida Superior

______________________________________________________________________ 115

Análisis de Estructuras Concatenación: 1, 2 Decisión: 2.1 2.1.2

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

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. 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: ______________________________________________________________________ 116

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).b).c).d).e).II.Cambiar la llanta de un vehículo Cocinar un huevo revuelto (“picado”) Proceso de tu matrícula Ir al cine Preparar una taza de café

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

______________________________________________________________________ 117

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

______________________________________________________________________ 118

CAPITULO 4

FUNDAMENTOS DE PROGRAMACION ESTRUCTURADA
4.1 CONCEPTO DE SISTEMA

Considerando el concepto más general de sistema: “Un sistema es un conjunto de objetos o entes que están relacionados de alguna 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) b) c) d) e) El sistema respiratorio del cuerpo humano El sistema óseo de Juan Pérez. El sistema solar. El sistema político de la República de Honduras. 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.

______________________________________________________________________ 119

Medio ambiente

Frontera (puede ser Intangible)

Sistema

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.

______________________________________________________________________ 120

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. Un bloque estructurado es una instrucción o conjunto de instrucciones de un algoritmo 4.2 se representa por medio de un rectángulo, dibujando con una base horizontal, yA LA BLOQUES ESTRUCTURADOS ATOMICOS E INTRODUCCION con y NOTACION DE DIAGRAMA DE FLUJO una (y sólo una) flecha de entrada y una (y sólo una) flecha de salida.

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.

______________________________________________________________________ 121

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
lea L 1. 2. 3. 4. lectura: escritura: asignación: nulo: escriba L

V

E

nulo

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

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 HTRABAJ HEXTRAS DIHSS Pago base por hora Hrs ordin.trabajadas Hrs extras trabajadas Deducción IHSS VIVIENDA TDEDUC SNETO Pago vivienda Total deducción Sueldo neto

INGBRUTO Total Ing.bruto

Fórmulas:
INGBRUTO = HTRABAJ * PHORA +HEXTRAS * PHORA * 2 DIHSS = INGBRUTO * 0.035 TDEDUC = DIHSS + VIVIENDA SNETO = INGBRUTO – TDEDUC DESGLOSE 1.LECTURA DE DATOS 1.1 1.2 1.3 1.4 2.Lectura de Pago base por hora Lectura de Horas ordinarias trabajadas Lectura de Horas extras trabajadas Lectura de Pago de vivienda (Fórmula-1) (Fórmula-2) (Fórmula-3) (Fórmula-4)

CALCULOS 2.1 2.2 2.3 2.4 Calculo del Ingreso Bruto Cálculo de la deducción IHSS Cálculo de total de deducciones Cálculo del Sueldo Neto (Fórmula-1) (Fórmula-2) (Fórmula-3) (Fórmula-4)

3.-

IMPRESIÓN DE RESULTADOS 3.1 3.2 3.3 Impresión del Ingreso Bruto Impresión del total de deducciones Impresión del sueldo neto

______________________________________________________________________ 123

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

1.1 1.2 1.3

Lectura de Pago base por hora Lectura de Horas ord. Trabajadas Lectura de Horas ext. Trabajadas

Lea PHORA Lea HTRABAJ

Lea HEXTRAS

1.4

Lectura de Pago de Vivienda

Lea VIVIENDA

2.1

Cálculo del Ingreso Bruto

INGBRUTO

HTRABAJ * PHORA + HEXTRAS * PHORA*2

2.2

Cálculo de la deducción

IHSS DIHSS

INGBRUTO * 0.035

2.3

Cálculo del total de deduc.

TDEDUC

DIHSS + VIVIENDA

2.4

Cálculo del Sueldo Neto

SNETO

INGBRUTO - TDEDUC

3.1 3.2

Impresión del Ingreso Bruto Impresión del total de deduc.

Escriba INGBRUTO

Escriba TDEDUC Escriba SNETO

3.3

Impresión del sueldo neto
Final

______________________________________________________________________ 124

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)

______________________________________________________________________ 125

Sistema Lectura Asignación Medio Ambiente

Frontera

Escritura NOtación Lineal de Algoritmos Estructurados BLOQUE Lectura Escritura Asignación Nulo NOlae lea escriba V←E 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.2.3.4.Lectura Escritura Asignación Nulo lea L escriba L V nulo E ó nulo ó ó lea L escriba L

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.

______________________________________________________________________ 126

Si se tienen dos b.e. B1

B2 Y se hace coincidir la salida del primero con la entrada del segundo, se tiene lo siguiente: B1 B2

Por definición, se considera que forman un nuevo b.e. B1 B2

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

______________________________________________________________________ 127

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.2.3.Leer los números A y B Calcular su suma y almacenarla en S 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 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 Final ______________________________________________________________________ 128 A + B escriba S A + B escriba S

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 2.1 Calcular Subtotal 2.2 Calcular Isv 2.3 Calcular Total (Fórmula-1) (Fórmula-2) (Fórmula-3) Fórmulas: Subtotal =precio1 + precio2 (Fórmula-1) Isv =subtotal * 0.12 Total =subtotal + isv (Fórmula-2) (Fórmula-3)

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

______________________________________________________________________ 129

DESGLOSE Inicio 1.1 Leer Precio1 1.2 Leer Precio2 2.1 Calcular Subtotal (Fórmula_1) 2.2 Calcular Isv 2.3 Calcular Total 3.1 Imprimir Total Final (Fórmula_2) (Fórmula_3)

NOLAE lea Precio1 lea Precio2 Subtotal ← Precio1 + Precio2 Isv ← Subtotal * 0.12 Total ← Subtotal + Isv escriba Total

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:

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 lea x, y t q final x – y² 20 – t datos 1: 20, 4 datos 2: 5, 6

Escriba t, q

______________________________________________________________________ 130

b) inicio S 0 datos 1: 2, 3, 6 datos 2: 0, -1, 7 datos 3: -2, 0, 3 lea K2 escriba “Inicio de cálculos” S S final c) inicio escriba “Teclee un número” lea num D 2 * num escriba “El doble del número leído es”, D final dato : 5 S + K2 * 5 S + tron * (R2D2-5) lea tron, R2D2 escriba S

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:

V

C

F

B1
Punto de salida

______________________________________________________________________ 131

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:

V

F

C B2
Punto de salida 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: Si C entonces B1 sino B2 Fin-si Fin-si ó sino B2 si C entonces B1

______________________________________________________________________ 132

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 Descuento Subtotal Isv Total DESGLOSE 1. LECTURA DEL DATO 1.1. Leer Val_Venta 2. CALCULO DE VALORES

Valor de la venta sin isv Valor del descuento Subtotal con descuento Valor del Isv Total a Pagar

(en Lps.) (en Lps.) (en Lps.) (en Lps.) (en Lps.)

2.1. Ver si el Val_Venta es mayor de 200 2.1.1. 2.1.2. (Verdadero) Calcular la deducción con el 20% (Falso) Calcular la deducción con el 10% (Fórmula-1) (Fórmula-2) (Fórmula-3) (Fórmula-4) (Fórmula-5)

2.2. Calcular Subtotal con deducción 2.3. Calcular Impto. Sobre venta 2.4. Calcular total a pagar 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 total final subtotal *0.12 subtotal + isv

escriba val_venta, descuento, subtotal, isv, total

______________________________________________________________________ 133

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 sino descuento fin si subtotal isv total val_venta – descuento subtotal_val + isv Lps. “, Val_venta Lps “, descuento Lps “, subtotal Lps. “, isv subtotal *0.12 Con más detalle aún sería: escriba “Venta Lps ” escriba Val_venta val_venta * 0.1 val_venta * 0.2

escriba “Venta escriba “Descuento escriba “Subtotal escriba” Impuesto final

escriba “Total a pagar Lps. ”, total

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: ______________________________________________________________________ 134

Inicio Lea Cod Lea Nbol Si Cod = 1 entonces Pago sino Pago 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: 110 * Nbol 200 * Nbol

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 codificación en Nolae:
(1. Lectura de datos) 1.1 Leer X (2. Clasificación e Impresión) 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: 2.1 Ver Si X < 0 Inicio lea X

obtenido se presenta a continuación, colocando a la par su

______________________________________________________________________ 135

Inicio lea X Si X < 0 entonces escriba “Negativo sino Si X = 0 entonces escriba “Cero” sino escriba “Positivo ” Fin-si Fin-si Final 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.

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:

______________________________________________________________________ 136

V

C
F Figura 4.6.1

B

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.

V

C
F

B

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: ______________________________________________________________________ 137

mientras

C

haga B

fin mientras

Y, en el estilo con márgenes se puede representar la estructura de la siguiente manera:

mientras

C B

haga ó

mientras fin mientras

C B

haga

fin mientras

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 Caso 2 Pago = 200 + 0.50 * Km Pago = 215 + 0.35 * Km Fórmula-1 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 2.1.1.2 (F) Calcular pago con Fórmula-2 2.1.2 Imprimir el valor del pago 2.1.3 Leer el siguiente dato (Km.) Caso 1 Caso 2

______________________________________________________________________ 138

Representando el algoritmo en Nolae, se tiene lo siguiente: Inicio lea Km mientras Km ≠ 0 haga si Km < 100 entonces Pago sino Pago 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. 215 + 0.35 * Km 200 + 0.50 * Km

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 ______________________________________________________________________ 139

Inicio Lea Nbol Mientras Nbol ≠ 0 haga Lea Cod Si Cod = 1 entonces Pago sino Pago 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: 200 * Nbol 110 * Nbol

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 CI < 80 80 < CI ≤ 110 CI >110 Rango Subnormal Normal 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) Salida Mensaje Entrada (Varios) CI

______________________________________________________________________ 140

• • Inicio

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) 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: CI 80 120 100 0 ______________________________________________________________________ 141 Subnormal Superior Normal Salida:

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 sino Si Tipo = 2 entonces Subtotal sino Si Tipo = 3 entonces Subtotal sino Subtotal Fin-si Fin-si Fin-si Si N_auto ≥ 2 entonces Desc sino Desc Fin-si Total Subtotal - Desc escriba Total lea N_autos Fin-Mientras Final 0 Subtotal * 0.07 40 * N_autos 35 * N_autos 30 * N_autos 25 * N_autos

______________________________________________________________________ 142

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 Inicio Lea N_autos Mientras N_autos ≠ 0 haga Lea Tipo Si Tipo = 1 entonces Precio sino Si Tipo = 2 entonces Precio sino Si Tipo = 3 entonces Precio sino Precio Fin-si Fin-si Fin-si Subtotal Precio * N_autos Si N_auto ≥ 2 entonces Desc sino Desc Fin-si Total Subtotal - Desc 0 Subtotal * 0.07 40 35 30 25 precio *N_autos

escriba Total lea N_autos Fin-Mientras Final ______________________________________________________________________ 143

EJERCICIOS 4.6

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 sino T fin si i i+1 escriba i, “TOTAL”, T lea M fin mientras 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. datos: 16, 14, 4, 10, 3, 2, 11 T+R T+2*R

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:

______________________________________________________________________ 144

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 Lectura lea L Asignación V E Escritura escriba L Nulo nulo

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:

B1

B2

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.

______________________________________________________________________ 145

Concatenación

Inicio B1

Decisión Inicio B1 B2

Repetición Inicio B1

B2
V

C C
F F

V

B2

B

B3 B3 Final

B4

B4 Final

B5 Final
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 sino Pago fin si escriba Pago lea Km fin mientras final ______________________________________________________________________ 146 215 + 0.35 * Km 200 + 0.5 * Km

Resolución del Ejemplo 4.12: DIAGRAMA DE FLUJO
Inicio

lea Km

V

Pago 200 + 0.5 *Km

Km ≠ 0

V
Km <100
Escriba.pago lea Km

F
Final

Pago 215 +0.35* Km

F
Se muestran con diferentes cuadros punteados la identificación de las distintas estructuras del diagrama.

Inicio

lea Km

V V Km <100 F

Pago 200 + 0.5 Km
Esc.pago

Km ≠ 0

lea Km

Pago 215 +0 .35 Km

F

Final

______________________________________________________________________ 147

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

Inicio V B3 B4

B1

B2

C1

B6

F V C2 F B8 B5 F C3

V B7

Final 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

______________________________________________________________________ 148

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 ______________________________________________________________________ 149

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, ______________________________________________________________________ 150

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 Básicamente un centinela (llamado también bandera) es una variable cuyo valor representa un estado de una situación específica. 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: ______________________________________________________________________ 151

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 sino Pago 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 ______________________________________________________________________ 152

200 + 0.5 * Km 215 + 0.35 * Km

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

______________________________________________________________________ 153

Prueba de escritorio: Memoria: N 0 1 2 3 Se puede observar que se inicializó la variable N en 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.

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 • Un mensaje Gana ADAN o Gana BETO (Varios) Voto

S

E

• 1

Asumiendo que se tienen todas las papeletas de la votación de la siguiente manera Voto de ADAN 1 2 1 1 2 9 Marca de fin de datos, ya no hay mas votos Voto de BETO 2

• •

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 CB

será el contador de votos de ADAN será el contador de votos de BETO

y

______________________________________________________________________ 154

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 CB • CA + 1 ó CB + 1, se requerirá entonces de una

Una decisión para incrementar el voto a quien corresponda (en un ciclo de Retición) Si voto = 1 (V) … (voto =2 ) (F)… incrementar 1 voto a ADAN incrementar 1 voto a BETO

Una decisión fuera del ciclo repetitivo comparando los contadores y publicando al ganador: Si CA >CB (V) …publicar Gana ADAN (F) …publicar Gana BETO

DICCIONARIO DE VARIABLES Identificador CA CB Voto RESUMEN DEL ANALISIS SALIDA: (Un mensaje) “Gana ADAN” ó “Gana BETO” Descripción Contador de votos de BETO Voto contenido en la boleta .

Contador de votos de ADAN

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.

______________________________________________________________________ 155

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.

______________________________________________________________________ 156

Seudocódigo Nolae Inicio CA CB 0 0 -- Inicializar un contador (1) (2)

lea Voto mientras Voto ≠ 9 haga si Voto = 1 entonces CA sino CB fin si lea Voto fin mientras si CA > CB entonces escriba “Gana ADAN” sino escriba “Gana BETO” fin si final

CA +1 -- Incrementar un voto CB +1

(3) (4)

(5)

PRUEBA DE ESCRITORIO Datos: 1, 2, 1, 1, 2, 9 Memoria Salida

CA 0 1 2 3

CB 0 1 2

Voto 1 2 1 1 2 9

Gana ADAN

______________________________________________________________________ 157

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 2) Incremento generalmente en 1 en un Ciclo Repetitivo: CA CA 0

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

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) Línea (7)

Escriba “Total de votantes: “, votantes

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

______________________________________________________________________ 158

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 Descuento Subtotal Isv C_20 C_10 N_Clientes

Valor de la venta sin isv Valor del descuento Subtotal,Nuevo valor de venta con descuento Valor del Isv Contador de clientes con 20% descuento contador de clientes con 10% descuento Clientes totales atendidos

(Real en Lps.) (Real en Lps.) (Real en Lps.) (Real en Lps.) (Entero) (Entero) (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: ó Calcularlo sumando C_20 y C_10, así: • S ESTRATEGIA (Varios) Total N_Clientes N_Clientes + 1 N_Clientes C_20 + C_10

-----------------+--------------C_20, S C_10, Clientes con 20% de descuento: Clientes con 10% de descuento:

Asignación Característica

C_20 C_10

C_20 + 1 C_10 + 1 C_20 + C_10

N_Clientes Total de clientes atendidos

N_clientes

______________________________________________________________________ 159

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) 1 por ciclo y además C_20, C_10 , N_clientes Val_venta (3 números y sus mensajes) ENTRADA (Varios números) 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 Total

A continuación el respectivo algoritmo, considerando todo lo detallado en la Estrategia y Resumen del Análisis previos.

______________________________________________________________________ 160

Algoritmo

Inicio C_20 C_10 ……….. Lea Val_venta Mientras Val_venta ≠ 0 haga Si Val_venta > 200 Entonces Deduccion C_20 Sino Deduccion C_10 Fin si Subtotal Isv Total ………. Lea Val_venta Fin mientras N_clientes C_20 + C_10 ………. (8) (9) (10) (11) Escriba “Clientes con 20% de descuento: “; C_20 Escriba “Clientes con 10% de descuento: “; C_10 Escriba “Total de clientes atendidos: “; N_clientes 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. Val_venta - deduccion Subtotal + isv (7) subtotal *0.12 Val_venta * 0.10 (6) C_10 + 1 Val_venta * 0.20 (5) C_20 + 1 (4) 0 0 (1) (2) (3)

Escriba “Total a pagar Lps. “, total

______________________________________________________________________ 161

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 N_clientes 0 en la Línea (3) incrementándolo en el proceso repetitivo 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: ______________________________________________________________________ 162

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
asignación respectiva.

Acum +X

Note que se escribe la MISMA VARIABLE a AMBOS LADOS en la 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..

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) • S Pago E (Varios) Nbol Cod ------------------+--------------------------Total Boletos de primera clase S Total Boletos de primera clase Ingresos totales C_primera C_econo T_ing
Asignación Característica

C_primera C_econo T_ing

C_primera + nbol C_econo + nbol

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 ______________________________________________________________________ 163

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 Cod Nbol Pago C_primera C_econo T_ing

Descripción Código del tipo de tarifa Número de boletos Total a pagar contador de boletos de primera clase contador de boletos de clase económica Ingresos totales de la empresa

Tipo de dato Entero Entero Real Entero Entero 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 ………….… …………… ……………. Lea Nbol Mientras Nbol ≠ 0 haga Lea Cod Si Cod = 1 entonces Pago 200 * Nbol …………… sino Pago 110 * Nbol (5) ……………. Fin-si escriba “Total a a pagar: Lps. ”, Pago ………………… Lea Nbol Fin-Mientras …………....... …………… ……………. Escriba “Fin del Programa ” Final ______________________________________________________________________ 164 (1) (2) (3)
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

(4)

respuestas:

(6)

(7) (8) (9)

Inicio C_primera C_econo T_ing 0.0 Lea Nbol Mientras Nbol ≠ 0 haga Lea Cod Si Cod = 1 entonces Pago sino Pago Fin-si escriba “Total a pagar: Lps. ”, Pago T_ing Fin-Mientras T_ing + pago 110 * Nbol C_econo 200 * Nbol C_primera 0 0

Observaciones (1) Tipo de dato entero (pueden ir en la misma línea) (2) No se escribe punto decimal “0”
(3) Tipo real, en su inicialización se utilizará

punto decimal “0.0”

C_primera + nbol

(4)

C_econo + nbol

(5)

(6)

Lea Nbol Escriba “Boletos de primera clase vendidos: “, C_primera (7) Escriba “Boletos de clase economica: “, C_econo Escriba “Ingresos Totales Lps.”, T_ing 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. (8) (9)

______________________________________________________________________ 165

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? ______________________________________________________________________ 166 La repetición (mientras) se puede controlar con condiciones diversas, no solamente con centinelas

2.2.1) inicio

Realizar la P.E. de los siguientes algoritmos

c

0 escriba “Hola” c c+1

mientras c <3 haga

fin mientras escriba “Se repitió 3 veces” final Después de realizar las pruebas de escritorio, las salidas y que

2.2) inicio i 1 escriba “Hola” i i+1 fin mientras escriba “Se repitió 3 veces” final mientras i < 3 haga

2.1) y 2.2) Conteste las siguientes preguntas: ¿Qué semejanzas tienen diferencias encuentra en las inicializaciones de los contadores y en las condiciones de repetición?.

¿ 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. ______________________________________________________________________ 167

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

i

1

REPETICION CONTROLADA POR CONTADOR

mientras i < 3 haga Rango i i+1 Leer el la siguiente página la Observación 4.9.4.1

fin mientras

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:

______________________________________________________________________ 168

PRUEBA DE ESCRITORIO Dato: 4 Salida I 1 2 3 4 5 Esta es la vez numero 1 Esta es la vez numero 2 Esta es la vez numero 3 Esta es la vez numero 4

Memoria N 4

Observación 4.9.4.1 Las líneas marcadas con una de una repetición controlada por Contador: (i) Inicialización del contador i (en general) en 1, En la línea del mientras se compara Note que el rango se realizará n - veces Al final del rango se incremente i en 1, i

, son las 3 características 1

i < N veces 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?

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

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 ______________________________________________________________________ 169

ESTRATEGIA N (un número) S Suma (1 número) E X, El número en un ciclo (N+1 número) Observación 4.9.4.3

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.

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:

______________________________________________________________________ 170

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 Lea N i 1 0 --Se lee cuantos números se van a sumar.

mientras i < N haga lea X Suma i i+1 Suma + X

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 Suma 0 3 8 10 17 21 N 5 i 1 2 3 4 5 6 X 3 5 2 7 4 La suma de los numeros es: 21 Salida

______________________________________________________________________ 171

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 Val_Venta (1 número) (N números)

S (Varios) Total

E

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:

----------------------- + ------------------------C_20, Clientes con 20% de descuento, C_10, Clientes con 10% de descuento, Ingresos_20 S
(1)

ASIGNACION CARACTERISTICA

C_20 C_10

C_20 + 1 C_10 + 1

Ingresos_20 Ingresos_20+total V_prom_20 Ingresos_20/C_20

V_prom_20 Cálculo que requiere haber acumulado previamente los Ingresos_20

Ingresos_10 V_prom_20 Idem

Ingresos_10 Ingresos_10+total 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 ______________________________________________________________________ 172

Inicio C_20 0, C_10 0 0.0 (1) (2) (3) (4) (5) (6) (7) Val_venta * 20 (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) ingresos_20 / C_20 ………. ingresos_10 / C_10 ………. (19) (20) (21) (22) Ingreso_20 0.0, Ingreso_10

Lea N_clientes I 1

Mientras i < N_clientes Lea Val_venta Si Val_venta > 200 Entonces Deduccion Total C_20 Sino Deduccion Total C_10 Fin si Escriba “Total a pagar Lps. ”,total I I+1 Val_venta * 10 Val_venta- deducción C_10 + 1 Ingreso_10 + Total Val_venta – deduccion C_20 + 1 Ingreso_20 + Total

Ingreso_20

Ingreso_10

Fin mientras V_prom_20 V_prom_10

Escriba “Clientes con 20% de descuento: ”; C_20 Escriba “Clientes con 10% de descuento: ”; C_10

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

______________________________________________________________________ 173

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

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.

A continuación se presenta otro tipo de acumulador llamado Acumulador Multiplicativo ______________________________________________________________________ 174

Observación 4.9.4.5 Existe el Acumulador Multiplicativo, que igualmente tiene 3 Momentos: • • • Inicialización antes de un ciclo repetitivo: Incremento generalmente en un ciclo repetitivo: Impresión final: P 1 P P * num

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.

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

______________________________________________________________________ 175

El algoritmo final es: Inicio Producto Lea N I 1 Lea X Producto 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 Producto 1 3 15 30 210 840 N 5 i 1 2 3 4 5 6 X 3 5 2 7 4 El producto de los numeros es: 840 Salida Producto * X Mientras i < N haga 1

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.

______________________________________________________________________ 176

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.3Ampliar el algoritmo del problema anterior para calcular el ingreso total de la tienda. 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.5.6.7.8.Ampliar el algoritmo anterior para N estudiantes. Calcular la suma de los cuadrados de los primeros 10 números enteros positivos Dados N números distintos de cero contar cuantos son positivos y cuantos negativos. Se tienen 12 ecuaciones de segundo grado. Determinar cuántas tienen soluciones no reales. Construir la tabla de equivalencia de temperaturas en grados centígrados a grados Fahrenheit, para los valores en C de la siguiente tabla: C 0 1 2 3 4 5 6 7 9.Modificar el algoritmo del problema anterior para: a) b) Valores en C de: 0, 10, 20, 30,…70 Valores en C de: -15, -10, -5, 0, 5,…,40 F

Del Apéndice B realizar los ejercicios del 10 al 18: 10. Ejercicio I incisos 1 al 3 ______________________________________________________________________ 177

11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.22

Ejercicio I Ejercicio I Ejercicio III Ejercicio III

incisos 4 y 5 inciso 6 incisos 12 b) incisos 12 c) hasta aquí del Apéndice B.

Ejercicio III incisos 12 a)

Ejercicio VI incisos 24 y 25 Ejercicio VI incisos 26 y 27

Imprimir los números del 1 al 100 sin proporcionar ninguna entrada. Leer varios números hasta encontrar uno que sea mayor de 100. Leer varios números e ir calculando su suma, hasta que ésta sobrepase a 200. Calcular la nota media de N estudiantes. 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. 25. 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). 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)

______________________________________________________________________ 178

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.

B1

B2

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:

A

1

2

3

Concatenando 1 con 2 y resulta A. A

3

Luego, concatenando A con 3 y se obtiene un b.e. llamado B. B A 3

Que en detalle sería:

___________________________________________________________________ 179

B

A

1

2

3

La anterior no es la única forma de concatenar estos bloques, por ejemplo, se puede concatenar 2 con 3 y obtener C: C

1

2

3

Luego, se puede concatenar 1 con C y obtener D:

D 1

C

2

3

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:

1

2

3

___________________________________________________________________ 180

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: Si C Entonces B1 Sino Nulo Fin si Si C ó fin si entonces B1

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: ___________________________________________________________________ 181

V

C C

F

B1

B2

El diagrama anterior realmente equivale a:

V

F

C B1
nulo

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á: ___________________________________________________________________ 182

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>c V F a>b F a>c V F b>c F Y el desglose correspondiente es: 1.LECTURA DE DATOS 1.1 Leer a 1.1 Leer b 1.1 Leer c ___________________________________________________________________ 183 c,”es mayor” b, “es mayor” V “b mayor” c, “es mayor” a, “es mayor”

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 fin si sino si a < c entonces escriba b, “es mayor” sino si b > c entonces escriba b, “es mayor” sino Fin si fin si fin si final escriba c, “es mayor” escriba c, “es mayor”

___________________________________________________________________ 184

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.

___________________________________________________________________ 185

Decisión. Lea a,b,c, F a>b V a>c a>c V F b>c V F

“a mayor”

“c mayor”

“b mayor”

“b mayor”

“c mayor”

En un ejemplo como el anterior, un diagrama de flujo es más claro para seguir el algoritmo. V V a>c F “c mayor”

“a mayor”

Lea a,b,c,

a>b V “b mayor” a>c F F b>c F “c mayor” V “b mayor”

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: ___________________________________________________________________ 186

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

___________________________________________________________________ 187

El diagrama de flujo en este caso tiene la siguiente forma:
inicio

Lea a,b,c,

V

a>b y a>c

F

“a mayor”

V

b>a y b>c

F

“b mayor”

V
c>a y c>b

F

“c mayor”

fin 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). ___________________________________________________________________ 188

Esta estructura compuesta aparece muchas veces, por lo que se ha decidido simplificar su representación denotándola así: Caso i i=1 i=2 i=3 sino 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: Caso i 1: 2: 3: fin-caso 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 : 4, 5 : 6, 8, 9 : 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. B1 B2 B3 B1 B2 B3 BLOQUE CASO, variante de la Decisión :B1 :B2 :B3 :B4

Sino: B4

___________________________________________________________________ 189

i

i=1 B1

i=2 B2

i=3 B3

sino B4

B1 1 2 i 3 B3 sino B4 B2

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.2.3.4.5.Perfectas condiciones, como nuevo Buenas condiciones Completo, pero con desgaste natural Completo, maltratado o rayado Malas condiciones

___________________________________________________________________ 190

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 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 C1 C2 C3 C4 C5 C1 C2 C3 C4 C5 TT TP 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). Contador de libros en el estado 1 Contador de libros en el estado 2 Contador de libros en el estado 3 Contador de libros en el estado 4 Contador de libros en el estado 5 Porcentaje de libros en el estado 1 Porcentaje de libros en el estado 2 Porcentaje de libros en el estado 3 Porcentaje de libros en el estado 4 Porcentaje de libros en el estado 5 Total de libros Total de porcentaje (se espera que sea 100 o muy cercano a 100)

% de libros ---.-----.-----.-----.-----.-----.---

---------------------------

RESUMEN DEL ANALISIS SALIDA: [Ver diseño de reporte]

___________________________________________________________________ 191

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 2.Lectura del primer dato

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 Lea E Mientras E ≠ 0 haga Caso E 1: 2: 3: 4: 5: fin caso lea E fin mientras ___________________________________________________________________ 192 C1 C2 C3 C4 C5 C1 + 1 C2 + 1 C3 + 1 C4 + 1 C5 + 1 0; C4 0; C5 0

TT P1 P3 P5 TP

C1+ C2 + C3 + C4 + C5 C1/TT * 100 ; P2 ← C2/TT * 100 C3/TT * 100 ; P4 ← C4/TT * 100 C5/TT * 100 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 1 2 3 AUMENTO % 15 10 8

___________________________________________________________________ 193

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 Categoria Sueldo Aumento Nuevo_S N_empleados Descripción__________ Categoria Sueldo Inicial Aumento Nuevo sueldo 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 sino Si categoria = 2 entonces aumento sino aumento Fin-si Fin-si sueldo * 0.10 sueldo *0.08 sueldo *0.15

Nuevo_s

Sueldo + aumento

Escriba Categoria Escriba Nuevo_s I i +1 Fin-Mientras Final ___________________________________________________________________ 194

Utilizando el Bloque Caso se tiene: Inicio Lea N I 1 Mientras i < N haga Lea categoria Lea sueldo Caso categoria 1: aumento 2: aumento Sino: aumento Fin caso Nuevo_s Sueldo + aumento Escriba categoria Escriba Nuevo_s I Final A continuación el diccionario de variables modificado para incorporar los reportes: NUEVO DICCIONARIO DE VARIABLES Identificador Categoria Sueldo Aumento Nuevo_S N E1 E2 E3 S1 S2 Categoria Sueldo Inicial Aumento Nuevo sueldo Número de empleados Empleados de la categoría 1 Empleados de la categoría 2 Empleados de la categoría 3 Total pagado a los empleados de la categoría 1 Total pagado a los empleados de la categoría 2 Descripción i+1 Fin-mientras sueldo * 0.15 sueldo * 0.10 sueldo *0.08

___________________________________________________________________ 195

S3 Planilla

Total pagado a los empleados de la categoría 3 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) Nuevo_s (N números) Total de salidas: 2 * N números --------------+------------------C1, C2, C3, C4 Empleados de cada categoría S S1, S2, S3 Planilla Total pagado en cada categoría Entradas Categoria (N números) Sueldo (N números) Total de entradas: 2*N +1 números Asignaciones sugeridas C1 S1 C1 + 1 S1 + Nuevo_s S1 + S2 + S3

Planilla

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 S1 0, E2 0.0, S2 0, E3 0.0, S3 0 0.0

___________________________________________________________________ 196

Lea N I 1 Lea categoria Lea sueldo Caso categoria 1: aumento Nuevo_s E1 S1 2: E1 + 1 S1 + Nuevo_s sueldo * 0.10 Sueldo + aumento sueldo * 0.15 Sueldo + aumento Mientras i < N haga

aumento Nuevo_s E2 S2

E2 + 1 S2 + Nuevo_s sueldo *0.08 Sueldo + aumento

Sino:

aumento Nuevo_s E3 S3

E3 + 1 S3 + Nuevo_s

Fin caso Escriba categoria Escriba Nuevo_s I Planilla i+1 S1 + S2+S3 Fin-mientras 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

___________________________________________________________________ 197

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: 2: 3: Sino: Fin caso si N_auto ≥ 2 entonces Desc sino Desc 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 Tipo N_autos Subtotal Descripción Tipo de servicio Número de autos Subtotal Subtotal * 0.07 0 Subtotal Subtotal Subtotal Subtotal 25 * N_autos - 30 * N_autos 35 * N_autos 40 * N_autos

___________________________________________________________________ 198

Desc Total C1 C2 C3 C4 Ing1 Ing2 Ing3 Ing4

Descuento Total a pagar Clientes atendidos con el servicio tipo 1 Clientes atendidos con el servicio tipo 2 Clientes atendidos con el servicio tipo 3 Clientes atendidos con el servicio tipo 4 Ingresos por el servicio tipo 1 Ingresos por el servicio tipo 2 Ingresos por el servicio tipo 3 Ingresos por el servicio tipo 4 Asignaciones sugeridas

C1,C2,C3,C4 S

………Clientes de cada Tipo,

C1 Ing1 Ing2

C1+1 Ing1 + Total Ing2 + Total

Ing1, Ing2, Ing,3, Ing.4 Ingresos de cada Tipo

Para acumular los ingresos por tipo “Ing1 requiere haber calculado el total como: “total

Ing1 + Total” en el BLOQUE CASO, se 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 sino Desc Fin-si Se puede simplificar el ejercicio asignando solamente los porcentajes de descuento, previo al Bloque caso: si N_auto ≥ 2 entonces porcentaje_desc sino porcentaje_desc fin-si El algoritmo final es: ___________________________________________________________________ 199 0.07 0.0 Subtotal * 0.07 0

Inicio C1 Ing1 0, C2 0, C3 0, C4 0 0.0, Ing4 0.0 0.0, Ing2 0.0, Ing3

Lea N_autos Mientras N_autos ≠ 0 haga
Lea tipo si N_auto ≥ 2 entonces porcentaje_desc sino porcentaje_desc Fin-si Caso tipo 1: Subtotal ← 25 * N_autos Descuento Total C1 Ing1 2: C1 +1 Ing1 + Total subtotal * porcentaje_desc subtotal * porcentaje_desc subtotal - descuento 0.07 0.0

Subtotal ← 30 * N_autos Descuento Total C2 Ing2 C2 +1 Ing2 + Total subtotal * porcentaje_desc subtotal - descuento

3:

Subtotal ← 35 * N_autos Descuento Total C3 Ing3 C3 +1 Ing3 + Total subtotal * porcentaje_desc subtotal - descuento

sino:

Subtotal ← 40 * N_autos Descuento Total C4 Ing4 C4 +1 Ing4 + Total subtotal - descuento

Fin caso Escriba Total Lea N_autos Fin-mientras

___________________________________________________________________ 200

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. 5. 6. 7. Ejercicios II inciso 11. Ejercicios No.7 y 8. Ejercicio No. 9. Ejercicio No. 10.

___________________________________________________________________ 201

5.3.5.3.1

VARIANTES Y DERIVADAS DE LA REPETICION 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 B1 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. ___________________________________________________________________ 202 Valor_inicial, Valor_final haga BLOQUE PARA

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 Lea N i 1 lea X Suma I fin mientras final Utilizando el Bloque Para, el algoritmo solicitado es: Inicio Suma Lea N Para i 0 1, N haga lea X Suma fin para final ___________________________________________________________________ 203 Suma + X (B1) (B2) (B3) (B4) (B5) (B6) Suma + X I+1 0 (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8)

mientras i < N haga

escriba “ La suma de los números es : “, Suma

escriba “ La suma de los números es : “, Suma

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

___________________________________________________________________ 204

inicio C_20 Lea N Para 1 1, N haga Lea Val_venta Si Val_venta > 200 Entonces Deduccion Total C_20 Sino Deduccion Total C_10 Fin si Escriba “Total a pagar Lps. “,total Fin para Escriba “Clientes con 20% de descuento: “, C_20 Escriba “Clientes con 10% de descuento: “, C_10 Escriba “Ventas con 20% de descuento: “, Ingreso_20 Escriba “Ventas con 10% de descuento: “, Ingreso_10 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). (15) (16) (19) (20) (21) (22) Val_venta * 10 (11) (12) (13) (14) Val_venta- deducción C_10 + 1 Ingreso_10 + Total Val_venta * 20 (7) (8) (9) (10) Val_venta – deduccion C_20 + 1 Ingreso_20 + Total 0, C_10 0 0.0 (1) (2) (3) (4) (5) (6) Ingreso_20 0.0, Ingreso_10

Ingreso_20

Ingreso_10

___________________________________________________________________ 205

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 S1 0, E2 0.0, S2 0, E3 0.0, S3 0 0.0

Lea N Para i 1, N haga Lea categoria Lea sueldo ___________________________________________________________________ 206

Caso categoria 1: aumento Nuevo_s E1 S1 2: E1 + 1 S1 + Nuevo_s sueldo * 0.10 Sueldo + aumento sueldo * 0.15 Sueldo + aumento

aumento Nuevo_s E2 S2

E2 + 1 S2 + Nuevo_s sueldo *0.08 Sueldo + aumento

Sino: aumento Nuevo_s E3 S3 Fin caso Escriba categoria Escriba Nuevo_s Fin-para Planilla S1 + S2+S3

E3 + 1 S3 + Nuevo_s

--La impresión del reporte es igual . . .

EJERCICIOS 5.3.1.1
En cada problema desarrollar un breve análisis, desglose y algoritmo 1.2.3.4.Imprima N veces el mensaje “Hola mundo”. Genere la Tabla de multiplicación del 5. Genere la Tabla de multiplicación del número N (se debe leer N). Genere todas las tablas de multiplicación rotulando debidamente cada una de ellas Del Apéndice B los siguientes ejercicios: 5. 6. 7. Ejercicio No. 25. Ejercicio No. 26. Ejercicio No. 27.

___________________________________________________________________ 207

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, ESTRATEGIA Entrada • • NO hay, los números Se generan internamente Salida (20 números) X 20 términos (los números pares son positivos)

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, 2 4, 2 6, 2 8,

Esto sugiere un acumulador aditivo con incrementos de 2, así: X ALGORITMO Inicio X 0 1, 20 haga X Fin para 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 ___________________________________________________________________ 208 x+2 Escriba X (1) (2) (3) (4) (5) Para i X+2

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 Datos: No hay Memoria X 0 2 4 6 8 i 1 2 3 4 5 2 4 6 8 Salida 1, 4 haga (2) -- Solamente 4 Números.

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, Modificación Inicio X 2 1, 20 haga Escriba X X Fin para Final ___________________________________________________________________ 209 x+2 (1) (2) (3) (4) (5) Para i 20 términos del Ejemplo 5.9

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 Datos: No hay Memoria X 2 4 6 8 10 i 1 2 3 4 5 Salida 2 4 6 8 1, 4 haga (2) --Solamente 4 números

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

___________________________________________________________________ 210

ESTRATEGIA N Entrada (La cantidad de números que se desear imprimir ) Salida N números

• •

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, 1 *3=3 … *3=9 … *3=27 … *3=81 9, 27, 81, …. N términos

La asignación para el acumulador sería pot procederá a escribir el algoritmo:

pot * 3, con todas estas consideraciones se

ALGORITMO Inicio Lea N pot Para i 1 1, N haga pot Fin para final Se deja al lector la realización de la Prueba de Escritorio respectiva con Dato: 4 pot * 3 Escriba pot

___________________________________________________________________ 211

Ejemplo 5.12 (Bloque Para, potencias de 3, signos alternos)
Generar la siguiente sucesión 3, − 9, 27 , −81 … ESTRATEGIA N Entrada (La cantidad de 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 Signo Signo Signo Signo −1 − signo − signo −signo Memoria Signo -1 1 -1 1 Salida signo_pot (N números) N términos

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

___________________________________________________________________ 212

Signo pot Para i 1

−1 1, N haga Signo pot −signo pot * 3 signo * pot 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.

signo_pot Fin para final

Escriba signo_pot

PRUEBA DE ESCRITORIO Datos: 4 Memoria N 4 Signo -1 1 -1 1 −1 pot 1 3 9 27 81 I 1 2 3 4 5 signo_pot 3 −9 27 − 81 3 −9 27 − 81 Salida

5.3.1.3 Aplicaciones del Bloque Para, Series finitas Otra aplicación de acumuladores y contadores son las SERIES. 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.

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) ___________________________________________________________________ 213

Para tener mas claridad se puede replantear el ejercicio, así: Calcular el valor de la Suma: Suma = 2 + 4 +6 +8 + … ESTRATEGIA Entrada NO hay, los números Se generan internamente • • Salida Suma (1 Número) 50 términos:

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 + X, que a su vez tendrá que inicializarse en Cero. Suma es un acumulador aditivo: Suma

ALGORITMO Inicio Suma X 2 1, 50 haga Suma X Fin para Escriba “El valor de la serie es: “, suma 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) Línea (2) Línea (3) Inicialización del acumulador Suma en cero. Inicialización de los términos a sumar que a su vez se incrementarán internamente de dos en dos. Bloque Para que inicia en 1 y realiza el Rango (líneas 4 y 5)50 veces. Suma + X X+ 2 Para i 0 (1) (2) (3) (4) (5) (6) (7)

___________________________________________________________________ 214

Línea (4) Línea (5) Línea (7)

Incremento del acumulador suma en el valor del término generado X. 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á. 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.

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.

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 5.14.b) La serie −1/2, 2/5, −3/8, 4/11, …30 términos (solo indicar los cocientes) 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.

___________________________________________________________________ 215

ALGORITMO Inicio denominador signo Para i 1 1, 30 haga signo signo_i −signo signo * i denominador + 3 2 (1) (2) (3) (4) (5) (7)

escriba signo_i, “ / “, denominador (6) denominador 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 Memoria Denominador 2 5 8 11 Signo 1 -1 1 -1 I 1 2 3 4 signo_i -1 2 -3 -1 / 2 2/5 -3 / 8 Para i 1, 3 haga (3) Salida

Ejemplo 5.14.b) NOLAE Inicio Serie signo 0

(S = −1/2 + 2/5 −3/8 +…)

(1) 2 (2) (3)

denominador 1

___________________________________________________________________ 216

Para i

1, 30 haga signo signo_i cociente serie −signo signo * i signo_i / denominador serie + cociente denominador + 3

(4) (5) (6) (7) (8) (9) (10)

denominador Fin para Escriba “Serie = ”, serie 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) Para i 1, 3 haga (4) Salida denominador Signo 2 5 8 1 -1 1 -1 i 1 2 3 4 signo_i -1 2 -3 cociente - 0.5 0.4 -0.375 Serie = -0.475

PRUEBA DE ESCRITORIO para tres términos Memoria Serie 0 -0.5 -0.1 -0.475

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

___________________________________________________________________ 217

Se puede observar que los incrementos varían comienza con forma alterna: 0,
1

1, después

4 y sigue en

1 ,
4

5,
1

6,
4

10,
1

11,
4

15,…

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 Ramal Verdadero Ramal Falso ALGORITMO Inicio Bandera 1 Num 0 Para i 1, 25 haga Escriba Num Si Bandera = 1 Entonces Num Num + 1 Bandera -1 Sino Num Num + 4 Bandera 1 Fin si Fin para Final Comentarios al algoritmo: Línea (1) Línea (2) Línea (4) Línea (5) Línea (6) Se inicializa la Bandera en un valor arbitrario igual a 1 Se inicializa el valor de Num en cero que es el primer valor de la sucesión Impresión del número en turno de la sucesión
Se verifica mediante una decisión el valor de la bandera si es 1 hace el ramal (V)

de

-1 a 1. y esto servirá en una
a

decisión en particular como un interruptor para cambiar de: (con un incremento de 1) (con un incremento de 4)

(1) (2) (3) (4) (5) (6) (7) (8) (9)

Generación del siguiente término con un incremento den 1 y

___________________________________________________________________ 218

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 Memoria Bandera 1 --1 1 -1 1 num 0 1 5 6 10 11 i 1 2 3 4 5 6 Para i 1, 5 haga (3)

Salida 0 1 5 6 10

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 N! = N * (N-1) * (N-2) * (N-3) * … *1 si N > 2 si N=0 o si N=1

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) ___________________________________________________________________ 219

4! = 1 1*1=1

*

2

*

3 *

4 = 24

Reconoce el lector ¿Quién progresa en esa forma?

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 Para i Fin para escriba “el factorial de 4 es . “, factorial Final Se deja al lector realizar la prueba de escritorio respectiva. (7) 1 factorial *i (1) (3) (4) 1, 4 haga Factorial

EJERCICIOS 5.3.1.2 Para los siguientes ejercicios elabore el algoritmo correspondiente: 1. 2. 3. Del Apéndice C los incisos 4, 5. Del Apéndice C los incisos 6, y 7. Generar la sucesión 3, 5, 10, 12, 15, …. 20 términos ___________________________________________________________________ 220

4. 5. 6. 7. 8. 9.

Generar la sucesión 1/5, 2/10, 3/15,…….8/40 Ejercicios del Apéndice B inciso 21 (sucesiones) Ejercicios del Apéndice B, inciso 22 (series) Calcular la suma de las potencias de 2 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 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: B Mientras no C haga B Fin mientras REPITA HASTA

Que dibujando en diagrama de flujo sería:

___________________________________________________________________ 221

B

V ┐C F Figura 5.3.2.1 B

La representación anterior se puede simplificar de la siguiente manera:

B

F C V B

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.

___________________________________________________________________ 222

B

F C V

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: Repita B Hasta que C En donde C es una condición de repetición y B es un bloque estructurado que constituye el Rango

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.

___________________________________________________________________ 223

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 Lea Num S s + Num Hasta que S > 200 Escriba “La suma es: ”, S Final A continuación se muestra la prueba de escritorio paso a paso con los datos dados: Datos: 100, 50, 65 Memoria: S 0 100 100 Num Salida: (1) (2) (3) (4) (5) (6) Repita

Línea (1): Línea (2): Línea (3): Línea (4): Línea (5):

Inicializa S en cero, y en la NO existe una condición que limite la primera entrada al ciclo de repetición Se lee número 100 y se acumula en S, no como resultado 100. 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.

___________________________________________________________________ 224

Datos: 100, 50, 65 Memoria: S 0 100 150 Línea (3): Línea (4) Línea (5) Se lee el número 50. y se acumula en S, dando como resultado 150. 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. Num 100 50 Salida:

Datos: 100, 50, 65, 10 Memoria: S 0 100 150 210 Línea (3): Línea (4): Línea (5): Se lee el número 65 y se acumula en S, da como resultado 210. 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. Num 100 50 65 La suma es: 210 Salida:

___________________________________________________________________ 225

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

Repetición controlada por centinela
lea Km mientras Km ≠ 0 haga si Km < 100 entonces Pago sino Pago 215 + 0.35 *Km fin si escriba Pago lea Km fin mientras 200 + 0.5 *Km lea Km Repita

Bloque Repita-Hasta

si Km < 100 entonces Pago sino Pago fin si escriba Pago lea Km Hasta que Km=0 215 + 0.35 * Km 200 + 0.5 * Km

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

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. Repita Lea Km si Km < 100 entonces Pago sino Pago fin si Hasta- que Km ≠ 0 : etc. 215 + 0.35 * Km 200 + 0.5 * Km

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

___________________________________________________________________ 227

EJERCICIOS 5.3.2 1. 2. 3. 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. Ejercicios del Apéndice C incisos del 1 al 3 (pág.299). 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.

___________________________________________________________________ 228

CAPITULO 6 SUBALGORITMOS, ARREGLOS Y ELEMENTOS DE ESTRUCTURAS DE DATOS
6.1 Subalgoritmos Un subalgoritmo es un algoritmo que necesita ser llamado o invocado por otro algoritmo para su ejecución. 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. ______________________________________________________________________ 229

Estrategia: Promedio Salida mensaje Aprobo ó Reprobo Entrada Cuenta nota1 nota2 nota3 • Después de calcular el promedio, se necesita una decisión

Si promedio > 60 (V) el alumno Aprueba (F)
El algoritmo resultante es: Inicio lea cuenta lea nota1 lea nota2 lea nota3 Promedio (nota1+ nota2 + nota3)/3

Sino

Reprueba

(1) (2) (3) (4) (5) (6) (7) Mensaje “Aprobo” (8) (9) Mensaje “Reprobo” (10) (11) (12) (13) Algoritmo 6.1

si promedio > 60 entonces

sino

fin si escriba promedio escriba mensaje Final

Se puede observar que: En que las Líneas del 1 al 4 se realiza la … Las líneas del 5 al 11se realizan los … LECTURA DE DATOS CALCULOS Y CLASIFICACION IMPRESIÓN DE RESULTADOS

Finalmente en las líneas 11 y 12 se hace la …

______________________________________________________________________ 230

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) lea cuenta lea nota1 lea nota2 lea nota3 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 si promedio > 60 entonces Mensaje sino Mensaje Fin si Final -- Se coloca el nombre entre paréntesis. Línea (0) (1) (2) (3) (4)

(5) (6) (7) (8) (9) (10) (11)

“Aprobo ” “Reprobo”

Inicio (Impresion) escriba promedio escriba mensaje Final

(12) (13)

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

Inicio (Principal) Lectura --en la invocación basta colocar el nombre del subalgoritmo Calculos_y_Clasificacion Impresión Algoritmo 6.2 Final 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 Toda DEFINICION de un subalgoritmo debe estar colocada antes del algoritmo (u principio: otro subalgoritmo) que lo va a llamar o INVOCAR. 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,

______________________________________________________________________ 232

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.3.Del Apéndice C, hacer los ejercicios 10 al 13 (pág. 299,300). 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:

______________________________________________________________________ 233

RANGO habitantes Menor de 1,000 De 1,000 a 5,000 De 5,001 a 10,000 Mas de 10, 001

CATEGORIA / MUNICIPIO INCIPIENTE EN DESARROLLO FLORECIENTE MADURO

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

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.

______________________________________________________________________ 234

DESARROLLO DE UN BREVE ANALISIS Se presentará el siguiente menú.

MENU 1. Sumar dos números 2. Restar dos números 3. Terminar el programa Teclee el número de su opción: __

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.

Proporcione los números que se van a sumar: X =__ Y =__ La suma es :_____ Teclee <<Enter>> para continuar 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

______________________________________________________________________ 235

2do. Desglose 1.2 Según sea el caso para la opción: 1.2.1 1.2.2 (Opción = 1) Solicitar los números, sumarlos e imprimirlos (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) Limpia_Pantalla 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

(1) (2)

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” ______________________________________________________________________ 236

escriba “X = ” lea X escriba “Y = ” lea Y S X+Y

escriba “La suma es : ”, S escriba “Teclee <<Enter>> para continuar ” lea 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. --Efecto de una Pausa

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

______________________________________________________________________ 237

Inicio (Principal) Repita Pantalla_Menu Caso OPCION 1: Suma 2: Resta Sino: nulo fin caso hasta que OPCION = 3 Final
ESQUEMA GENERAL DE UN MENU ITERATIVO

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.

______________________________________________________________________ 238

Opciones

presentadas

en

el Invocación a los procedimientos En el Bloque Caso Caso opcion 1: Suma 2: Resta

procedimiento, Pantalla_ Menu Put(“1.-Sumar dos números”) Put(“2.-Restar dos números”)

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 2 3

Islas Bahía México Madrid

2,500.00 4,800.00 15,000.00

1,000.00 2,500.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 b. Visitas a delfines 300.00 por persona 80.00 por persona

2. México a. Visitas a las pirámides b. Presentación Ballet Folklórico c. Visita a Garibaldi 60.00 por persona 50.00 por persona 200.00 por persona

3. Madrid a. Visita a Valencia 270.00 por persona

______________________________________________________________________ 239

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

MENU 1. 2. 3. 4. Islas de la Bahía Ciudad de México Madrid España Salir del programa

¿Cuál es su opción: ? _____

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

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

______________________________________________________________________ 240

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 1.2 Mostrar el menú en la pantalla Atender la consulta del cliente según sea el caso : 1.2.1 1.2.2 1.2.3 (opción = 1) Consulta para Islas (opción = 2) Consulta para México (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 Pantalla_Menu Islas México Madrid PROPOSITO Presentar el menú en la pantalla Consulta para el paquete Islas Consulta para el paquete México Consulta para el paquete Madrid

DICCIONARIO DE VARIABLES Opcion CE Pesq Pdelf Costo_ce Costo_Pesq Costo_Pdef Costo Impto Total Opción del Menú principal Cantidad de personas extra Cantidad de personas que tomarán clase de esquí acuático Cantidad de personas visita a delfines Costo por persona extra Costo por las clases de esquí acuático Costo por la visita a delfines Subtotal Impuesto sobre ventas (12%) Total a pagar por que paquete

______________________________________________________________________ 241

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 Costo impto Total Pdelf * 80

2500 + costo_ce+ costo_pesq + costo_pdelf costo * 0.12 costo + impto

escriba “Costo base para 2 personas Lps. 2,500.00” escriba “Sub. total ”, costo escriba “Impuesto ”, impto ______________________________________________________________________ 242

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 impto Total costo + Pdelf * 80 costo * 0.10 costo + impto -- es un literal -- acumula -- Usa otra variable pues impto se imprimirá

escriba “Costo base para 2 personas Lps. 2,500.00” 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:

______________________________________________________________________ 243

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: ? _____

______________________________________________________________________ 244

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 : Total Opción del Menú principal : Total a pagar por que paquete Nuevas variables
P_islas P_mex P_madrid Ing_islas Ing_mex Ing_madrid Ing._Total Paquetes vendidos para Islas de la Bahia Paquetes vendidos para México Paquetes vendidos para Madrid Ingresos por la venta de paquetes a las Islas Ingresos por la venta de paquetes a México Ingresos por la venta de paquetes a Madrid Ingreso total de la Agencia de turismo

Asignación P_islas P_islas +1 P_mex mex +1 P_madrid P_madrid +1
Ing_islas Ing_mex Ing_islas+Total Ing_mex+Total

Ing_madrid Ing_madrid+Total 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

______________________________________________________________________ 245

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 Ing_islas Repita Pantalla_Menu Caso OPCION 1: Islas 2: México 3: Madrid 4: Reporte Sino: nulo fin caso hasta que OPCION = 5 Final 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): Línea (12): Se agregó la invocación al subalgoritmo REPORTE 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. 0, P_madrid 0 0.0, Ing_madrid 0.0 (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13)

0.0, Ing_mex

Inicio (Islas) Limpia_Pantalla escriba “ Paquete: Islas de la Bahía” ______________________________________________________________________ 246

escriba costo 2500 escriba “Cantidad de personas:”

-- Costo por 2 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’ entonces lea Pesq costo fin si impto Total costo * 0.10 costo + impto costo + pesq * 300 -- Acumula -- Cubre la posibilidad de mayúsculas y minúsculas

-- si no van a esquí el costo sigue igual no se incrementa -- Usa otra variable pues impto se imprimirá

escriba “Costo base para 2 personas Lps. 2,500.00” escriba “Subtotal “, costo escriba “Impuesto “, impto escriba “ GRAN TOTAL “, Total P_islas Ing_islas P_islas + 1 Ing_islas + total Línea (22) Línea (23) --Se cuenta el paquete --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

______________________________________________________________________ 247

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 Ing_islas Repita Pantalla_Menu Caso OPCION 1: Islas 2: México 0, P_madrid 0 0.0, Ing_madrid 0.0 (1) (2) (3) (4) (5) (6) (7) 0.0, Ing_mex

______________________________________________________________________ 248

3: Madrid Sino: nulo fin caso hasta que OPCION = 4 Reporte Final

(8) (9) (10) (11) (12) (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 Fin si 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) -- Invocación del subalgoritmo Línea (23) --Contamos el paquete --Acumulamos esta venta

total + total*0.06

-- acumulamos en la misma variable --para imprimirla en Islas

Forma_de_pago
escriba “ GRAN TOTAL “, Total P_islas Ing_islas P_islas + 1 Ing_islas + total

escriba “Teclee <<Enter>> para continuar” lea Final (islas) Algoritmo (parte) 6.7c

______________________________________________________________________ 249

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… 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. 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 ______________________________________________________________________ 250

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 Principal

Pantalla_Menu

Islas

Mexico

Madrid

Reportes

Luego el orden es: • • • • • • Subalgoritmo Pantalla_Menu Subalgoritmo Islas Subalgoritmo Mexico Subalgoritmo Madrid Subalgoritmo Reporte Algoritmo principal o programa principal

______________________________________________________________________ 251

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 Principal

Pantalla_Menu

Islas

Mexico

Madrid

Reportes

Forma_de_pago

Forma_de_pago

Forma_de_pago

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: ______________________________________________________________________ 252

TIPO

DESCRIPCION ISLAS DE LA BAHIA RUINAS DE COPAN BIOSFERA DEL RIO PLATANO

Precio X Grupo de 3 personas

1 2 3

L. 5000.00 L. 7000.00 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 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 Principal

P_M

Bahia

Copan

Bios

P_extra

Comida

P_extra

Comida

P_extra

Comida

______________________________________________________________________ 253

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 P_extra Comida escriba “Total a pagar Lps” , Costo Ing_copan Ing_copan + costo --Acumula esta venta 7000 --Costo por 3 personas -- Invoca dos subalgoritmos

escriba “Teclee <<Enter>> para continuar” lea Final

Similarmente para el subalgoritmo Bahia Inicio (Bahia) Limpia_Pantalla costo P_extra Comida escriba “Total a pagar Lps” , Costo Ing_bahia Ing_bahia + costo --Acumula esta venta 5000 -- Costo por 3 personas -- Invoca dos subalgoritmos

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

______________________________________________________________________ 254

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 Sino nulo Fin caso Fin si Final costo + (N_per-3) * 1400

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 Sino nulo Fin caso Fin si Final costo + Per_comi * dias * 150

Otra manera de hacerlo sería ir calculando costos por rubro para después sumar todos estos en el algoritmo del paquete respectivo ejemplo:

______________________________________________________________________ 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 : Precio_Ext 3 : Precio_Ext Sino nulo Fin caso Costo_Ext Sino Costo_Ext 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 Sino Costo_comida Fin si Final 0 Per_comi * dias * precio_comida 0 (N_per-3) * Precio_Ext 1000 1400

En el paquete turístico respectivo se calcula el costo así: ______________________________________________________________________ 256

Costo Costo

5000 + Costo_Ext + Costo_comida 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 Repita Pantalla_Menu Caso OPCION 1: Bahia 2: Copan 3: Bios Sino: nulo fin caso hasta que OPCION = 4 Reporte Final 0.0, Ing_bios 0.0 (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (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. ______________________________________________________________________ 257

6.4

Arreglos Unidimensionados

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.

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: Arreglo X

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)

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

Se pueden realizar las distintas operaciones, esto se puede confirmar haciendo la siguiente… Prueba de escritorio X (1) I 2 X(i) X(i+1) X(4) 10 2 * X(1) X(1) + X(2) 5 * X(i – 1) Dato 6

Lea X(3) Escriba X(I +1)

Memoria: X(1) 10 X(2) 20 X(3) 30 6 X(4) 50 I 2

Salida 6

O en forma equivalente para el arreglo X

X(1) X(2) X(3) X(4)

10 20 30 6 50 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

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.

______________________________________________________________________ 259

EJERCICIOS 6.4 Dado el siguiente arreglo B: Memoria B(1) 8 B(2) 10 B(3) -3 B(4) 2 B(5) 4 B(6) 0

Hacer la prueba de escritorio de cada uno de los siguientes incisos: a.) escriba B(6) X B(5) escriba X b) I 25 X B (i-23) escriba X

c) X 3 Y 8 B(Y-3) x + y escriba B(3) escriba B(5)

d)

I 1 Y B(i) B(y-4) 3 escriba B(3)

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

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: Arreglo X N 5 i 1 2 3 4 5 6 X(1) 4 X(2) 8 X(3) -4 X(4) 0 X(5) 7

Salida NO hay

Vale decir que se pueden usar variantes para la representación en la Memoria de los elementos de un Arreglo como ser: ______________________________________________________________________ 261

a) X(1) 4 X(2) 8 X(3) -4 X(4) 0 X(5) 7

b) O en forma equivalente para el arreglo X X 1 4 2 8 3 -4 4 0 5 7 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, escribiendo Variable e índices d) Y finalmente solo el Nombre y los índices X 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

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) Entrada Arreglo A Salida (5 números) Arreglo A Prom ______________________________________________________________________ 262

• • • •

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 1, 4 haga escriba “A( ” escriba i escriba “ ) = ” lea A(i) S Fin para Prom S/4 s + A(i) Al usuario se le pedirá la información así: A( 1 ) =__ se teclee el valor(lea)

Para i

Escriba “El arreglo leido es: ” Para i 1, 4 haga escriba “A( ” escriba i escriba “ ) = ” escriba A(i) fin para escriba “El promedio de los elementos es: ” escriba Prom Final El usuario mirará la información así: A( 1 ) = 10 se escribe el valor

______________________________________________________________________ 263

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: Arreglo X X(1) X(2) X(3) X(4) 5 4 7 -5 S 0 5 9 17 12 1 2 3 4 5 i 1 2 3 4 5
Prom

Salida

El promedio de los elementos es: 3

3

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) Entrada N (longitud) Arreglo Sueldo Salida (2 números) Mayor_sueldo codigo

Suponiendo que el Arreglo es de longitud 4 se tiene lo siguiente: Sueldo 1 2 3 4 6000 9000 10000 7000 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:

______________________________________________________________________ 264

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 ” escriba i escriba “ = ” lea sueldo(i) Fin para Mayor_sueldo Codigo Para i 1 2, N haga -- Se comparará del segundo elemento en adelante sueldo(1)
Al usuario se le pedirá la información así: Sueldo empleado 1 = ___

Si Sueldo (i) > Mayor_sueldo Entonces Mayor_sueldo Codigo Fin si fin para escriba “El Mayor sueldo es: Lps ” escriba Mayor_sueldo escriba “de el empleado con codigo : ” escriba Codigo Final i Sueldo(i)

______________________________________________________________________ 265

PRUEBA DE ESCRITORIO Datos: Memoria Sueldo N 4 Mayor_sueldo 6000 9000 10000 codigo 1 2 3 2 3 4 5 i 1 2 3 4 5 1 2 3 4 6000 9000 10000 7000
El Mayor sueldo es Lps 10000 de el empleado con codigo: 3

4, 6000, 9000, 10000, 7000 Salida

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) Entrada Arreglo PQ Arreglo SQ • Salida (N +1 números) Arreglo MENSUAL 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

______________________________________________________________________ 266

PQ 1 2 3 3000 4000 5000 1 + 2 3

SQ 1000 2000 3000 1 = 2

MENSUAL 4000 6000 3000+1000=4000

3 8000 Planilla: 18000
PQ(1) + SQ(1) PQ(2) + SQ(2) PQ(3) + SQ(3)

Para calcular MENSUAL(1)
MENSUAL(2) MENSUAL(3)

4000 = 3000 + 1000 6000 = 4000 + 2000 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 Para i 0.0 1, N haga escriba “Empleado ” escriba i lea PQ(i) lea SQ(i) MENSUAL(i) Planilla Fin para ______________________________________________________________________ 267 _ _ PQ(i) + SQ(i) Para el Empleado 1 se leerán las 2 quincenas Empleado 2

Planilla + mensual (I)

Escriba “Empleado Para i 1,n haga Escriba i, “ Fin para Escriba “Planilla Lps. ” Escriba planilla Final

Mensualidad”

”, Mensual (i)

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 1 2 3 1 2 3 SQ 1 2 3 MENSUAL N Planilla I

Salida

Empleado

Mensualidad

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?

______________________________________________________________________ 268

ESTRATEGIA (M + 1 números) Entrada N (No. De Socios) Arreglo C • Salida (M números) Arreglo Porc (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 1 2 3 400 1000 600 1 2 3 Porc

Total: 2000 Los Porcentajes de aportación son: Porc(1) Porc(2) Porc(3) (400 / 2000) * 100=20 % (1000/ 2000) * 100=50 % (600 / 2000) * 100=30 % ó Porc (1) Porc (2) Porc (3) C(1) / total *100 C(2) / total *100 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: inicio Total lea M para i 0 1, M haga Porc(i) C(i) / total *100

lea C (i) Total Total + C (i) fin para ______________________________________________________________________ 269

escriba “Socio para j 1, m haga Porc (j)

Porcentaje de aportación”

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 400 1000 600 Porc 1 2 3 i Total j

1 2 3

Salida Socio Porcentaje de aportacion

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

Salida

Arreglo PAR

Entrada

(5 números) Arreglo E

______________________________________________________________________ 270

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.

1 2 3 4 5

E 3 4 6 7 10

1 2 3

PAR 4 6 10

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.

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 Para i

0 1, 5 haga si E(i) rem 2 = 0 entonces Cp Cp +1 E(i)

Par(cp) 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

______________________________________________________________________ 271

PRUEBA DE ESCRITORIO

Datos 3, 4, 6, 7, 10 Memoria: 1 2 3 4 5 E 3 4 6 7 10 1 2 3 PAR 4 6 10 Cp i k 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. 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.

b) MENSUALIDADES_PLANILLA:

______________________________________________________________________ 272

• •

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) Planilla Final Inicio(Reporte) Escriba “Empleado Para i 1,n haga Escriba i, “ Fin para Escriba “Planilla Lps. ” Escriba planilla Final Inicio (Principal) Lea N Planilla Para i 0.0 1, N haga LECTURA MENSUALIDAD_PLANILLA Fin para REPORTE final ______________________________________________________________________ 273 ”,Mensual (i) Mensualidad” PQ(i) + SQ(i)

Planilla + mensual (I)

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: ______________________________________________________________________ 274

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 Para i 1,n haga MENSUAL(i) Planilla Escriba i, “ Fin para Escriba “Planilla Lps. ” Escriba planilla Final En el Ejemplo 6.14 (pág 265) se utiliza y explica este algoritmo. Inicio (Mayor) Mayor mensual(1) Posición Para i 1 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 ______________________________________________________________________ 275 PQ(i) + SQ(i) Mensualidad”

Planilla + mensual (I) ”,Mensual (i)

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

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

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.

______________________________________________________________________ 276

a) LECTURA b) MENSUALIDADES_PLANILLA:

Paralela de dos arreglos PQ y SQ. 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: 2: MENSUALIDADES_PLANILLA: 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

______________________________________________________________________ 277

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 UNIDADES PRECIO_U Arreglo de codigos de los productos Arreglo de Unidades por producto Arreglo de los precios unitarios por producto

INV_PROD INVENTARIO 2.-

Se deberá crear un arreglo de inventario por producto Lps Inventario total, este es un número

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.

______________________________________________________________________ 278

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 =

( x 2 − x1) 2 + ( y 2 − y1) 2

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 RAPFOSOVI 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 =

4 2 πa b 3
volumen.

Hacer un programa que acepte como entrada el valor de a y b y que calcule el

6. Un estudio empírico ha mostrado que la relación entre volumen y presión para vapor sobrecalentado es: Presión = 1000v −1.4 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. 10. 11. 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. 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. 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 = vo(1 − r ) n 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. 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

12.

__________________________________________________________________ 279

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

14.

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. 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. 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. Determinar e imprimir si un número es positivo, negativo o cero. 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 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. Dados los valores de p, q, determine si los mismos satisfacen la siguiente expresión: p³ + q³ - 2 * p² < 680

16.

17.

18. 19.

20.

21.

ESTRUCTURAS DE REPETICION 22. 23. 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. 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.

__________________________________________________________________ 280

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. 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 suma←n1+n2 resta←n1-n2 mult←n1*n2 escriba suma escriba resta escriba mult final datos1: 3, 5 datos2: -1, 10

II

26.

Seudo código para problema 16 de Estructuras de Decisión Inicio Lea sueldo 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 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: datos1: 800, Jose datos2: 2000, Pedro

Las decisiones contienen: si entonces sino fin si

__________________________________________________________________ 281

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

La estructura de repetición contiene mientras C haga fin mientras al 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 La solución está al final de este Apéndice fin mientras escriba “Fin de dia” final

__________________________________________________________________ 282

29. Prueba de escritorio con los siguientes Inicio

DATOS: 1,3,6,2,2,1,1,4,0,9

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 La solución está al final de este Apéndice lea NUM fin mientras escriba “Fin de Programa” final III. 30.IV. Elaborar los algoritmos de los ejercicios : a) 34, 7, 10 b) 15, 17, 20 c) 23, 24

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

32.

__________________________________________________________________ 283

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

34.

35.

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 1 2 3 4 37. AUMENTO 15% 10 8 7

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 1. – LAVADO EXTERIOR 2. - LAVADO INTERIOR 3. - LAVADO EXTERIOR E INTERIOR 4. - LAVADO DE MOTOR PRECIO Lps. 25.00 Lps. 30.00 Lps. 35.00 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.

__________________________________________________________________ 284

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

40. • • • •

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. Calcular el valor de la función F de acuerdo a las siguientes condiciones: f= 10 + el doble de x/360 f= 25*x/3 + triple de x f=x + 3*x+100 si x <= 100 si 100 < x <= 350 si x > 350

41.

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

43.

44.

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 1 2 3 4 DEPRECIACION 4 Años 5 Años 7 Años 10 Años

__________________________________________________________________ 285

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 Si el sueldo es mayor a L. 2500.00 Se debe imprimir el nombre y el nuevo sueldo del trabajador. 48. 49. Hacer repetitivos los ejercicios: a) 32 b) 33 c) 34 d) 37 e) 40 f) 42 : : Aumento 15% Aumento 8%

Si el sueldo está comprendido entre L. 1000.00 y L. 2,500.00 inclusive : Aumento 10%

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. 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: CONSUMO 140 KVH o menos Los siguientes 170 KVH Exceso sobre 310 KVH TARIFA Lps.. 3.20 Lps. 0.15 por KVH Lps.0.10 por KVH

50.

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:

__________________________________________________________________ 286

MODELO Cutlass Cavalier Chevy Century

DESCUENTO 8% 5% 6% 9%

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 Condiciones para facultad de Administración Condiciones para facultad de Contabilidad Condiciones para facultad de Computación Semestre >= 5 y promedio >= 8.5 Semestre>= 6 y promedio >=8.8 Semestre >= 6 y promedio >=8.5 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 25 O MENOS 45 O MENOS MAS DE 45 PRECIO POR LIBRA L. 0.15 L. 0.25 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.

__________________________________________________________________ 287

SOLUCION DE PROBLEMAS SELECTOS No. 28 Memoria: TIPO 1 3 2 -99 Salida: El total a pagar es 115 El total a pagar es 20 El total a pagar es 86.25 Fin del dia DIAS 10 1 5 RECARGO 100 20 75 ADICIONAL 15 0 11.25 TOTAL 115 20 86.25

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

No. 29 Memoria NUM 1 6 2 1 0 TIPO 3 2 1 4 SUBTOTAL 0 15 60 10 20 TOTAL 1 21 62 11 Salida:

Es Clase C 1 1 Es Clase B 6 21 Es Clase A 2 62 Es Clase D 1 11

__________________________________________________________________ 288

APENDICE B
I. 1. Elaborar un resumen de análisis y algoritmo en NOLAE para cada uno de los siguientes ejercicios: 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. 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. 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. 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.

2.

• • • 3.

4.

__________________________________________________________________ 289

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 1 2 3 4 AUMENTO % 15 10 8 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: TIPO DE SERVICIO 1. – LAVADO EXTERIOR 2. – LAVADO INTERIOR 3.- LAVADO EXTERIOR E INTERIOR 4. – LAVADO DE MOTOR Lps. 60.00 PRECIO Lps. 30.00 Lps. 40.00 Lps. 50.00

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

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.

__________________________________________________________________ 290

• 8.

Monto de la venta promedio por cliente.

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: • • • • 9. 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 o lotes para

Un negocio de estacionamiento vehicular ha clasificado los espacios estacionar, de la siguiente manera: Tipo de Espacio 1. Fijo bajo Techo 2. Fijo sin Techo 3. Movible (detrás de otro vehículo) Diseñe un Algoritmo que haga lo siguiente: Precio de Pago / hora Lps. 20.00 Lps. 15.00 Lps. 10.00

Precio de Pago/día Lps. 100.00 Lps. 75.00 No Hay

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 Diesel (D) Regular (R) Suprema (S) Especial (E) PRECIO/GALON Lps. 25.00 Lps. 35.00 Lps. 40.00 Lps. 45.00

__________________________________________________________________ 291

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 gratis. Si el consumo de combustible es menor de Lps. 200.00 el costo del lavado es normal. Pero la compra en combustible esta entre Lps. 200.00 y Lps. 400.00 inclusive, cliente recibe una rebaja en el costo del lavado equivalente al 20 % sobre exceso a los Lps. 200.00. Diseñe un algoritmo para un programa que haga lo siguiente: es el el el

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) II. También, calcule e imprima el consumo promedio de combustible por cliente.

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

__________________________________________________________________ 292

2: 3: sino fin caso

total nper*35 ing_2 ing_2 + total total nper*60 ing_3 ing_3 + total : Nulo

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. 13.14. Elaborar un resumen de análisis, además un Programa en un Lenguaje de programación para cada uno de los siguientes ejercicios: Calcular la nota media de N estudiantes 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 Imprimir los números del 1 al 100 sin proporcionar ninguna entrada. Determinar el mayor de 20 números. Determinar el menor de n números. 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 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 461 3 dígitos 23458 85432 5 dígitos

15. 16. 17. 18.

19.

__________________________________________________________________ 293

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. Elaborar un programa que imprima las siguientes sucesiones: a) b) c) d) e) f) g) h) 1, 4, 7, 10, 13, … -6, -3, 0, 3, 6, 9,… 1, 5, 8, 12, 15, 19, … 1/2, -1/4, 1/8, -1/16, … 1!, 2!, 3!, 4!, 5!, … 3 / 2! , 9 / 3!, 27 / 4!,... 0, 1, 1, 2, 3, 5, 8, 13 2/4, 3/9, 4/16… (50 términos) ( n términos) (25 términos) (50 términos) ( n términos) (60 términos) (80 términos) (20 términos)

21.

22.

Calcule el valor de S: a) b) c) d) S = 2 + 4 + 8 + 16 + … S = -2 /1 + 4/2 – 6/4 + 8/7 – 10/11 + 12/ 16,... S= 2 + 5*3 + 8*4 + 11*5 + 14*6 + ... S =1! + 2! + 3! + 4! + 5!, … ( n términos) (10 términos) (n términos) (50 términos)

V. 23.

Realizar la prueba de escritorio del siguiente programa en Ada 95 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;

__________________________________________________________________ 294

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. 24. 25. Elaborar un resumen de análisis y un Programa en un lenguaje de Programación para cada uno de los siguientes ejercicios: Dada una lista de 200 números enteros positivos entre 1 y 100, encuentre la suma. 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 1 2 3 4 4x4 Turismo pequeño Turismo grande Busito DESCRIPCION COSTO Lps. 400.00 200.00 300.00 600.00 CANTIDAD 5 10 6 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

__________________________________________________________________ 295

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: • • • • • 29. 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

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. Realizar la Prueba de escritorio del siguiente programa, en el cual se encuentran 2 WHILE dentro de otro WHILE

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

__________________________________________________________________ 296

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

Ejercicio V Memoria: N 10 C 1 2 3 4 5 6 7 8 9 10 NUM 2 4 6 8 10 12 14 16 18 20 DEN 1 5 11 19 29 41 55 71 89 109 SUM 0.0 0.80 1.35 1.77 2.11 2.40 2.66 2.88 3.09 3.27 3.44

__________________________________________________________________ 297

Salida en Pantalla 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

Ejercicio VII Memoria: CON_A 3 2 1 0 4 3 2 1 0 5 4 3 2 1 0 6 5 4 3 2 1 0 CON_B 3 2 1 0 4 3 2 1 0 5 4 3 2 1 0 6 5 4 3 2 1 0 A 3 4 5 6 7 B 3 4 5 6 7 N 0 1 2 3 4 Salida en Pantalla: aaabbb aaaabbbb aaaaabbbbb aaaaaabbbbbb

__________________________________________________________________ 298

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. Imprimir los primeros 100 términos de la serie Fibonachi 0,1,1,2,3,5,8,13,21…..

3.-

Ciclo Para 4.Escriba la suma de los primeros N números enteros pares 5.6.7.Escriba la suma de los primeros N números enteros impares 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. 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) b)
c) 9.-

Calcular el número con mayor valor en la secuencia
Calcular el número con menor valor en la secuencia Calcular el promedio de la secuencia

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. b. Escriba un subprograma para calcular "A". 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.

__________________________________________________________________ 299

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. Se desea un programa que utilice un subprograma para ordenar los elementos de un arreglo. (en orden ascendente ó descendente). 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. b. Elabore un subprograma que calcule el impuesto para un artículo dado. Elabore un programa de dado el costo básico llame el subprograma del inciso a para calcular el imprimir el precio total.

12.13.-

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. CATEGORIA 1 2 3 4 a) b) 16. AUMENTO 15 10 8 7

Elabore un subprograma PLUS que calcule el aumento para un trabajador. Construya un programa que utilice el subprograma PLUS para calcular el nuevo sueldo.

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:

__________________________________________________________________ 300

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 1 2 3 DESCRIPICION ISLAS DE LA BAHIA RUINAS DE COPAN BIOSFERA DEL RIO PLATANO PRECIO X GRUPO DE TRES PERSONAS L. 5000.00 L. 7000.00 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 1 2 3 DESCRIPCION DRAMA TERROR ACCION ALQUILER POR DIA L. 8.00 L.10.00 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.

__________________________________________________________________ 301

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 1 2 3 DESCRIPCION DEPTO. 2 CUARTOS DEPTO. 3 CUARTOS CASA ALQUILER POR SEMANA L. 1500.00 L. 1800.00 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 1 2 3 TURISMO MINI-VAN TURISMO STATION WAGON DESCRIPCION ALQUILER BASE L. 1000.00 L. 1500.00 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.

__________________________________________________________________ 302

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 comerciales clasificado de la siguiente manera: TIPO 1 2 3 DESCRIPCION CONTABILIDAD BASICA CONTABILIDAD DE COSTOS CONTABILIDAD AVANZADA aplicaciones

COSTO L. 1000.00 L. 1500.00 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 A.- Producción B.-.Administración C.- Ventas Incremento sobre sueldo actual. 20% 25% 18% Bonificación por antigüedad L. 0.00 L.500.00 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

__________________________________________________________________ 303

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) b) c) d)Total pagado por la empresa por concepto de incrementos por tipo de departamento Total pagado por la empresa por concepto de incrementos por antigüedad Total empleados que cumplieron las metas Total empleados para cada categoría.

__________________________________________________________________ 304

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

__________________________________________________________________ 305

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. c. Determine por medio de un subprograma cuales fueron los estudiantes con mayor promedio y menor promedio respectivamente.

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.

__________________________________________________________________ 306

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 1 2 3 ESTRATEGIA (Varios) Categoría Nuevo_s (Varios) Categoría Sueldo Aumento 15% 10% 8%

Salidas

Entradas

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 Categoria=1 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 Aumento del 15 % Aumento del 10% V

__________________________________________________________________ 307

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 Categoría = 2 Sueldo = 2,000 Porcentaje = 0.10 Aumento =2,000 * 10 =200 Nuevo_S =2,000 +200 =2,200 Caso II Categoría = 1 Sueldo = 3,000 porcentaje =0.15 Aumento =3,000 * 0.15 =450 Nuevo_S =3,000 +450 =3,450

Observación :Note que se asigna el porcentaje de aumento para cada Categoría, así las
2. fórmulas se reducirán a una: DICCIONARIO DE VARIABLES Aumento

sueldo * porcentaje

2. DICCIONARIO DE VARIABLES Identificador Categoria Sueldo Porcentaje Aumento Nuevo_S 3. FORMULAS Aumento = Sueldo * porcentaje Nuevo_S = Sueldo + Aumento (F-1) (F-2) Descripción Categoría Sueldo Inicial Porcentaje de aumento Aumento Nuevo sueldo

Estas son las fórmulas convencionales: Aumento = Sueldo * 0.15 (Fórmula-1) Aumento = Sueldo * 0.10 (Fórmula-2) Aumento = Sueldo * 0.08 (Fórmula-3)

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: ENTRADA: (Varios números) Categoria, Nuevo_s 2 en cada ciclo (Varios números) Categoria, Sueldo 2 en cada ciclo

__________________________________________________________________ 308

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 2.1.3 Calcular Nuevo_S 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: Memoria categoría 2 1 99 2, 2000, 1, 3000, 99 Salida: Sueldo 2,000 3,000 porcentaje Aumento 0.10 200 0.15 450 Nuevo_S 2,200 3,450 (Fórmula-1) (Fórmula-2)

categoría 2 Nuevo sueldo 2,200 categoría 1 Nuevo sueldo 3,450

__________________________________________________________________ 309

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 1. Lavado Exterior 2. Lavado Interior 3. Lavado Exterior e Interior 4. Lavado de Motor _Precio___ Lps. 25.00 Lps. 30.00 Lps. 35.00 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) Tipo N_autos (Varios) Pagos

Entrada

Salida

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 V Tipo=1 F Tipo=2 F Tipo =3 F Precio 40 V V Precio 30 Precio 35 25

__________________________________________________________________ 310

Como se mencionó anteriormente, para hacer el árbol de decisiones se debe considerar un descuento descuento. si N_autos ≥ 2 (V) se aplicará un descuento del 7 % o del (F ) 0 % en caso contrario lo que implica tener que calcular un subtotal para posteriormente independientemente del tipo de servicio seleccionado, y según el N_autos .calcular un

• Repetición, seleccionando como variable centinela (Valor ficticio de fin de datos) N_autos igual a cero, condición de la repetición: 1. EJEMPLO DE ESCRITORIO Caso I N_autos = 3 Tipo = 4 Subtotal = 3 * 40 = 120 Desc = 0.07 * 120 = 8.4 Total = 120 – 8.4 = 111.6 2. DICCIONARIO DE VARIABLES Identificador Tipo N_autos Precio Subtotal Desc Total 3. FORMULAS Subtotal =N_autos * precio (F-1) Desc = 0.07 * Subtotal Total = Subtotal - Desc (F-2) (F-3) Descripción Tipo de servicio Número de autos Precio de cada uno de los servicios Subtotal Descuento Total a pagar Caso II N_autos = 1 Tipo = 2 Subtotal = 1 * 30 = 30 Total = 30 Caso III N_autos = 0 N_autos ≠ 0

Fórmulas convencionales Subtotal = N_autos * 25 Subtotal = N_autos * 30 Subtotal = N_autos * 35 Subtotal = N_autos * 40 (F-1) (F-2) (F-3) (F-4)

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

__________________________________________________________________ 311

4. RESUMEN DEL ANALISIS SALIDA: ENTRADA: PROCESO: (Varios números) Total 1 en cada ciclo (Varios números) Tipo, n_autos 2 en cada ciclo 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

__________________________________________________________________ 312

Memoria: N_autos 3 1 0 Salida Tipo 4 2 Precio 40 30 Subtotal 120 30 Desc 8.4 Total 111.60 30

Total a Pagar:Lps.111.60 Total a Pagar:Lps.30 Muchas Gracias

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 Lea X Mayor Posición Para i X 1 2, N haga Lea X Si X > mayor Entonces Mayor Pos 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 i X de ser así, ese es el nuevo número mayor y también se guarda su posición. Compara si hay otro mayor que el supuesto mayor Comentarios Se asume que el primer número leído es el mayor por tanto está en la primera posición Desde el siguiente número en adelante

__________________________________________________________________ 313

Se deja la prueba de escritorio al lector con los siguientes datos: PRUEBA DE ESCRITORIO Datos: 4, 6, 8, 3 Memoria: X Mayor posicion I Salida:

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) pago (Varios) Venta Respuesta (‘N’ ó ‘n’

Salidas •

Entradas

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

__________________________________________________________________ 314

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 b) Este examen esta difícil d) La mejor Universidad de Honduras es UNITEC PROPOSICION ABIERTA NINGUNA NINGUNA

c) Programación I no es requisito para ____________ PROPOSICION ABIERTA

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 c.- (mayor’r) d.- Impuesto/ventas SI NO NO __________________ Mayor_r 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%) p V V V V F F F F r V V F F V V F F s V F V F V F V F ~p F F F F V V V V rˆs V F F F V F F F ~ p v (r ˆ s) V F F F V V V V

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 100 0 = 20 (F) s(10, -10) : 10 = -10 + 20 10 = 10 (V) r(-10) : (-10) * (-10) = 100 = 100 (V)

__________________________________________________________________ 315

~ 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 (5%) 4.5.total pago + bono 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%)

__________________________________________________________________ 316

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 TOTAL

VAL * NUM * 2 (F1) 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%) __________________________________________________________________ 317

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 1 2 3 Descripción Puerta de Pino Puerta de Cedro Puerta de Caoba Precio (Lps.) 600.00 800.00 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 Diccionario de variables Formulas Resumen del análisis Programa en NOLAE

(5 %) (5 %) (5 %) (5 %) (20 %)
(Total 40 %)

(Nota: Usar centinela)

__________________________________________________________________ 318

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 Escriba el seudocódigo de un programa que calcule e imprima el valor de S: S = 2/3 + 4/6 + 6/9 + 8/12 + ,... Ejercicio # 3 (51 términos) (50%) (30%).

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 1.- Camiseta para dama 2.- Camiseta juvenil 3.- Camiseta para caballero Yardas Tela /camiseta Tipo Alfa 1.5 Tipo Orion 2.0 Tipo Omega 1.5 Tipo Alfa 0.5

Tipo de Tela Alfa Orion Omega

Precio por Yarda Lps 40 Lps 30 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 __________________________________________________________________ 319

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 1. TELHABLA 2. LORATEL 3. PERITEL Valor por minuto Lps. 6.00 Lps. 5.50 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

__________________________________________________________________ 320

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;

__________________________________________________________________ 321

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;

__________________________________________________________________ 322

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; use Ada.Text_IO, Ada.float_Text_IO; procedure Venta is Val_venta, Descuento, Nuevo_val, isv, Total : float; Begin Put("Ingrese el valor de la venta: "); Get(Val_venta);skip_line; If val_Venta > 200.00 then Descuento:=Val_Venta*0.2; else Descuento:=Val_Venta*0.1; end if; --1 --2 --3 --4 --5 --6 --7 --8 --9 --10 --11 --12 --13

__________________________________________________________________ 323

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 Recaudado : Float; : Float; --* Ver llamada al final de la pagina

begin Recaudado:=0.0; Put("INGRESE EL KILOMETRAJE: "); Get(Km);Skip_line;

--para números reales colocar siempre decimales, * --Ver llamada al final del ejercicio…

__________________________________________________________________ 324

While Km /=0.0 loop if Km < 100.0 then

-- Variable float al compararse con una Constante numérica --a esta se le agrega punto decimal 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; (en el cuerpo del programa) Recaudado:=0.0;

Así, la línea de inicialización de la variable ya no es necesaria.

__________________________________________________________________ 325

APENDICE G

LISTADO DE LOS EJEMPLOS UTILIZADOS EN LOS CAPITULOS 3 AL 6

__________________________________________________________________ 326

APENDICE G

LISTADO DE LOS EJEMPLOS UTILIZADOS EN LOS CAPITULOS 3 AL 6
CAPITULO 3

Página 43
48 50 56

3.3 ELEMENTOS EN EL ANÁLISIS DE UN P.O.P. PARTE I
Ejemplo 3.1 (Resumen del Análisis, calificaciones) Ejemplo 3.2 (Promedio final de un estudiante) Ejemplo 3.3 (Pendiente e intercepto)

3.4 DESGLOSES Y PRUEBAS DE ESCRITORIO
3.4.1 DESGLOSES EN SECUENCIA Ejemplo 3.4 (Secuencia, Sueldo neto) Ejemplo 3.5 (Repaso, Secuencia, Venta de dos artículos) 3.4.2 DESGLOSE CON INSTRUCCIONES EN DECISION Ejemplo 3.6 (Decisión Venta con descuentos,) Ejemplo 3.7 (Decisión, Boletos Tegucigalpa, San Pedro Sula SPS,) Ejemplo 3.8 (Decisión anidada, Clasificar un número en negativo, cero y positivo.) 3.4.3 DESGLOSE CON INSTRUCCIONES EN REPETICION Ejemplo 3.9 (Repetición centinela, Kilometraje) Ejemplo 3.10 (Repetición centinela, Boletos Tegucigalpa, SPS.) 3.5 ELEMENTOS EN EL ANALISIS DE UN P.O.P 3.5.1 DIAGRAMA DE ARBOL DE DECISIONES Ejemplo 3.11 (Arbol de decisiones, Mayor de 3 números,) PARTE II

59
60 60 68 72 72 77 81 83 83 92 98 98 98 104 104 108 113 119

3.5.2. REPETICION CON DECISIONES ANIDADAS Ejemplo 3.12 (Arbol de decisiones, Repetición centinela, Aumentos por categoría,) Ejercicio del Apéndice A, No.36 Ejemplo 3.13 (Arbol de decisiones, Repetición centinela, Lavado de autos, Apéndice A No. 37) Ejemplo 3.14 (Arbol de decisiones, decisión anidada, variable real, rangos, CI,) CAPITULO 4

4.2.1

BLOQUES ESTRUCTURADOS ATOMICOS E INTRODUCCION A LA NOTACION DE DIAGRAMA DE FLUJO ALGORITMOS SEUDOCODIFICADOS CON CONCATENACION

121
123

Ejemplo 4.1 (Diagrama de Flujo, Concatenación, Planilla de sueldos)

4.4.-

126
128 129 131 133

Ejemplo 4.2(Nolae, Concatenación, Leer dos números, imprimir suma) Ejemplo 4.3 (NOlae , Decisión, Venta de dos artículos) 4.5.- ALGORITMO SEUDOCODIFICADOS CON DECISION Ejemplo 4.4 (Nolae, Decisión, Venta con descuento)

__________________________________________________________________ 327

Ejemplo 4.5 (NOlae, Decisión, Boletos Tegucigalpa, SPS) Ejemplo 4.6 (Nolae, Decisiones anidadas, Número negativo, cero positivo) 4.6 ALGORITMOS SEUCODODIFICADOS CON REPETICION Ejemplo 4.7 (Nolae, Repetición centinela, Kilometraje) Ejemplo 4.8 (Nolae, Repetición centinela, Boletos Tegucigalpa, SPS) Ejemplo 4.9 (Nolae, Repetición centinela, CI) en mención Ej 3.8 Ejemplo 4.10 (Nolae, Decisiones anidadas, Repetición centinela, Lavado de Autos) Ejemplo 4.11 (Nolae, Decisiones anidadas, Repetición centinela, Lavado de Autos, variante) 4.7 DIAGRAMACION DE FLUJO DE ALGORITMOS ESTRUCTURADOS Ejemplo 4.12 (Diagrama de flujo del algoritmo del Ejemplo 4.7 (Repetición centinela,Km.) 4.9. - CENTINELAS, CONTADORES Y ACUMULADORES 4.9.1 Centinelas Ejemplo 4.13 (Centinela, NOlae, Kilometraje) 4.9.2 Contadores Ejemplo 4.14 (Contador) Ejemplo 4.15 (Contadores, Votación entre 2 candidatos.) Ejemplo 4.16 (Conteo de clientes con 20% y 10% de descuento, referencia al Ejemplo 4.4) 4.9.3 Acumuladores Ejemplo 4.17 (Ingreso total, Conteo de Boletos de Tegucigalpa y San Pedro Sula) 4.9.4 Repetición controlada por contador Ejemplo 4.18 (Repetición controlada por contador, leer y sumar N números) Ejemplo 4.19 (Repetición controlada por contador, acumuladores,descuentos, promedios) Ejemplo 4.20 (Repetición controlada por contador, Productorio de N números) CAPITULO 5

134 135 136 138 139 140 142 143 144 146 151 151 152 153 153 154 158 162 163 167 169 172 175

ESTRUCTURAS DERIVADAS 5.1 ASOCIATIVIDAD DE LA CONCATENACION 5.2 VARIANTES Y DERIVADAS DE LA DECISION 5.2.1 La decisión abreviada Ejemplo 5.1 (Decisión abreviada, segmento Premio, Apéndice A No.42) 5.2.2 Las decisiones anidadas y las decisiones concatenadas Ejemplo 5.2 (Nolae, Arbol de decisiones, el mayor de 3 números) 5.2.3 BLOQUE CASO Ejemplo 5.3 (Bloque Caso, Biblioteca.) Ejemplo 5.4 (Bloque Caso, Categorías, repetición controlada por contador, contadores, acumuladores) Ejemplo 5.5 (Lavado de autos, Bloque caso, contadores y acumuladores)

179 179 181 181 182 183 183 188 190 193 198

__________________________________________________________________ 328

5.3.- VARIANTES Y DERIVADAS DE LA REPETICION 5.3.1 Bloque Para 5.3.1.1 Bloque Para y su uso con contadores y acumuladores Ejemplo 5.6 (Bloque Para, leer y sumar N números) Ejemplo 5.7 (Bloque Para, contadores, acumuladores, descuentos, ingresos totales) Ejemplo 5.8 (Bloque Para, Bloque Caso, , contadores, acumuladores, Categorías) 5.3.1.2 Aplicaciones del Bloque Para, Sucesiones Ejemplo 5.9 (Bloque Para, Sucesión , números pares, inicialización en cero) Ejemplo 5.10 (Bloque Para, Sucesión, números pares, inicialización en 2) Ejemplo 5.11 (Bloque Para, Potencias de 3,) Ejemplo 5.12 (Bloque Para, potencias de 3, signos alternos, ) 5.3.1.3 Aplicaciones del Bloque para, Series Ejemplo 5.13 (Bloque Para Serie, suma de pares) Ejemplo 5.14 (Bloque Para, Sucesión, serie, fracciones signos alternos) Ejemplo 5.15 (Bloque Para Serie y Sucesión incrementos alternos) Ejemplo 5.16 (Bloque Para, Factorial) Ejemplo 5.3.2 Bloque “Repita-hasta” Ejemplo 5.17 (Repita-hasta, Suma) Ejemplo 5.18 (Repita-hasta, Kilometraje)

202 202 203 203 204 206 208 208 209 210 212 213 213 215 217 219 221 223 226

CAPITULO 6 SUBALGORITMOS, ARREGLOS Y ELEMENTOS DE ESTRUCTURAS DE DATOS 6.1 Subalgoritmos Ejemplo 6.1 (Introducción a los subalgoritmos, Promedio de un estudiante)
Ejemplo 6.2 (Subalgoritmos, Promedio de un estudiante) Ejemplo 6.3(Subalgoritmos Promedio de N alumnos)

229

229 229
231 232

6.2 MENUS, UNA APLICACIÓN DE LOS SUBALGORITMOS
Ejemplo 6.4 (Menús, Calculadora) Ejemplo 6.5 (Menús, Agencia Turismo, Islas) Ejemplo 6.6 (Menús, Agencia Turismo, Islas, preguntas en preferencias, contadores, acumuladores, reportes) Ejemplo 6.7 (Menús, Agencia Turismo Islas, reporte al final) 6.3. DIAGRAMA JERARQUICO DE PROCEDIMIENTOS (DJP) Ejemplo 6.8(DJP, Menús, calculadora) Ejemplo 6.9 (DJP, Menús, Agencia Turismo, Islas) Ejemplo 6.10 (DJP, Menús, Agencia Turismo, reporte) Ejemplo 6.11(DJP, Menús, Agencia Turismo, Biosfera, mas subalgoritmos)

234
234 239 244 248 250 250 251 252 252

6.4 Arreglos Unidimensionados 6.4.1 Operaciones con Arreglos Ejemplo 6.12 (Arreglos, Leer un arreglo de longitud N) Ejemplo 6.13 (Arreglos, manipulación, lectura, cálculos, escritura) Ejemplo 6.14 (Arreglos, elemento mayor y su posición)

258 260 261 262 264

__________________________________________________________________ 329

6.4.2 Arreglos Paralelos
Ejemplo 6.15 (Arreglos paralelos, Pagos quincenales, planilla) Ejemplo 6.16 (Arreglos Paralelos, Porcentajes de aportación) Ejemplo 6.17 (Arreglos, Contadores como índices de un Arreglo)

266
266 268 270

6.4.3 Arreglos y subalgoritmos Ejemplo 6.18 (Arreglos paralelos, Subalgoritmos i-ésimos, Pagos quincenales, planilla) Ejemplo 6.19 (Arreglos paralelos, Subalgoritmos completos, Pagos quincenales, planilla) Variante de los Ejemplos 6.15 y 6.18 Ejemplo 6.20 (Arreglos paralelos, Menús, Pagos quincenales, planilla) Variante de los Ejemplos 6.15 y 6.19

272 272 274 276

__________________________________________________________________ 330

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.

__________________________________________________________________ 331

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->