unidad 2 elementos básicos para el desarrollo de …mrodriguez/version2libro1... · web view15.5...

96
Unidad 1. Resolución de problemas I.1 Introducción Todos los días resolvemos problemas, aún sin ser consiente de esto. Comúnmente tenemos que definir el problema, decidir con que información necesitamos trabajar y cuales deben ser los resultados esperados. En particular, los ingenieros en ciencias de la computación son resolvedores o solucionadores de problemas computacionales. El Ingeniero en Computación (ver figura 1) es un profesional que diseña, implanta y desarrolla soluciones computacionales integradas, lo que implica la elaboración de planes, el desarrollo de sistemas y la adaptación de nuevas tecnologías en su campo de acción profesional y laboral. En el ámbito computacional obtener una solución, muchas veces, implica escribir un programa. El proceso de programar lo podemos ver resumido en la figura 1.1. Este proceso se encuentra dividido en dos fases principales: Fase de resolución de problemas o Análisis y especificación: Entendimiento (definición) del problema e identificación de cual debe ser la solución. o Solución general (algoritmo): Especifica los objetos (elementos) y sus interacciones para resolver el problema o Verificación: Sigue los pasos exactamente para ver si la solución realmente resuelve el problema.

Upload: others

Post on 19-Apr-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

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