Insiiiuio Tccnologico Agroccuario dc Oaaca, Mcico Dicicnlrc dcl 2004
ISDN.
Flavio dc Jcsus Casiillo Silva
Derecbos reservados
La rcscniacion y disosicion cn conjunio dc Algoriinia son roicdad dcl auior. Ninguna aric dc csia olra ucdc scr rcroducida o iransniiida, ncdianic ningun sisicna o nciodo, clccironico o nccanico (cnirc cllos cl foiocoiado, la gralacion, la digiializacion, la gralacion o cualquicr sisicna dc rccucracion y alnaccnanicnio dc infornacion}, sin conscniinicnio or cscriio dcl auior.
CONTENIDO
Dcdicaioria/ 1
Iniroduccion/ J
Caiulo 1. Conccios Ccncralcs dc Progranacion/ S 1.1 Daios c infornacion/ S 1.2 Ocradorcs/ 4 1.3 Consianics y variallcs/ 4 1.4 Ercsioncs/ S 1.4.1 Ercsioncs Maicnaiicas/ S 1.4.2 Ercsioncs Fclacionalcs/ ? 1.4.3 Ercsioncs/ ?
Caiulo 2. Dcsarrollo dc Algoriinos/ 9 2.1 Pasos a scguir/ 9 2.2 Diagranas dc flujo/ JD 2.3 Diagranas Nassi-ScIncirdcnan/ JJ 2.4 Pscudocodigos/ JJ
6.2 Tallas/ t4 6.2.1 Ejcrcicios rcsuclios dc iallas/ tS 6.2.2 Ejcrcicios roucsios dc iallas/ t?
Anco 1/ tS
Anco 2/ ?D
Dilliografa Ccncral/ ?J
DEDICATORIA
A Dios quc sicnrc nc Ia aconanado cn nis royccios.
A nis scouis favoriios. ni csosa (Vcronica} y nis cuairo csircllas (Mariana, CyniIia, Flaviio y Mclissa} , quicncs nc insiran a csiar Sicnrc lisio ara scrvir!.
A los jovcncs csiudianics dc cualquicr arca dc la Infornaiica quc quicran iniroducirsc cn cl nundo dc la rogranacion dc conuiadoras.
INTRODUCCIN
Mientras me quede algo por hacer, no habr hecho nada Cayo Julio Csar
Quiz de los retos ms grandes que he tenido como profesor ha sido justamente el que mis alumnos al trmino del curso de Diseo Estructurado de Algoritmos obtengan las habilidades para abstraer problemticas de la realidad y plasmarlas en algoritmos. Por ello, este libro tiene como finalidad compartir con aquellos estudiantes que inician en el mbito de la programacin una alternativa para aprender a realizar algortmicamente soluciones a diversas situaciones que pueden ser resueltas con las computadoras.
Los temas de este libro estn abordados exclusivamente en formas algortmicas sin inclinacin alguna hacia un lenguaje en particular, se asume, de acuerdo a la concepcin original de los algoritmos, es que si una persona realiza un algoritmo, ste puede ser codificado en el lenguaje de su predileccin.
Es importante resaltar que en el estudio de los algoritmos, el xito - o los buenos resultados - depende en la mayor parte de tu participacin como estudiante, ya que al realizar los ejercicios de forma disciplinada irs progresivamente aprendiendo las diferentes estructuras que se emplean en la programacin, en donde en cada nivel que vayas conociendo apliques lo visto en los niveles anteriores, o sea, de forma heurstica 1 .
Por eso, este libro est diseado pedaggicamente siguiendo un orden adecuado de conocimientos para que a pesar de que tus antecedentes de programacin sean nulos o mnimos puedas estudiar los temas sin ningn conflicto de requerimientos anticipados, logrando con esto que puedas comprender los ejercicios resueltos y logres resolver los propuestos, preparndote as para el tema posterior, pero recuerda que el que vayas al siguiente tema sin el manejo adecuado de los anteriores te podr provocar incluso hasta frustracin, de ah la disciplina que se te pide para tu estudio.
Cada ejercicio explicado lo encontrars representado en tres de las representaciones ms comunes internacionalmente: diagrama de flujo, diagrama N-S y en pseudocdigo, indicando que ste ltimo es una propuesta que realizo para
1 De forma heurstica significa que para obtener un nuevo conocimiento, haga uso de los conocimientos que ya posee. Flavio de Jess Castillo Silva 2 estudiantes y docentes de esta materia para que puedan ser ejecutados en la computadora sin llegar a codificar en algn lenguaje en especfico totalmente en espaol.
El libro est dividido en seis captulos, donde el primero est hecho para que precises algunos trminos empleados en la programacin, adems hallars instrucciones iniciales sobre la formulacin de expresiones matemticas a expresiones algortmicas mismas que te sirven para las operaciones a realizarse dentro de un algoritmo, asimismo, encontrars la jerarquizacin de operaciones a emplearse y el manejo de la tabla de verdad.
El captulo dos y tres tienen que ver con los primeros algoritmos a estudiar dentro de un curso, se denominan como lineales o top-down 2 , as como la presentacin de los smbolos y reglas para diagramar y las instrucciones a emplearse en los pseudocdigos, a pesar que ya tengas previo manejo de algoritmos, procura no dejar de estudiar este captulo por que es la base de los siguientes temas.
El captulo cuatro te explica el manejo de las bifurcaciones y sus modalidades, asimismo el cinco trata sobre los ciclos, incluyendo los contadores y acumuladores. Por ltimo para esta edicin, el captulo seis se refiere a los arreglos, tanto unidimensionales (vectores) como bidimensionales (tablas o matrices) y un apndice con las instrucciones para crear un archivo de cabecera para el lenguaje de Programacin CA-CLIPPER ver. 5.2 superior, para poder ejecutar los pseudocdigos.
Ojal desde donde ests, puedas hacer tus comentarios y/o aportaciones para hacer mejor esta obra, por que al final de cuentas, slo t amigo lector puedes comprobar o no el beneficio de este libro.
Flavio de Jess Castillo Silva Junio 2004
Apartado Postal No. 86, centro Oaxaca, 68000, Oax. Mxico flaviocastillo@mexico.com
2 De arriba-abajo. Algoritmia 3
1. CONCEPTOS GENERALES DE PROGRAMACIN
El cielo nunca ayuda a las personas que no actan Sfocles
La programacin es una funcin en la Informtica que consiste en escribir un conjunto de instrucciones codificadas y ordenadas lgicamente en algn lenguaje de cmputo, que al ejecutarse en la computadora apoya a la realizacin de una tarea administrativa o que da respuesta a una solucin especfica de la realidad.
La programacin es en realidad un fascinante mundo abstracto en donde a travs de diversas simbologas puedes lograr que una computadora realice lo que t hayas preparado para tal fin, un lenguaje similar a la utilizada en programacin puede ser e de las matemticas, de hecho, quien habla en lenguas matemticas podr fcilmente programar, por que las habilidades que se requieren para una y para otra cosa son similares: razonamiento, deduccin, pensamiento lgico, umbral amplio a la frustracin, etc.
La Informacin que fluye a travs de los programas de cmputo es realmente lo valioso en s de cualquier proceso automatizado, por lo que se empezar por aclarar algunos trminos mnimos y necesarios que cualquier programador deber tener presente.
1.1 DATOS E INFORMACIN
En un proceso en donde se ejecuta un programa de cmputo, los datos son la materia prima que al ser procesadas dan lugar a la informacin, o sea, que la informacin es el resultado obtenido a travs de un proceso computarizado. Para que entiendas mejor la diferencia entre uno y otro, lee detenidamente el siguiente ejemplo: en un restaurante, los datos son los platillos que solicita un comensal y el precio de cada uno de ellos. La informacin ser el importe a pagar por el consumo de esta persona.
Los datos a procesar por una computadora pueden clasificarse en simples y estructurados, estos ltimos son trabajados en el captulo correspondiente al tema de Arreglos.
Flavio de Jess Castillo Silva 4 Los tipos de datos a utilizarse en este curso sern: a) N = Numricos; b) C = Cadena y c) L = booleanos o lgicos
1.2 OPERADORES
El operador es un smbolo que identifica una operacin bsica, los ms comunes son:
Matemticos: Suma ( + ), resta ( - ), multiplicacin ( * ), divisin ( / ), exponenciacin ( ), DIV (divisin entera) y MOD (residuo)
Relacionales: Mayor que ( > ), menor que ( < ), mayor o igual que ( >= ), menor o igual que ( <= ), diferente ( <> ), igual ( = ).
Lgicos: AND, OR, NOT 3
1.3 CONSTANTES Y VARIABLES
Las constantes son los datos que no cambian a travs de la ejecucin de un programa. En algunos lenguajes de programacin, las constantes pueden ser:
Enteras De tipo numrico y sin punto decimal
Ejemplos: +3489, -1, +670 Reales Son datos de tipo numrico con punto decimal o con exponente en notacin cientfica
Ejemplos: +3.141592, - 3.31E11, 1.5 Alfanumricas Son datos tipo carcter y que pueden contener hasta un mximo de 255 caracteres (dependiendo del lenguaje).
Ejemplos: MEXICO, ITAO, NICK12
Y las variables se definen como una localidad de memoria a la cual se hace referencia con un nombre cuyo contenido puede cambiar durante un proceso. Para el caso de nominar a una variable, se sugiere que ste sea mnemotcnico 4 y por
3 El NOT se indica en los operadores, pero no se tratar durante este material 4 Al leer el nombre se identifica cul es su contenido, si se usara como nombre de una variable: alumno, fecha de nacimiento, domicilio. Estos indican claramente sus contenidos Algoritmia 5 cuestin de fomentar un buen hbito informtico, se recomienda el uso de la notacin hngara 5 , cuya estructura es:
cNombre
As, si se quiere almacenar el sueldo de un trabajador en una variable simple, se podr hacer de esta manera: nSueldo o si fuese para el domicilio de alguien podra ser: cDomicilio.
1.4 EXPRESIONES
Una expresin se define como la combinacin de constantes y variables del mismo tipo con un operador.
1.4.1. MATEMTICAS
Son las operaciones que realizamos en trminos aritmticos o algebraicos, por ejemplo: 5 + 6, 3c * 2
Para su representacin, debemos de considerar que se resuelven de izquierda a derecha y sobre todo, la jerarquizacin de operaciones que existe en las operaciones:
a) Parntesis b) Exponenciaciones c) Multiplicaciones y divisiones d) Sumas y Restas, DIV y MOD.
Las expresiones se representan de dos maneras: algebraicamente y algortmicamente, te preguntars cul es la diferencia entre una y otra?, a continuacin observa las diferencias:
5 La notacin hngara es la forma estructurada de denominar a las variables y fue creada por un hngaro del equipo de programacin de Microsoft, actualmente, se usa en diferentes lenguajes de programacin
Tio dc daio El 2do carcter es en maysculas El resto del nombre en minsculas Flavio de Jess Castillo Silva 6 Modo algebraico Modo algortmico 2ab 4 2*a*b^4 (3+5) 2 +9 (3+5)**2+9 6a+3c 6a 2 -c 2
(6*a+3*c) / (6*a^2 c^2)
Para efectuar las operaciones de este tema, se hacen bajo la siguiente metodologa: a) convertir la expresin de algebraica a algortmica; b) realizar las operaciones de izquierda a derecha respetando la jerarquizacin de operaciones.
Ejemplo 1 Modo algebraico Modo algortmico (3+5) 2 +9 (3+5)**2+9
Es la confrontacin de una combinacin de constantes y/o variables con un operador relacional, el resultado a obtener podr ser: VERDADERO 6 (V) o FALSO 7 (F).
Ejemplo 1 Modo algebraico Modo algortmico 9+5*2-2 MOD 2 = 0 3 9/3+5*2-2 MOD 2 = 0
1. Multiplicaciones y divisiones: 3+10-2 MOD 2 = 0 2. Sumas y restas: 13-2 MOD 2 = 0 11 MOD 2 = 0 5 = 0 (falso)
Permiten realizar la evaluacin de expresiones relacionales ms complejas y encontrar al final de todas las evaluaciones de estas expresiones un resultado VERDADERO (T) o FALSO (F), con estas expresiones hay que considerar para ello, la tabla de verdad:
6 True ( T ) en ingls 7 False ( F ) en ingls Expresin Resultado (3+5) 2 +9>20 VERDADERO 6-2+3*6 <= 15 FALSO 9/3+5*2-2 DIV 2 > (3*2) FALSO 9/3+5*2-2 MOD 2 = 0 FALSO 3^3+(2*10-1)+21 >= 48 VERDADERO Flavio de Jess Castillo Silva 8
Analiza detenidamente las siguientes expresiones lgicas:
Expresin Resultado (3+5) 2 +9>20 AND (8*3)^2<100 F 6-2+3*6 <= 35 OR 15> 2^4 V 18/3+5*2-2 DIV 2 > (3*2) AND 45>(3*6-2) V 18/3+5*2-2 DIV 2 > (3*2) OR 45>(3*6-2) V 18/3+5*2-2 DIV 2 > (4*2) OR 45>(3*6-2) V
Para el primer caso, la expresin algebraica (3+5) 2 +9>20 AND (8*3) 2 <100, se convierte algortmicamente en: (3+5)^2+9>20 AND (8*3)^2<100 y se procede a resolverse por partes:
1. Primero se obtuvo el valor de (3+5)^2, cuyo resultado es de 73 2. Posteriormente se compar con respecto a 20, quedando as 73 > 20 y al evaluarse se determin que es VERDADERO. 3. Asimismo, se procedi con la otra parte de la expresin: (8*3)^2<100, arroja como resultado el valor de 576, al confrontarla con 100 a travs de la expresin: 576 <100 se determin que es FALSO. 4. Por ltimo, VERDADERO AND FALSO (P AND Q), segn la tabla de verdad da FALSO. P Q OR AND V V V V V F V F F V V F F F F F Algoritmia 9
2. DESARROLLO DE ALGORITMOS
Aprendemos a hacer algo hacindolo. No existe otra manera John Holt
Un algoritmo, es un conjunto de acciones que determinan la secuencia de los pasos a seguir para resolver un problema especificado y tiene dos condiciones: debe ser finito y no debe ser ambiguo; significa que debe estar bien estructurado, adems, generalmente se compone de tres partes: a) entrada; b) proceso y c) salida.
2.1 PASOS A SEGUIR
Para poder desarrollar un algoritmo no existe una ley, pero si se sugieren los siguientes puntos:
1. Buscar la forma de entender claramente el problema para no equivocar la respuesta. 2. Determinar qu salida o qu tipo de resultados se espera para identificar los datos de entrada. 3. Consiste en encontrar pensando ordenada y lgicamente en una posible solucin, es conveniente apoyarse en libros buscando un proceso (frmula) que nos ayude a resolver nuestro requerimiento, si no existe se construye. 4. Se hace la representacin del algoritmo.
Para una mejor solucin o estructuracin de nuestro algoritmo, tambin se debe de considerar:
Ya teniendo identificados los datos de entrada, determinar los lmites de coherencia en ellos, ejemplo: para los meses del ao slo es posible o vlido del uno al doce; para las calificaciones de un alumno, slo hay datos vlidos desde cero hasta diez. Con respecto al proceso, si es posible, hay que ubicarlo en alguna situacin de la vida real para su mejor comprensin, recrearlo manualmente, para deshacerlo y reconstruirlo algortmicamente. Si se tiene la referencia de un giro comercial en particular y en caso de no tener alguna experiencia al respecto, se recomienda visitar algn establecimiento correspondiente y a travs de la observacin o de Flavio de Jess Castillo Silva 10 algunas preguntas a empleados de dicho lugar, se podr comprender los requerimientos del ejercicio. Otra manera de ver un problema, es analizarlo por partes y que esto permita llegar a la meta propuesta, verlo como un todo da la impresin de que es algo muy complejo y quiz por partes sea ms fcil de conseguirlo. Lo que mejor ha funcionado es el hecho de no negarse la oportunidad de resolverlo, las barreras mentales que se anteponen algunos estudiantes limita su creatividad e ingenio para afrontar problemas de carcter abstracto.
Los algoritmos pueden ser representados en forma grfica a travs de los diagramas de flujo o diagramas N-S (Nassi-Schneiderman o diagramas de Chapin) y de forma escrita con el uso de pseudocdigos.
2.2 DIAGRAMAS DE FLUJO
Los diagramas de flujo son los ms comunes para representar algoritmos, aunque no necesariamente es la mejor opcin, se hace la representacin grfica de un algoritmo mediante un conjunto de figuras o smbolos ya establecidos.
Inicio o Fin. Este smbolo sirve para indicar el principio de una rutina y su terminacin.
Entrada. Sirve para indicar la introduccin estndar de datos.
Salida a impresora. En este curso la utilizaremos para indicar la salida de datos.
Proceso. Indica alguna operacin a realizarse dentro del algoritmo.
Decisin. Implica la evaluacin de una expresin relacional.
Conector de secuencia. Especificar alguna transferencia a realizarse.
Conector de pgina. Seala la continuidad de un proceso en otra pgina.
Algoritmia 11 Subrutina. En este curso, se utilizar para indicar una decisin mltiple.
Segn Cair (1995), las reglas que rigen los diagramas de flujo son:
1. Todo diagrama de flujo debe tener un inicio y un fin 2. Las lneas utilizadas para indicar la direccin del flujo del diagrama deben ser rectas, verticales y horizontales, no en diagonal, ni se deben de cruzar. 3. Todas las lneas utilizadas para indicar la direccin del flujo del diagrama deben estar conectadas. 4. El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a derecha. 5. La notacin utilizada en el diagrama de flujo debe ser independiente del lenguaje de programacin. 6. Si el diagrama de flujo requiere ms de una hoja para su construccin, se debe utilizar los conectores adecuados y enumerar las pginas adecuadamente. 7. No puede llegar ms de una lnea de flujo a un smbolo.
2.3 DIAGRAMAS NASSI-SCHNEIDERMAN
Estos diagramas tambin se conocen como N-S (este es el nombre ms comn), para representarlos se utilizan como smbolo bsico al rectngulo, esto quiere decir que no tienen explcitamente un inicio y un fin como los diagramas de flujo, ya que todo lo que est plasmado en ellos est sujeto al marco exterior del diagrama.
Para un algoritmo lineal este ser un conjunto de rectngulos apilados:
Accin 1 : : Accin n
En el caso de bifurcaciones (ver captulo 4) o ciclos (ver captulo 5) stos se mostrarn en su momento para no crear confusiones.
2.4 PSEUDOCDIGOS
Los pseudocdigos son expresiones escritas de los algoritmos, para eso, se utilizan los verbos en definitivo y cumple con la regla que el lenguaje algortmico de No hay un inicio y final explcito por que la misma figura lo establece Flavio de Jess Castillo Silva 12 pseudocdigo es independiente de cualquier lenguaje de programacin, mismo que podr ayudar a la codificacin en cualquier lenguaje.
INICIO Al igual que los diagramas de flujo, se requiere indicar donde comienza el algoritmo INTRODUCIR Esta instruccin sirve para poderle dar datos al algoritmo ESCRIBIR Este verbo se usa para indicar la salida de datos HACER < << <variable> >> > = < << <exp> >> > En esta instruccin se declararn las frmulas expresadas algortmicamente de acuerdo a la jerarqua de operaciones, donde la palabra variable es el lugar donde se almacenar el resultado que surja de la expresin exp. SI < << <expL> >> > ENTONCES : [SINO] : FIN_SI
Esta sintaxis permite representar las bifurcaciones dentro de un algoritmo FIN Determina la finalizacin del algoritmo
De igual forma que en los diagramas N-S se indica que la cuestin de bifurcaciones y ciclos se indicarn en sus respectivos captulos.
Algoritmia 13
3. ALGORITMOS LINEALES
Como cualquier habilidad o msculo, la capacidad de escuchar tu sabidura interior se fortalece con el ejercicio Robbie Gass
Estos algoritmos se conocen como algoritmos top-down (de arriba abajo) y son los ms simples, las instrucciones son netamente secuenciales, esto quiere decir, que se realizarn verticalmente una a una las instrucciones.
Para comprender mejor stos, se iniciar con analizar de menor a mayor complejidad, considerando que los ejemplos estarn resueltos en los tres estilos (diagrama de flujo, N-S y pseudocdigo) y se ensear lo que es la prueba de escritorio 8 .
Ejemplo 1: Hacer un algoritmo para calcular el rea de un rectngulo (A = b h).
INICIO nAr ea FIN nB, nH nAr ea = nB * nH
El mismo algoritmo se representa en diagrama N-S y en pseudocdigo paralelamente:
8 Se entiende por prueba de escritorio, al proceso de estar ejecutando de manera manual cada instruccin plasmada en el algoritmo siguiendo el orden lgico establecido, dando valores a las variables de entrada y haciendo los clculos para determinar los valores finales, asegurndose que dicho algoritmo cumple con los requisitos para los cuales fue construido. Se solicitan los datos de la base y de la altura del rectngulo Se aplica la frmula del rea del rectngulo (base por altura) y el resultado se almacena en nArea Se presenta el resultado DIAGRAMA DE FLUJO Flavio de Jess Castillo Silva 14 INTRODUCIR nP, nPi nPref = nP * (1+nPi/100) ESCRIBIR nPref
PSEUDOCDIGO INICIO INTRODUCIR Precio, nP INTRODUCIR % Imp, nPi HACER nPref = nP * (1+nPi/100) ESCRIBIR nPref FIN
INTRODUCIR nH, nB nArea = nH * nB ESCRIBIR nArea
INICIO INTRODUCIR Base, nB INTRODUCIR Altura, Nh HACER nArea = nH * nB ESCRIBIR nArea FIN
Para hacer la prueba de escritorio se har una pequea lista de variables que intervienen en el algoritmo:
No. nB nH nArea 1 3 4 12 2 7 9 63 3 28 12 336
Ejemplo 2: Se requiere de un algoritmo que determine el precio de un artculo en funcin a su precio antes de impuesto y el porcentaje de impuesto.
nPref FIN nP, nPi nPref = nP * (1+nPi/100)i INICIO
Prueba de escritorio:
No. nP nPi nPref 1 100 15 115.00 2 75 12 84.00 3 63 18 74.34 DIAGRAMA N-S Algoritmia 15 La frmula nPref = nP * (1 + nPi/100) es una forma abreviada de clculo, por que se pudo haber representado de varias maneras, sin embargo, para su mayor comprensin se desglosar y se comparar a la vez con el procedimiento ms largo o comn:
nPref = 100 * (1 + 15/100)
o sea
nPref = 100 * 1.15
nPref = 115 nPor = 15 / 100
nPref = 100 + (100 * nPor)
nPref = 100 + 15
nPref = 115
Ejemplo 3: La compaa explotadora de aceite El resbaloso, SA, desea tener un algoritmo para determinar semanalmente el salario de sus empleados. Teniendo en cuenta las horas y el costo por horas trabajadas y un 6% de su sueldo como impuestos, obteniendo el sueldo bruto, descuento y sueldo neto por empleado.
Considerando que en la jerarquizacin de operaciones primero se resuelven las multiplicaciones y en el siguiente nivel las sumas y restas, son innecesarios los parntesis.
A continuacin se resolvern algunos ejemplos slo en pseudocdigo, esperando los complementes con: diagramas de flujo, diagramas N-S y sus respectivas pruebas de escritorio
3.1 EJERCICIOS RESUELTOS
1. La compaa financiera Agiotista, AC, da oportunidad de pagar los impuestos de un prstamo a razn del 2% mensual, hacer un algoritmo que calcule de cunto seran los pagos mensuales que debern hacer sus clientes.
Pagos Mensuales =
donde: L = importe del prstamo I = Tasa de inters mensual y M = Nmero de meses a pagar
INICIO INTRODUCIR Importe del prstamo, nPres INTRODUCIR Tasa de inters, nInt INTRODUCIR Meses?, nMes HACER nPago = (nPres * nInt / 100) / ( 1 (1+ nInt / 100 ) ^ -nMes ) ESCRIBIR nPago FIN
(L) (I) 1 - (1 + I ) -m
Algoritmia 17 2. Hacer un algoritmo que al proporcionar dos nmeros, nos de el resultado de las operaciones bsicas entre ellos.
INICIO INTRODUCIR 1er nmero, nPnum INTRODUCIR 2do nmero,nSnum HACER nMas = nPnum + nSnum HACER nMen = nPnum nSnum HACER nPor = nPnum * nSnum HACER nDiv = nPnum / nSnum ESCRIBIR Suma, nMas ESCRIBIR Menos, nMen ESCRIBIR Multiplicacin, nPor ESCRIBIR Divisin,nDiv FIN
3. Teniendo en cuenta que en un da se duermen ocho horas, realice un algoritmo en donde calcule el nmero de das, horas, minutos y segundos vividos y el total de horas dormidas en nuestra existencia. Use 30 das por mes y 365 das por ao.
INICIO INTRODUCIR Da de Nacimiento, nDdian INTRODUCIR Mes de Nacimiento, nMesn INTRODUCIR Ao de Nacimiento, nAnion INTRODUCIR Da actual, nDiaa INTRODUCIR Mes actual, nMesa INTRODUCIR Ao actual, nAnioa HACER nDiav = ( nDiaa + nMesa * 30 + nanita * 365) (nDdian + nMesn * 30 + nAnion * 365) ESCRIBIR Das vividos = , nDiav ESCRIBIR Horas dormidas = , nDiav * 8 ESCRIBIR Horas vividas = , nDiav * 24 ESCRIBIR Minutos vividos = , nDiav * 1440 ESCRIBIR Segundos vividos = , nDiav * 86400 FIN
4. Realice un algoritmo para convertir una hora marcada por un reloj de 24 horas y proporcionada en horas, minutos y segundos, a un sistema decimal de tiempo, en el cual, por ejemplo 21:30:00 hrs. equivale a 21.50 horas.
Flavio de Jess Castillo Silva 18 5. En una Casa de Cambio necesitan construir un programa tal que dado como dato una cantidad expresada en dlares, convierta esa cantidad a pesos. Construya el diagrama de flujo correspondiente.
INICIO INTRODUCIR No. De dlares, nDol INTRODUCIR Paridad, nPar ESCRIBIR Pesos = , nDol * nPar FIN
3.2 EJERCICIOS PROPUESTOS
1. Hacer un pseudocdigo que calcule la distancia recorrida por un vehculo y determinar el combustible aproximado usado, considerando un rendimiento de 12 km por litro.
2. En una empresa de gas, se requiere de un algoritmo para la venta de sus productos, considerando lo siguiente:
Nota: El consumidor puede comprar ms de un tipo de producto
3. Realizar un algoritmo para que se intercambien valores entre tres variables cualquiera.
4. En una tienda de materiales, el precio del m 2 de azulejo para baos cuesta $125.00 y la mano de obra es de $40.00 por m 2 . Hacer un algoritmo que permita presentar cotizaciones a los clientes interesados.
5. En un negocio de renta de computadoras, se desea tener un algoritmo que calcule el importe a cobrar de acuerdo al tiempo de consumo, considerando que una hora tiene un precio de $7.50
El hombre debe elegir, no aceptar su destino. Paulo Cohelo
Es comn que encontrar problemas que estn sujetos a ciertas condiciones para obtener su resultado, es aqu donde la computadora podr determinar el camino que debe seguir y su toma de decisin puede ser solamente un si o un no y se le conoce como afirmaciones, ya que la mquina verifica si se cumple la condicin o no.
La bifurcacin se entiende como el cambio que sufre una secuencia y para el caso de programacin, sta puede ser: simple, doble, anidada y mltiple.
Las bifurcaciones se clasifican en: a) Condicional. Qu es el que depende del resultado de una prueba y b) Incondicional. Siempre desviar la secuencia a la lnea donde se le especifique
4.1 SIMBOLOGA
En el captulo dos se mencion que para cada tipo de algoritmo se iba a describir su respectiva simbologa, por lo que a continuacin se indicar con ejemplos de estructuras la forma de representarse en diagrama de flujo, diagrama N-S y en pseudocdigo una bifurcacin.
4.1.1 BIFURCACIN SIMPLE
A = B Accin A SI
Figura 4.1 Estructura de bifurcacin simple SI A = B ENTONCES Accin A FIN_SI Flavio de Jess Castillo Silva 20 Si observas con detenimiento los componentes de la figura 4.1, podrs comprender la manera correcta de expresar una bifurcacin simple, sin embargo, si no has tenido experiencia en algn curso de programacin, entonces quiz an est un tanto ambiguo el concepto, por lo que se ilustrar mejor con el siguiente ejemplo:
Ejemplo 1: Dado como dato el sueldo de un trabajador, aplquesele un aumento del 15% si su sueldo es inferior a $1,000.00, imprimir al final el nuevo sueldo del trabajador.
Razonamiento: Se requiere que slo aquellos empleados cuyo sueldos sean menores a $1,000.00 reciban un aumento del 15%, ejemplificndolo, supongamos que un empleado gana $1,500.00 por la condicin prevista en el enunciado este trabajador no recibe aumento (ya que 1500 es mayor que 1000), ahora, si un trabajador gana $850.00 su nuevo sueldo ser $977.50, cmo se obtuvo dicho sueldo?, se aplic el mismo principio utilizado en el ejemplo 2 (pp. 20-21) de los algoritmos lineales, por lo que la frmula sera para aquellos trabajadores que cumplan la condicin: Nuevo = sueldo * 1.15
nS FIN INICIO nN = nS * 1.15 nN nS < 1000 SI NO
PSEUDOCDIGO
INICIO INTFODUCIF Sucldo",nS SI nS < 1000 ENTONCES HACEF nN nS 1.15 ESCFIDIF nN FIN_SI FIN DIAGRAMA N-S
INTRODUCIR nS
nN = nS * 1.15
ESCRIBIR nN
nS < 1000 SI Algoritmia 21 Ejemplo 2: Construye un algoritmo que al proporcionar la calificacin de un alumno, escriba si aprob, considerando a la calificacin de 7 como la mnima aprobatoria.
nCalif FIN INICIO nCalif >= 7 "Aprobado"
La representacin en el diagrama N-S y en pseudocdigo de este mismo ejemplo es:
Se solicita la calificacin del alumno Se revisa si la calificacin es mayor o igual a siete SI Si es verdadera la condicin, mandar el mensaje de APROBADO INICIO INTRODUCIR Calificacin, nCalif SI nCalif >= 7 ENTONCES ESCRIBIR Aprobado FIN_SI FIN
NO Flavio de Jess Castillo Silva 22 4.1.2 BIFURCACIN DOBLE
A=B Accin B Accin A NO SI
Figura 4.2 Estructura de bifurcacin doble
Ejemplo 3: Dado como dato el sueldo de un trabajador, aplquesele un aumento del 15% si su sueldo es inferior a $1,000.00 y si es mayor o igual el aumento ser de 8%, imprimir al final el nuevo sueldo del trabajador.
Razonamiento: Basndose en el ejemplo anterior, la consideracin ser que el porcentaje de aumento ser diferente para los que ganan menos de $1,000.00 con respecto a los otros que no cumplen dicha condicin. La frmula ser similar, la diferencia es que el porcentaje de acuerdo a la condicin se guarde en una variable y hacer un solo proceso de clculo. . SI A D ENTONCES Accion A SINO Accion D FIN_SI . Algoritmia 23 nS FIN INICIO nN = nS * 1.15 nN nS < 1000 SI NO nN = nS * 1.08
En pseudocdigo este algoritmo sera as:
INICIO INTRODUCIR Sueldo?, nS SI nS < 1000 ENTONCES HACER nP = 1.15 SINO HACER nP = 1.08 FIN_SI HACER nN = nS * nP ESCRIBIR Nuevo sueldo = , nN FIN COMO BIFURCACIN SIMPLE
INICIO INTRODUCIR Sueldo?, Ns HACER nP = 1.08 SI nS < 1000 ENTONCES HACER nP = 1.15 FIN_SI HACER nN = nS * nP ESCRIBIR Nuevo sueldo = , nN FIN
Ejemplo 4: A un mecnico se le paga por la cantidad de horas trabajadas. Si trabaja hasta 40 horas a la semana, se le paga a razn de $50.00 por hora, sin embargo, si trabaja ms de 40 horas, entonces la cuota por hora es de $65.00
Flavio de Jess Castillo Silva 24 nHt FIN INICIO nS = nHt * 65 nS nHt > 40 SI NO nS = nHt * 50
INICIO INTRODUCIR Horas,nHt SI nHt > 40 ENTONCES HACER nS = nHt * 65 SINO HACER nS = nHt * 50 FIN_SI ESCRIBIR Pago = , nS FIN Algoritmia 25 4.1.3 BIFURCACIN MLTIPLE
EVALUAR CASO A = 1 (Accin / Acciones) CASO A = 2 (Accin / Acciones) CASO A = N (Accin / Acciones) OTRO (Accin / Acciones) FIN_EVALUAR :
Ejemplo 5: En una empresa, los trabajadores estn clasificados por categoras, por lo que para el aumento salarial se aplicarn los siguientes porcentajes de aumento:
CATEGORIA AUMENTO 11 13% 22 12% 33 6% 44 7%
1 2 3 4 5 N Flavio de Jess Castillo Silva 26 nS, nC nP = 1.12 nP = 1.07 nP = 1.13 nN FIN INICIO nC 11 22 33 44 nP = 1.06 nN = nS * nP
INICIO INTRODUCIR Sueldo = ,nS INTRODUCIR Categora = ,nC EVALUAR CASO nC = 11 HACER nP = 1.13 CASO nC = 22 HACER nP = 1.12 CASO nC = 33 HACER nP = 1.06 CASO nC = 44 HACER nP = 1.07 FIN_EVALUAR HACER nN = nS * nP ESCRIBIR Sueldo Nuevo = ,nN FIN
Algoritmia 27 4.2 EJERCICIOS RESUELTOS
En los siguientes ejercicios, realiza el diagrama de flujo y diagrama N-S correspondiente, asimismo, haz tres pruebas de escritorio para cada uno.
1. Dados los datos A, B y C, que representan nmeros enteros diferentes, construye un algoritmo para escribir cul de ellos es mayor.
INICIO INTRODUCIR A = ,nA INTRODUCIR B = ,nB INTRODUCIR C = ,nC HACER nMay = nA HACER cMay = A SI nB > nMay ENTONCES HACER nMay = nB HACER cMay = B FIN_SI SI nC > nMay ENTONCES HACER nMay = nC HACER cMay = C FIN_SI ESCRIBIR El nmero mayor es , nMay ESCRIBIR Correspondiente a la variable , cMay FIN
2. Construye un algoritmo tal, que dados como datos los valores enteros P y Q, determine si los mismos satisfacen la siguiente expresin:
P 3 + Q 4 2 * P 2 < 680
INICIO INTRODUCIR P =,nP INTRODUCIR Q =,nQ HACER nNum = nP^3 + nQ^4 2*nP^2 SI nNum < 680 ENTONCES ESCRIBIR Satisface la expresin SINO ESCRIBIR No satisface la expresin FIN_SI FIN
Flavio de Jess Castillo Silva 28 3. Construye un algoritmo tal, que dado como dato un nmero entero, determine e imprima si el mismo es positivo, negativo o nulo.
INICIO INTRODUCIR Nmero,nNum SI nNum = 0 ENTONCES ESCRIBIR Nulo SINO SI nNum > 0 ENTONCES ESCRIBIR Positivo SINO ESCRIBIR Negativo FIN_SI FIN_SI FIN
4. Dado un nmero entero cualquiera, realiza un algoritmo para determinar si el mismo es par, impar o nulo.
INICIO INTRODUCIR Nmero,nNum SI nNum = 0 ENTONCES ESCRIBIR Nulo SINO SI nNum MOD 2 = 0 ENTONCES ESCRIBIR Par SINO ESCRIBIR Impar FIN_SI FIN_SI FIN
4.3 EJERCICIOS PROPUESTOS
1. Desarrollar el primer algoritmo del prrafo anterior (ver pgina 27) con condiciones anidadas.
2. En una tienda se necesita de un algoritmo que le permita a la cajera realizar el cobro a los clientes de acuerdo a lo siguiente: a) Si paga en efectivo se le descuenta el 20% Algoritmia 29 b) Si paga con tarjeta de crdito AMERICAN EXPRESS no hay descuento c) Si paga con tarjeta de crdito VISA se le descuenta el 5% d) Si paga con cheque de la federacin se le otorga un 10% de descuento
3. En la Tienda El Surtido SA, requiere de un algoritmo (N-S o Pseudocdigo) para el cobro de las compras de sus clientes, que le permita a travs de claves determinar los descuentos a realizar: al teclear 1 significara el 10%, 2 significara el 12%, 12 significara el 16.5%, 23 significara el 20% y 88 el 0%. Asimismo, el pago en efectivo se registrara como 201, el pago con tarjeta de crdito sera el 203 y se le hara un cargo adicional del 6% por operacin en tarjeta, el pago con cheque de la federacin o gobierno estatal sera el 284 y la condicin de aceptar este tipo de pago ser que la compra realizada sea mnimo un 30% del importe del cheque y el resto sera el 299. Las situaciones que no estn contempladas en estas polticas, se asumen que son cobradas al importe real de su compra.
4. La Universidad del Trpico requiere de un algoritmo en N-S que les ayude a imprimir los recibos de pago del importe de la inscripcin de sus alumnos. Para esto, hay que considerar que la cuota base es de $450.00 y que pueden existir las siguiente situaciones: a. Cuando un alumno obtuvo 10 de promedio en el curso pasado, quedar exento de pago. b. Si el alumno obtuvo de 8.1 hasta 9.9 de promedio, se le har un descuento del 15% estipulado en su recibo. c. Si obtuvo de 6 y hasta 6.4 se le har un cargo en su recibo de $100.00 por donativo para libros. d. Si el alumno tuvo una calificacin reprobatoria, no se podr inscribir, pero deber pagar $75.00 por concepto de 10 horas de asesora.
5. Se requiere de un diagrama N-S, por que un obrero necesita calcular su salario semanal, el cual se obtiene de la siguiente manera: a. Si trabaja 40 horas o menos, se le paga cada hora a razn de $15.00 b. Si trabaja ms de 40 horas, las primeras 40 se le paga a $16.00 y las extras a $20.00
6. Elaborar un algoritmo (diagrama de flujo o pseudocdigo) para calcular el importe a cobrar en una gasolinera, donde manejan los siguientes productos: gasolina magna ($5.05 x litro), gasolina premium ($ 5.30 x litro), diessel ($ 4.00 x litro), aceite 40 ($ 18.00 lata de a litro), aceite multigrado ($ 28.00 lata de a litro) y lquido para frenos ($ 16.00 x bote). Los precios incluyen IVA y se necesitan efectuar obligatoriamente 3 pruebas de escritorio del mismo.
7. Hacer un diagrama de flujo que simule una calculadora con las operaciones bsicas (suma, resta, multiplicacin, divisin, porcentaje), considerando sus respectivas restricciones (en caso que hayan).
Flavio de Jess Castillo Silva 30
5. CICLOS
Usa el mtodo cientfico: probando varias veces, llegars a la verdad. Cicern, Marco Tulio
Existen eventos que son reproducidos en ms de una ocasin en diferentes actividades cotidianas, por ejemplo, en los negocios, una tienda desde que abre (inicio de su jornada de trabajo) hasta que cierra (fin de su jornada de trabajo) realiza ventas que a pesar que no se saben cuntas irn a hacer, se necesita conocer datos como el monto de la venta del da, o cosas similares, por otra parte, existen eventos que tendrn de manera predeterminada una cantidad que pondr lmite a su realizacin, por ejemplo, si en una escuela se irn a repartir cien fichas para su proceso de inscripcin, esto significar que no podrn otorgar ms de esa cantidad de fichas. Casos como estos y en diferentes mbitos suceden da con da, el programador podr sistematizar la mayora de estos eventos, por ello, el tema que corresponde a este captulo se denomina ciclos (bucles), que son procesos que se repiten cuando se cumplen las condiciones establecidas.
Existen ciclos finitos e infinitos. En el caso de los infinitos, estos no sern considerados, debido a que el inters pedaggico del tema es que el estudiante controle las repeticiones (ciclos finitos) de los eventos de acuerdo a su naturaleza. A continuacin se puede apreciar un ciclo infinito, el cual mostrar la palabra ITAO por siempre. En el caso de una computadora, este se puede interrumpir con el administrador de tareas o re-inicializando el equipo.
'I T A O' INICIO
Figura 5.1 Ciclo infinito
Algoritmia 31 Durante la propuesta planteada en este libro, las estructuras cclicas que se estudiarn sern: REPETIR, MIENTRAS y DESDE (FOR-NEXT). Por ello, se empezar por describir dos artificios de programacin: Contadores y Acumuladores.
5.1 CONTADOR
Es una variable que registra el nmero de interacciones en un ciclo, una de sus caractersticas es que sus incrementos 9 o decrementos son constantes. Se puede considerar que el proceso de conteo tiene tres partes esenciales:
1. Empezar el conteo inicializando la variable, con el valor numrico necesario, es comn hacerlo con el cero. 2. Incrementar o decrementar (segn sea el caso) la unidad considerada en el ciclo. 3. Finalizar el proceso de conteo.
Para realizar un conteo dentro de un programa se har con la ayuda del siguiente proceso:
C = C + 1
Figura 5.2 Contador
Esta instruccin har que el algoritmo cada vez que pase por este proceso, incrementar en uno el valor almacenado en la variable utilizada. Para entender un poco ms dicha instruccin se puede entender leyndola de derecha a izquierda: agrega uno al valor contenido en la posicin de memoria C y guarda el resultado en la misma variable, as el valor original contenido en C es sustituido por el valor actual.
9 Se menciona que se puede incrementar o decrementar la variable utilizada como contador, debido a que se pueden hacer por ejemplo, de uno a diez, o de cien a 0 y el incremento puede ser de uno en uno o de la unidad que se necesite, por ejemplo de tres en tres. Valor nuevo Valor anterior Incremento Flavio de Jess Castillo Silva 32 5.2 ACUMULADOR
El otro artificio de programacin es el uso de variables acumuladoras. El objetivo de las mismas es el tener en ellas el total de los datos o valores obtenidos en la ejecucin de un programa. Para ilustrar mejor el uso del acumulador, es conveniente sealar que a diferencia de los contadores, los acumuladores tienen incrementos o decrementos variables y su frmula tiene semejanza al contador:
Total nuevo = total anterior + valor actual
Figura 5.3 Acumulador
Para el uso del acumulador, al igual que el contador, es obligatoria la inicializacin de la variable (con un valor numrico) que se usar para tal fin, ya que de no hacerlo, en el caso de varios lenguajes de programacin mandara un mensaje variable inexistente (type mismatch). Si se quisiese saber la suma de un conjunto de nmeros (17, 22, 9, 11 y 4), esto sucedera as en el algoritmo:
Total nuevo Total anterior Valor actual 0 17 0 17 39 17 22 48 39 9 59 48 11 63 59 4
5.3 ESTRUCTURA REPETIR
Esta estructura le sirve al programador para ejecutar n veces un proceso, como caracterstica principal de esta estructura es que mnimo una vez se ejecutar el ciclo, adems, la condicin es interna ya que est pre-establecida desde el inicio de su ejecucin, para el caso de la condicin que rige a este tipo de ciclos, es que sta se ubica al final del ciclo y para que el ciclo siga ejecutndose la condicin no ser Valor a acumular Algoritmia 33 cumplida, por que cuando se cumpla la condicin har que el ciclo deje de ejecutarse.
INICIO nC= 0 nC = nC + 1 FIN 'ITAO' nC = 10 SI NO
5.3 Estructura REPETIR en sus tres expresiones
Para comprender la ejemplificacin de una estructura REPETIR (ver figura 5.3), se realizar la respectiva prueba de escritorio:
INICIO HACER nC = 0 REPETIR HACER nC = nC + 1 ESCRIBIR ITAO HASTA nC = 10 FIN Diagrama N-S Pseudocdigo Diagrama de flujo Flavio de Jess Castillo Silva 34 5.4 ESTRUCTURA MIENTRAS
Esta estructura permite al programador ejecutar un proceso las veces que sean necesarias hasta que ya no se cumpla la condicin, misma que est controlada externamente por el usuario. Otra diferencia es que la condicin se ubica al inicio del ciclo y que ste se ejecutar si la condicin se cumple, al ya no cumplirse se posiciona en la instruccin inmediata al ciclo y puede ser la muestra de los datos obtenidos o la finalizacin del algoritmo.
INICIO nGasto = 0 nGasto = nGasto + nMonto FIN 'ITAO' nMonto> 0 nMonto NO SI
Inicializacin del acumulador C i c l o
M I E N T R A S
Condicin que sujeta al ciclo, mientras se cumpla el ciclo contina Acumulador Algoritmia 35 El mismo ciclo para ser representado en diagrama N-S y/o en pseudocdigo tiene una pequea gran diferencia, la introduccin de datos se hace antes de iniciar el ciclo y se vuelve a especificar antes que se cierre el ciclo. Observa con detenimiento las diferencias entre la representacin del diagrama de flujo y estas dos ms:
Qu sucede con el ciclo durante su ejecucin?, a continuacin se muestra una pequea prueba de escritorio para su mayor comprensin.
Ciclo nGasto nMonto Condicin 0 0 5 V 1 5 8 V 3 13 10 V 4 23 0 F
5.5 EJERCICIOS RESUELTOS
Por la complejidad del tema, se realizarn varios ejercicios haciendo uso de las tres modalidades para su mayor comprensin e ilustracin, intentando cumplir con el objetivo pedaggico de hacer comprender al estudiante en cada una de las estructuras antes mencionadas.
INICIO HACER nGasto = 0 INTRODUCIR Monto?,nMonto MIENTRAS nMonto>0 HACER nGasto = nGasto + nMonto INTRODUCIR Monto?,nMonto FIN_MIENTRAS ESCRIBIR Gasto = ,nGasto FIN Este es el resultado que se mostrar al finalizarse el ciclo Flavio de Jess Castillo Silva 36 1. Se requiere de un algoritmo que permita representar la tabla de multiplicar de cualquier nmero que ser multiplicado por el rango del 1 al 10.
Consideraciones: como se van a representar tablas de multiplicacin de cualquier nmero y ste ser multiplicado en el rango del 1 al 10: nNum * 1, nNum * 2, ., nNum * 10. Significa entonces que se ejecutar diez veces, por lo que se har uso de una estructura REPETIR (por estar pre-establecido el nmero de veces que se ejecutar el ciclo).
INICIO nC = 0 nNum nC = nC + 1 nR = nC * nNum nNum,' * '.nC,' = ',nR nC = 10 FIN NO SI
Como sugerencia, se solicita que se inicialice la variable de conteo al inicio del algoritmo, en el caso de diagramas de flujo, esto se har despus del smbolo de inicio. nC = 0 INTRODUCIR nNum nC = nC + 1 nR = nC * nNum
ESCRIBIR nNum, * ,nC, = ,nR REPETIR HASTA nC = 10 INICIO HACER nC = 0 INTRODUCIR #? ,nNum REPETIR HACER nC = nC + 1 HACER nR = nC * nNum ESCRIBIR nNum, * ,nC,=,nR HASTA nC = 10 FIN Algoritmia 37 2. En el proceso electoral para presidentes municipales, el instituto de elecciones, requiere de un algoritmo para llevar a cabo el conteo de los cuatro candidatos, considerando que cada uno de ellos ha sido identificado con un nmero progresivo de acuerdo a la importancia de los partidos polticos, el proceso de conteo se acabar al introducir un cero.
Consideraciones: se entiende entonces, que los candidatos sern identificados por: 1, 2, 3 y 4. Este algoritmo se representar en N-S y en pseudocdigo, por lo que se te recomienda realices el diagrama de flujo. De lo que se va a utilizar para realizar este algoritmo es una estructura MIENTRAS, por que no se sabe cuantos votos se van a procesar (sino es hasta que introduzcan cero), por otra parte, como hay cuatro candidatos y estos estn identificados del 1 al 4, entonces se har uso de una condicin mltiple. Este ejercicio se har en dos versiones, la primera de acuerdo a lo visto hasta el momento y la siguiente versin se har para tener mayor precisin, por que de acuerdo al planteamiento que se har en la primer versin, qu pasara si alguien introduce un cinco o un ocho o cualquier nmero mayor?.
1 2 4 3 Flavio de Jess Castillo Silva 38 En Pseudocdigo INICIO HACER nC1 = 0 HACER nC2 = 0 HACER nC3 = 0 HACER nC4 = 0 INTRODUCIR nPdte MIENTRAS nPdte>0 EVALUAR CASO Pdte = 1 HACER nC1 = nC1 + 1 CASO Pdte = 2 HACER nC2 = nC2 + 1 CASO Pdte = 3 HACER nC3 = nC3 + 1 CASO Pdte = 4 HACER nC4 = nC4 + 1 FIN_EVALUAR INTRODUCIR nPdte FIN_MIENTRAS ESCRIBIR Candidato 1 obtuvo ,nC1, votos ESCRIBIR Candidato 2 obtuvo ,nC2, votos ESCRIBIR Candidato 3 obtuvo ,nC3, votos ESCRIBIR Candidato 4 obtuvo ,nC4, votos FIN
Ahora, con base en lo indicado en las consideraciones de este ejemplo y para asegurar la entrada efectiva de datos, se har uso de una validacin 10 :
INICIO HACER nC1 = 0 HACER nC2 = 0 HACER nC3 = 0 HACER nC4 = 0 INTRODUCIR nPdte MIENTRAS nPdte<0 OR nPdte>4 INTRODUCIR nPdte FIN_MIENTRAS MIENTRAS nPdte>0 EVALUAR CASO Pdte = 1 HACER nC1 = nC1 + 1 CASO Pdte = 2 HACER nC2 = nC2 + 1 CASO Pdte = 3 HACER nC3 = nC3 + 1 CASO Pdte = 4 HACER nC4 = nC4 + 1 FIN_EVALUAR INTRODUCIR nPdte MIENTRAS nPdte<0 OR nPdte>4 INTRODUCIR nPdte FIN_MIENTRAS FIN_MIENTRAS ESCRIBIR Candidato 1 obtuvo ,nC1, votos ESCRIBIR Candidato 2 obtuvo ,nC2, votos ESCRIBIR Candidato 3 obtuvo ,nC3, votos ESCRIBIR Candidato 4 obtuvo ,nC4, votos FIN
10 Se entiende por validacin a la revisin de los datos de entrada para que sean datos congruentes de acuerdo a lo que se espera de ellos, por ejemplo, si solicitsemos el mes, a travs de la validacin se asegura que no introduzcan un valor menor a uno o mayor a doce y as sucesivamente. Para el caso de este ejercicio, no se puede introducir un nmero mayor a cuatro. Algoritmia 39 Haciendo nfasis en la validacin, se explicar con ms detalle. Si se desea que al recibir el nmero de un mes, ste sea correcto la instruccin sera:
INTRODUCIR nMes MIENTRAS nMes<1 OR nMes>12 INTRODUCIR nMes FIN_MIENTRAS
3. En el estadio de bisbol El batazo veloz, requieren de un algoritmo representado en N-S para obtener al final del da el importe de las ventas, considerando que existen tres tipos de boletos: palcos ($250.00), sol ($50.00) y sombra ($120.00), ignorando las capacidades del estadio para cada tipo de boleto, evitando la dispersin en la comprensin del ejercicio. Hay que considerar que un cliente slo puede comprar varios boletos del mismo tipo.
Consideraciones: Cmo se puede controlar el ciclo, si solo menciona como dato interesante que se quieren los datos al final del da?, quiz alguien considere que se pida la hora de inicio y final, otros pueden dar aproximaciones como estas, sin embargo, la forma ms sencilla puede ser similar al ejemplo de los candidatos a presidentes municipales en donde para este caso sea esperar que tecleen cero en el tipo de boleto y as saber que se termin el da y los boletos de palco sern reconocidos como tipo 1, los de sol tipo 2 y sombra como tipo 3.
Como el rango del mes vlido es de 1 a 12, entonces se confronta la variable contra sus posibles errores, cules son los nmeros para mes invlidos?, todos los nmeros menores a uno o los nmeros mayores a doce. nBolsol = nBolpal = nBolsom = 0 INTRODUCIR nTipo,nBol MIENTRAS nTipo>0
1 2 3 nTipo Flavio de Jess Castillo Silva 40 4. Se requiere de un algoritmo expresado en pseudocdigo para simular un reloj de Veinticuatro horas.
Consideraciones: Este ejemplo es un ejercicio de ciclos anidados y para evitar la incursin a ciclos infinitos, al llegar a su lmite se detendr.
INICIO HACER nH = 0 HACER nM = 0 HACER nS = 0 REPETIR HACER nM = 0 REPETIR HACER nS = 0 REPETIR ESCRIBIR nH, : ,nM, : ,nS HACER nS = nS + 1 HASTA nS = 60 HACER nM = nM + 1 HASTA nM=60 HACER nH = nH + 1 HASTA nH=24 FIN
5.6 ESTRUCTURA DESDE (FOR NEXT)
Esta estructura es muy utilizada en diferentes lenguajes de programacin y sobre todo cuando se manejan arreglos, por lo que se aborda en este captulo para que sea ms fcil su comprensin en el tema posterior. Se puede decir al respecto que es como el ciclo REPETIR, solo que de manera ms automatizada. A continuacin se muestra las tres modalidades de su representacin.
Incremento o decremento, en caso de ser incremento de uno en uno, no se especifica Variable usada como contador Limite del ciclo Algoritmia 41
De igual forma como en el diagrama de flujo, el incremento si es de uno en uno no se especifica, sin embargo, si fuese incrementos de dos en dos o decrementos de uno. Se declarara de la siguiente forma:
En pseudocdigo
DESDE nJ = 2 HASTA 100 INCREMENTO 2
En N-S
nJ = 100 HASTA 1 INCREMENTO -1
5.7 EJERCICIOS PROPUESTOS
Representar los siguientes algoritmos en sus tres modalidades, haciendo adems la prueba de escritorio correspondiente. Se te recomienda que primero determines el tipo de estructura a utilizar, en caso que sea tipo MIENTRAS, encuentres la condicin ms conveniente.
1. La empresa tecomunica requiere de un algoritmo para calcular el importe de los servicios de telefona ofrecidos durante el da, considerando la siguiente tabla:
Llamada a Tarifa x min Telfonos fijos $ 1.00 Celulares $ 3.50 Nacionales $ 7.00 EEUU y Canad $ 6.00 Resto de Amrica $ 8.00 Europa $ 9.50 Resto del Mundo $ 13.00
nJ = 1 HASTA 10
ESCRIBIR ITAO
INICIO DESDE nJ=1 HASTA 10 ESCRIBIR ITAO FIN_DESDE FIN Flavio de Jess Castillo Silva 42 2. En el departamento de calidad de la Ca. El figurn, se requiere de un algoritmo para llevar el control de los trajes para caballeros defectuosos por cada talla desde la 36 a la 42, para ello, se elabora una Orden de produccin, indicando las cantidades a fabricar por cada talla, al final y en porcentajes se calcular la cantidad de defectuosos con respecto a la Orden de Produccin.
3. Dado N nmero enteros como datos, hacer un algoritmo que: a. Obtenga cuntos nmeros ledos fueron mayores a cero b. Calcular el promedio de los nmeros positivos c. Indicar cuntos fueron pares, cuntos impares y cuntos nulos d. Obtener el promedio de todos los nmeros e. Determinar qu nmero fue el mayor y cul fue el menor que se ingres
4. En un multicinema con cinco salas se requiere de un algoritmo que lleve el control de los boletos vendidos para cada una de ellas en sus tres funciones al corte de caja se necesita saber: a. La suma de boletos global de cada sala b. La funcin y sala que tuvo mayor demanda c. El porcentaje de boletos de cada sala en cada funcin con respecto al gran total.
5. Hacer un algoritmo para calcular el promedio de cada alumno (en sus siete materias) del grupo primero de Informtica y determinar al final qu alumno lleva el mejor promedio (considerando que todos tienen promedios diferentes) y el promedio general del grupo.
6. En un laboratorio fotogrfico con dos minilabs (mquinas de revelado), se requiere de un algoritmo considerando de que hay rollos de fotografas de 35mm con 24 y 36 fotos; tambin de 110 con 12 y 24 fotografas, adems de las transparencias de 35 mm con 24 y 36. Se requiere: a. Cantidad de rollos revelados por tipo y tamao b. El tipo de rollo ms revelado y el menos revelado (sin importar el tamao) c. Cul es el minilab ms utilizado?
Algoritmia 43
6. ARREGLOS
El hombre se descubre a s mismo, al enfrentarse con el obstculo. A. Saint Exupery
Los arreglos (arrays en ingls), son una coleccin de datos, finito y ordenado de elementos homogneos (de un mismo tipo de dato: numrico, cadena, etc.), son variables estructuradas (ver prrafo 1.1), por lo tanto almacenan datos en elementos contiguos de memoria identificados por un ndice 11 . A su vez, los arreglos pueden ser unidimensionales (vectores), bidimensionales, tridimensionales o multidimensionales, denominados como matrices o tablas.
Para el caso de este libro, los arreglos a estudiarse sern los vectores, que debido a su complejidad es necesario que se comprendan para poder acceder a los de mayores dimensiones como son las tablas. Para qu sirven los arreglos?, la respuesta ms simple es que permite manejar una gran cantidad de datos de manera ordenada, evitando as el uso de demasiadas variables, por ejemplo, si se quisiesen guardar los nombres de cada uno de los cincuenta estudiantes del primero de informtica, se requeriran la misma cantidad de variables tipo cadena, sin embargo, con el uso de vectores se define uno con un rango de 50 elementos. Para distinguir las variables simples de las estructuradas y apegndose a la notacin hngara, se podra definir as: cVnombre, la uve (segundo carcter) indica que es un vector de tipo cadena, si fuese para almacenar calificaciones de alumnos, podra nombrarse as: nVcalif.
6.1 VECTORES
Para hacer ms prctica la comprensin del manejo de los vectores se har uso del pseudocdigo y con ejemplos sencillos a ms complejos. Pero, es necesario que se ilustre la concepcin de un vector para su mayor comprensin, observa los componentes del vector en la siguiente figura, tal vez la analoga ms cercana y comn es que un arreglo es como un casillero, en donde se almacenar en cada cuadro (elemento) un dato.
11 El ndice da el posicionamiento de los datos en la ordenacin del arreglo, en el caso de vectores, el nmero de elementos se denomina como rango del vector. Flavio de Jess Castillo Silva 44 Figura 6.1 Ejemplo de vector (arreglo unidimensional)
Con los arreglos se pueden hacer las siguiente operaciones bsicas: a) asignacin; b) leer/escribir; c) recorrido; d) bsqueda; e) actualizacin (aadir, borrar, insertar) y f) ordenacin.
A continuacin se escribirn fragmentos de pseudocdigo para ilustrar las operaciones antes mencionadas, excepto ordenacin y actualizacin, quienes se analizarn en prrafos posteriores, cabe hacer mencin que el ndice que se utilice para referenciar a un elemento, puede ser una constante o variable numrica. nVcalif[3], si nP (el nombre de la variable t la designas) valiese 2, se puede representar as: nVcalif[nP]
6.1.1 ASIGNACIN
Esta operacin permite almacenar de forma directa o a travs de una operacin un valor a un elemento del arreglo, por ejemplo:
HACER nVcalif[2] = 9
HACER cValumno[15] = CARLOS LOPEZ
HACER nVprecios[4] = nPrecio * 1.18
HACER nVcalif[nX] = 1234.5 (suponiendo que nX valga 3 o cualquier nmero dentro del rango del vector) 10 9 7 9 8
1
2
3
4
5 Rango. Es la longitud del vector.
Elementos nVcalif El ndice referencia al elemento que se quiere utilizar y se representa con el nombre del vector y entre corchetes el nmero del elemento deseado: nVcalif[3] Algoritmia 45
6.1.2 LECTURA / ESCRITURA Y RECORRIDO
La lectura y escritura se realizan en los arreglos de igual forma que se ha realizado a lo largo de los temas de algoritmos en este libro con los datos simples, la diferencia estriba en que se hace la referencia al elemento correspondiente, por que si tengo un vector de 10 de rango cuyo nombre es cVmaterias, para cualquier operacin si no indico a qu elemento se est uno refiriendo se estara expresando inadecuadamente:
Si se quisiese solicitar los nombres de los alumnos de un grupo de primer semestre en el orden que estn sentados, partiendo de izquierda a derecha se podra representar as:
: HACER cValumno = ARREGLO(50) 12
: DESDE nK=1 HASTA 50 INTRODUCIR Nombre del alumno?,cValumno[nK] FIN_DESDE :
Ahora bien, si se quisiese visualizar los contenidos que hay en los elementos de un vector se hara uso de la operacin recorrido 13 nuevamente
DESDE nL=1 HASTA 50 ESCRIBIR cValumno[nL] FIN_DESDE
12 Esta instruccin se declara solamente si se estn convirtiendo a ejecutable el pseudocdigo a travs del CA-CLIPPER y el archivo PSEUDO.CH, sino, se ignora 13 La operacin recorrido, consiste como su nombre lo indica, pasar por cada uno de los elementos de un arreglo. En los ejemplos que estn en el prrafo 6.1.2, se hace uso de la estructura cclica DESDE, para que el contador sirva a su vez como el ndice, as, cuando el contador valga uno estar posicionndose en el elemento uno y de esa forma sucesivamente. MODO INCORRECTO
Es una operacin de tipo secuencial (va uno por uno) en donde se puede localizar un dato dentro del contenido de algn elemento de un arreglo. El ejemplo que a continuacin se escribe, se har de dos maneras para ilustrar la eficiencia que se puede hacer dentro de un pseudocdigo.
Ejemplo: Suponiendo que en una miscelnea se desea contar con una lista de precios para mantenerlos actualizados.
INICIO HACER cVprod = ARREGLO(200) HACER nVprec = ARREGLO(200) // Se cargan 14 los vectores va recorrido DESDE nZ=1 HASTA 200 INTRODUCIR Nombre del producto?,cVprod[nZ] INTRODUCIR Precio?,nVprec[nZ] FIN_DESDE
// Suponiendo que en otro momento, se desea cambiar el precio de algn producto INTRODUCIR Indica el nombre del producto al que se le cambiar el precio,cProd // Se iniciar la bsqueda DESDE nL=1 HASTA 200 SI cVprod[nL]=cProd ENTONCES ESCRIBIR El precio actual es,nVprec[nL] INTRODUCIR El nuevo precio,nVprec[nL] FIN_SI FIN_DESDE
Ahora bien, qu pasara si el producto al que se le desea cambiar el precio est almacenado en el elemento tres?, ser inevitable que tenga que dar 197 vueltas ms en vano?. Quiz cuando se manejan pocos datos (mil, dos mil, etc.) no se aprecia la lentitud del proceso, sin embargo, si fuesen cantidades mayores como ochenta mil, entonces si se sentira lento el proceso. Por ello, para romper la ejecucin de un DESDE se hara as:
DESDE nL=1 HASTA 200 SI cVprod[nL]=cProd ENTONCES ESCRIBIR El precio actual es,nVprec[nL] INTRODUCIR El nuevo precio,nVprec[nL] HACER nL = 200 // Lee la nota correspondiente en el pie de pgina 15
14 El trmino cargar , en la jerga de programacin se utiliza para indicar que se almacenarn datos en los elementos del arreglo 15 Como un DESDE termina cuando se llega al limite establecido en el HASTA ms uno, entonces, aprovechando esta circunstancia, si ya se localiz el producto que se busca, no tiene caso que el Algoritmia 47 FIN_SI FIN_DESDE
Otra forma de hacer la bsqueda, intentando hacerla ms general se hara de la siguiente as:
// Suponiendo que en otro momento, se desea cambiar el precio de algn producto INTRODUCIR Indica el nombre del producto al que se le cambiar el precio,cProd // Se iniciar la bsqueda HACER nPos = 0 DESDE nL=1 HASTA 200 SI cVprod[nL]=cProd ENTONCES HACER nPos = nL // Almaceno la posicin donde se encontr el producto HACER nL = 200 FIN_SI FIN_DESDE
6.1.4 ACTUALIZACIN
La actualizacin se puede realizar a travs de las operaciones aadir, borrar e insertar. A continuacin para explicar cada una de ellas se partir del vector cVletras de rango 8:
cVletras A B C F H I J K 1 2 3 4 5 6 7 8
La operacin de aadir consiste en aumentar el rango del vector 16 , por lo que este proceso se realizar con la definicin de un nuevo arreglo que se componga de los elementos del vector original ms uno, en este caso, de un rango de nueve (ya que cVletras es de rango 8).
cVletras A B C F H I J K 1 2 3 4 5 6 7 8
DESDE siga dando ms vueltas, imagnate que el producto estaba almacenado en el tercer elemento, qu caso tendra hacer 197 vueltas ms? 16 Algunos lenguajes de programacin permiten incrementar el rango del arreglo, para el caso de este libro, la operacin aadir se har considerando el paso de un arreglo de n elementos a otro de n elementos ms uno. Vector original (antes de la operacin aadir) Flavio de Jess Castillo Silva 48
cVletras1 A B C F H I J K M
1
2
3
4
5
6
7
8
9
La rutina que hace este proceso es la siguiente (suponiendo que ya estn definidos ambos vectores):
: DESDE nL=1 HASTA 8 HACER cVletras1[nL] = cVletras[nL] FIN_DESDE INTRODUCIR Introduce el valor para el nuevo elemento?,cVletras1[9] // M :
La operacin borrar consiste en asignarle el valor nulo correspondiente 17 al elemento correspondiente:
cVletras A B C F H I J K 1 2 3 4 5 6 7 8
: HACER cVletras[6] = :
Si se quisiese hacer ms general este procedimiento, ste quedara as:
: INTRODUCIR Elemento que se desea borrar?,nEle MIENTRAS nEle<1 OR nEle>8 INTRODUCIR *ERROR* Elemento que se desea borrar?,nEle FIN_MIENTRAS HACER cVletras[nEle] = :
17 En caso de los datos tipo cadena el valor nulo es una cadena vaca (nula): ; para los datos tipo numrico el nulo correspondiente es el cero y para los lgicos es el valor de falso Vector aadido (despus de la operacin aadir) En este ejemplo se borrar el elemento 6 Algoritmia 49
El resultado sera el siguiente:
cVletras A B C F H J K 1 2 3 4 5 6 7 8
Por ltimo, la operacin de insertar consiste en poner un nuevo valor en el elemento indicado, recorriendo los dems valores, teniendo entonces la prdida del ltimo valor.
Retomando el vector cVletras como est al inicio de este subtema, se desea insertar la letra D en el elemento 4, por lo que el valor del elemento 8 (K) se perder, ya que ahora el ltimo valor ser J. Observa con detenimiento la ejemplificacin correspondiente:
cVletras A B C F H I J K 1 2 3 4 5 6 7 8
A B C D F H I J 1 2 3 4 5 6 7 8
La siguiente rutina hace el proceso de la insercin
INTRODUCIR Dato a insertar?,cLetra INTRODUCIR Elemento donde se insertar?,nEle MIENTRAS nEle<1 OR nEle>8 INTRODUCIR *ERROR* Elemento que se desea borrar?,nEle FIN_MIENTRAS DESDE nH=8 HASTA nEle+1 INCREMENTO -1 HACER cVletras[nH] = cVletras[nH-1] // Revisa la nota al pie de pgina 18
FIN_DESDE HACER cVeltras[nEle] = cLetra
18 Haciendo uso de un recorrido inverso (del ltimo al primer elemento), se van re-asignando los valores correspondientes. En la asignacin se hace uso del ndice nH-1 para tomar el valor del elemento anterior y as cumplir con la insercin Nuevo valor insertado Este es el dato que se pierde por la insercin Flavio de Jess Castillo Silva 50 Las diferentes operaciones se han descrito con la finalidad de contar con recursos de programacin dentro de un algoritmo.
6.1.5 EJERCICIOS RESUELTOS DE VECTORES
A continuacin se ejemplificar con pseudocdigo algunos ejemplos con un grado ascendente en su resolucin para su mejor comprensin.
1. Se tienen almacenadas las calificaciones (entre 5 y 10) de los veinte alumnos de agronoma del primer semestre y se desea saber la frecuencia de calificaciones (cuntos dieces, cuntos nueves y as sucesivamente hasta la calificacin reprobatoria de cinco) y el promedio general del grupo.
Razonamiento: a) las calificaciones de los estudiantes de agronoma estn en un arreglo unidimensional de rango 100 (cien elementos); b) se requiere de otro arreglo (puede ser de rango 10 para que la calificacin sirva a su vez de ndice).
INICIO // Declaracin de arreglos y variables HACER nVcalif = ARREGLO(20) // para las calificaciones HACER nVfrec = ARREGLO(10) // para la frecuencia HACER nSuma = 0 // acumulador de calificaciones
// INTRODUCCIN DE DATOS DESDE nK=1 HASTA 20 INTRODUCIR Calificacin?,nVcalif[nK] MIENTRAS nVcalif[nK]<5 OR nVcalif[nK]>10 INTRODUCIR *ERROR* Calificacin?,nVcalif[nK] FIN_MIENTRAS FIN_DESDE
// PROCESAMIENTO DESDE nM=1 HASTA 20 HACER nCal = nVcalif[nM] // para mayor comprensin guardo la calif. En una // variable simple HACER nSuma = nSuma + nCal HACER nVfrec[nCal] = nVfrec[nCal] + 1 FIN_DESDE // SALIDA DESDE nK=10 HASTA 5 INCREMENTO -1 ESCRIBIR Calificacin de ,nK, Frecuencia = ,nVfrec[nK] FIN_DESDE ESCRIBIR Promedio del grupo = ,nSuma/20 FIN Algoritmia 51
Explicacin: Al momento de hacer la declaracin de arreglos, estos se forman as (se asume que ya se almacenaron los datos):
nVcalif
nVfrec
Haciendo uso de nuestra imaginacin, consideremos que la variable nSuma tiene esta imagen:
Despus de capturar las calificaciones, la variable nSuma contendr el valor de dicha sumatoria.
Despus de hacer el proceso, el vector nVfrec quedara as:
3 4 3 4 4 2 1 2 3 4 5 6 7 8 9 10
En la rutina de salida, el contador comienza en diez y termina en cinco (por que no se consideraron las calificaciones del 0 al 4), por lo que la salida de datos se vera as:
1 2 3 4 5 6 7 8 9 10 estos elementos no se usarn por estar fuera del rango de calificaciones 0 148 nSuma nSuma Calificacin de 10 Frecuencia = 2 Calificacin de 9 Frecuencia = 4 Calificacin de 8 Frecuencia = 4 Calificacin de 7 Frecuencia = 3 Calificacin de 6 Frecuencia =4 Calificacin de 5 Frecuencia = 3 Promedio del grupo = 7.4 Flavio de Jess Castillo Silva 52 2. Se tienen almacenadas las calificaciones (del 0 al 10) finales de los cien alumnos de informtica, se desea saber: a. El promedio del grupo b. Cual fue la calificacin ms alta c. Cual fue la calificacin ms baja
INICIO HACER nVcalif = ARREGLO(100)
// cargar vector (captura de datos) DESDE nG=1 HASTA 100 ESCRIBIR Introducir la calificacin del alumno,nG INTRODUCIR nVCalif[nG] MIENTRAS nVcalif[nG]<0 OR nVcalif[nG]>10 INTRODUCIR "**ERROR** Calificacin ?", nVcalif[nG] FIN_MIENTRAS FIN_DESDE
// Proceso HACER nSuma = 0 // Acumulador HACER nMay = 0 // Comparador del mayor HACER nMen = 10 // Comparador del menor DESDE nF=1 HASTA 100 HACER nSuma = nSuma + nVcalif[nF] // Acumulando calificaciones SI nVcalif[nF] > nMay ENTONCES // Determinando al mayor HACER nMay = nVcalif[nF] FIN_SI SI nVcalif[nF] < nMen ENTONCES // Determinando al menor HACER nMen = nVcalif[nF] FIN_SI FIN_DESDE
// Salida ESCRIBIR El promedio del grupo es,nSuma/100 ESCRIBIR La calificacin mayor fue ,nMay ESCRIBIR La calificacin menor fue ,nMen FIN
El promedio del grupo es 8.3 La calificacin mayor fue 10 La calificacin menor fue 5 Algoritmia 53 3. Hacer un algoritmo para determinar la frecuencia de n nmeros.
INICIO INTRODUCIR Introduzca el rango de nmeros,nR MIENTRAS nR<1 INTRODUCIR Introduzca el rango de nmeros,nR FIN_MIENTRAS HACER aNum = ARREGLO(nR) // declaro el arreglo de nmeros HACER aCompa = ARREGLO(nR) // arreglo para nmeros no repetidos HACER aCuenta = ARREGLO(nR) // arreglo para frecuencia // se solicitan los datos DESDE nJ=1 HASTA nR INTRODUCIR 'INTRODUZCA EL NUMERO ',aNum[nJ] FIN_DESDE // Se toma el primer nmero del arreglo de nmeros y se guarda HACER nP = 1 // contador de nmeros agregados sin repetir HACER aCompa[1] = aNum[1] // nmero no repetido HACER aCuenta[1] = 1 // conteo del nmero no repetido DESDE nK=2 HASTA nR // empiezo en el dos por el uno ya lo almacen HACER nPos = 0 // bandera e ndice de bsqueda // Rutina de bsqueda del siguiente nmero para ver // si ya esta o no agregado en el arreglo de nmeros no repetidos DESDE nM=1 HASTA nP SI aNum[nK] = aCompa[nM] ENTONCES HACER nPos = nM ; HACER nM = nP + 1 FIN_SI FIN_DESDE SI nPos>0 ENTONCES // si es verdadero quiere decir que lo encontr HACER aCuenta[nPos] = aCuenta[nPos] + 1 SINO // sino es mayor a cero, quiere decir que se va a agregar el nmero HACER nP = nP + 1 HACER aCompa[nP] = aNum[nK] HACER aCuenta[nP] = 1 FIN_SI FIN_DESDE ESCRIBIR =========================================== ESCRIBIR # NUMERO VECES DESDE nJ = 1 HASTA nP ESCRIBIR nJ, aCompa[nJ], aCuenta[nJ] FIN_DESDE ESCRIBIR =========================================== FIN
4. Considerando que se tiene un arreglo de rango 10, en el que se introducirn letras de forma aleatoria, se requiere de un algoritmo que las ordene alfabticamente (ordenacin burbuja).
Flavio de Jess Castillo Silva 54 INICIO ESCRIBIR ORDENAMIENTO BURBUJA HACER aNom = ARREGLO(10) // Introduccin de letras en desorden DESDE nJ = 1 HASTA 10 INTRODUCIR LETRA:,aNom[nJ] FIN_DESDE // Se toma desde uno hasta el rango menos uno DESDE nK = 1 HASTA 9 DESDE nJ = 1 HASTA 10-nK SI aNom[nJ+1] < aNom[nJ] ENTONCES HACER cNom = aNom[nJ] HACER aNom[nJ] = aNom[nJ+1] HACER aNom[nJ+1] = cNom FIN_SI FIN_DESDE FIN_DESDE // Visualizacin de resultados DESDE nL=1 HASTA 10 ESCRIBIR aNom[nL] FIN_DESDE FIN
Explicacin Al declarar el arreglo aNom de rango diez sera similar a lo siguiente:
aNom
1 2 3 4 5 6 7 8 9 10
Despus de hacer el recorrido para solicitar letra por letra y hacer el almacenamiento podra quedar as:
aNom D X R A K O Z M U G 1 2 3 4 5 6 7 8 9 10
A partir de este momento se presentar el detalle de cada vuelta y lo que sucede con el ciclo interno para el acomodo de las letras, se presenta primero la condicin as como el resultado correspondiente, adems, se muestra al vector de acuerdo a las posibilidades nicas: Verdadero (se intercambian los valores) y Falso (se queda como est).
1 vuelta: nJ recorrer hasta el 9 nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 1 1 2 X < D Falso (se queda as)
Algoritmia 55
aNom (nK = 1, nJ = 1) D X R A K O Z M U G 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 1 2 3 R < X Verdadero (se cambian)
aNom (nK = 1, nJ = 2) D R X A K O Z M U G 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 1 3 4 A < X Verdadero (se cambian)
aNom (nK = 1, nJ = 3) D R A X K O Z M U G 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 1 4 5 K < X Verdadero (se cambian)
aNom (nK = 1, nJ = 4) D R A K X O Z M U G 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 ANom[nJ+1] < aNom[nJ] Resultado 1 5 6 O < X Verdadero (se cambian)
aNom (nK = 1, nJ = 5) D R A K O X Z M U G 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 1 6 7 Z < X Falso (se queda as)
aNom (nK = 1, nJ = 6) D R A K O X Z M U G 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 1 7 8 M < Z Verdadero (se cambian)
aNom (nK = 1, nJ = 7) D R A K O X M Z U G 1 2 3 4 5 6 7 8 9 10
Flavio de Jess Castillo Silva 56
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 1 8 9 U < Z Verdadero (se cambian)
aNom (nK = 1, nJ = 8) D R A K O X M U Z G 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 1 9 10 G < Z Verdadero (se cambian)
aNom (nK = 1, nJ = 9) D R A K O X M U G Z 1 2 3 4 5 6 7 8 9 10
2 Vuelta: nJ recorrer hasta el 8 nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 2 1 2 R < D Falso (no se cambian)
aNom (nK = 2, nJ = 1) D R A K O X M U G Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 2 2 3 A < R Verdadero (se cambian)
aNom (nK = 2, nJ = 2) D A R K O X M U G Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 2 3 4 K < R Verdadero (se cambian)
aNom (nK = 2, nJ = 3) D A K R O X M U G Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 2 4 5 O < R Verdadero (se cambian)
aNom (nK = 2, nJ = 4) D A K O R X M U G Z 1 2 3 4 5 6 7 8 9 10
Algoritmia 57
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 2 5 6 X < R Falso (no se cambian)
aNom (nK = 2, nJ = 5) D A K O R X M U G Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 2 6 7 M < X Verdadero (se cambian)
aNom (nK = 2, nJ = 6) D A K O R M X U G Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 2 7 8 U < X Verdadero (se cambian)
aNom (nK = 2, nJ = 7) D A K O R M U X G Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 2 8 9 G < X Verdadero (se cambian)
aNom (nK = 2, nJ = 8) D A K O R M U G X Z 1 2 3 4 5 6 7 8 9 10
3 vuelta: nJ recorrer hasta el 7 nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 3 1 2 A < D Verdadero (se cambian)
aNom (nK = 3, nJ = 1) A D K O R M U G X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 3 2 3 K < D Falso (no se cambian)
aNom (nK = 3, nJ = 2) A D K O R M U G X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 3 3 4 O < K Falso (no se cambian) Flavio de Jess Castillo Silva 58 aNom (nK = 3, nJ = 3) A D K O R M U G X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 3 4 5 R < O Falso (no se cambian)
aNom (nK = 3, nJ = 4) A D K O R M U G X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 3 5 6 M < R Verdadero (se cambian)
aNom (nK = 3, nJ = 5) A D K O M R U G X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 3 6 7 U < R Falso (no se cambian)
aNom (nK = 3, nJ = 6) A D K O M R U G X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 3 7 8 G < U Verdadero (se cambian)
aNom (nK = 3, nJ = 7) A D K O M R G U X Z 1 2 3 4 5 6 7 8 9 10
4 vuelta: nJ recorrer hasta el 6 nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 4 1 2 D < A Falso (no se cambian)
aNom (nK = 4, nJ = 1) A D K O M R G U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 4 2 3 K < D Falso (no se cambian)
aNom (nK = 4, nJ = 2) A D K O M R G U X Z 1 2 3 4 5 6 7 8 9 10 Algoritmia 59
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 4 3 4 O < K Falso (no se cambian)
aNom (nK = 4, nJ = 3) A D K O M R G U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 4 4 5 M < O Verdadero (se cambian)
aNom (nK = 4, nJ = 4) A D K M O R G U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 4 5 6 R < O Falso (no se cambian)
aNom (nK = 4, nJ = 5) A D K M O R G U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 4 6 7 G < R Verdadero (se cambian)
aNom (nK = 4, nJ = 6) A D K M O G R U X Z 1 2 3 4 5 6 7 8 9 10
5 vuelta: nJ recorrer hasta 5 nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 5 1 2 D < A Falso (no se cambian)
aNom (nK = 5, nJ = 1) A D K M O G R U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 5 2 3 K < D Falso (no se cambian)
aNom (nK = 5, nJ = 2) A D K M O G R U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 5 3 4 M < K Falso (no se cambian) Flavio de Jess Castillo Silva 60 aNom (nK = 5, nJ = 3) A D K M O G R U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 5 4 5 O < M Falso (no se cambian)
aNom (nK = 5, nJ = 4) A D K M O G R U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 5 5 6 G < O Verdadero (se cambian)
aNom (nK = 5, nJ = 5) A D K M G O R U X Z 1 2 3 4 5 6 7 8 9 10
6 vuelta: nJ recorrer hasta el 4 nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 6 1 2 D < A Falso (no se cambian)
aNom (nK = 6, nJ = 1) A D K M G O R U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 6 2 3 K < D Falso (no se cambian)
aNom (nK = 6, nJ = 2) A D K M G O R U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 6 3 4 M < K Falso (no se cambian)
aNom (nK = 6, nJ = 3) A D K M G O R U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 6 4 5 G < M Verdadero (se cambian)
aNom (nK = 6, nJ = 4) A D K G M O R U X Z 1 2 3 4 5 6 7 8 9 10 Algoritmia 61 7 vuelta: nJ recorrer hasta 3 nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 7 1 2 D < A Falso (no se cambian)
aNom (nK = 7, nJ = 1) A D K G M O R U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 7 2 3 K < D Falso (no se cambian)
aNom (nK = 7, nJ = 2) A D K G M O R U X Z 1 2 3 4 5 6 7 8 9 10
nK nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 7 3 4 G < K Verdadero (se cambian)
aNom (nK = 7, nJ = 3) A D G K M O R U X Z 1 2 3 4 5 6 7 8 9 10
Nk nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 7 4 5 M < K Falso (no se cambian)
aNom (nK = 7, nJ = 4) A D G K M O R U X Z 1 2 3 4 5 6 7 8 9 10
8 vuelta: nJ recorrer hasta 2 Nk nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 8 1 2 D < A Falso (no se cambian)
aNom (nK = 8, nJ = 1) A D G K M O R U X Z 1 2 3 4 5 6 7 8 9 10
Nk nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 8 2 3 G < D Falso (no se cambian)
aNom (nK = 8, nJ = 2) A D G K M O R U X Z 1 2 3 4 5 6 7 8 9 10
Flavio de Jess Castillo Silva 62 9 vuelta: nJ recorrer una sola vez Nk nJ nJ+1 aNom[nJ+1] < aNom[nJ] Resultado 9 1 2 D < A Falso (no se cambian)
aNom (nK = 9, nJ = 1) A D G K M O R U X Z 1 2 3 4 5 6 7 8 9 10
Comentarios finales del ejercicio: En cada vuelta se fue reduciendo el recorrido debido a que el acomodo se hace hacia la derecha, de tal forma, que las letras ltimas del abecedario quedarn en las ltimas celdas y as sucesivamente hacia la izquierda.
5. Realizar un algoritmo para la conversin de nmeros arbigos enteros comprendidos entre el 1 y el 3,999 a su equivalencia en romanos.
INICIO HACER aMiles = ARREGLO(3) ; HACER aCen = ARREGLO(9) HACER aDec = ARREGLO(9) ; HACER aUnid = ARREGLO(9) HACER aMiles[1] = 'M' ; HACER aMiles[2] = 'MM'; HACER aMiles[3] = 'MMM HACER aCen[9] = 'CM' ; HACER aCen[8] = 'DCCC' HACER aCen[7] = 'DCC' ; HACER aCen[6] = 'DC' HACER aCen[5] = 'D' ; HACER aCen[4] = 'CD' HACER aCen[3] = 'CCC' ; HACER aCen[2] = 'CC' HACER aCen[1] = 'C' HACER aDec[9] = 'XC' ; HACER aDec[8] = 'LXXX' HACER aDec[7] = 'LXX' ; HACER aDec[6] = 'LX' HACER aDec[5] = 'L' ; HACER aDec[4] = 'XL' HACER aDec[3] = 'XXX' ; HACER aDec[2] = 'XX' HACER aDec[1] = 'X' HACER aUnid[9] = 'IX' ; HACER aUnid[8] = 'VIII' HACER aUnid[7] = 'VII' ; HACER aUnid[6] = 'VI' HACER aUnid[5] = 'V' ; HACER aUnid[4] = 'IV' HACER aUnid[3] = 'III' ; HACER aUnid[2] = 'II' HACER aUnid[1] = 'I' ; HACER cRom = ' ' INTRODUCIR 'NUMERO ARABIGO (ENTRE 1-3999): ',nNum MIENTRAS nNum<1 OR nNUm>3999 INTRODUCIR *ERROR* NUMERO ARABIGO (1-3999),nNum FIN_MIENTRAS HACER nMil = nNum DIV 1000 HACER nNum = nNum MOD 1000 HACER nCen = nNum DIV 100 HACER nNum = nNum MOD 100 HACER nDec = nNum DIV 10 HACER nNum = nNum MOD 10
Algoritmia 63 SI nMil>0 ENTONCES HACER cRom = aMiles[nMil] FIN_SI SI nCen>0 ENTONCES HACER cRom = cRom + aCen[nCen] FIN_SI SI nDec>0 ENTONCES HACER cRom = cRom + aDec[nDec] FIN_SI SI nNum>0 ENTONCES HACER cRom = cRom + aUnid[nNum] FIN_SI ESCRIBIR Nmero Romano -->,cRom FIN
6.1.6 EJERCICIOS PROPUESTOS DE VECTORES
1. Con ayuda de arreglos unidimensionales se desea almacenar informacin de las calificaciones finales de los cuatro parciales de esta materia en un grupo de n alumnos. Realiza un algoritmo que proporcione la siguiente informacin: a. El promedio semestral por alumno b. El promedio del grupo por parcial c. Porcentaje por parcial de alumnos aprobados y reprobados d. La frecuencia semestral de calificaciones
2. En una empresa de radiolocalizadotes, se desea contar con un algoritmo que les ayude a llevar el control de los mensajes recibidos de cada usuario. Al final del mes se requiere de cada usuario: a. El importe a pagar considerando que los 100 primeros mensajes estn incluidos en la renta de $90.00 y cada mensaje adicional cuesta $0.80 b. Para la empresa se requiere la suma del importe a cobrar de todos los usuarios
3. En una plaza de toros se venden boletos para quince tipos de asientos, se requiere de un algoritmo que lleve el control de los boletos vendidos para cada uno de ellos. Al corte de caja se desea saber: a. La suma de boletos global b. El tipo de boleto con mayor demanda y el de menor demanda c. El porcentaje por tipo de boletos con respecto al total de boletos vendidos
4. Se requiere de un vector para almacenar los primeros 50 nmeros perfectos. Hacer un algoritmo para ello. Un nmero perfecto es aquel que sumando sus dividendos excepto l mismo dan el mismo nmero, por ejemplo, el nmero seis es perfecto por que es divisible entre 1, 2 y 3, al sumar estos dan seis.
Flavio de Jess Castillo Silva 64 5. Hacer un algoritmo para realizar las elecciones en China, donde existen 32 candidatos presidenciales y el nmero del candidato ser el identificador en el voto, con el cero se determinar el final de las elecciones y se desea: a. Versin 1: Saber quien es el ganador, suponiendo que todos obtuvieron votos diferentes b. Versin 2: Considerar que algunos candidatos pudieron haber obtenido la mayora de votos, por lo que se desea saber quienes empataron en primer lugar.
6.2 TABLAS
Los arreglos bidimensionales, conocidos como tablas o matrices, son conjuntos de elementos en los cuales se hace uso de dos ndices (uno para cada dimensin), estas tablas estn formadas por filas y columnas, as como se representa en la siguiente figura:
Las filas son representadas de forma horizontal y las columnas verticalmente, los elementos son conocidos como celdas (como en una hoja de clculo) y se pueden referenciar como est representado en el siguiente cuadro, el primer nmero (antes de la coma) se refiere a la fila y el segundo (despus de la coma) a la columna:
cTnom[nJ,nK] Algoritmia 65 6.2.1 EJERCICIOS RESUELTOS DE TABLAS
Los ejercicios que a continuacin se describen son muy bsicos y tienen la finalidad de ejemplificarlos sin tener la intencionalidad de pretender con ellos generar conocimiento, son solo ilustrativos.
1. Se requiere de un algoritmo para manejar la lista de precios de los cincuenta artculos ms vendidos de una Refaccionaria, cuyas partes estn identificados por cdigos de cuatro dgitos. De tal forma, que el empleado tenga a su alcance la consulta eficaz de los precios.
INICIO HACER nTlista = ARREGLO(50,2) // 50 articulos con 2 columnas // 1er columna cdigos, // 2da columna precios HACER cVart = ARREGLO(50) // arreglo para los nombres de los artculos
// Se cargan los arreglos DESDE nK=1 HASTA 50
// Se captura el cdigo con un proceso de validacin // Para evitar duplicacin de los mismos HACER nPos = 1 // se pone la bandera como si existiera MIENTRAS nPos = 1 HACER nPos = 0 INTRODUCIR Cdigo del Artculo,nTlista[nK,1] DESDE nL=1 HASTA nK SI nTlista[nK,1] = nTlista[nL,1] ENTONCES HACER nPos = 1 ; HACER nL = nK FIN_SI FIN_DESDE FIN_MIENTRAS
INTRODUCIR Nombre del Artculo,cVart[nK] INTRODUCIR Precio,nTlista[nK,2] MIENTRAS nTlista[nK,2] < 0 INTRODUCIR **ERROR**, Precio,nTlista[nK,2] FIN_MIENTRAS FIN_DESDE
// Rutina para la bsqueda de precios (aqu estar hasta que el // Usuario lo decida, esto ser cuando introduzca cero en la clave) INTRODUCIR Cdigo a localizar,nCve
Flavio de Jess Castillo Silva 66 MIENTRAS nCve>0 // Se busca en la Tabla HACER nPos = 0 DESDE nA=1 HASTA 50 SI nCve = nTlista[nA,1] ENTONCES ESCRIBIR Artculo = ,cVart[nA] ESCRIBIR Precio = ,nTlista[nA,2] HACER nA = 50 ; HACER nPos = 1 FIN_SI FIN_DESDE SI nPos=0 ENTONCES ESCRIBIR Cdigo no localizado FIN_SI INTRODUCIR Cdigo a localizar,nCve FIN_MIENTRAS FIN
2. Tomando el ejercicio dos de la seccin 6.1.6, se resolver ahora con arreglos bidimensionales.
INICIO HACER nTpins = ARREGLO(1000,2) HACER nSuma = 0 // Acumulador de importes // Se considera que se har por cada da y de forma aleatoria durante un mes, // como sucede aproximadamente en una empresa de este giro comercial // Adems se asume para este ejemplo dos cosas: que los pines de los // Radiolocalizadores estn ya almacenados en la primer columna de la tabla // y la 2da. Columna se utilizar para llevar el conteo de mensajes por pin.
DESDE nJ=1 HASTA 30 // asumiendo 30 das por mes INTRODUCIR Pin?,nPin MIENTRAS nPin>0 HACER nPos = 0 DESDE nL=1 HASTA 1000 SI nPin = nTpins[nL,1] ENTONCES HACER nPos = 1 HACER nTpins[nL,2] = nTpins[nL,2] + 1 HACER nL = 1000 FIN_SI FIN_DESDE SI nPos = 0 ENTONCES ESCRIBIR El Pin no existe FIN_SI INTRODUCIR Pin?,nPin FIN_MIENTRAS // Al poner el pin cero se cambia de da FIN_DESDE
Algoritmia 67 // La siguiente parte del pseudocdigo consiste en hacer el clculo del cobro // tanto individual como global (se asume que se hace al final del mes) ESCRIBIR #Pin Renta Mensajes Extras Importe DESDE nJ=1 HASTA 1000 HACER nMextra = 0 SI nTpins[nJ,2] > 100 ENTONCES Hacer nMextra = 100 nTpins[nJ,2] * 0.80 FIN_SI HACER nImpo = 90 + nMextra // Importe a pagar x el usuario HACER nSuma = nSuma + nImpo // Acumulacin para la empresa ESCRIBIR nTpins[nJ,1],90.00,nMextra,nImpo FIN_DESDE ESCRIBIR El importe total a cobrar del mes es =,nSuma FIN
6.2.2 EJERCICIOS PROPUESTOS DE TABLAS
1. El Club deportivo El Atltico de Oaxaca tiene actualmente 350 socios, por lo que se requiere de un algoritmo que le permita llevar el acumulado de los importes de otros consumos de sus socios por membresa durante el mes (tales como: masaje, cafetera, ropa, etc.), considerando que la renta mensual de mantenimiento es de $850.00. Se desea saber al fin de mes el importe a cobrar de cada socio.
2. El teatro lvaro Carrillo de la ciudad de Oaxaca, requiere de un algoritmo para la venta de sus boletos, considerando que tiene 48 filas numeradas con 60 asientos cada una, se debe considerar que el algoritmo le indique si el asiento que el cliente desea adquirir para alguna funcin ya est o no vendido.
3. En el bosque El Tequio, desea reforestar un rea de su terreno, cuya posicin de los rboles estn registrados en una tabla de 10 filas y 25 columnas. El dato almacenado en cada celda tiene el siguiente significado: a. Un cero significa que no se ha plantado un rbol b. Un uno negativo que es un rbol muerto y debe talarse c. Un nmero entre uno y cien, representa la edad calculada del rbol
Realice un algoritmo que permita manipular dicha tabla y de respuesta a las siguientes interrogantes:
a. Cuntos rboles han sido plantados? (suma de rboles muertos y vacos) b. En qu zona se requiere atender ms por tener la fila o columna con espacios vacos? c. Qu columna tiene ms rboles buenos? (edades entre 1 y 100)
Flavio de Jess Castillo Silva 68
ANEXO 1
El siguiente archivo se llama PSEUDO.CH y sirve para tomar las instrucciones nativas de CA-CLIPPER 5.2.d superior y traducirlas para el manejo de pseudocdigos, este archivo deber estar en la carpeta denominada como INCLUDE en CA-CLIPPER.
#stdout *----- -----* #stdout Pseudocdigo ver 1.5 ITAO 23 #stdout por Flavio de Jess Castillo Silva #stdout Derechos reservados (2004) #stdout *----- -----*
#command HACER <var1> = <var2> DIV <var3> => <var1> := INT(<var2>/<var3>) #command HACER <var1> = <var2> MOD <var3> ; => <var1> := <var2> - (INT(<var2>/<var3>)*<var3>) Algoritmia 69 #command HACER <var1> = [ <varN> = ] <value> => ; <var1> := [ <varN> := ] <value>
/* Comandos para las estructuras (ciclos) */ #command DESDE <var1> = <var2> HASTA <var3> [INCREMENTO <var4>] => ; FOR <var1>:= <var2> TO <var3> [STEP <var4>] #command FIN_DESDE => next #command MIENTRAS <exp> => while <exp> #command FIN_MIENTRAS => enddo #command REPETIR => do while .t. #command HASTA <exp1> => if (<exp1>); exit; end; end #command SALIR CICLO => EXIT #command INICIAR CICLO => LOOP
/* Comandos para bifurcaciones */ #command SI <exp> ENTONCES => IF <exp> #command SINO => ELSE #command SINOSI <exp> ENTONCES => ELSEIF <exp> #command SINO_SI <exp> ENTONCES => ELSEIF <exp> #command FIN_SI => ENDIF #command EVALUAR => DO CASE #command CASO <var> = <exp> => CASE <var> == <exp> #command OTRO => OTHERWISE #command FIN_EVALUAR => ENDCASE
/* Booleanos */ #define OR .or. #define AND .and. #define or . or. #define and .and. #define verdadero .t. #define falso .f. #define VERDADERO .T. #define FALSO .F. Flavio de Jess Castillo Silva 70
ANEXO 2
El archivo descrito a continuacin, corresponde al archivo por lotes denominado PSEUDO.BAT y sirve para hacer la compilacin del archivo con CA-CLIPPER 5.2.d superior y deber estar en la carpeta BIN de este lenguaje.
CLIPPER %1 /b IF NOT ERRORLEVEL 1 RTLINK FILE %1 CLD %1
Cualquier pseudocdigo descrito en este libro podr ser compilado con solo incluirle la instruccin dentro del archivo que tendr la extensin .PRG y que se someter a las reglas de MS-DOS para nombrar archivos (longitud mxima en el nombre de ocho caracteres):
#INCLUDE pseudo.ch
INICIO DESDE nJ=1 HASTA 50 ESCRIBIR ITAO FIN_DESDE
Y para ejecutar la compilacin, desde la lnea de comandos del smbolo de sistema se hara:
PSEUDO programa < Enter > Algoritmia 71
BIBLIOGRAFA GENERAL
Cair, O. (1995). Metodologa de la Programacin. Colombia: Computec. Tomo I Cair, O. (1995). Metodologa de la Programacin. Colombia: Computec. Tomo II Castillo, F. (1986). Curso Elemental de BASIC. Mxico: DGETA-Microsep Hernndez, M. (1997). Algoritmos. Mxico: Instituto Tecnolgico de Tuxtepec (paper) Joyanes, L. (1989). Fundamentos de Programacin (Algoritmos y Estructura de Datos). Mxico:Mc Graw Hill Sawatzky, J. y Shu-Jen Chen (1985). Programacin BASIC-PLUS. Mxico: Limusa