Inversión publicitaria en LATAM crecerá 9.7% entre 2012 y 2016
Unidad 2 Elementos básicos para el desarrollo de …mrodriguez/version2libro1... · Web view15.5...
Transcript of Unidad 2 Elementos básicos para el desarrollo de …mrodriguez/version2libro1... · Web view15.5...
Unidad 1 Resolucioacuten de problemas
I1 Introduccioacuten
Todos los diacuteas resolvemos problemas auacuten sin ser consiente de esto Comuacutenmente tenemos que definir el problema decidir con que informacioacuten necesitamos trabajar y cuales deben ser los resultados esperados En particular los ingenieros en ciencias de la computacioacuten son resolvedores o solucionadores de problemas computacionalesEl Ingeniero en Computacioacuten (ver figura 1) es un profesional que disentildea implanta y desarrolla soluciones computacionales integradas lo que implica la elaboracioacuten de planes el desarrollo de sistemas y la adaptacioacuten de nuevas tecnologiacuteas en su campo de accioacuten profesional y laboral
En el aacutembito computacional obtener una solucioacuten muchas veces implica escribir un programa El proceso de programar lo podemos ver resumido en la figura 11 Este proceso se encuentra dividido en dos fases principales
Fase de resolucioacuten de problemas o Anaacutelisis y especificacioacuten Entendimiento (definicioacuten) del problema e
identificacioacuten de cual debe ser la solucioacuteno Solucioacuten general (algoritmo) Especifica los objetos (elementos) y sus
interacciones para resolver el problemao Verificacioacuten Sigue los pasos exactamente para ver si la solucioacuten realmente
resuelve el problema Fase de implementacioacuten
o Solucioacuten concreta Traduce la especificacioacuten de objetos y la solucioacuten general en un lenguaje de programacioacuten
o Pruebas Se ejecuta el programa y se checa los resultados Si se encuentran errores se analiza el programa y la solucioacuten general para determinar la causa de los errores y entonces se hacen las correcciones
Figura 11 Proceso de Programar
Antes que se busque la solucioacuten se debe entender el problema Asiacute que aquiacute cabe preguntarnos iquestqueacute es un problema
iquestQueacute es un problema
Seguacuten Newell y Simon un problema se define como ldquouna situacioacuten en la cual un individuo desea hacer algo pero desconoce el curso de la accioacuten necesaria para lograr lo que quiererdquo
Otra definicioacuten es la dada por Chi y Glaser la cual lo define ldquocomo una situacioacuten en la cual un individuo actuacutea con el propoacutesito de alcanzar una meta utilizando para ello alguna estrategia en particularrdquo
Figura 12 - iquestQueacute es un problema
Cuando hacemos referencia a la meta o a lograr lo que se quiere nos estamos refiriendo a lo que se desea alcanzar la solucioacuten La meta o solucioacuten estaacute asociada con un estado inicial y la diferencia que existe entre ambos se denomina ldquoproblemardquo Las actividades llevadas a cabo por los sujetos tienen por objeto operar sobre el estado inicial para transformarlo en meta De esta manera se podriacutea decir que los problemas tienen cuatro componentes (Mayer 1983)
1) las metas2) los datos
3) las restricciones
4) los meacutetodos
Figura 13 - Los componentes de un problema
Consideremos el siguiente ejemplo ldquoAnita tiene una muntildeeca y quiere vestirla con pantaloacuten y blusa Tiene cuatro pantalones rojo blanco azul y negro y tiene tres blusas verde amarillo y rosado Ella quiere hacer diferentes combinaciones con todos los pantalones y las blusas verde y rosada iquestCuaacutentas combinaciones diferentes puede hacerrdquo
Para nuestro ejemplo la meta consiste en saber cuaacutentas combinaciones diferentes puede hacer Anita con los pantalones y las blusas Los datos son 4 pantalones y 3 blusas Las restricciones son que Anita solo quiere utilizar 2 de las 3 blusas la verde y rosada En consecuencia no todas las blusas van a ser consideradas para las combinaciones Por uacuteltimo los meacutetodos son las operaciones requeridas para obtener el nuacutemero de combinaciones
Una vez entendido queacute es un problema el siguiente paso es comprender coacutemo podemos resolverlo es decir queacute es la resolucioacuten de problemas
iquestQueacute es la resolucioacuten de problemas
Seguacuten Dijkstra (1991) la resolucioacuten de problemas es un proceso cognoscitivo complejo que involucra conocimiento almacenado en la memoria a corto y a largo plazo
Polya (1965) sentildeala que un problema puede resolverse correctamente si se realizan las fases o etapas mostradas en la figura 14
Figura 14 - Etapas en la resolucioacuten de problemas
Comprender el problema nos lleva a conocer queacute es los que se va a resolver mientras que concebir un plan para llegar a la solucioacuten involucra el como Una buena noticia es que existen diferentes teacutecnicas o estrategias que nos guiacutean en la resolucioacuten de problemas
12 Teacutecnicas o estrategias para resolucioacuten de problemas
Las estrategias para resolver problemas se refieren a las operaciones mentales que se utilizan para pensar sobre la representacioacuten de las metas y los datos con el fin de transformarlos en metas y obtener una solucioacuten Algunas teacutecnicas para resolucioacuten de problemas se muestran en la figura 15
Figura 15 - Teacutecnicas de resolucioacuten de problemas
Hacer preguntasUna de las teacutecnicas para resolucioacuten de problemas maacutes simples pero muy importante es la de hacer preguntas Debemos asegurarnos que estamos procediendo a resolver el problema real y no el problema que percibimos (Figura 16)
Figura 16- iquestCuaacutel es el problema real
Algunas preguntas uacutetiles que podemos hacer son
1 iquestQueacute es lo que seacute acerca del problema2 iquestCuaacutel es la informacioacuten con la que debo trabajar para encontrar la solucioacuten3 iquestCoacutemo se ve la solucioacuten queacute parece4 iquestQueacute clase de casos especiales existen5 iquestCoacutemo voy a saber que he encontrado la solucioacuten
Siempre que se nos deacute una tarea o un problema que no esteacute bien definido o que se requiera informacioacuten adicional debemos hacer preguntas hasta que tengamos claro exactamente que es lo que se quiere o tiene que hacer
Figura 17 - Hacer preguntas
121 Divide y vencer (divide y venceraacutes)
Frecuentemente despedazamos problemas grandes en pequentildeas unidades que son maacutes faacuteciles de manejar Por ejemplo limpiar la recaacutemara puede parecer demasiado complicado en comparacioacuten a limpiar soacutelo los pisos o hacer la cama o escombrar el librero La misma idea aplica a problemas computacionales asiacute esta teacutecnica se basa en la idea de separar o dividir un problema grande en pequentildeas piezas maacutes manejables
Figura 18 - Dividir un problema en subproblemas
122 Meacutetodo de bloques de construccioacuten
Esta estrategia tambieacuten es uacutetil para problemas grandes o complejos y consiste en ver si existe solucioacuten para piezas mas pequentildeas del problema (los bloques o ladrillos) y si es posible unir estas soluciones para resolver todo o la mayoriacutea del problema grande (hacer la pared)
Figura 19 - Unir bloques
La idea es analizar el problema completo y ver si se puede dividir en pequentildeas piezas para las cuales ya exista solucioacuten Por ejemplo si se desea construir un auto podemos dividir el disentildeo en sus partes Llantas puerta ventanas motor ect Y encontrar estas partes ya hechas que puedan acoplarse juntas para formar el auto
123 Analogiacutea
Esta estrategia consiste en relacionar un problema o una situacioacuten con otra semejante que ya se haya resuelto anteriormente Es decir identificar alguacuten patroacuten comuacuten
Figura 110 - Analogiacutea
Por ejemplo si tu ya antes has escrito recetas de cocina y en la escuela se te pide hacer un instructivo para armar un papalote podriacuteas escribir este relacionaacutendolo con la forma como se escribe una receta es decir por analogiacutea
123 Buscar cosas que son familias
Esta estrategia es muy parecida a la de resolucioacuten por analogiacutea Sin embargo la idea es ldquonunca reinventar la ruedardquo Si una solucioacuten ya existe se puede usar esta Es decir si ya has resuelto el mismo o un problema muy similar antes soacutelo repite la solucioacuten Uno no aprende a ir a comprar el pan despueacutes a ir a comprar leche despueacutes huevo simplemente aprende uno a ldquoir a comprar a la tiendardquo es decir repite uno la misma solucioacuten En programacioacuten ciertos problemas se repiten uno y otra vez por ejemplo obtener la maacutexima y miacutenima calificacioacuten de un grupo de alumnos es igual a obtener la temperatura maacutexima y miacutenima de un conjunto de datos
Figura 111- obtencioacuten de maacuteximo y miacutenimo
124 Anaacutelisis de medios y fines
La teacutecnica de anaacutelisis de medios y fines permite trabajar con un objetivo o fin a la vez Es decir esta teacutecnica consiste en descomponer el problema en sub-metas o sub-objetivos ir escogiendo una sub-meta para trabajar y solucionar eacutesta despueacutes seleccionar otra sub-meta y asiacute hasta completar la tarea eliminando los obstaacuteculos que le impiden llegar al estado finalUn buen ejemplo donde aplicar estaacute teacutecnica es para el problema de ir de una ciudad a otra con varias ciudades intermedias En este caso las sub-metas son las ciudades intermedias y los medios son la forma de llegar de una ciudad a otra Por ejemplo si quisieacuteramos recorrer la ruta Maya podriacuteamos identificar las ciudades involucradas como sub-metas y decidir como llegar ahiacute por ejemplo para llegar de Puebla a San Cristobal no podriacutea ser por avioacuten tendriacuteamos que buscar otra sub-meta Tuxtla Guitierez y de Tuxtla a San Cristobal por auto y asiacute a cada localidad
Figura 112 - Aplicar estrategia de medios y fines
125 Combinar Soluciones
La uacuteltima teacutecnica para resolver problemas es combinar soluciones existentes Esta teacutecnica podriacutea parecerse a la teacutecnica de Buscar cosas que sean familiares pero en este caso es combinar las soluciones paso a paso no solamente unir soluciones obtenidas separadamente Por ejemplo Para calcular el promedio de una lista de valores debemos hacer dos cosas sumar los valores y contarlos Si tenemos dos soluciones separadas una para sumar los valores y otra para contarlos podemos combinarlas y asiacute paso a paso ir sumando y contando al mismo tiempo de tal manera que al final tendremos la solucioacuten al problema
Una vez discutidas las diversas formas para abordar un problema se puede en la fase de resolucioacuten la manera en que se va a disentildear el algoritmo particular de solucioacuten al mismo para lo que se introduciraacute el concepto de algoritmo
Disentildeo del algoritmo
Un algoritmo puede ser definido como la secuencia ordenada de pasos sin ambiguumledades que conducen a la resolucioacuten de un problema dado y expresado en lenguaje natural Todo algoritmo debe ser
- Preciso Indicando el orden de realizacioacuten de cada uno de los pasos- Definido Si se sigue el algoritmo varias veces proporcionaacutendole (consistente) los mismos datos se deben obtener siempre los mismos resultados- Finito Al seguir el algoritmo este debe terminar en alguacuten momento es decir tener un nuacutemero finito de pasos
Para disentildear un algoritmo se debe comenzar por identificar las tareas maacutes importantes para resolver el problema y disponerlas en el orden en el que han de ser ejecutadas Los pasos en esta primera descripcioacuten pueden requerir una revisioacuten adicional antes de que podamos obtener un algoritmo claro preciso y completoEste meacutetodo de disentildeo de algoritmos en etapas yendo de los conceptos generales a los de detalle se conoce como meacutetodo descendente (top-down)
En un algoritmo se deben de considerar tres partes
- Entrada Informacioacuten dada al algoritmo- Proceso Operaciones o caacutelculos necesarios para encontrar la solucioacuten del problema- Salida Respuestas dadas por el algoritmo o resultados finales de los procesos realizados
Como ejemplo supongamos que desea desarrollar un algoritmo que calcule la superficie de un rectaacutengulo proporcionaacutendole su base y altura Lo primero que debemos hacer es plantearnos las siguientes preguntas
Especificaciones de entradaiquestQue datos son de entradaiquestCuaacutentos datos se introduciraacuteniquestCuaacutentos son datos de entrada vaacutelidos
Especificaciones de salidaiquestCuaacuteles son los datos de salidaiquestCuaacutentos datos de salida se produciraacuteniquestQueacute formato y precisioacuten tendraacuten los resultados
El algoritmo que podemos utilizar es el siguientePaso 1 Entrada desde el teclado de los datos de base y alturaPaso 2 Caacutelculo de la superficie multiplicando la base por la alturaPaso 3 Salida por pantalla de base altura y superficie calculada
El lenguaje algoriacutetmico debe ser independiente de cualquier lenguaje de programacioacuten particular pero faacutecilmente traducible a cada uno de ellos Alcanzar estos objetivos conduciraacute al empleo de meacutetodos normalizados para la representacioacuten de algoritmos tales como los diagrama de flujo o pseudocoacutedigo
Verificacioacuten de algoritmos
Una vez que se ha terminado de escribir un algoritmo es necesario comprobar que realiza las tareas para las que se ha disentildeado y produce el resultado correcto y esperado El modo maacutes normal de comprobar un algoritmo es mediante su ejecucioacuten manual usando datos significativos que abarquen todo el posible rango de valores Este proceso se conoce como prueba del algoritmo A continuacioacuten se formularaacuten un conjunto de algoritmos
Ejemplo 11Un procedimiento que realizamos varias veces al diacutea consiste en lavarnos los dientes Veamos la forma de expresar este procedimiento como un Algoritmo
1 Tomar la crema dental2 Destapar la crema dental3 Tomar el cepillo de dientes4 Aplicar crema dental al cepillo5 Tapar la crema dental6 Abrir la llave del lavamanos7 Remojar el cepillo con la crema dental8 Cerrar la llave del lavamanos9 Frotar los dientes con el cepillo10 Abrir la llave del lavamanos11 Enjuagarse la boca
12 Enjuagar el cepillo13 Cerrar la llave del lavamanos14 Secarse la cara y las manos con una toalla
Ejemplo 12
Veamos que algo tan comuacuten como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo
1 Ubicar una escalera o un banco debajo de la bombilla fundida2 Tomar una bombilla nueva3 Subir por la escalera o al banco4 Girar la bombilla fundida hacia la izquierda hasta soltarla5 Enroscar la bombilla nueva hacia la derecha en el plafoacuten hasta apretarla6 Bajar de la escalera o del banco7 Fin
Actividad 11Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras Luego un voluntario debe pasar al pizarroacuten y escribir un Algoritmo con participacioacuten de toda la claseEjemplo 13
Consideremos algo maacutes complejo como el algoritmo de Euclides para hallar el Maacuteximo Comuacuten Divisor (MCD) de dos nuacutemeros enteros positivos dados Obseacutervese que no se especifica cuaacuteles son los dos nuacutemeros pero si se establece claramente una restriccioacuten deben ser enteros y positivos
ALGORITMO
Paso 1 Inicio Paso 2 Leer los dos nuacutemeros (ldquoardquo y ldquobrdquo) Avanzar al paso 3 Paso 3 Comparar ldquoardquo y ldquobrdquo para determinar cuaacutel es mayor Avanzar al paso 4 Paso 4 Si ldquoardquo y ldquobrdquo son iguales entonces ambos son el resultado esperado y termina el algoritmo En caso contrario avanzar al paso 5 Paso 5 Si ldquoardquo es menor que ldquobrdquo se deben intercambiar sus valores Avanzar al paso 6 si ldquoardquo no es menor que ldquobrdquo avanzar al paso 6 Paso 6 Realizar la operacioacuten ldquoardquo menos ldquobrdquo asignar el valor de ldquobrdquo a ldquoardquo y asignar el valor de la resta a ldquobrdquo Ir al paso 3
Actividad 12Reflexiona sobre el lenguaje que utilizas diariamente para comunicarte con tus padres hermanos profesores y compantildeeros iquestUtilizas un lenguaje preciso iquestUtilizas vocablos corrientes
Actividad 13A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden loacutegico de ejecucioacuten Numerar en orden loacutegico los pasos siguientes (para pescar)
___ El pez se traga el anzuelo___ Enrollar el sedal___ Tirar el sedal al agua
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Figura 11 Proceso de Programar
Antes que se busque la solucioacuten se debe entender el problema Asiacute que aquiacute cabe preguntarnos iquestqueacute es un problema
iquestQueacute es un problema
Seguacuten Newell y Simon un problema se define como ldquouna situacioacuten en la cual un individuo desea hacer algo pero desconoce el curso de la accioacuten necesaria para lograr lo que quiererdquo
Otra definicioacuten es la dada por Chi y Glaser la cual lo define ldquocomo una situacioacuten en la cual un individuo actuacutea con el propoacutesito de alcanzar una meta utilizando para ello alguna estrategia en particularrdquo
Figura 12 - iquestQueacute es un problema
Cuando hacemos referencia a la meta o a lograr lo que se quiere nos estamos refiriendo a lo que se desea alcanzar la solucioacuten La meta o solucioacuten estaacute asociada con un estado inicial y la diferencia que existe entre ambos se denomina ldquoproblemardquo Las actividades llevadas a cabo por los sujetos tienen por objeto operar sobre el estado inicial para transformarlo en meta De esta manera se podriacutea decir que los problemas tienen cuatro componentes (Mayer 1983)
1) las metas2) los datos
3) las restricciones
4) los meacutetodos
Figura 13 - Los componentes de un problema
Consideremos el siguiente ejemplo ldquoAnita tiene una muntildeeca y quiere vestirla con pantaloacuten y blusa Tiene cuatro pantalones rojo blanco azul y negro y tiene tres blusas verde amarillo y rosado Ella quiere hacer diferentes combinaciones con todos los pantalones y las blusas verde y rosada iquestCuaacutentas combinaciones diferentes puede hacerrdquo
Para nuestro ejemplo la meta consiste en saber cuaacutentas combinaciones diferentes puede hacer Anita con los pantalones y las blusas Los datos son 4 pantalones y 3 blusas Las restricciones son que Anita solo quiere utilizar 2 de las 3 blusas la verde y rosada En consecuencia no todas las blusas van a ser consideradas para las combinaciones Por uacuteltimo los meacutetodos son las operaciones requeridas para obtener el nuacutemero de combinaciones
Una vez entendido queacute es un problema el siguiente paso es comprender coacutemo podemos resolverlo es decir queacute es la resolucioacuten de problemas
iquestQueacute es la resolucioacuten de problemas
Seguacuten Dijkstra (1991) la resolucioacuten de problemas es un proceso cognoscitivo complejo que involucra conocimiento almacenado en la memoria a corto y a largo plazo
Polya (1965) sentildeala que un problema puede resolverse correctamente si se realizan las fases o etapas mostradas en la figura 14
Figura 14 - Etapas en la resolucioacuten de problemas
Comprender el problema nos lleva a conocer queacute es los que se va a resolver mientras que concebir un plan para llegar a la solucioacuten involucra el como Una buena noticia es que existen diferentes teacutecnicas o estrategias que nos guiacutean en la resolucioacuten de problemas
12 Teacutecnicas o estrategias para resolucioacuten de problemas
Las estrategias para resolver problemas se refieren a las operaciones mentales que se utilizan para pensar sobre la representacioacuten de las metas y los datos con el fin de transformarlos en metas y obtener una solucioacuten Algunas teacutecnicas para resolucioacuten de problemas se muestran en la figura 15
Figura 15 - Teacutecnicas de resolucioacuten de problemas
Hacer preguntasUna de las teacutecnicas para resolucioacuten de problemas maacutes simples pero muy importante es la de hacer preguntas Debemos asegurarnos que estamos procediendo a resolver el problema real y no el problema que percibimos (Figura 16)
Figura 16- iquestCuaacutel es el problema real
Algunas preguntas uacutetiles que podemos hacer son
1 iquestQueacute es lo que seacute acerca del problema2 iquestCuaacutel es la informacioacuten con la que debo trabajar para encontrar la solucioacuten3 iquestCoacutemo se ve la solucioacuten queacute parece4 iquestQueacute clase de casos especiales existen5 iquestCoacutemo voy a saber que he encontrado la solucioacuten
Siempre que se nos deacute una tarea o un problema que no esteacute bien definido o que se requiera informacioacuten adicional debemos hacer preguntas hasta que tengamos claro exactamente que es lo que se quiere o tiene que hacer
Figura 17 - Hacer preguntas
121 Divide y vencer (divide y venceraacutes)
Frecuentemente despedazamos problemas grandes en pequentildeas unidades que son maacutes faacuteciles de manejar Por ejemplo limpiar la recaacutemara puede parecer demasiado complicado en comparacioacuten a limpiar soacutelo los pisos o hacer la cama o escombrar el librero La misma idea aplica a problemas computacionales asiacute esta teacutecnica se basa en la idea de separar o dividir un problema grande en pequentildeas piezas maacutes manejables
Figura 18 - Dividir un problema en subproblemas
122 Meacutetodo de bloques de construccioacuten
Esta estrategia tambieacuten es uacutetil para problemas grandes o complejos y consiste en ver si existe solucioacuten para piezas mas pequentildeas del problema (los bloques o ladrillos) y si es posible unir estas soluciones para resolver todo o la mayoriacutea del problema grande (hacer la pared)
Figura 19 - Unir bloques
La idea es analizar el problema completo y ver si se puede dividir en pequentildeas piezas para las cuales ya exista solucioacuten Por ejemplo si se desea construir un auto podemos dividir el disentildeo en sus partes Llantas puerta ventanas motor ect Y encontrar estas partes ya hechas que puedan acoplarse juntas para formar el auto
123 Analogiacutea
Esta estrategia consiste en relacionar un problema o una situacioacuten con otra semejante que ya se haya resuelto anteriormente Es decir identificar alguacuten patroacuten comuacuten
Figura 110 - Analogiacutea
Por ejemplo si tu ya antes has escrito recetas de cocina y en la escuela se te pide hacer un instructivo para armar un papalote podriacuteas escribir este relacionaacutendolo con la forma como se escribe una receta es decir por analogiacutea
123 Buscar cosas que son familias
Esta estrategia es muy parecida a la de resolucioacuten por analogiacutea Sin embargo la idea es ldquonunca reinventar la ruedardquo Si una solucioacuten ya existe se puede usar esta Es decir si ya has resuelto el mismo o un problema muy similar antes soacutelo repite la solucioacuten Uno no aprende a ir a comprar el pan despueacutes a ir a comprar leche despueacutes huevo simplemente aprende uno a ldquoir a comprar a la tiendardquo es decir repite uno la misma solucioacuten En programacioacuten ciertos problemas se repiten uno y otra vez por ejemplo obtener la maacutexima y miacutenima calificacioacuten de un grupo de alumnos es igual a obtener la temperatura maacutexima y miacutenima de un conjunto de datos
Figura 111- obtencioacuten de maacuteximo y miacutenimo
124 Anaacutelisis de medios y fines
La teacutecnica de anaacutelisis de medios y fines permite trabajar con un objetivo o fin a la vez Es decir esta teacutecnica consiste en descomponer el problema en sub-metas o sub-objetivos ir escogiendo una sub-meta para trabajar y solucionar eacutesta despueacutes seleccionar otra sub-meta y asiacute hasta completar la tarea eliminando los obstaacuteculos que le impiden llegar al estado finalUn buen ejemplo donde aplicar estaacute teacutecnica es para el problema de ir de una ciudad a otra con varias ciudades intermedias En este caso las sub-metas son las ciudades intermedias y los medios son la forma de llegar de una ciudad a otra Por ejemplo si quisieacuteramos recorrer la ruta Maya podriacuteamos identificar las ciudades involucradas como sub-metas y decidir como llegar ahiacute por ejemplo para llegar de Puebla a San Cristobal no podriacutea ser por avioacuten tendriacuteamos que buscar otra sub-meta Tuxtla Guitierez y de Tuxtla a San Cristobal por auto y asiacute a cada localidad
Figura 112 - Aplicar estrategia de medios y fines
125 Combinar Soluciones
La uacuteltima teacutecnica para resolver problemas es combinar soluciones existentes Esta teacutecnica podriacutea parecerse a la teacutecnica de Buscar cosas que sean familiares pero en este caso es combinar las soluciones paso a paso no solamente unir soluciones obtenidas separadamente Por ejemplo Para calcular el promedio de una lista de valores debemos hacer dos cosas sumar los valores y contarlos Si tenemos dos soluciones separadas una para sumar los valores y otra para contarlos podemos combinarlas y asiacute paso a paso ir sumando y contando al mismo tiempo de tal manera que al final tendremos la solucioacuten al problema
Una vez discutidas las diversas formas para abordar un problema se puede en la fase de resolucioacuten la manera en que se va a disentildear el algoritmo particular de solucioacuten al mismo para lo que se introduciraacute el concepto de algoritmo
Disentildeo del algoritmo
Un algoritmo puede ser definido como la secuencia ordenada de pasos sin ambiguumledades que conducen a la resolucioacuten de un problema dado y expresado en lenguaje natural Todo algoritmo debe ser
- Preciso Indicando el orden de realizacioacuten de cada uno de los pasos- Definido Si se sigue el algoritmo varias veces proporcionaacutendole (consistente) los mismos datos se deben obtener siempre los mismos resultados- Finito Al seguir el algoritmo este debe terminar en alguacuten momento es decir tener un nuacutemero finito de pasos
Para disentildear un algoritmo se debe comenzar por identificar las tareas maacutes importantes para resolver el problema y disponerlas en el orden en el que han de ser ejecutadas Los pasos en esta primera descripcioacuten pueden requerir una revisioacuten adicional antes de que podamos obtener un algoritmo claro preciso y completoEste meacutetodo de disentildeo de algoritmos en etapas yendo de los conceptos generales a los de detalle se conoce como meacutetodo descendente (top-down)
En un algoritmo se deben de considerar tres partes
- Entrada Informacioacuten dada al algoritmo- Proceso Operaciones o caacutelculos necesarios para encontrar la solucioacuten del problema- Salida Respuestas dadas por el algoritmo o resultados finales de los procesos realizados
Como ejemplo supongamos que desea desarrollar un algoritmo que calcule la superficie de un rectaacutengulo proporcionaacutendole su base y altura Lo primero que debemos hacer es plantearnos las siguientes preguntas
Especificaciones de entradaiquestQue datos son de entradaiquestCuaacutentos datos se introduciraacuteniquestCuaacutentos son datos de entrada vaacutelidos
Especificaciones de salidaiquestCuaacuteles son los datos de salidaiquestCuaacutentos datos de salida se produciraacuteniquestQueacute formato y precisioacuten tendraacuten los resultados
El algoritmo que podemos utilizar es el siguientePaso 1 Entrada desde el teclado de los datos de base y alturaPaso 2 Caacutelculo de la superficie multiplicando la base por la alturaPaso 3 Salida por pantalla de base altura y superficie calculada
El lenguaje algoriacutetmico debe ser independiente de cualquier lenguaje de programacioacuten particular pero faacutecilmente traducible a cada uno de ellos Alcanzar estos objetivos conduciraacute al empleo de meacutetodos normalizados para la representacioacuten de algoritmos tales como los diagrama de flujo o pseudocoacutedigo
Verificacioacuten de algoritmos
Una vez que se ha terminado de escribir un algoritmo es necesario comprobar que realiza las tareas para las que se ha disentildeado y produce el resultado correcto y esperado El modo maacutes normal de comprobar un algoritmo es mediante su ejecucioacuten manual usando datos significativos que abarquen todo el posible rango de valores Este proceso se conoce como prueba del algoritmo A continuacioacuten se formularaacuten un conjunto de algoritmos
Ejemplo 11Un procedimiento que realizamos varias veces al diacutea consiste en lavarnos los dientes Veamos la forma de expresar este procedimiento como un Algoritmo
1 Tomar la crema dental2 Destapar la crema dental3 Tomar el cepillo de dientes4 Aplicar crema dental al cepillo5 Tapar la crema dental6 Abrir la llave del lavamanos7 Remojar el cepillo con la crema dental8 Cerrar la llave del lavamanos9 Frotar los dientes con el cepillo10 Abrir la llave del lavamanos11 Enjuagarse la boca
12 Enjuagar el cepillo13 Cerrar la llave del lavamanos14 Secarse la cara y las manos con una toalla
Ejemplo 12
Veamos que algo tan comuacuten como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo
1 Ubicar una escalera o un banco debajo de la bombilla fundida2 Tomar una bombilla nueva3 Subir por la escalera o al banco4 Girar la bombilla fundida hacia la izquierda hasta soltarla5 Enroscar la bombilla nueva hacia la derecha en el plafoacuten hasta apretarla6 Bajar de la escalera o del banco7 Fin
Actividad 11Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras Luego un voluntario debe pasar al pizarroacuten y escribir un Algoritmo con participacioacuten de toda la claseEjemplo 13
Consideremos algo maacutes complejo como el algoritmo de Euclides para hallar el Maacuteximo Comuacuten Divisor (MCD) de dos nuacutemeros enteros positivos dados Obseacutervese que no se especifica cuaacuteles son los dos nuacutemeros pero si se establece claramente una restriccioacuten deben ser enteros y positivos
ALGORITMO
Paso 1 Inicio Paso 2 Leer los dos nuacutemeros (ldquoardquo y ldquobrdquo) Avanzar al paso 3 Paso 3 Comparar ldquoardquo y ldquobrdquo para determinar cuaacutel es mayor Avanzar al paso 4 Paso 4 Si ldquoardquo y ldquobrdquo son iguales entonces ambos son el resultado esperado y termina el algoritmo En caso contrario avanzar al paso 5 Paso 5 Si ldquoardquo es menor que ldquobrdquo se deben intercambiar sus valores Avanzar al paso 6 si ldquoardquo no es menor que ldquobrdquo avanzar al paso 6 Paso 6 Realizar la operacioacuten ldquoardquo menos ldquobrdquo asignar el valor de ldquobrdquo a ldquoardquo y asignar el valor de la resta a ldquobrdquo Ir al paso 3
Actividad 12Reflexiona sobre el lenguaje que utilizas diariamente para comunicarte con tus padres hermanos profesores y compantildeeros iquestUtilizas un lenguaje preciso iquestUtilizas vocablos corrientes
Actividad 13A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden loacutegico de ejecucioacuten Numerar en orden loacutegico los pasos siguientes (para pescar)
___ El pez se traga el anzuelo___ Enrollar el sedal___ Tirar el sedal al agua
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Cuando hacemos referencia a la meta o a lograr lo que se quiere nos estamos refiriendo a lo que se desea alcanzar la solucioacuten La meta o solucioacuten estaacute asociada con un estado inicial y la diferencia que existe entre ambos se denomina ldquoproblemardquo Las actividades llevadas a cabo por los sujetos tienen por objeto operar sobre el estado inicial para transformarlo en meta De esta manera se podriacutea decir que los problemas tienen cuatro componentes (Mayer 1983)
1) las metas2) los datos
3) las restricciones
4) los meacutetodos
Figura 13 - Los componentes de un problema
Consideremos el siguiente ejemplo ldquoAnita tiene una muntildeeca y quiere vestirla con pantaloacuten y blusa Tiene cuatro pantalones rojo blanco azul y negro y tiene tres blusas verde amarillo y rosado Ella quiere hacer diferentes combinaciones con todos los pantalones y las blusas verde y rosada iquestCuaacutentas combinaciones diferentes puede hacerrdquo
Para nuestro ejemplo la meta consiste en saber cuaacutentas combinaciones diferentes puede hacer Anita con los pantalones y las blusas Los datos son 4 pantalones y 3 blusas Las restricciones son que Anita solo quiere utilizar 2 de las 3 blusas la verde y rosada En consecuencia no todas las blusas van a ser consideradas para las combinaciones Por uacuteltimo los meacutetodos son las operaciones requeridas para obtener el nuacutemero de combinaciones
Una vez entendido queacute es un problema el siguiente paso es comprender coacutemo podemos resolverlo es decir queacute es la resolucioacuten de problemas
iquestQueacute es la resolucioacuten de problemas
Seguacuten Dijkstra (1991) la resolucioacuten de problemas es un proceso cognoscitivo complejo que involucra conocimiento almacenado en la memoria a corto y a largo plazo
Polya (1965) sentildeala que un problema puede resolverse correctamente si se realizan las fases o etapas mostradas en la figura 14
Figura 14 - Etapas en la resolucioacuten de problemas
Comprender el problema nos lleva a conocer queacute es los que se va a resolver mientras que concebir un plan para llegar a la solucioacuten involucra el como Una buena noticia es que existen diferentes teacutecnicas o estrategias que nos guiacutean en la resolucioacuten de problemas
12 Teacutecnicas o estrategias para resolucioacuten de problemas
Las estrategias para resolver problemas se refieren a las operaciones mentales que se utilizan para pensar sobre la representacioacuten de las metas y los datos con el fin de transformarlos en metas y obtener una solucioacuten Algunas teacutecnicas para resolucioacuten de problemas se muestran en la figura 15
Figura 15 - Teacutecnicas de resolucioacuten de problemas
Hacer preguntasUna de las teacutecnicas para resolucioacuten de problemas maacutes simples pero muy importante es la de hacer preguntas Debemos asegurarnos que estamos procediendo a resolver el problema real y no el problema que percibimos (Figura 16)
Figura 16- iquestCuaacutel es el problema real
Algunas preguntas uacutetiles que podemos hacer son
1 iquestQueacute es lo que seacute acerca del problema2 iquestCuaacutel es la informacioacuten con la que debo trabajar para encontrar la solucioacuten3 iquestCoacutemo se ve la solucioacuten queacute parece4 iquestQueacute clase de casos especiales existen5 iquestCoacutemo voy a saber que he encontrado la solucioacuten
Siempre que se nos deacute una tarea o un problema que no esteacute bien definido o que se requiera informacioacuten adicional debemos hacer preguntas hasta que tengamos claro exactamente que es lo que se quiere o tiene que hacer
Figura 17 - Hacer preguntas
121 Divide y vencer (divide y venceraacutes)
Frecuentemente despedazamos problemas grandes en pequentildeas unidades que son maacutes faacuteciles de manejar Por ejemplo limpiar la recaacutemara puede parecer demasiado complicado en comparacioacuten a limpiar soacutelo los pisos o hacer la cama o escombrar el librero La misma idea aplica a problemas computacionales asiacute esta teacutecnica se basa en la idea de separar o dividir un problema grande en pequentildeas piezas maacutes manejables
Figura 18 - Dividir un problema en subproblemas
122 Meacutetodo de bloques de construccioacuten
Esta estrategia tambieacuten es uacutetil para problemas grandes o complejos y consiste en ver si existe solucioacuten para piezas mas pequentildeas del problema (los bloques o ladrillos) y si es posible unir estas soluciones para resolver todo o la mayoriacutea del problema grande (hacer la pared)
Figura 19 - Unir bloques
La idea es analizar el problema completo y ver si se puede dividir en pequentildeas piezas para las cuales ya exista solucioacuten Por ejemplo si se desea construir un auto podemos dividir el disentildeo en sus partes Llantas puerta ventanas motor ect Y encontrar estas partes ya hechas que puedan acoplarse juntas para formar el auto
123 Analogiacutea
Esta estrategia consiste en relacionar un problema o una situacioacuten con otra semejante que ya se haya resuelto anteriormente Es decir identificar alguacuten patroacuten comuacuten
Figura 110 - Analogiacutea
Por ejemplo si tu ya antes has escrito recetas de cocina y en la escuela se te pide hacer un instructivo para armar un papalote podriacuteas escribir este relacionaacutendolo con la forma como se escribe una receta es decir por analogiacutea
123 Buscar cosas que son familias
Esta estrategia es muy parecida a la de resolucioacuten por analogiacutea Sin embargo la idea es ldquonunca reinventar la ruedardquo Si una solucioacuten ya existe se puede usar esta Es decir si ya has resuelto el mismo o un problema muy similar antes soacutelo repite la solucioacuten Uno no aprende a ir a comprar el pan despueacutes a ir a comprar leche despueacutes huevo simplemente aprende uno a ldquoir a comprar a la tiendardquo es decir repite uno la misma solucioacuten En programacioacuten ciertos problemas se repiten uno y otra vez por ejemplo obtener la maacutexima y miacutenima calificacioacuten de un grupo de alumnos es igual a obtener la temperatura maacutexima y miacutenima de un conjunto de datos
Figura 111- obtencioacuten de maacuteximo y miacutenimo
124 Anaacutelisis de medios y fines
La teacutecnica de anaacutelisis de medios y fines permite trabajar con un objetivo o fin a la vez Es decir esta teacutecnica consiste en descomponer el problema en sub-metas o sub-objetivos ir escogiendo una sub-meta para trabajar y solucionar eacutesta despueacutes seleccionar otra sub-meta y asiacute hasta completar la tarea eliminando los obstaacuteculos que le impiden llegar al estado finalUn buen ejemplo donde aplicar estaacute teacutecnica es para el problema de ir de una ciudad a otra con varias ciudades intermedias En este caso las sub-metas son las ciudades intermedias y los medios son la forma de llegar de una ciudad a otra Por ejemplo si quisieacuteramos recorrer la ruta Maya podriacuteamos identificar las ciudades involucradas como sub-metas y decidir como llegar ahiacute por ejemplo para llegar de Puebla a San Cristobal no podriacutea ser por avioacuten tendriacuteamos que buscar otra sub-meta Tuxtla Guitierez y de Tuxtla a San Cristobal por auto y asiacute a cada localidad
Figura 112 - Aplicar estrategia de medios y fines
125 Combinar Soluciones
La uacuteltima teacutecnica para resolver problemas es combinar soluciones existentes Esta teacutecnica podriacutea parecerse a la teacutecnica de Buscar cosas que sean familiares pero en este caso es combinar las soluciones paso a paso no solamente unir soluciones obtenidas separadamente Por ejemplo Para calcular el promedio de una lista de valores debemos hacer dos cosas sumar los valores y contarlos Si tenemos dos soluciones separadas una para sumar los valores y otra para contarlos podemos combinarlas y asiacute paso a paso ir sumando y contando al mismo tiempo de tal manera que al final tendremos la solucioacuten al problema
Una vez discutidas las diversas formas para abordar un problema se puede en la fase de resolucioacuten la manera en que se va a disentildear el algoritmo particular de solucioacuten al mismo para lo que se introduciraacute el concepto de algoritmo
Disentildeo del algoritmo
Un algoritmo puede ser definido como la secuencia ordenada de pasos sin ambiguumledades que conducen a la resolucioacuten de un problema dado y expresado en lenguaje natural Todo algoritmo debe ser
- Preciso Indicando el orden de realizacioacuten de cada uno de los pasos- Definido Si se sigue el algoritmo varias veces proporcionaacutendole (consistente) los mismos datos se deben obtener siempre los mismos resultados- Finito Al seguir el algoritmo este debe terminar en alguacuten momento es decir tener un nuacutemero finito de pasos
Para disentildear un algoritmo se debe comenzar por identificar las tareas maacutes importantes para resolver el problema y disponerlas en el orden en el que han de ser ejecutadas Los pasos en esta primera descripcioacuten pueden requerir una revisioacuten adicional antes de que podamos obtener un algoritmo claro preciso y completoEste meacutetodo de disentildeo de algoritmos en etapas yendo de los conceptos generales a los de detalle se conoce como meacutetodo descendente (top-down)
En un algoritmo se deben de considerar tres partes
- Entrada Informacioacuten dada al algoritmo- Proceso Operaciones o caacutelculos necesarios para encontrar la solucioacuten del problema- Salida Respuestas dadas por el algoritmo o resultados finales de los procesos realizados
Como ejemplo supongamos que desea desarrollar un algoritmo que calcule la superficie de un rectaacutengulo proporcionaacutendole su base y altura Lo primero que debemos hacer es plantearnos las siguientes preguntas
Especificaciones de entradaiquestQue datos son de entradaiquestCuaacutentos datos se introduciraacuteniquestCuaacutentos son datos de entrada vaacutelidos
Especificaciones de salidaiquestCuaacuteles son los datos de salidaiquestCuaacutentos datos de salida se produciraacuteniquestQueacute formato y precisioacuten tendraacuten los resultados
El algoritmo que podemos utilizar es el siguientePaso 1 Entrada desde el teclado de los datos de base y alturaPaso 2 Caacutelculo de la superficie multiplicando la base por la alturaPaso 3 Salida por pantalla de base altura y superficie calculada
El lenguaje algoriacutetmico debe ser independiente de cualquier lenguaje de programacioacuten particular pero faacutecilmente traducible a cada uno de ellos Alcanzar estos objetivos conduciraacute al empleo de meacutetodos normalizados para la representacioacuten de algoritmos tales como los diagrama de flujo o pseudocoacutedigo
Verificacioacuten de algoritmos
Una vez que se ha terminado de escribir un algoritmo es necesario comprobar que realiza las tareas para las que se ha disentildeado y produce el resultado correcto y esperado El modo maacutes normal de comprobar un algoritmo es mediante su ejecucioacuten manual usando datos significativos que abarquen todo el posible rango de valores Este proceso se conoce como prueba del algoritmo A continuacioacuten se formularaacuten un conjunto de algoritmos
Ejemplo 11Un procedimiento que realizamos varias veces al diacutea consiste en lavarnos los dientes Veamos la forma de expresar este procedimiento como un Algoritmo
1 Tomar la crema dental2 Destapar la crema dental3 Tomar el cepillo de dientes4 Aplicar crema dental al cepillo5 Tapar la crema dental6 Abrir la llave del lavamanos7 Remojar el cepillo con la crema dental8 Cerrar la llave del lavamanos9 Frotar los dientes con el cepillo10 Abrir la llave del lavamanos11 Enjuagarse la boca
12 Enjuagar el cepillo13 Cerrar la llave del lavamanos14 Secarse la cara y las manos con una toalla
Ejemplo 12
Veamos que algo tan comuacuten como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo
1 Ubicar una escalera o un banco debajo de la bombilla fundida2 Tomar una bombilla nueva3 Subir por la escalera o al banco4 Girar la bombilla fundida hacia la izquierda hasta soltarla5 Enroscar la bombilla nueva hacia la derecha en el plafoacuten hasta apretarla6 Bajar de la escalera o del banco7 Fin
Actividad 11Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras Luego un voluntario debe pasar al pizarroacuten y escribir un Algoritmo con participacioacuten de toda la claseEjemplo 13
Consideremos algo maacutes complejo como el algoritmo de Euclides para hallar el Maacuteximo Comuacuten Divisor (MCD) de dos nuacutemeros enteros positivos dados Obseacutervese que no se especifica cuaacuteles son los dos nuacutemeros pero si se establece claramente una restriccioacuten deben ser enteros y positivos
ALGORITMO
Paso 1 Inicio Paso 2 Leer los dos nuacutemeros (ldquoardquo y ldquobrdquo) Avanzar al paso 3 Paso 3 Comparar ldquoardquo y ldquobrdquo para determinar cuaacutel es mayor Avanzar al paso 4 Paso 4 Si ldquoardquo y ldquobrdquo son iguales entonces ambos son el resultado esperado y termina el algoritmo En caso contrario avanzar al paso 5 Paso 5 Si ldquoardquo es menor que ldquobrdquo se deben intercambiar sus valores Avanzar al paso 6 si ldquoardquo no es menor que ldquobrdquo avanzar al paso 6 Paso 6 Realizar la operacioacuten ldquoardquo menos ldquobrdquo asignar el valor de ldquobrdquo a ldquoardquo y asignar el valor de la resta a ldquobrdquo Ir al paso 3
Actividad 12Reflexiona sobre el lenguaje que utilizas diariamente para comunicarte con tus padres hermanos profesores y compantildeeros iquestUtilizas un lenguaje preciso iquestUtilizas vocablos corrientes
Actividad 13A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden loacutegico de ejecucioacuten Numerar en orden loacutegico los pasos siguientes (para pescar)
___ El pez se traga el anzuelo___ Enrollar el sedal___ Tirar el sedal al agua
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Polya (1965) sentildeala que un problema puede resolverse correctamente si se realizan las fases o etapas mostradas en la figura 14
Figura 14 - Etapas en la resolucioacuten de problemas
Comprender el problema nos lleva a conocer queacute es los que se va a resolver mientras que concebir un plan para llegar a la solucioacuten involucra el como Una buena noticia es que existen diferentes teacutecnicas o estrategias que nos guiacutean en la resolucioacuten de problemas
12 Teacutecnicas o estrategias para resolucioacuten de problemas
Las estrategias para resolver problemas se refieren a las operaciones mentales que se utilizan para pensar sobre la representacioacuten de las metas y los datos con el fin de transformarlos en metas y obtener una solucioacuten Algunas teacutecnicas para resolucioacuten de problemas se muestran en la figura 15
Figura 15 - Teacutecnicas de resolucioacuten de problemas
Hacer preguntasUna de las teacutecnicas para resolucioacuten de problemas maacutes simples pero muy importante es la de hacer preguntas Debemos asegurarnos que estamos procediendo a resolver el problema real y no el problema que percibimos (Figura 16)
Figura 16- iquestCuaacutel es el problema real
Algunas preguntas uacutetiles que podemos hacer son
1 iquestQueacute es lo que seacute acerca del problema2 iquestCuaacutel es la informacioacuten con la que debo trabajar para encontrar la solucioacuten3 iquestCoacutemo se ve la solucioacuten queacute parece4 iquestQueacute clase de casos especiales existen5 iquestCoacutemo voy a saber que he encontrado la solucioacuten
Siempre que se nos deacute una tarea o un problema que no esteacute bien definido o que se requiera informacioacuten adicional debemos hacer preguntas hasta que tengamos claro exactamente que es lo que se quiere o tiene que hacer
Figura 17 - Hacer preguntas
121 Divide y vencer (divide y venceraacutes)
Frecuentemente despedazamos problemas grandes en pequentildeas unidades que son maacutes faacuteciles de manejar Por ejemplo limpiar la recaacutemara puede parecer demasiado complicado en comparacioacuten a limpiar soacutelo los pisos o hacer la cama o escombrar el librero La misma idea aplica a problemas computacionales asiacute esta teacutecnica se basa en la idea de separar o dividir un problema grande en pequentildeas piezas maacutes manejables
Figura 18 - Dividir un problema en subproblemas
122 Meacutetodo de bloques de construccioacuten
Esta estrategia tambieacuten es uacutetil para problemas grandes o complejos y consiste en ver si existe solucioacuten para piezas mas pequentildeas del problema (los bloques o ladrillos) y si es posible unir estas soluciones para resolver todo o la mayoriacutea del problema grande (hacer la pared)
Figura 19 - Unir bloques
La idea es analizar el problema completo y ver si se puede dividir en pequentildeas piezas para las cuales ya exista solucioacuten Por ejemplo si se desea construir un auto podemos dividir el disentildeo en sus partes Llantas puerta ventanas motor ect Y encontrar estas partes ya hechas que puedan acoplarse juntas para formar el auto
123 Analogiacutea
Esta estrategia consiste en relacionar un problema o una situacioacuten con otra semejante que ya se haya resuelto anteriormente Es decir identificar alguacuten patroacuten comuacuten
Figura 110 - Analogiacutea
Por ejemplo si tu ya antes has escrito recetas de cocina y en la escuela se te pide hacer un instructivo para armar un papalote podriacuteas escribir este relacionaacutendolo con la forma como se escribe una receta es decir por analogiacutea
123 Buscar cosas que son familias
Esta estrategia es muy parecida a la de resolucioacuten por analogiacutea Sin embargo la idea es ldquonunca reinventar la ruedardquo Si una solucioacuten ya existe se puede usar esta Es decir si ya has resuelto el mismo o un problema muy similar antes soacutelo repite la solucioacuten Uno no aprende a ir a comprar el pan despueacutes a ir a comprar leche despueacutes huevo simplemente aprende uno a ldquoir a comprar a la tiendardquo es decir repite uno la misma solucioacuten En programacioacuten ciertos problemas se repiten uno y otra vez por ejemplo obtener la maacutexima y miacutenima calificacioacuten de un grupo de alumnos es igual a obtener la temperatura maacutexima y miacutenima de un conjunto de datos
Figura 111- obtencioacuten de maacuteximo y miacutenimo
124 Anaacutelisis de medios y fines
La teacutecnica de anaacutelisis de medios y fines permite trabajar con un objetivo o fin a la vez Es decir esta teacutecnica consiste en descomponer el problema en sub-metas o sub-objetivos ir escogiendo una sub-meta para trabajar y solucionar eacutesta despueacutes seleccionar otra sub-meta y asiacute hasta completar la tarea eliminando los obstaacuteculos que le impiden llegar al estado finalUn buen ejemplo donde aplicar estaacute teacutecnica es para el problema de ir de una ciudad a otra con varias ciudades intermedias En este caso las sub-metas son las ciudades intermedias y los medios son la forma de llegar de una ciudad a otra Por ejemplo si quisieacuteramos recorrer la ruta Maya podriacuteamos identificar las ciudades involucradas como sub-metas y decidir como llegar ahiacute por ejemplo para llegar de Puebla a San Cristobal no podriacutea ser por avioacuten tendriacuteamos que buscar otra sub-meta Tuxtla Guitierez y de Tuxtla a San Cristobal por auto y asiacute a cada localidad
Figura 112 - Aplicar estrategia de medios y fines
125 Combinar Soluciones
La uacuteltima teacutecnica para resolver problemas es combinar soluciones existentes Esta teacutecnica podriacutea parecerse a la teacutecnica de Buscar cosas que sean familiares pero en este caso es combinar las soluciones paso a paso no solamente unir soluciones obtenidas separadamente Por ejemplo Para calcular el promedio de una lista de valores debemos hacer dos cosas sumar los valores y contarlos Si tenemos dos soluciones separadas una para sumar los valores y otra para contarlos podemos combinarlas y asiacute paso a paso ir sumando y contando al mismo tiempo de tal manera que al final tendremos la solucioacuten al problema
Una vez discutidas las diversas formas para abordar un problema se puede en la fase de resolucioacuten la manera en que se va a disentildear el algoritmo particular de solucioacuten al mismo para lo que se introduciraacute el concepto de algoritmo
Disentildeo del algoritmo
Un algoritmo puede ser definido como la secuencia ordenada de pasos sin ambiguumledades que conducen a la resolucioacuten de un problema dado y expresado en lenguaje natural Todo algoritmo debe ser
- Preciso Indicando el orden de realizacioacuten de cada uno de los pasos- Definido Si se sigue el algoritmo varias veces proporcionaacutendole (consistente) los mismos datos se deben obtener siempre los mismos resultados- Finito Al seguir el algoritmo este debe terminar en alguacuten momento es decir tener un nuacutemero finito de pasos
Para disentildear un algoritmo se debe comenzar por identificar las tareas maacutes importantes para resolver el problema y disponerlas en el orden en el que han de ser ejecutadas Los pasos en esta primera descripcioacuten pueden requerir una revisioacuten adicional antes de que podamos obtener un algoritmo claro preciso y completoEste meacutetodo de disentildeo de algoritmos en etapas yendo de los conceptos generales a los de detalle se conoce como meacutetodo descendente (top-down)
En un algoritmo se deben de considerar tres partes
- Entrada Informacioacuten dada al algoritmo- Proceso Operaciones o caacutelculos necesarios para encontrar la solucioacuten del problema- Salida Respuestas dadas por el algoritmo o resultados finales de los procesos realizados
Como ejemplo supongamos que desea desarrollar un algoritmo que calcule la superficie de un rectaacutengulo proporcionaacutendole su base y altura Lo primero que debemos hacer es plantearnos las siguientes preguntas
Especificaciones de entradaiquestQue datos son de entradaiquestCuaacutentos datos se introduciraacuteniquestCuaacutentos son datos de entrada vaacutelidos
Especificaciones de salidaiquestCuaacuteles son los datos de salidaiquestCuaacutentos datos de salida se produciraacuteniquestQueacute formato y precisioacuten tendraacuten los resultados
El algoritmo que podemos utilizar es el siguientePaso 1 Entrada desde el teclado de los datos de base y alturaPaso 2 Caacutelculo de la superficie multiplicando la base por la alturaPaso 3 Salida por pantalla de base altura y superficie calculada
El lenguaje algoriacutetmico debe ser independiente de cualquier lenguaje de programacioacuten particular pero faacutecilmente traducible a cada uno de ellos Alcanzar estos objetivos conduciraacute al empleo de meacutetodos normalizados para la representacioacuten de algoritmos tales como los diagrama de flujo o pseudocoacutedigo
Verificacioacuten de algoritmos
Una vez que se ha terminado de escribir un algoritmo es necesario comprobar que realiza las tareas para las que se ha disentildeado y produce el resultado correcto y esperado El modo maacutes normal de comprobar un algoritmo es mediante su ejecucioacuten manual usando datos significativos que abarquen todo el posible rango de valores Este proceso se conoce como prueba del algoritmo A continuacioacuten se formularaacuten un conjunto de algoritmos
Ejemplo 11Un procedimiento que realizamos varias veces al diacutea consiste en lavarnos los dientes Veamos la forma de expresar este procedimiento como un Algoritmo
1 Tomar la crema dental2 Destapar la crema dental3 Tomar el cepillo de dientes4 Aplicar crema dental al cepillo5 Tapar la crema dental6 Abrir la llave del lavamanos7 Remojar el cepillo con la crema dental8 Cerrar la llave del lavamanos9 Frotar los dientes con el cepillo10 Abrir la llave del lavamanos11 Enjuagarse la boca
12 Enjuagar el cepillo13 Cerrar la llave del lavamanos14 Secarse la cara y las manos con una toalla
Ejemplo 12
Veamos que algo tan comuacuten como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo
1 Ubicar una escalera o un banco debajo de la bombilla fundida2 Tomar una bombilla nueva3 Subir por la escalera o al banco4 Girar la bombilla fundida hacia la izquierda hasta soltarla5 Enroscar la bombilla nueva hacia la derecha en el plafoacuten hasta apretarla6 Bajar de la escalera o del banco7 Fin
Actividad 11Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras Luego un voluntario debe pasar al pizarroacuten y escribir un Algoritmo con participacioacuten de toda la claseEjemplo 13
Consideremos algo maacutes complejo como el algoritmo de Euclides para hallar el Maacuteximo Comuacuten Divisor (MCD) de dos nuacutemeros enteros positivos dados Obseacutervese que no se especifica cuaacuteles son los dos nuacutemeros pero si se establece claramente una restriccioacuten deben ser enteros y positivos
ALGORITMO
Paso 1 Inicio Paso 2 Leer los dos nuacutemeros (ldquoardquo y ldquobrdquo) Avanzar al paso 3 Paso 3 Comparar ldquoardquo y ldquobrdquo para determinar cuaacutel es mayor Avanzar al paso 4 Paso 4 Si ldquoardquo y ldquobrdquo son iguales entonces ambos son el resultado esperado y termina el algoritmo En caso contrario avanzar al paso 5 Paso 5 Si ldquoardquo es menor que ldquobrdquo se deben intercambiar sus valores Avanzar al paso 6 si ldquoardquo no es menor que ldquobrdquo avanzar al paso 6 Paso 6 Realizar la operacioacuten ldquoardquo menos ldquobrdquo asignar el valor de ldquobrdquo a ldquoardquo y asignar el valor de la resta a ldquobrdquo Ir al paso 3
Actividad 12Reflexiona sobre el lenguaje que utilizas diariamente para comunicarte con tus padres hermanos profesores y compantildeeros iquestUtilizas un lenguaje preciso iquestUtilizas vocablos corrientes
Actividad 13A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden loacutegico de ejecucioacuten Numerar en orden loacutegico los pasos siguientes (para pescar)
___ El pez se traga el anzuelo___ Enrollar el sedal___ Tirar el sedal al agua
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Figura 16- iquestCuaacutel es el problema real
Algunas preguntas uacutetiles que podemos hacer son
1 iquestQueacute es lo que seacute acerca del problema2 iquestCuaacutel es la informacioacuten con la que debo trabajar para encontrar la solucioacuten3 iquestCoacutemo se ve la solucioacuten queacute parece4 iquestQueacute clase de casos especiales existen5 iquestCoacutemo voy a saber que he encontrado la solucioacuten
Siempre que se nos deacute una tarea o un problema que no esteacute bien definido o que se requiera informacioacuten adicional debemos hacer preguntas hasta que tengamos claro exactamente que es lo que se quiere o tiene que hacer
Figura 17 - Hacer preguntas
121 Divide y vencer (divide y venceraacutes)
Frecuentemente despedazamos problemas grandes en pequentildeas unidades que son maacutes faacuteciles de manejar Por ejemplo limpiar la recaacutemara puede parecer demasiado complicado en comparacioacuten a limpiar soacutelo los pisos o hacer la cama o escombrar el librero La misma idea aplica a problemas computacionales asiacute esta teacutecnica se basa en la idea de separar o dividir un problema grande en pequentildeas piezas maacutes manejables
Figura 18 - Dividir un problema en subproblemas
122 Meacutetodo de bloques de construccioacuten
Esta estrategia tambieacuten es uacutetil para problemas grandes o complejos y consiste en ver si existe solucioacuten para piezas mas pequentildeas del problema (los bloques o ladrillos) y si es posible unir estas soluciones para resolver todo o la mayoriacutea del problema grande (hacer la pared)
Figura 19 - Unir bloques
La idea es analizar el problema completo y ver si se puede dividir en pequentildeas piezas para las cuales ya exista solucioacuten Por ejemplo si se desea construir un auto podemos dividir el disentildeo en sus partes Llantas puerta ventanas motor ect Y encontrar estas partes ya hechas que puedan acoplarse juntas para formar el auto
123 Analogiacutea
Esta estrategia consiste en relacionar un problema o una situacioacuten con otra semejante que ya se haya resuelto anteriormente Es decir identificar alguacuten patroacuten comuacuten
Figura 110 - Analogiacutea
Por ejemplo si tu ya antes has escrito recetas de cocina y en la escuela se te pide hacer un instructivo para armar un papalote podriacuteas escribir este relacionaacutendolo con la forma como se escribe una receta es decir por analogiacutea
123 Buscar cosas que son familias
Esta estrategia es muy parecida a la de resolucioacuten por analogiacutea Sin embargo la idea es ldquonunca reinventar la ruedardquo Si una solucioacuten ya existe se puede usar esta Es decir si ya has resuelto el mismo o un problema muy similar antes soacutelo repite la solucioacuten Uno no aprende a ir a comprar el pan despueacutes a ir a comprar leche despueacutes huevo simplemente aprende uno a ldquoir a comprar a la tiendardquo es decir repite uno la misma solucioacuten En programacioacuten ciertos problemas se repiten uno y otra vez por ejemplo obtener la maacutexima y miacutenima calificacioacuten de un grupo de alumnos es igual a obtener la temperatura maacutexima y miacutenima de un conjunto de datos
Figura 111- obtencioacuten de maacuteximo y miacutenimo
124 Anaacutelisis de medios y fines
La teacutecnica de anaacutelisis de medios y fines permite trabajar con un objetivo o fin a la vez Es decir esta teacutecnica consiste en descomponer el problema en sub-metas o sub-objetivos ir escogiendo una sub-meta para trabajar y solucionar eacutesta despueacutes seleccionar otra sub-meta y asiacute hasta completar la tarea eliminando los obstaacuteculos que le impiden llegar al estado finalUn buen ejemplo donde aplicar estaacute teacutecnica es para el problema de ir de una ciudad a otra con varias ciudades intermedias En este caso las sub-metas son las ciudades intermedias y los medios son la forma de llegar de una ciudad a otra Por ejemplo si quisieacuteramos recorrer la ruta Maya podriacuteamos identificar las ciudades involucradas como sub-metas y decidir como llegar ahiacute por ejemplo para llegar de Puebla a San Cristobal no podriacutea ser por avioacuten tendriacuteamos que buscar otra sub-meta Tuxtla Guitierez y de Tuxtla a San Cristobal por auto y asiacute a cada localidad
Figura 112 - Aplicar estrategia de medios y fines
125 Combinar Soluciones
La uacuteltima teacutecnica para resolver problemas es combinar soluciones existentes Esta teacutecnica podriacutea parecerse a la teacutecnica de Buscar cosas que sean familiares pero en este caso es combinar las soluciones paso a paso no solamente unir soluciones obtenidas separadamente Por ejemplo Para calcular el promedio de una lista de valores debemos hacer dos cosas sumar los valores y contarlos Si tenemos dos soluciones separadas una para sumar los valores y otra para contarlos podemos combinarlas y asiacute paso a paso ir sumando y contando al mismo tiempo de tal manera que al final tendremos la solucioacuten al problema
Una vez discutidas las diversas formas para abordar un problema se puede en la fase de resolucioacuten la manera en que se va a disentildear el algoritmo particular de solucioacuten al mismo para lo que se introduciraacute el concepto de algoritmo
Disentildeo del algoritmo
Un algoritmo puede ser definido como la secuencia ordenada de pasos sin ambiguumledades que conducen a la resolucioacuten de un problema dado y expresado en lenguaje natural Todo algoritmo debe ser
- Preciso Indicando el orden de realizacioacuten de cada uno de los pasos- Definido Si se sigue el algoritmo varias veces proporcionaacutendole (consistente) los mismos datos se deben obtener siempre los mismos resultados- Finito Al seguir el algoritmo este debe terminar en alguacuten momento es decir tener un nuacutemero finito de pasos
Para disentildear un algoritmo se debe comenzar por identificar las tareas maacutes importantes para resolver el problema y disponerlas en el orden en el que han de ser ejecutadas Los pasos en esta primera descripcioacuten pueden requerir una revisioacuten adicional antes de que podamos obtener un algoritmo claro preciso y completoEste meacutetodo de disentildeo de algoritmos en etapas yendo de los conceptos generales a los de detalle se conoce como meacutetodo descendente (top-down)
En un algoritmo se deben de considerar tres partes
- Entrada Informacioacuten dada al algoritmo- Proceso Operaciones o caacutelculos necesarios para encontrar la solucioacuten del problema- Salida Respuestas dadas por el algoritmo o resultados finales de los procesos realizados
Como ejemplo supongamos que desea desarrollar un algoritmo que calcule la superficie de un rectaacutengulo proporcionaacutendole su base y altura Lo primero que debemos hacer es plantearnos las siguientes preguntas
Especificaciones de entradaiquestQue datos son de entradaiquestCuaacutentos datos se introduciraacuteniquestCuaacutentos son datos de entrada vaacutelidos
Especificaciones de salidaiquestCuaacuteles son los datos de salidaiquestCuaacutentos datos de salida se produciraacuteniquestQueacute formato y precisioacuten tendraacuten los resultados
El algoritmo que podemos utilizar es el siguientePaso 1 Entrada desde el teclado de los datos de base y alturaPaso 2 Caacutelculo de la superficie multiplicando la base por la alturaPaso 3 Salida por pantalla de base altura y superficie calculada
El lenguaje algoriacutetmico debe ser independiente de cualquier lenguaje de programacioacuten particular pero faacutecilmente traducible a cada uno de ellos Alcanzar estos objetivos conduciraacute al empleo de meacutetodos normalizados para la representacioacuten de algoritmos tales como los diagrama de flujo o pseudocoacutedigo
Verificacioacuten de algoritmos
Una vez que se ha terminado de escribir un algoritmo es necesario comprobar que realiza las tareas para las que se ha disentildeado y produce el resultado correcto y esperado El modo maacutes normal de comprobar un algoritmo es mediante su ejecucioacuten manual usando datos significativos que abarquen todo el posible rango de valores Este proceso se conoce como prueba del algoritmo A continuacioacuten se formularaacuten un conjunto de algoritmos
Ejemplo 11Un procedimiento que realizamos varias veces al diacutea consiste en lavarnos los dientes Veamos la forma de expresar este procedimiento como un Algoritmo
1 Tomar la crema dental2 Destapar la crema dental3 Tomar el cepillo de dientes4 Aplicar crema dental al cepillo5 Tapar la crema dental6 Abrir la llave del lavamanos7 Remojar el cepillo con la crema dental8 Cerrar la llave del lavamanos9 Frotar los dientes con el cepillo10 Abrir la llave del lavamanos11 Enjuagarse la boca
12 Enjuagar el cepillo13 Cerrar la llave del lavamanos14 Secarse la cara y las manos con una toalla
Ejemplo 12
Veamos que algo tan comuacuten como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo
1 Ubicar una escalera o un banco debajo de la bombilla fundida2 Tomar una bombilla nueva3 Subir por la escalera o al banco4 Girar la bombilla fundida hacia la izquierda hasta soltarla5 Enroscar la bombilla nueva hacia la derecha en el plafoacuten hasta apretarla6 Bajar de la escalera o del banco7 Fin
Actividad 11Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras Luego un voluntario debe pasar al pizarroacuten y escribir un Algoritmo con participacioacuten de toda la claseEjemplo 13
Consideremos algo maacutes complejo como el algoritmo de Euclides para hallar el Maacuteximo Comuacuten Divisor (MCD) de dos nuacutemeros enteros positivos dados Obseacutervese que no se especifica cuaacuteles son los dos nuacutemeros pero si se establece claramente una restriccioacuten deben ser enteros y positivos
ALGORITMO
Paso 1 Inicio Paso 2 Leer los dos nuacutemeros (ldquoardquo y ldquobrdquo) Avanzar al paso 3 Paso 3 Comparar ldquoardquo y ldquobrdquo para determinar cuaacutel es mayor Avanzar al paso 4 Paso 4 Si ldquoardquo y ldquobrdquo son iguales entonces ambos son el resultado esperado y termina el algoritmo En caso contrario avanzar al paso 5 Paso 5 Si ldquoardquo es menor que ldquobrdquo se deben intercambiar sus valores Avanzar al paso 6 si ldquoardquo no es menor que ldquobrdquo avanzar al paso 6 Paso 6 Realizar la operacioacuten ldquoardquo menos ldquobrdquo asignar el valor de ldquobrdquo a ldquoardquo y asignar el valor de la resta a ldquobrdquo Ir al paso 3
Actividad 12Reflexiona sobre el lenguaje que utilizas diariamente para comunicarte con tus padres hermanos profesores y compantildeeros iquestUtilizas un lenguaje preciso iquestUtilizas vocablos corrientes
Actividad 13A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden loacutegico de ejecucioacuten Numerar en orden loacutegico los pasos siguientes (para pescar)
___ El pez se traga el anzuelo___ Enrollar el sedal___ Tirar el sedal al agua
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Figura 18 - Dividir un problema en subproblemas
122 Meacutetodo de bloques de construccioacuten
Esta estrategia tambieacuten es uacutetil para problemas grandes o complejos y consiste en ver si existe solucioacuten para piezas mas pequentildeas del problema (los bloques o ladrillos) y si es posible unir estas soluciones para resolver todo o la mayoriacutea del problema grande (hacer la pared)
Figura 19 - Unir bloques
La idea es analizar el problema completo y ver si se puede dividir en pequentildeas piezas para las cuales ya exista solucioacuten Por ejemplo si se desea construir un auto podemos dividir el disentildeo en sus partes Llantas puerta ventanas motor ect Y encontrar estas partes ya hechas que puedan acoplarse juntas para formar el auto
123 Analogiacutea
Esta estrategia consiste en relacionar un problema o una situacioacuten con otra semejante que ya se haya resuelto anteriormente Es decir identificar alguacuten patroacuten comuacuten
Figura 110 - Analogiacutea
Por ejemplo si tu ya antes has escrito recetas de cocina y en la escuela se te pide hacer un instructivo para armar un papalote podriacuteas escribir este relacionaacutendolo con la forma como se escribe una receta es decir por analogiacutea
123 Buscar cosas que son familias
Esta estrategia es muy parecida a la de resolucioacuten por analogiacutea Sin embargo la idea es ldquonunca reinventar la ruedardquo Si una solucioacuten ya existe se puede usar esta Es decir si ya has resuelto el mismo o un problema muy similar antes soacutelo repite la solucioacuten Uno no aprende a ir a comprar el pan despueacutes a ir a comprar leche despueacutes huevo simplemente aprende uno a ldquoir a comprar a la tiendardquo es decir repite uno la misma solucioacuten En programacioacuten ciertos problemas se repiten uno y otra vez por ejemplo obtener la maacutexima y miacutenima calificacioacuten de un grupo de alumnos es igual a obtener la temperatura maacutexima y miacutenima de un conjunto de datos
Figura 111- obtencioacuten de maacuteximo y miacutenimo
124 Anaacutelisis de medios y fines
La teacutecnica de anaacutelisis de medios y fines permite trabajar con un objetivo o fin a la vez Es decir esta teacutecnica consiste en descomponer el problema en sub-metas o sub-objetivos ir escogiendo una sub-meta para trabajar y solucionar eacutesta despueacutes seleccionar otra sub-meta y asiacute hasta completar la tarea eliminando los obstaacuteculos que le impiden llegar al estado finalUn buen ejemplo donde aplicar estaacute teacutecnica es para el problema de ir de una ciudad a otra con varias ciudades intermedias En este caso las sub-metas son las ciudades intermedias y los medios son la forma de llegar de una ciudad a otra Por ejemplo si quisieacuteramos recorrer la ruta Maya podriacuteamos identificar las ciudades involucradas como sub-metas y decidir como llegar ahiacute por ejemplo para llegar de Puebla a San Cristobal no podriacutea ser por avioacuten tendriacuteamos que buscar otra sub-meta Tuxtla Guitierez y de Tuxtla a San Cristobal por auto y asiacute a cada localidad
Figura 112 - Aplicar estrategia de medios y fines
125 Combinar Soluciones
La uacuteltima teacutecnica para resolver problemas es combinar soluciones existentes Esta teacutecnica podriacutea parecerse a la teacutecnica de Buscar cosas que sean familiares pero en este caso es combinar las soluciones paso a paso no solamente unir soluciones obtenidas separadamente Por ejemplo Para calcular el promedio de una lista de valores debemos hacer dos cosas sumar los valores y contarlos Si tenemos dos soluciones separadas una para sumar los valores y otra para contarlos podemos combinarlas y asiacute paso a paso ir sumando y contando al mismo tiempo de tal manera que al final tendremos la solucioacuten al problema
Una vez discutidas las diversas formas para abordar un problema se puede en la fase de resolucioacuten la manera en que se va a disentildear el algoritmo particular de solucioacuten al mismo para lo que se introduciraacute el concepto de algoritmo
Disentildeo del algoritmo
Un algoritmo puede ser definido como la secuencia ordenada de pasos sin ambiguumledades que conducen a la resolucioacuten de un problema dado y expresado en lenguaje natural Todo algoritmo debe ser
- Preciso Indicando el orden de realizacioacuten de cada uno de los pasos- Definido Si se sigue el algoritmo varias veces proporcionaacutendole (consistente) los mismos datos se deben obtener siempre los mismos resultados- Finito Al seguir el algoritmo este debe terminar en alguacuten momento es decir tener un nuacutemero finito de pasos
Para disentildear un algoritmo se debe comenzar por identificar las tareas maacutes importantes para resolver el problema y disponerlas en el orden en el que han de ser ejecutadas Los pasos en esta primera descripcioacuten pueden requerir una revisioacuten adicional antes de que podamos obtener un algoritmo claro preciso y completoEste meacutetodo de disentildeo de algoritmos en etapas yendo de los conceptos generales a los de detalle se conoce como meacutetodo descendente (top-down)
En un algoritmo se deben de considerar tres partes
- Entrada Informacioacuten dada al algoritmo- Proceso Operaciones o caacutelculos necesarios para encontrar la solucioacuten del problema- Salida Respuestas dadas por el algoritmo o resultados finales de los procesos realizados
Como ejemplo supongamos que desea desarrollar un algoritmo que calcule la superficie de un rectaacutengulo proporcionaacutendole su base y altura Lo primero que debemos hacer es plantearnos las siguientes preguntas
Especificaciones de entradaiquestQue datos son de entradaiquestCuaacutentos datos se introduciraacuteniquestCuaacutentos son datos de entrada vaacutelidos
Especificaciones de salidaiquestCuaacuteles son los datos de salidaiquestCuaacutentos datos de salida se produciraacuteniquestQueacute formato y precisioacuten tendraacuten los resultados
El algoritmo que podemos utilizar es el siguientePaso 1 Entrada desde el teclado de los datos de base y alturaPaso 2 Caacutelculo de la superficie multiplicando la base por la alturaPaso 3 Salida por pantalla de base altura y superficie calculada
El lenguaje algoriacutetmico debe ser independiente de cualquier lenguaje de programacioacuten particular pero faacutecilmente traducible a cada uno de ellos Alcanzar estos objetivos conduciraacute al empleo de meacutetodos normalizados para la representacioacuten de algoritmos tales como los diagrama de flujo o pseudocoacutedigo
Verificacioacuten de algoritmos
Una vez que se ha terminado de escribir un algoritmo es necesario comprobar que realiza las tareas para las que se ha disentildeado y produce el resultado correcto y esperado El modo maacutes normal de comprobar un algoritmo es mediante su ejecucioacuten manual usando datos significativos que abarquen todo el posible rango de valores Este proceso se conoce como prueba del algoritmo A continuacioacuten se formularaacuten un conjunto de algoritmos
Ejemplo 11Un procedimiento que realizamos varias veces al diacutea consiste en lavarnos los dientes Veamos la forma de expresar este procedimiento como un Algoritmo
1 Tomar la crema dental2 Destapar la crema dental3 Tomar el cepillo de dientes4 Aplicar crema dental al cepillo5 Tapar la crema dental6 Abrir la llave del lavamanos7 Remojar el cepillo con la crema dental8 Cerrar la llave del lavamanos9 Frotar los dientes con el cepillo10 Abrir la llave del lavamanos11 Enjuagarse la boca
12 Enjuagar el cepillo13 Cerrar la llave del lavamanos14 Secarse la cara y las manos con una toalla
Ejemplo 12
Veamos que algo tan comuacuten como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo
1 Ubicar una escalera o un banco debajo de la bombilla fundida2 Tomar una bombilla nueva3 Subir por la escalera o al banco4 Girar la bombilla fundida hacia la izquierda hasta soltarla5 Enroscar la bombilla nueva hacia la derecha en el plafoacuten hasta apretarla6 Bajar de la escalera o del banco7 Fin
Actividad 11Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras Luego un voluntario debe pasar al pizarroacuten y escribir un Algoritmo con participacioacuten de toda la claseEjemplo 13
Consideremos algo maacutes complejo como el algoritmo de Euclides para hallar el Maacuteximo Comuacuten Divisor (MCD) de dos nuacutemeros enteros positivos dados Obseacutervese que no se especifica cuaacuteles son los dos nuacutemeros pero si se establece claramente una restriccioacuten deben ser enteros y positivos
ALGORITMO
Paso 1 Inicio Paso 2 Leer los dos nuacutemeros (ldquoardquo y ldquobrdquo) Avanzar al paso 3 Paso 3 Comparar ldquoardquo y ldquobrdquo para determinar cuaacutel es mayor Avanzar al paso 4 Paso 4 Si ldquoardquo y ldquobrdquo son iguales entonces ambos son el resultado esperado y termina el algoritmo En caso contrario avanzar al paso 5 Paso 5 Si ldquoardquo es menor que ldquobrdquo se deben intercambiar sus valores Avanzar al paso 6 si ldquoardquo no es menor que ldquobrdquo avanzar al paso 6 Paso 6 Realizar la operacioacuten ldquoardquo menos ldquobrdquo asignar el valor de ldquobrdquo a ldquoardquo y asignar el valor de la resta a ldquobrdquo Ir al paso 3
Actividad 12Reflexiona sobre el lenguaje que utilizas diariamente para comunicarte con tus padres hermanos profesores y compantildeeros iquestUtilizas un lenguaje preciso iquestUtilizas vocablos corrientes
Actividad 13A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden loacutegico de ejecucioacuten Numerar en orden loacutegico los pasos siguientes (para pescar)
___ El pez se traga el anzuelo___ Enrollar el sedal___ Tirar el sedal al agua
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Por ejemplo si tu ya antes has escrito recetas de cocina y en la escuela se te pide hacer un instructivo para armar un papalote podriacuteas escribir este relacionaacutendolo con la forma como se escribe una receta es decir por analogiacutea
123 Buscar cosas que son familias
Esta estrategia es muy parecida a la de resolucioacuten por analogiacutea Sin embargo la idea es ldquonunca reinventar la ruedardquo Si una solucioacuten ya existe se puede usar esta Es decir si ya has resuelto el mismo o un problema muy similar antes soacutelo repite la solucioacuten Uno no aprende a ir a comprar el pan despueacutes a ir a comprar leche despueacutes huevo simplemente aprende uno a ldquoir a comprar a la tiendardquo es decir repite uno la misma solucioacuten En programacioacuten ciertos problemas se repiten uno y otra vez por ejemplo obtener la maacutexima y miacutenima calificacioacuten de un grupo de alumnos es igual a obtener la temperatura maacutexima y miacutenima de un conjunto de datos
Figura 111- obtencioacuten de maacuteximo y miacutenimo
124 Anaacutelisis de medios y fines
La teacutecnica de anaacutelisis de medios y fines permite trabajar con un objetivo o fin a la vez Es decir esta teacutecnica consiste en descomponer el problema en sub-metas o sub-objetivos ir escogiendo una sub-meta para trabajar y solucionar eacutesta despueacutes seleccionar otra sub-meta y asiacute hasta completar la tarea eliminando los obstaacuteculos que le impiden llegar al estado finalUn buen ejemplo donde aplicar estaacute teacutecnica es para el problema de ir de una ciudad a otra con varias ciudades intermedias En este caso las sub-metas son las ciudades intermedias y los medios son la forma de llegar de una ciudad a otra Por ejemplo si quisieacuteramos recorrer la ruta Maya podriacuteamos identificar las ciudades involucradas como sub-metas y decidir como llegar ahiacute por ejemplo para llegar de Puebla a San Cristobal no podriacutea ser por avioacuten tendriacuteamos que buscar otra sub-meta Tuxtla Guitierez y de Tuxtla a San Cristobal por auto y asiacute a cada localidad
Figura 112 - Aplicar estrategia de medios y fines
125 Combinar Soluciones
La uacuteltima teacutecnica para resolver problemas es combinar soluciones existentes Esta teacutecnica podriacutea parecerse a la teacutecnica de Buscar cosas que sean familiares pero en este caso es combinar las soluciones paso a paso no solamente unir soluciones obtenidas separadamente Por ejemplo Para calcular el promedio de una lista de valores debemos hacer dos cosas sumar los valores y contarlos Si tenemos dos soluciones separadas una para sumar los valores y otra para contarlos podemos combinarlas y asiacute paso a paso ir sumando y contando al mismo tiempo de tal manera que al final tendremos la solucioacuten al problema
Una vez discutidas las diversas formas para abordar un problema se puede en la fase de resolucioacuten la manera en que se va a disentildear el algoritmo particular de solucioacuten al mismo para lo que se introduciraacute el concepto de algoritmo
Disentildeo del algoritmo
Un algoritmo puede ser definido como la secuencia ordenada de pasos sin ambiguumledades que conducen a la resolucioacuten de un problema dado y expresado en lenguaje natural Todo algoritmo debe ser
- Preciso Indicando el orden de realizacioacuten de cada uno de los pasos- Definido Si se sigue el algoritmo varias veces proporcionaacutendole (consistente) los mismos datos se deben obtener siempre los mismos resultados- Finito Al seguir el algoritmo este debe terminar en alguacuten momento es decir tener un nuacutemero finito de pasos
Para disentildear un algoritmo se debe comenzar por identificar las tareas maacutes importantes para resolver el problema y disponerlas en el orden en el que han de ser ejecutadas Los pasos en esta primera descripcioacuten pueden requerir una revisioacuten adicional antes de que podamos obtener un algoritmo claro preciso y completoEste meacutetodo de disentildeo de algoritmos en etapas yendo de los conceptos generales a los de detalle se conoce como meacutetodo descendente (top-down)
En un algoritmo se deben de considerar tres partes
- Entrada Informacioacuten dada al algoritmo- Proceso Operaciones o caacutelculos necesarios para encontrar la solucioacuten del problema- Salida Respuestas dadas por el algoritmo o resultados finales de los procesos realizados
Como ejemplo supongamos que desea desarrollar un algoritmo que calcule la superficie de un rectaacutengulo proporcionaacutendole su base y altura Lo primero que debemos hacer es plantearnos las siguientes preguntas
Especificaciones de entradaiquestQue datos son de entradaiquestCuaacutentos datos se introduciraacuteniquestCuaacutentos son datos de entrada vaacutelidos
Especificaciones de salidaiquestCuaacuteles son los datos de salidaiquestCuaacutentos datos de salida se produciraacuteniquestQueacute formato y precisioacuten tendraacuten los resultados
El algoritmo que podemos utilizar es el siguientePaso 1 Entrada desde el teclado de los datos de base y alturaPaso 2 Caacutelculo de la superficie multiplicando la base por la alturaPaso 3 Salida por pantalla de base altura y superficie calculada
El lenguaje algoriacutetmico debe ser independiente de cualquier lenguaje de programacioacuten particular pero faacutecilmente traducible a cada uno de ellos Alcanzar estos objetivos conduciraacute al empleo de meacutetodos normalizados para la representacioacuten de algoritmos tales como los diagrama de flujo o pseudocoacutedigo
Verificacioacuten de algoritmos
Una vez que se ha terminado de escribir un algoritmo es necesario comprobar que realiza las tareas para las que se ha disentildeado y produce el resultado correcto y esperado El modo maacutes normal de comprobar un algoritmo es mediante su ejecucioacuten manual usando datos significativos que abarquen todo el posible rango de valores Este proceso se conoce como prueba del algoritmo A continuacioacuten se formularaacuten un conjunto de algoritmos
Ejemplo 11Un procedimiento que realizamos varias veces al diacutea consiste en lavarnos los dientes Veamos la forma de expresar este procedimiento como un Algoritmo
1 Tomar la crema dental2 Destapar la crema dental3 Tomar el cepillo de dientes4 Aplicar crema dental al cepillo5 Tapar la crema dental6 Abrir la llave del lavamanos7 Remojar el cepillo con la crema dental8 Cerrar la llave del lavamanos9 Frotar los dientes con el cepillo10 Abrir la llave del lavamanos11 Enjuagarse la boca
12 Enjuagar el cepillo13 Cerrar la llave del lavamanos14 Secarse la cara y las manos con una toalla
Ejemplo 12
Veamos que algo tan comuacuten como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo
1 Ubicar una escalera o un banco debajo de la bombilla fundida2 Tomar una bombilla nueva3 Subir por la escalera o al banco4 Girar la bombilla fundida hacia la izquierda hasta soltarla5 Enroscar la bombilla nueva hacia la derecha en el plafoacuten hasta apretarla6 Bajar de la escalera o del banco7 Fin
Actividad 11Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras Luego un voluntario debe pasar al pizarroacuten y escribir un Algoritmo con participacioacuten de toda la claseEjemplo 13
Consideremos algo maacutes complejo como el algoritmo de Euclides para hallar el Maacuteximo Comuacuten Divisor (MCD) de dos nuacutemeros enteros positivos dados Obseacutervese que no se especifica cuaacuteles son los dos nuacutemeros pero si se establece claramente una restriccioacuten deben ser enteros y positivos
ALGORITMO
Paso 1 Inicio Paso 2 Leer los dos nuacutemeros (ldquoardquo y ldquobrdquo) Avanzar al paso 3 Paso 3 Comparar ldquoardquo y ldquobrdquo para determinar cuaacutel es mayor Avanzar al paso 4 Paso 4 Si ldquoardquo y ldquobrdquo son iguales entonces ambos son el resultado esperado y termina el algoritmo En caso contrario avanzar al paso 5 Paso 5 Si ldquoardquo es menor que ldquobrdquo se deben intercambiar sus valores Avanzar al paso 6 si ldquoardquo no es menor que ldquobrdquo avanzar al paso 6 Paso 6 Realizar la operacioacuten ldquoardquo menos ldquobrdquo asignar el valor de ldquobrdquo a ldquoardquo y asignar el valor de la resta a ldquobrdquo Ir al paso 3
Actividad 12Reflexiona sobre el lenguaje que utilizas diariamente para comunicarte con tus padres hermanos profesores y compantildeeros iquestUtilizas un lenguaje preciso iquestUtilizas vocablos corrientes
Actividad 13A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden loacutegico de ejecucioacuten Numerar en orden loacutegico los pasos siguientes (para pescar)
___ El pez se traga el anzuelo___ Enrollar el sedal___ Tirar el sedal al agua
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Figura 112 - Aplicar estrategia de medios y fines
125 Combinar Soluciones
La uacuteltima teacutecnica para resolver problemas es combinar soluciones existentes Esta teacutecnica podriacutea parecerse a la teacutecnica de Buscar cosas que sean familiares pero en este caso es combinar las soluciones paso a paso no solamente unir soluciones obtenidas separadamente Por ejemplo Para calcular el promedio de una lista de valores debemos hacer dos cosas sumar los valores y contarlos Si tenemos dos soluciones separadas una para sumar los valores y otra para contarlos podemos combinarlas y asiacute paso a paso ir sumando y contando al mismo tiempo de tal manera que al final tendremos la solucioacuten al problema
Una vez discutidas las diversas formas para abordar un problema se puede en la fase de resolucioacuten la manera en que se va a disentildear el algoritmo particular de solucioacuten al mismo para lo que se introduciraacute el concepto de algoritmo
Disentildeo del algoritmo
Un algoritmo puede ser definido como la secuencia ordenada de pasos sin ambiguumledades que conducen a la resolucioacuten de un problema dado y expresado en lenguaje natural Todo algoritmo debe ser
- Preciso Indicando el orden de realizacioacuten de cada uno de los pasos- Definido Si se sigue el algoritmo varias veces proporcionaacutendole (consistente) los mismos datos se deben obtener siempre los mismos resultados- Finito Al seguir el algoritmo este debe terminar en alguacuten momento es decir tener un nuacutemero finito de pasos
Para disentildear un algoritmo se debe comenzar por identificar las tareas maacutes importantes para resolver el problema y disponerlas en el orden en el que han de ser ejecutadas Los pasos en esta primera descripcioacuten pueden requerir una revisioacuten adicional antes de que podamos obtener un algoritmo claro preciso y completoEste meacutetodo de disentildeo de algoritmos en etapas yendo de los conceptos generales a los de detalle se conoce como meacutetodo descendente (top-down)
En un algoritmo se deben de considerar tres partes
- Entrada Informacioacuten dada al algoritmo- Proceso Operaciones o caacutelculos necesarios para encontrar la solucioacuten del problema- Salida Respuestas dadas por el algoritmo o resultados finales de los procesos realizados
Como ejemplo supongamos que desea desarrollar un algoritmo que calcule la superficie de un rectaacutengulo proporcionaacutendole su base y altura Lo primero que debemos hacer es plantearnos las siguientes preguntas
Especificaciones de entradaiquestQue datos son de entradaiquestCuaacutentos datos se introduciraacuteniquestCuaacutentos son datos de entrada vaacutelidos
Especificaciones de salidaiquestCuaacuteles son los datos de salidaiquestCuaacutentos datos de salida se produciraacuteniquestQueacute formato y precisioacuten tendraacuten los resultados
El algoritmo que podemos utilizar es el siguientePaso 1 Entrada desde el teclado de los datos de base y alturaPaso 2 Caacutelculo de la superficie multiplicando la base por la alturaPaso 3 Salida por pantalla de base altura y superficie calculada
El lenguaje algoriacutetmico debe ser independiente de cualquier lenguaje de programacioacuten particular pero faacutecilmente traducible a cada uno de ellos Alcanzar estos objetivos conduciraacute al empleo de meacutetodos normalizados para la representacioacuten de algoritmos tales como los diagrama de flujo o pseudocoacutedigo
Verificacioacuten de algoritmos
Una vez que se ha terminado de escribir un algoritmo es necesario comprobar que realiza las tareas para las que se ha disentildeado y produce el resultado correcto y esperado El modo maacutes normal de comprobar un algoritmo es mediante su ejecucioacuten manual usando datos significativos que abarquen todo el posible rango de valores Este proceso se conoce como prueba del algoritmo A continuacioacuten se formularaacuten un conjunto de algoritmos
Ejemplo 11Un procedimiento que realizamos varias veces al diacutea consiste en lavarnos los dientes Veamos la forma de expresar este procedimiento como un Algoritmo
1 Tomar la crema dental2 Destapar la crema dental3 Tomar el cepillo de dientes4 Aplicar crema dental al cepillo5 Tapar la crema dental6 Abrir la llave del lavamanos7 Remojar el cepillo con la crema dental8 Cerrar la llave del lavamanos9 Frotar los dientes con el cepillo10 Abrir la llave del lavamanos11 Enjuagarse la boca
12 Enjuagar el cepillo13 Cerrar la llave del lavamanos14 Secarse la cara y las manos con una toalla
Ejemplo 12
Veamos que algo tan comuacuten como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo
1 Ubicar una escalera o un banco debajo de la bombilla fundida2 Tomar una bombilla nueva3 Subir por la escalera o al banco4 Girar la bombilla fundida hacia la izquierda hasta soltarla5 Enroscar la bombilla nueva hacia la derecha en el plafoacuten hasta apretarla6 Bajar de la escalera o del banco7 Fin
Actividad 11Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras Luego un voluntario debe pasar al pizarroacuten y escribir un Algoritmo con participacioacuten de toda la claseEjemplo 13
Consideremos algo maacutes complejo como el algoritmo de Euclides para hallar el Maacuteximo Comuacuten Divisor (MCD) de dos nuacutemeros enteros positivos dados Obseacutervese que no se especifica cuaacuteles son los dos nuacutemeros pero si se establece claramente una restriccioacuten deben ser enteros y positivos
ALGORITMO
Paso 1 Inicio Paso 2 Leer los dos nuacutemeros (ldquoardquo y ldquobrdquo) Avanzar al paso 3 Paso 3 Comparar ldquoardquo y ldquobrdquo para determinar cuaacutel es mayor Avanzar al paso 4 Paso 4 Si ldquoardquo y ldquobrdquo son iguales entonces ambos son el resultado esperado y termina el algoritmo En caso contrario avanzar al paso 5 Paso 5 Si ldquoardquo es menor que ldquobrdquo se deben intercambiar sus valores Avanzar al paso 6 si ldquoardquo no es menor que ldquobrdquo avanzar al paso 6 Paso 6 Realizar la operacioacuten ldquoardquo menos ldquobrdquo asignar el valor de ldquobrdquo a ldquoardquo y asignar el valor de la resta a ldquobrdquo Ir al paso 3
Actividad 12Reflexiona sobre el lenguaje que utilizas diariamente para comunicarte con tus padres hermanos profesores y compantildeeros iquestUtilizas un lenguaje preciso iquestUtilizas vocablos corrientes
Actividad 13A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden loacutegico de ejecucioacuten Numerar en orden loacutegico los pasos siguientes (para pescar)
___ El pez se traga el anzuelo___ Enrollar el sedal___ Tirar el sedal al agua
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
- Entrada Informacioacuten dada al algoritmo- Proceso Operaciones o caacutelculos necesarios para encontrar la solucioacuten del problema- Salida Respuestas dadas por el algoritmo o resultados finales de los procesos realizados
Como ejemplo supongamos que desea desarrollar un algoritmo que calcule la superficie de un rectaacutengulo proporcionaacutendole su base y altura Lo primero que debemos hacer es plantearnos las siguientes preguntas
Especificaciones de entradaiquestQue datos son de entradaiquestCuaacutentos datos se introduciraacuteniquestCuaacutentos son datos de entrada vaacutelidos
Especificaciones de salidaiquestCuaacuteles son los datos de salidaiquestCuaacutentos datos de salida se produciraacuteniquestQueacute formato y precisioacuten tendraacuten los resultados
El algoritmo que podemos utilizar es el siguientePaso 1 Entrada desde el teclado de los datos de base y alturaPaso 2 Caacutelculo de la superficie multiplicando la base por la alturaPaso 3 Salida por pantalla de base altura y superficie calculada
El lenguaje algoriacutetmico debe ser independiente de cualquier lenguaje de programacioacuten particular pero faacutecilmente traducible a cada uno de ellos Alcanzar estos objetivos conduciraacute al empleo de meacutetodos normalizados para la representacioacuten de algoritmos tales como los diagrama de flujo o pseudocoacutedigo
Verificacioacuten de algoritmos
Una vez que se ha terminado de escribir un algoritmo es necesario comprobar que realiza las tareas para las que se ha disentildeado y produce el resultado correcto y esperado El modo maacutes normal de comprobar un algoritmo es mediante su ejecucioacuten manual usando datos significativos que abarquen todo el posible rango de valores Este proceso se conoce como prueba del algoritmo A continuacioacuten se formularaacuten un conjunto de algoritmos
Ejemplo 11Un procedimiento que realizamos varias veces al diacutea consiste en lavarnos los dientes Veamos la forma de expresar este procedimiento como un Algoritmo
1 Tomar la crema dental2 Destapar la crema dental3 Tomar el cepillo de dientes4 Aplicar crema dental al cepillo5 Tapar la crema dental6 Abrir la llave del lavamanos7 Remojar el cepillo con la crema dental8 Cerrar la llave del lavamanos9 Frotar los dientes con el cepillo10 Abrir la llave del lavamanos11 Enjuagarse la boca
12 Enjuagar el cepillo13 Cerrar la llave del lavamanos14 Secarse la cara y las manos con una toalla
Ejemplo 12
Veamos que algo tan comuacuten como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo
1 Ubicar una escalera o un banco debajo de la bombilla fundida2 Tomar una bombilla nueva3 Subir por la escalera o al banco4 Girar la bombilla fundida hacia la izquierda hasta soltarla5 Enroscar la bombilla nueva hacia la derecha en el plafoacuten hasta apretarla6 Bajar de la escalera o del banco7 Fin
Actividad 11Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras Luego un voluntario debe pasar al pizarroacuten y escribir un Algoritmo con participacioacuten de toda la claseEjemplo 13
Consideremos algo maacutes complejo como el algoritmo de Euclides para hallar el Maacuteximo Comuacuten Divisor (MCD) de dos nuacutemeros enteros positivos dados Obseacutervese que no se especifica cuaacuteles son los dos nuacutemeros pero si se establece claramente una restriccioacuten deben ser enteros y positivos
ALGORITMO
Paso 1 Inicio Paso 2 Leer los dos nuacutemeros (ldquoardquo y ldquobrdquo) Avanzar al paso 3 Paso 3 Comparar ldquoardquo y ldquobrdquo para determinar cuaacutel es mayor Avanzar al paso 4 Paso 4 Si ldquoardquo y ldquobrdquo son iguales entonces ambos son el resultado esperado y termina el algoritmo En caso contrario avanzar al paso 5 Paso 5 Si ldquoardquo es menor que ldquobrdquo se deben intercambiar sus valores Avanzar al paso 6 si ldquoardquo no es menor que ldquobrdquo avanzar al paso 6 Paso 6 Realizar la operacioacuten ldquoardquo menos ldquobrdquo asignar el valor de ldquobrdquo a ldquoardquo y asignar el valor de la resta a ldquobrdquo Ir al paso 3
Actividad 12Reflexiona sobre el lenguaje que utilizas diariamente para comunicarte con tus padres hermanos profesores y compantildeeros iquestUtilizas un lenguaje preciso iquestUtilizas vocablos corrientes
Actividad 13A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden loacutegico de ejecucioacuten Numerar en orden loacutegico los pasos siguientes (para pescar)
___ El pez se traga el anzuelo___ Enrollar el sedal___ Tirar el sedal al agua
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
12 Enjuagar el cepillo13 Cerrar la llave del lavamanos14 Secarse la cara y las manos con una toalla
Ejemplo 12
Veamos que algo tan comuacuten como los pasos para cambiar una bombilla (foco) se pueden expresar en forma de Algoritmo
1 Ubicar una escalera o un banco debajo de la bombilla fundida2 Tomar una bombilla nueva3 Subir por la escalera o al banco4 Girar la bombilla fundida hacia la izquierda hasta soltarla5 Enroscar la bombilla nueva hacia la derecha en el plafoacuten hasta apretarla6 Bajar de la escalera o del banco7 Fin
Actividad 11Discutir en parejas el ejemplo de la bombilla y proponer algunas mejoras Luego un voluntario debe pasar al pizarroacuten y escribir un Algoritmo con participacioacuten de toda la claseEjemplo 13
Consideremos algo maacutes complejo como el algoritmo de Euclides para hallar el Maacuteximo Comuacuten Divisor (MCD) de dos nuacutemeros enteros positivos dados Obseacutervese que no se especifica cuaacuteles son los dos nuacutemeros pero si se establece claramente una restriccioacuten deben ser enteros y positivos
ALGORITMO
Paso 1 Inicio Paso 2 Leer los dos nuacutemeros (ldquoardquo y ldquobrdquo) Avanzar al paso 3 Paso 3 Comparar ldquoardquo y ldquobrdquo para determinar cuaacutel es mayor Avanzar al paso 4 Paso 4 Si ldquoardquo y ldquobrdquo son iguales entonces ambos son el resultado esperado y termina el algoritmo En caso contrario avanzar al paso 5 Paso 5 Si ldquoardquo es menor que ldquobrdquo se deben intercambiar sus valores Avanzar al paso 6 si ldquoardquo no es menor que ldquobrdquo avanzar al paso 6 Paso 6 Realizar la operacioacuten ldquoardquo menos ldquobrdquo asignar el valor de ldquobrdquo a ldquoardquo y asignar el valor de la resta a ldquobrdquo Ir al paso 3
Actividad 12Reflexiona sobre el lenguaje que utilizas diariamente para comunicarte con tus padres hermanos profesores y compantildeeros iquestUtilizas un lenguaje preciso iquestUtilizas vocablos corrientes
Actividad 13A diferencia de los seres humanos que realizan actividades sin detenerse a pensar en los pasos que deben seguir los computadores son muy ordenados y necesitan que quien los programa les especifique cada uno de los pasos que debe realizar y el orden loacutegico de ejecucioacuten Numerar en orden loacutegico los pasos siguientes (para pescar)
___ El pez se traga el anzuelo___ Enrollar el sedal___ Tirar el sedal al agua
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
___ Llevar el pescado a casa___ Quitar el Anzuelo de la boca del pescado___ Poner carnada al anzuelo___ Sacar el pescado del agua
Actividad 14
Supongamos que desea ir de Chihuahua a Cancuacuten Para logar esto se tienen varias opciones usar el autobuacutes caminar viajar en motocicleta por tren por avioacuten o caminar Dependiendo de las circunstancias usted elegiraacute la opcioacuten que maacutes le convenga Si es que esta apurado elegiraacute viajar por avioacuten si su presupuesto no es muy alto probablemente elija viajar por autobuacutes Disentildee un algoritmo siguiendo la teacutecnica de medios y extremos para llegar a la solucioacuten del problema
Unidad 2 Elementos baacutesicos para el desarrollo de Algoritmos
21 Arquitectura Funcional de la Computadora
Como primer paso en el estudio del funcionamiento de la computadora se inicia dando algunas definiciones elementales y se recomienda la lectura cuidadosa de los conceptos con el objetivo de entenderlos adecuadamente
Sistema Conjunto de Unidades que colaboran entre si para realizar una funcioacuten general y donde cada unidad efectuacutea un trabajo especiacutefico Por ejemplo Sistema Circulatorio Sistema Digestivo Sistema de Transporte Colectivo etc
Computadora Sistema de Procesamiento de Informacioacuten que recibe datos como entrada los modifica (procesa) y produce resultados como salida Las
unidades que conforman este sistema son Unidad de Memoria Unidad Aritmeacutetico Loacutegica Unidad de Entrada Salida y Unidad de Control
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Figura 21 Diagrama General de la Computadora
U de Memoria Conjunto de Celdas de Almacenamiento que guardan Informacioacuten (pueden ser datos yo programas) Normalmente la cantidad de celdas se mide en Millones y el tamantildeo de cada celda se mide en muacuteltiplos de ocho diacutegitos binarios Esta unidad se subdivide en Memoria Primaria y Memoria Secundaria en funcioacuten de sus caracteriacutesticas (tamantildeo velocidad volatilidad)
U Aritmeacutetico Loacutegica Conjunto de Circuitos que realizan las operaciones Aritmeacuteticas (+ - ) y Loacutegicas (and or neg xor) de datos almacenados en registros de propoacutesito general El tamantildeo de los registros asiacute como el nuacutemero de operaciones aritmeacuteticas y loacutegicas diferentes estaacute en funcioacuten del tamantildeo de la computadora
U de Entrada Salida Conjunto de Registros ( Datos Estado y Control) que permiten realizar las operaciones de comunicacioacuten (ES) con el exterior Estas dos funciones la Entrada y la Salida deben verse como actividades separadas Los registros estaacuten conectados fiacutesicamente a los dispositivos correspondientes por ejemplo los registros de salida del Puerto Paralelo estaacuten conectados a la Impresora
U de Control Conjunto de registros que conforman la parte activa de la computadora La funcioacuten principal es la de realizar el ciclo de maacutequina Alimenta una instruccioacuten Decodificas la Instruccioacuten y Ejecuta la Instruccioacuten
Comentarios No puede realizar cualquier operacioacuten (hacer pasteles) La computadora puede realizar las operaciones Aritmeacutetico Loacutegicas definidas en
su Unidad solamente Es posible construir nuevas operaciones tomando como base las ya existentes
(coseno tangente suma de vectores etc) La computadora es una herramienta para el humano
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
La solucioacuten a los problemas computacionales las da el especialista y no la computadora
22 Variables Computacionales
Las variables pueden verse desde diferentes puntos de vista como el matemaacutetico computacional filosoacutefico etc En nuestro caso debemos ver las variables desde un enfoque computacional (funcional)
Variable Aacuterea de almacenamiento de tamantildeo fijo y que sirve para guardar un tipo de dato especiacutefico Las variables tiene dos elementos El Nombre de la variable y el Contenido de la variable El nombre de la variable sirve para distinguirla de otras variables y el contenido se refiere al dato que es guardado en ese lugar La variable puede almacenar un soacutelo tipo de dato como puede ser datos enteros reales booleanos caracteres etc
23 Operaciones Aritmeacuteticas y Loacutegicas
Las operaciones Aritmeacuteticas y Loacutegicas que una computadora puede hacer estaacuten en funcioacuten del tamantildeo y del propoacutesito de dicha computadora Es decir si una computadora es chica entonces el nuacutemero de operaciones aritmeacutetico y Loacutegicas tambieacuten es ldquochicordquo Por ejemplo en una computadora personal (pequentildea) el nuacutemero de operaciones seraacute alrededor de 10 (aproximadamente) mientras que en una computadora ldquogranderdquo puede llegar a 20 o 25 Debemos recordar que todas estas operaciones se realizan por medio de circuitos electroacutenicos y que entre mas circuitos tenga su costo seraacute mucho maacutes alto
Las operaciones Aritmeacuteticas baacutesicas en una computadora pequentildea son Incremento Decremento Suma Resta Multiplicacioacuten y Divisioacuten Las Operaciones Loacutegicas baacutesicas son AND OR y Negacioacuten Como notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores Aritmeacuteticos y Loacutegicos
SiacutemboloIncremento ++Decremento --Suma +Resta -Multiplicacioacuten AND ampampOR ||Negacioacuten
Tabla 21 Operadores Aritmeacuteticos y Loacutegicos
En computadoras ldquograndesrdquo las operaciones pueden ser Incremento Decremento Suma resta Multiplicacioacuten Divisioacuten Residuo Raiacutez Cuadrada Raiacutez Cuacutebica Valor Absoluto Potencia Logaritmo Seno Coseno Tangente AND OR Negacioacuten OR exclusivo NAND NOR etc Ademaacutes de lo operadores Aritmeacuteticos y los Loacutegicos existen tambieacuten los operadores relacionales Dichos operadores se basan en el concepto de ORDEN que
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
existe dentro de los conjuntos es decir los nuacutemeros enteros los nuacutemeros reales incluso los caracteres (en computacioacuten) son conjuntos ordenadosComo notacioacuten normalmente se utilizan los siacutembolos siguientes para los operadores relacionales
SiacutembolosIgual que ==Menor que ltMayor que gtMenor o igual que lt=Mayor o igual que gt=Distinto que =
Tabla 22 Operadores Relacionales
Los operadores relacionales son binarios es decir que requieren dos operandos y el resultado de la operacioacuten puede ser ldquoFalsordquo o ldquoVerdadrdquo Algunos autores utilizan ApagadoPrendido 01 NoSi
24 Expresiones
Una expresioacuten es una combinacioacuten de operandos (variables) constantes y operadores La expresioacuten debe estar bien escrita es decir siguiendo las reglas de los operadores Las expresiones se pueden dividir en expresiones aritmeacuteticas o expresiones loacutegicas
Ejemplos de expresiones aritmeacuteticas25(50 2) + 10Salario 015
Las expresiones normalmente se usan junto con otros conceptos como las proposiciones (tambieacuten llamadas sentencias) que son estructuras formadas por una variable seguida de un siacutembolo de asignacioacuten (tambieacuten llamado operador de asignacioacuten) y finalmente una expresioacuten Las expresiones incluyen los pareacutentesis como siacutembolos de apoyo
La manera maacutes faacutecil de ver esto es con ejemplos
Ejemplos de proposiciones con expresiones aritmeacuteticas
Base = (500 2) + 100Salario = DiasTrabajados SalarioDiarioImpuesto = Salario 015
Ejemplos de proposiciones con expresiones loacutegicas
Mayor = a gt b Menor = ( a lt b ) ampamp ( b lt c )
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Unidad 3
Disentildeo estructurado usando herramientas de representacioacuten de algoritmos
31 Diagramas de flujo
Un diagrama de flujo es una representacioacuten graacutefica de un algoritmo que se caracteriza por usar siacutembolos graacuteficos para expresar de forma sencilla y clara el orden loacutegico en el que se realizan las acciones de un algoritmo Los siacutembolos utilizados han sido normalizados por el Instituto Norteamericano de Normas (ANSI) [1] y los maacutes frecuentemente utilizados se muestran en la Tabla 31
Siacutembolo Significado o Funcioacuten
Descripcioacuten Ejemplo
Inicio Fin
Indica el inicio o el fin del diagrama de flujo
Entrada Salida
Permite la lectura de datos de entrada (comuacutenmente el teclado) asiacute como la salida de datos (comuacutenmente la pantalla)
Proceso
Se utiliza para realizar asignaciones operaciones pasos procesos y en general instrucciones de programas de coacutemputo
Decisioacuten
Permite evaluar una condicioacuten y dependiendo del resultado se sigue por una de las ramas o caminos alternativos
Conector
Conector para unir el flujo a otra parte del diagrama
Si
No
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
SubprogramaPermite el llamado a otros diagramas de flujo
Tabla 31 Siacutembolos maacutes utilizados en los Diagramas de Flujos
Los siacutembolos mostrados en la tabla 311 son unidos por medio de flechas que indican el flujo de control del diagrama ver tabla 312
Siacutembolo Significado o Funcioacuten
Direccioacuten del flujo del diagrama
Tabla 32 Flechas de control de flujo del diagrama
311 Reglas para la construccioacuten de diagramas de flujoA continuacioacuten se indican algunas reglas que permiten la construccioacuten de diagramas de flujo [2]
1 Todo diagrama de flujo debe tener un inicio y un fin2 Las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama deben ser
rectas verticales y horizontales3 Todas las liacuteneas utilizadas para indicar la direccioacuten del flujo del diagrama
deben estar conectadas a alguno de los siacutembolos mostrados en la tabla 3114 El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a
derecha5 Si el diagrama de flujo requiriera maacutes de una hoja para su construccioacuten
debemos utilizar los conectores
32 PseudocoacutedigoEl pseudocoacutedigo es una herramienta de programacioacuten en la que las instrucciones se escriben en palabras similares al ingleacutes o espantildeol que facilitan tanto la escritura como la lectura de programas En esencia el pseudocoacutedigo se puede definir como un lenguaje de especificacioacuten de algoritmos [1]
Las palabras reservadas comuacutenmente utilizadas en pseudocoacutedigo son Inicio Fin Leer Escribir Si Entonces Sino FinSi Seguacuten FinSegun Mientras Hacer FinMientras Repetir HastaQue Para FinPara Desde entre otras
321 Caracteriacutesticas del pseudocoacutedigoA continuacioacuten se describen las caracteriacutesticas principales del pseudocoacutedigo
Mantiene una identacioacuten o sangriacutea adecuada para facilitar la identificacioacuten de los elementos que lo componen
Permite la declaracioacuten de los datos (constantes yo variables) manipulados por el algoritmo
Dispone de un conjunto pequentildeo de palabras reservadas (normalmente escritas con letra negrita) para expresar las acciones del algoritmo
Supera las dos principales desventajas del diagrama de flujo lento de crear y difiacutecil de modificar
Permite el seguimiento de la loacutegica de un algoritmo
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
33 Estructuras de secuencia
Las estructuras de secuencia tambieacuten son conocidas como sentencias o proposiciones
Una sentencia o proposicioacuten es una unidad completa ejecutable en siacute misma
La ejecucioacuten de estas sentencias se realiza de manera secuencial es decir cada una a continuacioacuten de la anterior empezando por la primera y terminando con la uacuteltima Proposicioacuten Simple
Consiste en una soacutela sentencia
Por ejemplo
a ) Edad not 18b ) SUMA not DATO1 + DATO2 + DATO3c ) ESCRIBE(lsquo Dame tu opcioacutenrsquo)
En algunos lenguajes de programacioacuten las sentencias terminan con el caraacutecter punto y coma ()
Proposicioacuten Compuesta o bloque
Es un conjunto de declaraciones y sentencias (proposiciones) agrupadas dentro de los delimitadores INICIO y FIN
Ejemplos
a) Una proposicioacuten compuesta de 2 enunciados
INICIO X not 5 Y not 89FIN
b) Una proposicioacuten compuesta de 4 enunciados
INICIO PRECIO not 8950 INTERES not 015 COSTO_FINAL not PRECIO + INTERES ESCRIBE(lsquoEl costo final del producto es rsquo COSTO_FINAL) FIN
34 Estructuras de Control
Las estructuras de control tambieacuten conocidas como estructuras de decisioacuten controlan el flujo de ejecucioacuten de un programa Permiten seleccionar la proacutexima proposicioacuten a ejecutarse dependiendo del valor de una condicioacuten (cierta o falsa) Para construir esta condicioacuten se usaraacuten las expresiones loacutegicas o relacionales
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Entre las estructuras de control se tienen las siguientes condicional simple condicional doble y condicionales muacuteltiples
Expresiones loacutegicas y relacionales
a) Operadores relacionales Los operadores relacionales se usan para comparar expresiones Una expresioacuten que contiene un operador relacional evaluacutea a cierto (1) o falso (0)
Sintaxis
expresion1 operador relacional expresion2
Operadores relacionales
Operador siacutembolo (en pseudocoacutedigo)
Igual =Mayor que gtMenor que ltMayor queacute o igual a gt=Menor queacute o igual a lt=Diferente ltgt
Al comparar una expresioacuten es como si se realizaran preguntas
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
Expresioacutenrelacional Pregunta Evaluacutea a
x gt y iquest x es mayor que y Falso x = y iquest x es igual a y Falsoy = 100 iquest y es igual a 100 iquest Ciertoxlt= y iquest x es menor o igual a y Ciertox ltgt y iquest x es distinto de y Cierto(5 + 80 ) lt 200 iquest 5 + 80 es menor que 200 Ciertox2 gt (x + y + z) iquest x2 es mayor que x + y +z Falso
b) Operadores loacutegicos
Algunas veces se necesitaraacute hacer maacutes de una pregunta relacional al mismo tiempo Los operadores loacutegicos permitiraacuten combinar dos o maacutes expresiones relacionales en una sola expresioacuten que evaluacutea a cierto (1) o falso (0)
Sintaxis
Para operadores o e y
expresion1 operador loacutegico expresioacuten2
Para operador no
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
no expresioacuten
Operadores loacutegicos
Operador siacutembolo (en pseudocoacutedigo) y y o bien and o o o bien or no no o bien not
Estos operadores evaluaraacuten a cierto o falso seguacuten las siguientes combinaciones
Operador y
expresioacuten1 expresioacuten2 expresioacuten1 y expresioacuten2
cierto cierto cierto cierto falso falso falso cierto falso falso falso falso
Tabla 33
Operador o
expresioacuten1 expresioacuten2 expresioacuten1 o expresioacuten2
cierto cierto cierto cierto falso cierto falso cierto cierto falso falso falso
Tabla 34
Operador no
expresioacuten no expresioacuten
Cierto Falso Falso Cierto
Tabla 35
Ejemplos Supongamos que se tienen las variables x=5 y=100 z= -2
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
expresioacuten operador expresioacuten Pregunta evaluacutea a
(x gt y ) y (x = y) iquestx es mayor que y y x es igual a y Falso
F F
(x gt y ) y (y = 100) iquestx es mayor que y y y es igual a 100 Falso
F C (x ltgt y) y (y = 100) iquestx es distinto de y y y es igual a 100
Cierto C C
(x gt y ) o (y = 100) iquestx es mayor que y o y es igual a 100 Cierto
F C (x lt= y) o ( x = 50) iquestx es menor o igual a y o x es igual a 50
Cierto C F
(x = y) y ( (x gt y ) o ( y = 100) ) iquestx es distinto de y y iquest x es mayor que y o y es igual a 100 Falso F F o C F y C
((x = y) y (x gt y )) o ( y = 100) iquest x es distinto de y y x es mayor que y o iquesty es igual a 100 Cierto F y F F o C
341 Condicional Simple
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realiza proposicioacuten y si es falsa entonces no se realiza la proposicioacuten
Sintaxis
Si condicioacuten entonces proposicioacuten
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a falsa por lo que no se imprimiraacute ninguacuten mensaje en pantalla
b ) Supongamos que se tienen las variables x=5 y=5
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo)
La condicioacuten evaluacutea a Cierta por lo que en pantalla se visualizaraacute el mensaje
Las variables x e y tienen el mismo valor
c ) Supongamos las variables COSTO_FINAL = 00 COSTO = 198950 INTERES = 5000
Si (COSTO lt = 5000) y (INTERES = 5000) entonces COSTO_FINAL not COSTO + INTERES
La condicioacuten evaluacutea a cierta por lo que el valor actual de COSTO_FINAL es 203950
d ) Supongamos k=0 x =10 y =7 w =0
si ( x lt 50) entonces INICIO w not x + y k not w-5 + y FIN
Despueacutes de realizar la decisioacuten el valor de la variable k seraacute 19
342 Condicional doble
Se evaluacutea la condicioacuten si la condicioacuten es cierta se realizaraacute proposicioacuten1 y si condicioacuten es falsa se realizaraacute la proposicioacuten 2
Sintaxis
Si condicioacuten entonces Proposicioacuten 1Si no Proposicioacuten 2
Ejemplos
a ) Supongamos que se tienen las variables x=5 y=100
Si (x = y) entonces Escribe(lsquoLas variables x e y tienen el mismo valor rsquo) Si no Escribe(lsquoLa variable x tiene un valor menor al valor de la variable yrsquo)
Imprimiraacute en pantalla
La variable x tiene un valor menor al valor de la variable y
b) Supongamos las variables NUM1 = 50 y NUM2=10 NUM3 = 0
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Si (NUM1 ltgt 0 ) entonces NUM3 not NUM1 + NUM2 Si no NUM3 not NUM1 ndash NUM2
Despueacutes de llevarse a cabo ldquola decisioacutenrdquo la variable NUM3 tendraacute el valor 60
c ) Supongamos k = 10 R = 2
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo r)
Imprimiraacute en pantalla R = 12
d) Supongamos k = 10 R = 300
Si ( R lt 100 ) INICIO R = R + k ESCRIBE(lsquo R = rsquo R) FIN Si no ESCRIBE(lsquoR =rsquo R)
Imprimiraacute en pantalla R = 300 343 Condicional muacuteltiple Permite realizar una bifurcacioacuten muacuteltiple ejecutando una entre varias partes del programa seguacuten se cumpla una entre n condiciones
Sintaxis
Si selector igual
Valor1 Hacer proposicioacuten 1Valor2 Hacer proposicioacuten 2Valor3 Hacer proposicioacuten 3Valor n Hacer proposicioacuten nDe otra forma Hacer proposicioacuten x (esta proposicioacuten es opcional)FIN
Selector es una variable que puede tomar solamente alguno de los valores valor 1 valor 2 valor 3valor n
Dependiendo del valor que tome selector se ejecutaraacute alguna de las proposiciones
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Si selector toma valor 1 entonces ejecutaraacute la proposicioacuten 1 o bien si selector toma valor 2 entonces ejecutaraacute la proposicioacuten 2 y asiacute sucesivamente
Pero si selector NO toma alguno de los valores valor 1 hasta valor n entonces ejecutaraacute la proposicioacuten por omisioacuten que es la proposicioacuten x
Ejemplo 31 Dados la categoriacutea y el sueldo del trabajador calcular el aumento correspondiente teniendo en cuenta la siguiente tabla
Categoriacutea Aumento
lsquoArsquo 15 lsquoBrsquo 10 lsquoCrsquo 7
Tabla 36
ESCRIBE(lsquoDame la categoriacutearsquo) LEE(Categ) ESCRIBE(lsquoDame el sueldorsquo) LEE(sueldo)
Si categ igual lsquoArsquo sueldo_nuevo not sueldo015 lsquoBrsquo sueldo_nuevo not sueldo010 lsquoArsquo sueldo_nuevo not sueldo07 FIN
ESCRIBE(lsquoCategoria sueldorsquo Categ sueldo_nuevo)
35 Estructuras de repeticioacuten
Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
351 Ciclos con contador
Ciclo Para
El ciclo Para ejecuta un bloque de instrucciones un nuacutemero determinado de veces Este nuacutemero de veces estaacute controlado por una variable contadora (de tipo entero) que toma valores desde un liacutemite inferior hasta un liacutemite superior En cada ciclo despueacutes de ejecutar el bloque de instrucciones la variable contadora es
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
incrementada en 1 automaacuteticamente y en el momento en que la variable sobrepasa el liacutemite superior el ciclo termina El valor final de la variable contadora depende del lenguaje de programacioacuten utilizado por lo tanto no es recomendable disentildear algoritmos que utilicen el valor de la variable contadora de un ciclo Para despueacutes de ejecutar el mismo De la definicioacuten de ciclo Para se puede inferir que el bloque de instrucciones no se ejecuta si el liacutemite inferior es mayor al liacutemite superior
Repetitiva Para en Diagramas de Flujo
En un Diagrama de flujo una instruccioacuten repetitiva Para se puede representar del siguiente modo
Figura 31 Instruccioacuten repetitiva Para
Ejemplo 32Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 32 Imprime los primeros 10 nuacutemeros naturales
ltbloque_de_instruccionesgt
SI
NO
ltvariable=ltvalor_ inicialgtValor_finalgt
[incremento ltvalor_incrementogt |Decremento ltvalor_decrementogt]
SI
NO
Contador =110
incremento 1
Escribir(contador)
Inicio
Fin
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Ejemplo 32 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
Figura 33 Suma los nuacutemeros pares de 0 a 100
Ciclo Para en Pseudocodigo
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt ] hacer ltbloque_de_instruccionesgt fin_para
En una instruccioacuten repetitiva Para siempre se utiliza una ltvariablegt a la que se le debe asignar un ltvalor_inicialgt En cada iteracioacuten del bucle al valor de la ltvariablegt se le suma el ltvalor_incrementogt y cuando la ltvariablegt supera el ltvalor_finalgt el bucle finalizaEn consecuencia cuando el flujo de un algoritmo llega a un bucle Para en primer lugar se asigna el ltvalor_inicialgt a la ltvariablegt y a partir de ese instante existen dos posibilidades
1 Si el valor de la ltvariablegt es mayor que el ltvalor_finalgt entonces no se ejecuta el bloque de instrucciones y el bucle Para finaliza sin realizar ninguna iteracioacuten
2 Si el valor de la ltvariablegt es menor o igual que el ltvalor_finalgt entonces se ejecuta el bloque de instrucciones y despueacutes se le suma el ltvalor_incrementogt a la ltvariablegt volvieacutendose de nuevo a comparar el valor de la ltvariablegt con el ltvalor_finalgt y asiacute sucesivamente hasta que el valor de la ltvariablegt sea mayor que el ltvalor_finalgt
En resumen una instruccioacuten repetitiva Para permite ejecutar repetidamente un bloque de instrucciones en base a un valor inicial y a un valor finalEl bucle Para es ideal usarlo cuando de antemano ya se sabe el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instruccionesEl bucle Para es una variante del bucle mientras (se discute a continuacioacuten) y al igual que eacuteste puede iterar cero o maacutes veces Sin embargo el bucle Para soacutelo se suele usar cuando se conoce el nuacutemero exacto de veces que tiene que iterar el bucle
SI
NO
par =0100
incremento 1
Escribir(suma)
Inicio
Fin
suma=0
par=par+2suma=suma+par
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Tipo de variables uacutetiles para la iteracioacuten
Cuando se disentildean algoritmos que incluyen estructuras de control repetitivas existen ciertas Variables que cumplen una funcioacuten especiacutefica en cada iteracioacuten del ciclo las maacutes comunes son
bull Las variables contadorasbull Las variables acumuladorasbull Las variables bandera
Variables contadorasComo su nombre lo indican estas variables se usan fundamentalmente para contar por lo tanto deben ser de tipo entero Un ejemplo de este tipo de variables es la variable de control en un Ciclo ParaUna variable contadora se incrementa (o decrementa) en un valor constante en cada iteracioacuten del ciclo
Variables acumuladorasLa funcioacuten de una variable acumuladora es almacenar valores numeacutericos que generalmente se Suman (o multiplican) en cada iteracioacuten por lo tanto la variable debe ser de tipo entero o real
Variables banderaUna variable bandera es utilizada dentro de la condicioacuten de un ciclo para determinar cuaacutendo un Ciclo se sigue iterando o cuando no De esta manera una variable bandera debe ser de tipo booleano o entero
Ejemplo 33 Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio para contador larr 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin
Ejemplo 34Cuando el incremento es 1 se puede omitir la palabra reservada incremento y su valor
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio Al no aparecer el valor del incremento se entiende que es 1
para contador larr 1 hasta 10 hacer escribir( contador ) fin_para fin
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
La traza de ambos algoritmos es la misma
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1
2 (Comprobar si contador es menor o igual que 10 ) 1
contador siacute es menor o igual que 10Inicio de la iteracioacuten 1
3 escribir( contador ) 1Fin de la iteracioacuten 1
4 (Sumar a contador el valor 1 ) 2
5 (Comprobar si contador es menor o igual que 10 ) 2
contador siacute es menor o igual que 10Inicio de la iteracioacuten 2
6 escribir( contador ) 2Fin de la iteracioacuten 2
n-3 (Comprobar si contador es menor o igual que 10 ) 10
contador siacute es menor o igual que 10Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10Fin de la iteracioacuten 10
n-1 (Sumar a contador el valor 1 ) 11
n (Comprobar si contador es menor o igual que 10 ) 11
contador no es menor o igual que 10El bucle finaliza despueacutes de 10
iteraciones Figura 34 Traza del ejemplo 353 y ejemplo 354
352 Ciclos Condicionales (Ciclo mientras y Ciclo hacerhellipmientras) El ciclo mientras permite ejecutar un bloque de instrucciones mientras una expresioacuten loacutegica dada se cumpla es decir mientras su evaluacioacuten deacute como resultado verdadero La expresioacuten loacutegica se denomina condicioacuten y siempre se evaluacutea antes de ejecutar el bloque de instrucciones Si la condicioacuten no se cumple el bloque no se ejecuta Si la condicioacuten se cumple el bloque se ejecuta despueacutes de lo cual la instruccioacuten vuelve a empezar es decir la condicioacuten se vuelve a evaluarEn el caso en que la condicioacuten evaluacutee la primera vez como falsa el bloque de instrucciones no seraacute ejecutado lo cual quiere decir que el nuacutemero de repeticiones o iteraciones de este bloque seraacute cero Si la condicioacuten siempre evaluacutea a verdadero la instruccioacuten se ejecutaraacute indefinidamente es decir un nuacutemero infinito de veces
Repetitiva mientras en Diagramas de Flujo
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Sintaxis
Figura 35 Instruccioacuten repetitiva mientras
Ejemplo 35 Se quiere disentildear el diagrama de flujo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 36 Imprime los primeros 10 nuacutemeros naturales
Ejemplo 36 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0100
SI
Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
Mientrasltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Figura 37 Suma los nuacutemeros pares de 0 a 100
Repetitiva mientras en Pseudocodigo
Sintaxismientras ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgtfin_mientras
Cuando la condicioacuten de un bucle mientras se evaluacutea siempre a verdadera se dice que se ha producido un bucle infinito ya que el algoritmo nunca termina Un bucle infinito es un error loacutegicoEs importante hacer hincapieacute en el hecho de que en un bucle mientras primero se evaluacutea la condicioacuten y en el caso de que eacutesta sea verdadera entonces se ejecuta el bloque de instruccionesPara que un bucle mientras no sea infinito en el bloque de instrucciones debe ocurrir algo para que la condicioacuten deje de ser verdadera En la mayoriacutea de los casos la condicioacuten se hace falsa al cambiar el valor de una variableEn resumen una instruccioacuten repetitiva mientras permite ejecutar repetidamente (cero o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 37Obtener un Algoritmo que obtenga la numeracioacuten de 1 al 100 usando un ciclo mientras mostrar cada resultado
Nombre del algoritmo Serie_del_1_al_100Variables x Tipo enteroInicio x 1 mientras (x lt 101) escribir (x) x x + 1 fin_mientrasfin
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Ejemplo 38
Obtener un Algoritmo que sume todos los elementos de la serie del 1 al 100
Nombre del algoritmo Suma_del_1_al_100Variables X S Tipo enteroInicio S 0 X 1mientras (x lt= 100) S S + X X X + 1fin_mientrasescribir (S)fin
Variable ContadorVariable que almacena la cantidad de veces que un proceso dentro de un ciclo se ha completado Consiste de dos pasos
inicializar la variable incrementar la variable por un valor constante al ser completado el ciclo
Para comprender queacute es una variable contador estuacutediese el siguiente ejemplo
Ejemplo 39Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Numeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador mientras ( contador lt= 10 ) Condicioacuten escribir( contador ) Salida contador larr contador + 1 Incremento fin_mientras fin
Para comprender el funcionamiento de este algoritmo se va a estudiar su traza o prueba de escritorio
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 Contador larr 1 1
2 (Comprobar si contador lt= 10) 1
La condicioacuten es verdadera
Inicio de la iteracioacuten 1
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
3 escribir( contador ) 1
4 contador larr contador + 1 2
Fin de la iteracioacuten 1
5 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
6 escribir( contador ) 2
7 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdadera
Inicio de la iteracioacuten 10
n-2 escribir( contador ) 10
n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsa
El bucle finaliza despueacutes de 10
iteraciones
Explicacioacuten de la traza
Primeramente se le asigna el valor 1 a contador (accioacuten 1) En segundo lugar se evaluacutea la condicioacuten ( contador lt= 10 ) (accioacuten 2) y
puesto que es verdadera se ejecuta el bloque de instrucciones del bucle mientras
Asiacute que por pantalla se muestra el valor de contador (accioacuten 3) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 4)
Terminada la ejecucioacuten del bloque de instrucciones se vuelve a evaluar la condicioacuten ( contador lt= 10 ) (accioacuten 5) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle mientras se ejecuta diez veces (iteraciones)
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
En el algoritmo del ejemplo se ha utilizado un contador ademaacutes en este caso el valor de la variable contador se ha visualizado en cada iteracioacuten
Cambios en un bucle Mientras
Ejemplo 310Se quiere disentildear el algoritmo de un programa que muestre por pantalla los primeros diez nuacutemeros naturales pero a la inversa es decir del 10 al 1
Nombre del algoritmo Numeros_del_10_al_1Variables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Para que el algoritmo realice la nueva tarea encomendada ha sido necesario realizar tres cambios en los aspectos maacutes criacuteticos del bucle mientras
1 La inicializacioacuten de la variable contador (cambio 1) necesaria para que la condicioacuten pueda evaluarse correctamente cuando el flujo del algoritmo llega al bucle mientras
2 La condicioacuten del bucle mientras (cambio 2) afecta al nuacutemero de iteraciones que va a efectuar el bucle Tambieacuten se le conoce como condicioacuten de salida del bucle
3 La instruccioacuten de asignacioacuten (cambio 3) hace variar el valor de la variable contador dentro del bloque de instrucciones De no hacerse correctamente el bucle podriacutea ser infinito
Errores en un bucle mientrasEn este apartado vamos a ver varios ejemplos de posibles errores que se pueden cometer al escribir un bucle mientras tomando como referencia el ejemplo del apartado anterior
Ejemplo 311 Un pequentildeo descuido como por ejemplo no escribir de forma correcta la condicioacuten del bucle puede producir un bucle infinito
Nombre del algoritmo Ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador lt= 10 ) Descuido escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Ejemplo 312
Otro error muy frecuente es inicializar mal la variable que participa en la condicioacuten del bucle
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Nombre del algoritmo Imprime_soacutelo_el_1 Variables contador Tipo entero inicio contador larr 1 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientras fin
Por pantalla soacutelo se mostraraacute el nuacutemero 1
Ejemplo 313
Tambieacuten es un error muy tiacutepico olvidarse de escribir alguna instruccioacuten como por ejemplo la instruccioacuten de asignacioacuten
contador larr contador - 1del bloque de instrucciones del bucle
Nombre del algoritmo Soacutelo_ciclo_infinitoVariables contador Tipo entero inicio contador larr 10 Cambio 1 mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) Descuido fin_mientrasfin
De nuevo por pantalla se obtiene la salida de un bucle infinito
Ejemplo 314
Como ya se ha dicho un bucle mientras puede iterar cero o maacutes veces Asiacute por ejemplo en el algoritmo siguiente existe un error loacutegico que provoca que el bucle no itere ninguna vez
Nombre del algoritmo Cero_iteracionesVariables contador Tipo entero inicio contador larr 0 Descuido mientras ( contador gt= 1 ) Cambio 2 escribir( contador ) contador larr contador - 1 Cambio 3 fin_mientrasfin
Por pantalla no se mostraraacute nada
En este caso se ha producido un error loacutegico ya que para que el bucle iterase diez veces se deberiacutea haber asignado a la variable contador el valor 10 en vez del 0
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
No obstante bajo determinadas circunstancias siacute puede tener sentido hacer uso de un bucle mientras el cual pueda no iterar ninguna vez
Uso de un bucle Mientras que puede no iterarPara comprender el porqueacute puede tener sentido utilizar un bucle mientras el cual pueda no iterar ninguna vez estuacutediese el siguiente problema
Ejemplo 315 Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado la nota (dato real) de una asignatura2ordm) En el caso de que la nota sea incorrecta muestre por pantalla el mensaje
ERROR Nota incorrecta debe ser gt= 0 y lt= 10
3ordm) Repita los pasos 1ordm y 2ordm mientras que la nota introducida sea incorrecta4ordm) Muestre por pantalla
APROBADO en el caso de que la nota sea mayor o igual que 5 SUSPENDIDO en el caso de que la nota sea menor que 5
El algoritmo propuesto es
Nombre del algoritmo Aprobado_o_suspendidoVariables nota Tipo real inicio escribir( Introduzca nota (real) ) leer( nota )
Si la primera nota introducida por el usuario es correcta el bucle no itera ninguna vez
mientras ( nota lt 0 o nota gt 10 ) escribir( ERROR Nota incorrecta debe ser gt= 0 y lt= 10 ) escribir( Introduzca nota (real) ) leer( nota ) fin_mientras
Mientras que el usuario introduzca una nota incorrecta el bucle iteraraacute Y cuando introduzca una nota correcta el bucle finalizaraacute
si ( nota gt= 5 ) escribir( APROBADO ) sino escribir( SUSPENDIDO ) fin_sifin
En el algoritmo el bucle mientras se ha usado para validar la nota introducida por el usuario En programacioacuten es muy frecuente usar el bucle mientras para validar (filtrar) datos Al bucle que se utiliza para validar uno o maacutes datos tambieacuten se le conoce como filtro
Repetitiva hacermientras en Diagramas de Flujo
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
En un Diagrama de Flujo una instruccioacuten repetitiva hacermientras se representa de la siguiente manera
Figura 38 Instruccioacuten repetitiva hacermientras
Ejemplo 316Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Figura 39 Imprime los 10 primeros nuacutemeros naturales
Para saber cuando hacer uso de un bucle u otro es muy importante conocer bien las diferencias maacutes significativas existentes entre ambos bucles
Mientras hacerhellipmientras
1 se evaluacutea la condicioacuten 1 se ejecuta el bloque 2 se ejecuta el bloque 2 se evaluacutea la condicioacuten
Cero o maacutes iteraciones Una o maacutes iteraciones
SI Mientras contadorlt=10
Inicio
contador=1
Escribir (contador
)
contador=contador+1
Fin
No
ltexpresioacuten_loacutegicagt
ltbloque_de_instruccionesgt
SI
NO
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Figura 39 Diferencia entre mientras y hacerhellipmientras
Ejemplo 317 Se quiere disentildear el diagrama de flujo que obtiene la sumatoria de nuacutemeros pares del 0 10
Figura 310 Suma los nuacutemeros pares de 0 a 100
Repetitiva hacermientras en Pseudocodigo
Sintaxis
hacer ltbloque_de_instruccionesgtmientras ( ltexpresioacuten_loacutegicagt )
Como se puede apreciar la instruccioacuten repetitiva hacermientras tambieacuten hace uso de una condicioacutenEn un bucle hacermientras primero se ejecuta el bloque de instrucciones y despueacutes se evaluacutea la condicioacuten En el caso de que eacutesta sea verdadera se vuelve a ejecutar el bloque de instrucciones Y asiacute sucesivamente hasta que la condicioacuten sea falsa
Por consiguiente cuando el flujo de un algoritmo llega a un bucle hacermientras existen dos posibilidades
1 Se ejecuta el bloque de instrucciones y despueacutes si la condicioacuten se evaluacutea a falsa el bloque de instrucciones no se vuelve a ejecutar de manera que el bucle hacermientras finaliza habiendo realizado una sola iteracioacuten
2 Se ejecuta el bloque de instrucciones y a continuacioacuten si la condicioacuten se evaluacutea a verdadera el bloque de instrucciones se vuelve a ejecutar Y asiacute sucesivamente hasta que la condicioacuten sea falsa
El ltbloque_de_instruccionesgt de un bucle hacermientras puede ejecutarse una o maacutes veces (iteraciones) Tambieacuten hay que prevenir que el bucle no sea infinito
SI
Mientras parlt=100
Inicio
par=0suma=0
par=par+2suma=suma+par
Fin
No
Escribir (suma)
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
En resumen una instruccioacuten repetitiva hacermientras permite ejecutar repetidamente (una o maacutes veces) un bloque de instrucciones mientras que una determinada condicioacuten sea verdadera
Ejemplo 318
Se quiere disentildear el algoritmo que muestre por pantalla los primeros diez nuacutemeros naturales
Nombre del algoritmo Nuacutemeros_del_1_al_10Variables contador Tipo entero inicio contador larr 1 Inicializacioacuten del contador hacer escribir ( contador ) Salida contador larr contador + 1 Incremento mientras ( contador lt= 10 ) Condicioacuten fin
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor decontador
1 contador larr 1 1Inicio de la iteracioacuten 1
2 escribir( contador ) 13 contador larr contador + 1 2
Fin de la iteracioacuten 1
4 (Comprobar si contador lt= 10) 2
La condicioacuten es verdaderaInicio de la iteracioacuten 2
5 escribir( contador ) 26 contador larr contador + 1 3
Fin de la iteracioacuten 2
n-3 (Comprobar si contador lt= 10) 10
La condicioacuten es verdaderaInicio de la iteracioacuten 10
n-2 escribir( contador ) 10n-1 contador larr contador + 1 11
Fin de la iteracioacuten 10
n (Comprobar si contador lt= 10) 11
La condicioacuten es falsaEl bucle finaliza despueacutes de
10 iteraciones
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Explicacioacuten de la traza En primer lugar se le asigna el valor 1 a contador (accioacuten 1) A continuacioacuten se ejecuta el bloque de instrucciones del bucle hacer
mientras mostraacutendose por pantalla el valor de contador (accioacuten 2) y despueacutes se incrementa en 1 el valor de la variable contador (accioacuten 3)
Una vez ejecutado el bloque de instrucciones se evaluacutea la condicioacuten de salida del bucle ( contador lt= 10 ) (accioacuten 4) y puesto que es verdadera se ejecuta de nuevo el bloque de instrucciones
Y asiacute sucesivamente mientras que la condicioacuten sea verdadera o dicho de otro modo hasta que la condicioacuten sea falsa
En este algoritmo el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones)
Al igual que ocurre con la instruccioacuten repetitiva mientras cualquier pequentildeo descuido o error al escribir el coacutedigo del algoritmo puede dar lugar a que la instruccioacuten repetitiva hacermientras no funcione correctamenteComo ya se ha dicho el bucle hacermientras puede iterar una o maacutes veces por tanto cuando un bloque de instrucciones debe iterar al menos una vez generalmente es mejor utilizar un bucle hacermientras que un bucle mientras como por ejemplo en el siguiente
Ejemplo 3519
Se quiere disentildear el algoritmo de un programa que1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumuladornumero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) acumulador larr acumulador + nuacutemero escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir ( La suma de los nuacutemeros introducidos es acumulador ) fin
Diferencia entre el bucle Mientras y el Bucle HacerhellipMientras
Variable Acumulador
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Estructura (variable) que mantiene un total actualizado sin afectar otros coacutemputos o procesamientosConsiste de dos pasos
inicializar la variable incrementar el acumulador por un valor variable
En el siguiente problema vamos a ver un ejemplo de variable contador
Ejemplo 320 Se quiere disentildear el algoritmo de un programa que
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Pregunte al usuario si desea introducir otro o no3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario no responda n de (no)4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
Solucioacuten
Nombre del algoritmo Suma_de_numeros_introducidos_por_el_usuarioVariables acumulador nuacutemero Tipo entero seguir Tipo caracter inicio En acumulador se va a guardar la suma de los nuacutemeros introducidos por el usuario
acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero )c escribir( iquestDesea introducir otro nuacutemero (sn) ) leer( seguir ) mientras ( seguir ltgt n ) Mientras que el usuario desee introducir maacutes nuacutemeros el bucle iteraraacute
escribir( La suma de los nuacutemeros introducidos es acumulador ) fin
iquestCuaacutendo usar un bucle u otroA la hora de elegir un bucle u otro debemos hacernos la siguiente pregunta
iquestSe conoce de antemano el nuacutemero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones
Si la respuesta es afirmativa habitualmente se usa un bucle Para En caso contrario nos plantearemos la siguiente pregunta
iquestEl bloque de instrucciones debe ejecutarse al menos una vez
En este caso si la respuesta es afirmativa generalmente haremos uso de un bucle hacermientras y si la respuesta es negativa usaremos un bucle mientras
353 Ciclos Anidados
Al igual que las instrucciones alternativas las instrucciones repetitivas tambieacuten se pueden anidar permitiendo las siguientes combinaciones de anidamiento
mientras en mientras mientras en hacermientras
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
mientras en Para hacermientras en hacermientras hacermientras en Para hacermientras en mientras Para en Para Para en mientras Para en hacermientras
De ellas vamos a estudiar como ejemplo la combinacioacuten Para en hacermientras
Por otro lado las instrucciones alternativas y repetitivas tambieacuten se pueden anidar entre siacute permitiendo realizar 18 combinaciones maacutes de anidamiento
mientras en doble mientras en simple mientras en muacuteltiple
hacermientras en doble hacermientras en simple hacermientras en muacuteltiple
Para en doble Para en simple Para en muacuteltiple
Doble en mientras Doble en hacermientras Doble en Para
Simple en mientras Simple en hacermientras Simple en Para
Muacuteltiple en mientras Muacuteltiple en hacermientras Muacuteltiple en Para
De ellas vamos a estudiar como ejemplo la combinacioacuten
Simple en para
Bucle Para en Hacerhellip Mientras
En pseudocodigo para anidar un bucle Para en un bucle hacermientras se utiliza la sintaxis
Inicio del anidamiento para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer ltbloque_de_instruccionesgt fin_para Fin del anidamiento
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
mientras ( ltexpresioacuten_loacutegicagt ) Ejemplo 321 Se quiere disentildear el algoritmo que muestre por pantalla la tabla de multiplicar de un nuacutemero entero introducido por el usuario El proceso debe repetirse mientras que el usuario lo desee
Nombre del algoritmo Tabla_de_multiplicar_de_un_nuacutemeroVariables nuacutemeroi Tipo entero seguir Tipo caracter inicio hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) escribir( La tabla de multiplicar del nuacutemero es ) Inicio del anidamiento para i larr 1 hasta 10 hacer escribir( nuacutemero i = i nuacutemero ) fin_para Fin del anidamiento
escribir( iquestDesea ver otra tabla (sn) ) leer( seguir ) mientras ( seguir ltgt n ) fin
Anidamiento de alternativa simple en bucle Para
En pseudocoacutedigo para anidar una alternativa simple en un bucle Para se utiliza la sintaxis
para ltvariablegt larr ltvalor_inicialgt hasta ltvalor_finalgt [ incremento ltvalor_incrementogt | decremento ltvalor_decrementogt ] hacer
Inicio del anidamiento si ( ltexpresioacuten_loacutegicagt ) ltbloque_de_instruccionesgt fin_si Fin del anidamiento
fin_para
Ejemplo 322
Se quiere disentildear el algoritmo de un programa que muestre por pantalla todos los nuacutemeros enteros del 1 al 100 (ambos inclusive) que sean divisibles entre 17 oacute 21Anidando una alternativa simple en un bucle Para el problema se puede resolver con el siguiente algoritmo
Nombre del algoritmo algoritmo Nuacutemeros_enteros_divisibles_entre_17_o_21Variables nuacutemero Tipo entero
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
inicio para nuacutemero larr 1 hasta 100 hacer
Inicio del anidamiento si ( nuacutemero mod 17 = 0 o nuacutemero mod 21 = 0 ) escribir( nuacutemero ) fin_si Fin del anidamiento
fin_para fin
E) Instrucciones de Control de Salto
En pseudocodigo para escribir una instruccioacuten de salto interrumpir se utiliza la sintaxis
InterrumpirLa instruccioacuten de salto interrumpir siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle es decir la instruccioacuten interrumpir finaliza (termina) la ejecucioacuten de un bucle y por tanto el control del programa se transfiere (salta) a la primera instruccioacuten despueacutes del bucle
Ejemplo 323Estuacutediese el siguiente algoritmo
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) interrumpir En el caso de que n sea un cero el bucle se interrumpe fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
El algoritmo puede ser la solucioacuten del problema siguiente
Disentildee el algoritmo
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 10
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Cero si el usuario introduce un cero el bucle tambieacuten finaliza mostraacutendose por pantalla el mensaje
ERROR El cero no tiene opuesto
4ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten) Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 154 (Comprobar si n = 0) 0 15
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -156 a larr a + n 15 15
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 15 15
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 1
iteracioacuten8 escribir( Suma a ) 15 15
El bucle ha finalizado porque la condicioacuten (n gt= -10 y n lt= 10) es falsa ya que 15 no es mayor o igual que -10 y menor o igual que 10Sin embargo el bucle tambieacuten puede finalizar no porque sea falsa la condicioacuten (n gt= -10 y n lt= 10) sino porque se ejecute la instruccioacuten interrumpir Esto ocurriraacute cuando el usuario introduzca un cero Por ejemplo
Veamos otra traza
Secuencia
Accioacuten (instruccioacuten)
Valor dea n
1 a larr 0 0 Inicio de la iteracioacuten 1
2 escribir( Introduzca un nuacutemero entero ) 0
3 leer( n ) 0 84 (Comprobar si n = 0) 0 8
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -86 a larr a + n 8 8
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 8 8
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 8 8
9 leer( n ) 8 -710 (Comprobar si n = 0) 8 -7
La condicioacuten de la alternativa simple es falsa
11 escribir( El opuesto es -n ) 8 712 a larr a + n 1 -7
Fin de la iteracioacuten 213 (Comprobar si n gt= -10 y n lt= 10) 1 -7
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 1 -7
15 leer( n ) 1 016 (Comprobar si n = 0) 1 0
La condicioacuten de la alternativa simple es verdadera
17 escribir( ERROR El cero no tiene opuesto ) 1 0
18 interrumpir 1 0El bucle se interrumpe en la 3ordf iteracioacuten
El control del programa se transfiere (salta)
a la primera instruccioacuten despueacutes del bucle
19 escribir( Suma a ) 1 0
Normalmente cuando en un bucle se utiliza una instruccioacuten interrumpir la ejecucioacuten de eacutesta se condicionaEn el ejemplo 1 el bucle se interrumpe si la condicioacuten (n = 0) es verdadera Noacutetese que dicha condicioacuten no estaacute contemplada en la condicioacuten de salida estaacutendar del bucle por lo que a la condicioacuten (n = 0) se le considera condicioacuten de salida interna del bucle
Ejemplo 323No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten interrumpir
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( numero )
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
si ( numero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 y nuacutemero ltgt 0 ) escribir( Suma acumulador ) fin
Obseacutervese que en este algoritmo siacute se contempla en la condicioacuten de salida del bucle la posibilidad de que el usuario teclee un cero en cuyo caso el bucle deja de iterar de forma naturalLos resultados por pantalla de este algoritmo son ideacutenticos a los del algoritmo anterior
Instruccioacuten ContinuarEn pseudocodigo para escribir una instruccioacuten de salto continuar se utiliza la sintaxis
La instruccioacuten de salto continuar siempre se usa para interrumpir (romper) la ejecucioacuten normal de un bucle Sin embargo el control del programa no se transfiere a la primera instruccioacuten despueacutes del bucle (como siacute hace la instruccioacuten interrumpir) es decir el bucle no finaliza sino que finaliza la iteracioacuten en curso transfirieacutendose el control del programa a la condicioacuten de salida del bucle para decidir si se debe realizar una nueva iteracioacuten o noPor tanto la instruccioacuten continuar finaliza (termina) la ejecucioacuten de una iteracioacuten de un bucle pero no la ejecucioacuten del bucle en siacute De forma que la instruccioacuten continuar salta (no ejecuta) las instrucciones que existan despueacutes de ella en la iteracioacuten de un bucle
Ejemplo 324 En el algoritmo siguiente se muestra como se puede utilizar la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables n a Tipo entero inicio a larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( n ) si ( n = 0 ) escribir( ERROR El cero no tiene opuesto ) continuar En el caso de que n sea un cero la iteracioacuten en curso del bucle se interrumpe aquiacute fin_si escribir( El opuesto es -n ) a larr a + n mientras ( n gt= -10 y n lt= 10 ) escribir( Suma a ) fin
Este corresponde a
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
1ordm) Pida por teclado un nuacutemero (dato entero)2ordm) Si el nuacutemero introducido por el usuario es distinto de cero muestre por pantalla el mensaje
El opuesto es lt-nuacutemerogt
En caso contrario muestre el mensaje ERROR El cero no tiene opuesto
3ordm) Repita los pasos 1ordm y 2ordm mientras que el usuario introduzca un nuacutemero mayor o igual que -10 y menor o igual que 104ordm) Muestre por pantalla la suma de los nuacutemeros introducidos por el usuario
La traza del algoritmo es
Secuencia
Accioacuten (instruccioacuten)
Valor de
a n1 a larr 0 0
Inicio de la iteracioacuten 12 escribir( Introduzca un nuacutemero entero ) 0 3 leer( n ) 0 24 (Comprobar si n = 0) 0 2
La condicioacuten de la alternativa simple es falsa
5 escribir( El opuesto es -n ) 0 -26 a larr a + n 2 2
Fin de la iteracioacuten 17 (Comprobar si n gt= -10 y n lt= 10) 2 2
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 2
8 escribir( Introduzca un nuacutemero entero ) 2 29 leer( n ) 2 0
10 (Comprobar si n = 0) 2 0La condicioacuten de la alternativa
simple es verdadera
11 escribir( ERROR El cero no tiene opuesto ) 2 0
12 continuar 2 0La 2ordf iteracioacuten se interrumpe (finaliza) aquiacute
El control del programa se transfiere (salta) a la
condicioacuten de salida del bucle13 (Comprobar si n gt= -10 y n lt= 10) 2 0
La condicioacuten del bucle es verdaderaInicio de la iteracioacuten 3
14 escribir( Introduzca un nuacutemero entero ) 2 015 leer( n ) 2 -5916 (Comprobar si n = 0) 2 -59
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
La condicioacuten de la alternativa simple es falsa
17 escribir( El opuesto es -n ) 2 59
18 a larr a + n -57 -59
Fin de la iteracioacuten 3
19 (Comprobar si n gt= -10 y n lt= 10) -57 -59
La condicioacuten del bucle es falsaEl bucle finaliza despueacutes de 3 iteracioacuten
20 escribir( Suma a ) -57 -59
La instruccioacuten continuar se ejecuta cuando el usuario introduce un cero interrumpiendo la iteracioacuten en curso pero el bucle solamente finaliza cuando la condicioacuten (n gt= -10 y n lt= 10) sea falsaNormalmente al igual que ocurre con la instruccioacuten interrumpir cuando en un bucle se utiliza una instruccioacuten continuar la ejecucioacuten de eacutesta tambieacuten se condicionaEn el ejemplo 3 la iteracioacuten en curso del bucle se interrumpe si es verdadera la condicioacuten (n = 0)
Ejemplo 325 No obstante el problema tambieacuten se puede resolver sin hacer uso de la instruccioacuten continuar
Nombre del algoritmo Nuacutemeros_opuestos_del_menos_10_al_mas_10Variables nuacutemero acumulador Tipo entero inicio acumulador larr 0 hacer escribir( Introduzca un nuacutemero entero ) leer( nuacutemero ) si ( nuacutemero = 0 ) escribir( ERROR El cero no tiene opuesto ) sino escribir( El opuesto es -nuacutemero ) acumulador larr acumulador + nuacutemero fin_si mientras ( nuacutemero gt= -10 y nuacutemero lt= 10 ) escribir( Suma acumulador ) fin
Unidad 4 Arreglos y Cadenas
Esta unidad tiene como objetivo analizar y aplicar las operaciones sobre arreglos y cadenas para la solucioacuten de problemas
Definicioacuten de Arreglo
1 Un arreglo es un conjunto finito e indexado de elementos homogeacuteneos que se referencian por un identificador comuacuten (nombre) La propiedad
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
indexado significa que el elemento primero segundo hasta el n-eacutesimo de un arreglo pueden ser identificados por su posicioacuten ordinal
2 Un arreglo es una coleccioacuten finita homogeacutenea y ordenada de elementos del mismo tipo
De manera formal se define un arreglo de tamantildeo n de los elementos de tipo A es un elemento del espacio n-dimensional del conjunto A es decir X es arreglo
de tamantildeo n del tipo A si y solo si n
Ambas definiciones reconocen los siguientes conceptos
Finita Todo arreglo tiene un liacutemite es decir debe determinarse cual seraacute el nuacutemero maacuteximo de elementos que podraacuten formar parte del arreglo
Homogeacutenea Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros todos booleanos etc) pero nunca una combinacioacuten de distintos tipos
Ordenada Se debe determinar cuaacutel es el primer elemento el segundo el tercero y el n-eacutesimo elemento
Caracteriacutesticas de los arreglos
Tienen un uacutenico nombre de variable que representa todos los elementos Contienen un iacutendice o subiacutendice los cuales diferencian a cada
elemento del arreglo Se pueden realizar ciertas operaciones como son recorridos
ordenaciones y buacutesquedas de elementos El nuacutemero total de elementos del arreglo (NTE) es igual al liacutemite superior
(LS) menos liacutemite inferior NTE = LS - LI + 1 El tipo de iacutendice puede ser cualquier tipo ordinal (caraacutecter entero
enumerado) El tipo de los componentes puede ser cualquiera (entero real cadena de
caracteres registro etc) Se utilizan [ ] para indicar el iacutendice de un arreglo Entre los [ ] se debe
escribir un valor ordinal (puede ser una variable una constante o una expresioacuten que deacute como resultado un valor ordinal)
Por tanto si un arreglo tiene n componentes la uacuteltima localidad estaacute dada por n como se muestra en la siguiente figura 41
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Figura 41 Representacioacuten de un Arreglo
En la Figura 42 es un arreglo llamado EDADES donde se almacenan las edades de un grupo de alumnos de la clase de Natacioacuten de la BUAP
Figura 42 Arreglo Unidimensional EDADES
Identifiquemos lo siguiente
EDADES es el nombre del arreglo EDADES[1] es el primer elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 1 cuya edad almacenada es 16 EDADES[10] es el uacuteltimo elemento del arreglo EDADES que hace
referencia al elemento de la posicioacuten 10 cuya edad almacenada es 25 1 2 3 n son los iacutendices o subiacutendices del arreglo (pueden ser
enteros no negativos variables o expresiones enteras) NTE= LS - LI + 1= 10-1+1=10 elementos
Clasificacioacuten de los arreglos
Los arreglos se clasifican en
Unidimensionales (Vectores) un soacutelo iacutendice Bidimensionales (Tablas o Matrices) dos iacutendices Multidimensionales maacutes de dos iacutendices
41 Arreglos unidimensionales
Un arreglo de una dimensioacuten o vector es un conjunto finito y ordenado de elementos homogeacuteneos
Se pueden representar como una lista o columna de datos del mismo tipo a los que colectivamente nos referimos mediante un nombre
Los arreglos unidimensionales deben cumplir lo siguiente
Liacutemite Inferior
EDADES
16 17 18 19 20 21 22 23 24 25 25
Limite Superior
EDADES[1] EDADES[2] EDADES[3] EDADES[4] EDADES[5] EDADES[6] EDADES[7] EDADES[8] EDADES[9] EDADES[10]
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Compuesto por un nuacutemero de elementos finito
Tamantildeo fijo el tamantildeo del arreglo debe ser conocido en tiempo de compilacioacuten
Homogeacuteneo todos los elementos son del mismo tipo
Son almacenados en posiciones contiguas de memoria cada uno de los cuales se les puede acceder directamente
Cada elemento se puede procesar como si fuese una variable simple ocupando una posicioacuten de memoria
Ejemplo 41 Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designaraacute por ese mismo nombre diferenciaacutendose uacutenicamente por su correspondiente subiacutendice
Los elementos del arreglo unidimensional PRECIO se representan con la siguiente notacioacuten PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[N]
Es decir todos los elementos pertenecen al mismo arreglo unidimensional llamado PRECIO y se referencian a traveacutes del subiacutendice que indica la posicioacuten que ocupan en el arreglo Dichos elementos se manipulan como variables individuales De esta manera se le puede asignar un valor a un elemento por ejemplo PRECIO [1]=155
En un arreglo unidimensional o vector se distinguen tres elementosa) Nombre del arreglob) Longitud o rango del arregloc) Subiacutendices del arreglo
A continuacioacuten se muestra el arreglo unidimensional Figura 43 identificando los tres elementos
155125142976545
155 125 142 97 65 45PRECIO[1]PRECIO[2]PRECIO[3]PRECIO[4]PRECIO[5]PRECIO[6]
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
En forma de Columna
En forma de Lista
155 125 142 97 65 45
Longitud=6
PRECIO =
a) Nombre del Arreglo
c)Subiacutendicess
PRECIO[1] PRECIO[2] PRECIO[3] PRECIO[4] PRECIO[5] PRECIO[6]
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Figura 41 Elementos del arreglo unidimensional
Definicioacuten de Arreglos
Un arreglo debe ser definido con un nombre la longitud (tamantildeo del arreglo) y su tipo de datos Para la definicioacuten de un arreglo utilizaremos la siguiente notacioacuten
Identificador_Arreglo= ARREGLO [Lim_infLim_sup] DE tipo_dato
DondeIdentificador_Arreglo Es el nombre del arreglo para reconocer a los elementosLim_inf es el primer elemento del arregloLim_supes el uacuteltimo elemento del arreglo para definir el nuacutemero de elementos que tendraacute el arregloTipo_dato se declara el tipo de datos para todos los elementos del arreglo
Ejemplos definiciones del arreglo
Sea un arreglo A de 5 elementos de tipo enteroA=ARREGLO [15] DE enteros
Sea un arreglo NUacuteMEROS de 4 elementos de tipo real
NUacuteMEROS=ARREGLO[14] DE reales
Sea un arreglo LETRAS de 3 elementos de tipo caracteres
LETRAS=ARREGLO[13] DE caracteres
Para referirse a cada elemento de un arreglo se utiliza su iacutendice El iacutendice es asignado generalmente por la posicioacuten que ocupa el elemento en el arreglo
Para el arreglo A [3 -6 1 24 8] y referirse al elemento uno del arreglo A se especifica la posicioacuten A[1]) siendo 3
El iacutendice puede ser obtenido mediante cualquier expresioacuten numeacuterica (enteros variables o expresiones enteras) que de coacutemo resultado un nuacutemero entero Cuando se usa una expresioacuten para obtener un iacutendice se debe garantizar que el resultado de la expresioacuten esteacute entre los liacutemites permitidos de los iacutendices para el arreglo
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Ejemplos
Si se tiene el arreglo NUacuteMEROS[42 00 -3376 197e-2] la variable i tiene el valor de uno (1) primera posicioacuten y la variable j tiene el valor de cuatro (4) ultima posicioacuten entonces
El elemento [i+j2] del arreglo es -3376 ya que al evaluar la expresioacuten da como resultado la posicioacuten 3
El elemento (j-3i) del arreglo es 42 ya que al evaluar la expresioacuten da como resultado la posicioacuten 1
El elemento (2i-j) del arreglo no existe ya que al evaluar la expresioacuten da como resultado ndash2 y esa posicioacuten no existe
Operaciones con Arreglos Unidimensionales
Las operaciones maacutes comunes que se pueden realizar con los arreglos son
bull Asignacioacutenbull Lectura bull Escriturabull Recorridobull Actualizacioacuten (insertar borrar modificar)bull Ordenacioacutenbull Buacutesqueda
Como los arreglos son datos estructurados muchas de estas operaciones se deben aplicar sobre cada elemento y no de manera global
Asignacioacuten
En general no es posible asignar directa un valor a todo el arreglo sino que se debe asignar el valor deseado a cada elemento La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subiacutendice que indica la posicioacuten se puede utilizar la siguiente forma
ltNombreVectorgt[subiacutendice] ltValorgt
Ejemplos
A es un arreglo de nuacutemeros enteros y se le asigna en la posicioacuten 1 el elemento
10 A[1]
PAIS es un arreglo de caracteres y se le asigna en la posicioacuten 2 el elemento
lsquoFranciarsquo PAIS[2] lsquoFranciarsquo
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
NUacuteMEROS es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 5 el
elemento 25 NUacuteMEROS[5]
PRECIO es un arreglo de nuacutemeros reales y se le asigna en la posicioacuten 3 el
elemento de la posicioacuten 2 +105 PRECIO[3] PRECIO[2]+105
No es posible asignar directamente un valor a todo el arreglo por lo que se realiza utilizando alguna estructura de repeticioacuten para recorrer cada posicioacuten del arreglo como son Para-Hasta-Hacer Mientras-Hacer Repite-Hasta como se muestra a continuacioacuten
Para i desde 1 Hasta N hacer
ARREGLO[i] valor
Fin_Para
bull Lectura
Este proceso de lectura de un arreglo consiste en leer un valor de cada elemento del arreglo y asignarlo a una variable La lectura se realiza de la siguiente manera
Para i desde 1 Hasta N hacer
x ARREGLO[i]
Fin_Para
Ejemplo
Leer los datos del arreglo A de longitud 20 y mostrarlos por pantalla uno a uno
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer
x ARREGLO[i]
Escribir(X)Fin_Para
Tambieacuten se puede leer de manera directa y escribir el elemento del arreglo
Escribir(lsquoLos valores del arreglo son lsquo)Para i desde 1 Hasta N hacer Escribir(ARREGLO[i])Fin_Para
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
bull Escritura
Consiste en asignarle un valor a cada elemento del arreglo
Para i desde 1 Hasta N hacer
ARREGLO[i] x
Fin_Para
bull Recorrido o Acceso Secuencial
Se accede a los elementos de un arreglo para introducir datos en eacutel (asignar valores oacute leer) y para ver su contenido (escribir) A la operacioacuten de efectuar una accioacuten general sobre todos los elementos de un vector se le denomina recorrido del vector
Estas operaciones se realizan utilizado estructuras repetitivas cuyas variables de control (por ejemplo i) se utilizan como subiacutendices del vector (por ejemplo A(i)) El incremento de la variable de control produce el tratamiento sucesivo e individual de los elementos del vector
Ejemplo Caacutelculo de la suma y promedio de los primeros 10 elementos enteros de un vector Z
InicioSuma larr 10
Para i larr 1 Hasta 10 HacerLeer(Z[i])
Fin_paraPara i larr 1 Hasta 10 Hacer
Suma larr Suma + Z[i]Fin_paraPromedio larr Suma10Escribir(Suma Promedio)
Fin
bull Actualizacioacuten
Dentro de esta operacioacuten se encuentran las operaciones de eliminar insertar y modificar datos Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo estaacute o no ordenado
Para arreglos ordenados los algoritmos de insercioacuten borrado y modificacioacuten son los siguientes
a) Insertar
Para insertar un elemento X en un arreglo A que encuentra ordenado debe verificarse que exista espacio
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Luego tendraacute que encontrase la posicioacuten en la que deberiacutea estar el nuevo valor para no alterar el orden del arreglo
Una vez detectada la posicioacuten se procederaacute a recorrer todos los elementos desde la misma hasta N-eacutesima posicioacuten un lugar a la derecha
Finalmente se asignaraacute el valor de X en la posicioacuten encontrada
Algoritmo Inicio
Si n lt Maacuteximo_elementos
i
Mientras (i leN) y (A[i] lt X)
i
Fin_mientrasSi (i gtN) o (A[i] gt X) entonces
Pos
Sino
Pos
Fin_Si
Si Pos gt 0 entoncesEscribir (lsquoEl elemento ya existersquo)
Sino
N
Pos
i
Repetir desde N hasta Pos+1
A[i]
I
Fin_Repetir
A[Pos] X
Fin_siSino
Escribir (lsquoNo hay espacio en el arreglorsquo)Fin_si
Fin
b) Eliminar Para eliminar un elemento X de un arreglo ordenado A debe verificarse que el
arreglo no este vaciacuteo sino no se puede realizar esta operacioacuten Si se cumple esta condicioacuten entonces tendraacute que buscarse la posicioacuten del
elemento a eliminar
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Buscando el elemento se recorre el arreglo hasta encontrar el elemento para eliminar
Algoritmo
InicioSi Ngt0 entonces
Leer X
i 1
Mientras (ilt=N) y A[i] lt X )
i i+1
Fin_mientrasSi (arreglo[i] gt X) o ( igtN) entonces
Pos 1
Sino
Pos 1
Fin_si Si Pos lt= 0 entonces
Escribir (lsquoEl elemento no existersquo) Sino
N
i
Repetir desde Pos hasta N
A[i]
I
Fin_Repetir Fin_si
SinoEscribir (lsquoEl arreglo esta vaciorsquo)
Fin_si Fin
c) Modificar El procedimiento es muy similar a la eliminacioacuten con la variante de que el
valor X se modificara por el valor Y teniendo en cuenta que el arreglo ordenado no se altere
Si esto sucede se debe reordenar el arreglo o bien primero se elimina el elemento y despueacutes se inserta
AlgoritmoInicio
Si Ngt=1 entonces
i 1
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
encontrado falso
Mientras iltN y encontrado = falso hacerSi arreglo[i]=valor entonces
arreglo[i] valor _ nuevo
encontrado verdadero
sino
i i+1
Fin_siFin_Mientras
Fin_siFin
42 Aplicaciones sobre arreglos unidimensionales
421 Buacutesquedas en Arreglos
Una buacutesqueda es el proceso mediante el cual podemos localizar un elemento con un valor especiacutefico dentro de un conjunto de datos Terminamos con eacutexito la buacutesqueda cuando el elemento es encontrado
A continuacioacuten veremos el algoritmo de la buacutesqueda maacutes simple
Buacutesqueda Secuencial
A este meacutetodo tambieacuten se le conoce como buacutesqueda lineal y consiste en empezar al inicio del conjunto de elementos e ir a traveacutes de ellos hasta encontrar el elemento indicado oacute hasta llegar al final de arreglo
Este es el meacutetodo de buacutesqueda maacutes lento pero si nuestro arreglo se encuentra completamente desordenado es el uacutenico que nos podraacute ayudar a encontrar el dato que buscamos
Algoritmo de Buacutesqueda Secuencial
Para i desde 1 hasta N hacer Si(a[i]= b) entonces
Escribir lsquoValor encontradorsquo Sino
Escribir lsquoValor no encontradorsquo Fin_si
Fin_Para
Ejemplo 43 Desarrollar un algoritmo para buscar el elemento ldquoManzanardquo dentro del arreglo FRUTAS Imprimir si se encuentra o no y dado el caso su posicioacuten
InicioEncontrado = Falso
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Lectura del valor a buscarLeer(fruta)Buacutesqueda del valor en el arregloPara i larr 1 Hasta 10 HacerSi FRUTAS[i] = fruta entonces
Encontrado Verdadero
Posicioacuten i
Fin_siFin_para Notificacioacuten de los resultados de la buacutesquedaSi Encontrado = Verdadero EntoncesEscribir(lsquoFruta encontrada en la posicioacuten lsquo posicion)Sino
Escribir(lsquoFruta no encontradalsquo)Fin_si
Fin
Ejemplo 44 Desarrollar un algoritmo que busque el elemento mayor de un arreglo A de tamantildeo n de nuacutemeros reales
Inicio Asignamos el primer elemento del arreglo A para iniciar la buacutesqueda y encontrar el elemento mayor
x A[1]
i 1
Mientras (iltn ) hacersi (x lt A[i]) entonces
x A[i]
Fin_si
i i + 1
Fin_mientrasEscribir (lsquoEl elemento mayor buscado esrsquo)Escribir (A[i])
Fin
422 Ordenamiento en Arreglos
El ordenamiento de un arreglo es la organizacioacuten de los valores de los elementos del arreglo de acuerdo a un criterio especiacutefico
Esta operacioacuten es importante en los arreglos ya que permite que sus elementos esteacuten ordenados de forma ascendente o descendente para poder llevar otra operacioacuten como la buacutesqueda de manera maacutes faacutecil
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Vamos a revisar dos meacutetodos de ordenacioacuten lo maacutes sencillos
1 Ordenacioacuten por Burbuja2 Ordenacioacuten de Seleccioacuten
Ordenacioacuten por Burbuja
Es el meacutetodo de ordenacioacuten maacutes utilizado por su faacutecil comprensioacuten y programacioacuten pero es importante sentildealar que es el maacutes ineficiente de todos los meacutetodos Este meacutetodo consiste en llevar los elementos menores a la izquierda del arreglo oacute los mayores a la derecha del mismo seguacuten el tipo de ordenacioacuten La idea baacutesica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre siacute hasta que todos se encuentren ordenados
Algoritmo de BurbujaInicio
i 1
Mientras i lt N hacer
Para j i+1 hasta jlt N hacer
Si arreglo[i] gt arreglo[j] entonces
aux arreglo[i]
arreglo[i]) arreglo[j])
arreglo[j]) aux
Fin_siFin_Para
i i +1
Fin_mientrasFin
Ejemplo 45
Realizaremos la ordenacioacuten de los siguientes elementos 638452 utilizando el Algoritmo de Burbuja
Primera Pasada
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Ordenamiento por Seleccioacuten
Este meacutetodo consiste en encontrar el elemento maacutes pequentildeo de la lista y colocarlo en la primera posicioacuten luego se encuentra el siguiente elemento maacutes pequentildeo y se lleva a la segunda posicioacuten Se continuacutea el proceso hasta llegar a la posicioacuten penuacuteltima del vector
Para obtener el elemento maacutes pequentildeo se compara el primer valor con cada uno de los restantes y cada vez que se encuentra un valor maacutes pequentildeo se intercambian los valores
Ejemplo 45
Inicio Encontrar la posicioacuten del menor valor se utilizan dos iacutendices J para el elemento fijo y K para recorrer los elementos que se comparan
InicioPara J larr 1 Hasta 4 Hacer
Para K larr J + 1 Hasta 5 HacerSi Num[K] lt Num[PosMenor] Entonces Intercambiar valores en el vector
aux Num[J]Num[J] 1048773 Num[k]Num[k] 1048773 aux
Fin_siFin_ Para
Fin_ParaFin
Segunda Pasada
Tercera Pasada
Cuarta Pasada
Quinta Pasada
Arreglo ordenado
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
43 Manejo de cadenas
Una cadena es un conjunto de caracteres incluido el espacio en blanco por ejemplo tenemos ldquoholardquo ldquo123vbrdquo ldquov bgrdquo Generalmente una cadena va encerrada entre comillas (ldquo rdquo)
La longitud de una cadena es el nuacutemero de caracteres que contiene Una cadena vaciacutea es la que no tiene ninguacuten caraacutecter y se representa como ldquordquo Una constante de tipo cadena es un conjunto de caracteres vaacutelidos encerrados entre comillas por ejemplo ldquonumero1rdquo ldquoamp $rdquo Una variable de cadena es aquella cuyo contenido es una cadena de caracteres por ejemplo cadena=rdquouna cadenardquo str=rdquo-2356rdquo El uacuteltimo caraacutecter de la cadena marca el fin de la cadena en este caso utilizaremos el caraacutecter lsquo0rsquo para denotar fin de cadena
Operaciones baacutesicas con cadenas Asignacioacuten
ApellidoszligrdquoJuarezrdquo Entrada Salida
Leer(nombre estado_civil)Escribir(nombre apellido)
Para el caacutelculo de la longitud de una cadena se da el nuacutemero de caracteres que hay en una cadena que estaacute entre comillas incluyendo los espacios en blanco
Para la comparacioacuten de cadenas se comparan caracteres o cadenas de caracteres para ver si son iguales o no Seguacuten el coacutedigo ASCII hay un orden de caracteres asiacute A es menor que C debido a que el valor de ldquoArdquo es 65 y el de ldquoCrdquo es 67 ademaacutes de que las letras mayuacutesculas son distintas de las minuacutesculas y de la ldquoArdquo a la ldquoZrdquo estaacute antes que la ldquoardquo ya que el valor de ldquoardquo es 97 y de la ldquoArdquo es 65 en como ya se habiacutea mencionado y se termina hasta la ldquoZrdquo con el valor de 90
La concatenacioacuten se define como la unioacuten de varias cadenas de caracteres en una sola conservando el orden de los caracteres de cada una de ellasCuando se combinan dos cadenas con el operador de concatenacioacuten la segunda cadena se agregaraacute directamente al final de la primera En coacutedigos postales y nuacutemeros telefoacutenicos se suele usar caracteres ya que no se necesita operar los nuacutemeros y asiacute podemos usar el guioacuten
La extraccioacuten de subcadenas es una subcadena que es una porcioacuten de la cadena original
La buacutesqueda de informacioacuten consiste en buscar una subcadena o cadena dentro de otra mayor Nos devuelve el nuacutemero de la posicioacuten donde inicia la cadena buscada -1 si no la encuentra
Encontrar el punto medio este nos devuelve la mitad de la posicioacuten de la cadena
Truncar cadenas se pretende quedarse con los primeros n caracteres de la cadena eliminando el resto de los caracteres
Convertir cadenas a nuacutemeros o viceversa esto funciona cuando los caracteres son diacutegitos y lo que se pretende es que esa cadena de diacutegitos se convierta en su respectivo valor numeacuterico
Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra Invertir el orden de una cadena
Ejemplo 46El siguiente algoritmo sustituye las e por
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
InicioEscribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si str[i] = `eacute entonces str[i] = `acuteFin_si
Fin_desdeEscribir (str)
Fin
Ejemplo 47El siguiente algoritmo imprime una cadena de manera invertida
InicioEscribir (escriba una palabra)Leer (str)Para i=len(str) hasta 1 con decrementos hacer
Escribir (str[i])Fin_para
Fin
Ejemplo 48El siguiente algoritmo realiza lo siguiente dada una cadena en minuacutesculas la convierte en mayuacutesculasInicio
Escribir (escriba una palabra)Leer (str)Para i=1 hasta len(str) hacer
Si lsquoarsquolt=str[i]lt=rsquozrsquo entonces Valor(str[i])szlig Valor(str[i])+32Fin_si
Fin_paraFin
Ejemplo 49El siguiente algoritmo verifica si la cadena que se introdujo es una cadena de lsquo1rsquo y lsquo0rsquo esto es un nuacutemero binario
InicioEscribir (escriba la cadena)Leer (str)es_binszligtruePara i=1 hasta len(str) hacer
Si str[i]nersquo1rsquo o str[i] nersquo0rsquo entonces es_binszlig falseFin_si
Fin_paraSi es_bin=true entonces Escribir (ldquoes un nuacutemero binariordquo)Sino Escribir (ldquono es un nuacutemero binariordquo)Fin_si
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Fin
Actividades41 Obtenga la longitud de una cadena42 Concatene dos cadenas43 Compare dos cadenas y diga cual cadena esta antes que la otra44 Dadas dos cadenas diga si la primera cadena es subcadena de la otra45 Dada una cadena y un nuacutemero n el cual debe ser menor a la longitud de la cadena trunque la cadena devolviendo los primeros n caracteres46 Dada una cadena y un caraacutecter diga cuantas veces se repite dicho caraacutecter se
repite dentro de la cadena47 Dada una cadena y dos caracteres sustituya cada instancia en la cadena del
primer caraacutecter por el segundo48 Dada una cadena separarla por palabras esto es tomando en consideracioacuten el
espacio imprimir en pantalla cada palabra en renglones distintos por ejemplo sea cad=rdquohola a todo el mundordquo en pantalla se presentaraacute
ldquoholardquo ldquoardquo ldquotodordquoldquoelrdquoldquomundordquo
49 Dada una cadena comprobar si es un paliacutendromo
44 Arreglos bidimensionales
Hasta estos momentos hemos visto arreglos unidimensionales (una sola dimensioacuten) los cuales se manejan con un soacutelo subiacutendice sin embargo existen tambieacuten arreglos multidimensionales los cuales tienen mas de una dimensioacuten y en consecuencia maacutes de un iacutendice Los arreglos que maacutes se utilizan son los de dos dimensiones conocidos tambieacuten por el nombre de arreglos bidimensionales o matrices Aunque en esta seccioacuten no se estudiaraacuten los arreglos de maacutes de dos dimensiones debemos saber que es posible crear arreglos de tantas dimensiones como requieran sus aplicacionesEmpezaremos por definir que son los arreglos bidimensionales
Definicioacuten Los arreglos bidimensionales son aquellos que tienen dos dimensiones y en consecuencia se manejan con dos iacutendices se puede ver tambieacuten como un arreglo de arreglos Un arreglo bidimensional equivale a una tabla con muacuteltiples filas y muacuteltiples columnas (Fig 42)
0 1 2 3 4
Figura 42 Arreglo bidimensional de 3 filas y 5 columnas
123 25 56 3 45
32 44 56 45 67
23 100 56 48 67
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
En la figura anterior tendriacuteamos 15 posiciones 3x5 (El nuacutemero de 3 filas por el nuacutemero de 5 columnas) La sintaxis para la declaracioacuten de un arreglo bidiimensional es
lttipo_de_datogt ltidentificador_del_arreglogt [Dimensioacuten_fila] [Dimensioacuten_columna]
Para el arreglo bidimensional de la Figura 42 su declaracioacuten seria Int Datos [3] [5]
441 Acceso a los elementos de un arreglo bidimensional
Para acceder a los elementos de un arreglo bidimensional deben especificarse tanto el iacutendice de la fila como el iacutendice de la columna
La sintaxis correcta para la insercioacuten y extraccioacuten de elementos es la siguiente
Insercioacuten
lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt] = valor del elemento
En donde el valor del elemento a insertar debe ser del mismo tipo que la matriz Observar que todos los elementos dentro de un arreglo bidimensional tendraacuten el mismo tipo de dato
Extraccioacuten
ltvariablegt = lt identificador_del_arreglo gt [ltiacutendice_filagt] [ltiacutendice_columnagt]
Ejemplos de Insercioacuten
La asignacioacuten de valores al arreglo bidimensional de la Figura 42 en la columna 0 fue
Datos [0] [0] = 123
Datos [1] [0] =32
Datos [2] [0] = 23
Ejemplos de extraccioacuten de valores
valor1 = Datos [0] [2]
valor2 = Datos [1] [2]
valor3 = Datos [2] [2]
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Para el ejemplo de la Fig 42 los 3 valores de la columna 3 son 56 por lo que al extraer los valores del arreglo bidimensional el valor de las variables valor1 valor2 y valor3 seraacuten los mismos equivalente a 56
442 Acceso a elementos de un arreglo bidimensional mediante ciclos anidados
Generalmente el acceso a un arreglo bidiomensional es recorrieacutendolo por filas y cada fila a su vez por columnas por lo que la forma maacutes comuacuten de realizar esto es por medio del uso de ciclos anidados
Ejemplo
Recorrer el arreglo bidimensional de la figura 42
Para (IndiceFila = 0 IndiceFila lt 3 ++IndiceFilas)
Para (IndiceCol = 0 IndiceCol lt 5 ++IndiceCol)
Procesar el elemento Datos [IndiceFila] [IndiceCol]
Fin Para
Fin Para
Ejemplo 411
Dado un arreglo bidimensional determinar la posicioacuten [ i ] [ j ] del valor mayor
Solucioacuten
Se utilizan las siguientes variablesENTERO DATOS [3][5]ENTERO filaENTERO columnaENTERO mayorENTERO posicion_filaENTERO posicioacuten_columna
AlgoritmoPaso 1 INICIOPaso 2 PARA fila = 0 HASTA 2 INCREMENTO 1
PARA columna = 0 HASTA 4 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)LEER (DATOS[fila][columna])
FIN_PARAFIN_PARA
Paso 3 Mayor = A[1][1] Posicioacuten_fila = 1 Posicioacuten_columna = 1
Paso 4 PARA fila = 0 HASTA 2 INCREMENTO 1PARA columna = 0 HASTA 4 INCREMENTO 1
SI (A[fila][columna] gt mayor) ENTONCESMayor = A[fila][columna]
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Posicioacuten_fila = [fila]Posicioacuten_columna = [columna]
FIN_SIFIN_PARA
FIN_PARAPaso 5 ESCRIBIR (ldquoEl mayor es mayorrdquo)
ESCRIBIR (ldquoLa posicioacuten esposicioacuten_fila Posicioacuten_columnardquo)
Paso 6 FIN
Ejemplo 412
Leer una matriz de 10X10 elementos y generar un vector con los elementos que esteacuten por encima de la diagonal principal Informar el vector generado
SolucioacutenLa diagonal principal esta formada por los elementos en los cuales coincide el nuacutemero de fila con el nuacutemero de columna si tenemos una matriz como la siguiente 0 1 2 3
Observamos que el elemento a esta en la fila 0 columna 0 El elemento b esta en la fila 0 columna 1 El elemento f esta en la fila 1 columna 1 el elemento ldquoordquo esta en la fila 3 columna 2 etc Por lo que los elementos que se encuentran en la diagonal son ldquoardquo (fila 0 columna 0) ldquofrdquo (fila 1 columna 1) ldquokrdquo (fila 2 columna 2) y ldquoprdquo (fila 3 columna 3) por lo que es faacutecil ver los elementos que se encuentran por encima de la diagonal principal es decir los que su numero de columna es mayor al nuacutemero de fila para el ejemplo serian ldquob (fila 0 columna 1) c (fila 0 columna 2) ldquodrdquo (fila 0 columna 3) ldquogrdquo (fila 1 columna 2) h (fila 1 columna 3) y ldquolrdquo (fila 2 columna 3)Utilizaremos las siguientes variables
ENTERO MATRIZ [4][4]ENTERO VECTOR [4]ENTERO filaENTERO columnaENTERO k
Algoritmo
Paso 1 INICIOPaso 2 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1ESCRIBIR (ldquoIntroduce un numerordquo)
a b c d
e f g h
i j k l
m n o p
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
LEER (MATRIZ[fila][columna])FIN_PARA
FIN_PARAPaso 3 k= 1 Paso 4 PARA fila = 0 HASTA 3 INCREMENTO 1
PARA columna = 0 HASTA 3 INCREMENTO 1SI ( columna gt fila) ENTONCES
VECTOR [k] = MATRIZ[fila][columna]k = k+1
FIN_SIFIN_PARA
FIN_PARAPaso 5 PARA k =0 HASTA 3 INCREMENTO 1 ESCRIBIR (VECTOR[k])
Paso 6 FIN
Actividades Desarrollar
410 Un algoritmo que almacene nuacutemeros en una matriz de 5 x 6 Imprimir la suma de los nuacutemeros almacenados en la matriz
411 Un algoritmo que llene una matriz de 7 x 7 Calcular la suma de cada rengloacuten y almacenarla en un vector la suma de cada columna y almacenarla en otro vector
412 Un algoritmo que llene una matriz de 5 x 5 y que almacene la diagonal principal
en un vector Imprimir el vector resultante 413 Un algoritmo que llene una matriz de 10 x10 y que almacene en la diagonal
principal unos y en las demaacutes posiciones ceros 414 Un algoritmo que llene una matriz de 6 x 8 y que almacene toda la matriz en un
vector Imprimir el vector resultante 415 Un algoritmo que llene una matriz de 5 x 6 y que imprima cuantos de los
nuacutemeros almacenados son ceros cuantos son positivos y cuantos son negativos
Unidad 5 Disentildeo Modular
51 Introduccioacuten
Para comprender la programacioacuten modular es importante describir la siguiente analogiacutea
Suponga que la sentildeora Juanita prepara memelas en un lugar cercano al zoacutecalo de la Ciudad Ella sola realiza el conjunto de tareas que implican preparar memelas es
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
decir pica cebollas muele la salsa en la licuadora friacutee las tortillas vierte salsa sobre las tortillas revisa que esteacuten en su punto ademaacutes cobra y devuelve cambio Todas estas actividades las realiza una sola persona
Si hablamos de programacioacuten los programas que soacutelo tienen la funcioacuten principal son como la sentildeora Juanita que realizan un conjunto de tareas secuencialmente lo cual hace maacutes complicada su legibilidad y mantenimiento
Regresando a la analogiacutea la sentildeora ahora contrata un cierto nuacutemero de personas para ayudarle en el proceso de elaboracioacuten de memelas A cada sentildeora le es encomendada una tarea o funcioacuten Cuando alguna de las sentildeoras contratadas termina su tarea eacutesta informa a la sentildeora Juanita que ha terminado y le devuelve el resultado de su tarea Cuando todas las sentildeoras han terminado su tarea el problema complejo de elaborar memelas ha concluido El problema fue dividido entre varias sentildeoras para su realizacioacuten eacutestas fueron coordinadas por la sentildeora Juanita que indica el orden de realizacioacuten de las tareas
En la programacioacuten modular el problema complejo es dividido en subproblemas maacutes pequentildeos o maacutes faacuteciles de resolver Cada problema se resuelve por una funcioacuten o modulo Una vez que cada modulo resuelve su tarea el problema complejo ha sido resuelto en su totalidad [2]
Si alguacuten subproblema auacuten es demasiado complejo eacuteste es dividido a su vez en subproblemas y asiacute sucesivamente Observemos el siguiente diagrama para ilustrar lo anterior
Figura 51 Divisioacuten de problemas en subproblemas
52 Conceptos de moacuteduloa) Es un conjunto de instrucciones o sentencias que resuelven una tarea
especifica al cual se hace referencia por medio de un nombre Eacuteste puede invocarse varias veces en un programa
b) Es un proceso con cierto grado de independencias del modulo principal (programa principal)
c) Es un subprograma que resuelve una parte del problema
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
d) El concepto de modulo tiene varias acepciones dependiendo del lenguaje de programacioacuten subrutinas (Basic y Fortran) procedimientos y funciones (Pascal y Delphi Ada etc) funciones o meacutetodos (C++ Java y C)
Declaracioacuten de un moacutedulo
Los moacutedulos tienen un formato bien definido para su utilizacioacuten
Tiene un tipo de retorno Tiene un nombre o identificador Puede tener o no lista de paraacutemetros (elementos de comunicacioacuten con el
modulo principal) Tiene un cuerpo o conjunto de instrucciones que resuelven una tarea
especifica Pueden o no devolver un valor del alguacuten tipo de dato baacutesico estructurado o
definido por el usuario
Esquemaacuteticamente podemos observar el formato de un moacutedulo como el siguiente
Esquema 52 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo [2]
Los elementos del formato de un moacutedulo que se encuentran entre corchetes indican que son opcionales es decir podemos prescindir de ellos La lista de paraacutemetros aparece despueacutes de nombrar al moacutedulo y siempre se encuentra delimitada por los pareacutentesis el nuacutemero de paraacutemetros van desde 0 hasta n
Estos paraacutemetros se les denominan paraacutemetros formales mientras que cuando se realiza el llamado del moacutedulo desde cualquier otro a estos paraacutemetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecucioacuten
En particular un moacutedulo puede ser de dos tipos funciones o procedimientos las funciones se caracterizan porque siempre devuelven un valor mientras que los procedimientos pueden devolver 01 o n valores en forma de lista de paraacutemetros
Caracteriacutesticas que deben tener los moacutedulos
a) Deben esta jerarquizadosb) Deben ser pequentildeos y sencillosc) Deben ocultar los detalles poco importantes a moacutedulos superiores en jerarquiacutead) Debe usar tantos moacutedulos de maacutes baja jerarquiacutea como sea necesario para
cumplir con el modo b)e) Deben usar estructuras de datos y control adecuados para cumplir con el punto
b)
[ Tipo ] Nombre del modulo (tipo param1 tipo param2hellip tipo paramn)InicioSentencia 1Sentencia 2Sentencia n[ Devolver ( expresioacuten ) ]FinModulo
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
f) Deben ser legibles es decir que no solo el autor pueda entenderlos sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programacioacuten
53 Ventajas de la modularidad
El uso de modularidad para disentildear programas tiene varias ventajasa) Disminuye la complejidad del problema a resolverb) Aumenta la legibilidad y confiabilidadc) Disminuye costos computacionalesd) Se obtiene un mejor control del proyectoe) Se pueden agregar nuevos moacutedulosf) Facilita el mantenimiento
La programacioacuten modular se representa por medio de bloques donde cada uno hace referencia a un modulo En la representacioacuten esquemaacutetica se manifiesta la comunicacioacuten entre el moacutedulo principal y los moacutedulos secundarios
El modulo principal coordina a todos los demaacutes moacutedulos Debe ser claro y conciso y reflejar los elementos fundamentales del problema
54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
El proceso de subdivisioacuten del problema complejo en subproblemas maacutes faacuteciles de resolver consiste en la comprensioacuten total del problema y posteriormente se procede a la subdivisioacuten de eacuteste en partes maacutes pequentildeas
Se llevan a cabo las siguientes fases para la modularizacioacuten1) Se realiza un anaacutelisis del problema considerando las especificaciones del
mismo (comprensioacuten del problema)2) Se forma un primer modulo enunciando el problema en teacuterminos de la solucioacuten
a eacuteste3) Se toma este moacutedulo y se busca la forma de dividirlo en otro moacutedulos maacutes
pequentildeos que ejecuten tareas o funciones especificas4) Se repite el paso 3) para cada moacutedulo nuevo definido hasta llegar a un nivel
de detalle adecuado es decir hasta que cada moacutedulo ejecute una tarea especifica que este claramente definida y que el disentildeo de la loacutegica del mismo resulte faacutecil (utilizando pseudocoacutedigo)
5) Se realizan pruebas de escritorio parciales a cada moacutedulo para asegurarse que eacutestos realizan correctamente su tarea especifica
6) Se realiza una prueba de integracioacuten en la que se consideran todos los moacutedulos asiacute como el moacutedulo principal
7) Si es el caso se codifican los moacutedulos en un lenguaje de programacioacuten iniciando desde los moacutedulos del nivel maacutes inferior en la estructura jeraacuterquica de la solucioacuten
55 Llamada a los moacutedulos
Variables globales locales y paraacutemetros
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
En el disentildeo modular participan tres tipos de variables que reciben su nombre dependiendo de su aacutembito de operacioacuten
Las variables globales son aquellas que se definen o declaran fuera del moacutedulo principal y tienen efecto en todos los moacutedulos Esto es una variable global puede ser modificada en cualquier moacutedulo incluido el principal
Las variables locales son las que se definen dentro de un moacutedulo y son distintas a las que se definen en otros moacutedulos a pesar de que pueden tener el mismo nombre El contexto de estas variables es el moacutedulo donde se declaran fuera de eacutestos no son reconocidas o vaacutelidas
Los paraacutemetros son un mecanismo de comunicacioacuten o intercambio de informacioacuten entre los moacutedulos inclusive el moacutedulo principal Se relacionan de acuerdo a su posicioacuten y el tipo de dato asociado
Existen dos tipos de paraacutemetros
Por Valor Son constantes el valor en siacute mismo de los datos que se enviacutean como argumentos en la invocacioacuten o llamada al moacutedulo la cual se realiza escribiendo uacutenicamente el dato del moacutedulo y sus paraacutemetros en el caso de que tenga
Una caracteriacutestica de los paramentos por valor es que eacutestos copian sus valores en los argumentos de los moacutedulos Al finalizar la llamada del moacutedulo los paraacutemetros no se ven modificados no alteran su valor
Por referencia son variables es copia de la referencia o localidad de memoria donde se encuentran los datos que se enviacutean como argumentos en la invocacioacuten La caracteriacutestica de estos paraacutemetros es que son modificados dentro del moacutedulo en el cual fueron invocados Con el uso de paraacutemetros por referencia un moacutedulo puede devolver maacutes de un valor al moacutedulo principal o a los moacutedulos que lo invoquen
Moacutedulos predefinidos por el sistema (funciones)
Existen algunos moacutedulos definidos por defecto en el sistema los cuales se pueden clasificar dependiendo de la funcioacuten de eacutestos Para el uso de estos moacutedulos solamente debemos invocarlos mediante su nombre y paraacutemetros agregando previamente la libreriacutea donde se encuentran definidos La libreriacutea contiene a un conjunto de moacutedulos que se pueden utilizar Estos moacutedulos pueden ser matemaacuteticos caraacutecter cadena etc
Por ejemplo la libreriacutea matemaacutetica contiene los moacutedulos entre otros [2]
Funcioacuten Descripcioacutenexp(x) exponencial de x x es entero o realln(x) logaritmo neperiano de x x es entero o
realraiz2(x) raiacutez cuadrada de x x es entero o realseno(x) Seno de x x es entero o realredondeo(x) redondea x x es real
Tabla 51 Divisioacuten de problemas en subproblemas
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Ejemplo 51
Si deseas calcular la raiacutez cuadrada de un nuacutemero podemos realizar las siguientes operaciones
Esquema 51 Sintaxis de la declaracioacuten de un moacutedulo en pseudocoacutedigo
55 Ejemplos de programacioacuten modular
Ejemplo 51 Circunferencia
Elaborar un algoritmo modular para calcular el aacuterea periacutemetro y diaacutemetro de una circunferencia de radio R
Paso 1 Se consideran los datos de entrada salida y procesos para realizar los caacutelculos que resuelven el problemaDatos de entrada Radio RDatos de salida
Area = PiRR Periacutemetro= 2PiR Diaacutemetro = 2R
Paso 2
Paso 3 El problema puede ser dividido en los siguientes moacutedulos
En este caso no es necesario seguir dividiendo los moacutedulos en submoacutedulos
Circunferencia(Principal)
Circunferencia(Principal)
Aacuterea Periacutemetro Diaacutemetro
Leer xReal r = raiz2( x ) calcula la raiacutez cuadrada de xEscribir r
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Paso 4 Disentildear la loacutegica de programacioacuten de cada modulo iniciando desde los moacutedulos de nivel mas inferior
Real Area (real R) declaracioacuten del moacuteduloInicio
Real a a=PiRR
Regresar( a)FinModulo
Real Perimetro(real R)Inicio
Real p p=2PiR
Regresar( p)FinModulo
Real Diametro(real R)Inicio
Real d d=2R
Regresar( d)FinModulo
Circunferencia (Principal)Inicio
Real radio APDEscribir ldquoIngrese radiordquoLeer radioA= Area( radio) llamada del moduloP= Perimetro( radio)D= Diametro( radio)Escribir ldquo El area es = ldquo AEscribir ldquo El perimetro es = ldquo PEscribir ldquo El Diametro es = ldquo A
FinModulo
Paso 5 Realizar pruebas de escritorio a cada modulo individualmentePaso 6 Realizar pruebas de escritorio integrando todos los modulo
Ejemplo 52
Coeficiente Binomial Algoritmo modular para calcular el coeficiente binomial definido como
C(n k ) = n k (n ndash k )
Anaacutelisis Datos n kProcesos Factorial de un nuacutemero y C(nk)
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
Real Factorial (real n)Inicio
Real f=1Entero iPara i= 1 hasta n hacer
f = f ifinpararegresar(f)
FinModulo
Real CoefBin( real n real k)InicioRegresar( factorial(n) (factorial(k) factorial (n-k))FinModulo
Nada CoeficienteBinomial( Principal )Inicio
Real n kLeer n kEscribir ldquo Coeficiente Binomial =ldquo CoefBin(n k )
FinModulo (Principal)
CoeficienteBinomial
CoeficienteBinomial (Principal)
CoefBin
Factorial
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-
- I1 Introduccioacuten
- iquestQueacute es un problema
- iquestQueacute es la resolucioacuten de problemas
- 12 Teacutecnicas o estrategias para resolucioacuten de problemas
-
- Hacer preguntas
- 121 Divide y vencer (divide y venceraacutes)
- 122 Meacutetodo de bloques de construccioacuten
- 123 Analogiacutea
- 123 Buscar cosas que son familias
- 124 Anaacutelisis de medios y fines
- 125 Combinar Soluciones
- 311 Reglas para la construccioacuten de diagramas de flujo
-
- 32 Pseudocoacutedigo
-
- 321 Caracteriacutesticas del pseudocoacutedigo
-
- Las estructuras de repeticioacuten permiten la ejecucioacuten de una lista o secuencia de instrucciones (ltbloque de instruccionesgt) en varias ocasiones El nuacutemero de veces que el bloque de instrucciones se ejecutaraacute se puede especificar de manera expliacutecita o a traveacutes de una condicioacuten loacutegica que indica cuaacutendo se ejecuta de nuevo y cuaacutendo no A cada ejecucioacuten del bloque de instrucciones se le conoce como una iteracioacuten
-
- 52 Conceptos de moacutedulo
-
- Declaracioacuten de un moacutedulo
-
- Caracteriacutesticas que deben tener los moacutedulos
- 53 Ventajas de la modularidad
- 54 Proceso de modularizacioacuten (ldquodivide y venceraacutesrdquo)
-
- Variables globales locales y paraacutemetros
- Moacutedulos predefinidos por el sistema (funciones)
- 55 Ejemplos de programacioacuten modular
-