UNIVERSIDAD TECNOLÓGICA DEL PERÚ
Vicerrectorado de Investigación
ALGORITMO Y ESTRUCTURA DE DATOS I TINS Básicos INGENIERÍA ELECTRÓNICA, INGENIERÍA MECATRÓNICA
TEXTOS DE INSTRUCCIÓN BÁSICOS (TINS) / UTP
Lima - Perú
UNIVERSIDAD TECNOLÓGICA DEL PERÚ
Vicerrectorado de Investigación
ALGORITMO Y ESTRUCTURA DE DATOS I TINS Básicos INGENIERÍA ELECTRÓNICA, INGENIERÍA MECATRÓNICA
TEXTOS DE INSTRUCCIÓN BÁSICOS (TINS) / UTP
Lima - Perú
Algoritmo y Estructura Estructura de Datos I
© ALGORITMO Y ESTRUCTURA DE DATOS I Desarrollo y Edición:
Vicerrectorado de Investigación
Elaboración del TINS:
• Ing. F. Manuel Urruchi Pariachi • Ing. Javier Barriga Hoyle
Diseño y Diagramación:
Julia Saldaña Balandra
Soporte académico:
Instituto de Investigación
Producción:
Imprenta Grupo IDAT
Queda prohibida cualquier forma de reproducción, venta, comunicación pública y transformación de esta obra.
2
Algoritmo y Estructura Estructura de Datos I
“El presente material contiene una compilación de obras de Algoritmos y Estructura de Datos publicadas lícitamente, resúmenes de los temas a cargo del profesor; constituye un material auxiliar de enseñanza para ser empleado en el desarrollo de las clases en nuestra institución. Éste material es de uso exclusivo de los alumnos y docentes de la Universidad Tecnológica del Perú, preparado para fines didácticos en aplicación del Artículo 41 inc. C y el Art. 43 inc. A., del Decreto Legislativo 822, Ley sobre Derechos de Autor”.
3
Algoritmo y Estructura Estructura de Datos I
4
Algoritmo y Estructura Estructura de Datos I
PRESENTACIÓN El presente texto elaborado en el marco de desarrollo de la Ingeniería, es un material de ayuda instruccional, para las carreras de Ingeniería de: Electrónica, Mecatrónica y Telecomunicaciones, para la Asignatura de Algoritmos y Estructura de Datos I.
Plasma la iniciativa institucional de innovación de la enseñanza-aprendizaje educativo universitario, que en acelerada continuidad promueve la producción de materiales educativos, educativos, actualizados en concordancia a las exigencias de estos tiempos.
Esta
primera
edición
apropiadamente
recopilada,
de
diversas
fuentes
bibliográficas, de uso frecuente en la enseñanza de Algoritmos, está ordenada en función del sillabus de la Asignatura, arriba mencionada.
La conformación del texto ha sido posible gracias al esfuerzo y dedicación académica de los Profesores Ing. F. Manuel Urruchi Pariachi e Ing. Javier Barriga Hoyle; contiene los siguientes capítulos cuyas descripciones descripciones genéricas son como sigue:
Capítulo I: Conceptos fundamentales de algoritmos. Se dan los conceptos fundamentales con los cuales se comienza a desarrollar los algoritmos más simples, ejercitando el control secuencial usando diagramas de flujo y pseudocódigo. Capítulo II: Estructuras algorítmicas de control selectivo. El alumno enfrenta la posibilidad de cambiar el flujo de los algoritmos; esta selección es simple, doble y múltiple Capítulo III: Estructuras algorítmicas de control repetitivas. El alumno puede explotar su capacidad de cómputo al controlar repeticiones de procesos que requieren que se evalúen variables con un grado pequeño de cambio y permiten resolver problemas con alto nivel de procesamiento Capítulo IV: Subrutinas algorítmicas. El alumno empieza a conceptualizar la llamada programación modular permitiéndose
5
dividir los algoritmos complejos en
Algoritmo y Estructura de Datos I
unidades más pequeñas llamadas subalgoritmos que luego se usarán con la dirección de un algoritmo principal Capítulo V: Recursividad. El alumno usa la matemática del concepto de recursividad para manejar procesos repetitivos de una manera implícita Capítulo VI: Estructuras de datos: Arreglos. Se inicia el conocimiento de una estructura que enriquece el manejo de números y datos para el tratamiento más simple de los algoritmos. Capítulo VII: Estructuras de datos: Registros o estructuras. Se profundiza en la creación de nuevos tipos de datos que a su vez hacen el tratamiento de una manera más sencilla de los algoritmos,
ingresando a una complejidad algorítmica
impulsando las soluciones creativas a los problemas.
Cerrar estas líneas de presentación, obliga a reconocer el trabajo acusioso de los profesores que han contribuido al acopio de temas y a la revisión del presente texto.
LUCIO HERACLIO HUAMÁN URETA Vicerrector de Investigación
6
Algoritmo y Estructura de Datos I
INDICE Capítulo I Conceptos fundamentales de Algoritmos........................................
11
Capítulo II Estructuras Algorítmicas de Control Selectivas...............................
43
Capítulo III Estructuras Algorítmicas de Control Repetitivas .............................
69
Capítulo IV Subrutinas Algorítmicas ..................................................................
99
Capítulo V Recursividad ...................................................................................
125
Capítulo VI Estructura de Datos: Arreglos .........................................................
139
Capítulo VII Estructura de Datos: Registros o Estructuras ................................
169
Bibliografía
187
...................................................................................
7
Algoritmo y Estructura de Datos I
8
Algoritmo y Estructura de Datos I
DISTRIBUCIÓN TEMÁTICA Clase N° 1
Tema
Semana
CAPITULO I CONCEPTOS FUNDAMENTALES DE ALGORITMOS Nociones de algoritmo Programas Lenguaje de programación
1
Tipos de datos y Estructuras de un programa 2
3
4
5
6
Estructura de algoritmos Tipos de datos simples Estructura de un programa Contadores, acumuladores, interruptores
Estructuras de control, tipos
2
3
Estructuras de control secuencial Ejercicios resueltos
CAPITULO II ESTRUCTURAS ALGORÍTMICAS DE CONTROL SELECTIVA Estructura de control selectivo simple Estructura de control selectivo doble Ejercicios resueltos
Estructura selectiva múltiple Estructura de control selectivo múltiple Ejercicios resueltos
CAPITULO III ESTRUCTURAS ALGORÍTMICAS DE CONTROL REPETITIVAS
4
5
Estructura de control de repeticiones repetir mientras Diagrama de flujo, pseudocódigo, contadores, acumuladores, interruptores
6
7
Ejercicios de control de repeticiones repetir mientras
7
8
Estructura de control de repeticiones repetir con
8
9
Repaso – Nivelación
9
10
EXAMEN
Ejercicios resueltos
PARCIAL
9
10
Algoritmo y Estructura de Datos I
Clase N°
Tema
Semana
CAPITULO IV SUBRUTINAS ALGORITMICAS 11
Programación modular Variables locales y globales Funciones declaración Paso de parámetros Ejercicios resueltos
11
Procedimientos 12
Procedimientos Declaración Paso de parámetros Ejercicios resueltos
12
CAPITULO V RECURSIVIDAD 13
14
15
16
17
Concepto Tipos, directa e indirecta Ejercicios resueltos
CAPITULO VI ARREGLOS
13
ESTRUCTURAS
DE
DATOS: 14
Concepto, tipos Arreglos unidimensionales Ejercicios resueltos
Arreglos bidimensionales.
15
Concepto, declaración y acceso Ejercicios resueltos
CAPITULO VII ESTRUCTURAS REGISTROS O ESTRUCTURAS Concepto, declaración y acceso Ejercicios resueltos
Cadenas de caracteres
DE
DATOS: 16
Concepto, declaración y acceso
17
18
Repaso Nivelación
18
19
EXAMEN FINAL
Ejercicios resueltos
19
10
Algoritmo y Estructura de Datos I
CAPITULO I
CONCEPTOS FUNDAMENTALES DE ALGORITMOS
Nociones de algoritmos, programas, lenguaje de programación Carácter universal de los algoritmos
Los seres humanos realizamos e interiorizamos una serie o conjunto de acciones, pasos, para lograr alcanzar un resultado, concluir una tarea determinada por lo general con fines o propósitos previamente definidos, desde las tareas cotidianas mas comunes hasta las tareas técnicas cuya complejidad es tal que nos sometemos a un intenso aprendizaje y entrenamiento al haber elegido profesiones que nos permitan desarrollar competencias adecuadas y desenvolvernos en esta era del conocimiento. La palabra "algoritmo" deriva del nombre latinizado del gran matemático árabe Abu Abdullah Muhammad bin Musa al-Khwarizmi , el cual escribió entre los años 800 y 825 su obra Quitab Al Jabr Al Mugabala, donde se recogía el sistema de numeración hindú y el concepto del cero. Fue Fibonacci, el que tradujo su obra al latín y la inició con las palabras: Algoritmi dicit. Carácter Formal de los algoritmos
Una de los aparatos mas requeridos por los humanos hoy en día es la computadora u ordenador que permite la mejora de nuestra: Capacidad de computo: Calculo, medición vía instrumentos virtuales, control vía
interfaces inteligentes, procesamiento de información. Capacidad en el desarrollo de múltiples tareas: Laborales y de entretenimiento vía
las herramientas de diseño asistido por computadora CAD, la ofimática y la multimedia. Capacidad de comunicación: Por el acceso a Internet y redes inalámbricas.
Son las ciencias de la computación (informática) la disciplina científica encargada de sistematizar el dominio de los algoritmos para luego estas puedan ser aplicados a la solución de problemas mediante el uso de la computadora. Programas. Diferencia entre el lenguaje algorítmico y el informático.
El lenguaje algorítmico es aquel que usa modelos textuales o símbolos gráficos por medio del cual se transcribe una rutina de procedimientos resultado de un análisis previo del problema a resolver y encontrar un método que permita resolverlo. U n a r u t i n a o a l g o r i t m o s e d e n o m i n a n a l c o n j u n t o d e t o d a s l as o p e r a c i o n e s a realizar, y el orden en el que deben efectuarse, para lograr un objetiv o o resolver un p roblema.
El lenguaje informático llamado lenguaje de programación es el medio por el cual dicho algoritmo se codifica a un sistema de instrucciones que puedan ser ejecutados por el ordenador o computadora resultando lo que se denomina un programa. Este tipo 11
Algoritmo y Estructura de Datos I
de lenguaje es más cercano a la máquina que al ser humano y podemos distinguir distintos tipos dependiendo de la proximidad a la maquina. Se denomina lenguaje de alto nivel aquel que es más cercano a la comprensión humana y lenguaje de bajo nivel a aquellos que con buen conocimiento de los componentes hardware permiten hacer códigos que serán ejecutados por la máquina. U n p r o g r a m a es e l c o n j u n t o d e i n s t r u c c i o n e s o c o m a n d o s q u e u n a a u n a e n u n o r d e n s e c u e n c i a l d e c o d i f i c a y e j e c u t a l a c o m p u t a d o r a p a r a a l c a n za r u n r e s u l t ad o o reso lver un pro blem a específico .
Lenguaje de programación.
Los lenguajes de programación se construyen con un campo de la ciencias de la computación denominado teoría de compiladores y estos a su ves son los que generan los lenguajes de programación es decir el diseño y desarrollo de un compilador define un determinado lenguaje de programación Los compiladores tienen tres componentes, el escáner, el parser, y el sintetizador. El escáner, o analizador léxico, es el componente que clasifica cada instrucción y los somete a un diccionario nos dice si hay expresiones escritas incorrectamente. El parser o analizador sintáctico, es el componente que verifica el orden adecuado de las instrucciones de un programa, nos avisa si hay alguna incoherencia en la secuencia de las instrucciones El sintetizador, es el modulo que genera el código binario que será ejecutado por el ordenador o computadora. Hay dos tipos de compiladores, los compiladores intérpretes y los compiladores traductores. Compiladores intérpretes, son los que requieren la permanencia del compilador para que se ejecuten las instrucciones de un programa por que se ejecutan una a una en la computadora por ejemplo Quikbasic, Prolog, Smaltalk, Java Compiladores traductores, son los que generan un programa binario enteramente ejecutable por la computadora sin requerir el compilador para su ejecución, por ejemplo Ensamblador, Fortran, Pascal, Delphi, C, C++ En las carreras de ingeniería como electrónica y mecatrónica se estudian los lenguajes de bajo nivel como el ensamblador, un lenguaje en la frontera de uno de bajo nivel y de alto nivel como es el lenguaje C es tan potente y rápido, pues las funciones principales representan las funciones más básicas del ordenador, un lenguaje como Java con programación orientada a objetos, LabView orientado a desarrollar instrumentos virtuales, Lenguajes de descripción de hardware VHDL.
12
Algoritmo y Estructura de Datos I
Resolución de problemas por computadora fases Resolución del problema por algoritmos
Planteamientos de Problemas. Lo que pretende un algoritmo es sintetizar de alguna forma una tarea, cálculo o mecanismo antes de ser trascrito al ordenador. Los pasos que hay que seguir son los siguientes: Análisis previo del problema. Primera visión del método de resolución. Descomposición en módulos Búsqueda de soluciones parciales. Ensamblaje de solución final. Verificación de la solución final. Síntesis de etapas en al solución de problemas.
PROBLEMA
ANALISIS
DISEÑO
VERIFICACION
DEL
DEL
DEL
PROBLEMA
ALGORITMO
ALGORITMO
Figura 1. Etapas de la solución de un problema usando algoritmos
13
Algoritmo y Estructura de Datos I
Síntesis de etapas de análisis de problemas.
ANALISIS DEL PROBLEMA
DEFINICION
ESPECIFICACIONES
ESPECIFICACIONES
DEL
DE
DE
PROBLEMA
ENTRADA
SALIDA
Figura 2. Etapas de la solución de un problema usando algoritmos
Módulos principales del diseño de un algoritmo
ALGORITMO
DATOS
PROCESAMIENTO
IMPRESION
DE
DE LOS
DE
ENTRADA
DATOS
RESULTADO
Figura 3. Módulos o secciones de un algoritmo
14
Algoritmo y Estructura de Datos I
Resolución de problemas por computadora fases Resolución del problema por computadora
Síntesis de etapas en al solución de problemas.
PROBLEMA
DISEÑO
CONSTRUCION
VERIFICACION
DEL
DEL
DEL
ALGORITMO
PROGRAMA
PROGRAMA
Figura 4. Etapas de la solución de un problema usando programas
15
Algoritmo y Estructura de Datos I
Construcción del programa.
PROGRAMA FUENTE
ESCANER
COMPILADOR
PARSER
SINTETIZADOR
V HAY ERRORES AL COMPILAR
F
PROGRAMA OBJETO
LINKEADOR O ENLAZADOR
MONTADOR
PROGRAMA EJECUTABLE Figura 5. Etapas de la construcción de un programa. 16
Algoritmo y Estructura de Datos I
Herramientas de programación
Se conoce como herramientas de programación el estudio de los algoritmos y su diseño usando pseudocódigo o diagramas de flujo También se refiere al estudio de algún lenguaje donde se implementaran dichos algoritmos, para desarrollarlos necesitamos conocer los tipos de datos, identificadores, constantes, variables, expresiones aritméticas, lógicas, de relación, funciones, etc. Tipos de datos
Tipos de datos, se clasifican en: Simples llamados también estándar, primitivas vinculado a una casilla (grupo de
direcciones de memoria que permiten almacenar información) Estructurados conjunto de datos simples agrupados y / o con propiedades vinculado
aun grupo de casillas Los tipos de datos estándar son: Datos numéricos: Enteros (Su contenido será un número entero) -
-
315
1024
Reales
(Su contenido será un número real) 1.41 3.14 156.4 -12.5
9.8
-200
14530
-1537
Datos alfanuméricos Carácter (Su contenido será un carácter alfanumérico) -
-
´a´
´C´
Cadena
(Su contenido será un conjunto de caracteres) “&&&” “Lima” “UTP” “Peru”
“pqr”
¨&¨
¨%¨
´9´
Datos Lógicos (Su valor indica un hecho cierto o falso)
X
true (verdadero, uno lógico: 1) ó Y
false (falso, cero lógico: 0)
Existen variantes de las anteriores y otros tipos de datos tales como byte, word, dbyte, dword, etc. Que son más encaminadas a la programación profesional. Variables, Constantes, expresiones, funciones, identificadores. Variables
Porción o casilla de memoria donde se guarda un valor el cual puede cambiar durante la ejecución de una rutina o algoritmo Las variables se caracterizan por poseer una jerarquía que viene definida por el número de bytes que se asignan para cada una. Así un carácter posee un longitud de un byte, (donde se almacena un número al que se le ha asociado mediante la norma ASCII) sin embargo un entero por lo general posee dos bytes. Sería lógico pensar que una variable entera contuviera a un carácter y de hecho esto puede ser así, sin embargo el mezclar tipos de variables es impropio de una programación ordenada y elegante. Es decir, no se debe mezclar tipos de variables a no ser que 17
Algoritmo y Estructura de Datos I
se produzca a través de una función de conversión de tipos (convertir un entero a una cadena y viceversa). Constantes
Porción o casilla de memoria donde se guarda un valor el cual no puede cambiar durante la ejecución de una rutina o algoritmo Las constantes se declaran después de la cabecera y antes de las variables. Expresiones
Son combinaciones de constantes, variables, símbolos de operación y nombres de funciones especiales. Se basan en la notación matemática clásica Operador de Asignación (
)
Sirve para asignar valores a las variables Variable valor; Ejemplo: 1. x 10; 2. Tecla ’ w’ 3. a a + 10; 4. a a*10; Comentarios en un Algoritmo o Programa
Como regla general, cada vez que crea un algoritmo debe de asegurarse de incluir comentarios para explicar el proceso que se realiza. Comentario de varias líneas usando la pareja { y }, como se muestra a continuación: { Esto es una prueba de un comentario de varias líneas en algoritmos. El programador los ignorara por completo al transcribir el código del programa }. Comentario de una línea, para eso se usa la doble diagonal (//)Ejemplo: Entero A // Se esta declarando una variable A de tipo entera Operadores Aritméticos
Hay seis operadores aritméticos básicos Operador
** + * / div (/) mod (%)
Propósito
Potencia Suma Resta Multiplicación División División entera Módulo
18
Ejemplo
2**3 5 + 25 12 – 9 13.5 * 90.8 2.9 / 1.4 7 div 2 = 3 7 mod 2 = 1
Algoritmo y Estructura de Datos I
Jerarquía de las operaciones aritméticas Operador
Jerarquía
** * / mod div + -
Mayor Menor
Operación
Potencia Multiplicación, división, modulo, división entera Suma, Resta
Ejemplo de expresiones aritméticas:
a.
5 + 9 * 4 – 18 / 3 1 5 + 36 – 18 / 3 2 5 + 36 – 6 3 41 – 6 4 35
Funciones
Son operaciones especiales que se requieren para significar algunas funciones matemáticas u operaciones de entrada y salida de datos Identificadores
Es el nombre que se la da a una casilla de memoria es decir a una constante, a una variable, aun tipo de dato, a una función, etc. Reglas para asignar identificadores
Estas varían según el lenguaje de programación a.
El primer carácter de un identificador debe ser una letra
b.
Los demás caracteres pueden ser letras, números o el carácter especial guión bajo ´_´
c.
La longitud máxima de un identificador es 32 en la mayoría de los lenguajes de programación, aunque los límites dependen de cada lenguaje, se recomienda usar identificadores en promedio o alrededor de siete caracteres
Estructuras de un algoritmo, acumuladores, interruptores
estructura
de
un
programa,
contadores,
Algoritmos U n al g o r i t m o e s el c o n j u n t o d e p a s o s q u e e s p e c i f i c an l a s e c u e n c i a d e operaciones o el orden de acciones que deben seguirse para alcanzar un r e s u l t ad o o r e s o l v e r u n p r o b l e m a e s p e c i f ic o .
19
Algoritmo y Estructura de Datos I
Características de los algoritmos:
Los algoritmos son independientes del lenguaje de programación y de la computadora donde vaya hacer implementado para ejecutarse Todo algoritmo debe ser: Preciso, es decir indicar el orden en el que ha de realizarse cada paso a. b. Definido, se debe obtener el mismo resultado cada vez que se ejecute con las mismas especificaciones de entrada Finito, debe terminar en algún momento o debe tener un número finito de c. pasos Formas de escribir un algoritmo
Dos son las más comunes: Diagrama de flujo y pseudocódigo Diagrama de flujo u organigrama. Diagrama de flujo : Técnica especializada para representar algoritmos mediante el uso
de las figuras, las cuales se une mediante flechas denominadas líneas de flujo que indican el orden en que se deben ejecutar. Es una representación semigráfica del algoritmo en cuestión. Esto nos facilita la visión descriptiva de la ejecución del algoritmo, así como la generación de la traza del algoritmo. Se denomina traza de un algoritmo a la ejecución manual de un programa obteniendo para cada paso un resultado. Símbolos generales: Inicio y Fin de la rutina o algoritmo. Operaciones de
entrada/salida (I/O), aritméticas y lógico-aritméticas. Decisiones lógicas. Flujo de la ejecución. Reglas para la construcción de los diagramas de flujo:
a. b. c. d. e. f. g. h.
Todo diagrama de flujo debe tener un inicio y un fin Las líneas utilizadas para indicar la dirección del flujo deben ser rectas, horizontales, verticales. No inclinadas ni cruzadas La conexión de las líneas deben llegar a un símbolo La construcción del diagrama es de arriba abajo y de izquierda ha derecha La notación debe ser independiente del lenguaje de programación Es conveniente usar comentarios en una tarea compleja Usar los conectores adecuados si el diagrama requiere más de una hoja No puede llegar más de una línea a un símbolo
Símbolos utilizados en los diagramas de flujo
Símbolo utilizado para marcar el inicio y el fin del diagrama de flujo. Símbolo utilizado para introducir los datos de entrada. Expresa lectura.
20
Algoritmo y Estructura de Datos I
Símbolo utilizado para representar un proceso. En su interior se expresa asignaciones, operaciones aritméticas, cambios de valor de celdas en memoria Símbolo utilizado para representar una decisión. En su interior se almacena una condición, y dependiendo del resultado de la evaluación de la misma se sigue por una de las dos ramas. Este símbolo se utiliza en la estructura selectiva simple y doble; en las estructuras repetitivas, repetir mientras y repetir con. Símbolo utilizado para representar una decisión múltiple. En su interior se almacena un selector y dependiendo del valor de dicho selector se sigue por una de las ramas o caminos. . Símbolo utilizado representar conexión entre páginas diferentes. Símbolo utilizado para representar la impresión de un resultado. Expresa escritura. Símbolo utilizado para expresar un módulo de un problema o subrutina Símbolo utilizado para representar la dirección del flujo del diagrama. Símbolo utilizado para expresar un módulo de un problema o subrutina.
Pseudocódigo
Es la manera más usada de escribir las rutinas o algoritmos Composición de algoritmos como pseudocódigo
Los algoritmos están compuestos por diferentes partes, unas relacionadas íntimamente con las otras, de tal forma que muchas veces la no existencia de una provocaría una confusión en el mismo. Por ello es muy importante el saber las partes principales en las que se divide los algoritmos y saber cuales son esenciales y cuales no. Existen muchas propuestas de reglas de hacer algoritmos usando pseudocódigos, proponemos la siguiente estructura: 21
Algoritmo y Estructura de Datos I
Estructura General
a. Cabecera. Tipo: Nombre del algoritmo b. {Comentarios} c. Inicio. d. {Sección de datos} e. Sección de código. 1. Subrutina x 2. Subrutina y f. Cuerpo principal 3. Acción a 4. Acción b 5. Acción c … n-1 Acción z g. Fin n. Fin a.
b. c. d.
e.
f.
g.
necesario opcional opcional necesario opcional
← ← ← ← ←
necesario
←
opcional
←
Cabecera: Al comenzar cualquier algoritmo, este debe ser bautizado, de tal forma que tan solo leer la cabecera sepamos cual va a ser su propósito. Carácter: Tipo de algoritmo Rutina, algoritmo principal Subrutina, subalgoritmo procedimiento o subalgoritmo función Nombre: Debe referir al objetivo del algoritmo {Comentarios: Notas de los datos de entrada y salida, que hace la rutina o algoritmo} Inicio: Inicio del algoritmo Sección de datos: {Tipos de datos, Variables o constantes} Declaración de tipos de datos de variables. Esta parte es esencial para cualquier algoritmo que trabaje con variables. En esta sección se va a declarar cuales son las variables con las que vamos a trabajar y cuales son sus tipos. El tipo de variables define el contenido de ésta, es decir, indica cual va a ser el propósito de la variable. Se puede usar para principiantes y diferenciar constantes y variables: {Constante; PI 3.1416: Real Variables; r, Ac, Lc: Reales} También es mas común la forma si solo existen variables: {Entero: i, j, k Real: r, Ac, Lc} Sección de código: Es esta sección, la que se puede considerar como el corazón del algoritmo. En ella van los procedimientos, las funciones y el cuerpo del programa, dentro de los cuales van las sentencias que indican los pasos a realizar por el programa. Cuerpo de la rutina principal. El cuerpo de la rutina principal o bloque del programa es como el centro neurálgico del algoritmo o programa, desde él, se controla las entradas a los procedimientos y funciones principales (aunque estos pueden llamar a otros procedimientos y funciones secundarios). Fin: Fin del algoritmo
22
Algoritmo y Estructura de Datos I
Estructura Sintetizada
a. Cabecera. Tipo: Nombre del algoritmo b. {Sección de datos} c. Cuerpo principal 1. Acción a 2. Acción b 3. Acción c … n Acción z Ejemplo 1. Haga el algoritmo que permita calcular el área y la longitud de una
circunferencia de radio r Solución: Pseudocódigo: Principal: CIRCUNFERENCIA {El algoritmo, dado el radio r de una circunferencia calcula el área Ac y la longitud Lc de la misma} Inicio {Constante; PI 3.1416: Real Variables; r, Ac, Lc: Reales} 1. Escribir “Ingrese radio” 2. Leer r 3. Hacer Ac PI * r * r 4. Hacer Lc 2 * PI * r 5. Escribir “El área de la circunferencia es”, Ac 6. Escribir “La longitud de la circunferencia es”, Lc 7. Fin En el algoritmo anterior se observa la declaración de constantes y variables después de la cabecera, que es el orden que debe seguirse en la elaboración de un algoritmo y en un programa informático.
23
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Inicio Constante PI 3.1416 Ac, Lc, r: Reales
“Ingrese r”
Leer r
Ac PI * r *r Lc 2 * PI * r Escribir Ac, Lc
Fin Verificación o traza de un algoritmo Datos de entrada R 10 20 30
Datos de salida Ac 314.16 1256.64 2827.44
Lc 62.832 125.664 188.496
Contadores
Los procesos repetitivos requieren contar con acciones internas, una forma de hacerlo es mediante un contador. Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante encada repetición. La forma de construir un contador es:
24
Algoritmo y Estructura de Datos I
Principal: MUESTRA_CONTADOR Inicio { Variable; cont: entero } 1. Hacer cont 1 2. Repetir mientras (cont <= 4) hacer 2.1 cont cont + 1 Fin de hacer 3. Escribir “El contador indica el numero de repeticiones es”, cont-1 4. Fin Acumuladores
Un acumulador o totalizador es una variable cuya función es almacenar cantidades resultantes de operaciones sucesivas. Realiza la misma función que un contador con la diferencia de que el incremento o decremento es variable en vez de constante. La forma de construir un acumulador es: Principal: MUESTRA_ACUMULADOR Inicio { Variable; cont, acum., valor: entero } 1. Hacer cont 1 2. Hacer acum. 0 3. Repetir mientras (cont < = 4) hacer 3.1 acum cont + valor 3.1 cont cont + 1 Fin de hacer 3. Escribir “El acumulador indica el total almacenado es”, acum 4. Fin Interruptores
Un interruptor o bandera o conmutador es una variable que puede tomar un de dos valores (verdadero o falso) a lo largo de la ejecución de un algoritmo y permite comunicar información de una parte a otra del mismo Principal: MUESTRA_INTERRUPTOR Inicio { Variable; cont, int, valor: entero } 1. Hacer cont 1 2. Hacer int 0 3. Repetir mientras (cont < = 4) hacer 3.1 Leer valor 3.2 Si (valor<0) entonces 3.2.1 Hacer int 1 Fin de si 3.3 cont cont + 1 Fin de hacer 4. Si (int = 1) entonces Escribir “Se ingreso un numero negativo” Fin de si 5. Escribir “El interruptor indica si se ingreso al menos un numero negativo” 6. Fin
25
Algoritmo y Estructura de Datos I
Estructuras de control, tipos Programación estructurada
La evolución de las metodologías de construir programas a los que los compiladores deben responder es decir crear lenguajes ha ido evolucionando en el tiempo desde un sistema llamado no estructurado, pasando por el método estructurado, ampliado por el método orientado a objetos, y otras tendencias contemporáneas. Pero todas se fundamentan en algunos principios de la programación estructurada que desde los aportes de Edsgar Dijkstra ha orientado por nuevos rumbos. Principios de la programación estructurada
Se basa en la incorporación de las técnicas siguientes: a. Diseño descendente (top – down) b. recursos abstractos c. estructuras básicas Tipos de estructuras de control
En lo que concierne a esas estructuras básicas tenemos: 1. Estructura de control secuencial (acorde con la arquitectura de las computadoras, Von Neuman) 2. Estructura de control de selección (para el control de flujo alternativo y tomar el control de decisión del flujo de programa) 3. Estructura de control de repetición (para controlar procesos que requieran replicaciones necesarias de cierta parte de la rutina o programa ) Estructuras de control secuencial
Estructuras de control secuencial La estructura de control secuencial es el pilar de todo algoritmo y esta fundamentado por la arquitectura de las computadoras personales cuya unidad central de proceso provoca el proceso secuencial de ubicación de la instrucción en la memoria, llevar la instrucción al registro decodificador que especifica los procesos para ejecutarla la instrucción y al unidad de control del microprocesador que secuencializarla cada paso para cumplir la ejecución terminada busca otra instrucción en la memoria, todo esto a una velocidad fantástica del orden de millones de instrucciones por segundo Elementos de una estructura secuencial en Pseudocódigo
Principal: Nombre del algoritmo {} Inicio {} 1. Escribir “Ingrese datos” 2. Leer datos 3. Hacer proceso 1 4. Hacer proceso 2 5. Escribir “El resultado 1 es” 6. Escribir “El resultado 2 es” 7. Fin
26
Algoritmo y Estructura de Datos I
Elementos de una estructura secuencial en diagrama de flujo
Inicio Declaración de variables
“Ingrese datos”
Leer datos
Hacer proceso 1 Hacer proceso 2 Escribir resultados
Fin
27
Algoritmo y Estructura de Datos I
EJERCICIOS RESUELTOS
1.
Hacer un algoritmo para calcular el área de un triángulo dada la base y la altura.
Solución: Pseudocódigo: Principal: AREA_TRIANGULO {Dados la base b y la altura h calcula el área del triangulo Ar} Inicio: {Variables:
Ar, b, h; reales} 1. Escribir “ingrese la base:” 2. leer b 3. Escribir“ Ingrese la altura” 4. Leer h 5. Ar /(b*h)/2 6. Escribir “El área del triangulo”,Ar
7. Fin Diagrama de flujo:
Inicio Ar, b, h: Reales
“Ingrese b y h”
Leer b y h
Ar b * h / 2
Escribir Ar
Fin 28
Algoritmo y Estructura de Datos I
2.
Hacer un algoritmo que lea un número y escriba su cuadrado
Solución: Pseudocódigo: Principal: CUADRADO_NUMERO {Dados un número x calcula el cuadrado del mismo} Inicio {Variables: x; real} 1. Escribir “Ingrese el número” 2. Leer x 3. Escribir “El número al cuadrado es”, x*x 4. Fin Diagrama de flujo:
Inicio x: Real
“Ingrese x”
Leer x
Escribir x*x
Fin
29
Algoritmo y Estructura de Datos I
3.
Hacer un algoritmo para determinar el volumen de un cilindro cuyas dimensiones radio y altura se llenen desde el teclado.
Solución: Pseudocódigo: Principal: VOLUMEN_CILINDRO {Dados el radio y la altura del un cilindro calcula el volumen del mismo} Inicio {Variables: Vc, r, h; reales} 1. Escribir “Introducir el radio de la base en centímetros” 2. Leer r 3. Escribir “Introducir la altura del cilindro” 4. Leer h 5. Vc h * r * r * 3.1416 6. Escribir “EL volumen del cilindro es:”, Vc 7. Fin Diagrama de flujo:
Inicio
Vc, r, h: Reales
“Ingrese r y h”
Leer r y h
Vc h * r * r *3.1416
Escribir Vc
Fin 30
Algoritmo y Estructura de Datos I
4.
Hacer un algoritmo para determinar la hipotenusa de un triángulo si se ingresa las longitudes de los catetos.
Solución: Pseudocódigo: Principal: HIPOTENUSA_TRIANGULO {Dados catetos a y b de un triangulo calcula la hipotenusa h del mismo} Inicio {Variables: a. b. h; reales} 1. Escribir “Introducir el primer cateto” 2. Leer a 3. Escribir “Introducir el segundo cateto” 4. Leer b 5. h (a * a + b * b) ** 0.5 6. Escribir “La hipotenusa del triangulo será”, h 7. Fin Diagrama de flujo:
Inicio a, b, h: Reales
“Ingrese a , b”
a, b
h (a * a + b * b) ** 0.5
Escribir h
Fin 31
Algoritmo y Estructura de Datos I
5.
Hacer un algoritmo para que se ingresen 2 números y reporte su suma, resta y multiplicación.
Solución: Pseudocódigo: Principal: SUMA_RESTA_MULTIPLICACION {Dados dos nùmero a y b calcula la suma resta y multiplicaciòn} Inicio {Variables:
x, y; reales} 1. Escribir “Ingrese el primer numero” 2. Leer x 3. Escribir “Ingrese el segundo numero” 4. Leer y 5. Escribir “La suma es: La resta es: La multiplicación es: “ x+y, x-y, x*y
6. Fin Diagrama de flujo:
Inicio x, y: Reales
“Ingrese x, y”
x, y
x+y, x-y, x*y
Fin
32
Algoritmo y Estructura de Datos I
6.
Hacer un algoritmo para calcular el perímetro, el área y la diagonal de un rectángulo si se ingresan los dos lados.
Solución: Pseudocódigo: Principal: PERIMETRO_AREA_DIAGONAL_RECTANGULO {Dados la base y la altura de un rectángulo calcula el perímetro, el área y al diagonal del mismo} Inicio {Variables: p, a, d, b, h; reales} 1. Escribir “Introduzca la base:” 2. Leer b 3. Escribir “Introduzca la altura:” 4. Leer h 5. p 2 * (b+h) 6. a b*h 7. d (h*h + b*b) ** 0.5 8. Escribir “El perímetro será: El área será: Su diagonal será:”, p, a, d 9. Fin Diagrama de flujo:
Inicio b,h,p,a,d: Reales
“Ingrese b,h”
b,h p 2 * (b + h) a b*h d (h*h + b*b) ** 0.5 Escribir p, a, d Fin 33
Algoritmo y Estructura de Datos I
7.
Hacer un algoritmo para que se ingrese una temperatura en grados centígrados (°C) y la reporte en grados Fahrenheit (°F). F = 9/5 C + 32
Solución: Pseudocódigo: Principal: CENTIGRADO_A_FAHRENHEIT {Dado la temperatura en grados centígrados c calcula en grados Fahrenheit f} Inicio {Variables: c,f; reales} 1. Escribir “Introduzca la temperatura en grados 2. Centígrados” 3. Leer c 4. f (9/5)*c-32 5. Escribir “La temperatura en grados Fahrenheit es: “,f 6. Fin Diagrama de flujo:
Inicio c, f: Reales
“Ingrese c”
Leer c
f (9/5)*c-32
Escribir f
Fin
34
Algoritmo y Estructura de Datos I
8.
Hacer un algoritmo para convertir metros a pies y pulgadas. Metro = 39.37 pulgadas, 1 metro = 3.2 pies.
Solución: Pseudocódigo: Principal: METROS_A_PIES_PULGADAS {Dados una medida en metros calcula en pies y pulgadas} Inicio {Variables: a,b,c; reales} 1. Escribir “Introduzca la medida en metros” 2. Leer a 3. b a*39.37 4. c a*3.2 5. Escribir “La medida en pulgadas es: La medida en pies es: “, b, c 6. Fin
Inicio
Diagrama de flujo:
a, b, c: Reales
“Ingrese a”
Leer a
b a*39.37 c a*3.2 Escribir b, c
Fin
35
Algoritmo y Estructura de Datos I
9.
Hacer un algoritmo que intercambie el valor de 2 variables numéricas.
Solución: Pseudocódigo: Principal: INTERCAMBIO_DE_DOS_VARIALBLES {Dados dos números x , y invierte la valores de los mismos} Inicio {Variables: x, y, z; reales} 1. Escribir “Introduzca la primera variable:” 2. Leer x 3. Escribir “Introduzca la segunda variable:” 4. Leer y 5. z x 6. x y 7. y z 8. Escribir“ Los nuevos valores son: para x: para y:”, x, y 9. Fin
Inicio Diagrama de flujo:
x, y, z: Reales
“Ingrese x, y”
x, y
z x x y y z Escribir x, y
Fin 36
Algoritmo y Estructura de Datos I
10.
Hacer un algoritmo para hallar la ganancia de la venta de un producto. Se debe ingresar el precio de costo, precio de venta. Se debe reportar la ganancia.
Solución: Pseudocódigo: Principal: GANANCIA_X_PRODUCTO {Dados el precio de costo y el precio de venta calcula la ganancia} Inicio {Variables: v, c, g; reales} 1. Escribir:”Inserte el precio de costo:” 2. Leer c 3. Escribir:”Inserte el precio de venta:” 4. Leer v 5. g v - c 6. Escribir “La ganancia de esta venta es:”g 7. Fin Diagrama de flujo:
Inicio v, c, g: Reales
“Ingrese v,c”
v, c
g v-c
Escribir g
Fin
37
Algoritmo y Estructura de Datos I
11.
Hacer un algoritmo para que se ingrese una cantidad en kilos y reporte su equivalente en libras. 1 kilo = 2.2 libras.
Solución: Pseudocódigo: Principal: KILOS_A_LIBRAS {Dados un peso en kilos K calcula el peso en libras} Inicio {Variables: k, l; reales} 1. Escribir “Introduzca el peso en kilos” 2. Leer k 3. l 2.2*k 4. Escribir “El peso en libras es”,l 5. Fin Diagrama de flujo:
Inicio l, k: Reales
“Ingrese k”
Leer k
l 2.2 * k
Escribir l
Fin
38
Algoritmo y Estructura de Datos I
12.
Hacer un algoritmo para calcular el salario neto de un trabajador. Se debe leer el nombre, horas trabajadas, precio de la hora y sabiendo que los impuestos aplicados son el 10 por ciento sobre el salario bruto.
Solución: Seudocódigo: Principal: SALARIO_TRABAJADOR {Dadas las horas trabajadas el precio por hora y los impuestos calcula el salario diario de un trabajador} Inicio {Variables: b,e,h,p; reales Caracteres: n[20] } 1. Escribir: “Introduzca su nombre: “ 2. Leer n 3. Escribir: “Inserte las horas trabajadas:” 4. Leer h 5. Escribir “Introduzca el precio por hora” 6. Leer p 7. b h*p 8. e 0.9*b 9. Escribir “Sr.”, n, “Su salario es de:”, e, “Sabiendo que esta bajo un impuesto del 10%” 10. Fin
Inicio
Diagrama de flujo:
b,e,h,p: Reales Caracteres: n[20] “Ingrese n, h, p”
n, h, p b h*p e 0.9*b “Sr”, n, “Su salario es”, Fin 39
Algoritmo y Estructura de Datos I
13. Hacer un algoritmo para calcular la altura que cae un objeto. Se debe ingresar el tiempo recorrido en segundos. Solución: Pseudocódigo: Principal: ALTURA_DE_CAIDA_LIBRE_OBJETO {Dado el tiempo de caída de un objeto x calcula la altura rrecorrida} Inicio {Variables: x, h; reales} 1. Escribir “Ingrese el tiempo de recorrido en seg.” 2. Leer x 3. h 4.9*x*x 4. Escribir “La altura del recorrido es:”,h Fin Diagrama de flujo:
Inicio h, x: Reales
“Ingrese x”
Leer x
h 4.9*x*x
Escribir h
Fin
40
Algoritmo y Estructura de Datos I
14.
Hacer un algoritmo para calcular la presión de un gas en un recipiente. Se debe ingresar la temperatura (C), el número de moles n y el volumen (lts).
Solución: Pseudocódigo: Principal: PRESION_DE_GAS {Dados la temperatura, el número de moles y el volumen calcula la presión que ejerce el gas} Inicio {Variables: c, n, v, p, a, t; reales} 1. Escribir “Ingrese la temperatura en ºC” 2. Leer c 3. Escribir “Ingrese el numero de moles” 4. Leer n 5. Escribir “Ingresar el volumen en litros” 6. Leer v 7. t c+273 8. a 0.082*t*n 9. p a/v 10. Escribir “La presión ejercida por el gas es:”, p 11. Fin
Inicio
Diagrama de flujo:
c, n, v, p, a, t: Reales
“ c, n, v ”
c, n, v t c+273 a 0.082*t*n p a/v Escribir p Fin 41
Algoritmo y Estructura de Datos I
15.
Hacer un algoritmo para calcular el espacio recorrido por un móvil. Ingresar Velocidad inicial (m/seg), tiempo (seg) y aceleración (m/seg2).
Solución: Pseudocódigo: Principal: RECORRIDO_DE_UN_MOVIL {Dados la velocidad inicial, el tiempo y la aceleración de un movil calcula el espacio recorrido} Inicio {Variables: d, v, a, t, x, y; reales} 1. Escribir “Ingrese la velocidad inicial” 2. Leer v 3. Escribir “Ingrese la aceleración” 4. Leer a 5. Escribir “Ingrese el tiempo de recorrido en seg.” 6. Leer t 7. x v*t 8. y a*t*t 9. d (y*0.5)+x 10. Escribir “La distancia recorrida por el móvil es:”,d 11. Fin
Inicio
Diagrama de flujo:
v,a,x, y, t, d: Reales
“Ingrese v, a, t”
v, a, t x v*t y a*t*t d (y*0.5)+x Escribir d Fin 42
Algoritmo y Estructura de Datos I
CAPITULO II
ESTRUCTURAS ALGORITMICAS DE CONTROL SELECTIVAS
Expresiones lógicas
Las expresiones lógicas derivan del uso de operaciones de comparación o relación y estas se logran haciendo el uso de operadores relacionales, logramos con ello generar proposiciones lógicas simples estas pueden ser verdadera o falsas y esta situación permite usar como condición para determinar el flujo del algoritmo o programa, aquí mostramos una tabla de ellos además si queremos hacer proposiciones lógicas compuestas podemos usar los operadores lógicos para unir proposiciones simples Operadores Relacionales Operador
Función
> >= < <= == !=
Mayor que Mayor o igual que Menor que Menor o igual que Igual que Diferente que
Operadores Lógicos Operador Y (&&) O ( || ) NO ( ! )
Expresión lógica / función P Y Q / P y Q , (P Λ Q) P O Q / P o Q , (P V Q) No P / No es cierto que P, (~ P )
Simple: Si X=6, B=7.8, (X * 5 + B ** 3 / 4) < (X ** 3 / B) (6 * 5 + 7.8** 3 / 4) < (6 ** 3 / 7.8) (30 + 474.552 / 4) < (216 / 7.8) (30 + 118.638) < (27.78) 148.638 < 27.78 F Compuesta: . 1580 mod 6 + 2 ** 7 > 7 + 8 * 3 ** 4 2 + 128 > 7 + 8 * 81 130 > 7 + 648 130 > 655 F
Y
F 43
(15 * 2) mod 6 = (60 * 2 / 4) mod 6 (30) mod 6 = (120 / 4) mod 6 0 = 30 mod 6 0 = 0 V
Algoritmo y Estructura de Datos I
Estructura selectiva simple (Condicional básica)
Pseudocódigo: Si (condición) entonces Acción 1 Fin_si
Diagrama de flujo:
F CONDICION (X > 0)
V ACCION 1
O también Pseudocódigo: Si (condición) entonces Acción 1 Acción 2 Acción 3 … Acción n Fin_si
44
Algoritmo y Estructura de Datos I
Diagrama de flujo
F CONDICION (X > 0)
V ACCION 1
ACCION 2
● ● ● ●
ACCION N
Estructura selectiva doble (Condicional doble)
Pseudocódigo: Si (condición) Entonces Acción a Si no Acción b Fin_si
45
Algoritmo y Estructura de Datos I
Diagrama de flujo
F
V CONDICION (X > 0)
ACCION A
ACCION B
O también Si (condición) entonces Acción a1 Acción a2 Acción a3 … Acción an Si no Acción b1 Acción b2 Acción b3 … Acción bn Fin_si
46
Algoritmo y Estructura de Datos I
Diagrama de flujo
F
V CONDICION (X > 0)
ACCION A1
ACCION B1
ACCION A2
ACCION B2
ACCION A3
ACCION B3
ACCION AN
ACCION BN
Se utiliza para tomar decisiones. El algoritmo o programa prueba una condición con la instrucción si. Si la condición es verdadera, el programa ejecuta una instrucción (o un bloque de instrucciones relacionadas). Por el contrario si la condición es falsa, el programa puede ejecutar un conjunto diferente de instrucciones especificado por la cláusula sino. La sintaxis de la sentencia ha sido expuesta.
47
Algoritmo y Estructura de Datos I
Ejercicios
1.-
Hacer un algoritmo que se ingrese 2 números y se reporte el mayor de ellos.
Solución: Pseudocódigo: Principal: MAYOR_DE_DOS_NUMEROS {Dados dos números y b reporta el mayor de ellos} Inicio: {Variables:
a, b; reales} 1. Escribir “Ingrese el primer número” 2. Leer a 3. Escribir “Ingrese el segundo número” 4. Leer b 5. Si (a>b) entonces Escribir “El mayor es:”, a Sino Escribir b “es menor o igual que”, a Fin_si
6. Fin Diagrama de flujo:
Inicio
Ingrese a, b V
a>b
“El mayor es”, a
b, “es menor o igual que”, a
Fin
48
F
Algoritmo y Estructura de Datos I
2. -
Escriba un algoritmo para determinar si un entero A es divisible por otro B.
Solución: Pseudocódigo: Principal: DIVISIBILIDAD_DE_DOS_NUMEROS {Dados dos números a y b reporta el si a es divisible por b} Inicio: {Variables:
a, b; enteros} 1. Escribir “Ingrese el primer número” 2. Leer a 3. Escribir “Ingrese el segundo número” 4. Leer b 5. Si (b=0) entonces Escribir “la división de un numero entre cero es indeterminada” Sino Si (a mod b=0) entonces Escribir a, “es múltiplo de “, b Sino Escribir a, “no es múltiplo de “, b Fin_si Fin_si
6. Fin Diagrama de flujo:
Inicio In rese a b
V
F
b=0
V
a mod b=0
F a “no es divisible or” b
a “es divisible or” b
“División por cero indeterminada”
Fin 49
Algoritmo y Estructura de Datos I
3. -
Hacer un algoritmo para que calcule e imprima los valores de las raíces reales de una ecuación de segundo grado: A x 2 + B x + C = 0 Se debe ingresar los coeficientes de la ecuación A, B y C.
Solución: Pseudocódigo: Principal: RAICES_ECUACION_CUADRATICA {Dados los coeficientes de una ecuación cuadrática reporta sus raíces} Inicio: {Variables: a, b, c, d, x, y, L; reales} 1. Escribir “Ingrese el primer coeficiente:” 2. Leer a 3. Escribir “Ingrese el segundo coeficiente” 4. Leer b 5. Escribir “Ingrese el tercer coeficiente” 6. Leer c 7. d b*b - 4*a*c 8. Si (d<0) entonces Escribir “Esta ecuación tiene raíces imaginarias” Sino L a*2 x ((d**0.5) - b) / L y ((d**0.5) * (-1) - b) / L Escribir “el valor para x1 es:” , x ,”para x2 es: “, y Fin_si 9.Fin Inicio
Diagrama de flujo:
a b c d b*b - 4*a*c d<0
V
F
L a*2 “Raíces imaginarias”
x ((d**0.5) - b) / L y ((d**0.5) * (-1) - b) / L “Las raíces son” x, y
Fin 50
Algoritmo y Estructura de Datos I
4.-
La tasa de interés sobre un préstamo es de 8% si la cantidad es menor o igual que S/. 200, pero es de 6% si excede a 200. Hacer un algoritmo para que ingrese la cantidad y reporte el interés y el monto total.
Solución: Pseudocódigo: Principal: MONTO_PRESTAMO {Dados la cantidad del monto de préstamo y los intereses reporta el monto final a pagar} Inicio: {Variables: c, a, b, d, e, r; reales} 1. Escribir “Ingrese la cantidad” 2. Leer c 3. a c*0.08 4. b c*0.06 5. d c+a 6. e c+b 7. Si(c < = 200) entonces Escribir “la tasa de interés es del 8%, el monto es “, d Sino Escribir “la tasa de interés es del 6%, el monto es “, e Fin_si 8. Fin Diagrama de flujo: Inicio c a c*0.08 b c*0.06 d c+a e c+b c<=200
V
“Para 6%, monto es”e
“Para 8% monto es” d
Fin
51
F
Algoritmo y Estructura de Datos I
5. -
Hacer un algoritmo de tal manera que se ingrese las 2 evaluaciones de un alumno reporte APROBADO si el promedio es mayor o igual a 10.5 y DESAPROBADO en caso contrario.
Solución: Pseudocódigo: Principal: EVALUACION {Dados dos notas a y b de un alumno reporta el si aprobó} Inicio: {Variables: a, b, p, reales} 1. Escribir “Ingrese la primera nota” 2. Leer a 3. Escribir “Ingrese la segunda nota” 4. Leer b 5. p (a+b)*0.5 6. Si (p >= 10.5) entonces Escribir “Usted APROBO con nota”, p Sino Escribir “Usted DESAPROBO con nota”, p Fin_si 7. Fin
Diagrama de flujo:
Inicio a,b
a+b *0.5
p >10.5
V
“Desaprobado con “,p
“A robado con”
Fin
52
F
Algoritmo y Estructura de Datos I
6. -
La comisión de las ventas totales es como sigue: Si VENTAS <= S/. 80, entonces no hay comisión. Si VENTAS <= S/. 600 entonces la comisión es igual al 12% de las ventas. Si VENTAS > 600 entonces la comisión es igual al 15% de las ventas. Hacer un algoritmo para que se ingrese las ventas y se reporte la comisión. Solución: Pseudocódigo: Principal: COMISION_DE_VENTAS {Dados el monto de las ventas reporta la comisión} Inicio: {Variables: v, x, y, r; reales} 1. Escribir “Ingrese la cantidad de la venta en soles” 2. Leer v 3. x v*0.12 4. y v*0.15 5. Si (v < 80) entonces Escribir “No hay comisión” Sino Si (v <= 600) entonces Escribir “La comisión es: (12% de las ventas)”x Sino Escribir “La comisión es: (15% de las ventas)”,y Fin_si Fin_si 6. Fin Inicio
Diagrama de flujo:
In rese a b x v*0.12
V
V
y v*0.15
F
v > 80
v <= 600
F “Comisión es”, y
“Comisión es” x
“No hay comisión”
Fin 53
Algoritmo y Estructura de Datos I
7. -
Hacer un algoritmo para calcular el pago semanal de un trabajador. Se debe ingresar el nombre, pago por hora y el número de horas trabajadas. Si normalmente se trabaja 40 horas a la semana y por cada hora extra trabajada se paga 1.5 veces la hora normal, reportar el nombre y el pago semanal del trabajador.
Solución: Pseudocódigo: Principal: PAGO_SEMANAL {Dados dos números y b reporta el mayor de ellos} Inicio: {Variables: p, h, a, b, r; reales Carácter: n [20] } 1. Escribir “Ingrese su nombre” 2. Leer n 3. Escribir “Ingrese el pago por hora” 4. Leer p 5. Escribir “Ingrese las horas trabajadas durante la semana” 6. Leer h 7. d h - 40 8. a p * h 9. b p * h + d * 1.5 10. Si (h < = 40) entonces Escribir “Sr.”, n,”su sueldo semanal es”, a Sino Escribir “Sr.”, n,”su sueldo semanal es “, b Fin_si 11. Fin Diagrama de flujo:
Inicio n, p, h d h - 40 a p*h b p * h + d * 1.5 h <= 40
V
n,”su sueldo es”, b
n ”su sueldo es” a
Fin
54
F
Algoritmo y Estructura de Datos I
8. -
Se repartirá la herencia entre los hijos de un señor como sigue: Si la cantidad de hijos es menor que 4; se repartirá exactamente entre el número de hijos; si son 4 o más hijos, la mitad le tocará al hermano mayor y el resto se dividirá entre los demás hermanos. Hacer un algoritmo para que reporte cuanto le corresponde a cada hijo. Se debe ingresar la herencia y el número de hijos.
Solución: Pseudocódigo: Principal: REPARTO_HERENCIA {Dados la cantidad de hijos reporta la herencia} Inicio: {Variables: h, n, a, b, c, d, r; reales} 1. Escribir “Ingrese la cantidad a repartir” 2. Leer h 3. Escribir “ingrese el numero de hermanos” 4. Leer n 5. a h/n 6. c h/2 7. d n-1 8. b c/d 9. Si (n < 4) entonces Escribir “Cada uno recibe”, a Sino Escribir “El mayor recibe”, c,”Los demás reciben”, b Fin_si Fin Diagrama de flujo: Inicio h n a c d b
h/n h/2 n-1 c/d
c<4
V
“El mayor”, c, ”Los demás”,b
“Cada uno recibe” a
Fin 55
F
Algoritmo y Estructura de Datos I
9. -
Una empresa comercial desea hacer un algoritmo para calcular el precio neto de un artículo de acuerdo a lo siguiente: Si la venta es al contado se le da el 40% de descuento. Si la venta es a plazos y: T < 12 meses se recarga al 30% T > 12 meses se recarga el 60% Se debe el precio del artículo, el código de venta (c) contado, (p) plazos y si la venta es a plazos se debe ingresar el tiempo de pago.
Solución: Pseudocódigo: Principal: PRECIO_NETO_ARTICULO {Dados el precio neto de un artículo y las condiciones de pago contado o crédito y meses del préstamo reporta el precio neto del mismo} Inicio: { Variables:
p, v, pla1, pla2, t, a, b, r; reales cv ; caracter } 1. Escribir “Ingrese el precio del artículo” 2. Leer p 3. Escribir “Elija una opción: AL CONTADO(‘c’) o PLAZOS(‘p’)” 4. Leer caracter cv 5. v p*0.6 6. a p*1.3 7. b p*1.6 8. Si (cv=’c’ o cv=’C’) entonces Escribir “Ud. ha elegido pagar al contado, solo pagará...”, v Sino Escribir “Ud. ha elegido pagar a plazos, ingrese en cuantos meses desea pagar” Leer t . Si (t<12) entonces Escribir "Usted pagará", a Sino Escribir “Usted pagará", b Fin_si Fin_si
11. Fin
56
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Inicio
In rese
cv
v p*0.6 a p*1.3 b p*1.6
V
F
cv=’p’
Ingrese t
V
t <= 12
F "Usted pagará", b
"Usted a ará" a
"Usted pagará", v
Fin
57
Algoritmo y Estructura de Datos I
10. -
En un triángulo se cumple lo siguiente: s>a, s>b, s>c donde s: Semiperímetro a, b, c: Lados del triángulo Hacer un algoritmo para que se ingresen los valores de los del triángulo de los lados del triángulo y si estos valores cumplen las condiciones calcular el área del triángulo en caso contrario reportar DATOS INCORRECTOS. AREA = s ( s − a )( s − b )( s − c )
.
Solución: Pseudocódigo: Principal: AREA_TRIANGULO {Dados los lados de un triangulo reporta el área} Inicio: {Variables: ar, s, a, b, c, x, y, z, r; reales} 1. Escribir “Ingrese el primer lado” 2. Leer a 3. Escribir “Ingrese el segundo lado” 4. Leer b 5. Escribir “Ingrese el tercer lado” 6. Leer c 7. s (a+b+c)/2 8. x s - a 9. y s - b 10. z s - c 11. Si ( s < a ) entonces Escribir “Los datos son incorrectos” Sino Si ( s < b ) entonces Escribir “los datos son incorrectos” Sino Si(s
58
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Inicio
In rese a b c s (a + b + c) / 2 x s-a y s-b z s-c
V
F
s>a
s>b
"Error"
V
F
"Error"
s>c
V
F "Error"
ar (s*x *y * z) ** 0.5
“El Área es: “,ar
Fin
59
Algoritmo y Estructura de Datos I
11. -
Calcular el valor de la función de acuerdo a lo siguiente: y = x 2 + 5 Si x < = 0 y = 3 x − 1 Si 0 < x < 2 y = x 2 − 4 x + 5 Si x > = 2 Se debe ingresar el valor de x reportar el valor de y = f(x).
Solución: Pseudocódigo: Principal: FUNCION_DE_X {Dado el valor de x reporta el valor de la función dada} Inicio: {Variables:
x, y1, y2, y3, r; reales} 1. Escribir “Inserte el valor de x” 2. Leer x 3. y1 x*x+5 4. y2 (3*x)-1 5. y3 x*x-4*x+5 6. Si(x < = 0) entonces Escribir “El valor de la función f(x) es: “,y1 Sino Si (x<2) entonces Escribir “la solución de la función f(x) es: “, y2 Sino Escribir “en este caso, f(x) es: “, y3 Fin_si Fin_si
7. Fin
60
Algoritmo y Estructura de Datos I
Diagrama de flujo: Inicio
In rese x y1 x * x + 5 y2 (3 * x) - 1 y3 x * x – 4 * x+ 5 V x<2
V
F
x>0
F “y = f(x) es: “, y3
“y = f(x) es: “, y2
“y = f(x) es: “, y1
Fin
61
Algoritmo y Estructura de Datos I
12. -
Los empleados de una fábrica trabajan en dos turnos: diurno y nocturno. Se desea calcular el jornal diario de acuerdo a los siguientes puntos: La tarifa de las horas diurnas es de S/. 1.5 La tarifa de las horas nocturnas es de S/. 2.25 En caso de ser domingo la tarifa aumentará en S/. 1 en el turno diurno y S/. 1.25 en el turno nocturno. Se debe leer el turno, las horas trabajadas y el día de la semana.
Solución: Pseudocódigo: Principal: JORNAL_DIARIO {Dado las horas trabajadas, horas extras y turno reporta el jornal diario} Inicio: {Variables: h,b,c,d,e; reales Carácter: t, Entero D} 1. Escribir “Ingrese su turno: diurno (d), nocturno (n)” 2. Leer carácter t 3. Escribir “Ingrese las horas trabajadas” 4. Leer h 5. Escribir “Escriba el día de la semana (1, 2 …,7)” 6. Leer D 7. b h*1.5 8. c h*2.25 9. d h*2.5 10. e h*3.5 11. Si (D=7) entonces Si (t=’d’) entonces Escribir “Su jornal será: “,d Sino Escribir “su jornal será: “,e Fin_si Sino Si (t=’d’) entonces Escribir “su jornal será: “,b Sino Escribir “su jornal será: “, c Fin_si Fin_si 12. Fin
62
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Inicio h t D b h*1.50 c h*2.25 d h*2.50 e h*3.50 V
F D=7
V
“Su jornal es: “,d
t = ‘d’
F
V
“Su jornal es: “,e
“Su ornal es: “ b
Fin
63
t = ‘d’
F
“Su jornal es: “,c
Algoritmo y Estructura de Datos I
LA ESTRUCTURA SELECTIVA MULTIPLE Estructura selectiva múltiple (condicional múltiple)
La estructura selectiva múltiple permite que el flujo del diagrama se bifurque por varias ramas en el punto de la toma de decisión(es), esto en función del valor que tome el selector que es una variable usada para tal fin. Así si el selector toma el valor 1 se ejecutara la acción 1, si toma el valor 2 se ejecutara la acción 2, si tómale valor n se realizara la acción n, y si toma un valor distinto de los valores comprendidos entre 1 y n, se continuara con el flujo normal del diagrama realizándose la acción k. Pseudocódigo: Según sea (variable_selector) hacer Igual valor 1 : acción 1 Salir a Fin de hacer Igual valor 2 : acción 2 Salir a Fin de hacer Igual valor 3 : acción 3 Salir a Fin de hacer Igual valor n : acción n Salir a Fin de hacer Cualquier otro valor Acción k Fin hacer A continuación presentamos estructura selectiva.
el
diagrama
de
flujo
que
Ilustra
VARIABLE SELECTOR Caso 1
Caso 2 Acción 1
En otro caso
Caso n
Acción 2
Acción n
● ● ●
64
Acción k
esta
Algoritmo y Estructura de Datos I
Donde: SELECTOR es la variable o expresión a evaluarse, según la cual se tomara una de las “múltiples” decisiones o alternativas. Acción 1 expresa la operación o conjunto de operaciones que se van ha realizar si el selector toma el valor 1. Acción 2 expresa la operación o conjunto de operaciones que se van ha realizar si el selector toma el valor 2. Acción n expresa la operación o conjunto de operaciones que se van ha realizar si el selector toma el valor n. Acción k expresa la operación que se va a realizar cuando se continué con el flujo normal del diagrama. La estructura selectiva si múltiple es muy flexible, lo que permite aplicarse de diferentes formas. Obsérvense los siguientes diagramas de flujo y las explicaciones correspondientes. Ejercicios
1. Construya el algoritmo que obtenga el resultado de la siguiente función si se ingresan como datos x y n:
y(x,n) =
100 * x 100 * * x 100 / x 0
, Si n = 1 , Si n = 2 , Si n = 3 , Para cualquier otro n
Pseudocódigo: Principal: FUNCION_MAT Inicio{ Real: y Entero: x, n } Según sea ( n ) hacer Igual valor 1 : y 100 * x Salir a Fin de hacer Igual valor 2 : y 100 * * x Salir a Fin de hacer Igual valor 3 : y 100 / x Salir a Fin de hacer Cualquier otro valor y 0 Fin hacer Escribir “La funcion vale”, y Fin
65
Algoritmo y Estructura de Datos I
Diagrama de flujo
Inicio
x, n,
Según sea n 1
y100*x
2
En otro caso
3
y100**x
y100/x
y
Fin
66
y 0
Algoritmo y Estructura de Datos I
Traza: Numero de proceso n 1 2 3 4 5 6
2.-
entrada x 1 7 3 4 2 3
y 8 6 4 8 3 10
salida 800 0 25 0 1000000 10
Haga el algoritmo que permita en una elección de 4 reinas de belleza, encontrar el puntaje correspondiente de cada reina. El usuario tecleara los puntajes de manera ordenada, tal y como se obtuvieron en la elección, el final se dará cuando haya 28 evaluaciones es decir el jurado esta conformado por siete personas.
Pseudocódigo: Principal: Reinado_de_Belleza {El algoritmo, obtiene el total de votos y el porcentaje obtenido por los 4 candidatas a un reinado de belleza} Inicio {Entero. nc, pr1, pr2, pr3, pr4, p, i } 1. pr1 0 , pr2 0 , pr3 0 y pr4 0, i 1 2. Repetir mientras (i <=28) hacer Escribir” Ingrese numero de candidata” Leer nc Escribir” Ingrese puntaje de candidata” Leer p Según sea (nc) hacer 1: pr1 pr1 + p Salir a Fin de hacer 2: pr2 pr2 + p Salir a Fin de hacer 3: pr3 pr3 + p Salir a Fin de hacer 4: pr4 pr4 + p Salir a Fin de hacer Fin_hacer Fin_hacer 3. Escribir “Puntaje reina 1:”, pr1 “Puntaje reina 2:”, pr2 “Puntaje reina 3:”, pr3 “Puntaje reina 4:”, pr4 4. Fin
67
Algoritmo y Estructura Estructura de Datos I
Inicio
pr1 0 pr2 0 pr3 0 pr4 0 i 1
i <= 28 V
F nc, p Segun nc
1
pr1 pr1 + p
2
3
pr2 pr2 + p
pr3 pr3 + p
“Puntaje reina 1:”, pr1 “Puntaje reina 2:”, pr2 “Puntaje reina 3:”, pr3 “Puntaje reina 4:”, pr4
Fin
68
4
pr4 pr4 + p
Algoritmo y Estructura Estructura de Datos I
CAPITULO III
ESTRUCTURAS ALGORITMICAS DE CONTROL REPETITIVAS Estructura de control: Repetir mientras ( While ) Diagrama General
EXP
1
CONDICIÓN
F
V PROCESO
Pseudocódigo 1. Hacer EI Expresión Inicial // genera proposición proposición inicial PI 2. Repetir mientras (proposición PI es verdadera) Hacer Acción 1 Acción 2 Acción 3 ←
Acción n-1 Hacer EI modificación de EI // genera cambio de PI ←
Fin_hacer 3. Fin 69
Algoritmo y Estructura Estructura de Datos I
Diagrama de flujo.-
EI
EXPRESION INICIAL
EVALUACION DE PI
V ACCION 1 ACCION 2 … … ACCION n -1 EI MODIFICACION DE EI EI
70
F
Algoritmo y Estructura de Datos I
EJEMPLO 1.
Haga el algoritmo que permita imprimir (escribir) la lista de los veinte primeros números enteros positivos
Solución: Pseudocódigo.Principal Inicio { Variable
PRIMEROS_20_NUMEROS_ENTEROS_POSITIVOS i : enteros } 1. Escribir “Lista de veinte positivos” 2. i 1 3. Repetir mientras ( i < = 20) hacer 3.1 Escribir i 3.2 i Fin_hacer
primeros
numeros
i +1
4. Fin
Inicio
Diagrama de flujo
i 1
i<= 20
F V
Imprime i
i i-1
Fin
71
enteros
Algoritmo y Estructura de Datos I
Principal: MUESTRA_CONTADOR Inicio { Variable; cont: entero } 1. Hacer cont 1 2. Repetir mientras (cont <= 4) hacer 2.1 cont cont + 1 Fin_hacer 3. Escribir “El contador indica el numero de repeticiones es”, cont-1 4. Fin
Principal: MUESTRA_ACUMULADOR Inicio { Variable; cont, acum., valor: entero } 1. cont 1 2. acum. 0 3. Repetir mientras (cont < 4) hacer 3.1 acum cont + valor 3.1 cont cont + 1 Fin_hacer 3. Escribir “El acumulador indica el total almacenado es”, acum 4. Fin Principal: MUESTRA_INTERRUPTOR Inicio { Variable; cont, int.,valor: entero } 1. cont 1 2. int. 0 3. Repetir mientras (cont < = 4) hacer 3.1 Leer valor 3.2 Si (valor<0) entonces 3.2.1 int. 1 Fin_si 3.3 cont cont + 1 Fin_hacer 4. Si (int = 1) entonces Escribir “Se ingreso un numero negativo” Fin_si 5. Escribir “El interruptor indica si se ingreso al menos un numero negativo” 6. Fin
72
Algoritmo y Estructura de Datos I
Estructura de control Repetir con (For) Diagrama General
EXP
EXP
1
2
F
V PROCESO
EXP
3
Diagrama de flujo 1. Hacer V VI // genera proposición inicial P: V < VF 2. Repetir con V desde VI hasta VF // verifica P es verdadera Hacer Acción 1 Acción 2 Acción 3 Acción n-1 V V + incremento Fin_hacer 3. Fin
73
Algoritmo y Estructura de Datos I
Diagrama de Flujo V VI
V < VF
F V
ACCION 1 ACCION 2 … … ACCION n -1 V V+ ID
EJEMPLO 1.
Haga el algoritmo que permita calcular la suma de los multiplos de cinco desde 800 a 990 inclusive
Solución: Pseudocódigo.Principal SUMA_MULTIPLOS_ENTRE_800_Y_990 Inicio { Variable i : enteros } 1. i 2.
800
Repetir con i desde 800 hasta 990 hacer hacer 2.1 i i + 5 Fin_hacer
3. Escribir “la suma de los multiplos de cinco desde 800 hasta 990 inclusive es”, i
74
Algoritmo y Estructura de Datos I
4. Fin Diagrama de flujo.-
Inicio
i 800
i<991
F V
i i+5
Imprime i
Fin EJERCICIOS RESUELTOS 1.
Calcule el factorial de un número entero n, (n>=0).
Solución usando repetir mientras: Pseudocódigo Principal FACTORIAL_DE_N Inicio {Variable i, n, fact : enteros } 1. Escribir “Valor de n” 2. Leer n 3. Si ( n > = 0 ) entonces a. i ← n b. Repetir mientras ( i > = 1) hacer b.1 fact fact * i b.2 i i – 1 Fin_hacer c. Escribir “El factorial es:”, fact Sino a. Escribir “El numero es negativo:” Fin_si 4. Fin 75
Algoritmo y Estructura de Datos I
Diagrama de flujo.-
Inicio
Ingrese n
fact 1 i n
i>0
F V
fact fact*i i i-1
Imprime fact
Fin Solución usando repetir con: Pseudocódigo: Principal: FACTORIAL {Calcula el factorial de un numero entero a} Inicio {Variable entera a, b, c} 1. Escribir "Ingrese un numero entero." 2. Leer a 3. b 1 4. c 2 5. Repetir con c desde 2 hasta a hacer b b*c c c +1 Fin hacer 6. Escribir "El factorial es: ", b 7. Fin 76
Algoritmo y Estructura de Datos I
2.-
Se desea calcular independientemente la suma de los números pares e impares 1 y 50.
Solución: Pseudocódigo: Principal: SUMA_NUMEROS_PARES_IMPARES {Dados los límites reporta la suma de los números pares e impares entre los límites} Inicio: {Variables: n, a, b; reales} 1. Hacer a 0 2. Hacer b 0 3. Hacer n 1 4. Repetir mientras (n < = 50) hacer Si (n mod 2 = 0) entonces a a+n sino b b+n fin_si n n+1 Fin_hacer 5. Imprimir a, b 6. Fin
77
Algoritmo y Estructura de Datos I
Diagrama de flujo.-
Inicio
a 0 b 0 n 1
F n<50 V n %2=0 V
F
a a + n
bb+n
n n+1
Im rime a b
Fin
78
Algoritmo y Estructura de Datos I
3.-
Calcular y visualizar la suma y el producto de los números impares comprendidos entre 20 y 80.
Solución: Pseudocódigo: Principal: SUMA_PRODUCTO_IMPARES_ENTRE_20_Y_80 {Dados los límites reporta la suma y producto de los números impares entre los límites} Inicio: {Variables: a, i, b; enteros} 1. i 20 2. a 0 3. b 1 4. Repetir mientras (i < = 80) hacer si(i mod 2 = 0) a a + i b b * i fin_si i i + 1 Fin_hacer 5. Escribir a, b 6. Fin
79
Algoritmo y Estructura de Datos I
Diagrama de flujo.-
Inicio
i
20 a 0 b 1
F
i<=80 V V
i%2=0 F a a + i b b * i
i i + 1
Im rime a b
Fin
80
Algoritmo y Estructura de Datos I
4.-
Leer n números enteros y obtener el promedio de los positivos y el promedio de los negativos.
Solución: Pseudocódigo: Principal: PROMEDIO_POSITIVOS_NEGATIVOS {Dados n números reporta el promedio de los números positivos y negativos} Inicio: {Variables: n, a, i, b, x, p1, p2, pos, neg: reales} Inicio 1. i 1 2. a 0 3. b 0 4. pos 0 5. neg 0 6. Escribir: “Ingrese n” 7. Leer n 8. Si(n > 0) entonces Repetir mientras (i<=n) hacer Escribir “Ingrese numero” Leer x Si (x>o) entonces pos=pos+x a a + 1 Sino Si(x<0) entonces neg neg+x b b+1 Fin_si Fin_si i i +1 Fin_hacer p1 pos / a p2 neg / b Escribir p2, p1 Sino Escribir “Datos incorrectos” Fin_si 9. Fin
81
Algoritmo y Estructura de Datos I
Diagrama de flujo.-
Inicio
a0 b0 pos0
neg0 i1
Leer n V
F i
In resar x
Leer x
V
F
x>0
pos pos + x a a + 1
neg neg + x b b + 1
ii+1
Imprime pos/a, neg /b
Fin
82
Algoritmo y Estructura de Datos I
5.-
Calcular la suma de los cuadrados de los 15 primeros números naturales.
Solución: Pseudocódigo: Principal: SUMA_CUADRADOS_DE_ 15_ PRIMEROS_NUMEROS {Calcula la suma de los cuadrados de los 15 primeros números } Inicio: {Variables: a, b, c: enteros} Inicio 1. a 1 2. c 0 3. Repetir mientras (a<=15) hacer b a ** 2 Imprimir “b” c c+b a a +1 Fin_hacer 4. Imprimir c 5. Fin Diagrama de flujo.-
Inicio
a 1
a<=15
F
V b a ** 2 c c+b
Imprime b
a a + 1
Fin
83
Imprime c
Algoritmo y Estructura de Datos I
6.-
Se ingresan n números. Se pide calcular el promedio de ellos.
Solución: Pseudocódigo: Principal: PROMEDIO_DE_N_NUMEROS {Dados n números ingresados por teclado se calcula el promedio} Inicio: {Variables: n, i: enteros n1, suma, promedio: reales} Inicio 1. Escribir “Ingrese la cantidad de números” 2. Leer n 3. i 0 4. suma 0 5. Repetir mientras (i < n) hacer Escribir “Ingrese el numero” Leer n1 suma suma + n1 i i+1 Fin_hacer 6. Promedio suma / i 7. Imprimir “El promedio es”, promedio 8. Fin
84
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Inicio In rese n i 0 suma 0
i
suma
suma + n1
i i + 1
promedio suma/i
Imprime promedio
Fin
85
F
Algoritmo y Estructura de Datos I
7.-
Ingresar números enteros, visualizar la suma de los números pares de la lista, cuantos números pares existen y cual es el promedio de los números impares.
Solución: Pseudocódigo: Principal: CUENTA_PARES_Y_PROMEDIO_IMPARES_DE_N_NUMEROS {Dados n números reporta la suma de los números pares cuantos numeros pares hay y el promedio de impares} Inicio: {Variables: p, s, d, t, n, n1, i : enteros pi: real} Escribir “Ingrese la cantidad de datos” Leer n p 0 s 0 d 0 t 0 i 0 repetir mientras (t < n) hacer Escribir “Ingrese el numero” Leer n1 Si (n1 mod 2 = 0) entonces p p + n1 s s+1 Sino i i + n1 d d +1 Fin_si t t+1 Fin_hacer Si(d ! = 0) entonces pi i / d Fin_si Escribir “Prom. de impares, suma y numero de pares” pi, p, s Fin
86
Algoritmo y Estructura de Datos I
Diagrama de flujo.-
Inicio
In rese n t 0 p 0, s 0 i 0, d 0 F t
n1%2=0 V
F
p p + n1 s s + 1
i i + n1 d d + 1
t t + 1
Escribir i/d
Fin
87
s
Algoritmo y Estructura de Datos I
8.-
Desarrollo un programa que determine en un conjunto de n números naturales. ¿Cuántos son menores de 15? ¿Cuantos son mayores de 50? ¿Cuántos están comprendidos entre 25 y 45?
Solución: Pseudocódigo: Principal: CLASIFICA_NUMEROS_EN_RANGOS {Dados n números reporta menores de 15, mayores de 50, los que están entre 25 y 45} Inicio: {Variables: n, a, b; reales} Variables: n,s,a,b,c,x: reales Inicio Escribir “Ingrese la cantidad de numeros” Leer n a 0 b 0 c 0 s 0 Repetir mientras (s < n) hacer Escribir “Ingrese el numero” Leer x Si(x<15) entonces a a+1 Fin_si Si (x>25) y (x<45) entonces b Fin_si Si(x>50) c c+1 Fin_si s s +1 Fin_hacer Imprime a, b, c Fin Diagrama de flujo.- Inténtelo hacer
88
b+1
Algoritmo y Estructura de Datos I
9.-
Calcular x elevado a la potencia de n, x>0 real, n>0 entero.
Solución: Pseudocódigo: Principal: X_ELEVADO_A_LA_POTENCIA_N {Dados la base x y el exponente n reporta la potencia} Inicio: {Variables: m, d, n, x, b; reales} Inicio d 0 Escribir “Ingrese x” Leer x Escribir “Ingrese n” Leer n m x Si (x>0) y (n>0) entonces Repetir mientras ( d < n-1) hacer m m*x d d +1 Fin_hacer Escribir “x ** n”, m Sino Escribir “Datos incorrectos” Fin_si Fin Diagrama de flujo.- Inténtelo hacer
89
Algoritmo y Estructura de Datos I
10.-
Imprimir las 10 primeras potencias de 4.
Solución: Pseudocódigo: Principal: DIEZ_PRIMERAS_POTENCIAS_DE _CUATRO {Reporta las 10 primeras potencias de 4} Inicio: {Variables: n, a, b; reales} Variables: a,n: reales Inicio n 0 Escribir “Estas son las primeras 10 potencias de 4” Repetir mientras (n<10) hacer Escribir (4 ** n) n n+1 Fin_hacer Fin Diagrama de flujo.-
Inicio
n 0 F n<10 V 4**n
n n +1
Fin
90
Algoritmo y Estructura de Datos I
11.-
Calcular la suma de los n términos de la siguiente serie: s=1-1/2 + 1/3 – 1/4+ +1/5 – 1/6+.........1/n.
Solución: Pseudocódigo: Principal: SUMA_DE_LA_SERIE_DADA {Dado el número de terminos reporta la suma de la serie dada} Inicio: {Variables: s, n ; reales i entero } Inicio Hacer i 1 s 0 Escribir “Ingrese el numero de terminos” Leer n Repetir mientras(i < = n) hacer Si(i mod 2 = 0) entonces s s - (1.0 / i) Sino s s + (1.0 / i) Fin_si i i +1 Fin_hacer Escribir “El resultado es ”, s Fin Diagrama de flujo.- .- Inténtelo hacer
91
Algoritmo y Estructura de Datos I
12.-
Ingresar n números, calcular el máximo y el mínimo de ellos.
Solución: Pseudocódigo: Principal: MAXIMO_Y_MINIMO_DE_N_NUMEROS {Dado el número n de términos reporta el máximo y mínimo de ellos} Inicio: { Variables: n,i : enteros x,ma,me : reales} Inicio i 1 ma 0 me 10000 Escribir “Ingrese la cantidad de numeros” Leer n Repetir mientras (i<=n) hacer Escribir “Ingrese numero” Leer x Si(x>ma) entonces ma x Fin_si Si(me>x) entonces me x Fin_si i i+1 Fin_hacer Escribir ma, me Fin
Diagrama de flujo.- Inténtelo hacer
92
Algoritmo y Estructura de Datos I
13.-
Realizar un programa que escriba los n términos de la serie de Fibonacci: 1, 1, 2, 3, 5, 8, 13, ......
Solución: Pseudocódigo: Principal: SERIE_DE_FIBONACCI {Dados el número n de terminos reporta la serie de Fibonacci} Inicio: { Variables: n, i, i2, t, s : reales } Inicio i2 1 i 0 t 0 s 0 Escribir “Ingrese el numero de terminos” Leer n Escribir “La serie es: “ Repetir mientras (i<=n) hacer s t + i2 Escribir s i2 t t s i i+1 Fin_hacer Fin
93
Algoritmo y Estructura de Datos I
Diagrama de flujo.Inicio i2 4 i 0 t 0 s 0
Ingrese n
F i<=n V s t+i2
Imprime s
i2 t t s i i +1
Fin
94
Algoritmo y Estructura de Datos I
14.-
Leer números del teclado hasta que el último número sea –99 obtener el mayor.
Solución: Pseudocódigo: Principal: MAYOR_N_NUMEROS_HASTA_INGRESAR(-99) {De números leídos por teclado hasta ingresar -99 reporta el mayor de ellos} Inicio: { Variables: a, b : enteros } Inicio Escribir “Ingrese números para terminar pulse -99” a 1 b -99 Repetir mientras ( a ¡= -99) hacer Si(a>b) b a Fin_si Escribir “Ingrese numero” Leer a Fin_hacer Escribir “El mayor de loss numeros ingresados es”, b Fin
95
Algoritmo y Estructura de Datos I
Diagrama de flujo.-
Inicio a 1 b -99
a¡= -99
F
V a>b V
F b
a
←
Ingrese a
Imprime s
Fin
96
Algoritmo y Estructura Estructura de Datos I
15.-
Calcular la sumatoria:s sumatoria:s = 1 + x + x2/2! + x3/3! + x4/4! +…+ xn/n!. Se debe ingresar x real y n entero positivo.
Solución: Pseudocódigo: Principal: SUMATORIA_DE_LA_SERIE_D SUMATORIA_DE_LA_SERIE_DADA ADA {Dado número de elementos n y la variable x reporta la suma de la serie dada} Inicio: {Variables: {Variables: n,a,fact : enteros s,x,c : reales} a 1 fac 1 s 1 Escribir “Ingrese n” Leer n Escribir “Ingrese x” Leer x Si(n>=0) entonces Repetir mientras (a<=n) hacer fact fact*a c x ** a s s+ (c / fact) a a +1 Fin_hacer Escribir “s” Sino Escribir “n no puede ser menor a cero” Fin_si Fin Diagrama de flujo.- Inténtelo hacer.
97
Algoritmo y Estructura Estructura de Datos I
CAPITULO IV
SUBRUTINAS ALGORITMICAS Subalgoritmos, tipos Los subalgoritmos o subrutinas son un conjunto de tareas agrupadas como una unidad con las características de una rutina en general, estas se pueden encargar de determinados procesos o de devolver algún resultado (valor) al ser invocados La posibilidad de tener estos subconjuntos de rutinas permite hablar de dividir las grandes rutinas en un grupo de subrutinas comandadas por una rutina maestra llamada rutina principal y es la base de la llamada programación modular. Además las variables que están referidas referidas a la rutina maestra sirven para ser usadas en todas las subrutinas y se les denominas variables globales, y las que son declaradas en las subrutinas solo se usan en ellas y se denominas variables locales, tenemos dos tipos de subrutinas los procedimientos y funciones Procedimientos y Funciones. Tanto los procedimientos como las funciones son los módulos en los que se puede descomponer un algoritmo. Cada modulo se encarga de realizar una operación independiente de los restantes desde el punto de vista funcional pero este puede estar relacionado con otros procedimientos y funciones para el intercambio de valores de variables. Hay H ay que decir, que cualquier cual quier algoritmo se puede pued e transformar en un procedimiento para ser utilizado dentro de otro algoritmo mayor.
Estructura del pseudocódigo de una función a. Función: Nombre_de_la_función( Parámetros ) b. {Comentarios} c. Inicio. d. {Sección de datos} e. Sección de código. 1. Subrutina x 2. Subrutina y f. Cuerpo principal 3. Acción a 4. Acción b 5. Acción c … n-1 Retorno de valor g. Fin n. Fin
necesario opcional opcional necesario opcional
← ← ← ← ←
necesario
←
opcional
←
Diagrama de flujo con algunos procesos, como estructuras de control de repeticiones, lectura de datos escritura de datos, etc.
99
Algoritmo y Estructura Estructura de Datos I
Nombre_de_la_funcion(parametros )
Inicio Variables
condición
Leer datos
Mostrar Datos
Retorno de valor
Procesos
Fin
EJEMPLO 1.
Hacer la subrutina función que devuelva el área del rectángulo dados los parámetros de la base y la altura
Pesudocòdigo Funcion Area_del_rectangulo(base Area_del_rectangul o(base entero, altura entero ) { Permite el calculo del área del rectángulo dados los parámetros de la base y la altura } Inicio {Variable: area} 1. area base * altura 2. Retornar area 3. Fin
100
Algoritmo y Estructura de Datos I
Diagrama de flujo
Area_del_rectangulo(base entero, altura entero )
Inicio area base * altura
Devolver area
Fin
Nota: Sub algoritmo: solo ejecutara si se le invoca de una rutina principal con el comando Area_del_rectangulo (x,y); Declarando las variables x e y, ingresando valores para x, y: base y altura del rectángulo Estructura del pseudocódigo un procedimiento: a. Procedimiento: Nombre_del_ procedimiento(Parámetros) b. {Comentarios} c. Inicio. d. {Sección de datos} e. Sección de código. 1. Subrutina x 2. Subrutina y f. Cuerpo principal 3. Acción a 4. Acción b 5. Acción c … n-1 Acción z g. Fin n. Fin
necesario opcional opcional necesario opcional
← ← ← ← ←
necesario
←
opcional
←
Diagrama de flujo con algunos procesos, como estructuras de control de repeticiones, lectura de datos escritura de datos, etc.
101
Algoritmo y Estructura de Datos I
Nombre_del_procedimiento(parámetros)
Inicio Variables
Condicion
Leer datos
Mostrar Datos
Procesos
Fin
Así, uno de los programas anteriores quedaría de la siguiente forma:
102
Algoritmo y Estructura de Datos I
EJEMPLO 1.
Hacer la subrutina procedimiento que calcule el factorial de un número dado el parámetro n
Pesudocódigo Procedimiento Factorial(n entero, valor real) { Permite el calculo del factorial de un número dado el parámetro n } Inicio {Variable: b real i entera} 1. b 1 2. Repetir con i desde 2 hasta n hacer b b*i i i+1 fin_hacer 3. valor b 4. Fin
Procedimiento Factorial(n entero, valor real)
Inicio b
1, i
2
< b
b*i valor b
i
i +1
Fin
103
Algoritmo y Estructura de Datos I
Parámetros Formales y Actuales. Como hemos visto, entre los procedimientos (funciones también) y su entorno se producen una relación en base a un intercambio de valores de las variables. Estas variables reciben nombres diferentes según este en el código Padre(Principal) o en el código Hijo(Subrutina). Vamos a definir como código Padre, aquel desde el cual se llama a una subrutina y, el código Hijo, la subrutina que estamos llamando. Parámetros Actuales son los que utiliza el programa Padre para relacionarse con una subrutina en concreto, y parámetro Formales son los que posee el programa Hijo y que lo relaciona con el Padre. Algoritmo Llama_Factorial Variable real num, valor 1. Escribir "Introduzca el número a factorizar:" 2. Leer num 3. Factorial(num, valor) // Llama al Procedimiento Factorial 4. Fin Obsérvese que los parámetros actuales y formales no tienen por que llamarse de igual forma, sin embargo es condición necesaria que sean del mismo tipo y que estén en el mismo orden. La transmisión de un parámetro como valor y no como variable, hace que el programa Padre no reciba las posibles modificaciones que pueda sufrir dicho parámetro dentro del código Hijo. EJEMPLO Algoritmo Factorial Constante Inicio { Variable real num, valor } 1. Escribir "Introduzca el número a factorizar:" 2. Leer num 3. valor 0 4. Factorial(num, valor) // Llama al Procedimiento Factorial 5. Escribir "El factorial es: ",valor 6. Fin Se puede observar claramente que siempre que introduzcamos cualquier número vamos a obtener que el factorial es 0, pues al introducir la variable de forma numérica no se actualiza en el procedimiento. Variables Globales y Locales. De igual forma que en el apartado anterior diferenciábamos entre parámetros formales y actuales, ahora vamos a realizar una distinción entre variables globales y locales. Podemos definir variable global como aquella que puede ser utilizada (leída, modificada, etc.) a lo largo de todo el algoritmo principal y también por cualquiera de los subalgoritmos (entiéndase funciones y procedimientos) que componen el algoritmo en sí. De igual forma, una variable local, es aquella que sólo 104
Algoritmo y Estructura de Datos I
puede ser referenciada dentro del subalgoritmo en el cual ha sido declarada. Para simplificar, podemos decir que las variables globales pueden ser referenciadas desde cualquier parte del algoritmo mientras que las locales únicamente serán referenciadas dentro del subalgoritmo al que pertenece: Variables Locales ==> Subalgoritmo propio Variables Globales ==> Cualquier subalgoritmo
Procedimiento Versus Función: Los procedimientos y funciones son subprogramas cuyo diseño y misión son similares; sin embargo, existen unas diferencias esenciales entre ellos. 1º
Un procedimiento es llamado desde el algoritmo o programa principal mediante su nombre y una lista de parámetros actuales, o bien con la instrucción llamar_a (call). Al llamar procedimiento se detiene momentáneamente el programa que se estuviera realizando y el control pasa al procedimiento llamado. Después que la acción se realiza inmediatamente el control continua en la rutina que invoco el procedimiento.
2º
Las funciones se devuelven un valor, los procedimientos pueden devolver 1,1 o n valores y en forma de lista de parámetros.
3º
El procedimiento se declara igual que la función, pero su nombre asociado a ninguno de los resultados que obtiene.
no esta
La declaración de un procedimiento es similar a la funciones. Procedimiento nombre [(lista de parámetros formales)]
fin_procedimiento EJERCICIOS RESUELTOS 1.
¿Cómo hallaría la aceleración de un determinado cuerpo usando subprogramas teniendo como datos la masa y la fuerza?. ¿Qué es la aceleración? Es la variación de velocidad de una partícula en cada unidad de tiempo. En este problema se utilizará la formula de la 2ª ley de Newton
Soluciòn: Como en el problema te dice que se tiene como dato la masa y la fuerza entonces se recordara la formula de la 2ª ley de Newton: f = m * a , despejando la aceleración se obtiene, a = f / m
105
Algoritmo y Estructura de Datos I
Procedimiento aceleración (Real a, real f, real m) { Procedimiento que calcula aceleración con datos o parámetros enviados fuerza f y masa m } Inicio a f / m Fin Principal USA_ACELERACION Inicio { Reales x, w , z } 1. Escribir ”Ingrese fuerza”, w 2. Leer w 3. Escribir ”Ingrese fuerza”, z 4. Leer z 5. aceleración ( x, w, z ) 6. Escribir ”la aceleración es”, x 7. Fin Diagrama de flujo
Procedimiento aceleración Reales a f m
Inicio
af/m Fin
Princi al:
Inicio
Reales x w z In rese w z
aceleración( x, w , z )
“La aceleración es” x
Fin
106
Algoritmo y Estructura de Datos I
2.
Hacer la transformación de un ángulo de grados a radianes.
Solución: Pseudocódigo Función cambio_g_r (real g ) Inicio r g*3.1415/180 devolver (r) Fin Principal usa_cambio_g_r Inicio { Real g, y } 1. Escribir “Dar ángulo en grados” 2. Leer (g) 3. y cambio_g_r( g) 4. Escribir y 5. Fin Diagrama de flujo:
Función cambio_g_r (Real g)
Inicio
Devolver
*3.1415/180 Fin
Princi al:
Inicio
Reales In rese
y cambio_g_r (g)
Fin
107
Algoritmo y Estructura de Datos I
Traza: Dando un valor a g : Por ejemplo g 60 Ahora y 60*3.1415/180 y 1,047 con g 90 y 90*3.1415/180 y 1.570
3.
Hacer la función para calcular el n-esimo término de la sucesión de Fibonacci. Pseudocódigo de la función: Función n_ter_Fibonacci(entero x) Inicio { Entero ax } ax (((( 1+ (5**0.5))/2)** x)-((( 1-(5**0.5))/2)** x))/5**0.5 devolver (ax) Fin
Pseudo código de la rutina principal: Principal: ter_nesimo_Fibonacci Inicio {entero n, tn} 1.- Escribir “Ingrese n” 2.- Leer n 3.- tn n_ter_Fibonacci (n) 4.- Escribir “n-esimo termino de sucesión de Fibonacci”; tn 5.- Fin
108
Algoritmo y Estructura de Datos I
Diagrama de flujo
Función n_ter_Fibonacci(entero x)
Inicio
Devolver (((( 1+ (5**0.5))/2)** x)-((( 1-(5**0.5))/2)** x))/5**0.5 Fin
Princi al:
Inicio
Entero n tn In rese n tn
n_ter_Fibonacci (n)
tn
Fin
Traza: Datos(n)
Salidas(tn)
2
1
3
2
6
8
10
55
1, 1, 2, 3, 5, 8....
109
Algoritmo y Estructura de Datos I
4.
Hacer la subrutina o función que devuelva el máximo común divisor de dos números (a, b) . Hacer la traza (corrida) respectiva. Es un divisor común de los números, el cual será el mayor de todos ellos. Para calcular el máximo común divisor (m.c.d) se recurrirá a una función especifica de definida como un subalgoritmo, para demostrar se hará la traza con los números (10 y 25).
Solución: Pseudocódigo Función m_c_d (entero x, entero y) Inicio Repetir mientras ( x ¡= y ) hacer Si x > y entonces x x–y Si no y y–x fin_si Fin_hacer Devolver (x) Fin Principal USA_MCD Inicio {entero: a, b, n} 1. Escribir “ingrese datos a y b “ 2. Leer (a y b) 3. n m_c_d (a, b) 6. Escribir (a, b, n) 7. Fin
110
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Función mcd (entero x, entero y)
Inicio F x!=y V V x
F
x>y x-y
y
y-x
Devolver (x) Fin
111
Algoritmo y Estructura de Datos I
Principal:
Inicio
Entero a, b, n
Ingrese datos a y
a, b
n
mcd ( a, b)
a, b, n
FIN
112
Algoritmo y Estructura de Datos I
Traza: Las variables locales de la función son variables x, y
a, b y no modificaran los valores de las
Variables del programa principal
variables de la función
a 10
b 25
x 10 10 10 05
n
y 25 15 05 05
Las operaciones del algoritmo son : 1.
y> x realizara la operación y y – x Por consiguiente y tomara el valor de 25 – 10 = 15 Ademas x sigue valiendo 10
2.
Ahora siendo x 10 , y 15 Se realizara la misma operación anterior y y – x es decir 15 – 10 = 5
3.
Ahora x 10 , y 5 Como x> y entonces se realizara Es decir 10 - 5 = 5
x
Entonces ya tenemos los valores iguales a =5 ., b=5 Entonces el mcd de (10 ,25) =5 El resultado de ejecución será
10, 25, 5
113
x–y
mcd (a, b)
05
Algoritmo y Estructura de Datos I
5.
Haga el algoritmo que simplifique una fracción, dividiendo numerador y denominador por su máximo común divisor.
Principal: simplificar_quebrado Var Entero: n, d Inicio Escribir (`Deme numerador´) Leer (n) Escribir (“Ingrese denominador”) Leer (d) Escribir (n, ` / `, d, `=`, n div mcd (n, d), ` / `, d div mcd (n,d)) Fin Función: mcd (E entero: n, d) Var Entero: r Inicio r n mod. d Repetir mientras ( r <> 0) hacer n d d r r n mod. d Fin_ hacer Devolver (d) Fin
114
Algoritmo y Estructura de Datos I
Función Mcd (Entero n, entero d)
Entero: r
Inicio
r n mod. d F r<>0 V n d
d r
r n mod. d
Devuelve (d)
Fin d = Mcd.
115
Algoritmo y Estructura de Datos I
Principal:
Inicio
Entero n, d Mcd 1, n1, d1
Ingrese numerador
n
Ingrese denominador
d
Mcd1 mcd(n, d)
n1 n div. Mcd1
d1 d div. Mcd1
n ``/`` d ``=`n1``/``d1
Fin
Mcd1, n1, d1
Variables auxiliares.
116
Algoritmo y Estructura de Datos I
6.
Haga el algoritmo que implemente la función signo.
PROBLEMA Función Signo (Real x)
Función signo (Real: x) inicio si x>0 entonces
Inicio
F
devolver (1)
x>0
si_no
Devolver 1
V
si x<0 entonces
x<0
devolver (-1)
V
si_no
F Devolver 0
Devolver -1
devolver (0) fin_si
Fin
fin_si fin_función
Principal: Principal signos Inicio
Inicio
Entero: y, z
{ Entero: y, z
Real: P
In rese P
Real: P } y signo (P) , x signo (cos (P)) 1. Leer (P) 2. y signo (P)
x, 3. z signo (cos (P)) 4. Escribir (y, z)
Fin
5. Fin
117
Algoritmo y Estructura de Datos I
Traza Parámetro actual
Parámetro formal
P
x
El parámetro formal x se constituye por el parámetro actual. Así, por ejemplo, si el parámetro P vale -1.45. Los valores devueltos por la función signo que se asignará a las variables y, z son: y signo (-1.45) z signo (cos (-1.45))
resultando: y = -1 z=1
7.
Haga el algoritmo que implemente la función seno de x mediante la siguiente serie:
x − Sen(x) =
x 3 3!
+
x 5 5!
−
x 7 7!
+ ...
Con x ángulo en radianes Principal: Calcular_seno Inicio { Real : gr, x Carácter: resp} 1. resp ´s’ 2. Repetir mientras (resp <> ‘n’) hacer Escribir “ingrese un angulo en grados” leer (gr) x sen(gr) Escribir “seno (“,gr,” ) = “, x) Escribir (‘¿Otro angulo?’) Leer (resp) Fin_hacer 3. Fin
Función factorial. (Entero : n) Inicio { Real: f Entero: i } 1. f 1 118
(hasta 17 términos).
Algoritmo y Estructura de Datos I
2.
3. 4.
Repetir con I desde i f f*1 i i +1 Fin_hacer Devolver (f) Fin.
1 hasta n hacer
Función potencia (Real: x; Entero: n) Inicio { Real: pot Entero: i } 1. pot 1 2. Repetir con i desde i 1 hasta n hacer pot pot * x Fin_hacer 3. Devolver (pot) 4. Fin
Función seno (E real: gr) Inicio:{Variable real: x, s, p, f Entero: i, n} 1. x gr * 3.141592 / 180 2. s x 3. Repetir con i desde i 2 hasta 17 hacer n 2 * i - 1 si (i mod 2 ¡= 0) entonces p potencia (x,n) f factorial(n) s – p / f sino s s + p / f Fin_si Fin_hacer 4. devolver(s) 5. Fin
119
Algoritmo y Estructura de Datos I
Principal: inicio Real :gr, x Carácter: resp resp ´s’ F resp ¡= ´n’ V Ingrese gr en grados
gr x seno(gr) “gr en radianes es”, x
Ingrese otro angulo
resp
Fin
120
Algoritmo y Estructura de Datos I
Función Seno (gr) Inicio x gr * 3.141592 / 180 s x i 2 F i < = 17 V n
2*i-1
V
F i mod 2 ¡= 0
PPotencia (x,n)
P
Potencia (x,n)
F Factorial (n)
F Factorial (n)
s s + potencia(x,n) / factorial (n) s s – potencia(x,n) / factorial (n)
Devolver s
+
Fin 121
Algoritmo y Estructura de Datos I
Factorial (n)
Inicio
i 1 f 1
i<=n V f f *1
Devolver (f)
Fin
122
F
Algoritmo y Estructura de Datos I
Potencia (x,n)
Inicio
Pot1 i 1 F i <= n V pot pot * x
Devolver (pot)
Fin
Traza: Ingrese 2: Sen (2) x 2*3.1416 / 180 sx desde i 2 hasta 17 n 2*(2)-1 2mod 2<>0 s 0.034 + potencia (0.034,3)/ factorial(3)
123
Algoritmo y Estructura de Datos I
Potencia(0.034,3) Pot1 i13 pot1*0.034 pot1=0.034 pot2 =0.12 pot3= 0.039 factorial: f 1 i1 hasta 3 f f * 1 f1=1 f2=2 f3=6
124
Algoritmo y Estructura Estructura de Datos I
CAPITULO V
RECURSIVIDAD
Recursividad Concepto, tipos, directa e indirecta Procesos recursivos Un objeto o proceso es recursivo, si esta definido en termino del mismo P = R (P, X) Donde: P, Proceso recursivo R, Relación recursiva X, Forma explicita: Condición inicial o caso trivial (permite el término de recursión) Funciones definidas de forma recursiva (recurrente) Son aquellas funciones cuyo dominio puede ser recursivamente definido. 1.
Cadena de caracteres, puede ser expresada por la cadena vacía o un carácter seguido de una cadena. En la función Cad(x,n), x es el tipo de carácter, n numero de caracteres, ε = ’’ = { } , cadena vacía
ε
, si n = 0
xCad(x,(n -1))
, si n >= 1
Cad(x,n) =
Por ejemplo si x ’a’ entonces: Cad(a,4) = aCad(a, 3) = aaCad(a, 2) = aaaCad(a, 1) = aaaaCad(a, 0) = aaaaε = aaaa = “aaaa”
125
Algoritmo y Estructura Estructura de Datos I
2.
Función factorial de n (n es entero positivo) Fact(n), n!:
1
,
si n = 0
n * Fact(n -1)
,
si n > 1
Fact(n) =
Por ejemplo si n 4 entonces: Fact(4) = 4*Fact(3) = 4 * 3 * Fact(2) = 4 * 3 * 2 * Fact(1) Fact(1) = 4 * 3 * 2 * 1 * Fact(0) = 4 * 3 *2 * 1 *1 = 4 * 3* 2 *1 = 24 3.
Potencia de un número entero positivo, puede ser expresada por el número multiplicado por la potencia del exponente disminuido en uno. En la función Pot(x,n), x es un entero positivo, n es el exponente(n ЄN).
Pot(x,n)
=
1
, si n = 0
x*Pot(x,(n -1))
, si n >= 1
Por ejemplo si x 2 y n4 entonces: Pot(2,4) = 2*Pot(2, 2*Pot(2, 3) = 2 * 2 * Pot(2, 2) = 2 * 2 * 2 *Pot(2, 1) 1) = 2 * 2 * 2 * 2 * Pot(2, 0) = 2 * 2 *2 * 2 *1 = 2 * 2* 2 *2 = 16 Algoritmo recursivo recursivo (recurrente) (recurrente) Es la implementación en forma algorítmica de funciones recursivas.
126
Algoritmo y Estructura Estructura de Datos I
En un algoritmo recursivo distinguimos como mínimo 2 partes: a).
Forma explicita, explicit a, caso trivial, base o de fin de recursión: Es un caso donde el problema puede resolverse sin tener que hacer uso de una nueva llamada a sí mismo. Evita la continuación indefinida de las partes recursivas.
b).
Parte puramente recursiva: Relaciona el resultado del algoritmo con resultados de casos más simples. Se hacen nuevas llamadas a la función, pero están más próximas al caso base.
EJEMPLO: 1. Calcule el factorial de un número entero n, (n>=0). Solución usando recursividad: Pseudocódigo Funcion Inicio {Variable
Fact( Entero n ) fact : enteros } 1. Si ( n = 0 ) entonces Devolver 1 Sino Devolver n * Fact(n -1) -1) Fin_si
2. Fin Principal Inicio {Variable
FACTORIAL_DE_N n, F : enteros } 1. Escribir “Valor de n” 2. Leer n 3. Si ( n > = 0 ) entonces Invocar funcion F ← Fact(n) Escribir “El factorial de n es:”, F Sino Escribir “El numero es negativo:” Fin_si
4. Fin
127
Algoritmo y Estructura de Datos I
Diagrama de flujo.-
Fact(Entero n)
Inicio fac 1
F n=0 V Devolver 1
Fin
128
Devolver n * Fact(n-1)
Algoritmo y Estructura de Datos I
Principal:
Inicio
Ingrese n
V
F n>0
“Numero <0”
F Fact(n)
Imprime F
Fin
129
Algoritmo y Estructura de Datos I
1.
Calcule la potencia de un número entero x, donde n es el exponente (n función Pot(x,n), x es un entero positivo, n es el exponente(n ЄN).
Solución usando recursividad: Pseudocódigo Función Inicio {Variable
Pot( Entero x, entero n ) pot 1.
: enteros } Si ( n = 0 ) entonces Devolver 1 Sino Devolver x * Pot(x, n -1) Fin_si
2. Fin Principal Inicio {Variable
POTENCIA_DE_X_A_LA_N x, n, P : enteros } 1. Escribir “Valor de x” 2. Leer x 3. Escribir “Valor de n” 4. Leer n 5. Si ( n >= 0 ) y ( x ¡= 0 ) entonces Invocar funcion P Pot(x , n) Escribir “Potencia de”, x ,“a la potencia “, n, “es:”, p Sino Escribir “El numero x = 0 y/o n es negativo:” Fin_si
6. Fin
130
Є N).
Algoritmo y Estructura de Datos I
Diagrama de flujo.-
Pot(Entero x, entero n)
Inicio Pot1
F n=0 V Devolver 1
Fin
131
Devolver x * Pot(x,n-1)
Algoritmo y Estructura de Datos I
Principal:
Inicio
Ingrese x, n
V
F x!=0 y n>0
“x=0 o n<0”
P Pot(x, n)
Im rime P
Fin
132
Algoritmo y Estructura de Datos I
Los Número del Catalan Es muy útil en los problemas de análisis combinatorio. Tienen varias aplicaciones con los datos de (n) matrices que permiten calcular o encontrar el número de formas en que se podrían multiplicar. Además también nos permite determinar el número de formas en que un polígono con (n) lados se puede descomponer en n triángulos diferentes. También es utilizado en la combinatoria de los números de Catalan que forman una secuencia de números naturales que aparece en diversos problemas de conteo que son recursivos. Este algoritmo proviene del matemático belga Eugene Charles Catalan. La siguiente formula donde se obtiene el enésimo número de Catalan. 1 Cat(n)
2n
= n+1
con n ≥ 0
n
Es expresado también de la siguiente función:
Cat(n) =
1 n-1
∑
, Si n = 1 Cat( i ) * Cat(n-1)
i=1
, Si n ≠ 1
También: 1
, Si n = 0
Cat(n) = 2* (2*n -1) * Cat(n-1) (n+1)
, Si n > 0
En los números de Catalan de formula recursiva son: 1, 1, 2, 5, 14, 42, 132, 429, 1430...... Cat(6) = ((2* 11)/7) * Cat(5) Cat(6) = ((2* 11)/7) * ((2*9)/6) *Cat(4) Cat(6) = ((2* 11)/7) * ((2*9)/6) *((2*7)/5)*Cat(3) Cat(6) = ((2* 11)/7) * ((2*9)/6) *((2*7)/5)*((2*5)/4)*Cat(2) Cat(6) = ((2* 11)/7) * ((2*9)/6) *((2*7)/5)*((2*5)/4)*((2*3)/3)*Cat(1) Cat(6)=((2* 11)/7) * ((2*9)/6) *((2*7)/5)*((2*5)/4)*((2*3)/3)*((2*1)/2)* Cat(0) Cat(6) = ((2* 11)/7) * ((2*9)/6) *((2*7)/5)*((2*5)/4)*((2*3)/3)*((2*1)/2)*1
133
Algoritmo y Estructura de Datos I
Cat(6) = ((2* 11)/7) * ((2*9)/6) *((2*7)/5)*((2*5)/4)*((2*3)/3)*1*1 Cat(6) = ((2* 11)/7) * ((2*9)/6) *((2*7)/5)*((2*5)/4)*2*1*1 Cat(6) = ((2* 11)/7) * ((2*9)/6) *((2*7)/5)*(5/2)*2 Cat(6) = ((2* 11)/7) * ((2*9)/6) *((2*7)/5)*5 Cat(6) = ((2* 11)/7) * ((2*9)/6) *(2*7) Cat(6) = ((2* 11)/7) * ((2*9)/6) *14 Cat(6) = ((2* 11)/7) * ((1*3)/1) *14 Cat(6) = ((2* 11)/7) * 42 Cat(6) = ((2* 11)/1) * 6 Cat(6) = 132 Si el N ¿ 5 que arrojaría como valor al número 14 se muestraría casi como contorno de llamadas recursivas. La forma de resolución será de la siguiente manera: Pseudocódigo: Función: Catalan (Entero n) Inicio { n es un valor numérico entero positivo i, s son variables de tipo entero} 1.
Si (n = 1)
2.
Fin_si Fin
entonces Devolver (1) Si no s 0 Repetir con i desde 1 hasta n hacer Catalan s + Catalan (i) * Catalan (n -1) Fin_hacer Devolver (Catalan)
Tipos de recursión Recursividad simple: Aquella en cuya definición sólo aparece una llamada recursiva. Se puede transformar con facilidad en algoritmos iterativos. Recursividad múltiple: Se da cuando hay más de una llamada a sí misma dentro del cuerpo de la función, resultando más difícil de hacer de forma iterativa.
134
Algoritmo y Estructura de Datos I
Ejemplo Fibonacci
Fibo(n) =
1
,
si n = 0
1
,
si n = 1
Fibo(n-2) + Fibo(n -1) , si n > 1
Por ejemplo si n 4 entonces: Fibo(4) = FIbo(3) + Fibo(2) = FIbo(2) + Fibo(1) + Fibo(2) = FIbo(1) + Fibo(0) + Fibo(1) + FIbo(1) + Fibo(0) = 1 + 1 + 1 + 1 + 1 = 5 Funcion Fibo( Entero n ) Inicio Si(n<=1) entonces Devolver (1) Sino Devolver (Fibo(n-1) + Fibo(n-2)) Fin Recursividad anidada: En algunos de los argumento de la llamada recursiva hay una nueva llamada a sí misma. Ejemplo Ackerman
Ack(n,m) =
m+1
, si n = 0
Ack(n-1,1)
, si n > 0, m = 0
Ack(n-1, Ack(n,m-1))
, si n > 0, m >0
Por ejemplo si n=2 y m=2 entonces: Ack(2,2) = Ack(1, Ack(2, 1 = Ack(1, Ack(1,Ack(2,0 = Ack(1, Ack(1, Ack(1,1 = Ack(1, Ack(1, Ack(0,Ack(1,0 = Ack(1, Ack(1, Ack(0,Ack(0,1 = Ack(0, Ack(1, Ack(0, 2 = Ack(1, Ack(1, 3 = Ack(1, Ack(0, Ack(1,2) = Ack(1, Ack(0, Ack(0,Ack(1,1 135
) )) )) )) )) )) ) )) )))
) ) ) ) ) ) ) ) )
Algoritmo y Estructura de Datos I
= = = = = = = = = = = = = = = = = =
Ack(1, Ack(1, Ack(1, Ack(1, Ack(1, Ack(1, Ack(0, Ack(0, Ack(0, Ack(0, Ack(0, Ack(0, Ack(0, Ack(0, Ack(0, Ack(0, Ack(0,
Ack(0, Ack(0, Ack(0,Ack(1,0 )))) Ack(0, Ack(0, Ack(0,Ack(0,1 )))) Ack(0, Ack(0, Ack(0, 2 ))) Ack(0, Ack(0, 3 )) Ack(0, 4) ) 5 ) Ack(1, 4 ) Ack(0, Ack(1,3 )) Ack(0, Ack(0, Ack(1,2 ))) Ack(0, Ack(0, Ack(0,Ack(1,1 )))) Ack(0, Ack(0, Ack(0,Ack(0,Ack(1,0 Ack(0, Ack(0, Ack(0,Ack(0,Ack(0,1 Ack(0, Ack(0, Ack(0, Ack (0, 2 Ack(0, Ack(0, Ack(0, 3 Ack(0, Ack(0, 4 Ack(0, 5 6 7
) ) ) ) ) ) ) ) ) ))))) ))))) )))) ))) )) )) )
) ) ) ) )
Funcion Ack( Entero n, Entero m ) Inicio Si (n=0 ) entoces Devolver(m+1) Sino Si(m=0) entonces Devolver(Ack(n-1,1)) Sino Devolver(Ack(n-1, Ack(n,m-1))) Fin_si Fin_si Fin
Recursividad cruzada o indirecta: Son algoritmos donde una función provoca una llamada a sí misma de forma indirecta, a través de otras funciones. Ejemplo Par o Impar: Funcion par( int nump ) Inicio Si (nump=0) entonces Devolver(1) Sino Devolver( impar(nump-1)) Fin
136
Algoritmo y Estructura de Datos I
Funcion impar( int numi ) Inicio Si (numi==0) entonces Devolver(0) Sino Devolver( par(numi-1)) Fin
137
Algoritmo y Estructura de Datos I
CAPITULO VI
ESTRUCTURAS DE DATOS: ARREGLOS
Datos estructurados
Los datos estructurados son conjuntos de datos simples agrupados y/o propiedades vinculado a un grupo de casillas de memoria
con
Tipos Estáticos , trabajan con una cantidad fija de espacio de memoria, estos son: Arreglos,
registros o estructuras, archivos, cadenas, conjuntos, etc.
Dinámicos, trabajan con una cantidad de memoria que se ajusta a la demanda de
datos, estos son: Listas, pilas, colas, grafos, etc. Arreglos unidimensionales
Es una colección finita, homogénea y ordenada de elementos, que puede ser representada por un conjunto secuencial de cajones (recipiente) en los cuales se pueden guardar elementos llamados componentes (contenido). También se le dice vector a un arreglo unidimensional otra manera de definir es considerarla como una variable cuya estructura es una sucesión de elementos del mismo tipo. Así una variable de cadena es un vector de caracteres, ya que esta formado por una sucesión de variables del tipo carácter. Así podemos crear vectores de diferentes tipos. A los arreglos se le da una denominación, por ejemplo A, pero hay que indicar hasta cuantos cajones puede tener por ejemplo m cajones y se representa A[m] Por su contenido se pueden ingresar n elementos (componentes, datos) en m cajones, donde se cumple n <= m y representan una sucesión de elementos: a1, a2, a3, a4,….. an Cada elemento o componente se puede referenciar por su posición en la sucesión con un índice i que se relaciona con A[i], por ejemplo si i ← 3, indica el cajón 3 y el contenido o componente es A[i] es decir A[3] que representa el dato a3
139
Algoritmo y Estructura de Datos I
Representación grafica de arreglos:
A
● ● ● ● ●
1
2
3
4
5
m-1
m
A es un arreglo vació de m cajones
A
a1
a2
a3
a4
● ● ●
an
● ● ●
1
2
3
4
● ● ●
n
● ● ●
99
100
A es un arreglo de 100 cajones con n elementos n<=100 Propiedades Finita, porque tiene un numero limitado de cajones m=100 Homogénea , porque el tipo de dato de cada elemento o componente tiene que ser el
mismo para todos los elementos.
Estos pueden ser caracteres, números enteros, números reales, etc. Por ejemplo a1, a2, a3, a4,….. an: todos sean números enteros Ordenada , por que cada cajón tiene un índice desde uno hasta el un numero límite m
que esta predeterminado y es invariable Declaración de un arreglo
Para declarar un arreglo (vació) de cien cajones se usa: Arreglo de enteros A[100] O simplemente: Entero A[100]
140
Algoritmo y Estructura de Datos I
A
● ● ● ● ●
1
2
3
4
5
99
100
Se pueden llenar con elementos que sean números enteros Acceso a un arreglo
Para llenar con componentes cada cajón del arreglo se usa: Asignación: A[1] 3 A[2] -6 A[3] 7 A[4] -2
A
3
-6
7
-2
1
2
3
4
● ● ● ● ●
5
También lectura de teclado Leer (A[1]) y pulso 4 Leer (A[2]) y pulso -5 Leer (A[3]) y pulso 9 Leer (A[4]) y pulso -1
141
99
100
Algoritmo y Estructura de Datos I
A
4
-5
9
-1
1
2
3
4
● ● ● ● ●
5
99
100
99
100
99
100
Para ver el contenido de un elemento del arreglo B dado se hace:
B
8
99
3
1
2
3
-7
● ● ● ● ●
5
Escribir (B[1]) y aparecerá en pantalla 8 Escribir (B[2]) y aparecerá en pantalla 99 Escribir (B[3]) y aparecerá en pantalla 3 Escribir (B[4]) y aparecerá en pantalla -7 Determinación de las características del trabajo con arreglos
En el siguiente arreglo se tiene:
C
7
-4
1
-9
1
2
3
4
● ● ● ● ●
5
142
Algoritmo y Estructura de Datos I
Denominación nombre o identificador del arreglo: C Numero total de cajas del arreglo C NTC(C) = m = 100 Numero de elementos o componentes del arreglo C, n = 4 El índice puede ser representado por una variable entera y un arreglo puede tener varios índices por ejemplo i, j, k Para ver el contenido de cada elemento se hace: Escribir (C[1]) y aparecerá en pantalla 7 Escribir (C[2]) y aparecerá en pantalla -4 Escribir (C[3]) y aparecerá en pantalla 1 Escribir (C[4]) y aparecerá en pantalla -9 Para modificar algún elemento del Arreglo, se hace por asignación o por lectura de teclado, por ejemplo: Si hacemos i 1 , j 2, k 4 C[ i ]
2
C[i + 1] 9 es lo mismo que C[k - j]
2
C[i + 2] 4 es lo mismo que C[i + j]
2
2 es lo mismo que C[j - i]
C[i + 3] -3 es lo mismo que C[2*i + j] 2
C
2 1
9 2
4
-3
3
4
● ● ● ● ●
5
Otra forma de modificar Si hacemos i 1 C[i] 2 i i +1 C[i] 3 i i +1 C[i] 5 i i +1 C[i] 7
143
99
100
Algoritmo y Estructura de Datos I
C
2 1
3 2
5 3
7 4
● ● ● ● ●
5
99
100
99
100
Tambien: Si hacemos i 1 Leer C[i] y pulsamos 8 i i +1 Leer C[i] y pulsamos 5 i i +1 Leer C[i] y pulsamos 3 i i +1 Leer C[i] y pulsamos -1 Es lo mismo que si hacemos: i 1 Repetir mientras (i <= 4) hacer Leer C[i] // y pulsamos 8, 5, 3, -1 en cada repetición o bucle i i +1 Fin_hacer
C
8 1
5 2
3
-1
3
4
● ● ● ● ●
5
144
Algoritmo y Estructura de Datos I
EJERCICIOS RESUELTOS
1.
Haga el algoritmo del Producto ortonormal.
escalar
Solución:
A
2 1
4 2
6 3
B
5 1
7 2
9 3
Pseudocódigo Principal Producto_Escalar Inicio { Arreglo entero A[3], B[3] Variable entera c} 1. Escribir "Introduzca elementos del arreglo A" 2. Leer ( A[1], A[2], A[3] ) 3. Escribir " Introduzca elementos del arreglo B" 4. Leer ( B[1], B[2], B[3] ) 5. c A[1] * B[1] + A[2] * B[2] + A[3] * B[3] 6. Escribir "El producto escalar es: ",c 7. Fin Traza Usando los datos dados: c = A[1] * B[1] + A[2] * B[2] + A[3] * B[3] c=2*5+4*7+6*9 c = 10 + 28 + 54 c = 92
145
de dos vectores en una base
Algoritmo y Estructura de Datos I
2.
Calcule la varianza y la desviación estándar de un conjunto de datos almacenados en un arreglo.
Solución: La varianza y la desviación estándar son medidas de la dispersión de datos con respecto a la media. Si los datos son muy cercanos a la media el valor de la varianza y la desviación estándar es pequeño, sin embargo; si los datos están muy dispersos ambas medidas serán grandes Varianza matemáticamente si el índice va desde 1 hasta n:
∑ ( X [i] − x) V =
2
n −1
Algorítmicamente: V (suma( (X[i]) – x ) ** 2 ) / (n-1) Si el índice va desde 1 hasta n Desviación estándar D ← (Varianza) ** 0.5 Definición de variables: x
: Media aritmética de los elementos del arreglo.
X[ i ]
: Elemento i-esimo del arreglo.
n
: Cantidad de elementos del arreglo.
i
: Sub. Índice del término actual.
X [m]
: Arreglo unidimensional.
S
: Suma de los n elementos.
Suma : Suma de los cuadrados de las diferencias de cada elemento respecto a la media. Pseudocodigo: Principal: Varianza Inicio {Entero: X[100], n, i Real: S, Suma, x, V , D Leer n Repetir con i desde 1 hasta n hacer Leer X[ i ] i ← i+1 146
Algoritmo y Estructura de Datos I
Fin_hacer S ← 0 Repetir con i desde 1 hasta n hacer S=S+X[ i] i=i+1 Fin hacer x=S/(n) Suma ← 0 repetir con i desde 1 hasta n hacer: Suma = Suma +(X[i] - x)**2 i=i+1 fin hacer V= ( suma ) / (n-1) D = (V) ** 0.5 Escribir “La varianza y la desviación estándar de los números dados son”, V, D Fin Traza: Sea el arreglo X y se leen (ingresan) 6 elementos:
X
10
15
11
17
1
2
3
4
13
14
● ● ●
5
6
● ● ●
99
100
El promedio es: x=13.33 3.
Se tiene el siguiente arreglo:
A 1
2
3
4
5
-5
7
21
-19
4
6 8
7
8
9
10
72
56
-20
30
i 1 A[i]
147
11 51
12 13 14 80
2
-99
15 77
Algoritmo y Estructura de Datos I
Encontrar cuantos son: a. Positivos, su promedio. b. Negativos, su promedio. c. Pares, su promedio. d. Múltiplos de 7, su promedio. e. Invertir el arreglo. SOLUCION
Solucion (a, b) Principal positivos_negativos Inicio {Entero A [15], B [15], C [15], Sp, Cp, j, Sn, Cn, K Real Pp, Pn ç 1. i 1, Sp0, Cp0, Sn0, Cn0, j1, K1 2. Repetir mientras (i < = 15 ) hacer Si (A [i] > = 0) entonces SpSp + A[i] CpCp +1 B[j] A[i] j j + 1 Si no
Sn Sn + A[i] Cn Cn + 1 C[k] A[i] K K + 1
Fin_si i i+1 Fin_hacer Continua…
148
Algoritmo y Estructura de Datos I
B
7
21
4
8
72
56
70
51
J C -5
-14
-20
-11
k 1
Sp
2 3
7
4
28
5
Sn
Cp
Cn
-5
1
1
2 -19
3
6
32
4
7
40
5
8
112
6
9
168
10
-59
2
7
11
198
8
12
249
9
13
329
10
14
331
15
408
3
4 11
…Continuación. 3. Pp Sp/Cp 4. Pn Sn/Cn 5. Escribir “Resultados Positivos”, Cp, Pp 6. Escribir "Resultados Negativos" , Cn, Pn 7. Fin 149
80
2
77
Algoritmo y Estructura de Datos I
Solucion (d, e)
Principal pares_m7_invertir
Inicio { Enteros A [15], D [15], E [15], F [15], i, j, k, Sp, Sm7, Cp, Cm7 Real Pp, Pm7 } 1. 1, K 1, Sp 0, Cp 0, Sm7 0, Cm7 0 2. Repetir con i desde 1 hasta 15 hacer Si (A[i] mod. 2 = 0) entonces Sp Sp + A[i] Cp Cp + 1 D[j] A[i] j j + 1 Fin_ si Si (A[i] mod. 7 = 0) entonces Sm7 Sm7 + A [i] Cm7 Cm7 + 1 E[k] A [i] K K + 1 Fin_ si F [16 - i] A[i] i i + 1 Fin_ hacer 3. Pp Sp/Cp 4. Pm7 Sm7/Cm7 5. Escribir "Resultados Pares", Cp, Pp 6. Escribir "Resultados Múltiples de 7", Cm7, Pm7 7. Fin
150
Algoritmo y Estructura de Datos I
Operaciones con Arreglos
Existen operaciones con arreglos para facilitar su manejo y se desarrollan como subalgoritmos o subrutinas llamados procedimientos: Leer , permite ingresar n datos a un arreglo por lectura de teclado Escribir , permite mostrar n datos a un arreglo en al pantalla Buscar , permite buscar un elemento en un arreglo y ubicar su índice Insertar , permite insertar un elemento en un arreglo, aumenta n Eliminar , permite eliminar un elemento en un arreglo, disminuye n Modificar , permite un elemento por otro en un arreglo, mantiene n
Los arreglos pueden ser de dos tipos según el orden de su contenido: Arreglos desordenados y arreglos ordenados Operaciones con Arreglos desordenados
Se muestra a continuación las rutinas de las operaciones con arreglos desordenados y un algoritmo principal que las invoque, incluye pseudocódigo y diagrama de flujo. Las operaciones de leer y escribir son usadas igual para arreglos ordenados y desordenados 1.
Leer Solución:
Pseudocódigo Procedimiento Leer( V[100] entero, n entero ) { Permite el ingreso de datos a un arreglo V de n elementos } Inicio {Variable: i entero} 1. i 1 2. Repetir con i desde 1 hasta n hacer Escribir “Ingrese V[ ” , i, “ ] = ” Leer V[ i ] i i +1 Fin – hacer 3. Fin Diagrama de flujo:
151
Algoritmo y Estructura de Datos I
Leer( V[100] entero, n entero )
Inicio i 1 F
<= V
Ingrese V[ i ]
V[ i ] i i + 1
Fin
152
Algoritmo y Estructura de Datos I
2.
Escribir Solución: Pseudocódigo
Procedimiento Escribir(entero V[100], entero n) {Permite la visualización de datos de un arreglo de n elementos} Inicio {Variable : i entero} i0 Repetir con i desde 0 hasta n-1 hacer Escribir “V[“, i , ”]=” Escribir V[i] ii+1 Fin_hacer Fin
153
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Escribir(entero V[100], entero n)
Inicio i 1 F
<= V
“V[ “,i,” ]=” V[ i ]
i i + 1
Fin
154
Algoritmo y Estructura de Datos I
3.
Buscar desordenado
Solución: Pseudocódigo Procedimiento Buscar_d(Entero V[100], entero n, entero x) {Permite la buscar un número x en un arreglo desordenado de n elementos} Inicio {Entero: i} i1 Repetir mientras (i<=n) y (V[i] ¡= x) hacer ii+1 Fin_hacer Si i<=n entonces Escribir “El numero ”, x, “se encuentra en la posición “, i Si no Escribir “No se encuentra el numero” Fin – Si Fin
155
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Buscar_d(entero V[100], entero n, entero, x)
Inicio i 1 F
(i<=n) y (V[i] ¡= x) V
i i + 1
i<=n
V
Numero x encontrado en posición i
F
Numero x no se encuentra
Fin
156
Algoritmo y Estructura de Datos I
4.
Insertar desordenado
Procedimiento Insertar_d(Entero V[100], entero n, entero y) {Permite la insertar un número y en una determinada al final de un arreglo} Inicio
{Entero i} Si (n<100) entonces n n+1 V[n] y sino Escribir “El elemento y no se puede Insertar” Fin_si
Fin Diagrama de flujo:
Insertar_d(entero V[100], entero n, entero, x)
Inicio V
F
n<100 nn+1
x no se puede insertar
V[n] y
Fin
157
Algoritmo y Estructura de Datos I
5.
Eliminar desordenado
Procedimiento Eliminar_d(Entero V[100], entero n, entero x) {Permite eliminar el elemento x en un arreglo de n elementos} Inicio {Entero: i, k} i1 Repetir mientras (i<=n) y (V[i] ¡= x) hacer ii+1 Fin_hacer Si i>n entonces Escribir “El numero ”, x, “no se encuentra en el arreglo “ Si no Repetir con k desde 1 hasta (n-1) hacer V[k] V[k+1] kk+1 Fin_hacer n n - 1 Fin – Si Fin
158
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Eliminar_d(Entero V[100], entero n, entero, x)
Inicio i 1
(i<=n) y (V[i] ¡= x)
i i + 1
i>n k1
V
F
Numero x no se encuentra k<=n-1 V
F
V[k] V[k+1] kk+1
nn-1
Fin
159
Algoritmo y Estructura de Datos I
6.
Modificar desordenado
Procedimiento Modificar_d(Entero V[100], entero n, entero x, entero y) {Permite modificar el elemento x por el elemento y en un desordenado} Inicio {Entero: i} i1 Repetir mientras (i<=n) y (V[i] ¡= x) hacer ii+1 Fin_hacer Si i>n entonces Escribir “El numero ”, x, “no se encuentra en el arreglo“ Si no V[i] y Fin _si Fin
160
arreglo
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Modificar_d(entero V[100], entero n, entero x, entero y)
Inicio i 1
(i<=n) y (V[i] ¡= x)
F
V
i i + 1
i>n F
V
Numero x no se encuentra
V[i] y
Fin
161
Algoritmo y Estructura de Datos I
Principal: USA_OPERACIONES_ARREGLOS {Procedimiento principal que invoca a todos los procedimientos anteriores} Inicio {Entero V[100], opc} opc 1 Repetir mientras (opc¡=7) hacer Escribir “Ingrese numero de elementos” Leer(n) Escribir “1.Leer_d” Escribir “2.Escribir_d” Escribir “3.Buscar_d” Escribir “4.Insertar_d” Escribir “5.Eliminar_d” Escribir “6.Modificar_d” Escribir “7.Salir”
Escribir “Seleccione una opción :” Leer opc Según sea (opc) hacer caso 1: Leer(V, n) salir a Fin_hacer Caso 2: Escribir(V, n) salir a Fin_hacer caso 3: Escribir “Ingrese elemento a buscar” Leer x Buscar_d(V, n, x) salir a Fin_hacer caso 4: Escribir “Ingrese elemento a insertar” Leer x Insertar_d(V, n, x) salir a Fin_hacer caso 5: Escribir “Ingrese elemento a eliminar” 162
Algoritmo y Estructura de Datos I
Leer x Eliminar_d(V, n, x) salir a Fin_hacer caso 6: Escribir “Ingrese elemento a modificar” Leer x Escribir “Ingrese modifica” Leer y Modificar_d(V, n, x, y) Fin_hacer Fin_hacer Fin Diagrama de flujo:
163
elemento
quea
Algoritmo y Estructura de Datos I
Inicio
o c1
opc ¡= 7 V
F Ingrese n 1.Leer_d 2.Escribir_d 3.Buscar_d 4.Insertar_d 5.Eliminar_d 6.Modificar_d 7.Salir
In rese o c o c 1
2 L
3 E
4 B
5 I
Fin
164
6 El
7 M
S
Algoritmo y Estructura de Datos I
Arreglos bidimensionales (Matrices).
Concepto, declaración y acceso Un arreglo de dos dimensiones, llamada también matriz o tabla, requiere una combinación de fila columna, es por lo cual se manejan dos índices; el primer índice se refiere a la fila o renglón y el segundo a la columna; gráficamente lo podemos entender así: Arreglo A
Col 1
Col 2
Col 3
Col 4
Fila 1 Fila 2 Fila 3 Fila 4
Arreglo de cuatro filas por cuatro columnas vació Para hacer referencia a un elemento del arreglo o matriz se tiene que indicar con dos índices: Nombre_Arreglo[Fila][Columna] Ejemplo: M[3][4] 7, M[1][2] 4, M[5][3] ERROR, M[2][1] 8 Col 1 Col 2 Col 3 Col 4 0 8 2 3
4 3 6 7
1 0 1 8
1 0 7 4
Declaración de Matrices La declaración de una matriz es similar a la de un Arreglo Unidimensional (Vector), con la diferencia de que hay que agregar un índice para referenciar la nueva dimensión de la matriz, la sintaxis es la siguiente: Tipo_de_Dato : Nombre_del_Arreglo[# de Filas][# de Columnas] Ejemplo: La declaración de la matriz mostrada en el ejemplo de arriba sería de la siguiente forma: Entero M[4][4]
165
Algoritmo y Estructura de Datos I
Ejemplo con Arreglos bidimensionales o Matrices 1. Diseñe un Pseucocódigo que permita ingresar por el teclado a la memoria de la computadora una matriz de 3*3 con números enteros leídos del teclado. Solución: Pseudocódigo: Principal LECTURA_MATRIZ Inicio { Entero: M[3][3], Fila, Columna} Repetir con Fila desde 1 hasta 3 hacer Repetir con Columna desde 1 hasta 3 hacer Escribir “Teclee un número: “ Leer M[Fila][Columna] Columna Columna +1 Fin_hacer Fila Fila +1 Fin_hacer Fin 2.
Diseñe un Pseucocódigo que permita mostrar el contenido de la memoria de la computadora de una matriz de 3*3 con números enteros.
Solución: Pseudocódigo: Principal ESCRITURA_MATRIZ Inicio { Entero: M[3][3], Fila, Columna} Repetir con Fila desde 1 hasta 3 hacer Repetir con Columna desde 1 hasta 3 hacer Escribir M[Fila][Columna] Columna Columna +1 Fin_hacer Fila Fila +1 Fin_hacer Fin 3. Obtener un algoritmo que efectúe la multiplicación de dos matrices, A y B. Suponga que A y B, así como el número de elementos son parámetros de entrada. A → m * p elementos B → p * n elementos C de dimensiones m * n (matriz producto) Principal PRODUCTO_MATRICES {Este algoritmo multiplica dos matices, A y B, y produce la matriz C. La matriz A tiene como dimensiones a M * P, mientras que la matriz B tiene como dimensiones P * M. El elemento Cij se obtiene por la formula Cij = Σa Aik * Bkj } K = 1 Inicio{Enteros N, M, P, I, J, K Real A[5][3], B[3][5], C[5][5]
166
Algoritmo y Estructura de Datos I
Inicio {leer la matriz A [M][P]} //Leer (A[N][M]) {Introducir la primera matriz } Repetir con I desde I 1 hasta M hacer Repetir con J desde J 1 hasta P hacer leer (A[I] [J]) J J+1 Fin_hacer I I+1 Fin_hacer {leer la matriz B[P][N]} //Leer B[P][N] {Introducir la segunda matriz } Repetir con I desde I 1 hasta P hacer Repetir con J desde J 1 hasta N hacer leer ( B[ I ] [ J ]) J J+1 Fin_hacer I ← I+1 Fin_hacer {producto de matrices} Repetir con I desde I 1 hasta M hacer Repetir con J desde J 1 hasta N hacer C [ I ] [ J ] 0,0 Repetir con K desde K 1 hasta P hacer C [ I ] [ J ] C [ I ] [ J ] + A[I, K] * B [K, J] K K+1 Fin_hacer J J+1 Fin_hacer I I+1 Fin_hacer Fin
167
Algoritmo y Estructura de Datos I
CAPITULO VII
ESTRUCTURAS DE DATOS: REGISTROS O ESTRUCTURAS
REGISTROS O ESTRUCTURAS Concepto, creación, declaración y acceso Cuando se habló de los arreglos se mencionó que se trataba de una colección de datos, todos del mismo tipo, que era un tipo estructurado de datos, y que con ellos se podía solucionar un gran número de problemas. Sin embargo, en la práctica a veces se necesitan estructuras que permitan almacenar distintos tipos de datos. Para ilustrar este problema veamos el siguiente ejemplo: Una compañía tiene por cada empleado los siguientes datos: Nombre Dirección Edad Sexo
(cadena de caracteres) (cadena de caracteres) (entero) (carácter)
Si se quisiera almacenar estos datos no sería posible usar un arreglo, ya que sus componentes deben ser todos del mismo tipo. La estructura que puede guardar esta información es la que se conoce como registro o estructura, usaremos para comodidad la denominación estructura refiriéndonos a registros. Una estructura es un dato estructurado, donde cada uno de sus componentes se denomina campo. Los campos de un registro o estructura pueden ser todos de diferentes tipos. Por lo tanto, también podrán ser estructuras o arreglos. Cada campo se identifica por un nombre único. No se establece orden entre los campos. Sea DOMICLIO una estructura formada por cuatro campos, uno de los cuales es numérico y los tres restantes son del tipo cadena de caracteres. Su representación, definición, creación queda como se muestra a continuación: CREACION DE UN TIPO DE DATO REGISTRO O ESTRUCTURA Crear estructura DOMICILIO hacer Cadena_de_caracteres : Calle Entero : Número Cadena_de_caracteres : Ciudad Cadena_de_caracteres : País Fin_hacer {Fin de la definición del registro o estructura DOMICILIO}
169
Algoritmo y Estructura de Datos I
DOMICILIO
CALLE
NÚMERO
CIUDAD
PAÍS
Sea CLIENTE una estructura formado por cuatro campos, tres del tipo cadena de caracteres y el otro del tipo real. Su representación queda como se muestra a continuación: Crear estructura CLIENTE hacer Cadena_de_caracteres : Nombre Cadena_de_caracteres : Teléfono Real : Saldo Cadena_de_caracteres : Moroso Fin_hacer
NOMBRE
TELÉFONO
SALDO
MOROSO
DECLARACION E UNA VARIABLE TIPO ESTRUCTURA Tipo_de_dato_estructura Variable_estructura Donde :
Tipo_de_dato_ estructura es el tipo de dato estructura creado Variable_ estructura es una variable de tipo estructura
170
Algoritmo y Estructura de Datos I
EJEMPLO: DOMICILIO
D
ACCESO A LOS CAMPOS DE UN REGISTRO: Como un registro es un dato estructurado no puede accederse directamente como un todo, sino que debe especificarse que elemento ( campo ) del registro interesa. Para ello, en la mayoría de los lenguajes se sigue la siguiente sintaxis : Variable_registro . id_campo Donde : variable_registro Id_campo
es una variable de tipo registro es el identificador del campo deseado
Es decir , se usarán dos nombres para hacer referencia a un elemento : el nombre de la variable tipo registro y el nombre de la componente , separados entre sí por un punto . En base al ejemplo anterior, ilustraremos el ingreso al campo de un registro. Para leer los cuatro campos de una variable D tipo DOMICILIO: Leer ( D.calle , D.número , D.ciudad , D.país ) Para asignar valores a algunos de los campos de una variable C tipo CLIENTE : C.saldo C.moroso C.nombre
C.saldo
+ cant Verdadero Juan Pérez
COMBINACIONES ENTRE ARREGLOS Y REGISTROS : Anteriormente se mencionó que un campo de un registro puede ser de cualquier tipo, por lo tanto también puede ser un registro o un arreglo. A su vez cada componente de un arreglo puede ser un registro. Así se llega a lo siguientes casos: ARREGLOS DE ESTRUCTURAS : En este caso, cada elemento del arreglo será un estructura ( todos los componentes del arreglo serán del mismo tipo de estructura ) . A continuación un ejemplo: Una empresa registra para cada uno de sus clientes los siguientes datos: Cadena de caracteres Cadena de caracteres Real Cadena de caracteres
: Nombre : Teléfono : Saldo : Moroso
Suponiendo que la empresa tiene N clientes necesitará entonces un arreglo de N elementos, en el cual cada componente del mismo es un registro.
171
Algoritmo y Estructura de Datos I
CLIENTE NOM
TEL
A[10 ] SALDO
M
NOM
TEL
SALDO
M
NOM
TEL
SALDO
M
Cada elemento de A será un dato tipo CLIENTE. Por lo tanto si se quiere, por ejemplo, leer el arreglo A, debe leerse por cada componente cada uno de los campos que forman la estructura. Repetir con I desde 1 hasta N hacer Leer A[I].nombre Leer A[I].teléfono Leer A[I].saldo Leer A[I].moroso Fin_hacer ESTRUCTURAS ANIDADAS En las estructuras anidadas, al menos un campo de la estructura es del tipo estructura. EJEMPLO: Una empresa registra para cada uno de sus acreedores los siguientes datos: Nombre Dirección :
( cadena de caracteres )
Calle Número Ciudad País
( cadena de caracteres ) ( entero ) ( cadena de caracteres ) ( cadena de caracteres )
Saldo
( real )
Para definir el tipo del campo Dirección es necesario definir previamente un registro formado por los cuatro componentes ( calle , número , ciudad , país ) que se especifican . Usaremos el registro DOMICILIO del ejemplo anterior para resolver este caso. Crear estructura ACREEDOR hacer Cadena_de_caracteres : Nombre DOMICILIO : Dirección Real : Saldo Fin_hacer { Fin de la definición de la estructura ACREEDOR }
172
Algoritmo y Estructura de Datos I
CREEDOR NOMBRE
DIRECCIÓN CALLE
NÚMERO
CIUDAD
SALDO PAÍS
En este caso, la estructura tiene un campo ( dirección ) que es del tipo DOMICILIO , el cual es una estructura de cuatro campos . Para acceder a los campos de la variable AC de tipo ACREEDROR, la secuencia a seguir es la siguiente: AC.nombre AC.dirección.calle AC.dirección.número AC.dirección.ciudad
AC.dirección.país AC.saldo
ESTRUCTURAS CON ARREGLOS: Los registros o estructuras con arreglos tienen por lo menos un campo que es un arreglo. Veamos el siguiente ejemplo: Una empresa registra para cada uno de sus clientes estos datos : Nombre Teléfono Saldo mensual del último año Moroso
( cadena de caracteres ) ( cadena de caracteres ) ( arreglo de reales ) ( cadena de caracteres )
CLIENTE
NOMBRE
TELÉFONO
SALDOS
173
MOROSO
Algoritmo y Estructura de Datos I
La definición del registro correspondiente es la siguiente : Crear estructura CLIENTE hacer Cadena_de_caracteres : Nombre Cadena_de_caracteres : Teléfono Real : Saldos[10] Cadena_de_caracteres : Moroso Fin_hacer { Fin de la definición de la estructura CLIENTE } En este caso la estructura tiene un campo ( saldos ) que es un arreglo de 12 elementos reales . Para acceder a los campos de la variable CLI de tipo CLIENTE debemos seguirse la siguiente secuencia : CLI.nombre CLI.teléfono Repetir con I desde 1 hasta 10 CLI.saldos[I] CLI.moroso EJERCICIOS RESUELTOS 1.
Se desea guardar los datos, de los circuitos integrados digitales código, pines, denominación, crear una estructura o registro y guarde los datos del 7408, 7432, 74193,74151, 7447.
Solución: A.
Primera alternativa:
Crear 3 arreglos: Entero Entero Cadena de caracteres B.
cod [5] Pin [5] Den [5]
Segunda alternativa:
Crear estructura Chip hacer: Entero
Código
Entero
Pin
Cadena de caracteres
Den
Fin_ hacer
174
Algoritmo y Estructura de Datos I
B-1.
Sub alternativa 1 Usar 5 variables del tipo chip
Principal Chip_ Digitales Crear estructura Chip hacer: Entero
código
Entero
Pin Cadena de caracteres Den
Fin_ hacer Inicio {Chip: X, Y, Z, W, V} Escribir "Ingrese código, pines y denominación" Leer ( X. Código) Leer ( X. Pin ) Leer ( X. Den ) Leer ( Y. Código ) Leer ( Y. Pin ) Leer ( Y. Den, ) Leer ( Z. Código) Leer ( Z. Pin ) Leer ( Z. Den ) Leer ( W. Código ) Leer ( W. Pin ) Leer ( W. Den, ) Leer ( V. Código) Leer ( V. Pin ) Leer ( V. Den ) 17. Fin
175
Algoritmo y Estructura de Datos I
B-2.
Sub alternativa 2. Usar un arreglo de 5 elementos de estructura del tipo chip
Principal Chip _ digital_ arreglos_ estructuras Crear estructura Chip hacer Entero
Código
Entero
Pin
Cadena de carácter
Den.
Fin _ hacer Inicio {
Chip X [5] Entero i
}
Repetir con i desde 1 hasta 5 hacer Leer (X [i].Codigo) Leer (X [i].Pin) Leer (X [i]. Den.) i i + 1 Fin_ hacer Fin
2.
Supóngase que se conoce el nombre y la calificación obtenida en un examen de un grupo de 30 alumnos. Realizar un algoritmo que muestre el promedio del grupo y los nombres de los alumnos que tienen una nota por debajo del promedio.
Solución: Psudocódigo: Principal ARREGLO_DE_REGISTROS Inicio { ALUMNOS es un arreglo de registros . I y J son variables de tipo entero . AC y PROM son variables de tipo real } . 1. AC 0 2. Repetir con I desde 1 hasta 30 hacer Leer ( ALUMNOS[I].NOMRE , ALUMNOS[I].CALIFICACIÓN ) AC AC + ALUMNOS[I].CALIFICACIÓN I I + 1 Fin_hacer 3. PROM AC / 30 4. Escribir “el promedio del grupo es “, PROM // Búsqueda e impresión de los alumnos con calificación inferior al //promedio
176
Algoritmo y Estructura de Datos I
5. Repetir con J desde 1 hasta 30 hacer Si (ALUMNOS[J].CALIFICACIÓN < PROM ) entonces Escribir ALUMNOS[J].NOMBRE Fin_si J J + 1 Fin_hacer 6. Fin
177
Algoritmo y Estructura de Datos I
Diagrama de flujo:
Inicio Entero I y J Real AC y PROM
I <= 30 ALUMNOS I .NOMRE AC
ALUMNOS I .CALIFICACIÓN
AC + ALUMNOS[I].CALIFICACIÓN I I + 1 PROM
AC / 30
El romedio es PROM J
1
J <= 30
ALUMNOS[J].CALIFICACIÓN < PROM
ALUMNOS J .NOMBRE J
J + 1
Fin 178
Algoritmo y Estructura de Datos I
CADENAS DE CARACTERES Concepto, representación, creación, declaración y acceso Una cadena de caracteres es una secuencia de cero (cadena vacía) o más caracteres de entrada/salida. La longitud de una cadena es el número de caracteres que contiene. Las cadenas de caracteres constantes literales se escriben entre comillas dobles. Para ilustrar este problema veamos los siguientes ejemplos: “28 de Julio de 1.821” , “[email protected]” , “abcd_12345_;)(/&” Representar cadenas de caracteres Vamos a emplear arreglos de caracteres para representar cadenas de caracteres. Un delimitador (‘\0’ o CHR(0)) delimitará la cadena dentro del arreglo. Una cadena vacía quedará perfectamente representada por un delimitador en la primera posición del arreglo. A partir del delimitador, el contenido del arreglo no importa. La primera aparición del delimitador marcará la terminación de la cadena. Declaración de cadenas de caracteres Cuando se declara un arreglo de caracteres su contenido es indefinido. 1
2
3
-5
7
21
4 -19
5 4
6 8
7
8
9
72
56
-20
10
11
30 51
12 13 14
15
8
77
0 Uno de los posibles estados iniciales del vector o arreglo cadena Constante Entero Max_long 15 Crear estructura Tpcadena hacer Caracter Tpcadena [Max_long] Fin de hacer Variable Tpcadena cadena Variables tipo cadena de caracteres La posición del carácter terminador marcará el final de la cadena. Por ejemplo, cadena[1] ‘\0’ creará una cadena vacía (“”).
179
2
-99
Algoritmo y Estructura de Datos I
cadena 1
2
3
\0
7
21
4
5
-19
4
6 8
7
8
9
72
56
-20
10
11
30 51
12 13 14
15
80
77
2
-99
Cadena de caracteres vacía (terminador en la primera posición del arreglo, aunque puede haber otros más adelante)
Asignación de cadenas La asignación entre dos arreglos puede hacerse siempre que ambos Sean del mismo tipo. Esto incluye a los arreglos de caracteres donde se guardan cadenas. Variable Tpcadena cad1, cad2... cad1 cad2 // Copia de todo el arreglo Asignación de constantes literales. El terminador se añade automáticamente. La última posición del arreglo se reserva para el terminador. Variable Tpcadena cad1 “ejemplo”, cad2... cad2 “Cadenamuylargaquenocabe” // Sólo se almacenan 14 caracteres Lectura no estándar hasta fin de cadena Declaración de estructuras: Crear estructura Tcadena hacer Caracter
TCadena [.Longitud]
Fin_hacer
/* Lectura hasta el final de la cadena (retorno de carro o longitud máxima) */ Procedimiento LeerCadena (S TCadena cadena ) Inicio { Constantes: Caracter Retornocarro CHR(13)
180
Algoritmo y Estructura de Datos I
Caracter Terminador CHR(0) Entero LongMax 100 Variables:
Entero componente Caracter caracter }
1. componente 1 2. Leer(caracter) 3. Repetir mientras (componente < LongMax) Y (caracter != Retornocarro) Hacer cadena[componente]
caracter
Leer(caracter) componente
componente
+1
Fin_hacer 4. cadena[componente] Terminador 5. Fin Lectura estándar hasta delimitador Principal Lectura_e Constantes: Retornocarro CHR(13) Blanco CHR(32) Tabulador CHR(9) Terminador CHR(0) LongMax 100 Crear estructura Tpcadena hacer Caracter Tpcadena [LongMax] Fin de hacer Funcion: EsDelimitador(Caracter car) Inicio { Variables Booleano esDel False
181
Algoritmo y Estructura de Datos I
1. SI ((car = Retornocarro) O (car = Blanco) O (car = Tabulador) Entonces esDel True Fin_si 2. Devlover esDel 3. Fin
Procedimiento Leer (TCadena cadena ) {Lectura hasta delimitador (blanco, tabulador, retorno de carro) o longitud máxima} Inicio {Variables: Entero componente Carácter: carácter}
1. componente 1 2. Leer(caracter) 3. Repetir mientras (componente < LongMax) Y ( NO ( EsDelimitador(caracter)) hacer cadena[componente]
caracter
Leer(caracter) componente
componente+1
Fin_hacer 4. cadena[componente] Termiador 5. Fin
Escritura estándar de cadenas Constantes: Caracter Temnador
CHR(0)
Numero LongMax 100 Crear estructura Tpcadena hacer Caracter Tpcadena [LongMax] 182
Algoritmo y Estructura de Datos I
Fin de hacer
// Precondición: cadena correctamente definida Procedimiento: Escribir (E TCadena cadena) Inicio{ Variables: Entero comp } 1. comp 1 2. Repetir mientras(cadena[comp] != Terminador) hacer Escribir(cadena[comp]) comp = comp + 1 Fin_hacer 3. Fin
Longitud de una cadena de caracteres Constante Caracter Terminador CHR(0) Entero LongMax 100 Crear estructura Tpcadena hacer Caracter Tpcadena [LongMax] Fin de hacer // Precondición: cadena correctamente definida Funcion: Longitud (E TCadena cadena) Inicio { Variables: Entero comp } 1. comp 1 2. Repetir mientras (cadena[comp] != Terminador) hacer comp = comp + 1 Fin_hacer
183
Algoritmo y Estructura de Datos I
3. Devolver (comp – 1) 4. Fin
Comparación de cadenas Constante Caracter Terminador CHR(0) Entero LongMax 100 Crear estructura Tpcadena hacer Caracter Tpcadena [LongMax] Fin de hacer
Principal ALGORITMO_B Funcion: Iguales(E TCadena cadena1, cadena2) Variables Entero comp, longCad1 , longCad2 Booleano igual Inicio 1. igual true 2. longCad1 Longitud (cadena1) 3. longCad2 Longitud (cadena2) 4. SI (longCad1 = longCad2) Entoces comp 1 Repetir mientras ((comp <= longCad2) Y (iguales)) hacer SI (cadena1[comp]!= cadena2[comp]) Entonces igual False Fin_si comp comp + 1 Fin_hacer 184
Algoritmo y Estructura de Datos I
Sino igual False Fin_si 5.Devolver (igual) 6. Fin
Búsqueda de subcadenas (patrones) Constante Caracter TERMINADOR CHR(0) Entero LongMax 100 Declaración de estructuras: Crear estructura Tpcadena hacer Caracter Tpcadena [LongMax] Fin de hacer // Precondición: las cadenas deben estar correctamente definidas
Principal ALGORITMO Z Funcion: Posicion (E TCadena texto, patron) Variables Entero: i, j, longTxt,longPtr Entero pos Booleano encontrado Inicio 1. longTxt Longitud (texto) 2. longPtr Longitud (patron) 3. i 0 4. encontrado False 185
Algoritmo y Estructura de Datos I
5. Repetir mientras (i + longPtr<=longTxt) Y (NO encontrado) hacer j 1 Repetir mientras(j<=longPtr) Y (texto[i+j] = patron[j]) hacer j j + 1 Fin_hacer SI (j > longPtr) Entoces encontrado
true
Sino i i + 1 Fin_si Fin_hacer 6. SI encontrado Entonces pos i+1 Sino pos -1 Fin_si 7. Devolver (pos) 8. Fin // Posición
186