Vous êtes sur la page 1sur 185

UNIVERSIDAD TECNOLGICA DEL PER

Vicerrectorado de Investigacin

ALGORITMO Y ESTRUCTURA
DE DATOS I
TINS Bsicos
INGENIERA ELECTRNICA, INGENIERA MECATRNICA

TEXTOS DE INSTRUCCIN BSICOS (TINS) / UTP

Lima - Per

Algoritmo y Estructura de Datos I

ALGORITMO Y ESTRUCTURA DE DATOS I


Desarrollo y Edicin:

Vicerrectorado de Investigacin

Elaboracin del TINS:

Ing. F. Manuel Urruchi Pariachi


Ing. Javier Barriga Hoyle

Diseo y Diagramacin:

Julia Saldaa Balandra

Soporte acadmico:

Instituto de Investigacin

Produccin:

Imprenta Grupo IDAT

Queda prohibida cualquier forma de reproduccin, venta, comunicacin pblica y


transformacin de esta obra.

Algoritmo y Estructura de Datos I

El presente material contiene una compilacin de obras de Algoritmos y


Estructura de Datos publicadas lcitamente, resmenes de los temas a
cargo del profesor; constituye un material auxiliar de enseanza para ser
empleado en el desarrollo de las clases en nuestra institucin.
ste material es de uso exclusivo de los alumnos y docentes de la
Universidad Tecnolgica del Per, preparado para fines didcticos en
aplicacin del Artculo 41 inc. C y el Art. 43 inc. A., del Decreto
Legislativo 822, Ley sobre Derechos de Autor.

Algoritmo y Estructura de Datos I

Algoritmo y Estructura de Datos I

PRESENTACIN
El presente texto elaborado en el marco de desarrollo de la Ingeniera, es un
material de ayuda instruccional, para las carreras de Ingeniera de: Electrnica,
Mecatrnica y Telecomunicaciones, para la Asignatura de Algoritmos y Estructura de
Datos I.

Plasma la iniciativa institucional de innovacin de la enseanza-aprendizaje


educativo universitario, que en acelerada continuidad promueve la produccin de
materiales educativos, actualizados en concordancia a las exigencias de estos tiempos.

Esta primera edicin apropiadamente recopilada, de diversas fuentes


bibliogrficas, de uso frecuente en la enseanza de Algoritmos, est ordenada en
funcin del sillabus de la Asignatura, arriba mencionada.

La conformacin del texto ha sido posible gracias al esfuerzo y dedicacin


acadmica de los Profesores Ing. F. Manuel Urruchi Pariachi e Ing. Javier Barriga
Hoyle; contiene los siguientes captulos cuyas descripciones genricas son como sigue:

Captulo I: Conceptos fundamentales de algoritmos. Se dan los conceptos


fundamentales con los cuales se comienza a desarrollar los algoritmos ms simples,
ejercitando el control secuencial usando diagramas de flujo y pseudocdigo.

Captulo II: Estructuras algortmicas de control selectivo. El alumno enfrenta


la posibilidad de cambiar el flujo de los algoritmos; esta seleccin es simple, doble y
mltiple

Captulo III: Estructuras algortmicas de control repetitivas. El alumno puede


explotar su capacidad de cmputo al controlar repeticiones de procesos que requieren
que se evalen variables con un grado pequeo de cambio y permiten resolver
problemas con alto nivel de procesamiento

Captulo IV: Subrutinas algortmicas. El alumno empieza a conceptualizar la


llamada programacin modular permitindose

dividir los algoritmos complejos en

Algoritmo y Estructura de Datos I

unidades ms pequeas llamadas subalgoritmos que luego se usarn con la direccin


de un algoritmo principal

Captulo V: Recursividad. El alumno usa la matemtica del concepto de


recursividad para manejar procesos repetitivos de una manera implcita

Captulo VI: Estructuras de datos: Arreglos. Se inicia el conocimiento de una


estructura que enriquece el manejo de nmeros y datos para el tratamiento ms simple
de los algoritmos.

Captulo VII: Estructuras de datos: Registros o estructuras. Se profundiza


en la creacin de nuevos tipos de datos que a su vez hacen el tratamiento de una
manera ms sencilla de los algoritmos,

ingresando a una complejidad algortmica

impulsando las soluciones creativas a los problemas.

Cerrar estas lneas de presentacin, obliga a reconocer el trabajo acusioso de


los profesores que han contribuido al acopio de temas y a la revisin del presente texto.

LUCIO HERACLIO HUAMN URETA


Vicerrector de Investigacin

Algoritmo y Estructura de Datos I

INDICE
Captulo I
Conceptos fundamentales de Algoritmos........................................

11

Captulo II
Estructuras Algortmicas de Control Selectivas...............................

43

Captulo III
Estructuras Algortmicas de Control Repetitivas .............................

69

Captulo IV
Subrutinas Algortmicas ..................................................................

99

Captulo V
Recursividad ...................................................................................

125

Captulo VI
Estructura de Datos: Arreglos .........................................................

139

Captulo VII
Estructura de Datos: Registros o Estructuras ................................

169

Bibliografa

187

...................................................................................

Algoritmo y Estructura de Datos I

Algoritmo y Estructura de Datos I

DISTRIBUCIN TEMTICA
Clase
N
1

7
8

Tema

Semana

CAPITULO I CONCEPTOS FUNDAMENTALES DE


ALGORITMOS
Nociones de algoritmo
Programas
Lenguaje de programacin
Tipos de datos y Estructuras de un programa
Estructura de algoritmos
Tipos de datos simples
Estructura de un programa
Contadores, acumuladores, interruptores
Estructuras de control, tipos
Estructuras de control secuencial
Ejercicios resueltos
CAPITULO II ESTRUCTURAS ALGORTMICAS DE
CONTROL SELECTIVA
Estructura de control selectivo simple
Estructura de control selectivo doble
Ejercicios resueltos
Estructura selectiva mltiple
Estructura de control selectivo mltiple
Ejercicios resueltos
CAPITULO III ESTRUCTURAS ALGORTMICAS DE
CONTROL REPETITIVAS
Estructura de control de repeticiones repetir mientras
Diagrama de flujo, pseudocdigo, contadores,
acumuladores, interruptores
Ejercicios de control de repeticiones repetir mientras
Estructura de control de repeticiones repetir con

7
8

Repaso Nivelacin
Ejercicios resueltos

10

EXAMEN

10

PARCIAL

Algoritmo y Estructura de Datos I

Clase
N

Tema

Semana

CAPITULO IV SUBRUTINAS ALGORITMICAS

17

Programacin modular
Variables locales y globales
Funciones declaracin
Paso de parmetros
Ejercicios resueltos
Procedimientos
Procedimientos
Declaracin
Paso de parmetros
Ejercicios resueltos
CAPITULO V RECURSIVIDAD
Concepto
Tipos, directa e indirecta
Ejercicios resueltos
CAPITULO
VI
ESTRUCTURAS
DE
ARREGLOS
Concepto, tipos
Arreglos unidimensionales
Ejercicios resueltos
Arreglos bidimensionales.
Concepto, declaracin y acceso
Ejercicios resueltos
CAPITULO VII
ESTRUCTURAS DE
REGISTROS O ESTRUCTURAS
Concepto, declaracin y acceso
Ejercicios resueltos
Cadenas de caracteres
Concepto, declaracin y acceso

18

Repaso Nivelacin
Ejercicios resueltos

18

19

EXAMEN FINAL

19

11

12

13

14

15

16

10

11

12

13
DATOS:

14

15
DATOS:

16

17

Algoritmo y Estructura de Datos I

CAPITULO I

CONCEPTOS FUNDAMENTALES DE ALGORITMOS

Nociones de algoritmos, programas, lenguaje de programacin


Carcter 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 propsitos previamente definidos, desde las tareas cotidianas mas
comunes hasta las tareas tcnicas 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 matemtico rabe Abu
Abdullah Muhammad bin Musa al-Khwarizmi , el cual escribi entre los aos 800 y 825
su obra Quitab Al Jabr Al Mugabala, donde se recoga el sistema de numeracin
hind y el concepto del cero. Fue Fibonacci, el que tradujo su obra al latn y la inici
con las palabras: Algoritmi dicit.
Carcter Formal de los algoritmos
Una de los aparatos mas requeridos por los humanos hoy en da es la computadora u
ordenador que permite la mejora de nuestra:
Capacidad de computo: Calculo, medicin va instrumentos virtuales, control va
interfaces inteligentes, procesamiento de informacin.
Capacidad en el desarrollo de mltiples tareas: Laborales y de entretenimiento va
las herramientas de diseo asistido por computadora CAD, la ofimtica y la multimedia.
Capacidad de comunicacin: Por el acceso a Internet y redes inalmbricas.
Son las ciencias de la computacin (informtica) la disciplina cientfica encargada de
sistematizar el dominio de los algoritmos para luego estas puedan ser aplicados a la
solucin de problemas mediante el uso de la computadora.

Programas.
Diferencia entre el lenguaje algortmico y el informtico.
El lenguaje algortmico es aquel que usa modelos textuales o smbolos grficos por
medio del cual se transcribe una rutina de procedimientos resultado de un anlisis
previo del problema a resolver y encontrar un mtodo que permita resolverlo.
Una rutina o algoritmo se denominan al conjunto de todas las operaciones a
realizar, y el orden en el que deben efectuarse, para lograr un objetivo o resolver
un problema.
El lenguaje informtico llamado lenguaje de programacin 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 ms cercano a la mquina 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 ms cercano a la comprensin humana y lenguaje de bajo nivel
a aquellos que con buen conocimiento de los componentes hardware permiten hacer
cdigos que sern ejecutados por la mquina.
Un programa es el conjunto de instrucciones o comandos que una a una en un
orden secuencial decodifica y ejecuta la computadora para alcanzar un resultado
o resolver un problema especfico.
Lenguaje de programacin.
Los lenguajes de programacin se construyen con un campo de la ciencias de la
computacin denominado teora de compiladores y estos a su ves son los que generan
los lenguajes de programacin es decir el diseo y desarrollo de un compilador define
un determinado lenguaje de programacin
Los compiladores tienen tres componentes, el escner, el parser, y el sintetizador.
El escner, o analizador lxico, es el componente que clasifica cada instruccin y los
somete a un diccionario nos dice si hay expresiones escritas incorrectamente.
El parser o analizador sintctico, 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 cdigo binario que ser ejecutado por el
ordenador o computadora.
Hay dos tipos de compiladores, los compiladores intrpretes y los compiladores
traductores.
Compiladores intrpretes, 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 ejecucin, por ejemplo
Ensamblador, Fortran, Pascal, Delphi, C, C++
En las carreras de ingeniera como electrnica y mecatrnica 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 rpido, pues las funciones
principales representan las funciones ms bsicas del ordenador, un lenguaje como
Java con programacin orientada a objetos, LabView orientado a desarrollar
instrumentos virtuales, Lenguajes de descripcin de hardware VHDL.

12

Algoritmo y Estructura de Datos I

Resolucin de problemas por computadora fases


Resolucin del problema por algoritmos
Planteamientos de Problemas.
Lo que pretende un algoritmo es sintetizar de alguna forma una tarea, clculo o
mecanismo antes de ser trascrito al ordenador. Los pasos que hay que seguir son los
siguientes:
Anlisis previo del problema.
Primera visin del mtodo de resolucin.
Descomposicin en mdulos
Bsqueda de soluciones parciales.
Ensamblaje de solucin final.
Verificacin de la solucin final.
Sntesis de etapas en al solucin de problemas.

PROBLEMA

ANALISIS

DISEO

VERIFICACION

DEL

DEL

DEL

PROBLEMA

ALGORITMO

ALGORITMO

Figura 1. Etapas de la solucin de un problema usando algoritmos

13

Algoritmo y Estructura de Datos I

Sntesis de etapas de anlisis de problemas.

ANALISIS
DEL
PROBLEMA

DEFINICION

ESPECIFICACIONES

ESPECIFICACIONES

DEL

DE

DE

PROBLEMA

ENTRADA

SALIDA

Figura 2. Etapas de la solucin de un problema usando algoritmos

Mdulos principales del diseo de un algoritmo

ALGORITMO

DATOS

PROCESAMIENTO

IMPRESION

DE

DE LOS

DE

ENTRADA

DATOS

RESULTADO

Figura 3. Mdulos o secciones de un algoritmo

14

Algoritmo y Estructura de Datos I

Resolucin de problemas por computadora fases


Resolucin del problema por computadora
Sntesis de etapas en al solucin de problemas.

PROBLEMA

DISEO

CONSTRUCION

VERIFICACION

DEL

DEL

DEL

ALGORITMO

PROGRAMA

PROGRAMA

Figura 4. Etapas de la solucin de un problema usando programas

15

Algoritmo y Estructura de Datos I

Construccin del programa.

PROGRAMA FUENTE

ESCANER

COMPILADOR

PARSER

SINTETIZADOR

V
HAY ERRORES
AL COMPILAR

PROGRAMA
OBJETO

LINKEADOR O
ENLAZADOR

MONTADOR

PROGRAMA
EJECUTABLE
Figura 5. Etapas de la construccin de un programa.

16

Algoritmo y Estructura de Datos I

Herramientas de programacin
Se conoce como herramientas de programacin el estudio de los algoritmos y su diseo
usando pseudocdigo o diagramas de flujo
Tambin se refiere al estudio de algn lenguaje donde se implementaran dichos
algoritmos, para desarrollarlos necesitamos conocer los tipos de datos, identificadores,
constantes, variables, expresiones aritmticas, lgicas, de relacin, funciones, etc.
Tipos de datos
Tipos de datos, se clasifican en:
Simples llamados tambin estndar, primitivas vinculado a una casilla (grupo de
direcciones de memoria que permiten almacenar informacin)
Estructurados conjunto de datos simples agrupados y / o con propiedades vinculado
aun grupo de casillas
Los tipos de datos estndar son:
Datos numricos:
Enteros (Su contenido ser un nmero entero)
315
1024
-200
14530
-1537
-

Reales
9.8

(Su contenido ser un nmero real)


1.41
3.14
156.4
-12.5

Datos alfanumricos
Carcter (Su contenido ser un carcter alfanumrico)
a
C
&
%
9
-

Cadena (Su contenido ser un conjunto de caracteres)


pqr
&&&
Lima
UTP
Peru

Datos Lgicos (Su valor indica un hecho cierto o falso)


X true (verdadero, uno lgico: 1) Y false (falso, cero lgico: 0)
Existen variantes de las anteriores y otros tipos de datos tales como byte, word,
dbyte, dword, etc. Que son ms encaminadas a la programacin profesional.
Variables, Constantes, expresiones, funciones, identificadores.
Variables
Porcin o casilla de memoria donde se guarda un valor el cual puede cambiar durante
la ejecucin de una rutina o algoritmo
Las variables se caracterizan por poseer una jerarqua que viene definida por el
nmero de bytes que se asignan para cada una. As un carcter posee un longitud de
un byte, (donde se almacena un nmero al que se le ha asociado mediante la norma
ASCII) sin embargo un entero por lo general posee dos bytes. Sera lgico pensar
que una variable entera contuviera a un carcter y de hecho esto puede ser as, sin
embargo el mezclar tipos de variables es impropio de una programacin
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 travs de una funcin de conversin de tipos (convertir un entero a


una cadena y viceversa).
Constantes
Porcin o casilla de memoria donde se guarda un valor el cual no puede cambiar
durante la ejecucin de una rutina o algoritmo
Las constantes se declaran despus de la cabecera y antes de las variables.
Expresiones
Son combinaciones de constantes, variables, smbolos de operacin y nombres de
funciones especiales. Se basan en la notacin matemtica clsica
Operador de Asignacin ( )
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 lneas
usando la pareja { y }, como se muestra a continuacin:
{ Esto es una prueba de un comentario de varias lneas en algoritmos. El programador
los ignorara por completo al transcribir el cdigo del programa }.
Comentario de una lnea, para eso se usa la doble diagonal (//)Ejemplo:
Entero A // Se esta declarando una variable A de tipo entera

Operadores Aritmticos
Hay seis operadores aritmticos bsicos
Operador
**
+
*
/
div (/)
mod (%)

Propsito
Potencia
Suma
Resta
Multiplicacin
Divisin
Divisin entera
Mdulo

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

Jerarqua de las operaciones aritmticas


Operador
**
* / mod div
+ -

Jerarqua
Mayor
Menor

Operacin
Potencia
Multiplicacin, divisin, modulo, divisin entera
Suma, Resta

Ejemplo de expresiones aritmticas:


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
matemticas 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 funcin, etc.

Reglas para asignar identificadores


Estas varan segn el lenguaje de programacin
a.

El primer carcter de un identificador debe ser una letra

b.

Los dems caracteres pueden ser letras, nmeros o el carcter especial guin
bajo _

c.

La longitud mxima de un identificador es 32 en la mayora de los lenguajes de


programacin, aunque los lmites 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
Un algoritmo es el conjunto de pasos que especifican la secuencia de
operaciones o el orden de acciones que deben seguirse para alcanzar un
resultado o resolver un problema especifico.

19

Algoritmo y Estructura de Datos I

Caractersticas de los algoritmos:


Los algoritmos son independientes del lenguaje de programacin y de la computadora
donde vaya hacer implementado para ejecutarse
Todo algoritmo debe ser:
a.
Preciso, es decir indicar el orden en el que ha de realizarse cada paso
b.
Definido, se debe obtener el mismo resultado cada vez que se ejecute con las
mismas especificaciones de entrada
c.
Finito, debe terminar en algn momento o debe tener un nmero finito de
pasos
Formas de escribir un algoritmo
Dos son las ms comunes: Diagrama de flujo y pseudocdigo
Diagrama de flujo u organigrama.
Diagrama de flujo: Tcnica especializada para representar algoritmos mediante el uso
de las figuras, las cuales se une mediante flechas denominadas lneas de flujo que
indican el orden en que se deben ejecutar.
Es una representacin semigrfica del algoritmo en cuestin. Esto nos facilita la visin
descriptiva de la ejecucin del algoritmo, as como la generacin de la traza del
algoritmo. Se denomina traza de un algoritmo a la ejecucin manual de un
programa obteniendo para cada paso un resultado.
Smbolos generales: Inicio y Fin de la rutina o algoritmo. Operaciones de
entrada/salida (I/O), aritmticas y lgico-aritmticas. Decisiones lgicas. Flujo de la
ejecucin.
Reglas para la construccin de los diagramas de flujo:
a.
Todo diagrama de flujo debe tener un inicio y un fin
b.
Las lneas utilizadas para indicar la direccin del flujo deben ser rectas,
horizontales, verticales. No inclinadas ni cruzadas
c.
La conexin de las lneas deben llegar a un smbolo
d.
La construccin del diagrama es de arriba abajo y de izquierda ha derecha
e.
La notacin debe ser independiente del lenguaje de programacin
f.
Es conveniente usar comentarios en una tarea compleja
g.
Usar los conectores adecuados si el diagrama requiere ms de una hoja
h.
No puede llegar ms de una lnea a un smbolo
Smbolos utilizados en los diagramas de flujo

Smbolo utilizado para marcar el inicio y el fin del


diagrama de flujo.
Smbolo utilizado para introducir los datos de entrada.
Expresa lectura.

20

Algoritmo y Estructura de Datos I

Smbolo utilizado para representar un proceso. En su


interior se expresa asignaciones, operaciones
aritmticas, cambios de valor de celdas en memoria
Smbolo utilizado para representar una decisin. En su
interior se almacena una condicin, y dependiendo del
resultado de la evaluacin de la misma se sigue por
una de las dos ramas. Este smbolo se utiliza en la
estructura selectiva simple y doble; en las estructuras
repetitivas, repetir mientras y repetir con.
Smbolo utilizado para representar una decisin
mltiple. En su interior se almacena un selector y
dependiendo del valor de dicho selector se sigue por
una de las ramas o caminos.
.
Smbolo utilizado representar conexin entre pginas
diferentes.
Smbolo utilizado para representar la impresin de un
resultado. Expresa escritura.
Smbolo utilizado para expresar un mdulo de un
problema o subrutina
Smbolo utilizado para representar la direccin del
flujo del diagrama.
Smbolo utilizado para expresar un mdulo de un
problema o subrutina.

Pseudocdigo
Es la manera ms usada de escribir las rutinas o algoritmos
Composicin de algoritmos como pseudocdigo
Los algoritmos estn compuestos
por diferentes partes, unas relacionadas
ntimamente con las otras, de tal forma que muchas veces la no existencia de una
provocara una confusin 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 pseudocdigos,
proponemos la siguiente estructura:

21

Algoritmo y Estructura de Datos I

Estructura General
a. Cabecera. Tipo: Nombre del algoritmo
b. {Comentarios}
c. Inicio.
d. {Seccin de datos}
e. Seccin de cdigo.
1. Subrutina x
2. Subrutina y
f. Cuerpo principal
3. Accin a
4. Accin b
5. Accin c

n-1 Accin 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 propsito.
Carcter: Tipo de algoritmo
Rutina, algoritmo principal
Subrutina, subalgoritmo procedimiento o subalgoritmo funcin
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
Seccin de datos: {Tipos de datos, Variables o constantes} Declaracin de tipos
de datos de variables. Esta parte es esencial para cualquier algoritmo que
trabaje con variables. En esta seccin 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 propsito
de la variable.
Se puede usar para principiantes y diferenciar constantes y variables:
{Constante; PI 3.1416: Real
Variables; r, Ac, Lc: Reales}
Tambin es mas comn la forma si solo existen variables:
{Entero: i, j, k
Real: r, Ac, Lc}
Seccin de cdigo: Es esta seccin, la que se puede considerar como el
corazn 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
neurlgico 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. {Seccin de datos}
c. Cuerpo principal
1. Accin a
2. Accin b
3. Accin c

n Accin z
Ejemplo 1. Haga el algoritmo que permita calcular el rea y la longitud de una
circunferencia de radio r
Solucin:
Pseudocdigo:
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 declaracin de constantes y variables
despus de la cabecera, que es el orden que debe seguirse en la elaboracin de un
algoritmo y en un programa informtico.

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
Verificacin 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 repeticin. 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 funcin es almacenar cantidades
resultantes de operaciones sucesivas. Realiza la misma funcin 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 ejecucin de un algoritmo y permite
comunicar informacin 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


Programacin estructurada
La evolucin de las metodologas 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 mtodo estructurado, ampliado por el
mtodo orientado a objetos, y otras tendencias contemporneas. Pero todas se
fundamentan en algunos principios de la programacin estructurada que desde los
aportes de Edsgar Dijkstra ha orientado por nuevos rumbos.
Principios de la programacin estructurada
Se basa en la incorporacin de las tcnicas siguientes:
a. Diseo descendente (top down)
b. recursos abstractos
c. estructuras bsicas

Tipos de estructuras de control


En lo que concierne a esas estructuras bsicas tenemos:
1.
Estructura de control secuencial (acorde con la arquitectura de las
computadoras, Von Neuman)
2.
Estructura de control de seleccin (para el control de flujo alternativo y tomar el
control de decisin del flujo de programa)
3.
Estructura de control de repeticin (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 ubicacin de la instruccin en la memoria, llevar la
instruccin al registro decodificador que especifica los procesos para ejecutarla la
instruccin y al unidad de control del microprocesador que secuencializarla cada paso
para cumplir la ejecucin terminada busca otra instruccin en la memoria, todo esto a
una velocidad fantstica del orden de millones de instrucciones por segundo
Elementos de una estructura secuencial en Pseudocdigo
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
Declaracin 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 tringulo dada la base y la


altura.

Solucin:
Pseudocdigo:
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 nmero y escriba su cuadrado

Solucin:
Pseudocdigo:
Principal: CUADRADO_NUMERO
{Dados un nmero x calcula el cuadrado del mismo}
Inicio
{Variables:
x; real}
1. Escribir Ingrese el nmero
2. Leer x
3. Escribir El nmero 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.

Solucin:
Pseudocdigo:
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 centmetros
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 tringulo si se ingresa


las longitudes de los catetos.

Solucin:
Pseudocdigo:
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 nmeros y reporte su suma, resta y


multiplicacin.

Solucin:
Pseudocdigo:
Principal: SUMA_RESTA_MULTIPLICACION
{Dados dos nmero a y b calcula la suma resta y multiplicacin}
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 multiplicacin
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 permetro, el rea y la diagonal de un


rectngulo si se ingresan los dos lados.

Solucin:
Pseudocdigo:
Principal: PERIMETRO_AREA_DIAGONAL_RECTANGULO
{Dados la base y la altura de un rectngulo calcula el permetro, 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 permetro 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 centgrados


(C) y la reporte en grados Fahrenheit (F). F = 9/5 C + 32

Solucin:
Pseudocdigo:
Principal: CENTIGRADO_A_FAHRENHEIT
{Dado la temperatura en grados centgrados c calcula en grados Fahrenheit f}
Inicio
{Variables:
c,f; reales}
1. Escribir Introduzca la temperatura en grados
2. Centgrados
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.

Solucin:
Pseudocdigo:
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 numricas.

Solucin:
Pseudocdigo:
Principal: INTERCAMBIO_DE_DOS_VARIALBLES
{Dados dos nmeros 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.

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

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

Solucin:
Seudocdigo:
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.
Solucin:
Pseudocdigo:
Principal: ALTURA_DE_CAIDA_LIBRE_OBJETO
{Dado el tiempo de cada 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 presin de un gas en un recipiente. Se debe


ingresar la temperatura (C), el nmero de moles n y el volumen (lts).

Solucin:
Pseudocdigo:
Principal: PRESION_DE_GAS
{Dados la temperatura, el nmero de moles y el volumen calcula la presin 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 presin 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 mvil. Ingresar


Velocidad inicial (m/seg), tiempo (seg) y aceleracin (m/seg2).

Solucin:
Pseudocdigo:
Principal: RECORRIDO_DE_UN_MOVIL
{Dados la velocidad inicial, el tiempo y la aceleracin 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 aceleracin
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 mvil 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 lgicas
Las expresiones lgicas derivan del uso de operaciones de comparacin o relacin y
estas se logran haciendo el uso de operadores relacionales, logramos con ello generar
proposiciones lgicas simples estas pueden ser verdadera o falsas y esta situacin
permite usar como condicin para determinar el flujo del algoritmo o programa, aqu
mostramos una tabla de ellos adems si queremos hacer proposiciones lgicas
compuestas podemos usar los operadores lgicos para unir proposiciones simples
Operadores Relacionales
Operador
>
>=
<
<=
==
!=

Funcin
Mayor que
Mayor o igual que
Menor que
Menor o igual que
Igual que
Diferente que

Operadores Lgicos
Operador
Y (&&)
O ( || )
NO ( ! )
Simple:
Si X=6, B=7.8,

Expresin lgica / funcin


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 )

(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

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


Pseudocdigo:
Si (condicin) entonces
Accin 1
Fin_si
Diagrama de flujo:

F
CONDICION
(X > 0)

ACCION 1

O tambin
Pseudocdigo:
Si (condicin) entonces
Accin 1
Accin 2
Accin 3

Accin n
Fin_si

44

Algoritmo y Estructura de Datos I

Diagrama de flujo

F
CONDICION
(X > 0)

ACCION 1

ACCION 2

ACCION N

Estructura selectiva doble (Condicional doble)


Pseudocdigo:
Si (condicin)
Entonces
Accin a
Si no
Accin b
Fin_si

45

Algoritmo y Estructura de Datos I

Diagrama de flujo

V
CONDICION
(X > 0)

ACCION A

ACCION B

O tambin
Si (condicin)
entonces
Accin a1
Accin a2
Accin a3

Accin an
Si no
Accin b1
Accin b2
Accin b3

Accin bn
Fin_si

46

Algoritmo y Estructura de Datos I

Diagrama de flujo

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 condicin con la
instruccin si. Si la condicin es verdadera, el programa ejecuta una instruccin (o un
bloque de instrucciones relacionadas). Por el contrario si la condicin es falsa, el
programa puede ejecutar un conjunto diferente de instrucciones especificado por la
clusula 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 nmeros y se reporte el mayor de ellos.

Solucin:
Pseudocdigo:
Principal: MAYOR_DE_DOS_NUMEROS
{Dados dos nmeros y b reporta el mayor de ellos}
Inicio:
{Variables:

a, b; reales}
1. Escribir Ingrese el primer nmero
2. Leer a
3. Escribir Ingrese el segundo nmero
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

a>b

El mayor es, a

b, es menor o igual que, a

Fin

48

Algoritmo y Estructura de Datos I

2. -

Escriba un algoritmo para determinar si un entero A es divisible por otro B.

Solucin:
Pseudocdigo:
Principal: DIVISIBILIDAD_DE_DOS_NUMEROS
{Dados dos nmeros a y b reporta el si a es divisible por b}
Inicio:
{Variables:

a, b; enteros}
1. Escribir Ingrese el primer nmero
2. Leer a
3. Escribir Ingrese el segundo nmero
4. Leer b
5. Si (b=0)
entonces
Escribir la divisin de un numero entre cero es indeterminada
Sino
Si (a mod b=0) entonces
Escribir a, es mltiplo de , b
Sino
Escribir a, no es mltiplo de , b
Fin_si
Fin_si

6. Fin
Diagrama de flujo:

Inicio
Ingrese a, b

b=0

a mod b=0

F
a no es divisible por b

a es divisible por b

Divisin por cero indeterminada

Fin

49

Algoritmo y Estructura de Datos I

3. -

Hacer un algoritmo para que calcule e imprima los valores de las races reales
de una ecuacin de segundo grado:
Ax2+Bx+C=0
Se debe ingresar los coeficientes de la ecuacin A, B y C.

Solucin:
Pseudocdigo:
Principal: RAICES_ECUACION_CUADRATICA
{Dados los coeficientes de una ecuacin cuadrtica reporta sus races}
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 ecuacin tiene races 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

L a*2
Races imaginarias

x ((d**0.5) - b) / L
y ((d**0.5) * (-1) - b) / L

Las races son x, y

Fin

50

Algoritmo y Estructura de Datos I

4.-

La tasa de inters sobre un prstamo 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 inters y el monto total.

Solucin:
Pseudocdigo:
Principal: MONTO_PRESTAMO
{Dados la cantidad del monto de prstamo 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 inters es del 8%, el monto es , d
Sino
Escribir la tasa de inters 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

Para 6%, monto ese

Para 8%, monto es d

Fin

51

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.

Solucin:
Pseudocdigo:
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
p (a+b)*0.5
p >10.5

Desaprobado con ,p

Aprobado con, p

Fin

52

Algoritmo y Estructura de Datos I

6. -

La comisin de las ventas totales es como sigue: Si VENTAS <= S/. 80,
entonces no hay comisin. Si VENTAS <= S/. 600 entonces la comisin es igual
al 12% de las ventas. Si VENTAS > 600 entonces la comisin es igual al 15%
de las ventas. Hacer un algoritmo para que se ingrese las ventas y se reporte la
comisin.
Solucin:
Pseudocdigo:
Principal: COMISION_DE_VENTAS
{Dados el monto de las ventas reporta la comisin}
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 comisin
Sino
Si (v <= 600) entonces
Escribir La comisin es: (12% de las ventas)x
Sino
Escribir La comisin es: (15% de las ventas),y
Fin_si
Fin_si
6. Fin
Inicio

Diagrama de flujo:

Ingrese a, b
x v*0.12

y v*0.15

v > 80

v <= 600

F
Comisin es, y

Comisin es, x

No hay comisin

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

Solucin:
Pseudocdigo:
Principal: PAGO_SEMANAL
{Dados dos nmeros y b reporta el mayor de ellos}
Inicio:
{Variables: p, h, a, b, r; reales
Carcter: 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

n,su sueldo es, b

n,su sueldo es, a

Fin

54

Algoritmo y Estructura de Datos I

8. -

Se repartir la herencia entre los hijos de un seor como sigue: Si la cantidad


de hijos es menor que 4; se repartir exactamente entre el nmero de hijos; si
son 4 o ms hijos, la mitad le tocar al hermano mayor y el resto se dividir
entre los dems hermanos. Hacer un algoritmo para que reporte cuanto le
corresponde a cada hijo. Se debe ingresar la herencia y el nmero de hijos.

Solucin:
Pseudocdigo:
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 dems 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

El mayor, c, Los dems,b

Cada uno recibe, a

Fin

55

Algoritmo y Estructura de Datos I

9. -

Una empresa comercial desea hacer un algoritmo para calcular el precio neto
de un artculo 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 artculo, el cdigo de venta (c) contado, (p) plazos y si la
venta es a plazos se debe ingresar el tiempo de pago.

Solucin:
Pseudocdigo:
Principal: PRECIO_NETO_ARTICULO
{Dados el precio neto de un artculo y las condiciones de pago contado o crdito y
meses del prstamo 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 artculo
2. Leer p
3. Escribir Elija una opcin: 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

Ingrese p, cv
v p*0.6
a p*1.3
b p*1.6

cv=p

Ingrese t

t <= 12

F
"Usted pagar", b

"Usted pagar", a

"Usted pagar", v

Fin

57

Algoritmo y Estructura de Datos I

10. -

En un tringulo se cumple lo siguiente: s>a,


s>b,
s>c
donde s:
Semipermetro a, b, c: Lados del tringulo
Hacer un algoritmo para que se
ingresen los valores de los del tringulo de los lados del tringulo y si estos
valores cumplen las condiciones calcular el rea del tringulo en caso contrario
reportar DATOS INCORRECTOS.

AREA = s(s a )(s b )(s c )

Solucin:
Pseudocdigo:
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<c) entonces
Escribir Los datos son incorrectos
Sino
ar (s* x * y * z) ** 0.5
Fin_si
Fin_si
Fin_si
12. Escribir El rea es: ,ar
13. Fin

58

Algoritmo y Estructura de Datos I

Diagrama de flujo:

Inicio

Ingrese a, b, c
s (a + b + c) / 2
x s-a
y s-b
z s-c

s>a

s>b

"Error"

"Error"

s>c
V

"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 funcin de acuerdo a lo siguiente:

y = x 2 + 5 Si x < = 0
y = 3x 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).
Solucin:
Pseudocdigo:
Principal: FUNCION_DE_X
{Dado el valor de x reporta el valor de la funcin 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 funcin f(x) es: ,y1
Sino
Si (x<2) entonces
Escribir la solucin de la funcin 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

Ingrese x
y1 x * x + 5
y2 (3 * x) - 1
y3 x * x 4 * x+ 5

x<2

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 fbrica 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 da de la semana.

Solucin:
Pseudocdigo:
Principal: JORNAL_DIARIO
{Dado las horas trabajadas, horas extras y turno reporta el jornal diario}
Inicio:
{Variables: h,b,c,d,e; reales
Carcter:
t,
Entero
D}
1. Escribir Ingrese su turno: diurno (d), nocturno (n)
2. Leer carcter t
3. Escribir Ingrese las horas trabajadas
4. Leer h
5. Escribir Escriba el da 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
c
d
e

h*1.50
h*2.25
h*2.50
h*3.50

F
D=7

Su jornal es: ,d

t = d

Su jornal es: ,e

Su jornal es: ,b

Fin

63

t = d

Su jornal es: ,c

Algoritmo y Estructura de Datos I

LA ESTRUCTURA SELECTIVA MULTIPLE


Estructura selectiva mltiple (condicional mltiple)
La estructura selectiva mltiple permite que el flujo del diagrama se bifurque por varias
ramas en el punto de la toma de decisin(es), esto en funcin 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 accin 1, si toma el valor 2 se ejecutara la accin 2, si tmale valor n se
realizara la accin n, y si toma un valor distinto de los valores comprendidos entre 1 y n,
se continuara con el flujo normal del diagrama realizndose la accin k.
Pseudocdigo:
Segn sea (variable_selector) hacer
Igual valor 1 : accin 1
Salir a Fin de hacer
Igual valor 2 : accin 2
Salir a Fin de hacer
Igual valor 3 : accin 3
Salir a Fin de hacer
Igual valor n :

accin n
Salir a Fin de hacer

Cualquier otro valor


Accin k
Fin hacer
A continuacin presentamos
estructura selectiva.

el

diagrama

de

flujo

que

Ilustra

VARIABLE
SELECTOR
Caso 1

Caso 2
Accin 1

En otro
caso

Caso n

Accin 2

Accin n

64

Accin k

esta

Algoritmo y Estructura de Datos I

Donde:
SELECTOR es la variable o expresin a evaluarse, segn la cual se tomara
una de las mltiples decisiones o alternativas.
Accin 1
expresa la operacin o conjunto de operaciones que se van ha
realizar si el selector toma el valor 1.
Accin 2 expresa la operacin o conjunto de operaciones que se van ha
realizar si el selector toma el valor 2.
Accin n expresa la operacin o conjunto de operaciones que se van ha
realizar si el selector toma el valor n.
Accin k expresa la operacin que se va a realizar cuando se continu con el
flujo normal del diagrama.
La estructura selectiva si mltiple es muy flexible, lo que permite aplicarse de diferentes
formas. Obsrvense los siguientes diagramas de flujo y las explicaciones
correspondientes.

Ejercicios
1. Construya el algoritmo que obtenga el resultado de la siguiente funcin 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

Pseudocdigo:
Principal: FUNCION_MAT
Inicio{ Real:
y
Entero:
x, n }
Segn 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,

Segn
sea n
1

y100*x

En otro
caso

y100**x

y100/x

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 eleccin 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 eleccin, el final
se dar cuando haya 28 evaluaciones es decir el jurado esta conformado por
siete personas.

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

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 de Datos I

CAPITULO III

ESTRUCTURAS ALGORITMICAS DE CONTROL


REPETITIVAS
Estructura de control: Repetir mientras ( While )
Diagrama General

EXP 1

F
CONDICIN

PROCESO

Pseudocdigo
1. Hacer EI Expresin Inicial
// genera proposicin inicial PI
2. Repetir mientras (proposicin PI es verdadera)
Hacer
Accin 1
Accin 2
Accin 3
Accin n-1
Hacer EI modificacin de EI // genera cambio de PI
Fin_hacer
3. Fin

69

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

70

Algoritmo y Estructura de Datos I

EJEMPLO
1.

Haga el algoritmo que permita imprimir (escribir) la lista de los veinte primeros
nmeros enteros positivos

Solucin:
Pseudocdigo.Principal
Inicio
{ Variable

PRIMEROS_20_NUMEROS_ENTEROS_POSITIVOS
i
: enteros }
1. Escribir Lista de veinte primeros numeros enteros
positivos
2. i 1
3.
Repetir mientras ( i < = 20)
hacer
3.1 Escribir i
3.2 i i + 1
Fin_hacer

4. Fin

Inicio

Diagrama de flujo

i 1

i<= 20

F
V

Imprime i

i i-1

Fin

71

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 1

EXP 2

V
PROCESO

EXP 3

Diagrama de flujo
1. Hacer V VI // genera proposicin inicial P: V < VF
2. Repetir con V desde VI hasta VF // verifica P es verdadera
Hacer
Accin 1
Accin 2
Accin 3
Accin 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
Solucin:
Pseudocdigo.Principal
SUMA_MULTIPLOS_ENTRE_800_Y_990
Inicio
{ Variable
i
: enteros }
1. i 800
2.

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 nmero entero n, (n>=0).

Solucin usando repetir mientras:


Pseudocdigo
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
Solucin usando repetir con:
Pseudocdigo:
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 nmeros pares e


impares 1 y 50.

Solucin:
Pseudocdigo:
Principal: SUMA_NUMEROS_PARES_IMPARES
{Dados los lmites reporta la suma de los nmeros pares e impares entre los lmites}
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

aa+n

bb+n
n n+1

Imprime a, b

Fin

78

Algoritmo y Estructura de Datos I

3.-

Calcular y visualizar la suma y el producto de los nmeros impares


comprendidos entre 20 y 80.

Solucin:
Pseudocdigo:
Principal: SUMA_PRODUCTO_IMPARES_ENTRE_20_Y_80
{Dados los lmites reporta la suma y producto de los nmeros impares entre los lmites}
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

i<=80
V
V

i%2=0
F
a a + i
b b * i

ii+1

Imprime a,b

Fin

80

Algoritmo y Estructura de Datos I

4.-

Leer n nmeros enteros y obtener el promedio de los positivos y el promedio de


los negativos.

Solucin:
Pseudocdigo:
Principal: PROMEDIO_POSITIVOS_NEGATIVOS
{Dados n nmeros reporta el promedio de los nmeros 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
aa+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<n

Ingresar x

Leer x

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

Solucin:
Pseudocdigo:
Principal: SUMA_CUADRADOS_DE_ 15_ PRIMEROS_NUMEROS
{Calcula la suma de los cuadrados de los 15 primeros nmeros }
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

a1

a<=15

V
b a ** 2
c c+b

Imprime b

aa+1

Fin

83

Imprime c

Algoritmo y Estructura de Datos I

6.-

Se ingresan n nmeros. Se pide calcular el promedio de ellos.

Solucin:
Pseudocdigo:
Principal: PROMEDIO_DE_N_NUMEROS
{Dados n nmeros ingresados por teclado se calcula el promedio}
Inicio:
{Variables: n, i: enteros
n1, suma, promedio: reales}
Inicio
1. Escribir Ingrese la cantidad de nmeros
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
Ingrese n
i 0
suma 0

i<n
V
Ingrese n1

suma suma + n1
i i + 1

promediosuma/i

Imprime
promedio

Fin

85

Algoritmo y Estructura de Datos I

7.-

Ingresar nmeros enteros, visualizar la suma de los nmeros pares de la lista,


cuantos nmeros pares existen y cual es el promedio de los nmeros impares.

Solucin:
Pseudocdigo:
Principal: CUENTA_PARES_Y_PROMEDIO_IMPARES_DE_N_NUMEROS
{Dados n nmeros reporta la suma de los nmeros 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

Ingrese n
t0
p 0, s 0
i 0, d 0
F
t<n
V
Ingrese n1

n1%2=0
V

p p + n1
s s + 1

i i + n1
d d + 1

t t + 1

Escribir i/d, p, s

Fin

87

Algoritmo y Estructura de Datos I

8.-

Desarrollo un programa que determine en un conjunto de n nmeros naturales.


Cuntos son menores de 15?
Cuantos son mayores de 50?
Cuntos estn comprendidos entre 25 y 45?

Solucin:
Pseudocdigo:
Principal: CLASIFICA_NUMEROS_EN_RANGOS
{Dados n nmeros reporta menores de 15, mayores de 50, los que estn 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 b+1
Fin_si
Si(x>50) c c+1
Fin_si
s s +1
Fin_hacer
Imprime a, b, c
Fin
Diagrama de flujo.- Intntelo hacer

88

Algoritmo y Estructura de Datos I

9.-

Calcular x elevado a la potencia de n, x>0 real, n>0 entero.

Solucin:
Pseudocdigo:
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.- Intntelo hacer

89

Algoritmo y Estructura de Datos I

10.-

Imprimir las 10 primeras potencias de 4.

Solucin:
Pseudocdigo:
Principal: DIEZ_PRIMERAS_POTENCIAS_DE _CUATRO
{Reporta las 10 primeras potencias de 4}
Inicio:
{Variables: n, a, b; reales}
Variables: a,n: reales
Inicio
n0
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 trminos de la siguiente serie:


s=1-1/2 + 1/3 1/4+ +1/5 1/6+.........1/n.

Solucin:
Pseudocdigo:
Principal: SUMA_DE_LA_SERIE_DADA
{Dado el nmero 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.- .- Intntelo hacer

91

Algoritmo y Estructura de Datos I

12.-

Ingresar n nmeros, calcular el mximo y el mnimo de ellos.

Solucin:
Pseudocdigo:
Principal: MAXIMO_Y_MINIMO_DE_N_NUMEROS
{Dado el nmero n de trminos reporta el mximo y mnimo 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.- Intntelo hacer

92

Algoritmo y Estructura de Datos I

13.-

Realizar un programa que escriba los n trminos de la serie de Fibonacci:


1, 1, 2, 3, 5, 8, 13, ......

Solucin:
Pseudocdigo:
Principal: SERIE_DE_FIBONACCI
{Dados el nmero 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 nmeros del teclado hasta que el ltimo nmero sea 99 obtener el
mayor.

Solucin:
Pseudocdigo:
Principal: MAYOR_N_NUMEROS_HASTA_INGRESAR(-99)
{De nmeros ledos por teclado hasta ingresar -99 reporta el mayor de ellos}
Inicio:
{ Variables: a, b : enteros }
Inicio
Escribir Ingrese nmeros 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

V
a>b
V

F
ba
Ingrese a

Imprime s

Fin

96

Algoritmo y Estructura de Datos I

15.-

Calcular la sumatoria:s = 1 + x + x2/2! + x3/3! + x4/4! ++ xn/n!. Se debe


ingresar x real y n entero positivo.

Solucin:
Pseudocdigo:
Principal: SUMATORIA_DE_LA_SERIE_DADA
{Dado nmero de elementos n y la variable x reporta la suma de la serie dada}
Inicio: {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.- Intntelo hacer.

97

Algoritmo y 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 caractersticas de una rutina en general, estas se pueden encargar de
determinados procesos o de devolver algn 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 programacin modular.
Adems las variables que estn 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 mdulos en los que se puede
descomponer un algoritmo. Cada modulo se encarga de realizar una operacin
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 que decir, que cualquier algoritmo se puede transformar en un
procedimiento para ser utilizado dentro de otro algoritmo mayor.
Estructura del pseudocdigo de una funcin
a. Funcin: Nombre_de_la_funcin( Parmetros ) necesario
b. {Comentarios}
opcional
c. Inicio.
opcional
d. {Seccin de datos}
necesario
e. Seccin de cdigo.
1. Subrutina x
opcional
2. Subrutina y
f. Cuerpo principal 3. Accin a
necesario
4. Accin b
5. Accin c

n-1 Retorno de valor


g. Fin
n. Fin
opcional
Diagrama de flujo con algunos procesos, como estructuras de control de repeticiones,
lectura de datos escritura de datos, etc.

99

Algoritmo y Estructura de Datos I

Nombre_de_la_funcion(parametros )

Inicio
Variables

condicin

Leer datos

Mostrar
Datos

Retorno
de valor

Procesos

Fin
EJEMPLO
1.

Hacer la subrutina funcin que devuelva el rea del rectngulo dados los
parmetros de la base y la altura

Pesudocdigo
Funcion Area_del_rectangulo(base entero, altura entero )
{ Permite el calculo del rea del rectngulo dados los parmetros 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 rectngulo
Estructura del pseudocdigo un procedimiento:
a. Procedimiento: Nombre_del_ procedimiento(Parmetros)
b. {Comentarios}
c. Inicio.
d. {Seccin de datos}
e. Seccin de cdigo.
1. Subrutina x
2. Subrutina y
f. Cuerpo principal 3. Accin a
4. Accin b
5. Accin c

n-1 Accin 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(parmetros)
)
Inicio
Variables

Condicion

Leer datos

Mostrar
Datos
Procesos

Fin

As, uno de los programas anteriores quedara de la siguiente forma:

102

Algoritmo y Estructura de Datos I

EJEMPLO
1.

Hacer la subrutina procedimiento que calcule el factorial de un nmero dado el


parmetro n

Pesudocdigo
Procedimiento Factorial(n entero, valor real)
{ Permite el calculo del factorial de un nmero dado el parmetro 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

i<n
b b*i
i i +1

Fin

103

valor b

Algoritmo y Estructura de Datos I

Parmetros Formales y Actuales.


Como hemos visto, entre los procedimientos (funciones tambin) y su entorno se
producen una relacin en base a un intercambio de valores de las variables. Estas
variables reciben nombres diferentes segn este en el cdigo Padre(Principal) o en
el cdigo Hijo(Subrutina). Vamos a definir como cdigo Padre, aquel desde el cual
se llama a una subrutina y, el cdigo Hijo, la subrutina que estamos llamando.
Parmetros Actuales son los que utiliza el programa Padre para relacionarse con
una subrutina en concreto, y parmetro 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 nmero a factorizar:"
2. Leer num
3. Factorial(num, valor) // Llama al Procedimiento Factorial
4. Fin
Obsrvese que los parmetros actuales y formales no tienen por que llamarse de igual
forma, sin embargo es condicin necesaria que sean del mismo tipo y que estn en el
mismo orden.
La transmisin de un parmetro como valor y no como variable, hace que el
programa Padre no reciba las posibles modificaciones que pueda sufrir dicho
parmetro dentro del cdigo Hijo.
EJEMPLO
Algoritmo Factorial Constante
Inicio
{ Variable real num, valor
}
1. Escribir "Introduzca el nmero 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 nmero
vamos a obtener que el factorial es 0, pues al introducir la variable de forma
numrica no se actualiza en el procedimiento.
Variables Globales y Locales.
De igual forma que en el apartado anterior diferencibamos entre parmetros
formales y actuales, ahora vamos a realizar una distincin entre variables globales
y locales. Podemos definir variable global como aquella que puede ser utilizada
(leda, modificada, etc.) a lo largo de todo el algoritmo principal y tambin por
cualquiera de
los subalgoritmos (entindase funciones y procedimientos) que
componen el algoritmo en s. De igual forma, una variable local, es aquella que slo

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 sern
referenciadas dentro del subalgoritmo al que pertenece:
Variables Locales ==> Subalgoritmo propio
Variables Globales ==> Cualquier subalgoritmo
Procedimiento Versus Funcin:
Los procedimientos y funciones son subprogramas cuyo diseo y misin 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 parmetros actuales, o bien con la instruccin
llamar_a (call). Al llamar procedimiento se detiene momentneamente el
programa que se estuviera realizando y el control pasa al procedimiento
llamado. Despus que la accin se realiza inmediatamente el control continua
en la rutina que invoco el procedimiento.

Las funciones se devuelven un valor, los procedimientos pueden devolver 1,1 o


n valores y en forma de lista de parmetros.

El procedimiento se declara igual que la funcin, pero su nombre no esta


asociado a ninguno de los resultados que obtiene.

La declaracin de un procedimiento es similar a la funciones.


Procedimiento nombre [(lista de parmetros formales)]
<acciones>
fin_procedimiento
EJERCICIOS RESUELTOS
1.

Cmo hallara la aceleracin de un determinado cuerpo usando subprogramas


teniendo como datos la masa y la fuerza?.
Qu es la aceleracin?
Es la variacin de velocidad de una partcula en cada unidad de tiempo.
En este problema se utilizar la formula de la 2 ley de Newton

Solucin:
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 aceleracin se obtiene, a = f / m

105

Algoritmo y Estructura de Datos I

Procedimiento aceleracin (Real a, real f, real m)


{ Procedimiento que calcula aceleracin con datos o parmetros enviados
fuerza f y masa m }
Inicio
af/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. aceleracin ( x, w, z )
6. Escribir la aceleracin es, x
7. Fin
Diagrama de flujo

Procedimiento aceleracin( Reales a, f , m )

Inicio

af/m
Fin

Principal:

Inicio

Reales x, w, z
Ingrese w, z
aceleracin( x, w , z )

La aceleracin es, x

Fin

106

Algoritmo y Estructura de Datos I

2.

Hacer la transformacin de un ngulo de grados a radianes.

Solucin:
Pseudocdigo
Funcin 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:

Funcin cambio_g_r (Real g)

Inicio

Devolver ( g*3.1415/180 )
Fin

Principal:

Inicio

Reales g , y
Ingrese g
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 funcin para calcular el n-esimo trmino de la sucesin de Fibonacci.


Pseudocdigo de la funcin:
Funcin 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 cdigo 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 sucesin de Fibonacci; tn
5.- Fin

108

Algoritmo y Estructura de Datos I

Diagrama de flujo

Funcin n_ter_Fibonacci(entero x)

Inicio

Devolver (((( 1+ (5**0.5))/2)** x)-((( 1-(5**0.5))/2)** x))/5**0.5


Fin

Principal:

Inicio

Entero n, tn
Ingrese n
tn

n_ter_Fibonacci (n)

tn

Fin

Traza:
Datos(n)

Salidas(tn)

10

55

1, 1, 2, 3, 5, 8....

109

Algoritmo y Estructura de Datos I

4.

Hacer la subrutina o funcin que devuelva el mximo comn divisor de dos


nmeros (a, b) . Hacer la traza (corrida) respectiva.
Es un divisor comn de los nmeros, el cual ser el mayor de todos ellos. Para
calcular el mximo comn divisor (m.c.d) se recurrir a una funcin especifica
de definida como un subalgoritmo, para demostrar se har la traza con los
nmeros (10 y 25).

Solucin:
Pseudocdigo
Funcin m_c_d (entero x, entero y)
Inicio
Repetir mientras ( x = y ) hacer
Si x > y entonces
x xy
Si no
y yx
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:

Funcin mcd (entero x, entero y)

Inicio
F
x!=y
V
V
x

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

mcd ( a, b)

a, b, n

FIN

112

Algoritmo y Estructura de Datos I

Traza:
Las variables locales de la funcin son
variables x, y

a, b y no modificaran los valores de las

Variables del programa principal

variables de la funcin

a
10

b
25

x
10
10
10
05

y
25
15
05
05

Las operaciones del algoritmo son :


1.

y> x realizara la operacin 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 operacin 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 xy

Entonces ya tenemos los valores iguales a =5 ., b=5


Entonces el mcd de (10 ,25) =5
El resultado de ejecucin ser

10, 25, 5

113

mcd (a, b)

05

Algoritmo y Estructura de Datos I

5.

Haga el algoritmo que simplifique una fraccin, dividiendo numerador y


denominador por su mximo comn 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
Funcin: mcd (E entero: n, d)
Var
Entero: r
Inicio
r n mod. d
Repetir mientras ( r <> 0) hacer
nd
dr
r n mod. d
Fin_ hacer
Devolver (d)
Fin

114

Algoritmo y Estructura de Datos I

Funcin Mcd (Entero n, entero d)

Entero: r

Inicio
r n mod. d
F
r<>0
V
nd

dr

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

Ingrese denominador

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

PROBLEMA
Funcin Signo (Real x)

Funcin signo (Real: x)


inicio
si x>0 entonces

Inicio

devolver (1)

x>0

si_no

Devolver 1

si x<0 entonces

x<0

devolver (-1)

si_no

F
Devolver 0

Devolver -1

devolver (0)
fin_si

Fin

fin_si
fin_funcin

Principal signos
Inicio

Principal:

Inicio

Entero: y, z

{ Entero: y, z

Real: P

Ingrese P

Real: P }
1. Leer (P)

y signo (P) , x signo (cos (P))

2. y signo (P)

x, y

3. z signo (cos (P))


4. Escribir (y, z)

Fin

5. Fin

117

Algoritmo y Estructura de Datos I

Traza
Parmetro actual

Parmetro formal

El parmetro formal x se constituye por el parmetro actual. As, por ejemplo, si el


parmetro P vale -1.45. Los valores devueltos por la funcin 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 funcin seno de x mediante la siguiente


serie:

x
Sen(x) =

x3 x5 x7
+

+ ...
3! 5! 7!

Con x ngulo en radianes


Principal: Calcular_seno
Inicio { Real : gr, x
Carcter: 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

Funcin factorial. (Entero : n)


Inicio { Real: f
Entero: i }
1.
f 1

118

(hasta 17 trminos).

Algoritmo y Estructura de Datos I

2.

3.
4.

Repetir con I desde i 1 hasta n hacer


f f*1
i i +1
Fin_hacer
Devolver (f)
Fin.

Funcin 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

Funcin seno (E real: gr)


Inicio:{Variable real: x, s, p, f
Entero: i, n}
1.
x gr * 3.141592 / 180
2.
sx
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
ss+p/f
Fin_si
Fin_hacer
4.
devolver(s)
5.
Fin

119

Algoritmo y Estructura de Datos I

Principal:
inicio
Real :gr, x
Carcter: 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

Funcin Seno (gr)


Inicio
x gr * 3.141592 / 180
sx
i 2
F
i < = 17
V
n

2*i-1

F
i mod 2 = 0

PPotencia (x,n)

Potencia (x,n)

F Factorial (n)

F Factorial (n)

s s + potencia(x,n) / factorial (n)


s s potencia(x,n) / factorial (n)

i i+1

Fin
121

Devolver s

Algoritmo y Estructura de Datos I

Factorial (n)

Inicio
i1
f 1

i<=n
V
f f *1

Devolver (f)

Fin

122

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:
f1
i1 hasta 3
ff * 1
f1=1
f2=2
f3=6

124

Algoritmo y 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, Relacin recursiva
X, Forma explicita: Condicin inicial o caso trivial (permite el trmino de recursin)
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 vaca o un carcter


seguido de una cadena. En la funcin Cad(x,n), x es el tipo de carcter, n
numero de caracteres, = = { } , cadena vaca

Cad(x,n) =

, si n = 0

xCad(x,(n -1))

, si n >= 1

Por ejemplo si xa entonces:


Cad(a,4) = aCad(a, 3)
= aaCad(a, 2)
= aaaCad(a, 1)
= aaaaCad(a, 0)
= aaaa
= aaaa
= aaaa

125

Algoritmo y Estructura de Datos I

2.

Funcin factorial de n (n es entero positivo) Fact(n), n!:

si n = 0

n * Fact(n -1)

si n > 1

Fact(n) =

Por ejemplo si n4 entonces:


Fact(4) = 4*Fact(3)
= 4 * 3 * Fact(2)
= 4 * 3 * 2 * Fact(1)
= 4 * 3 * 2 * 1 * Fact(0)
= 4*3*2*1*1
= 4*3*2*1
= 24
3.

Potencia de un nmero entero positivo, puede ser expresada por el nmero


multiplicado por la potencia del exponente disminuido en uno. En la funcin
Pot(x,n), x es un entero positivo, n es el exponente(nN).

Pot(x,n) =

, si n = 0

x*Pot(x,(n -1))

, si n >= 1

Por ejemplo si x2 y n4 entonces:


Pot(2,4) = 2*Pot(2, 3)
= 2 * 2 * Pot(2, 2)
= 2 * 2 * 2 *Pot(2, 1)
= 2 * 2 * 2 * 2 * Pot(2, 0)
= 2*2*2*2*1
= 2*2*2*2
= 16
Algoritmo recursivo (recurrente)
Es la implementacin en forma algortmica de funciones recursivas.

126

Algoritmo y Estructura de Datos I

En un algoritmo recursivo distinguimos como mnimo 2 partes:


a).

Forma explicita, caso trivial, base o de fin de recursin:


Es un caso donde el problema puede resolverse sin tener que hacer uso de
una nueva llamada a s mismo. Evita la continuacin indefinida de las partes
recursivas.

b).

Parte puramente recursiva:


Relaciona el resultado del algoritmo con resultados de casos ms simples. Se
hacen nuevas llamadas a la funcin, pero estn ms prximas al caso base.

EJEMPLO:
1.
Calcule el factorial de un nmero entero n, (n>=0).
Solucin usando recursividad:
Pseudocdigo
Funcion
Inicio
{Variable

Fact( Entero n )
fact
: enteros }
1.
Si ( n = 0 ) entonces
Devolver 1
Sino
Devolver n * Fact(n -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

F
n>0

Numero <0

F Fact(n)

Imprime F

Fin

129

Algoritmo y Estructura de Datos I

1.

Calcule la potencia de un nmero entero x, donde n es el exponente (n N).


funcin Pot(x,n), x es un entero positivo, n es el exponente(nN).

Solucin usando recursividad:


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

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

x!=0 y
n>0

x=0 o n<0

P Pot(x, n)

Imprime P

Fin

132

Algoritmo y Estructura de Datos I

Los Nmero del Catalan


Es muy til en los problemas de anlisis combinatorio. Tienen varias aplicaciones con
los datos de (n) matrices que permiten calcular o encontrar el nmero de formas en que
se podran multiplicar.
Adems tambin nos permite determinar el nmero de formas en que un polgono con
(n) lados se puede descomponer en n tringulos diferentes.
Tambin es utilizado en la combinatoria de los nmeros de Catalan que forman una
secuencia de nmeros naturales que aparece en diversos problemas de conteo que
son recursivos.
Este algoritmo proviene del matemtico belga Eugene Charles Catalan.
La siguiente formula donde se obtiene el ensimo nmero de Catalan.
1
Cat(n)

2n

=
n+1

con n 0

Es expresado tambin de la siguiente funcin:

Cat(n) =

1
n-1

, Si n = 1
Cat( i ) * Cat(n-1)

i=1

, Si n 1

Tambin:
1

, Si n = 0

Cat(n) =
2* (2*n -1) * Cat(n-1)
(n+1)

, Si n > 0

En los nmeros 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 arrojara como valor al nmero 14 se muestrara casi como contorno de
llamadas recursivas.
La forma de resolucin ser de la siguiente manera:
Pseudocdigo:
Funcin: Catalan (Entero n)
Inicio
{ n es un valor numrico 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 recursin
Recursividad simple: Aquella en cuya definicin slo aparece una llamada recursiva. Se
puede transformar con facilidad en algoritmos iterativos.
Recursividad mltiple: Se da cuando hay ms de una llamada a s misma dentro del
cuerpo de la funcin, resultando ms difcil de hacer de forma iterativa.

134

Algoritmo y Estructura de Datos I

Ejemplo Fibonacci

Fibo(n) =

si n = 0

si n = 1

Fibo(n-2) + Fibo(n -1) , si n > 1

Por ejemplo si n4 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 funcin provoca una
llamada a s misma de forma indirecta, a travs 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
Estticos, trabajan con una cantidad fija de espacio de memoria, estos son: Arreglos,
registros o estructuras, archivos, cadenas, conjuntos, etc.
Dinmicos, 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 coleccin finita, homognea 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).
Tambin se le dice vector a un arreglo unidimensional otra manera de definir es
considerarla como una variable cuya estructura es una sucesin de elementos del
mismo tipo. As una variable de cadena es un vector de caracteres, ya que esta
formado por una sucesin de variables del tipo carcter. As podemos crear
vectores de diferentes tipos.
A los arreglos se le da una denominacin, 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 sucesin de elementos:
a1, a2, a3, a4,.. an
Cada elemento o componente se puede referenciar por su posicin en la sucesin con
un ndice i que se relaciona con A[i], por ejemplo si i 3, indica el cajn 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


Representacin grafica de arreglos:

m-1

A es un arreglo vaci de m cajones

a1

a2

a3

a4

an

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
Homognea, porque el tipo de dato de cada elemento o componente tiene que ser el
mismo para todos los elementos.
Estos pueden ser caracteres, nmeros enteros, nmeros reales, etc.
Por ejemplo a1, a2, a3, a4,.. an: todos sean nmeros enteros
Ordenada, por que cada cajn tiene un ndice desde uno hasta el un numero lmite m
que esta predeterminado y es invariable
Declaracin 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

99

100

Se pueden llenar con elementos que sean nmeros enteros


Acceso a un arreglo
Para llenar con componentes cada cajn del arreglo se usa:
Asignacin:
A[1] 3
A[2] -6
A[3] 7
A[4] -2

-6

-2

Tambin 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

-5

-1

99

100

99

100

99

100

Para ver el contenido de un elemento del arreglo B dado se hace:

99

-7

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

Determinacin de las caractersticas del trabajo con arreglos


En el siguiente arreglo se tiene:

-4

-9

142

Algoritmo y Estructura de Datos I


Denominacin 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 algn elemento del Arreglo, se hace por asignacin o por lectura de
teclado, por ejemplo:
Si hacemos i 1 , j 2, k 4
C[ i ]

2 es lo mismo que C[j - i]

C[i + 1] 9

es lo mismo que C[k - j] 2

C[i + 2] 4

es lo mismo que C[i + j] 2

C[i + 3] -3 es lo mismo que C[2*i + j] 2

-3

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

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:
i1
Repetir mientras (i <= 4) hacer
Leer C[i] // y pulsamos 8, 5, 3, -1 en cada repeticin o bucle
i i +1
Fin_hacer

-1

144

Algoritmo y Estructura de Datos I


EJERCICIOS RESUELTOS
1.

Haga el algoritmo del Producto


ortonormal.

escalar

Solucin:

Pseudocdigo
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 desviacin estndar de un conjunto de datos


almacenados en un arreglo.

Solucin:
La varianza y la desviacin estndar son medidas de la dispersin de datos con
respecto a la media. Si los datos son muy cercanos a la media el valor de la varianza y
la desviacin estndar es pequeo, sin embargo; si los datos estn muy dispersos
ambas medidas sern grandes
Varianza matemticamente si el ndice va desde 1 hasta n:

( X [i] x)
V =

n 1

Algortmicamente:
V (suma( (X[i]) x ) ** 2 ) / (n-1)
Si el ndice va desde 1 hasta n
Desviacin estndar
D (Varianza) ** 0.5
Definicin de variables:
x

: Media aritmtica de los elementos del arreglo.

X[ i ]

: Elemento i-esimo del arreglo.

: Cantidad de elementos del arreglo.

: Sub. ndice del trmino actual.

X [m]

: Arreglo unidimensional.

: 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
S0
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 desviacin estndar de los nmeros dados son, V, D
Fin
Traza:
Sea el arreglo X y se leen (ingresan) 6 elementos:

10
1

15

11

17

13

14

99

100

El promedio es: x=13.33


3.

Se tiene el siguiente arreglo:

A
1

-5

21

-19

6
8

10

72

56

-20

30

i1
A[i]

147

11
51

12
80

13

14

-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. Mltiplos 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]
KK+1

Fin_si
i i+1
Fin_hacer
Continua

148

Algoritmo y Estructura de Datos I


B

21

72

56

70

51

J
C
-5

-14

-20

-11

k
1

Sp

2
3

28

Sn

Cp

Cn

-5

2
-19

32

40

112

168

10

-59

11

198

12

249

13

329

10

14

331

15

408

4
11

Continuacin.
3. Pp Sp/Cp
4. Pn Sn/Cn
5. Escribir Resultados Positivos, Cp, Pp
6. Escribir "Resultados Negativos" , Cn, Pn
7. Fin

149

80

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]
KK+1
Fin_ si
F [16 - i] A[i]
ii+1
Fin_ hacer
3. Pp Sp/Cp
4. Pm7 Sm7/Cm7
5. Escribir "Resultados Pares", Cp, Pp
6. Escribir "Resultados Mltiples 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 segn el orden de su contenido:
Arreglos desordenados y arreglos ordenados

Operaciones con Arreglos desordenados


Se muestra a continuacin las rutinas de las operaciones con arreglos desordenados y
un algoritmo principal que las invoque, incluye pseudocdigo y diagrama de flujo.
Las operaciones de leer y escribir son usadas igual para arreglos ordenados y
desordenados
1.

Leer
Solucin:

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

i<=n
V

Ingrese V[ i ]

V[ i ]
ii+1

Fin

152

Algoritmo y Estructura de Datos I


2.

Escribir
Solucin:
Pseudocdigo

Procedimiento Escribir(entero V[100], entero n)


{Permite la visualizacin 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
i1

i<=n

V[ ,i, ]= V[ i ]

ii+1

Fin

154

Algoritmo y Estructura de Datos I


3.

Buscar desordenado

Solucin:
Pseudocdigo
Procedimiento Buscar_d(Entero V[100], entero n, entero x)
{Permite la buscar un nmero 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
posicin , 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
i1

(i<=n) y (V[i] = x)
V

ii+1

i<=n

Numero x encontrado
en posicin i

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

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
i1

(i<=n) y (V[i] = x)

ii+1

i>n
k1

Numero x no se
encuentra
k<=n-1
V

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
i1

(i<=n) y (V[i] = x)

ii+1

i>n
F

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


Leer opc
Segn 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

opc1

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

Ingrese opc
opc
1

2
L

3
E

4
B

5
I

Fin

164

6
El

7
M

Algoritmo y Estructura de Datos I


Arreglos bidimensionales (Matrices).
Concepto, declaracin y acceso
Un arreglo de dos dimensiones, llamada tambin matriz o tabla, requiere una
combinacin de fila columna, es por lo cual se manejan dos ndices; el primer ndice se
refiere a la fila o rengln y el segundo a la columna; grficamente 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

Declaracin de Matrices
La declaracin 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 dimensin de
la matriz, la sintaxis es la siguiente:
Tipo_de_Dato : Nombre_del_Arreglo[# de Filas][# de Columnas]
Ejemplo: La declaracin de la matriz mostrada en el ejemplo de arriba sera de la
siguiente forma:
Entero M[4][4]

165

Algoritmo y Estructura de Datos I


Ejemplo con Arreglos bidimensionales o Matrices
1.
Disee un Pseucocdigo que permita ingresar por el teclado a la memoria de
la computadora una matriz de 3*3 con nmeros enteros ledos del teclado.
Solucin:
Pseudocdigo:
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 nmero:
Leer M[Fila][Columna]
Columna Columna +1
Fin_hacer
Fila Fila +1
Fin_hacer
Fin
2.

Disee un Pseucocdigo que permita mostrar el contenido de la memoria de la


computadora de una matriz de 3*3 con nmeros enteros.

Solucin:
Pseudocdigo:
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 efecte la multiplicacin de dos matrices, A y B. Suponga
que A y B, as como el nmero de elementos son parmetros 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, creacin, declaracin y acceso
Cuando se habl de los arreglos se mencion que se trataba de una coleccin de
datos, todos del mismo tipo, que era un tipo estructurado de datos, y que con ellos se
poda solucionar un gran nmero de problemas. Sin embargo, en la prctica a veces se
necesitan estructuras que permitan almacenar distintos tipos de datos. Para ilustrar
este problema veamos el siguiente ejemplo:
Una compaa tiene por cada empleado los siguientes datos:
Nombre
Direccin
Edad
Sexo

(cadena de caracteres)
(cadena de caracteres)
(entero)
(carcter)

Si se quisiera almacenar estos datos no sera posible usar un arreglo, ya que sus
componentes deben ser todos del mismo tipo. La estructura que puede guardar esta
informacin es la que se conoce como registro o estructura, usaremos para comodidad
la denominacin estructura refirindonos 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, tambin podrn 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
numrico y los tres restantes son del tipo cadena de caracteres. Su representacin,
definicin, creacin queda como se muestra a continuacin:
CREACION DE UN TIPO DE DATO REGISTRO O ESTRUCTURA
Crear estructura DOMICILIO hacer
Cadena_de_caracteres
: Calle
Entero
: Nmero
Cadena_de_caracteres
: Ciudad
Cadena_de_caracteres
: Pas
Fin_hacer {Fin de la definicin del registro o estructura DOMICILIO}

169

Algoritmo y Estructura de Datos I

DOMICILIO

CALLE

NMERO

CIUDAD

PAS

Sea CLIENTE una estructura formado por cuatro campos, tres del tipo cadena de
caracteres y el otro del tipo real. Su representacin queda como se muestra a
continuacin:
Crear estructura CLIENTE hacer
Cadena_de_caracteres
: Nombre
Cadena_de_caracteres
: Telfono
Real
: Saldo
Cadena_de_caracteres
: Moroso
Fin_hacer

NOMBRE

TELFONO

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

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 mayora 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 usarn 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.nmero , D.ciudad , D.pas )
Para asignar valores a algunos de los campos de una variable C tipo CLIENTE :
C.saldo
C.saldo + cant
C.moroso Verdadero
C.nombre Juan Prez

COMBINACIONES ENTRE ARREGLOS Y REGISTROS :


Anteriormente se mencion que un campo de un registro puede ser de cualquier tipo,
por lo tanto tambin 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 sern del mismo tipo de estructura ) . A continuacin 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
: Telfono
: 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

NOM

TEL

SALDO

NOM

TEL

SALDO

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].telfono
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
Direccin :

( cadena de caracteres )

Calle
Nmero
Ciudad
Pas

( cadena de caracteres )
( entero )
( cadena de caracteres )
( cadena de caracteres )

Saldo

( real )

Para definir el tipo del campo Direccin es necesario definir previamente un registro
formado por los cuatro componentes ( calle , nmero , ciudad , pas ) que se
especifican . Usaremos el registro DOMICILIO del ejemplo anterior para resolver este
caso.
Crear estructura ACREEDOR hacer
Cadena_de_caracteres
: Nombre
DOMICILIO
: Direccin
Real
: Saldo
Fin_hacer { Fin de la definicin de la estructura ACREEDOR }

172

Algoritmo y Estructura de Datos I

CREEDOR
NOMBRE

DIRECCIN
CALLE

NMERO

CIUDAD

SALDO
PAS

En este caso, la estructura tiene un campo ( direccin ) 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.direccin.calle
AC.direccin.nmero
AC.direccin.ciudad

AC.direccin.pas
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
Telfono
Saldo mensual del ltimo ao
Moroso

( cadena de caracteres )
( cadena de caracteres )
( arreglo de reales )
( cadena de caracteres )

CLIENTE

NOMBRE

TELFONO

SALDOS

173

MOROSO

Algoritmo y Estructura de Datos I

La definicin del registro correspondiente es la siguiente :


Crear estructura CLIENTE hacer
Cadena_de_caracteres
: Nombre
Cadena_de_caracteres
: Telfono
Real
: Saldos[10]
Cadena_de_caracteres
: Moroso
Fin_hacer
{ Fin de la definicin 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.telfono
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 cdigo, pines,
denominacin, crear una
estructura o registro y guarde los datos del 7408,
7432, 74193,74151, 7447.

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

Cdigo

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

cdigo

Entero

Pin
Cadena de caracteres Den

Fin_ hacer

Inicio {Chip: X, Y, Z, W, V}
Escribir "Ingrese cdigo, pines y denominacin"
Leer ( X. Cdigo)
Leer ( X. Pin )
Leer ( X. Den )
Leer ( Y. Cdigo )
Leer ( Y. Pin )
Leer ( Y. Den, )
Leer ( Z. Cdigo)
Leer ( Z. Pin )
Leer ( Z. Den )
Leer ( W. Cdigo )
Leer ( W. Pin )
Leer ( W. Den, )
Leer ( V. Cdigo)
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

Cdigo

Entero

Pin

Cadena de carcter

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.)
ii+1
Fin_ hacer
Fin

2.

Supngase que se conoce el nombre y la calificacin 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.

Solucin:
Psudocdigo:

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].CALIFICACIN )
AC AC + ALUMNOS[I].CALIFICACIN
I I + 1
Fin_hacer
3. PROM AC / 30
4. Escribir el promedio del grupo es , PROM
// Bsqueda e impresin de los alumnos con calificacin inferior al //promedio

176

Algoritmo y Estructura de Datos I

5. Repetir con J desde 1 hasta 30 hacer


Si (ALUMNOS[J].CALIFICACIN < 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 1

I <= 30

ALUMNOS[I].NOMRE y ALUMNOS[I].CALIFICACIN
AC AC + ALUMNOS[I].CALIFICACIN
I
I + 1
PROM AC / 30

El promedio es PROM

J 1

J <= 30

ALUMNOS[J].CALIFICACIN < PROM

ALUMNOS[J].NOMBRE

J J + 1

Fin

178

Algoritmo y Estructura de Datos I

CADENAS DE CARACTERES
Concepto, representacin, creacin, declaracin y acceso
Una cadena de caracteres es una secuencia de cero (cadena vaca) o ms caracteres
de entrada/salida. La longitud de una cadena es el nmero 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 , fmurruchi@yahoo.es , 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 vaca
quedar perfectamente representada por un delimitador en la primera posicin del
arreglo. A partir del delimitador, el contenido del arreglo no importa. La primera
aparicin del delimitador marcar la terminacin de la cadena.

Declaracin de cadenas de caracteres


Cuando se declara un arreglo de caracteres su contenido es indefinido.
1

-5

21

4
-19

5
4

6
8

10

72

56

-20

30

11
51

12
8
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 posicin del carcter terminador marcar el final de la cadena.
Por ejemplo, cadena[1] \0 crear una cadena vaca ().

179

13
2

14

15

-99

77

Algoritmo y Estructura de Datos I

cadena
1

\0

21

-19

6
8

10

72

56

-20

30

11
51

12

13

14

15

80

-99

77

Cadena de caracteres vaca (terminador en la primera posicin del arreglo, aunque


puede haber otros ms adelante)

Asignacin de cadenas
La asignacin 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
Asignacin de constantes literales. El terminador se aade automticamente. La ltima
posicin del arreglo se reserva para el terminador.
Variable Tpcadena cad1 ejemplo, cad2...
cad2 Cadenamuylargaquenocabe // Slo se almacenan 14 caracteres

Lectura no estndar hasta fin de cadena


Declaracin de estructuras:
Crear estructura Tcadena hacer
Caracter

TCadena [.Longitud]

Fin_hacer

/* Lectura hasta el final de la cadena (retorno de carro o longitud mxima) */


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 estndar 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 mxima}
Inicio {Variables: Entero componente
Carcter: carcter}

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

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

Comparacin 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

Bsqueda de subcadenas (patrones)


Constante Caracter TERMINADOR CHR(0)
Entero LongMax 100
Declaracin de estructuras:
Crear estructura Tpcadena hacer
Caracter Tpcadena [LongMax]
Fin de hacer
// Precondicin: 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


j1
Repetir mientras(j<=longPtr) Y (texto[i+j] = patron[j]) hacer
jj+1
Fin_hacer
SI (j > longPtr) Entoces
encontrado true
Sino
ii+1
Fin_si
Fin_hacer
6. SI encontrado Entonces
pos i+1
Sino
pos -1
Fin_si
7. Devolver (pos)
8. Fin // Posicin

186

Algoritmo y Estructura de Datos I

BIBLIOGRAFA

CAIR BATTISTUTTI, Osvaldo, (2002). Estructuras de datos 2da. Edicin, McGrawHill. Mxico, D.F.

CAIR BATTISTUTTI, Osvaldo, (2002). Metodologa de la programacin. Algoritmos


y diagramas de flujo 2da. Edicin, McGraw-Hill. Mxico, D.F.

GOODRICH,

Michael

T.

(2002)

Estructuras

de

datos

algoritmos

en

Java.Continental. Mxico.

JOYANES AGUILAR, Luis, (2000) Programacin en C++: Algoritmos, estructura de


datos y objetos .McGraw-Hill. Madrid.

JOYANES AGUILAR, Luis, (1996) Fundamentos de Programacin: Algoritmos y


estructuras de datos 2da. Edicin,.Mc graw Hill. Madrid.

KONG, Maynard, (1994). Lenguaje de programacin C PUCP. Fondo editorial. Lima

WIRTH, Niklaus. (1987). Algoritmos y Estructura de Datos. Prentice Hall. Mxico.

187