You are on page 1of 138

FACULTAD DE INGENIERA

E.A.P. INGENIERA INFORMTICA


Asignatura:
Catedrtico:
Ing. Carol Rojas Moreno
Huancayo-Per
2008-II
2
Ing. Carol Rojas Moreno
INTRODUCCCION
En la actualidad, la exigencia competitiva exige profesionales que se distingan no solamente por elaborar
sistemas de informacin satisfactoriamente, sino haciendo uso de mtodos y fundamentos que le permitan
superar con xito las pruebas y control de calidad de los mismos, para ello se requiere conocimientos
necesarios en las tcnicas y estructuras de datos para la programacin, en este caso basada en el enfoque
estructurado, requeridos en su formacin bsica para poder desarrollar programas y sistemas de informacin
en posteriores niveles avanzados.
Ing. Carol Rojas Moreno
3
4
Ing. Carol Rojas Moreno
MAPA CONCEPTUAL ALGORITMIA Y ESTRUCTURA DE DATOS
Ing. Carol Rojas Moreno
5
ESTRUCTURA
DE DATOS
ESTRUCTURA DE
DATOS
ESTTICAS
se definen
ESTRUCTURA DE
DATOS DINMICAS
ARREGL
OS
REGISTR
OS
CLASES
LISTAS
PILAS
COLAS
ARBOLE
S
GRAFO
S
ALGORITMOS
ACTUALIZACIO
N DE DATOS
REPORTE
DE DATOS
INGRESO
DE DATOS
ELABORACION
DE PROGRAMAS
como
como
ienen
!"#" o!e#"#
en
$ERRAMIENTAS DE
%ROGRAMACI&N
ESTRUCTURADA
T'CNICAS DE
%ROGRAMACI&N (
ESTRUCTURA DE DATOS
im!)emen"n
cons"
*
Ing. Carol Rojas Moreno
INDICE Pag.
MAPA CONCEPTUAL
UNIDAD 1: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA
!ntroduccin "#
$lgoritmo ""
%epresentacin del $lgoritmo "&
Programacin Estructurada "'
(entencias )sicas de Programacin "*
(entencia (ecuencial "*
(entencia (electiva +&
(entencia %epetitiva &+
UNIDAD 2: MODULARIZACION EN LA PROGRAMACIN ESTRUCTURADA
!ntroduccin '+
,unciones y Procedimientos '&
-ibrer.as de Programacin creadas por el usuario "
/ema 01 #2 ,unciones %ecursivas &
UNIDAD 3: ESTRUCTURAS DE DATOS
!ntroduccin 3
Estructuras de 4atos 5
Estructuras de 4atos Estticas 5
$rreglos 6nidimensionales 5
$rreglos )idimensionales *'
%egistros 37
6niones 35
Programacin 8rientada a 8b9etos 5"
Estructuras de 4atos 4inmicas 5&
Punteros 5&
Estructuras de 4atos 4inmicas -ineales 53
-istas Enlazadas 53
:olas "#
Pilas "#*
Estructuras de 4atos 4inmicas 0o -ineales ""#
$rboles ""#
$rboles )inarios ""
$rboles )inarios de );squeda ""
<rafos ""5
UNIDAD 4: FICHEROS (ARCHIVOS)
!ntroduccin "+'
,icheros =$rchivos> "+
Ing. Carol Rojas Moreno
+
,
Ing. Carol Rojas Moreno
UNIDAD N 01
ALGORITMOS Y PROGRAMACIN ESTRUCTURADA
COMPETENCIA DE LA UNIDAD
!"#$ $l trmino dela unidad se espera que el alumno elabore algoritmos con su respectiva representacin
y cdigo escrito en un lengua9e de programacin, usando las sentencias bsicas de programacin.
P%&% '"#$ Para permitir la construccin de programas de computadora sobre algoritmos conocidos en el
mundo real.
P(& '"#$ Esto le permitir diferenciar los algoritmos que se pueden codificar y los que no lo necesitan,
formalizando de esta manera los conocimientos previos sobre programas de computadora.
C)*($ (e propondr e9ercicios basados en contexto reales, para desarrollar el algoritmo de solucin y su
codificacin en un lengua9e de programacin.
Ing. Carol Rojas Moreno
-
ALGORITMOS Y PROGRAMACIN ESTRUCTURADA
INTRODUCCION
El algoritmo es una solucin ordenada a un problema definido, que puede ser elaborado como un con9unto de
l.neas de instruccin, llamado programa, que a su vez el con9unto de programnas conforman un sistemna de
informacin automatizado.
El algoritmo computacional posee caracteristicas importantes como el de ser ordeando, finito y eficiente,
adems de contar con fromas de reprenetacin.
-as representaciones mas conocidas de un algortmo computacional son el Pseudocodigo, que es una
escritura seme9ante al lengua9e natural, el 4iagrama de ,lu9o Estructurado y el 4iagrama de
0assi?(chneiderman.
El programa es el algoritmo escrito en un lengua9e de progrqamacin, y desde la perspectiva de la ingenieria
de softr@are, existen dos enfoques que otorgan sus herramientas y tcnicas para elaborar programas, estos
enfoques son el Enfoque 8rientado a 8b9etos y el Enfoque Estructurado.
-a programacin desde el enfoque estructurado permite concoer con facilidad sus tcnicas de programacin2
(entencias )sicas de Programacin2 (ecuenciales, (electivas y %epetitivas.
./
Ing. Carol Rojas Moreno
ALGORITMO
1+ A,-(&./*(
-a palabra algoritmo se di en honor del matemtico persa del siglo !A, Bho@CrizmD.
6n algoritmo es un con9unto ordenado y finito de instrucciones que conducen a la solucin de un problema.
Por e9emplo2
E $l instalar un equipo de sonido e9ecutamos las instrucciones =algoritmo> contenidas en el manual del equipo.
E $lgoritmo matemtico de Euclides para la obtencin del mximo com;n divisor de dos n;meros.
(i un algoritmo puede ser e9ecutado por una computadora, se dice que es un %,-(&./*( 0(*1"/%0.(2%,F en
caso contrario, se dice que es un %,-(&./*( 2( 0(*1"/%0.(2%,.
Para que un algoritmo sea computacional se debe expresar en instrucciones atraves de un lengua9e de
programacin, teniendo como resultado un programa.
/odo algoritmo puede ser descompuesto en tres partes2
Entrada de datos.
Proceso.
(alida de resultados.
En cada uno de ellos se necesita el uso de variables2
V%&.%3,4:
Es una localizacin o casillero en la memoria principal que almacena un valor que puede cambiar en el
transcurso de la e9ecucin del programa. /iene un 2(*3&4, un /.1( 54 5%/( y un 6%,(&. $ntes de poder
utilizar una variable es necesario declararla especificando su nombre y su tipo de dato.
E9emplo "2
Entero edad
E9emplo +2
%eal peso, talla
Ing. Carol Rojas Moreno
..
%ROCESO
E
D"os
S
Res0)"do
2+ C%&%0/4&78/.0%8 54 "2 %,-(&./*(
S4& 1&40.8(2 los pasos del algoritmo deben desarrollarse en un orden estricto, ya que el desarrollo de cada
paso debe obedecer a un orden lgico.
S4& 549.2.5(. en el rea de programacin, el algoritmo se desarrolla como paso fundamental para
desarrollar un programa. El computador solo desarrollar las tareas programadas y con los datos
suministradosF no puede improvisar el dato que necesite para realizar un proceso.
S4& 9.2./(2 implica que el n;mero de pasos de un algoritmo, por grande y complicado que sea el problema
que soluciona, debe ser limitado, es decir debe llegar a un final.
P&4842/%0.)2 9(&*%,2 para que el algoritmo sea entendido por cualquier persona interesada es necesario
que se exprese en alguna de las formas com;nmente aceptadasF si no puede no ser muy ;til ya que solo lo
entender quien lo diseG. -as formas de presentacin de algoritmos son2 el pseudocdigo, diagrama de
flu9o y diagramas de 0assi?(chneiderman, entre otras.
C(&&400.)22 el algoritmo debe ser correcto, debe solucionar el problema para el cual fue diseGado. Para
garantizar que el algoritmo logre el ob9etivo, es necesario ponerlo a prueba2 verificacin o prueba de
escritorio.
E9.0.420.%2 es evaluar los recursos que requiere para almacenar datos y para e9ecutar operaciones frente
al beneficio que ofrece. En cuanto menos recursos requiere ser ms eficiente el algoritmo.
3+ I28/&"00.(248 A,-(&7/*.0%8 :;8.0%8
Existen tres instrucciones algor.tmicas bsicas que son las siguientes
1+ E2/&%5%
:onsiste en obtener un dato de un dispositivo de entrada, como el teclado, y almacenarlo en una variable.
En general, la accin de ingresar un dato a una 6%&.%3,4 se expresa en el pseudocdigo mediante la palabra
LEER, de la siguiente forma2
LEER variable
E9emplo2 LEER edad
2+ S%,.5%
:onsiste en mostrar el valor de una variable en un dispositivo de salida, como la pantalla. En general, la
accin de mostrar el valor de una 6%&.%3,4 se expresa en el pseudocdigo mediante la palabra IMPRIMIR
=E(:%!)!%> de la siguiente forma2
IMPRIMIR variable
E9emplo2 IMPRIMIR /otal:ompra
3+ A8.-2%0.)2
:onsiste en dar a una 6%&.%3,4 el valor de una 4<1&48.)2. -a asignacin se expresa en el pseudocdigo de
la siguiente forma2
variable H expresin o variable expresin
4onde 6%&.%3,4 y el valor de 4<1&48.)2 deben tener el mismo tipo de dato.
E9emplo2
resultado numero" I numero +
.2
Ing. Carol Rojas Moreno
REPRESENTACIN DEL ALGORITMO
". Pseudocdigo2 es la representacin del algoritmo en lengua9e natural.
E9emplo2 sumar dos n;meros enteros.
!0!:!8
entero numero", nuemro+, resultado
-eer numero"
-eer numero+
resultado numero" I numero +
Escribir JEl resultado de la suma es2 K
Escribir resultado
,!0
+. 4iagrama de ,lu9o Estructurado2 representacin con flu9os entre los procesos a realizar.
-os principales s.mbolos de representacin para este diagrama son.

&. 4iagrama 0E(2 representacin en bloques, es decir cada uno de los procesos como ingreso?salida de
datos, decisiones, acciones, repeticionesF estn representados en bloques de tareas consecutivos.
Ing. Carol Rojas Moreno
.3
!0!:!8
4eclaracin de variables
-ectura de 4atos
$ccin "
$ccin +
$ccin n
%eporte de 4atos
,!0
InicioFin !el algori"#o
Procesos !el algori"#o
En"a!aSali!a Es"$n!ar !e Da"os !el algori"#o
Fl%jo !e recorri!o en"re Procesos !el algori"#o
P%n"o !e Decisi&n !el algori"#o
S%'r%"inas en el algori"#o
Conec"or !el algori"#o en la #is#a (oja
Conec"or !el algori"#o en o"ra (oja
PROGRAMACIN ESTRUCTURADA
1+ P&(-&%*%
(ecuencia de instrucciones que especifican las operaciones que debe realizar la computadora, en la cual
cada paso del algoritmo est expresado por medio de una instruccin.
2+ L42-"%=48 54 P&(-&%*%0.)2> T.1(8
a. -engua9e Lquina
b. -engua9e de )a9o 0ivel
c. -engua9e de $lto 0ivel
3+ P&(-&%*%8 T&%5"0/(&48
/raducen los programas fuente de a cdigo mquina. Pueden ser2
". !ntrpretes 2 es un traductor que toma un programa fuente, lo traduce y a continuacin lo e9ecuta.
+. :ompilador 2 es un traductor que toma un programa fuente, y lo traduce sentencia por sentencia.
-a compilacin es el proceso de traduccin del programa fuente a programa ob9eto =traducido a cdigo
mquina>, a travs de un programa enlazador, para conducir al programa e9ecutable.
.4
Ing. Carol Rojas Moreno
P%8<%$L$
,6E0/E
!0/E%P%E/E
P%8<%$L$
EME:6/$)-E
P%8<%$L$
,6E0/E
:8LP!-$48%
P%8<%$L$
8)ME/8
P%8<%$L$
,6E0/E
:8LP!-$48%
=/raductor>
P%8<%$L$
8)ME/8
Ing. Carol Rojas Moreno
.5
P%8<%$L$
E0-$N$48%
P%8<%$L$
EME:6/$)-E
4+ P&(-&%*%0.)2 E8/&"0/"&%5%
:on9unto de tcnicas para escribir, verificar, depurar, y mantener los programas, es una metodolog.a de
desarrollo de programas llamada refinamientos sucesivos2 se plantea una operacin como un todo y se divide
en segmentos ms sencillos o de menor comple9idad. 6na vez terminado todos los segmentos del programa,
se procede a unificar las aplicaciones, esta integracin debe ser sencilla.
-a representacin grafica de la programacin estructurada se realiza a travs de diagramas de flu9o o flo@
chart, 4iagramas 0E(, el cual representa el programa con sus entradas, procesos y salidas.
El con9unto de tcnicas para este enfoque son2
1+ R40"&8(8 A38/&%0/(8
4escomponer una determinada accin comple9a en acciones ms simples, para ser e9ecutadas y que
sern instrucciones.
2+ D.84?( D48042542/4
El problema se descompone en niveles o pasos sucesivos2 que hace? como lo hace?
3+ E8/&"0/"&%8 3;8.0%8
(on estructuras de control para el programa2
E (ecuenciales
E (electivas
E %epetitivas
Oste con9unto de tcnicas permite elaborar programas en cualquier lengua9e de programacin.
-as estructuras bsicas mencionadas sern desarrolladas mas adelante en otras sesiones de clase.
4+ R48(,"0.)2 54 "2 P&(3,4*%
-os siguientes pasos propuestos para la resolucion de problemas estan basados en el :iclo de Pida :lsico
en la :onstruccin de un (oft@are.
". $nlisis del Problema
+. 4iseGo del $lgoritmo
&. Expresar el algoritmo en un programa.
'. E9ecucin y Palidacin del programa.
.*
Ing. Carol Rojas Moreno
Que hace
:omo hace
E=4*1,( P&(1"48/(
6na 6niversidad necesita implementar una $ula Pirtual para cursos de extensin, en la cual una persona
se %egistra como alumno ingresando un deposito de cuenta por el costo total de los cursos que desea
llevar, ingresando sus datos personales y su correo electrnico, e indicando los cursos a llevar.
:uando es aceptado como alumno =comprobando el monto del deposito con el costo de los cursos>, se le
env.a a su correo electrnico el nombre de usuario =el cual es la misma direccin de eEmail2 e9em2
9uangarciaRhotmail> y cuyo pass@ord es el login =e9em2 9uangarcia>
El alumno ingresa al aula virtual donde encontrar una seccin con la descripcin por curso y el material
necesario para desarrollar el curso.
El alumno es autoevaluado en una fecha correspondiente.
$plicar las tcnicas2
%ecurso $bstracto2
4iseno 4escendente2
Ing. Carol Rojas Moreno
.+
SENTENCIAS :@SICAS DE PROGRAMACIN
-as sentencias de programacin a utilizar es una las tcnicas de programacin del enfoque estructurado2
E8/&"0/"&%8 :;8.0%8+
Recordando: son estructuras bsicas de control para el programa2
E (imples o (ecuenciales
E (electivas
E %epetitivas
R41&4842/%0.)2 54, A,-(&./*( 42 0%5% E8/&"0/"&% :;8.0%
1+ E8/&"0/"&% :;8.0% S.*1,4 ( S40"420.%,: es una estructura paso a paso, sin bifurcaciones ni repeticionesF
donde la salida de un proceso es entrada para otro.
4iagrama de ,lu9o
4iagrama 0E(
!0!:!8
4eclaracin de variables
-ectura de 4atos
$ccin "
$ccin +
$ccin n
%eporte de 4atos
,!0
E9emplo2
:alcular el rea de un tringulo. $rea H =base S altura> ? +
.,
Ing. Carol Rojas Moreno
INICIO
Declaraci&n !e )aria'les
Lec"%ra !e Da"os
Acci&n *
Acci&n n
FIN
Acci&n +
Re,or"e !e Da"os
(olucin2
4iagrama de ,lu9o
4iagrama 0E(
!0!:!8
real base, altura, $rea
-eer base
-eer altura
$rea =base S altura> ? +F
Escribir KEl valor del rea para el tringulo es2 K
Escribir $rea
,!0
:digo en :2
#include<iostream>
using namespace std;
Ing. Carol Rojas Moreno
.-
-eyenda de 4atos
base2 valor de la base del tringulo
altura2 valor de la altura del triangulo
$rea2 valor del resultado del clculo del rea del tringulo
INICIO
real 'ase- al"%ra- Area
Leer 'ase
FIN
Area .'ase / al"%ra0 +
Escri'ir Area
Leer al"%ra
Escri'ir 1El 2alor !el $rea ,ara
el "ri$ng%lo es3 4
int main( )
{
float base, altura, Area;
cout<<Ingrese valor de la base: ;
cin>>base;
cout<<\n; //Salto de lnea
cout<<Ingrese valor de la altura: ;
cin>>altura;
cout<<\n;
Area = (base * altura) / 2;
cout<<El valor del rea para el tringulo es: ;
cout<<Area;
cout<<\n;
return 0;
}
TRA:AAO APLICATIVO
Elaborar el Pseudo cdigo, 4iagrama de ,lu9o y 4iagrama 0E( respectivo para2
". -a presin, el volumen y la temperatura de una masa de aire se relacionan por la formula2
Lasa H =presin S volumen>?=#.&* S =temperatura I '7#>>
:alcular la masa respectiva.
+. Escribir un programa que convierta una distancia medida en pulgadas a cent.metros. =" pulg H +.'
cm.>
&. :alcular el numero de pulsaciones que una persona debe tener por cada "# segundos de e9ercicio,
si la formula es2 0umTpulsaciones H =++# E edad>?"#
'. En un hospital existen tres reas2 <inecolog.a, Pediatr.a, /raumatolog.a. El presupuesto anual del
hospital se reparte conforme a la siguiente tabla2
rea Porcentaje del presupuesto
i. <inecolog.a '#U
2/
Ing. Carol Rojas Moreno
Con! *
ii. /raumatolog.a &#U
iii. Pediatr.a &#U
8btener la cantidad de dinero que recibir cada rea, para cualquier monto presupuestal.
4+ E8/&"0/"&% :;8.0% S4,40/.6%: es una estructura que tiene un punto de decisin para realizar un
con9unto de acciones. Pueden ser2
E E. ). (electiva (imple
E E. ). (electiva :ompuesta
E E. ). (electiva $nidada
E E. ). (electiva L;ltiple
a. Estructura )sica (electiva (imple2 se tiene un punto de decisin que eval;a una condicin y si es
Perdadero, e9ecuta un con9unto de $cciones.
4iagrama de ,lu9o
4iagrama 0E(
!0!:!8
4eclaracin de variables
-ectura de 4atos

Ing. Carol Rojas Moreno
2.
INICIO
Declaraci&n !e )aria'les
Lec"%ra !e Da"os
Acci&n n
FIN
Acci&n *
Re,or"e !e Da"os
Con!
*
1 F
P ,
$ccin "
$ccin +
$ccin n
%eporte de 4atos
,!0
E9emplo2
(umar dos n;meros enteros positivos c H a I b
(olucin2
4iagrama de ,lu9o

4iagrama 0E(
22
Ing. Carol Rojas Moreno
-eyenda de 4atos
a2 valor del primer numero entero positivo
b2 valor del segundo numero entero positivo
c2 valor del resultado la suma de dos n;meros a y b
en"ero a- '- c
Leer a - '
FIN
c a 5 '
Escri'ir 1El 2alor !e la s%#a es4 - c
a 67 88 '67
1 F
INICIO
:digo :2
#include<iostream>
using namespace std;
int main( )
{
float a, b, c;
cout<<Ingrese primer nmero: ;
cin>>a;
cout<<\n;
cout<<Ingrese segundo nmero: ;
cin>>b;
cout<<\n;
if (a>0 && b>0)
{ c = a + b;
cout<<El valor la suma es: ;
cout<<c;
cout<<\n;
}
return 0;
Ing. Carol Rojas Moreno
23
!0!:!8
entero a, b, c
-eer a , b
a V# WW bV#
P ,
c a I b
Escribir JEl valor la suma es2 K , c
,!0
}
24
Ing. Carol Rojas Moreno
Con! *
b. Estructura )sica (electiva :ompuesta2 se tiene un punto de decisin que eval;a una condicin y si es
Perdadero, e9ecuta un con9unto de $cciones, y si es ,alsa e9ecuta otro con9unto de acciones.
4iagrama de ,lu9o
4iagrama 0E(
!0!:!8
4eclaracin de variables
-ectura de 4atos

P ,
$ccin " $ccin +
X X.
$ccin n $ccin m
%eporte de 4atos
,!0
Ing. Carol Rojas Moreno
25
INICIO
Declaraci&n !e )aria'les
Lec"%ra !e
Da"os
Acci&n n
FIN
Acci&n *
Re,or"e !e
Da"os
Con!
*
1
F
Acci&n #
Acci&n +
E9emplo2
(umar dos n;meros enteros si son positivos, sino multiplicarlos.
(olucin2
4iagrama de ,lu9o
4iagrama 0E(
2*
Ing. Carol Rojas Moreno
!0!:!8
entero a, b, c
-eer a , b
a V# WW bV#
P ,
c a I b c a S b
Escribir JEl valor la suma es2 K , c Escribir JEl valor la multiplicacin es2 K , c
,!0
INICIO
en"ero a- '- c
Leer a - '
FIN
c a 5 '
Escri'ir 1El 2alor !e la
s%#a es 4 - c
a 67 88 '67
1
F
c a / '
Le9en!a !e Da"os
a3 2alor !el ,ri#er n%#ero en"ero ,osi"i2o
'3 2alor !el seg%n!o n%#ero en"ero ,osi"i2o
c3 2alor !el res%l"a!o la s%#a o #%l"i,licaci&n !e !os n:#eros a 9 '
Escri'ir 1El 2alor !e la
#%l"i,licacion es 4 - c
:digo :2
#include<iostream>
using namespace std;
void main( )
{
int a, b, c;
cout<<Ingrese primer nmero: ;
cin>>a;
cout<<\n;
cout<<Ingrese segundo nmero: ;
cin>>b;
cout<<\n;
if(a>0 && b> 0)
{
c = a + b;
cout<<El valor la suma es: ;
cout<<c;
cout<<\n;
}
else
{
c = a * b;
cout<<El valor la multiplicacion es: ;
cout<<c;
cout<<\n;
}
}
Ing. Carol Rojas Moreno
2+
b. Estructura )sica (electiva $nidada2 se tiene un punto de decisin que eval;a una condicin y si es
Perdadero, e9ecuta un nuevo punto de decisin y as. sucesivamente, y si es ,alsa e9ecuta otro con9unto de
acciones.
4iagrama de ,lu9o
2,
Ing. Carol Rojas Moreno
INICIO
Declaraci&n !e )aria'les
Lec"%ra !e Da"os
Acci&n n
FIN
Acci&n *
Re,or"e !e Da"os
Con!
*
1 F
Acci&n #
Acci&n +
Con!
+
1
F
Con! *
4iagrama 0E(
!0!:!8
4eclaracin de variables
-ectura de 4atos

, P
$ccin +
P ,
X $ccin "
X X.
$ccin m $ccin n
%eporte de 4atos
,!0
E9emplo2
!ngresar un n;mero entero y si es positivo y diferente de cero, reportar si se encuentra entre los diez primeros
n;meros.
(olucin2
4iagrama de ,lu9o
4iagrama 0E(
Ing. Carol Rojas Moreno
2-
Con! +
En"ero a
Leer a
FIN
a 6 7
1 F
a6;* 88
a6*7
1
F
INICIO
-eyenda de 4atos
a2 valor del numero entero
Escri'ir 1No es %n
n:#ero #a9or <%e
cero4
Escri'ir 1Pri#eros *74
Escri'ir 1Son #as !e
los ,ri#eros *74
F 1
F 1
!0!:!8
entero a
-eer a
a V #
Escribir J0o es un n;mero mayor que
ceroK
aVH" WW aV"#
Escribir J(on mas de los primeros "#K Escribir JPrimeros "#
,!0
:digo :2
#include<iostream>
using namespace std;
int main( )
{
int a;
cout<<Ingrese nmero: ; cin>>a;
if(a>0)
if(a>=1 && a<10)
cout<<Primeros 10;
else
cout<<Son ms de los primeros 10;
else
cout<<No es un nmero mayor que cero;
return 0;
}
3/
Ing. Carol Rojas Moreno
Con! *
3 2
.
2
3
c. Estructura )sica (electiva L;ltiple2 se tiene un punto de decisin que eval;a mas de dos alternativas
para realizar un con9unto de acciones.
4iagrama de ,lu9o
4iagrama 0E(
!0!:!8
4eclaracin de variables
-ectura de 4atos

default
$ccin " $ccin + $ccin & $ccin '
X X X X
$ccin n $ccin m $ccin m $ccin m
%eporte de 4atos
,!0
E9emplo
!ngresa cinco n;meros e imprime que vocal es.
Ing. Carol Rojas Moreno
3.
INICIO
Declaraci&n !e )aria'les
Lec"%ra !e Da"os
Acci&n #
FIN
Acci&n +
Re,or"e !e Da"os
Con!
*
def"0) .
Acci&n n
Acci&n *
Acci&n #
Acci&n =
Acci&n #
Acci&n >
Acci&n >
3 2 4 5
(olucin2
4iagrama de ,lu9o
4iagrama 0E(
!0!:!8
entero num
-eer num
num
" + & ' default
Escribir
JPocal $K
Escribir
JPocal EK
Escribir
JPocal !K
Escribir
JPocal 8K
Escribir
JPocal 6K
Escribir J0o es
PocalK
,!0
32
Ing. Carol Rojas Moreno
en"ero n%#
Leer n%#
FIN
n%#
def"0) .
Escri'ir
1)ocal A4
-eyenda de 4atos
num2 valor del numero entero positivo
INICIO
Escri'ir
1)ocal E4
Escri'ir
1)ocal I4
Escri'ir
1)ocal O4
Escri'ir
1)ocal U4
Escri'ir 1No
es )ocal4
:digo :2
#include<iostream>
using namespace std;
int main( )
{
int num;
cout<<Ingrese nmero: ;
cin>>num;
switch(num)
{
case 1: cout<<Vocal A; break;
case 2: cout<<Vocal E; break;
case 3: cout<<Vocal I; break;
case 4: cout<<Vocal O; break;
case 5: cout<<Vocal U; break;
default: cout<<No es numero para una vocal;
}
return 0;
}
Ing. Carol Rojas Moreno
33
1
B+ E8/&"0/"&% :;8.0% R414/./.6%: es una estructura permite iterar o repetir un con9unto de acciones
dada una condicin. Pueden ser2
E E. ). %epetitiva Lientras
E E. ). %epetitiva YacerELientras
E E. ). %epetitiva Para
a. Estructura )sica %epetitiva Lientras2 primero eval;a una expresin condicional y si es verdadera permite
realizar el con9unto de acciones y regresa evaluar nuevamente la expresin condicional, hasta que de9e de
cumplir =,also>.
4iagrama de ,lu9o
4iagrama 0E(
!0!:!8
4eclaracin de variables
-ectura de 4atos
:ond "
$ccin "
X.
$ccin n
$ccin +
%eporte de 4atos
,!0
E9emplo en :digo :2
!mprimir la serie ,ibonacci, menor a un l.mite dado2 #,",",+,&,,3,"&,X.
#include<iostream.h>
34
Ing. Carol Rojas Moreno
INICIO
Declaraci&n !e )aria'les
Lec"%ra !e Da"os
Acci&n n
FIN
Acci&n *
Con!
*
F
Acci&n +
1
F
int main( )
{ int lim, a=0, b=1,c;
cout<<Ingrese lmite: ;
cin>>lim;
cout<<a;
while(b<lim)
{ cout<<b;
c=a+b;
a=b;
b=c;
}
return 0;
}
b. Estructura )sica %epetitiva Yacer E Lientras2 realiza al menos una vez un con9unto de acciones, y luego
eval;a una expresin condicional, si es Perdadero regresa a repetir el con9unto de acciones, si no cumple,
sale del bucle.
4iagrama de ,lu9o
4iagrama 0E(
!0!:!8
Ing. Carol Rojas Moreno
35
INICIO
Declaraci&n
!e )aria'les
Lec"%ra !e
Da"os
Acci&n n
FIN
Acci&n *
Re,or"e !e
Da"os
Con!
*
Acci&n +
4eclaracin de variables
-ectura de 4atos
$ccin "
X.
$ccin n
:ond +
$ccin +
%eporte de 4atos
,!0
E9emplo en :digo :2
(e tiene un (tocZ inicial, del cual se realizan ventas a n clientes, si la venta supera al stocZ, contar a los
clientes insatisfechos. Lostrar la cantidad de clientes satisfechos, cantidad de clientes insatisfechos, /otal
de ventas, y lo que queda en stocZ. El usuario debe indicar si desea continuar o no.
#include<iostream>
using namespace std;
int main()
{ int n,m, cs=0,ci=0, venta=0; char ops,op;
cout<<"-----Venta de Producto------";
cout<<"\n\n";
do{
do{ cout<<"Ingrese valor de stock inicial: ";
cin>>n;
}while(n<=0);
do{
do{ cout<<"Ingrese venta: ";
cin>>m;
}while(m<=0);
if(n>=m && m>0)
{ n=n-m;
venta=venta+m;
cs++;
if(n>0)
{ cout<<"\n";
cout<<"Desea Continuar?";
cin>>ops; cout<<"\n";
}
else
break;
}
else
{ ci++;
cout<<"\n";
cout<<"Es mayor q el stock actual ";
cout<<"\n";
cout<<"Clientes Satisfechos: ";
cout<<cs; cout<<"\n";
3*
Ing. Carol Rojas Moreno
cout<<"Clientes Insatisfechos: ";
cout<<ci; cout<<"\n";
cout<<"Total de Ventas: ";
cout<<venta;
cout<<"\n";
cout<<"Queda de Stock: ";
cout<<n; cout<<"\n";
cout<<"---------------------------";
cout<<"\n\n";
cout<<"Desea Continuar?";
cin>>ops;
cout<<"\n\n";
}
}while(ops=='S' || ops=='s');
cout<<"------REPORTE FINAL------";
cout<<"\n";
cout<<"Clientes Satisfechos: ";
cout<<cs; cout<<"\n";
cout<<"Clientes Insatisfechos: ";
cout<<ci; cout<<"\n";
cout<<"Total de Ventas: ";
cout<<venta; cout<<"\n";
cout<<"Queda de Stock: ";
cout<<n; cout<<"\n";
cout<<"--------------------------";
cout<<"\n\n";
if(n==0)
{cout<<"Se completo ultimo pedido, su stock actual es CERO";
cout<<"\n";
cs=0;
ci=0;
venta=0;
cout<<"Desea Otro Stock Inicial? (s)";
cin>>op;
}
else
break;
}while(op=='S' || op=='s');
return 0;
}
Ing. Carol Rojas Moreno
3+
1
F
c. Estructura )sica %epetitiva Para2 permite repetir un con9unto de acciones, secuencialmente hasta llegar a
un l.mite dado.
4iagrama de ,lu9o
3,
Ing. Carol Rojas Moreno
INICIO
Declaraci&n
!e )aria'les
Lec"%ra !e
Da"os
Acci&n n
FIN
Iniciali?ar la 2aria'le
!e recorri!o
Re,or"e !e
Da"os
)aria'le
recorri!o es
#enor a l@#i"e
Acci&n *
DeAinir 2aria'le !e
recorri!o 9 l@#i"e
Incre#en"ar
)aria'le !e
Recorri!o
Acci&n +
4iagrama 0E(
!0!:!8
4eclaracin de variables
-ectura de 4atos
i H # F i [H limite F iII
$ccin "
X.
$ccin n
$ccin +
%eporte de 4atos
,!0
E9emplo en :digo :2
:alcular el ,actorial de un n;mero.
#include<iostream>
using namespace std;
int main( )
{
int p=1;
cout<<Ingrese numero para factorial: ;
cin>>num;
for(i=1;i<=num; i++)
{
p=p * i;
}
cout<<El factorial de <<n<<es: <<p;
return 0;
}
Ing. Carol Rojas Moreno
3-
TRA:AAO APLICATIVO
Elabore el 4iagrama 0E ( y :digo :II para los sgtes. E9ercicios2
". Encuentre el menor de tres n;meros dados.
+. -ea un n;mero que represente un mes e indique de que mes se trata.
&. 6na fbrica de /P necesita que le ayuden a controlar el mane9o de sus inventarios y pedidos de
venta.
:uando llega un pedido, un programa debe verificar si existe suficiente cantidad de /P en inventario.
(i es as., debe reportar un mensa9e JPE4!48 :8LP-E/8Ky se debe dar la disminucin del
inventario.
$dems se necesita reportar2
El n;mero de /P que quedan en el inventario final.
El n;mero de pedidos completos.
El n;mero de pedidos incompletos.
El n;mero de /P vendidos.
El n;mero de /P que faltan para completar los pedidos incompletos.
'. :alcular el n;mero de pulsaciones que debe tener una persona por cada "# segundos de e9ercicio
aerbicoF la frmula que se aplica para el sexo femenino es
0umpulsH =++#Eedad>? "# y para el sexo masculino es 0umpulsH =+"#Eedad>? "#
%epetir para n personas.
. -ea un n;mero entero e indique cual es su d.gito mayor.
7. (uponga que tiene la calificacin final de un grupo de '# alumnos, calcular la calificacin promedio y
la calificacin mas ba9a de todo el grupo.
*. :uantos d.gitos pares y cuantos d.gitos impares tiene un n;mero entero.
3. En una universidad se pueden llevar hasta ++ crditos en un ciclo. Elabora el cdigo que permita a
un alumno matricularse sen pasarse del l.mite.
5. 6na vendedora de pan tiene n unidades de pan al comenzar el d.a. (i cada cliente le pide m panes,
cuantos clientes son atendidos completamente, cuantos panes quedan para el ultimo cliente\
"#. Elabore el cdigo para una tienda para leer por cada cliente el monto total de su compraF $l final del
d.a reportar la cantidad total de ventas y el n;mero de clientes atendidos.
"". 6n censador recopila datos del ;ltimo censo nacional, al final de un d.a desea conocer de las
persona encuestadas el porcenta9e que tiene estudios de primaria, el porcenta9e que tiene estudios
de secundaria, porcenta9e de carrera tcnica, porcenta9e de estudios profesionales, y porcenta9e
con estudios de post grado.
"+. En el congreso se realiza una encuesta con todos los integrantes, para determinar que porcenta9e
de los n diputados est a favor del /-:, que porcenta9e en contra, y que porcenta9e se abstiene de
opinar.
4/
Ing. Carol Rojas Moreno
:I:LIOGRAFIA
N AUTOR TITULO EDITORIAL
"
M8]$0E( $<6!-$%, -uis
,undamentos de Programacin Editorial Lc<ra@EYill, :olombia, +##&.
+
%$,,8 -E::$, Eduardo /urbo :II Lundigraf, -imaEPer;, +###
Ing. Carol Rojas Moreno
4.
42
Ing. Carol Rojas Moreno
UNIDAD N 02
MODULARIZACION EN LA PROGRAMACIN ESTRUCTURADA
COMPETENCIA DE LA UNIDAD
!"#$ $l trmino dela unidad se espera que el alumno elabore programas computacionales usando
porciones de programas =mdulos> que luego se integran para diferentes proyectos de solucin.
P%&% '"#$ Para permitir la reutilizacin de l.neas de cdio en la construccin de programas de
computadora.
P(& '"#$ Esto le permitir valorar la utilizacin de los mdulos de programa al brindar facilidad de
mantenimiento, es decir, los cambios realizados en cada porcin de programa son indepenientes y no afecta
al todo, ahorrando tiempo de elaboracin.
C)*($ $ travs del uso de librer.as de cabecera =header>, se construirn los mdulos de programa, y
sern invocados por cada proyecto de programa fuente.
Ing. Carol Rojas Moreno
43
MODULARIZACION EN LA PROGRAMACIN ESTRUCTURADA
INTRODUCCION
$l conocer el uso de las sentencias bsicas de programacin, se puede dividir a un programa comple9o, en
segmentos de programa mas simples =Lodularizacin>, y poder ser reutilizados en otros programas, a travs
del uso de funciones y procedimientos, y en algunos casos usando el concepto de recursividad.
-a ,uncin, es un tipo de mdulo de programa que permite devolver un valor hacia la l.nea de cdigo que la
invoc, mientras que el Procedimiento que tambien es un mdulo de programa, no devuelve ning;n valor.
El concepto de %ecursividad es la invocacin asi misma, tanto de una ,uncin como de un procedimiento,
por lo que permite reutilizarse y disminuir la elaboracin de l.neas de cdigo.
-os mdulos2 ,unciones y Procedimientos, pueden ser creados en el mismo proyecto de solucin =cdigo
fuente> o en librer.as de cabecera, que permitirn su reutilizacin entre diferentes proyectos de solucin.
-os programas computacionales que se desarrollan a partir de ahora, estarn basados en esta nueva tcnica
de programacin, para optimizar el uso de recursos del computador y del usuario.
44
Ing. Carol Rojas Moreno
FUNCIONES Y PROCEDIMIENTOS
1+ C(2041/( 54 M)5",( 54 P&(-&%*%
En algunas ocasiones se debe llamar un bloque de cdigo mas de una vez, una forma de hacerlo es escribir las
instrucciones tantas veces como se necesite, dando programas con exceso de cdigo y dificultad para descubrir
posibles errores.
-a otra forma es tener las instrucciones en subprogramas que se invocan cada vez que se necesiten. -os
subprogramas son partes separadas de cdigo que e9ecutan tareas pequeGas de un programa principal.
2+ P%8( 54 P%&;*4/&(8 42 "2 M)5",( 54 P&(-&%*%
P%&;*4/&(8 54 42/&%5% (6%,(&)
-a diferencia de pasar parmetros por referencia respecto a parmetros por valor radica en que en estos ;ltimos
se guarda en memoria una copia temporal de la variable, dentro del procedimiento solo se utiliza la copia, cuando
se modifica el valor del parmetro solo afecta al almacenamiento temporal, la variable actual fuera del
procedimiento nunca se toca.
P%&;*4/&(8 54 42/&%5%C8%,.5% (&494&420.%)
:uando se pasa una variable a un procedimiento como parmetro por referencia, los cambios que se efect;en
sobre dicha variable dentro del procedimiento se mantienen incluso despus de que este haya terminado, es
decir los cambios afectan al programa principal.
E9emplo2
Ing. Carol Rojas Moreno
45
3+ P&(045.*.42/(
(e utiliza para imprimir valores a ser utilizados en el programa.
4eclaracin2
void NombreProcedimiento= >
void NombreProcedimiento =argumentos>
4+ F"20.)2
(e utilizan para retornar un valor a ser utilizado en el programa.
4eclaracin2
/ipoTdato NombreFuncin= >
/ipoTdato NombreFuncin argumentos>
(i se tiene el siguiente programa simple para sumar dos n;meros, sin utilizar ,unciones ni Procedimientos2
4*
Ing. Carol Rojas Moreno
//Programa Simple
#include<iostream>
using namespace std;
void main()
{
int a,b,c;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Ingrese valor de b: \t";
cin>>b;
c=a+b;
cout<<c;
cout<<"\n";
}
//Procedimientos con Argumentos: Ejemplo1
#include<iostream>
using namespace std;
void sumar(int a, int b)
{ int c;
c=a+b;
cout<<c;
cout<<"\n";
}
nt main()
{ int a,b;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Ingrese valor de b: \t";
cin>>b;
sumar(a,b);
return 0;
}
:on Procedimientos2
Ing. Carol Rojas Moreno
4+
//Procedimientos sin Argumentos: Ejemplo2
#include<iostream>
using namespace std;
void sumar()
{ int a,b,c;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Ingrese valor de b: \t";
cin>>b;
c=a+b;
cout<<c;
cout<<"\n";
}
int main()
{
sumar( );
return 0;
}
//Funciones con Argumentos: Ejemplo1
#include<iostream>
using namespace std;
int sumar(int a, int b)
{
int c;
c=a+b;
return c;
}
int main()
{
int sum,a,b;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Ingrese valor de b: \t";
cin>>b;
sum=sumar(a,b);
cout<<"Valor de la suma de a y b: "<<sum;
cout<<"\n";
return 0;
}
:on ,unciones2
4,
Ing. Carol Rojas Moreno
//Funciones sin Argumentos: Ejemplo2
#include<iostream>
using namespace std;
int sumar()
{
int a,b,c;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Ingrese valor de b: \t";
cin>>b;
c=a+b;
return c;
}
int main()
{
int sum;
sum=sumar();
cout<<"Valor de la suma de a y b: "<<sum;
cout<<"\n";
return 0;
}
8tra Lanera de definir un Procedimiento y una ,uncin2
Ing. Carol Rojas Moreno
4-
//Procedimientos con Argumentos
#include<iostream>
using namespace std;
void sumar(int a, int b);
int main()
{
int a,b;
cout<<"Ingrese valor de a: \t"; cin>>a;
cout<<"Ingrese valor de b: \t"; cin>>b;
sumar(a,b);
return 0;
}
void sumar(int a, int b)
{
int c;
c=a+b;
cout<<c;
cout<<"\n";
B
//Funciones con Argumentos
#include<iostream>
using namespace std;
int sumar(int a, int b);
int main()
{
int sum,a,b;
cout<<"Ingrese valor de a: \t"; cin>>a;
cout<<"Ingrese valor de b: \t"; cin>>b;
sum=sumar(a,b);
cout<<"Valor de la suma de a y b: "<<sum;
cout<<"\n";
return 0;
}
int sumar(int a, int b)
{
int c;
c=a+b;
return c;
}
E=4*1,(:
". Elaborar un programa para calcular a la funcin de acuerdo a lo sgte.2
y H x
+
I si x [H #
y H &x E " si # [ x [ +
y H x
+
E 'x I si x VH +
5/
Ing. Carol Rojas Moreno
#include<iostream>
using namespace std;
float ecuaciones()
{ float x,y;
cout<<"Ingresar valor de x para calcular funcion f(y)=x <<\t";
cin>>x;
if(x<=0)
{ cout<<"Ecuacion a usar es y=(x^2)+5\n";
y=(x*x)+5;
}
else
if(x>0&&x<2)
{ cout<<"Ecuacion a usar es y=3x+1\n";
y=(3*x)-1;
}
else
if(x>=2)
{ cout<<"Ecuacion a usar es y=(x^2)-4x+5\n";
y=(x*x)-(4*x)+5;
}
return y;
}
int main()
{ float res;

res=ecuaciones();
cout<<"Resultado de la funcion es f(y)=\t"<<res;
cout<<"\n";
return 0;
}
+. (e repartir la herencia entre los hi9os de un seGor como sigue2
(i la cantidad de hi9os es menor a ', se repartir exactamente entre el n;mero de hi9osF si son cuatro o mas
hi9os, la mitad le tocar al hermano mayor y el resto se dividir entre los dems hermanos. (e debe reportar
cuanto le corresponde a cada hi9o. (e debe ingresar la herencia y el n;mero de hi9os.
Ing. Carol Rojas Moreno
5.
#include<iostream>
using namespace std;
//procedimientos sin argumentos
void herencia()
{ float her,may;
int num;

cout<<"Ingresar importe de herencia \n";
cin>>her;
cout<<"Ingresar cantidad de hijos \n";
cin>>num;

if(num<4)
{
her=her/num;
cout<<"Herencia a cada hijo es "<<her;
}
else
{
may=her/2;
her=her/2;
her=her/(num-1);

cout<<"\nHerencia de hermano mayor es"<<may;
cout<<"\nHerencia de cada hijo es "<<her;
}
}
void main( )
{
herencia( );
}
TRA:AAO APLICATIVO
". %ealizar un programa que tenga un mdulo reciba dos argumentos a, b =enteros> y que intercambie los
valores de dichas variables.
EV Elaborar un mdulo para leer a y b.
+. En una banco, a los clientes que de tipo ", +, &, que aperturan cuentas de $horro=$>, :orriente =:> , o
Palores =P>, todos en nuevos soles, se les otorga un bono =dlares>, de acuerdo a la sgte. /abla2
%eportar el /ipo de :liente, la :uenta que apertura, el monto total de la cuenta.
:onsidere el ingreso del tipo de cambio de moneda al d.a.
&. En un colegio, a la pensin de sus alumnos de tipo $, ), :, de acuerdo al promedio obtenido, le asignan
becas2
4e acuerdo a la beca obtenida, se le descuenta al pago de su pensin2
Lostrar el tipo de alumno, la beca obtenida, y el monto total de pago de pensin, de acuerdo a la beca
obtenida.
52
Ing. Carol Rojas Moreno
:uenta2
/ipo cliente
$ : P
" ^ ## ^ '## ^ &##
+ ^ '## ^ &## ^ +##
& ^ &## ^ +## ^ "##
Promedio
$lumno
# _ "# "" E "7 "* E+#
$ $ II $ I $ E
) ) II ) I ) E
: : II :I : E
$ II H U $ I H *U $ E H "# U
) II H & U ) I H U ) E H * U
: II H " U :I H &U : E H U
'. Elaborar los mdulos de programa adecuados que permita leer las edades de n personas y reporte el
mayor, el menor y el promedio de edades.
Ing. Carol Rojas Moreno
53
LI:RERDAS DE PROGRAMACIN CREADAS POR EL USUARIO
-as librer.as estndar del procesador del lengua9e :2 iostream.h, math.h, conio.h, stdio.h, etc., existen liber.as
de cabecera =header, de alli la extensin J.h> que pueden ser creadas por el programador, y ser invocadas en
diferentes programas fuente =el programa con extensin .cpp> como parte de la reutilizacin de cdigo.
E9emplo "2
-eer un n;mero entero diferente a cero, y si es positivo, reportar JEl n;mero es positivoK, caso contrario es
negativo.
(olucin2
E :rear la librer.a con extensin .h para la funcin de lectura de datos enteros, llamado lecturadato.h.
E :rear el programa .cpp que invoca a la librer.a .h lecturadato.h, creada por el programador.
54
Ing. Carol Rojas Moreno
#include<iostream>
using namespace std;
int leedatoe()
{ int dato;
do{
cout<<Ingrese valor del dato;
cin>>dato;
}while(dato==0);
return dato;
}
#include<iostream>
#include c:\programas\lecturadato.h
using namespace std;
void main()
{ int num;

num=leedatoe();

if(num>0)
cout<<El numero es positivo;
else
cout<<El numero es negativo;
}
E9emplo +2
4esarrollar la sgte. Ecuacin solo si son n;meros positivos y diferentes a cero.
y H x S =+x E a>
(olucin2
E -a funcin para la lectura de datos enteros y diferentes a cero ya fue creada para el programa del e9emplo ".
E (olo se crear el programa fuente con extensin .cpp para desarrollar la ecuacin.
TRA:AAO APLICATIVO
Elaborar el :digo utilizando ,unciones y?o Procedimientos y -ibrer.as de Programacin.
". (i compramos al por mayor "## o mas art.culos nos descuentan el '#U, si compramos entre + y "##, el
descuento es de +#U y si compramos entre "# y + el descuento es de "#U. 0o hay descuento si
adquirimos menos de "# art.culos. !ndique el monto a pagar, sabiendo la cantidad de art.culos
comprados y su precio.
+. 6na empresa categoriza a sus art.culos como $, ) y :, adems a sus clientes como Excelente=E>,
)ueno=)>, %egular=%> y Lalo=L>, estableciendo pol.ticas de descuento =en U> de acuerdo a la sgte.
tabla2
/ipo $rt.culo
/ipo :liente
$ ) :
Excelente =E> '# &# +#
)ueno =)> &# +# "#
%egular =%> +# "# #
Lalo =L> # # #
Ing. Carol Rojas Moreno
55
#include<iostream>
#include c:\programas\lecturadato.h
using namespace std;
int main()
{
int x,a,y;

x=leedatoe();
a=leedatoe();

if(x>0 && a>0)
{
y=x*((2*x)-a);
cout<<El resultado es:<<y;
}
else
cout<<Con estos valores no se puede calcular;
return 0;
}
El cliente Excelente y )ueno puede pagar en Efectivo, :heque o crdito, el cliente %egular puede pagar en
Efectivo o :heque y el cliente Lalo solo paga en efectivo.
-eer el tipo de cliente y el tipo de art.culo para indicar el descuento y el tipo de cliente.
&. En un ca9ero se puede realizar las operaciones de depsito, saldo, y retiro. Elabore un programa permitir a
un cliente realizar estas operaciones las veces que lo requiera.
'. Escribir un programa el cual permita leer n;meros enteros diferentes a cero, y que al finalizar reporte2
a. El n;mero mayor y el n;mero menor.
b. -a cantidad de n;meros positivos, y la cantidad de n;meros negativo.
c. El total de n;meros le.dos.
0o considerar el valor cero.
. -a tasa de inters sobre un prstamo es del 3U si la cantidad es menor que (?. +##, pero es de 7U si
excede a +##. !ngrese la cantidad y reporte el inters de esa cantidad y el monto total por devolver.
FUNCIONES RECURSIVAS
(e denominan funciones recursivas a aquellas que se invocan a s. mismas en un programa.
Yay que tener algunas cosas en cuenta en las funciones recursivas2
E /oda funcin recursiva debe tener alg;n punto de finalizacin.
E -a funcin debe tender a ese punto de finalizacin.
L% 9"20.)2 9%0/(&.%,:
nC
>C ; > / = / + / *
> / =C Es !ecir n/.nD*0C
=C ; = / + / *
= / +C Es !ecir n/.nD*0C
+C ; + / *
+ / *C Es !ecir n/.nD*0C
*C ; * / 7C
7C ; *
int factorial(int n)
{
if (n == 0)
return 1;
else
return n*factorial(n-1);
}
5*
Ing. Carol Rojas Moreno
>C ; > / = / + / *
> / =C
=C ; = / + / *
= / +C
+C ; + / *
+ / *C
*C ; * / 7C
7C ; *
* / * / + / = / > ; +>
La funcin multiplicacin:
a / '
= / > ; = 5 = 5 = 5 =
= 5 .= / =0
= / = ; = 5 = 5 =
= 5 .= / +0
= / + ; = 5 =
= 5 .= /*0
= / * ; =
int multiplica(int a, int b)
{
if (a == 0 || b == 0)
return 0;
else
if (b == 1)
return a;
else
return a+multiplica(a,b-1);
}
TRA:AAO APLICATIVO
Elaborar el algoritmo y programa computacional para2
". Potencia.
+. (uma.
&. %esta.
'. (erie ,ibonacci.
. /orres de Yanoi.
8bservaciones2
a. `:mo determin el valor m.nimo o punto de finalizacin de la funcin recursiva\
b. 6na funcin puede invocarse recursivamente mas de una vez, en un programa\
c. `(olo existe recursividad para las funciones\ `Qu pasa con la recursividad para procedimientos\
Ing. Carol Rojas Moreno
5+
= / > ; = 5 = 5 = 5 =
= 5 .= / =0
= / = ; = 5 = 5 =
= 5 .= / +0
= / + ; = 5 =
= 5 .= /*0
= / * ;
=
:I:LIOGRAFIA
N AUTOR TITULO EDITORIAL
"
M8]$0E( $<6!-$%, -uis
,undamentos de Programacin Editorial Lc<ra@EYill, :olombia, +##&.
+
%$,,8 -E::$, Eduardo /urbo :II Lundigraf, -imaEPer;, +###
5,
Ing. Carol Rojas Moreno
Ing. Carol Rojas Moreno
5-
UNIDAD N 03
ESTRUCTURAS DE DATOS
COMPETENCIA DE LA UNIDAD
!"#$ $l trmino dela unidad se espera que el alumno elabore programas computacionales usando las
diferentes estructuras de datos2 estticas y dinmicas, seg;n la necesidad del programa computacional.
P%&% '"#$ Para permitir la me9or estructuracin del programa computacional a travs de estructuras de
datos que le permitan manipular la informacin almacenado en los mismos.
P(& '"#$ Esto le permitir valorar la utilizacin de difrentes estructuras de datos y dar solucin a problemas
como busquedas secuenciales =arreglos>, teor.a de autmatas =arboles> o la determinacin de rutas cr.ticas
=grafos>.
C)*($ (e mantiene el uso de mdulos de programa y de librer.as de cabecera para construir las
estructuras de datos estticas y dinmicas.
*/
Ing. Carol Rojas Moreno
ESTRUCTURAS DE DATOS
INTRODUCCION
$l conocer el uso de los mdulos de programa, se debe manipular la informacin que se encuentre en ellos.
4icha informacin, por la naturaleza de la presente asignatura, se almacena temporalmente en el
computador, de esta manera, permite atender la construccin de las estructuras de datos que almacenaran la
informacin.
-as estructuras de datos, que almacenan informacin son de tipo esttica y dinmica, es decir si para
manipularlas, hacen uso de las direcciones de memoria del computador o no.
Entre las estructuras de datos estticas se encuentran los tipos de datos que se pueden asignar a las
variables, tipos de datos definidos por el programador, los arreglos multidimensionales y los registros.
:omo estructuras de datos dinmicas se encuentra el concepto de listas simples, listas dobles y listas
circulares, las colas y pilas, los arboles de expresin general y arboles binarios, y los grafos.
Ing. Carol Rojas Moreno
*.
2 Arreglos
2 Regis"ros
2 Arc(i2os
2 Ca!enas
2 Lis"as
2 Pilas
2 Colas
2 Ar'oles
2 GraAos
ESTRUCTURAS DE DATOS
1+ D49.2.0.)2
6na estructura de datos es una coleccin de datos que se caracteriza por su organizacin y por el con9unto
de operaciones que se definen para su manipulacin.
2+ C,%8.9.0%0.)2
Es"r%c"%ra !e Da"os
Si#,les
Es"r%c"%ras !e Da"os
Co#,%es"os
3+ E8/&"0/"&%8 54 D%/(8 E8/;/.0%8
(on aquellas en las que la cantidad de memoria que ocupan se define antes de e9ecutar el programa.
4urante la e9ecucin del mismo este tamaGo asignado no puede alterarse.
3+1 A&&4-,(8 U2.5.*428.(2%,48
/ambin llamado vectores, es un con9unto finito y ordenado de elementos de un mismo tipo de dato. -a
definicin de un arreglo es como sigue2
/ipo4ato 0ombre$rreglobtamaGoc
E9m. Entero Lb"#c
A0048( % ,(8 4,4*42/(8 54 "2 %&&4-,( "2.5.*428.(2%,
Para hacer referencia a un elemento de un arreglo unidimensional es necesario indicar el nombre del arreglo
y la posicin de dicho elemento. En lengua9e :II, esto se hace de la siguiente manera2
E9emplo3 ed"d3/4 ed"d3.4 ed"d324 ed"d334 ed"d344
edad

*2
Ing. Carol Rojas Moreno
23 45 34 19 62
/ . 2 3 4
Nom5#e de) "##e6o 3!osici7n de) e)emeno48
2 En"eros
2 Reales
2 Carac"er
Es"r%c"%ras !e Da"os Es"$n!ar
Es"r%c"%ras !e Da"os No Es"$n!ar
.DeAini!os ,or el ,rogra#a!or0
Lineales
Es"r%c"%ras !e Da"os Din$#icos
Es"r%c"%ras !e Da"os Es"$"icos
No Lineales
//Sumar alturas de alumnos con funciones y arreglos
#include<iostream>
#define N 5
using namespace std;
void leerarre(double array[ ])
{ int i;
for(i=0;i<=N-1;i++)
{ cout<<"Ingrese altura alumno A"<<"["<<i<<"]"<<":\t";
cin>>array[i]; cout<<"\n";
}
}
double sumar(double array[ ])
{ int i; double suma=0;
for(i=0;i<=N-1;i++)
{ suma=suma+array[ i ]; }
return suma;
}
void main()
{ double A[N],sum;
leerarre(A);
sum=sumar(A);
cout<<"La SUMA es "<<sum;
}
//Programa para promediar las alturas de los alumnos
#include<iostream>
#define N 5
using namespace std;
void leerarre(double array[ ])
{ int i;
for(i=0;i<=N-1;i++)
{cout<<"Ingrese altura alumno A"<<"["<<i<<"]"<<":\t";
cin>>array[i]; cout<<"\n";
}
}
double suma(double array[ ])
{ int i; double suma=0;
for(i=0;i<=N-1;i++)
{ suma=suma+array[i]; }
return suma;
}
double promedio(double sum)
{ double prom;
prom=sum/N;
return prom;
}
void main()
{ double A[N],sum,promed;
leerarre(A);
sum=suma(A);
promed=promedio(sum);
cout<<"\t\tLa suma es "<<sum; cout<<"\n\n";
cout<<"\t\tEl promedio es "<<promed; cout<<"\n\n";
}
Ing. Carol Rojas Moreno
*3
El siguiente programa lee un arreglo de n;meros enteros y encuentra el mayor y menor elemento. El mx de
elementos es "## pero solo ingresa n elementos.
*4
Ing. Carol Rojas Moreno
//Programa para hallar el mayor y menor elemento de un arreglo
#include<iostream>
#define MAXIMO 100
using namespace std;
int leenumelem()
{ int n;
do{
cout<<"\n";
cout<<"Ingrese cantidad de elementos (>= a CERO y <= que 100): ";
cin>>n;
}while(n<=0 || n>MAXIMO);
return n;
}
void leerarre(int N, int array[])
{ int i;
for(i=0;i<=N-1;i++)
{ cout<<"Ingrese altura alumno A"<<"["<<i<<"]"<<":\t";
cin>>array[i];
cout<<"\n"; }
}
void comparar(int N, int array[])
{ int i, mayor, menor;
mayor=array[0];
menor=array[0];

for(i=0;i<=N-1;i++)
{ if (array[i]>mayor)
mayor=array[i];
if (array[i]<menor)
menor=array[i];
}
cout<<"El mayor es :"<<mayor<<"\n";
cout<<"El menor es :"<<menor<<"\n";
}
void main()
{ int A[MAXIMO];
int n;
n=leenumelem();
leerarre(n,A);
comparar(n,A);
}
A+ ACTUALIZACIN DE ARREGLOS
-os $rreglos necesitan actualizarse mientras se efect;a alg;n proceso con ellos. -a actualizacin de arreglos
consiste en tres operaciones2 $Gadir elementos al final del arreglo =siempre y cuando exista espacio en el
arreglo>, !nsertar elementos en cualquier posicin del arreglo y Eliminar elementos.
A?%5.&
??$Gadir un valor en la ultima posicin
#include<iostream>
#define MAX 100
using namespace std;
int leenum()
{ int num;
do{ cout<<"Ingrese numero de elementos para el arreglo: ";
cin>>num;
cout<<"\n";
}while(num<=0 || num>MAX);
return num;
}
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo ";
cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i];
}
}
void mostrar(int V[MAX], int n)
{ int i;
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";
cout<<V[i]; cout<<"\n";
}
}
Ing. Carol Rojas Moreno
*5
int ultimoelemento(int a[MAX], int n)
{ int i,p = n;
if (p<MAX)
{ for(i=p;i<=n;i++) //ingresa nuevo elemento
{cout<<"\n Ingrese nuevo elemento de arreglo "<<":\t";
cin>>a[i];
}
n=n+1;
return n;
}
}
void main()
{
int A[MAX];
int num,elem;
num=leenum();
ingresadatos(A,num); cout<<"\n";
mostrar(A,num); cout<<"\n";
elem=ultimoelemento(A, num);
mostrar(A,elem);
}
I284&/%&
??!nsertar un valor en cualquier posicin
#include<iostream>
#define MAX 100
using namespace std;
int leenum()
{ int num;
do{cout<<"Ingrese numero de elementos para el arreglo: ";
cin>>num; cout<<"\n";
}while(num<=0 || num>MAX);
return num;
}
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo ";
cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i];
}
}
**
Ing. Carol Rojas Moreno
void mostrar(int V[MAX], int n)
{ int i;
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";
cout<<V[i]; cout<<"\n";
}
}
int posicion(int a[MAX], int n)
{int i,p;
cout<<"\n Ingrese posicion a insertar elemento de arreglo
A"<<":\t"; cin>>p;
i=n-1;
while (i>=p)
{ a[i+1]=a[i];
i=i-1;
}
return p;
}
int nuevoelemento(int a[MAX],int p, int n)
{ int elem;
cout<<"\n Ingrese nuevo elemento de arreglo a"<<":\t";
cin>>elem;
a[p]=elem;
n=n+1;
return n;
}
void main()
{ int A[MAX];
int num,pos,elem;
num=leenum();
ingresadatos(A,num);
cout<<"\n";
mostrar(A,num);
cout<<"\n";
pos=posicion(A,num);
elem=nuevoelemento(A,pos, num);
mostrar(A,elem);
}
Ing. Carol Rojas Moreno
*+
E,.*.2%&
??Eliminar un valor en cualquier posicin
#include<iostream>
#define MAX 100
using namespace std;
int leenum()
{ int num;
do{cout<<"Ingrese numero de elementos para el arreglo: ";
cin>>num;
cout<<"\n";
}while(num<=0 || num>MAX);
return num;
}
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo "; cout<<"\n";
for(i=0;i<n;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i];
}
}
void mostrar(int V[MAX], int n)
{ int i;
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=0;i<n;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";
cout<<V[i]; cout<<"\n";
}
}
int elimina(int a[MAX], int n)
{int i,p;
cout<<"\n Ingrese posicion a eliminar elemento de arreglo "<<":\t";
cin>>p;
i=p;
while (i<=n)
{ a[i]=a[i+1];
i++;
}
return n-1;
}
void main()
{ int A[MAX];
int num,el;
num=leenum();
ingresadatos(A,num); cout<<"\n";
mostrar(A,num); cout<<"\n";
el=elimina(A,num);
mostrar(A,el);
}
*,
Ing. Carol Rojas Moreno
:+ :US!UEDA DE ARREGLOS
-a b;squeda es la recuperacin de la informacin de los elementos de un arreglo. Para ello se necesita
recorrer el arreglo y hacer uso de uno de los mtodos de b;squeda de un elemento tales como2 );squeda
(ecuencial );squeda )inaria.
:+ S40"420.%,
CC:E8'"45% S40"420.%, 1
#include<iostream>
#define MAX 100
using namespace std;
. //Se entiende que se realizan los procedimientos de
lectura de datos
void bsecuencial(int a[MAX], int n)
{
int elem,i;
cout<<"\n Ingrese elemento a buscar en el arreglo "<<":\t";
cin>>elem;

for(i=1;i<=n;i++)
if(a[i]==elem)
{ cout<<"\n Encontrado\t Posicion :\t"<<i<<"\t";
cout<<"\n\n";
}
}
void main()
{
int A[MAX];
int num;
num=leenum();
ingresadatos(A,num); cout<<"\n";
mostrar(A,num); cout<<"\n";
bsecuencial(A,num);
}
Ing. Carol Rojas Moreno
*-
CC:"8'"45% S40"420.%, 2
#include<iostream>
#define MAX 100
using namespace std;
. //Se entiende que se realizan los procedimientos de
lectura de datos
void bsecuencial(int a[MAX], int n)
{
int elem,i;
bool Encontrado = false;
cout<<"\n Ingrese elemento a buscar en el arreglo "<<":\t";
cin>>elem;

for(i=1;i<=n;i++)
{ if(a[i]==elem)
{
Encontrado=true;
cout<<"\n Encontrado\t Posicion :\t"<<i<<"\t";
cout<<"\n\n";
}
}
if(Encontrado==false)
{
cout<<"\n No Encontrado\t ";
cout<<"\n\n";
}
}
void main()
{
int A[MAX];
int num;
num=leenum();
ingresadatos(A,num); cout<<"\n";
mostrar(A,num); cout<<"\n";
bsecuencial(A,num);
}
+/
Ing. Carol Rojas Moreno
:+ :E8'"45% :.2%&.%
#include<iostream>
#define MAX 100
using namespace std;
int leenum()
{ int num;
do{ cout<<"Ingrese numero de elementos para el arreglo: ";
cin>>num; cout<<"\n";
}while(num<=0 || num>MAX);
return num;
}
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo "; cout<<"\n";
for(i=1;i<=n;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";cin>>V[i]; }
}
void mostrar(int V[MAX], int n)
{ int i;
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=1;i<=n;i++)
{cout<<"Elemento"<<"["<<i<<"]"<<":\t";cout<<V[i]; }
}
void bbinaria(int a[MAX], int n)
{ int elem; int BAJO, ALTO, CENTRAL;
BAJO=1; ALTO=n;
cout<<"\n Ingrese elemento a buscar"<<":\t"; cin>>elem;
CENTRAL=((BAJO+ALTO)/2);
while ((BAJO<=ALTO) && (a[CENTRAL]!=elem))
{ if(elem<a[CENTRAL])
{ALTO=CENTRAL-1;
CENTRAL=(BAJO+ALTO)/2;
}
else{
BAJO=CENTRAL+1;
CENTRAL=(BAJO+ALTO)/2;
}
}
if(elem==a[CENTRAL])
{ cout<<"\n ENCONTRADO \n";
cout<<"\n a["<<CENTRAL<<"] = "<<a[CENTRAL]; cout<<"\n";}
else
cout<<"\n NO ENCONTRADO \n ";
}
void main()
{int A[MAX];
int num;
num=leenum();
ingresadatos(A,num); cout<<"\n";
mostrar(A,num); cout<<"\n";
bbinaria(A,num);}
Ing. Carol Rojas Moreno
+.
C+ ORDENACIN DE ELEMENTOS
-a ordenacin es la clasificacin de un orden particular de los elementos de un arreglo, es decir ya sea en
forma ascendente o descendente. El Ltodo !ntercambio permite comparar elementos e intercambiar
posiciones.
CCO&542%0.(2 1(& :"&3"=%
#include<iostream>
#define MAX 100
using namespace std;
. //Se entiende que se realizan los procedimientos de
lectura de datos
void burbuja(int a[MAX], int n)
{ int i,j,temp;
for(i=0;i<n-1;i++)
for(j=n-1;j>=i+1;j--)
if (a[j]<a[j-1])
{ temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
void main()
{
int A[MAX];
int num;
num=leenum();
ingresadatos(A,num); cout<<"\n\n";
burbuja(A,num);
mostrar(A,num);
}
+2
Ing. Carol Rojas Moreno
E=4*1,(8:
". Elaborar un programa que dado dos arreglos numricos $ y ) de n" y n+ elementos respectivamente,
guarde en un tercer arreglo : los elementos que estn en $ pero no estn en ). E9emplo2
E *E E
F G *+
*+ F +
H H
G >E
+ ++
I
S(,"0.)2:
#include<iostream>
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n,char titu[20])
{ int i;
cout<<"Ingrese elementos para el arreglo "<<titu;cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i];
}
}
int separacion(int VA[MAX],int na,int VB[MAX],int nb,int VC[MAX])
{ int i,j;
int k=0, ban=0;
//busqueda de arreglos
for(i=0;i<na;i++)
{for(j=0;j<nb;j++)
if(VA[i]==VB[j])
{ ban=1;
break;
}
if(ban==0)
{ VC[k]=VA[i];
k++;
}
else
ban=0;
}
return k;
}
Ing. Carol Rojas Moreno
+3
A 9 C
n*;H n+;I ele#;=
void mostrar(int V[MAX], int n, char titu[20])
{ int i;
cout<<"Los elementos del arreglo "<<titu;
cout<<" son:"; cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";
cout<<V[i]; cout<<"\n";
}
}
void main()
{
int A[MAX],B[MAX],C[MAX];
int na,nb,elem;
na=leenum();
ingresadatos(A,na,"Arreglo A");
nb=leenum();
ingresadatos(B,nb,"Arreglo B"); cout<<"\n";
mostrar(A,na,"Arreglo A"); cout<<"\n";
mostrar(B,nb,"Arreglo B"); cout<<"\n";
elem=separacion(A,na,B,nb,C);
mostrar(C,elem,"Arreglo C");
}
+. Elaborar un programa que dado dos arreglos numricos $ y ) de n" y n+ elementos respectivamente,
guarde en un tercer arreglo : los elementos que estn en $ y en ).
E9emplo2
E *E F
F G H
*+ F G
H H
G >E
+ ++
I
+4
Ing. Carol Rojas Moreno
A 9 C
n*;H n+;I ele#;=
S(,"0.)2:
#include<iostream>
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n,char titu[20])
{ int i;
cout<<"Ingrese elementos para el arreglo "<<titu;cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i];
}
}
int interseccion(int VA[MAX],int na,int VB[MAX],int nb,int
VC[MAX])
{ int i,j;
int k=0;
//busqueda de arreglos
for(i=0;i<na;i++)
{ for(j=0;j<nb;j++)
if(VA[i]==VB[j])
{ VC[k]=VA[i];
k++;
}
}
return k;
}
void mostrar(int V[MAX], int n, char titu[20])
{ int i;
cout<<"Los elementos del arreglo "<<titu;
cout<<" son:";
cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";
cout<<V[i]; cout<<"\n";
}
}
void main()
{int A[MAX],B[MAX],C[MAX];
int na,nb,elem;
na=leenum();
ingresadatos(A,na,"Arreglo A");
nb=leenum();
ingresadatos(B,nb,"Arreglo B"); cout<<"\n";
mostrar(A,na,"Arreglo A"); cout<<"\n";
mostrar(B,nb,"Arreglo B"); cout<<"\n";
elem=interseccion(A,na,B,nb,C);
mostrar(C,elem,"Arreglo C");
}
Ing. Carol Rojas Moreno
+5
TRA:AAO APLICATIVO
". Elaborar un programa dado las notas de & alumnos, se debe reportar la nota mas alta, la nota mas
ba9a y el promedio de notas ingresadas.
+. Elaborar un programa para que se ingresen los sgtes. valores del arreglo mostrado, sume el valor
en la posicin # con el valor en la posicin & y luego multiplicar por el valor en la posicin .
&. -eer las edades de n personas y reportar2
a. :uantas edades son menores a "#.
b. :uantas edades son mayores iguales a "# y menores a +#.
c. :uantas edades son mayores iguales a +# y menores a &#.
d. :uantas edades son mayores iguales a &# y menores a '#.
e. :uantas edades son mayores iguales a '# y menores a #.
'. !ngresar n pesos =Zg.> de personas a un arreglo, insertar un nuevo peso de una persona en la
posicin '.
. $Gadir dos elementos al final del arreglo, modificando el algoritmo de aGadir un elemento al final.
7. 4ado un arreglo de tamaGo "##, y de nH "# elementos, eliminar el elemento de la posicin 7 e
insertar el valor de # en una posicin cualquiera.
*. 4ado un arreglo de n elementos, aGadir un elemento al final y luego eliminar el segundo elemento
de todo el arreglo.
3. 4ado un arreglo de n elementos, buscar un elemento y solo si se encontr, indicar la posicin
encontrada y aGadir el valor encontrado al final del arreglo, y mostrar.
5. :rear un mdulo de programa donde se ingrese como algunos de sus argumentos dos $rreglos $ y
), con n y m elementos respectivamente, y sumar los valores de las posiciones impares de $ con
los valores de las posiciones pares de ).
"#. :rear un mdulo de programa donde se eliminen los elementos repetidos en un $rreglo de n
elementos.
"". )uscar un elemento en un arreglo de n elementos, utilizando b;squeda binaria =previamente
ordenado con el mtodo de la burbu9a y sin que exista elementos repetidos>, y eliminarlo.
+*
Ing. Carol Rojas Moreno
"#.7 &.' 5 +.& '.
%osicion / . 2 3 4 5
ARRA(
3+2 A&&4-,(8 :.5.*428.(2%,48
/ambin llamado matrices, es un con9unto finito y ordenado de elementos de un mismo tipo de dato. -a
definicin de un arreglo es como sigue2
/ipo4ato 0ombreLatrizbndfilascbn1columnasc
E9m. Entero Lb'cbc
columnas

filas
Para declarar un arreglo bidimensional en lengua9e :II se sigue la siguiente sintaxis2
Ti!o de D"o Nom5#e de) "##e6)o 3: fi)"s4 3: co)0mn"s48
A+ LECTURA DE DATOS Y PRESENTACIN DE LOS ELEMENTOS DE UNA MATRIZ
#include<iostream>
#define MAX 100
using namespace std;
int leenum()
{int num;
do{ cin>>num;
cout<<"\n";
}while(num<=0 || num>MAX);
return num;
}
void ingresadatos(int M[MAX][MAX], int nf,int nc)
{int i,j;
cout<<"Ingrese elementos para la matriz ";
cout<<"\n";
for(i=0;i<=nf-1;i++)
for(j=0;j<=nc-1;j++)
{ cout<<"Elemento ["<<i<<"]"<<"["<<j<<"]"<<":";
cin>>M[i][j];
}
}
Ing. Carol Rojas Moreno
++
/ . 2 3 4
/
.
2
3
+,
Ing. Carol Rojas Moreno
void mostrar(int M[MAX][MAX], int nf, int nc)
{int i,j;
cout<<"Los elementos de la matriz son";
cout<<"\n";
for(i=0;i<=nf-1;i++)
for(j=0;j<=nc-1;j++)
{ cout<<"Elemento ["<<i<<"]"<<"["<<j<<"]"<<":";
cout<<M[i][j]; cout<<"\n";
}
}
void main()
{ int B[MAX][MAX];
int nf,nc;
cout<<"Ingrese numero de filas ";
nf=leenum();
cout<<"Ingrese numero de columnas ";
nc=leenum();
ingresadatos(B,nf,nc); cout<<"\n";
mostrar(B,nf,nc); cout<<"\n";
}
CCE, *%F(& 4,4*42/( 54 "2% *%/&.G
... //Se entiende que se realizan los procedimientos de
lectura de datos
void mayor(int M[MAX][MAX], int nf, int nc)
{ int i,j,mayor;
mayor =M[0][0];
for(i=0;i<=nf-1;i++)
for(j=0;j<=nc-1;j++)
{ if (M[i][j]>mayor)
mayor=M[i][j];
}
cout<<"\n"; cout<<"El nmero mayor es: "<<mayor; cout<<"\n";
}
void main()
{ int B[MAX][MAX];
int nf,nc;
cout<<"Ingrese numero de filas ";
nf=leenum();
cout<<"Ingrese numero de columnas ";
nc=leenum();

ingresadatos(B,nf,nc); cout<<"\n";

mostrar(B,nf,nc); cout<<"\n";
mayor(B,nf,nc);
}
Ing. Carol Rojas Moreno
+-
CCD.%-(2%, P&.20.1%, F D.%-(2%,48 54 "2% *%/&.G
... //Se entiende que se realizan los procedimientos de
lectura de datos
void diagonal_principal(int M[MAX][MAX], int nf, int nc)
{int i,j;

if(nf==nc)
{ for(i=0;i<=nf-1;i++)
{
for(j=0;j<=nc-1;j++)
if(i==j)
{ cout<<"\n"; cout<<M[i][j]<<"\n"; }
else
cout<<" ";
cout<<"\n";
}
}
else
{
cout<<"Para la Diagonal Principal: columnas y filas deben
ser iguales";
cout<<"\n\n";
}
}
void diagonalsecundaria(int M[MAX][MAX], int nf, int nc)
{ int i,j,k;

k=nc-1;
if(nf==nc)
{ for(i=0;i<nf;i++)
{
for(j=0;j<nc;j++)
if(j == k)
{ cout<<M[i][j]; }
else
cout<<"\t";
k--;
cout<<"\n";
}
}
else
{ cout<<"Para la Diagonales: columnas y filas deben ser
iguales";
cout<<"\n\n";
}
}
,/
Ing. Carol Rojas Moreno
void diagonales(int M[MAX][MAX], int nf, int nc)
{ int i,j,k;

k=nc-1;
if(nf==nc)
{
for(i=0;i<=nf-1;i++)
{
for(j=0;j<=nc-1;j++)
if(i==j || j==k)
{ cout<<"\n";
cout<<M[i][j]<<"\n";
}
else
{cout<<" ";}
k--;
cout<<"\n";
}
}
else
{ cout<<"Para la Diagonales: columnas y filas deben ser
iguales"; cout<<"\n\n";
}
}
void main()
{ int B[MAX][MAX];
int nf,nc;

cout<<"Ingrese numero de filas ";
nf=leenum();

cout<<"Ingrese numero de columnas ";
nc=leenum();

ingresadatos(B,nf,nc); cout<<"\n";
mostrar(B,nf,nc); cout<<"\n";

cout<<"Los elementos de la diagonal Principal: "<<"\n";
diagonal_principal(B,nf,nc); cout<<"\n";

cout<<"Los elementos de las diagonales : "<<"\n";
diagonales(B,nf,nc); cout<<"\n";
}
Ing. Carol Rojas Moreno
,.
:+ ACTUALIZACIN
CCI284&/%& 9.,% F 0(,"*2% 54 "2% *%/&.G
. //Se entiende que se realizan los procedimientos de
lectura de datos
int insertar_fila(int M[MAX][MAX], int nf, int nc)
{ int i,j,pos;
do{ cout<<"Ingrese posicion para insertar fila: ";
cin>>pos;
}while(pos<0 || pos>nf);
for(i=nf-1;i>=pos;i--)
for(j=0;j<=nc-1;j++)
M[i+1][j]=M[i][j];
for(j=0;j<=nc-1;j++)
{ cout<<"M["<<pos<<"]"<<"["<<j<<"] : ";
cin>>M[pos][j];
}
nf++;
return nf;
}
int insertar_columna(int M[MAX][MAX], int nf, int nc)
{int i,j,pos;
do{ cout<<"Ingrese posicion para insertar columna: ";
cin>>pos;
}while(pos<0 || pos>nc);
for(i=0;i<=nf-1;i++)
for(j=nc-1;j>=pos;j--)
M[i][j+1]=M[i][j];
for(i=0;i<=nf-1;i++)
{ cout<<"M["<<i<<"]"<<"["<<pos<<"] : ";
cin>>M[i][pos];
}
nc++;
return nc;
}
void main()
{
int B[MAX][MAX];
int nf,nc,fil,col;

cout<<"Ingrese numero de filas ";
nf=leenum();
cout<<"Ingrese numero de columnas ";
nc=leenum();
ingresadatos(B,nf,nc); cout<<"\n";
,2
Ing. Carol Rojas Moreno


mostrar(B,nf,nc); cout<<"\n";

cout<<"Inserta fila: "<<"\n";
fil=insertar_fila(B,nf,nc); cout<<"\n";

cout<<"Matriz Inicial con fila insertada";
mostrar(B,fil,nc); cout<<"\n";

cout<<"Inserta columna: "<<"\n";
col=insertar_columna(B,nf,nc); cout<<"\n";

cout<<"Matriz Inicial con columna insertada";
mostrar(B,nf,col); cout<<"\n";
}
CC:(&&%& 9.,% F 0(,"*2% 54 "2% *%/&.G
... //Se entiende que se realizan los procedimientos de
lectura de datos
int borrar_fila(int M[MAX][MAX], int nf, int nc)
{ int i,j,pos;
do{ cout<<"Ingrese posicion para borrar fila: ";
cin>>pos;
}while(pos<0 || pos>=nf);
for(i=pos;i<nf-1;i++)
for(j=0;j<=nc-1;j++)
M[i][j]=M[i+1][j];
nf--;
return nf;
}
int borrar_columna(int M[MAX][MAX], int nf, int nc)
{ int i,j,pos;
do{ cout<<"Ingrese posicion para insertar columna: ";
cin>>pos;
}while(pos<0 || pos>=nc);
for(i=0;i<=nf-1;i++)
for(j=pos;j<=nc-1;j++)
M[i][j]=M[i][j+1];
nc--;
return nc;
}
Ing. Carol Rojas Moreno
,3
void main()
{
int B[MAX][MAX] nf,nc,fil,col;

cout<<"Ingrese numero de filas ";
nf=leenum();

cout<<"Ingrese numero de columnas ";
nc=leenum();
ingresadatos(B,nf,nc); cout<<"\n";

mostrar(B,nf,nc); cout<<"\n";

cout<<"Elimina fila: "<<"\n";
fil=borrar_fila(B,nf,nc); cout<<"\n";

cout<<"Matriz Inicial con fila eliminada";
mostrar(B,fil,nc); cout<<"\n";

cout<<"Elimina columna: "<<"\n";
col=borrar_columna(B,nf,nc); cout<<"\n";

cout<<"Matriz Inicial con columna eliminada";
mostrar(B,nf,col); cout<<"\n";
}
E=4*1,(8
". !mprimir lo n;meros que rodean a un n;mero A, la primera vez que se encuentra en la Latriz incluido el
n;mero A2
> = I G = I G
M * > E F > E F
+ E > *
I DH = >
,4
Ing. Carol Rojas Moreno
S(,"0.)2:
... //Se entiende que se realizan los procedimientos de
lectura de datos
void rodean(int M[MAX][MAX], int nf, int nc,int n)
{ int i,j; int f,c; int ban=0;
for(i=0;i<=nf-1;i++)
for(j=0;j<=nc-1;j++)
if( M[i][j]==n && ban==0)
{ f=i;
c=j;
ban=1;
}
if (ban=1)
{cout<<"Los Numeros que rodean son: \n";
for(i=0;i<=nf-1;i++)
{for(j=0;j<=nc-1;j++)
if((i>=f-1 && i<=f+1) && (j>=c-1 && j<=c+1))
cout<<M[i][j]<<"\t";
else
cout<<" ";
cout<<"\n";
}
}
else
cout<<"El numero ingresado no existe";
}
void main()
{ int B[MAX][MAX]; int nf,nc,num;
cout<<"Ingrese numero de filas "; nf=leenum();
cout<<"Ingrese numero de columnas "; nc=leenum();
ingresadatos(B,nf,nc); cout<<"\n";
cout<<"Ingrese el numero a buscar ";
cin>>num;
rodean(B,nf,nc,num); cout<<"\n";}
Ing. Carol Rojas Moreno
,5
/ . 2 3
/
.
2
/ . 2 3
/
.
2
/ . 2 3
/
.
2
/ . 2 3
/
.
2
+. !ngresa un 0umero 0 y luego imprime fila y columna 0 de la matriz, si solo existe la fila 0, solo se imprime
dicha fila.
= E + * *
H DE I G G
F * > D= D=

= E + * +
H DE I G I
F * > D= F * > D=

S(,"0.)2:
... //Se entiende que se realizan los procedimientos de
lectura de datos
void seleccion(int M[MAX][MAX], int nf, int nc)
{ int i,j,n;
do{ cout<<"Ingrese valor de N: ";
cin>>n;
}while(n<0 || (n>=nf && n>=nc));
cout<<"\n\n\n";
for(i=0;i<=nf-1;i++)
{
for(j=0;j<=nc-1;j++)
{
if(i==n || j==n)
cout<<M[i][j]<<"\t";

,*
Ing. Carol Rojas Moreno
N ; 3< se
im!#ime )"
co)0mn" 3
N ; 2< se
im!#ime )"
fi)" 2 = )"
co)0mn" 2
else
cout<<" ";
}
cout<<"\n";
}
}
void main()
{
int B[MAX][MAX];
int nf,nc;
cout<<"Ingrese N filas ";
nf=leenum();
cout<<"Ingrese N columnas ";
nc=leenum();
ingresadatos(B,nf,nc);
cout<<"\n";
seleccion(B,nf,nc);
cout<<"\n";
}
&. !nvertir 4iagonal Principal de una Latriz2
H F > = F >
M I + E M I + E
* E = * E H

... //Se entiende que se realizan los procedimientos de
lectura de datos
void mostrar(int M[MAX][MAX], int nf, int nc)
{ int i,j;
cout<<"Los elementos de la Matriz son";
cout<<"\n";
for(i=0;i<=nf-1;i++)
{ for(j=0;j<=nc-1;j++)
{ cout<<M[i][j];cout<<"\t";
}
cout<<"\n";
}
}
Ing. Carol Rojas Moreno
,+
void invierte_principal(int M[MAX][MAX], int nf, int nc)
{ int i,k,temp;
if( nf==nc )
{ k=nf-1;
for(i=0;i<nf/2;i++)
{ temp=M[i][i];
M[i][i]=M[k][k];
M[k][k]=temp;
k--;
}
}
else cout<<"No es Posible";
}
void main()
{ int B[MAX][MAX];
int nf,nc;
cout<<"Ingrese numero de filas ";
nf=leenum();
cout<<"Ingrese numero de columnas ";
nc=leenum();
ingresadatos(B,nf,nc); cout<<"\n";
mostrar(B,nf,nc); cout<<"\n";
cout<<"Diagonal Principal Invertida";
invierte_principal(B,nf,nc);
mostrar(B,nf,nc); cout<<"\n";
}
'. !ntercambiar ,ilas por :olumnas =Latriz /ranspuesta>
H F > H I * G
M I + E M F + E I
* E = > E = D*
G I D*
. //Se entiende que se realizan los procedimientos de
lectura de datos
void mostrar(int M[MAX][MAX], int nf, int nc)
{ int i,j;
cout<<"Los elementos de la Matriz son";
cout<<"\n";
for(i=0;i<=nf-1;i++)
{ for(j=0;j<=nc-1;j++)
{ cout<<M[i][j];cout<<"\t";
}
cout<<"\n";
}
,,
Ing. Carol Rojas Moreno
}
void transpuesta(int M[MAX][MAX], int nf, int nc,int T[MAX][MAX])
{ int i,j;
for(i=0;i<=nf-1;i++)
for(j=0;j<=nc-1;j++)
{ T[j][i]=M[i][j];
}
}
void main()
{ int B[MAX][MAX],T[MAX][MAX];
int nf,nc,ft,ct,temp;
cout<<"Ingrese numero de filas ";
nf=leenum();
cout<<"Ingrese numero de columnas ";
nc=leenum();
ingresadatos(B,nf,nc); cout<<"\n";
mostrar(B,nf,nc); cout<<"\n";
cout<<"Matriz Transpuesta";
transpuesta(B,nf,nc,T);
ft=nf;
ct=nc;
temp=ft;
ft=ct;
ct=temp;
mostrar(T,ft,ct);
cout<<"\n";
}
Ing. Carol Rojas Moreno
,-
TRA:AAO APLICATIVO
Elaborar el programa en : II para2
*. 4ada una matriz de n filas y m columnas, elaborar los mdulos de programa para2 indicar el menor
elemento y la=s> pocisin=es> en que se encuentra y para hacer rotar a la matriz & veces
=intercambiar filas y columnas>.
+. %ealizar el ordenamiento descendente de una fila en un arreglo bidimensional.
=. %ealizar el ordenamiento descendente de una columna en un arreglo bidimensional.
>. Escriba el mdulo de programa para invertir la diagonal secundaria en un arreglo bidimensional.
3+3+ T.1(8 54 D%/(8 A38/&%0/(8 (TDA)
Es un tipo de dato definido por el programador, que consta de datos y operaciones.
E9m2 clases, listas, pilas, colas.
TDA H %epresentacin =datos> I 8peraciones =funciones y procedimientos>
3+4 R4-.8/&(8 (E8/&"0/"&%8)
6na estructura =registro> es un tipo definido por el usuario en base a otros tipos de datos con el ob9eto de
reunir informacin de un mismo elemento o entidad, a diferencia de un arreglo que tiene datos homogneos.
E9emplo2
Juan !" !#$% &M'
no#'re
.ca!ena0
e!a!
.in"0
Talla
.Aloa"0
seJo
.c(ar0
:ada componente de la estructura se denomina campo.
D40,%&%0.)2:
struct nombre{
char f[5];
char e[3];
int s;
char a;
};
-/
Ing. Carol Rojas Moreno
class alumno
{
private:
string nombre;
string carrera;
public:
alumno();
~alumno();
void ingresar();
void imprimir();
};
")0mno
nom5#e
c"##e#"
in6#es"#
im!#imi#
4atos afines
respecto a la
estructura>
Podemos darle una variable2
struct {
char f[5];
char e[3];
int s;
char a;
}nomb_variable;
E9emplo2
Ing. Carol Rojas Moreno
-.
#include<iostream>
using namespace std;
struct{
int dia;
int mes;
long int anual;
}hoy;
vvoid main( )
{
cout<<"Ingrese dia: \t";
cin>>hoy.dia;
cout<<"Ingrese mes: \t";
cin>>hoy.mes;
cout<<"Ingrese anno: \t";
cin>>hoy.anual;
cout<<hoy.dia<<" / "<<hoy.mes<<" / "<<hoy.anual;
cout<<"\n";
} #include<iostream>
using namespace std;
struct domicilio{
char nombre[30];
char calle[30];
int num;
};
void main( )
{ domicilio oficina, casa;
cout<<"Datos Oficina";cout<<"\n";
cout<<"Ingrese su nombre: \t";
cin>>oficina.nombre;
cout<<"Ingrese calle: \t";
cin>>oficina.calle;
cout<<"Ingrese num calle: \t";
cin>>oficina.num;
cout<<"Ingrese ciudad: \t";
cin>>oficina.ciudad;cout<<"\n";
cout<<oficina.nombre<<"---"<<oficina.calle<<"---"<<oficina.num<<"---"<<ofi
cina.ciudad; cout<<"\n"; cout<<"\n";
cout<<"Datos Casa";cout<<"\n";
cout<<"Ingrese su nombre: \t";
cin>>casa.nombre;
cout<<"Ingrese calle: \t";
cin>>casa.calle;
cout<<"Ingrese num calle: \t";
cin>>casa.num;
cout<<"Ingrese ciudad: \t";
cin>>casa.ciudad;cout<<"\n";
cout<<casa.nombre<<"---"<<casa.calle<<"---"<<casa.num<<"---"<<casa.ciudad;
}
U8( 54, /F14549: (iempre en los programas se realiza una tarea de *(54,%5( de los datos que consiste en
convertir los datos reales en datos aplicables en un programa informtico. En : existe una palabra reservada
llamada /F14549 que sirve para crear tipos de datos propios. Permite dar una mayor claridad y simplicidad al
cdigo, aunque su uso es opcional. (u sintaxis es la siguiente2
/F14549 definicinDelTipo 0ombre4el/ipo4e4atos
D49.2.& 48/&"0/"&%8 0(2 typedef
A8.-2%0.)2 54 48/&"0/"&%8
#include<iostream>
#include<string>
using namespace std;
typedef struct{
char nombre[25];
char apellidos[50];
int edad;
} Persona;
void main( )
{ Persona pepe,jaime;
strcpy(pepe.nombre,"Pepe");
strcpy(pepe.apellidos,"Villegas Varas");
pepe.edad=12;
jaime=pepe; // Asignacin de estructuras
cout<<"\n ---- Reporte de Datos de Pepe ----\n";
cout<<pepe.nombre;cout<<"\n";
cout<<pepe.apellidos;cout<<"\n";
cout<<pepe.edad;cout<<"\n";
cout<<"\n ---- Reporte de Datos de Jaime ----\n";
cout<<jaime.nombre;cout<<"\n";
cout<<jaime.apellidos;cout<<"\n";
cout<<jaime.edad;cout<<"\n";
cout<<"\n";}
F"20.(248 F E8/&"0/"&%8
#include<iostream>
#include<string>
using namespace std;
typedef struct{
char nombre[25];
char apellidos[50];
int edad;
-2
Ing. Carol Rojas Moreno
Se !0ede ?"ce# odo )o "ne#io# de es" fo#m" @definiendo )"
es#0c0#" = c#e"ndo e) i!o " )" AeBCD
typedef struct{
char nombre[25];
char apellidos[50];
char dni[10];
int edad;
}Persona;
void main( )
{ Persona individuo;
}
struct domicilio{
char nombre[30];
char calle[30];
int num;
char ciudad[20];
};
void main( )
{
typedef struct domicilio Oficina, casa;
}
} Persona;
void subirEdad(Persona pers)
{ pers.edad++;
cout<<pers.edad;cout<<"\n";
}
void main()
{ Persona pepe;
strcpy(pepe.nombre,"Pepe");
strcpy(pepe.apellidos,"Villegas Varas");
pepe.edad=12;
cout<<"\n ---- Reporte de Datos de Pepe ----\n";
cout<<pepe.nombre;cout<<"\n";
cout<<pepe.apellidos;cout<<"\n";
cout<<pepe.edad;cout<<"\n";
cout<<"\n ---- Reporte de Nuevos Datos de Pepe ----\n";
cout<<pepe.nombre;cout<<"\n";
cout<<pepe.apellidos;cout<<"\n";
subirEdad(pepe); // Invoca al procedimiento
}
3+B UNIONES
(on a primera vista, entidades muy similares a las estructuras, estn formadas por un n;mero cualquiera de
miembros, al igual que aquellas, pero en ste caso no existen simultneamente todos los miembros, y slo
uno de ellos tendr un valor vlido.
$ diferencia de la Estructura, esta es una localidad de memoria que se utiliza para compartir datos de
diferentes tipos.
E9emplo2 Entonces
struct tabla {
char nombre[30];
char tipo;
char cadena[5];
int entero;
};
E=4*1,( 554 E8/&"0/"&%8 A2.5%5%8:
6tilizar estructuras anidadas2 una para fecha con d.a, mes y aGoF y otra para persona, la cual se invocar
como inscrito y tiene nombres, apellidos, nacimiento =que es del tipo fecha>, y sexo. %eportar los datos
ingresados.
#include<iostream>
#include<string>
#define N 50
using namespace std;
struct fecha{
int dia;
int mes;
long int anual;
};
struct persona{
char nombres[N];
char apellidos[N];
Ing. Carol Rojas Moreno
-3
(i tipo es ec a, se utiliza
cadena, pero si es e e a,
se utiliza entero.
struct tabla{
char nombre[30];
char tipo;
union {
char cadena[5];
int entero;
} dato;
};
fecha fnacimiento;
char sexo[10];
};
void main()
{ persona inscrito;
cout<<"\n\n-----Ingrese datos----- \n\n";
cout<<"Ingrese nombre \t";
cin>>inscrito.nombres;
cout<<"Ingrese apellidos \t";
cin>>inscrito.apellidos;
cout<<"\n\n-----Fecha de Nacimiento----- \n\n";
cout<<"Ingrese dia \t";
cin>>inscrito.fnacimiento.dia;
cout<<"Ingrese mes \t";
cin>>inscrito.fnacimiento.mes;
cout<<"Ingrese ao \t";
cin>>inscrito.fnacimiento.anual;
cout<<"Ingrese sexo \t";
cin>>inscrito.sexo;
cout<<"\n\n----Los Datos ingresados fueron----- \n\n";
cout<<inscrito.nombres<<"\n";
cout<<inscrito.apellidos<<"\n";
cout<<inscrito.fnacimiento.dia<<"\n";
cout<<inscrito.fnacimiento.mes<<"\n";
cout<<inscrito.fnacimiento.anual<<"\n";
cout<<inscrito.sexo<<"\n\n";
}
TRA:AAO APLICATIVO
". -os alumnos de & secciones =$, ), :> han rendido & exmenes =E", E+, E&>
(e quiere escribir un programa que lea los datos de los n alumnos2 nombre, seccin y las notas de los &
exmenes y que imprima los sgte.2
E -a lista de los n alumnos exonerados del examen final en orden de mritos.
E -os alumnos que no han sido exonerados tienen derecho a un examen sustitutorio al que reemplaza la
nota ms ba9a para calcular nuevamente el promedio. En este caso se aprueba con promedio VH"".
E !mprimir la lista de alumnos que a pesar de aprobar el sustitutorio no aprueban el curso.
-4
Ing. Carol Rojas Moreno
PROGRAMACIN ORIENTADA A O:AETOS
Es una tcnica o estilo de programacin basada en elementos bsicos llamados ob9etos.
O3=4/(: Es una entidad que se caracteriza por determinados atributos llamados datos miembro y por ciertas
funciones denominados funciones miembro o mtodos que permiten su manipulacin.
C,%84:
6na clase es la definicin formal de los atributos y funciones miembro de un con9unto de ob9etos que se
realiza en un programa.
class < nombre de la clase >
{
< priate:/pu!lic: "
tipodato atributo;
tipodato atributo;
tipodato atributo;
< priate:/pu!lic: >
Funcion/procedimiento();
Funcion/procedimiento();
Funcion/procedimiento();
};
-os datos y funciones miembro pueden ser definidos como private o public.
1&.6%/4: slo pueden ser accesados desde funciones miembro.
1"3,.0: pueden ser accesados directamente, sin utilizar funciones miembro.
6sualmente se debe declarar los datos miembro tipo private y las funciones miembro tipo public.
Para accesar desde fuera del ob9eto a sus datos p;blicos y funciones miembro p;blicas escribe.
[ nombre del ob9eto V.[ dato miembro V
[ nombre del ob9eto V.[ funcion miembro V
C(28/&"0/(&: 6n constructor es una funcin miembro que permite inicializar los datos miembro de un ob9eto.
/iene las siguientes caracter.sticas2
E (u nombre es igual al de la clase.
E 0o devuelve valores.
E Puede haber ms de un constructor.
E (e invoca al momento de declarar al ob9eto.
D48/&"0/(&: 6n destructor es una funcin que permite liberar el rea de memoria ocupada por un ob9eto
cuando este ya no va ser usado .(us caracter.sticas son2
E (u nombre es igual al de la clase pero precedido por el s.mbolo J f K.
E 0o devuelve valores.
E (lo puede haber un destructor.
E (e invoca al momento de salir o abandonar el mbito donde fue creado el ob9eto.
Ing. Carol Rojas Moreno
-5
#include <iostream>
#include <string>
using namespace std;
class alumno
{ private:
string nombre;
string carrera;
public:
alumno();
~alumno();
void ingresar();
void imprimir();
};
alumno::alumno()
{ nombre=" ";
carrera=" ";
}
alumno::~alumno()
{
}
void alumno::ingresar()
{ cout<<"Ingrese nombre: ";
cin>>nombre;
cout<<"Ingrese carrera: ";
cin>>carrera;
}
void alumno::imprimir()
{ cout<<"Nombre Alumno: ";
cout<<nombre<<"\n";
cout<<"Carrera: ";
cout<<carrera<<"\n";
}
void main()
{ alumno al;
cout<<"Ingrese Alumno";cout<<"\n";
al.ingresar();cout<<"\n";
cout<<"Mostrar Alumno"<<"\n";
al.imprimir();cout<<"\n\n";
cout<<"Eliminar Alumno"<<"\n";
al.~alumno();cout<<"\n";
cout<<"Mostrar Alumno"<<"\n";
al.imprimir();cout<<"\n";
system("PAUSE");
}
E=4*1,( 54 P&(-&%*% O&.42/%5( % O3=4/(8
-*
Ing. Carol Rojas Moreno
4+ E8/&"0/"&%8 54 D%/(8 D.2;*.0%8
(on aquellas en las que no es necesario reservar espacio de memoria antes de e9ecutar el programa, ya que
este espacio se puede asignar durante su e9ecucin seg;n se necesite. $s. mismo dicho espacio puede ser
liberado para poder ser utilizado por otros datos.
E9emplos2
2 -istas
2 Pilas
2 :olas
2 grboles
2 <rafos
PUNTEROS
6n puntero es un tipo especial de variable, que almacena el valor de una direccin de memoria, esta
direccin puede ser la de una variable individual, pero mas frecuentemente ser la de un elemento de un
array, una estructura u ob9eto de una clase. -os punteros, tambien pertenecen a un tipo, se dice que un
puntero hapunta ah ese tipo al que pertenece.
MEMORIA
200
p 800
800
x 23

p es una variable tipo puntero.
x es una variable tipo int apuntada por p.
D40,%&%0.)2 54 6%&.%3,48 /.1( 1"2/4&(
tipo de dato apuntado S variable tipo puntero2
E9emplos2
int *p; ?? p es una variable tipo puntero que apunta a una variable tipo int.
float *q; ?? q es una variable tipo puntero que apunta a una variable tipo float.
char *r; ?? r es una variable tipo puntero que apunta a una variable tipo char.
Ing. Carol Rojas Moreno
-+
Para hacer referencia a la variable apuntada se usa la notacin2
Svariable tipo puntero
E9emplo2
MEMORIA
200
p 800
800
x 23
*p

Sp es otro nombre para la variable x
Variables estticas
(on aquellas que se declaran expresamente en los programas y a las que el sistema operativo asigna una
posicin de memoria antes de la e9ecucin del mismo.
Variables dinmicas
(on variables que se crean y se destruyen durante la e9ecucin del programa. 0o son declaradas
expl.citamente en los programas.
O14&%5(& H
4evuelve la direccin de memoria de una variable. (u sintaxis es2
W nombre de variable
-,
Ing. Carol Rojas Moreno
E9emplo2
#include <iostream>
using namespace std;
void main ()
{
int x,y; ?? Pariables de tipo entero
int *px; ?? Puntero a una variable de tipo entero
?? -eemos la direccin =compartimiento> de la variable =informe> x mediante W y lo almacenamos en la variable
puntero px

px = &x; ?? px contiene la direccin en la que se encuentra x

?? 6tilizando el operador S, podemos acceder a su informacin. Spx representa ahora el valor de la variable x

*px = 10; ?? $hora x contiene el valor "#

cout<<x;cout<<"\n"; ?? Pisualiza si x tiene el valor que recibi su puntero px
cout<<*px;cout<<"\n"; ?? Pisualiza el valor de x

y = 15;

?? (i ahora hacemos que el puntero apunte a la variable y utilizando de nuevo el operador W

px = &y;

cout<<y<<"\n"; ??visualiza el valor de y

?? El valor que ahora toma Spx ser el valor de y puesto que es el compartimiento al que ahora estamos apuntando

*px = 125; ?? $hora y contiene el valor "+
x = *px; ?? $hora x contiene tambin "+
cout<<y<<"\n"; ??visualiza el nuevo valor de y
cout<<x<<"\n"; ??visualiza el nuevo valor de y

cout<<*px<<"\n"; ??Pisualiza el valor de x

cout<<&x<<"\n"; ??visulaiza la direccion de memoria
cout<<px<<"\n"; ??visualiza la direccion de memoria
}
Ing. Carol Rojas Moreno
--
C&4%0.)2 54 6%&.%3,48 5.2;*.0%8
Para crear variables dinmicas se usa el ob9eto 24I cuya sintaxis es la siguiente2
2aria'le !e "i,o
,%n"ero
( neK "i,o !e !a"o !e la
2aria'le crea!a
)
E9emplo2
int *p;
float *q;
p = new int; // crea una variable dinmica de tipo int y hace que p apunte a ella.
q = new float; // crea una variable dinmica de tipo float y hace que q apunte a ella.
NOTA:
0o se puede asignar un valor constante a una variable tipo puntero ni ingresar un valor por teclado para ella.
int *p;
p = 800; EE ERROR
cin>>p; EE ERROR
(i es posible imprimir el valor de un puntero2
cout<<p;
E9emplo2
void main()
{
int *p, *q;
p = new int;
*p = 8;
q = p;
}
E9emplo2
void main()
{
int *p, *q;
p = new int;
q = new int;
*p = 8;
*q = *p;
}
.//
Ing. Carol Rojas Moreno
NOTA:
0o se puede asignar una variable tipo puntero a otra que no sea de su mismo tipo.
int *p, *q;
float *r;
p = new int;
*p =7;
q = p;
r = p;
E,.*.2%0.)2 54 6%&.%3,48 5.2;*.0%8
!ele"e L2aria'le "i,o ,%n"ero <%e a,%n"a a la 2aria'le !in$#ica <%e ser$ eli#ina!a6M
(e libera el espacio ocupado por la variable dinmica para poder ser utilizado nuevamente. -a variable tipo
puntero que la apuntaba mantiene de la variable dinmica, aunque ya no tenga significado su apuntamiento.
void main()
{ int *p;
p = new int;
*p = 17;
cout<<p;
delete p;
cout<<p;
}
C(28/%2/4 NULL
Es una constante predefinida en :II cuyo valor es cero =#> y sirve para inicializar una variable tipo puntero
que no apunta a ninguna variable.
2aria'le "i,o ,%n"ero ; NULLM
void main()
{ int *p;
p = new int;
*p = 17;
cout<<p;
delete p;
cout<<p;
p = NULL;
cout<<p;
}
Ing. Carol Rojas Moreno
./.

4+1 E8/&"0"/&%8 54 D%/(8 D.2;*.0%8 L.24%,48
4+1+1 LISTAS ENLAZADAS
6na lista enlazada es una estructura de datos dinmica formada por un con9unto de elementos llamados
nodos.
:ada nodo consta de dos partes2
E 6na que contiene el dato.
E 8tra que contiene la direccin del siguiente nodo.
Nodo
D"o di#ecci7n de)
nodo si60iene
-os nodos son variables dinmicas que se crean y destruyen de acuerdo a los requerimientos del proceso.
2 Para acceder a la lista es necesario un puntero que contenga la direccin del primer nodo.
2 (i la lista est vac.a dicho puntero tendr el valor 06--.
2 El ;ltimo elemento de la lista se reconoce porque su puntero al siguiente tiene valor 06--.
R41&4842/%0.)2 G&;9.0% 54 "2% L.8/% E2,%G%5%
Lis"
N0)o
LISTAS SIMPLEMENTE ENLAZADAS
Es un con9unto de elementos en los que cada elemento contiene la posicin o direccin del sgte. campo de la
-ista.
4onde cada elemento de la lista simplemente enlazada llamado nodo se define2
struct nodo{
int n; //el campo puede ser string, float, estructura, etc.
nodo * sgte; // direccin al siguiente nodo
};
./2
Ing. Carol Rojas Moreno
.2 3/ 2. 54
NULL
NULL
Lis"
ListasSE.h
#include <iostream>
#include <string>
#define MAX 100
using namespace std;
struct nodo
{ int dato;
nodo *sig;
};
typedef nodo *pnodo;
class lista
{ private:
pnodo pL;
public:
lista();
~lista();
void insertar_comienzo();
void insertar_final();
void insertar_despues();
void eliminar_inicio();
void eliminar_final();
void buscar();
pnodo buscar_despues(int x);
void buscar_anterior();
void imprimir();
};
lista::lista()
{
pL = NULL;
}
lista::~lista()
{ pnodo p,q;
if ( pL != NULL )
{ p = pL;
while ( p != NULL )
{ q = (*p).sig;
delete p;
p = q;
}
pL=p;
}
}
Ing. Carol Rojas Moreno
./3
void lista::insertar_comienzo()
{ pnodo nuevo;
int valor;
cout<<"Ingrese dato:";cin>>valor;
nuevo = new nodo;
(*nuevo).dato = valor;
(*nuevo).sig = pL;
pL = nuevo;
}
void lista::insertar_final()
{ pnodo nuevo,aux;
nuevo = new nodo;
int valor;
cout<<"Ingrese dato:";
cin>>valor;
(*nuevo).dato = valor;
(*nuevo).sig = NULL;
if ( pL == NULL )
pL = nuevo;
else
{ aux = pL;
while ( (*aux).sig != NULL )
aux = (*aux).sig;
(*aux).sig = nuevo;
}
}
void lista::insertar_despues()
{ pnodo nuevo,r,temp;
int num;
nuevo=new nodo;
cout<<"Ingrese dato";
cin>>(*nuevo).dato;
cout<<"Ingrese despues del alumno con codigo";
cin>>num;
r=lista::buscar_despues(num);
if(r==NULL)
{ cout<<"Lista vacia o no se encontro";
}

else
{ temp=(*r).sig;
if(temp!=NULL)
{ (*r).sig=nuevo;
(*nuevo).sig=temp;
}
else
{ (*nuevo).sig=NULL;
(*r).sig=nuevo;
}
}
}
./4
Ing. Carol Rojas Moreno
void lista::buscar()
{ pnodo pos;
int valor, ban=0;
cout<<"Ingrese dato:";
cin>>valor;
if ( pL == NULL )
{ cout<<"LISTA VACIA";
pos=NULL;
}
else
{ pos = pL;
while ( pos != NULL)
{ if((*pos).dato != valor)
{ pos = (*pos).sig;
ban=1;
}
else
{ ban=0;
break;
}
}
if(ban==0)
{cout<<"ENCONTRADO";
}
else
{cout<<"NO ENCONTRADO";
}
}
}
pnodo lista::buscar_despues(int valor)
{ pnodo pos;
int ban=0;
if ( pL == NULL )
{ cout<<"LISTA VACIA";
pos=NULL;
}
else
{ pos = pL;

while ( pos != NULL)
{ if((*pos).dato != valor)
{ pos = (*pos).sig;
ban=1;
}
else
{ ban=0;
break;
}
}
if(ban==0)
{cout<<"ENCONTRADO";
Ing. Carol Rojas Moreno
./5

}
else
{cout<<"NO ENCONTRADO";
}
return pos;
}
}
void lista::buscar_anterior()
{ pnodo pos,p;
int valor,ban=0;
cout<<"Ingrese dato:"; cin>>valor;
pos = NULL;
p = pL;
while(p!=NULL)
{ if ( (*p).dato != valor)
{ ban=1;
pos = p;
p = (*p).sig;
}
else
{ ban=0;
break;
}
}
if(ban==0)
{cout<<"ENCONTRADO: "<<(*pos).dato ;
}
else
{cout<<"NO ENCONTRADO"; }
}
void lista::eliminar_inicio()
{ pnodo aux;
if(pL==NULL)
{ cout<<"lista vacia"; }
else
{ aux=pL;
if((*pL).sig==NULL) // un nodo
{ pL=NULL; }
else
{ pL=(*pL).sig; }
cout<<"elemento eliminado"<<(*aux).dato;
delete aux;
}
}
void lista::eliminar_final()
{ pnodo aux=pL,temp;
if(pL==NULL)
{ cout<<"lista vacia"; }
else
{ if((*pL).sig==NULL)
./*
Ing. Carol Rojas Moreno
{ pL=NULL; }

else
{ while((*aux).sig!=NULL)
{ temp=aux;
aux=(*aux).sig;
}
(*temp).sig=NULL;
}
cout<<"elemento eliminado"<<(*aux).dato ;
delete aux;
}
}
void lista::imprimir()
{ pnodo p;
if ( pL == NULL )
cout<<"Lista vacia"<<endl;
else
{ p = pL;
while (p != NULL)
{ cout<<(*p).dato<<" -> ";
p = (*p).sig;
}
cout<<"NULO"<<endl;
}
}
ListasSE.cpp
#include <iostream.h>
#include "ListasSE.h"
using namespace std;
void main()
{ lista L;
pnodo b;
int valor,opc;
do
{ cout<<"\nmenu";
cout<<"\n1 insertar al inicio";
cout<<"\n2 insertar al final";
cout<<"\n3 insertar despues del nmero";
cout<<"\n4 Eliminar al inicio";
cout<<"\n5 Eliminar al final";
cout<<"\n6 Eliminar Lista";
cout<<"\n7 Buscar en lista";
cout<<"\n8 Buscar Anterior en lista";
cout<<"\n9 Visualizar lista";
cout<<"\n10 Salir";
do
{ cout<<"\n Seleccione opcin";
cin>>opc;
} while(opc>10);
Ing. Carol Rojas Moreno
./+
switch(opc)
{ case 1:L.insertar_comienzo();break;
case 2:L.insertar_final();break;
case 3:L.insertar_despues();break;
case 4:L.eliminar_inicio();break;
case 5:L.eliminar_final();break;
case 6:L.~lista();break;
case 7:L.buscar();break;
case 8:L.buscar_anterior();break;
case 9:L.imprimir();break;
}
} while(opc!=10);
}
LISTAS ENLAZADAS CIRCULARES
6na -ista Enlazada :ircular = -E: > es un con9unto de nodos. :ada nodo es un registro que tiene dos
campos2 6n campo para almacenar informacin de alg;n tipo de dato y otro campo tipo puntero que
contiene la direccin del nodo siguiente.
-a particularidad que presenta una -ista Enlazada :ircular es que el ;ltimo nodo de la lista no contiene
06-8 en su campo 8.- sino la direccin del primer nodo, lo que le da la caracter.stica circular a la lista.
Para tener acceso a la lista es necesario un puntero -c que contenga la direccin del primer nodo.
ListaC



LISTAS DO:LEMENTE ENLAZADAS
6na -ista 4oblemente Enlazada = -4E > es un con9unto de nodos. :ada nodo es un registro que tiene tres
campos2 6n campo para almacenar informacin de alg;n tipo de dato y dos campos tipo puntero que
contienen las direcciones de los nodos anterior y siguiente respectivamente.
<racias a los punteros ant y sig es que puede recorrerse la -4E en forma bidireccional, lo cual constituye una
venta9a importante frente a una lista enlazada simple que slo puede recorrerse en un sentido. En
contraparte, el espacio ocupado en memoria es mayor debido a la inclusin de un segundo puntero.
Para tener acceso a la lista es necesario un puntero -d que contenga la direccin del primer nodo. El campo
%2/ del primer nodo tiene valor 06-8, pues no existe un nodo anterior a este, anlogamente, el ;ltimo nodo
tiene tambin en su campo 8.- el valor 06-8 para expresar el hecho de que no existe un siguiente nodo.
ListaDE NULL


NULL
./,
Ing. Carol Rojas Moreno
ant dato sig
.2 3/ 2. 54
.2 3/ 2. 54
4+1+2 C(,%8
6na :ola es una lista ordenada de elementos en la cual las inserciones se realizan por un extremo llamado
,inal y las eliminaciones por el otro extremo denominado ,rente. 6na :ola es una estructura tipo ,!,8 = ,irst
!n E ,irst 8ut > ya que los elementos se sacan de la cola en el mismo orden en que fueron insertados. -a
estructura de los nodos de una cola es la siguiente2
Para especificar una cola son necesarios dos punteros, uno que apunte al primer elemento de la cola y el
otro al ;ltimo elemento de la cola.
Cola NULL



En una cola se definen dos operaciones2
E20(,%&: insertar un nuevo elemento al final de la cola
D48420(,%&: eliminar el elemento del comienzo de la cola
Cola.h
#include <iostream>
using namespace std;
struct nodo
{ int dato;
nodo *sig;
};
typedef nodo *pnodo;
class cola
{ private:
pnodo pL;
public:
cola();
~cola();
void encolar();
void desencolar();
void mostrar();
};
cola::cola()
{ pL = NULL; }
cola::~cola()
{ pnodo p,q;
if ( pL != NULL )
{ p = pL;

Ing. Carol Rojas Moreno
./-
dato sig
.2 3/ 2. 54
while ( p != NULL )
{ q = (*p).sig;
delete p;
p = q;
}
pL=p;
}
}
void cola::encolar()
{ pnodo nuevo,aux;
nuevo = new nodo;
int valor;
cout<<"Ingrese valor:";
cin>>valor;
(*nuevo).dato = valor;
(*nuevo).sig = NULL;
if ( pL == NULL )
pL = nuevo;
else
{ aux = pL;
while ( (*aux).sig != NULL )
aux = (*aux).sig;
(*aux).sig = nuevo;
}
}
void cola::desencolar()
{ pnodo aux;
if(pL==NULL)
{ cout<<"cola vacia"; }
else
{ aux=pL;
if((*pL).sig==NULL) // un nodo
{ pL=NULL; }
else
{ pL=(*pL).sig; }
cout<<"elemento eliminado"<<(*aux).dato; delete aux;
}
}
void cola::mostrar()
{ pnodo p;
if ( pL == NULL )
cout<<"cola vacia"<<endl;
else
{ p = pL;
while (p != NULL)
{ cout<<(*p).dato<<" -> ";
p = (*p).sig;
}
cout<<"NULO"<<endl;
}
}
../
Ing. Carol Rojas Moreno
Cola.cpp
#include <iostream>
#include "Cola.h"
using namespace std;
void main()
{ cola C;
int opc;
do
{ cout<<"\nmenu";
cout<<"\n1 encolar";
cout<<"\n2 desencolar";
cout<<"\n3 mostrar";
cout<<"\n4 Salir";
do
{ cout<<"\n Seleccione opcin"; cin>>opc;
} while(opc>4);
switch(opc)
{case 1:C.encolar();break;
case 2:C.desencolar();break;
case 3:C.mostrar();break;
}
} while(opc!=4);
}
4+1+3 P.,%8
6na Pila es una lista de elementos en la cual las inserciones y las eliminaciones se realizan por un mismo
extremo llamado :ima.
6na Pila es una estructura tipo -!,8 = -ast !n E ,irst 8ut > ya que los elementos se sacan de la pila en orden
contrario al que fueron insertados.
-a estructura de los nodos de una pila es la siguiente2
Para especificar una pila es necesario un puntero, que apunte al primer elemento de la pila, es decir
a la cima.
Pila NULL

En una pila slo estn permitidas dos operaciones2
A1.,%&: !nsertar un elemento por el lado de la cima
D48%1.,%&: Eliminar el elemento de la cima de la pila
Ing. Carol Rojas Moreno
...
dato sig
.2 3/ 2. 54
Pila.h
#include<iostream>
using namespace std;
struct nodo
{ int dato;
nodo *sig;
};
typedef nodo *pnodo;
class stack
{ private:
pnodo pL;
public:
stack();
~stack();
void apilar();
void desapilar();
void mostrar();
};
stack::stack()
{ pL = NULL; }
stack::~stack()
{ pnodo p,q;
if ( pL != NULL )
{ p = pL;
while ( p != NULL )
{ q = (*p).sig;
delete p;
p = q;
}
pL=p;
}
}
void stack::apilar()
{ pnodo nuevo;
int valor;
cout<<"Ingrese dato:";cin>>valor;
nuevo = new nodo;
(*nuevo).dato = valor;
(*nuevo).sig = pL;
pL = nuevo;
}
..2
Ing. Carol Rojas Moreno
void stack::desapilar()
{pnodo aux=pL,temp;
if(pL==NULL)
{ cout<<"Pila vacia"; }
else
{ if((*pL).sig==NULL)
{ pL=NULL; }
else
{ while((*aux).sig!=NULL)
{ temp=aux;
aux=(*aux).sig;
}
(*temp).sig=NULL;
}
cout<<"elemento eliminado"<<(*aux).dato;
delete aux;
}
}
void stack::mostrar()
{ pnodo p;
if ( pL == NULL )
cout<<"Pila vacia"<<endl;
else
{ p = pL;
while (p != NULL)
{ cout<<(*p).dato<<" -> ";
p = (*p).sig;
}
cout<<"NULO"<<endl;
}
}
Pila.cpp
#include <iostream>
#include "Pila.h"
using namespace std;
void main()
{ stack S; int opc;
do
{ cout<<"\nmenu";
cout<<"\n1 apilar";
cout<<"\n2 desapilar";
cout<<"\n3 mostrar";
cout<<"\n4 Salir";
do
{ cout<<"\n Seleccione opcin"; cin>>opc;
} while(opc>4);
switch(opc)
{case 1:S.apilar();break;
case 2:S.desapilar();break;
case 3:S.mostrar();break;
}
} while(opc!=4);
}
Ing. Carol Rojas Moreno
..3

4+2 E8/&"0/"&%8 54 D%/(8 D.2;*.0%8 N( L.24%,48
4+2+1 @&3(,48
6n rbol es un con9unto de nodos, en el que existe un nodo distinguido llamado %a.z y cero o ms
subrboles, cada uno de los cuales tiene su ra.z conectada a la ra.z por medio de una arista.
E9emplo2
A
* C D E + G
, I J - L M N
P .
C(2041/(8 :;8.0(8 8(3&4 @&3(,48
H(=%
/odo nodo que no tiene hi9os.
E9emplo2 ), :, Y, !, P, Q, B, -, L, 0
C%*.2(
Enlace entre dos nodos consecutivos y rama es un camino que termina en ho9a.
E9emplo2 camino = $ , Q > H $ _ E _ M _ Q
L(2-./"5 54, 0%*.2(
Es la cantidad de aristas que conforman un camino.
E9emplo2 longitudTcamino = $ , Q > H &
N.64,
:ada nodo tiene asociado un nivel, determinado por la logintud de camino desde la raiz hasta el nodo
especifico.
E9emplo2
0ivel # $
0ivel " ),:,4,E,,,<
0ivel + Y,!,M,B,-,L,0
0ivel & P,Q
P&(9"25.5%5 54 "2 %&3(,
Es el numero maximo de nodos en una rama. Es decir nivel mas alto de los nodos mas uno.
E9emplo2
profundidad H nivel I"
profundidad H & I" H '
..4
Ing. Carol Rojas Moreno
R41&4842/%0.)2 P&.*4& H.=( J S.-".42/4 H4&*%2(
:ada nodo del rbol solo tiene dos punteros, uno para apuntar a su primer hi9o y otro para apuntar a su
siguiente hermano.
A
* C D E + G
, I J - L M N
P .
#include <iostream>
#define MAX 10
using namespace std;
struct nodo
{
int dato;
nodo * hijo;
nodo * her;
};
typedef nodo *pnodo;
class arbol
{private:
pnodo rpri;
public:
arbol();
~arbol();
pnodo buscar(pnodo aux, pnodo pos,int d);
pnodo mostrar(pnodo aux);
void inserta_principal();
void inserta_hijo();
void inserta_hermano();
};
arbol::arbol()
{rpri =NULL;}
arbol::~arbol()
{ }
pnodo arbol::buscar(pnodo aux, pnodo pos, int d)
{ pnodo aux2;
if (aux==NULL)
{ pos=NULL;
}

Ing. Carol Rojas Moreno
..5
else
{ if((*aux).dato ==d)
{ pos=rpri; }
else
{ aux2=(*aux).hijo;
do
{ while(aux2!=NULL && (*aux2).hijo ==NULL)
{ if((*aux2).dato==d)
{ pos=aux2;
return pos;
}
aux2=(*aux2).her;
}
if(aux2==NULL && pos==NULL)
return NULL;
pos=buscar(aux2,pos,d);
aux2=(*aux2).her;
}while(aux2!=NULL);
}
}
return pos;
}
pnodo arbol::mostrar(pnodo aux)
{pnodo aux2, pos;
aux=rpri;
if (aux==NULL)
{ cout<<"\t--*** No existe arbol ***--"<<endl; }
else
{ cout<<(*aux).dato<<endl;
aux2=(*aux).hijo;
do
{ while(aux2!=NULL && aux2->hijo==NULL)
{ cout<<aux2->dato<<endl;
aux2=aux2->her;
}
if(aux2==NULL)
return NULL;
pos=mostrar(aux2);
aux2=aux2->her;
}while(aux2!=NULL);
}
return pos;
}
void arbol::inserta_principal()
{rpri = new nodo;
cout<<"\t Ingresar la raiz: ";
cin>>rpri->dato;
cout<<endl;
rpri->hijo=NULL;
}
..*
Ing. Carol Rojas Moreno
void arbol::inserta_hijo()
{nodo *hij,*pos=NULL;
int num;
hij=new nodo;
cout<<"-- ***De que nodo desea que sea el hijo: ";
cin>>num;
cout<<endl;
pos=buscar(rpri,pos,num);
if(pos==NULL)
{ cout<<"\t--** Arbol vacio o no se encontro **--"; }
else
{ if(rpri->hijo==NULL)
{ cout<<"\t Ingrese nro a insertar: "; cin>>hij->dato;
pos->hijo=hij;
hij->her=NULL;
hij->hijo=NULL;
}
else
cout<<"***--NO SE PUEDE INGRESAR UN HIJO A LA RAIZ PRINCIPAL--
***"<<endl;
}
}
void arbol::inserta_hermano()
{pnodo herma,pos=NULL;
int num;
herma=new nodo;
cout<<"\t De que nodo desea que sea el hermano: "<<endl;
cin>>num;
if(num==rpri->dato)
cout<<"***--NO SE PUEDE INGRESAR UN HERMANO A LA RAIZ
PRINCIPAL--***"<<endl;
else
{ pos=buscar(rpri,pos,num);
if(pos==NULL)
{
cout<<"\t---*** Arbol vacio o no se encontro ***---"<<endl;
}
else
{ cout<<"\t Ingrese nro a insertar: ";
cin>>herma->dato;
pos->her=herma;
herma->her=NULL;
herma->hijo=NULL;
}
}
}
Ing. Carol Rojas Moreno
..+
void main()
{ int opc;
arbol p;
pnodo pos, rpri=NULL;

bool band=false;
do
{ cout<<endl;cout<<"\t --- MENU --- "<<endl<<endl;
if(band==false)
{ cout<<"\t 1 -> insertar raiz principal"<<endl;
band=true;
}
else
{ cout<<"\t 2 -> insertar hijos"<<endl;
cout<<"\t 3 -> insertar hermano"<<endl;
cout<<"\t 4 -> Visualizar Arbol"<<endl;
cout<<"\t 5 -> Salir"<<endl;
}
do
{cout<<"\t Seleccione opcion: "; cin>>opc; cout<<endl;
}while(opc>8);
switch(opc)
{case 1:p.inserta_principal();break;
case 2:p.inserta_hijo();break;
case 3:p.inserta_hermano();break;
case 4:pos=p.mostrar(rpri);break;
}
} while(opc!=5);
}
4+2+2 @&3(,48 :.2%&.(8
6n grbol )inario es aquel en el que cada uno de sus nodos puede tener #, " o + hi9os.
Rai/
Su0a102l
I/3ui4152
Su0a102l
D414c62
E9emplo2
A
* C
D E +
G
..,
Ing. Carol Rojas Moreno
R40(&&.5( 54 @&3(,48 :.2%&.(8
%ecorrer un rbol binario significa visitar cada uno de sus nodos para poder procesar su informacin.
%) R40(&&.5( 42 O&542
%ecorrer el subrbol izquierdo en (&542
Pisitar el nodo ra.z
%ecorrer el subrbol derecho en (&542
3) R40(&&.5( 42 P&4>O&542
Pisitar el nodo ra.z
%ecorrer el subrbol izquierdo en 1&4>(&542
%ecorrer el subrbol derecho en 1&4>(&542
0) R40(&&.5( 42 P(8/>O&542
%ecorrer el subrbol izquierdo en 1(8/>(&542
%ecorrer el subrbol derecho en 1(8/>(&542
Pisitar el nodo ra.z
@&3(, 54 E<1&48.)2
Es un rbol binario en el que las ho9as contienen los operandos y los nodos internos los operadores de una
expresin matemtica.
E9emplo2
( a ( ! " c # # $ ( ( d " e # % & # ' g #
7
8
a 9
0 c
:
f
5 4
;
;
<
4+2+3 @R:OLES :INARIOS DE :KS!UEDA ( A:: )
6n $)) es un rbol binario en el que para todos sus nodos = excepto sus ho9as > se cumple que el dato
almacenado en l, es mayor a todos los datos de los nodos del subrbol izquierdo pero menor a todos los
datos de los nodos del subrbol derecho.
E9emplo2
=
> ?
! @
%
!A
"
Ing. Carol Rojas Moreno
..-
Para poder tener acceso al rbol es necesario un puntero que contenga la direccin de la ra.z.
a(!ola!!.h
#include<iostream>
using namespace std;
struct nodoABB.h
{ nodoABB *hizq;
int dato;
nodoABB *hder;
};
typedef nodoABB *pnodoABB;
class abb
{ private:
pnodoABB praiz;
public:
abb();
~abb();
pnodoABB getraiz();
pnodoABB buscar( int x );
void insertar( int x );
void imprimeenorden( pnodoABB p );
void imprimepreorden( pnodoABB p );
void imprimepostorden( pnodoABB p );
void eliminaarbol( pnodoABB p );
};
abb::abb()
{ praiz = NULL; }
abb::~abb()
{ eliminaarbol(praiz);
praiz = NULL;
}
pnodoABB abb::getraiz()
{ return praiz;}
pnodoABB abb::buscar( int x )
{ pnodoABB p; int ok;
if ( praiz == NULL )
return NULL;
else
{ ok = 0;
p = praiz;
while ( p != NULL && ok == 0 )
if ( (*p).dato == x )
ok = 1;
else
if ( x < (*p).dato )
p = (*p).hizq;
else
p = (*p).hder;
return p;
}
}
.2/
Ing. Carol Rojas Moreno
void abb::insertar( int x )
{ pnodoABB p,q,r,pos;
char h;
p = new nodoABB;
(*p).dato = x;
(*p).hizq = NULL;
(*p).hder = NULL;
if ( praiz == NULL )
praiz = p;
else
{ pos=buscar(x);
if(pos!=NULL)
cout<<"Elemento ya existe";
else
{ q = praiz;
while ( q != NULL )
{ r = q;
if ( x < (*q).dato )
{ q = (*q).hizq;
h = 'i';
}
else
{ q = (*q).hder;
h = 'd';
}
}
if ( h == 'i' )
(*r).hizq = p;
else
(*r).hder = p;
}
}
}
void abb::imprimeenorden( pnodoABB p )
{ pnodoABB Ai,Ad;
if ( p != NULL )
{ Ai = (*p).hizq;
Ad = (*p).hder;
imprimeenorden(Ai);
cout<<(*p).dato<<" ";
imprimeenorden(Ad);
}
}
void abb::imprimepreorden( pnodoABB p )
{ pnodoABB Ai,Ad;
if ( p != NULL )
{ Ai = (*p).hizq;
Ad = (*p).hder;
cout<<(*p).dato<<" ";
imprimepreorden(Ai);
imprimepreorden(Ad);
}
}
Ing. Carol Rojas Moreno
.2.
void abb::imprimepostorden( pnodoABB p )
{ pnodoABB Ai,Ad;
if ( p != NULL )
{ Ai = (*p).hizq;
Ad = (*p).hder;
imprimepostorden(Ai);
imprimepostorden(Ad);
cout<<(*p).dato<<" ";
}
}
void abb::eliminaarbol( pnodoABB p )
{ pnodoABB Ai,Ad;
if ( p != NULL )
{ Ai = (*p).hizq;
Ad = (*p).hder;
eliminaarbol(Ai);
eliminaarbol(Ad);
delete p;
}
}
)(!ol*ina(io.cpp
#include <iostream.h>
#include "arbolabb.h"
using namespace std;
void main()
{ abb A;
pnodoABB b,r;
int i, x, sn, n, cn,opc;
do
{ cout<<"\n Menu \n";
cout<<"\n1 insertar nodo";
cout<<"\n2 mostrar in orden";
cout<<"\n3 mostrar pre orden";
cout<<"\n4 mostrar post orden";
cout<<"\n5 Salir";
do
{ cout<<"\n\n Seleccione opcion: "; cin>>opc;
} while(opc>5);
switch(opc)
{ case 1:{cout<<"Ingrese hoja: "; cin>>x;
A.insertar(x);
r = A.getraiz();
}break;
case 2:A.imprimeenorden(r);break;
case 3:A.imprimepreorden(r);;break;
case 4:A.imprimepostorden(r);break;
}

} while(opc!=5);
}
.22
Ing. Carol Rojas Moreno
4+2+4 G&%9(8
En matemticas y en ciencias de la computacin, un grafo es el ob9eto abstracto bsico de estudio en teor.a
de los grafos. !nformalmente, un grafo se concibe y se representa como un con9unto de ob9etos llamados
vrtices o nodos unidos por enlaces llamados aristas. -as aristas pueden tener direccin =grafo dirigido>.
6n grafo consta de vrtices =o nodos> y aristas. -os vrtices son ob9etos que contienen informacin y las
aristas son conexiones entre vrtices. Para representarlos, se suelen utilizar puntos para los vrtices y l.neas
para las conexiones, aunque hay que recordar siempre que la definicin de un grafo no depende de su
representacin.
6n camino entre dos vrtices es una lista de vrtices en la que dos elementos sucesivos estn conectados
por una arista del grafo.
El grafo ser conexo si existe un camino desde cualquier nodo del grafo hasta cualquier otro. (i no es conexo
constar de varias componentes conexas.
6n camino simple es un camino desde un nodo a otro en el que ning;n nodo se repite =no se pasa dos
veces>. (i el camino simple tiene como primer y ;ltimo elemento al mismo nodo se denomina ciclo. :uando el
grafo no tiene ciclos tenemos un rbol =ver rboles>. Parios rboles independientes forman un bosque. 6n
rbol de expansin de un grafo es una reduccin del grafo en el que solo entran a formar parte el n;mero
m.nimo de aristas que forman un rbol y conectan a todos los nodos.
(eg;n el n;mero de aristas que contiene, un grafo es completo si cuenta con todas las aristas posibles =es
decir, todos los nodos estn conectados con todos>, disperso si tiene relativamente pocas aristas y denso si
le faltan pocas para ser completo.
-as aristas son la mayor parte de las veces bidireccionales, es decir, si una arista conecta dos nodos $ y )
se puede recorrer tanto en sentido hacia ) como en sentido hacia $2 estos son llamados !ra"os no diri!idos.
(in embargo, en ocasiones tenemos que las uniones son unidireccionales. Estas uniones se suelen dibu9ar
con una flecha y definen un !ra"o diri!ido. :uando las aristas llevan un coste asociado =un entero al que se
denomina peso> el grafo es ponderado. 6na red es un grafo dirigido y ponderado.
Grafo no dirigido
Grafo dirigido
Propiedades
4os aristas de un grafo son llamadas adyacentes si tienen un vrtice en com;n. 4e forma similar, dos
vrtices son llamados adyacentes si una arista los une. (e dice que una arista es incidente a un vrtice si
sta lo une a otro.
(i un grafo slo tiene un vrtice y ninguna arista, se le conoce como trivial. (i un grafo no tiene ni vrtices ni
aristas, se conoce como vac.o nulo, aunque no hay un consenso sobre si deba de seguir existiendo, ya que
no cumple con muchas propiedades.
En un grafo d.grafo ponderado, a cada arista se le asocia un valor, como costo, peso, longitud, etc. seg;n
sea lo que modele, en general se usan para problemas de optimizacin como el problema del vendedor o el
camino ptimo.
0ormalmente los vrtices y las aristas de un grafo, por su naturaleza como elementos de un con9unto, son
distinguibles. Este tipo de grafos son llamados etiquetados, tambin pueden slo etiquetarse los vrtices o
aristas.
Ing. Carol Rojas Moreno
.23
Ejemplos
-a imagen es una representacin del siguiente grafo2
#2Hi",+,&,',,7j
$2Hii",+j,i",j,i+,&j,i+,j,i&,'j,i',j,i',7jj
El hecho que el vrtice " sea adyacente con el vrtice + puede ser denotado como " f +.
En la /eor.a de las categor.as una categor.a puede ser considerada como un multigrafo dirigido, con
los ob9etos como vrtices y los morfismos como aristas dirigidas.
En ciencias de la computacin los grafos dirigidos son usados para representar mquinas de estado
finito y algunas otras estructuras discretas.
6na relacin binaria R en un con9unto % es un grafo dirigido simple. 4os vrtices a, b en % estn
conectados por una arista dirigida ab si aRb.
.24
Ing. Carol Rojas Moreno
:I:LIOGRAFIA
N AUTOR TITULO EDITORIAL
"
M8]$0E( $<6!-$%, -uis
,undamentos de Programacin Editorial Lc<ra@EYill, :olombia, +##&.
+
%$,,8 -E::$, Eduardo /urbo :II Lundigraf, -imaEPer;, +###
Ing. Carol Rojas Moreno
.25
.2*
Ing. Carol Rojas Moreno
UNIDAD N 04
FICHEROS (ARCHIVOS)
COMPETENCIA DE LA UNIDAD
!"#$ $l trmino dela unidad se espera que el alumno elabore programas computacionales usando un tipo
de almacenamiento de datos pero ya no temporales, en formato texto.
P%&% '"#$ Para permitir la me9or manipulacin y modificacin de los datos almacenados, y as. conocer las
primeras formas de almacenamiento computacional.
P(& '"#$ Esto le permitir valorar el almacenamiento de datos en formatos permanentes que
posteriormente se reemplazarn por registros y tablas en asignaturas posteriores.
C)*($ (e mantiene el uso de mdulos de programa y de librer.as de cabecera para programas
computacionales invocando a ficheros de almacenamiento.
Ing. Carol Rojas Moreno
.2+
FICHEROS (ARCHIVOS)
INTRODUCCION
$l conocer el uso de estructuras de datos como formas de almacenar informacin, se encuentra la dificultad
de que dicho almacenamiento es temporal, es decir en tiempo de e9ecucin del programa computacional.
8tra tcnica de almacenar los datos pero que perduren con los cambios realizados sobre los mismos, se
denomina ,icheros =$rchivos>.
Para utilizar los ,icheros, es necesario conocer los conceptos de campos, registros, base de datos, que
sirven para manipular los datos, es decir registrarlos, eliminarlos, modificarlos, los cuales permaneceran
almacenados permanentemente en el computador.
Existen tipos para acceder a los archivos, de manera secuencial =de inicio a fin del fichero>, y de manera
aleatoria =acceden a cualquier parte del archivo>.
.2,
Ing. Carol Rojas Moreno
+IC,EROS BARC,ICOSD
1+ F.0L4&(8 (A&0L.6(8)
Existen programas que traba9an con informacin almacenada en memoria principal, pero no es apropiado por
que2
E -os datos con los que necesita traba9ar el programa son demasiado grandes =ocupan mucha memoria> para
que entren en la memoria principal.
E !nteresa mantener la informacin despus de cada e9ecucin, por eso se necesita utilizar datos procedentes
de otros programas =editores, etc.>, o generar datos para que puedan ser utilizados por otros programas.
Para estos casos se necesitan ficheros para contener la informacin en memoria secundaria =disco duro, cds,
etc.>.
2+ C(2041/(8 :%8.0(8
CAMPO
El campo es la unidad minima de informacin de un registro. Es un item de campos elementales como
nombre, numero de empleados, ciudad, etc.
-os caracteres se agrupan en campos de datos.
(e caracteriza por su tamano o longitud y su tipo de dato, por lo general se supone como longitud fi9a.
E9emplo2
Ca#,os
No#'re Direccion Fec(aNaci#ien"o
-os datos contenidos en un campo pueden dividirse en subcampos.
E9emplo para el campo fecha2
7 I 7 > + 7 7 F
Dia Mes Ano
REGISTRO
Es una coleccin de informacin por lo general relacionada a una entidad en particular.
-os registros organizados en campos se llaman registros logicos.
E9emplo2
E#,lea!o
Pueden ser todos de longitud fi9a, es decir para el e9emplo anterior, los registros empleados pueden contener
el mismo n;mero de campos2 nombre, fecha de nacimiento, direccion, etc.
Ing. Carol Rojas Moreno
.2-
No#'re Direccion Fec(aNaci#ien"o
FICHERO
Es una coleccin de registros relacionados entre si, con aspectos en comun y oranizados para un proposito
especifico.
E9emplo2
Fic(ero3 Clase !e Al%#nos
:ASE DE DATOS
Es una coleccin de archivos que contienen datos relacionados y se acceden a traves de un con9unto de
programas.
En :II un fichero es simplemente un flu9o externo que se puede abrir para entrada =dando lugar a un "lu&o
de archivo de entrada>, para salida =dando lugar a un "lu&o de archivo de salida> o para entradaEsalida
=archivo o fichero de entradaEsalida o archivo de E?(>.
6na biblioteca en :II que proporciona JfuncionesK y operadores para el mane9o de ficheros es la biblioteca
"stream.
kinclude [fstreamV
3+ D49.2.0.)2M A14&/"&% F C.4&&4 54 F.0L4&(8+
'eclaracin de #ariables de tipo (Fichero(:
ifstream nombrefichero; // Para ficheros de entrada
ofstream nombrefichero; // Para ficheros de salida
)pertura de Ficheros de *exto:
+-a lectura y la escritura en un archivo de texto se puede realizar directamente con los operadores [[ y VV al
igual que se realiza sobre los flu9os estndares cin y cout.
.3/
Ing. Carol Rojas Moreno
====== Maria Lo,e? C%?co +=>
++++++ N%an Sanc(e? Real >EH
Co!igo No#'re Direccion
IIIIII Pa'lo So"o Real +=*
EEEEEE L%is Men!e? Ancas( FGI
Regis"ro3
// Apertura para Lectura
in.open(nombrefichero);
// Apertura para Escritura(borra el contenido si lo hubiera)
out.open(nombrefichero);
// Apertura para aadir datos al final
out.open(nombrefichero,ios::app);
// Apertura para Lectura y Escritura
in.open(nombrefichero,ios::in|ios:: out);
// Apertura para Lectura y Escritura
out.open(nombrefichero,ios::in|ios:: out);
)pertura de Ficheros ,inarios:
/iene la informacin tal cual est en memoria, es decir, sin convertirla a texto, -a manera de leer y escribir en
ficheros binarios consiste en utilizar las funciones read+- y .rite+-.
// Apertura para Lectura
in.open(nombre,ios::binary);
// Apertura para Escritura(borra el contenido si lo hubiera)
out.open(nombre,ios::binary);
// Apertura para aadir datos al final
out.open(nombre,ios::binary| ios::app);
// Apertura para Lectura y Escritura
in.open(nombre, ios::binary |ios::in | ios:: out);
// Apertura para Lectura y Escritura
out.open(nombre, ios::binary |ios::in | ios:: out);
/ierre de "icheros.
6n fichero anteriormente abierto y con un descriptor asociado a l debe ser cerrado con el fin de liberar los
recursos asociados a l de la siguiente forma2
nombrefichero.close()
Ing. Carol Rojas Moreno
.3.
E9emplo "2 :rear $rchivos".cpp =para crear un fichero llamado Je9emplo.txtK>
D4/400.)2 54 9.2 54 9.0L4&( F (/&%8 9"20.(248+
-a funcin eof=> que devuelve /&"4 si se ha alcanzado el final del fichero y falso en cualquier otro caso.
E9emplo+2 -eer el archivo creado Je9emplo.txtK.
.32
Ing. Carol Rojas Moreno
#include<iostream>
#include <fstream>
using namespace std;
void main()
{
ofstream fichero("ejemplo.txt"); //Fichero de salida
fichero << "Hola" << endl;
fichero << "Adios" << endl;
fichero.close();
system("pause");
}
#include<iostream>
#include <fstream>
#include <iostream>
using namespace std;
void main()
{
fstream fichero; // Declaracion de la variable fichero
char texto[200];

fichero.open("ejemplo.txt", ios::in); // Abrir para lectura
fichero >> texto; // Leer una primera linea
while (!fichero.eof()) // Mientras nos sea final
de fichero
{ cout << texto << endl; // Mostrar lo leido
fichero >> texto; // Vovlver a leer
}
fichero.close(); // Cerrar Fichero
system("pause");
}
Eje#,lo =3 Lec"%raEscri"%ra !e Fic(eros3 Una Agen!a !e TelOAonos
#include <fstream> // Biblioteca para el manejo de ficheros
#include <iostream> // Biblioteca para la entrada-salida estndar
#include <cstdlib> // Biblioteca estndar de C
using namespace std;
// Ejemplo de una agenda de telfonos con toda la informacin en
disco.
//CONSTANTES
const char FINCAD = char(0);
const int MAXCAD = 80;
const int ENTER = '\n';
const char SP = ' ';
//TIPOS
typedef char TCadena[MAXCAD+1]; // MAXCAD caracteres + FINCAD
struct TPersona
{
TCadena nombre;
TCadena apellido1;
TCadena apellido2;
int telefono;
};
// CABECERA DE PROCEDIMIENTOS Y FUNCIONES
char menu();
void pausa();
void borrar_pantalla();
bool confirmar_salida();
void LeerPersona(TPersona &p);
void EscribirPersona(TPersona p);
// Algoritmos de Manejo de Ficheros de Texto
void insertarPersonaTXT(TCadena nombreFichero, TPersona p);
void listarAgendaTXT(TCadena nombreFichero);
void LeePersonaFicheroTXT(ifstream &fichero, TPersona &p);
void EscribePersonaFicheroTXT(ofstream &fichero, TPersona p);
// Algoritmos de Manejo de Ficheros Binarios
void insertarPersonaBIN(TCadena nombreFichero, TPersona p);
void listarAgendaBIN(TCadena nombreFichero);
void LeePersonaFicheroBIN(ifstream &fichero, TPersona &p);
void EscribePersonaFicheroBIN(ofstream &fichero, TPersona p);
// PROGRAMA PRINCIPAL
int main()
{
TPersona p;;
char opcion;
int num;
bool fin,encontrado;
TCadena nomFich;
fin = false;
do
{
borrar_pantalla();
opcion = menu();
Ing. Carol Rojas Moreno
.33
switch(opcion)
{
case 'A': cout << "Nombre del Fichero: ";
cin >> nomFich;
LeerPersona(p);
insertarPersonaTXT(nomFich,p);
break;
case 'B': cout << "Nombre del Fichero: ";
cin >> nomFich;
LeerPersona(p);
insertarPersonaBIN(nomFich,p);
break;
case 'C': cout << "Nombre del Fichero: ";
cin >> nomFich;
listarAgendaTXT(nomFich);
break;
case 'D': cout << "Nombre del Fichero: ";
cin >> nomFich;
listarAgendaBIN(nomFich);
break;
case 'X': fin = confirmar_salida();
break;
}
if (!fin)
{
pausa();
}
} while (!fin);
pausa();
return 0;
}
// IMPLEMENTACIN DE PROCEDIMIENTOS Y FUNCIONES
void pausa()
{
system("PAUSE");
}
void borrar_pantalla()
{
system("CLS");
}
char menu()
{
char op;
cout << "AGENDA EN FICHERO" << endl;
cout << "-----------------" << endl;
cout << "Autor: <Apellidos> <Nombre>" << endl;
cout << "A. Insertar Persona TXT" << endl;
cout << "B. Insertar Persona BIN" << endl;
cout << "C. Listar TXT" << endl;
cout << "D. Listar BIN" << endl;
cout << "X. Salir del Programa." << endl;
cout << endl;
.34
Ing. Carol Rojas Moreno
cout << "Introduzca Opcin:";
cin >> op;
op = toupper(op);
while( ((op<'A') || (op>'D')) && (op!='X') )
{
cout << "... OPcin Incorrecta ..." << endl;
cout << endl;
cout << "Introduzca Opcin:";
cin >> op;
op = toupper(op);
}
return op;
}
void LeerPersona(TPersona &p)
{
cout << "Nombre : " ;
cin >> p.nombre;
cout << "Apellidos1: " ;
cin >> p.apellido1;
cout << "Apellidos2: " ;
cin >> p.apellido2;
cout << "Telfono : ";
cin >> p.telefono;
}
void EscribirPersona(TPersona p)
{
cout << "Nombre : " << p.nombre << endl;
cout << "Apellidos : " << p.apellido1
<< " " << p.apellido2 << endl;
cout << "Telfono : " << p.telefono << endl;
}
bool confirmar_salida()
{
char car;
cout << "Est seguro de salir (S/N)?";
cin >> car;
car = toupper(car);
return (car=='S');
}
// Algoritmos de Manejo de Ficheros de Texto
void insertarPersonaTXT(TCadena nombreFichero, TPersona p)
{
ofstream out;
out.open(nombreFichero,ios::app);
// Abro el fichero para aadir
if (out.bad())
{ // El fichero no existe ... lo creo
out.open(nombreFichero);
}
EscribePersonaFicheroTXT(out,p);
out.close();
}
Ing. Carol Rojas Moreno
.35
void listarAgendaTXT(TCadena nombreFichero)
{ ifstream in;
TPersona persona;
in.open(nombreFichero);
if (in.bad())
{
cout << "Error al abrir el fichero: "
<< nombreFichero << endl;
}
else
{
LeePersonaFicheroTXT(in,persona);
while (!in.eof())
{
EscribirPersona(persona);
LeePersonaFicheroTXT(in,persona);
pausa();
}
in.close();
}
}
void LeePersonaFicheroTXT(ifstream &fichero, TPersona &p)
{
fichero >> p.nombre;
fichero >> p.apellido1;
fichero >> p.apellido2;
fichero >> p.telefono;
}
void EscribePersonaFicheroTXT(ofstream &fichero, TPersona p)
{
fichero << p.nombre << SP;
fichero << p.apellido1 << SP;
fichero << p.apellido2 << SP;
fichero << p.telefono << endl;
}

// Algoritmos de Manejo de Ficheros Binarios
void insertarPersonaBIN(TCadena nombreFichero, TPersona p)
{
ofstream out;
out.open(nombreFichero, ios::binary | ios::app); // Abro el
fichero para aadir
if (out.bad())
{ // El fichero no existe ... lo creo
out.open(nombreFichero);
}
EscribePersonaFicheroBIN(out,p);
out.close();
}
.3*
Ing. Carol Rojas Moreno
void listarAgendaBIN(TCadena nombreFichero)
{
ifstream in;
TPersona persona;
in.open(nombreFichero, ios::binary);
if (in.bad())
{
cout << "Error al abrir el fichero: " << nombreFichero << endl;
}
else
{
LeePersonaFicheroBIN(in,persona);
while (!in.eof())
{
EscribirPersona(persona);
LeePersonaFicheroBIN(in,persona);
pausa();
}
in.close();
}
}
void LeePersonaFicheroBIN(ifstream &fichero, TPersona &p)
{
fichero.read((char *)(&p),sizeof(TPersona));
}
void EscribePersonaFicheroBIN(ofstream &fichero, TPersona p)
{
fichero.write((char *)(&p),sizeof(TPersona));
}
4+ A&0L.6(8 S40"420.%,48
En estos archivos, la informacin slo puede leerse y escribirse empezando desde el principio del archivo.
-os archivos secuenciales tienen algunas caracter.sticas2
". -a escritura de nuevos datos siempre se hace al final del archivo.
+. Para leer una zona concreta del archivo hay que avanzar siempre, si la zona est antes de la zona
actual de lectura, ser necesario lretrocederl el archivo.
&. -os ficheros slo se pueden abrir para lectura o para escritura, nunca de los dos modos a la vez.
En realidad : no distingue si los archivos que se usan son secuenciales o no, es el tratamiento que hagamos
de ellos lo que los clasifica como de uno u otro tipo.
Existen archivos que se comportan siempre como secuenciales, por e9emplo los ficheros de entrada y salida
estndar2 stdin, stdout, stderr y stdaux.
6n caso especial es stdaux, que suele ser el puerto serie. /ambin es un archivo secuencial, con respecto al
modo en que se leen y escriben los datos. (in embargo se un fichero de entrada y salida.
O&542%& 9.0L4&(8 840"420.%,48
$ veces es necesario ordenar el contenido de un fichero secuencial, ya sea de longitud de registro variable o
constante.
> A,-(&./*( 54 *4G0,% 2%/"&%,
En cuanto a los ficheros secuenciales, el mtodo ms usado es el de mezcla natural. Es vlido para ficheros
de tamaGo de registro variable.
Ing. Carol Rojas Moreno
.3+
Es un buen mtodo para ordenar bara9as de naipes, por e9emplo2 cada pasada se compone de dos fases. En
la primera se separa el fichero original en dos auxiliares, los elementos se dirigen a uno u otro fichero
separando los tramos de registros que ya estn ordenados. En la segunda fase los dos ficheros auxiliares se
mezclan de nuevo de modo que de cada dos tramos se obtiene siempre uno ordenado. El proceso se repite
hasta que slo se obtenga un tramo.
B+ A&0L.6(8 54 A0048( A,4%/(&.(
(on ms verstiles, permiten acceder a cualquier parte del fichero en cualquier momento, como si fueran
arrays en memoria. -as operaciones de lectura y?o escritura pueden hacerse en cualquier punto del archivo.
En general se suelen establecer ciertas normas para la creacin, aunque no todas son obligatorias2
". $brir el archivo en un modo que permita leer y escribir. Esto no es imprescindible, es posible usar archivos
de acceso aleatorio slo de lectura o de escritura.
+. $brirlo en modo binario, ya que algunos o todos los campos de la estructura pueden no ser caracteres.
&. 6sar funciones como fread y f@rite, que permiten leer y escribir registros de longitud constante desde y
hacia un fichero.
'. 6sar la funcin fseeZ para situar el puntero de lectura?escritura en el lugar apropiado de tu archivo.
O&542%& 9.0L4&(8 54 %0048( %,4%/(&.(
En el caso de ficheros de acceso aleatorio con tamaGo de registro variable, se tratan como si fueran
secuenciales.
> A,-(&./*( !".0N8(&/
Es un algoritmo que implica un m.nimo de lecturas y escrituras en el fichero, y preferentemente, que stas
operaciones estn los ms prximas posible entre si. %esulta muy costoso, en trminos de tiempo de
e9ecucin, hacer muchas lecturas y escrituras en disco, y ms si los puntos donde se realizan estn muy
separados entre ellos.
.3,
Ing. Carol Rojas Moreno

You might also like