Está en la página 1de 289

'

-,''

de

' " -', 'F-Ult

rij'-Il i'g.E '

programacin

a-\ll
| -t-i-J'
lIJt
./,ms
lgditm
codifi cdo
oa_'

,'''',

:Yr{r'lljjg3rye"

ffiAflffi

"' " ''ieardo. Mreelo Villalobos

ffi

de

d# fl"H#rtfiws
ffirwgilarraffi#ilwre

ug rx

t*r

DATOS DE CATALOGACIN

BtBLtoGRrrcn

Fundamentos de Programacin c++ ms de 100 Algoritmos codificados


Autor: Ricardo Marcelo Villalobos
@ Derecho de

autor reservado

Empresa Editora Macro E.l.R.L.

O Derecho de edicin, arte grfico y diagramacin reservados


Empresa Editora Macro E.l.R.L.
Edicin a cargo de:
Empresa Editora Macro E.l.R.L.
Av. Paseo de la Repblica 5613

Miraflores

Lima - Per

(s11)71s-9700
hfi p /.1www.ed itoria lmacro.com

Dr

:rera edicin: Setiembre 2008 - 1000 ejemplares

r:presin
SAGRAF S.R,L.
Jr. San

Agustn N" 612 - 624- Surquillo

lsBN Ns 978-603-4007 -99-4


Hecho el Depsito Legal en la Biblioteca Nacional del per Ne 200g-11702

Prohibida la reproduccin parcial

o total, por cualquier medio o mtodo de

autorizacin de la Empresa Editora Macro E.l.R.L.

este libro sin previa

tDctos.del Autor

Ricardo Marcelo Villalobos


:':fesional de sistemas y contabilidad, con mas de 10 aos de experiencia en Tl, ha participado como
:sesor y desarrollador en proyectos de software para diversas empresas privadas y pblicas del pas

::o

Minera del Hill, Aruntani, Verkaufen, MINSA, IPD ytransnacionales como Magna Rosseta Ceramica
- ','RC utilizando sus conocimientos de contabilidad y de ingeniera de software en el anlisis y diseo de

.:-:ware con RUP, UML y Patrones de arquitectura y diseo de software con lenguajes.lava, .NET y PHP
, :ase de datos Oracle, SQL Server, MySQL y PostgreSQl.

{nde su experiencia como docente en la Universidad Nacional de lngeniera (UNl-FllS -

CEPS-UNl),

-stituto San lgnacio (lslL) y capacitaciones para empresas (Telefnica del Per, FAP, La Caja de Pensiones
'.' litar Policial, ALPECO, Banco de Materiales entre otros).

ldems participa como expositor en universidades e institutos (Universidad Nacional de lngeniera

:EPS-UNl, Universidad Nacional de Trujillo, Universidad Cesar Vallejos de Trujillo, Universidad Nacional
-cs Faustino Snchez Carrin de Huacho, lnstituto San Agustn, lnstituto Jos Pardo, lnstituto Manuel
Seoane Corrales, lnstuto La Reyna Mercedaria)

'la escrito libros, artculos y

manuales de desarrollo de software (Libro de Visual Basic Nivel lll


:omponentes, Libro de Oracle 10g, Manuales de VB.NEI ADO.NEI, POO.NET, Access, Java POO, PHP
:undamentos, PHP POO).

in el 2008

es invitado por la Empresa Editora Macro para formar parte del staff de escritores y sale a la
rz 4 obras relacionado a los primeros pasos de la lngeniera de software (Libros de Fundamentos y mas
de 100 Algoritmos con Visual Basic, Java, C++ y C#).

revia

ffiruflr'x#ffiffweffiff*ww

#w ffirw6rffisw&##$qewry

t**

Prlogo
Como no recordar las primeras clases de Algoritmo y la ilusin de aprender a programar esta obra plasma
los primeros pasos que todo estudiante de la carrera de lngeniera de Sistemas, Software e lnformtica
debe conocer para empezar a analizar, disear y codificar sus primeros algoritmos y pasar la barra que
todo programador debe dominar que son las estructuras de control de flujo tales como if, switch (c++,
;ava y c#) y select case (vb), while y for.

!s importante en toda la carrera que usted sepa utilizar las estructuras de control por que es la base
le todos los cursos afines, este libro contiene 9 captulos con ms de 100 algoritmos resueltos y
80 propuestos y al finalizar de leer la obra estoy seguro que usted formar parte del mundo de los
Jesarrolladores de software.
Captulo 1: Fundamentos de programacin
Aqu encontrar los conceptos generales de arquitectura de la pc, hardware, software, lenguajes cie
crogramacin, metodologa de algoritmos, diagramas de flujo, pseudocodigo, variables, constantes,
nstrucciones entre otros.
Captulo 2: Estructura secuencial
Este captulo conene 10 algoritmos bsicos para entender y resolver en forma simple los primeros
problemas de entrada, proceso (secuencial) y salida de los clculos realizados.

Captulo 3: Estructura selectiva simple y doble


Este captulo

tiene 15 algoritmos con la estructura ms utilizadas en la solucin de problemas llamada

if.

Captulo 4: Estructura selectiva mltiple


Para evitar de resolver problemas en forma anidada usando il aqu en este captulo ene la solucin
donde encontrar la forma mas fcil de solucionar problemas sin el uso de if anidados y engorrosos.

Captulo 5: Estructura repetitiva mientras


Para resolver procesos repetitivos aqu tiene 15 problemas que le ensear a entender y dominar
estructura repetiva y aplicar los conceptos de contador, acumulador; bucles entre otros.

la

Captulo 5: Estructura repetitiva para


Muchas veces es mas fcil resolver procesos repetivos usando Ia estructura for aqu encontrar 15
problemas resueltos muchos de ellos son problemas del capitulo anterior con la finalidad analizar su
simplicidad.
Captulo 7: Estructura de datos Arreglos (vectores y matrices)
Uno de los temas mas utilizados en el manejo de colecciones de datos son los arreglos (arrays), este
capitulo explica el concepto y resuelve problemas de arreglos, algoritmos de bsqueda y ordenacin de
datos.

Captuio 8: Cadena de caracteres


No todo es manejo de nmeros en la solucin de problemas, este captulo explica y resuelve problemas
con cadena de caracteres (texto).

Captulo 9: SubAlgortimo (Procedimientos y Funciones)


Una de las mejores recomendaciones para resolver

y reulizar procesos es el concepto de divide y

vencers, este captulo ensea como separar un problema en varias partes reutilizables.

ffie$ffru# ffiKeffiffiffww

ffiffi#ffitrffiffiffiffifiryrc

*+

Algoritmos con G++

ndice
Captulo

Fundamentos de Programacin
2I

Arquitectura de una

computadora

........22
23
24

Sistemas de Numeracin

Conversin binario a decimal

Representacin de texto en el sistema

binario

Representacin binaria de datos no numricos ni de texto


Los programas (software) .............

.............. 25

......25
25
26

Traductores del lenguaje de programacin

27

Ciclo de vida de un software

Algoritmo

28

Caracterscas que deben de cumplir los algoritmos obligatoriamente

28

Caracterscas aconsejables para los algoritmos

29

Fases en la creacin de algoritmos ....

29

Herramientas de un Algoritmo ...

29

nstrucciones ........

..... 31

Comentarios ........

32

Palabras reservadas ............

32

ldentificadores

33

33

Constantes ..........

34

Tipo de datos simples (primitivos) ....

34

Tipo de datos complejos (estructurados)

36
37

Control de flujo

40

Captulo 2
Estructura Secuencial
Estructura secuencial
Problema 01
Problema 02
Problema 03
Problema 04

Problemas Propuestos .......

Captulo 3
Estructura Selectiva Simple y Doble

59
59

simple

doble

eroblema L5

... 69

74
78
79

Problema 22
............. 87

Problema 23

Captulo 4
Estructura Selecva Mltiple
lntroduccin

....

.........

Estructura selecva mlple ............


Estructura selecva mlple usando rangos

...... es
...... 95
95

......97

97

101
103
105
107
109
1,L2
11.4
1.16

I20
I23
125
128
131

r37

Captulo 5
Estructura Repetitiva Mientras

139

lntroduccin

139
139

Acumulador ...........

t40
1.40
1.40

141.

14t
Problema 4L

1.42

Problema 42

t43

eroblema 43

1.45

rroblema 44
rroblema 45 ..........
rroblema 46 ..........

1.49

151
1,52

t54
156

Problema 51

157

Problema 52

159

Problema 53

1_60

Problema 54

1,62

Problema 55 .....

1.64

Problemas Propuestos

.......

.;......... t67

Captulo 5
Estructura Repetiva Para

169
169

Estructura repetiva Para

169

Estructura repetiva Para anidada

170
L70

Problema 57 ...........

L72

,'ruEd*ttrud$i66':66
173
175
176
178
179
181

184
185
187
189
190

192
194
197

199
199

204

200

20r
Recorrido por los elementos del Array
Problema 71
Problema 72

202

.207
Problema 75

209

Problema 79
Problema 80

236

Problemas Propuestos

Captulo 8
Cadenas de

237

juego de caracteres

237

238
Cadena de caracteres (String) .......

239

Operaciones con cadena

239

Concatenacin

239

Extraccin de cadenas (subcadenas)

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

24r

#iiffiii'#ffidiGfi.iG

252

Problemas Propuestos

26r

Captulo 9

SubAlgoritmos (Procedimientos y Funciones)

263

263

Procedimientos
............

.....264

parmetros

....265

Funciones
Paso de

.......264

Parmetros por valor

(entrada)

Parmetros por referencia (salida)

Problema 97

Problema 99..........
Problema 100........

........2Gs
266

..,... 283

.286

$.ii

gffi u$,ffi#in

gaFftl i
Fildamentos de Programacin
lntroduccin
En los primeros ciclos de toda carrera profesional relacionado a la lngeniera de Sistemas, los estudiantes
requieren entender, aprender y dominar los fundamentos de programacin para resolver problemas que
permitirn automatizar procesos usando la computadora.

Saber programar es la base de toda su carrera y para conseguir este objetivo he plasmado mi experiencia

de docencia de mas de L0 aos dedicado a la lngeniera de Sistemas, se que este libro le ayudara
resolver todas sus dudas y dominar las principales estructuras de programacin.

Este libro conene ms de 100 algoritmos resueltos y codificados en el lenguaje de C++ el padre
de fos
lenguajes de programacin en la actualidad.

ffi
\

tiffitg
' SElEfl

C
O

-1tW

r ,*i-)$s\\.-',,}\TJJ-

\\ tru/((-

A continuacin se describen los conceptos generales de los fundamentos de programacin.

Computadora
Es un aparato electrnico que recibe datos (entrada), los procesa (instrucciones denominado programa)
y devuelve informacin (salida), tambin conocido como Ordenador o PC (Personal Computer).

En la actualidad existen una variedad de computadoras, para diferentes

Computadora

Servidores

personal

prc:3s:os.

g#

Computadora

Porttil

PDA

Arquitectura de una computadora


Las computadoras enen dos componentes principales que son el hardware y el software que trabajan
en coordinacin para llevar a cabo sus objevos.

Hardware: Hard (Duro)

- ware (Componente);

ffi
,.,f"

representa la parte fisica de la computadora.

-l

-'Y

tu

s-:
:ih

q*

Software: Soft (Blando) - ware (Componente); representa la pa-::


programas), estos se encuentran almacenados en los compcre-:::'=
como memorias RAM, ROM, Discos Duros (HarC Disk\ e^t-e ::'3s
!.iiff;f :,'
irlllii:: i

,l' F'v
'

,, &

.,]

:A?
r;a;,

,ii,;.

Vind*** u,tt*

Office

s3

a;
:omputadora (los

::c^lputadora, tales

:':3'a rnas internos


:= :s :omo:

.
.

3CS
I \'1OS
(:tl ln
-_-vv

*: siguiente figura

muestra como la arquitectura de computadora y sus principales componentes en

coordinacin.

Proceso
CPU

(Central Processing Unit)


ALU

(Arithmetic Logic

nit)

Dispositivos de

Dispositivos de

Entrada
(rNPUr)

Salida

(ourPUr)
Memoria

Memoria
I nterna

Externa

't\

s.

W%
Unidades de medida de almacenamiento
La

memoria interna (RAM)y las memorias externas (Disco duro) almacenan informacin. La informacin

que se guarda y enende la PC esta en formato binario (0 - 1).

BIT (Blnary DigiT): El bit representan la unidad mnima de informacin, que almacena

una

computadora.
BYTE: Esta

compuesto por 8 bit (011100LL), entonces existe

28

= 256 combinaiiones diferentes (tabla de

cdigo ASCII).
Por lo general la informacin se representa por caracteres y cada carcter (nmero, letra, smbolo, etc.)
es un byte.
Para medir la informacin se utiliza mltiplos de bytes.
Byte

1B

Kilobyte

1KB

Megabyte

1MB

Gigabyte

1GB

Terabyte

1TB

8 bits

bytes
220 bytes
230 bytes
2ao bytes
210

1024 bytes

t024

KB

1024 MB
L024 GB

Sistemas de Numeracin
Todos los sistemas de numeracin tienen una base, que es el nmero total de sirnbo,cs
sistema. En el caso de la numeracin decimal la base es L0; en el sistema binario es 2.
El

Teorema Fundamental de la Numeracin permite saber el valor decimal Quc

q;e utiliza el

ie-e :-a :'rer

nmero

en cualquier base. Dicho teorema uliza la frmula:

Donde:

.
.

X,, Es el smbolo que se encuentra en la posicin nmero i del nmero que se est convirtiendo.
Teniendo en cuenta que la posicin de las unidades es la posicin 0 (la posicin -l- sera la del primer
decimal).
B: Es la base del sistemas que se utiliza para representar al nmero.

Por ejemplo si tenemos el nmero 153,6 utilizando el sistema octal (base ocho), el paso a decimal se
ha

ra:

1.82 + 5.81 + 3.80 + 6.8-1 = 64 + 40 + 3 + 6 + 8 : IOj,j5

Gonversin binario a decimal


El teorema fundamental de la numeracin se puede aplicar para saber el nmero decimal representado
por un nmero escrito en binario. As para el nmero binario 10011011011 la conversin se hara (los

ceros se han ignorado):

1.21

+ t-27 + 1.26 + L,24 + L.23 + 7-2- + :-2' = ,243

Gonversin decimal a binaro


El mtodo ms utilizado es ir haciendo divisiones sucesivas entre dos. Los restos son las cifras binarias.
Por ejemplo para pasar el 39:

39. 2 :
19 + 2:
9+ 2:
4+ 2 =
21+ 2:

19 resto

gresLol
4r'esto1
2 rest,o0
l rest.c 0
0 resto 1

Ahora las cifras binarias se toman al revs. Con lo cual, el nmero 100111 es el equivalente en binario
de 39.

ffi
Representacin de texto en el sistema binario
Puesto que una computadora no slo maneja nmeros, habr dgitos binarios que contengan informacin
que no es traducible a decimal. Todo depende de cmo se interprete esa traduccin.

Por ejemplo en el caso del texto, lo que se hace es codificar cada carcter en una serie de nmeros
binarios. El cdigo ASCII ha sido durante mucho tiempo el ms utilizado. lnicialmente era un cdigo que
utilizaba 7 bits para representartexto, lo que significaba que era capaz de codificar I27 caracteres. Por
ejemplo el nmero 65 (1000001- en binario) se uliza para la A mayscula.
Poco despus apareci un problema: este cdigo es suficiente para los caracteres del ingls, pero no para
otras lenguas. Entonces se aadi el octavo bit para representar otros 1-28 caracteres que son disntos
segn idiomas (Europa Occidental usa unos cdigos que no utiliza Europa Oriental).
Eso provoca que un cdigo como el 190

signifique cosas diferentes si cambiamos de pas. Por ello cuando


un ordenador necesita mostrar texto, tiene que saber qu juego de cdigos debe de ulizar (lo cual
supone un tremendo problema).
Una ampliacin de este mtodo de codificacin es el cdigo UNICODE que puede ulizar hasta 4 bytes
(32 bits) con lo que es capaz de codificar cualquier carcter en cualquier lengua del planeta ulizando el
mismo conjunto de cdigos.
Poco a poco es el cdigo que se va extendiendo; pero la preponderancia histrica que ha tenido el cdigo
ASC|l, complica su popularidad

Representacin bnaria de datos no numricos ni de texto


En el caso de datos ms complejos (imgenes, vdeo, audio) se necesita una codificacin ms compleja.
Adems en estos datos no hay estndares, por lo que hay decenas de formas de codificar.
En el caso, por ejemplo, de las imgenes, una forma bsica de codificarlas en binario es la que graba cada
pxel (cada punto disnguible en la imagen) mediante tres bytes: el primero graba el nivel de rojo, el
segundo el nivel de azul y el tercero el nivel de verde. Y as por cada pxel.

Por ejemplo un punto en una imagen de color rojo puro

11111111 00000000 00000000

Naturalmente en una imagen no solo se graban los pxeles sino el tamao de la imagen, el modelo de
colo;... de ahque representar estos datos sea tan complejo para el ordenador (y tan complejo entenderlo
para nosotros).

Los programas (software)


Un programa o software es un conjunto de instrucciones ordenadas para ejecutarse en una computadora
en forma rpida y precisa.

software se divide en dos grupos; software de sistema operavo y software de aplicaciones.


El proceso de escribir un programa se denomina programacin y el conjunto de instrucciones que se
utilizan para escribir un programa se llama lenguaje de programacin.
El

Lenguajes de programacion
Sirve para escribir programas y permite la comunicacin usuario (programador) versus rnaquina (pc).
Existen tres tipos de lenguajes de programacin:

Lenguaje de mquina: Programacin binaria, dificil de programar y dependiente de a rnaquina.


Lenguaje de bajo nivel (ensamblador): Usa smbolos nemotcnicos, necesita ser traducido al lenguaje
de mquina y sigue siendo dependiente.

Lenguaje de alto nivel: Cercano al lenguaje natural, empo de programacin relativamente corto, es
independiente de la mquina. A continuacin se muestra un plano de la evolucin de los lenguajes de
programacin de alto nivel.

rrw
Fortran

/
/
/
Basic

tffi

'l;

C++

Perl

-E
Oak

Traductores del lenguaje de programacin


Son programas que traducen los cdigos fuentes (programas escritos en un lenguaje de alto nivel)

cdigo mquina.
Los

traductores se dividen en:

lntrpretes:Traduccin y ejecucin secuencialmente (lnea por lnea), ejecucin lenta.


Compiladores: Traduce el cdigo fuente a programa objeto (ejecutable cdigo mquina). ejecucin
rpida.

Ciclo de vida de un software


La

construccin de un software por ms pequeo que sea, involucra las siguientes etapas:

Requerimiento: Enunciado del problema a resolver.


Anlisis: iQu? (entender el problema - entrada - proceso - salida)
Diseo: Cmo? (resolver el problema - algoritmo - diagrama de flujo

lmplementacin: Hacerlo? (Codificacin


Pruebas: Funciona? (Verificar

diseo de interfaz de usuario.)

Programarlo)

Comprobar)

Despliegue: i I nstalar? ( Distribuir el programa)

I)/---<--:/-')'-\
Problema _)
f,\\-\-/J

Requerimiento
Anlisis

Diseo

lmplementacin
Pruebas
Despliegue

#Xg#,ffiffi$iffiH:$t#

Algoritmo
Mtodo que describe la solucin de un problema computacional, mediante una serie de pasos precisos,
definidos y finitos.
Preciso: lndicar el orden de realizacin en cada paso.

Definido: Reper los pasos n veces y se obtiene el mismo resultado.


Finito: Tiene un nmero determinado de pasos.
La

solucin de un algoritmo debe describir tres partes:

Entrada: Datos que se necesita para poder ejecutarse.


Proceso: Acciones y clculos a realizar.

Salida: Resultado esperado.

La palabra algoritmo procede del matemtico rabe Mohamed lbn Al Kow Rizmi, el cual escribi sobre

los aos 800 y 825 su obra Quitad Al Mugabala, donde se recoga el sistema de numeracin hind y el
concepto del cero. Fibonacci, tradujo la obra al latn y la llam: Algoritmi Dicit.

El lenguaje algortmico es aquel que implementa una solucin terica a un problema indicando las
operaciones a realizar y el orden en el que se deben efectuarse. Por ejemplo en el caso de que nos
encontremos en casa con un foco malogrado de una lmpara, un posible algoritmo sera:

1.
2.
3.

Comprobar si hay foco de repuesto.


En el caso de

que las haya, sustituir el foco anterior por la nueva.

Si no hay foco de repuesto, bajar a comprar una nueva a la tienda y sushtuir lo malogrado por la
nueva.

Los algoritmos son la base de la programacin de ordenadores, ya que los programas de ordenador se

puede entender que son algoritmos escritos en un cdigo especial entendible por un ordenador.
Lo malo del diseo de algoritmos est en que no podemos escribir lo que deseemos, el lenguaje ha
utilizar no debe dejar posibilidad de duda, debe recoger todas las posibilidades,

Garactersticas que deben de cumplir los algoritmos obligatoriamente


. Un algoritmo debe resolver el problema para el que fue formulado, Lgicamente no sirve un
algoritmo que no resuelve ese problema. En el caso de los programadores, a veces crean algoritmos
que resuelven problemas diferentes al planteado.

Los algoritmos son independientes del lenguaje de programacin. Los algoritmos se escriben para

Los

poder ser ulizados en cualquier lenguaje de programacin.

o
.

algoritmos deben de ser precisos. Los resultados de los clculos deben de ser exactos, de manera
rigurosa. No es vlido un algoritmo que slo aproxime la solucin.
Los algoritmos deben de ser finitos. Deben de finalizar en algn momento. No es un algoritmo vlido
aquel que produce situaciones en las que el algoritmo no termina.

Los algoritmos deben de poder repetirse. Deben de permitir su ejecucin las veces que haga falta.
No son vlidos los que tras ejecutarse una vez, ya no pueden volver a hacerlo por la razn que sea.

$e*#*i$, i.fiiiliiffi.

.H

ffit#$."Prosramacin

Caractersticas aconsejables para los algoritmos


Validez: Un algoritmo es vlido si carece de errores. Un algoritmo puede resolver el problema para el
que se plante y sin embargo no ser vlido debido a que posee errores.
Eficiencia: Un algoritmo es eficiente si obtiene la solucin al problema en poco tiempo. No lo es si es
lento en obtener el resultado.

pmo: Un algoritmo es ptimo si es el ms eficiente posible y no contiene errores.

La bsqueda

de este algoritmo es el objetivo prioritario del programador. No siempre podemos garantizar que el
algoritmo hallado es el ptimo, a veces s.

Fases en la creacn de algoritmos


Hay tres fases en la elaboracin de un algoritmo:

1.

Anlisis. En esta se determina cul es exactamente el problema a resolver. Qu datos forman


entrada del algoritmo y cules debern obtenerse como salida.

2.
3.

Diseo. Elaboracin del algoritmo.

la

Prueba. Comprobacin del resultado. Se observa si el algoritmo obene la salida esperada para
todas las entradas.

Herramientas de un Algoritmo
Para expresar la solucin de un problema se pueden usar diferentes herramientas de programacin,
tales como:

.
.
.

Diagrama de flujo (Flow Chart).

DiagramaN-S(Nassi-Schneiderman).
Pseudocodigo.

Diagrama de flujo: Es una representacin grfica que utiliza smbolos normalizados por ANSI, y expresa
las sucesivas instrucciones que se debe realizar para resolver el problema.
Estas instrucciones no dependen de la sintaxis de ningn lenguaje de programacin, sino que debe servir
fcilmente para su transformacin (codificacin) en un lenguaje de programacin.

lnicio o Fin

Entrada o salida

O U
-*

ll

Proceso

O
tl-l

Decisin

SubAlgoritmo

conectores

Direccin(Flujo)

Teclado

7
C]

lmpresora

Pantalla

Entero
Cadena

Leer

h vod 2:o
r e "IMPAR"

Escribir r

Diagrama de Nassi Scheneiderman (N-S): Conocido tambin como el diagrama de Chapin, es como un
diagrama de flujo pero sin flechas y con cajas continuas.

1-

-'-U

L-

r + "IMPAR" I

: - ":-:-:

Escribrr r
Pseudocodigo: Permite expresar las instrucciones en un lenguaje comun (ingles, espaol, etc.) para
facilitar la escritura como la lectura de la solucin de un programa. No existen reglas para escrbr
pseudocodgo.

Inicio
/ /variables
n : Entero
T : Cadena
/ lsnLrada
Leer n
/

/Proceso

SinMod2:0Entonces
\\PAR//
r e

SiNo

T e "IMPAR"
Fi-n Si
/ / SaLi.da

Escribir
Fin

re
lnstrucciones
Son las acciones que debe realizar un algoritmo para resolver un problema.
Las

.
.
.
.
.

instrucciones ms comunes son las siguientes:


lnstruccin de inicio

/ fin

lnstruccin de asignacin.
lnstruccin de lectura.
lnstruccin de escritura.
lnstruccin de bifurcacin.

lnstruccin de inicio

| fin Representa el inicio y fin de un algoritmo.


Diagrama de Flujo

Pseudocodigo

lnicio

Fin

lnstruccin de asignacin: Representa la asignacin de un valor a una variable, se puede representar


tsando una flecha o el smbolo de igualdad, que es el smbolo usado por muchos de los lenguajes de
crogramacin.
Diagrama de Flujo

Pseudocodigo

N<-L0
N=L0

lnstruccin de lectura: Representa el ingreso de datos mediante un dispositivo de entrada, que muchas
, eces es representado por un smbolo de teclado.
Diagrama de Flujo
Leer

Pseudocodigo
Leer

Leer

lnstruccin de escritura: Representa la salida de la informacin mediante un disposivo de salida, puede


ser representado por el smbolo de entrada/salida, por smbolo de pantalla o impresora.
Diagrama de Flujo

Escribir

e@

Pseudocodigo
Escribir

Escribir

Escribir

lnstruccin de bifurcacin: Cambian el flujo del programa segn el resultado de ura expresin lgica
(condicin).
Pseudocodigo

Diagrama de Flujo

Si <Exp. Log> Entonces


<l

Instruccion

IrisLruccion

nstruccin>

SiNo

<lnstruccin>
htn 5r

Comentarios
Permiten describir, explicar y sirve como ayuda para recordar y entender las operaciones que se van
ejecuta

r.

Los comentarios no son instrucciones, por lo tanto al ser traducido el cdigo fuente a cdigo binario
(tiempo de compilacin), los lenguajes de programacin las ignoran.

Dependiendo el lenguaje de programacin los comentarios se escriben usando cierta simbologa, en este
libro usaremos el smbolo /l enlos pseudocodigos para colocar comentarios.

Ejemplo Pseudocodigo

//Variables
N : Entero
C++

//Variables
int N;
Palabras reservadas
Son palabras usadas por el lenguaje de programacin y que no deben ser

de variables, funciones entre otros.

Algunas de las palabras reservadas de C++

short, int, float, double, if, for, switch

"tilrzadas

como identificadores

l*:.i:'

ldentificadores
Son los nombres que asignamos a las variables, constantes, funciones, objetos entre otros y no pueden
coincidir con las palabras reservadas por que seria ambiguo y el compilador no lo entendera.
Por lo general los identificadores deben de cumplir las siguientes reglas:

.
.

Deben comenzar por una letra. Evite usar y tilde.


No debe coincidir con palabras reservadas del lenguaje de programacin que esta ulizando.

Error de Compilacin C++

/ Identrficador de Variabfe es if
/" y esta es palabra reservada
_:,t if;
Variables
Representa un espacio de memoria RAM que guarda un valor que servir para algn proceso en particular,
dicho valor puede ser modificado en cualquier momento.

variables tienen por lo general un identificador (nombre) y asignado el tipo de dato que se esta
utilizando, es decir si almacena un numero (entero), si es texto o alfanumrico (cadena), si es un valor
verdadero o falso (lgico) llamado tambin booleano.
Las

Ejemplo Pseudocodigo

irlVarlables

li : Entero
C++

'/Vart ables
'nt N;
Para asignarle un valor usamos el operador de asignacin que para algoritmos usaremos l
es el mas usado por los lenguajes de programacin.

Ejemplo Pseudocodigo

/nsgnax un valor
N * 10
/ /Caxbar su valor
N * 50
/

C++

/asLgtar un valor
N : 10;
/ /Canlat su valor
N - 50;
/

e sl =, qLts

Algcritxts,,con,O++

Constantes
Representa un espacio de memoria RAM que guarda un valor que servir para algn proceso en particula;
dicho valor permanece fijo es decir no puede cambiarse en la ejecucin del programa.
Las constantes tienen al igual que las variables un idenficador (nombre) y un po de dato.

Ejemplo Pseudocodigo

//Constantes

PI - 3 .I4159 :, R.eaL
/ /vrror ya no puede modificarlo
Pr * 3.14
C++

,//Constantes

const float PI - 3.r4159F;


/ /Error ya no puede modificarlo
Pi - 3.14,.

Tipo de datos simples (primitivos)


Al declarar una variable debemos indicar el tipo de dato que es permitrdo almacenar en dicha variable'
Cada lenguaje de programacin trabaja con una variedad de hpo de datos, por o general todos usan los
llamados tipos de datos primivos, que son los siguientes:

.
.
.
'

Entero
Real

Carcter
Lgico

Entero: Representan los nmeros enteros (no almacena decimales)


Ejemplo Pseudocodigo

/
/

/crear 1a variable
/ (idenEficador y tipo de dato)

N : Entero

/asgnar un valor

//(J^der.ruificador, operador de asignacin y valor)


N*15
En el lenguaje de C++ el tipo entero se puede trabajar con short, int y long, la diferencia esta que uno

almacenan rangos de nmeros diferentes, llamados tambin entero corto y entero largo.

Ejemplo C++

/tnluero cortb
short N;
/ /a,sgnar un valor (error de desbordamiento)
//Sobrepaso su limite (rango)
fJ : 45000
/ /antero largo
r nt N,'
rong N;
/ /asgnar un valor
\ : 4500099;
/

Real: Representan los nmeros reales (almacena decimales).

Ejemplo Pseudocodigo

/Crear la variable
// (identificador y tipo de dato)
/

l,:
/
/

Real

/a,signar un valor
/ (denLLficador, operador de asignacin y valor)

)i - 15.75
En el lenguaje de Java el tipo real se puede trabajar con float o double, la diferencia esta en la candad
de decimales que pueden almacenar, llamados tambin precisin simple y precisin doble.

/ /Preeisn simple
iloat N;
/ /Se redondea a L5.L23457
i
!\

1tr
a?A-a-4.
IJ,IL)AJ9IQ,

/ /PrecsLn doble
doubl e N;
//Lo aLmacena sin redondear L5.L2345678
N : 15.L2345618;
Caracter: Representa un carcter de cualquier po texto, nmeros, smbolo etc.
comillas simple.

Ejemplo Pseudocodigo

/ /Crear la varible
R : Caracter
/ /Asgnar un valor
R*'A'
R - ',9',
R - \*/

El

valor se coloca entre

Ejemplo C++

'Crear l-a variable


char R,'
'Asignar un valor
\n,
D _

\O'.

D -

\*r.

Lgico: Representan los valores Verdadero o Falso, conocido tambin como boolean, no se colocan
comillas simple ni dobles.
Ejemplo Pseudocodigo

/ /Crear la variable
L: Logico
//Asignar un valor
L * VERDADERO
L * FALSO
En C++ se

utiliza el tipo de dato llamado bool, para almacenarvalores Igicos.

Ejemplo C++

'Crear la variable
bool L;
/ /nsLgnar un valor
T
!

--

lv...
!rug,

T
!

_
-

F^t
IAI9, ^^.

Tipo de datos complejos (estructurados)


Son aquellos que estn constituidos por tipos de datos simples y definen una estructura de datos,
un ejemplo claro es el tipo cadena, que esta compuesta por un conjunto de caracteres (tipo de dato
ca

racte r).

Existe una variedad de tipo de de datos complejos, el enfoque de este libro es Algoritmos y solo tocaremos
dos pos de datos complejos que son cadena y arreglos, los libros que profundizan el tema se llaman
libros de Estructura de datos.

Cadena: Representa un conjunto de caracteres, internamente es una arreglo de caracteres, por lo general
se representa con comillas dobles.

Ejemplo Pseudocodigo

/Qrear 1a variable
R : Cadena
/ /Asgnar un valor
R - "ricardomarceloGhotmail.
/

com"

Operadores y Expresiones
Scn los que permiten realizar los clculos entre valores fijos y variables.
Los

.
.
.
.

operadores se clasifican por:


OperadoresAritmcos
OperadoresRelacionales
Operadores Lgicos
Operadores de Cadena

Operadores Aritmticos: Son aquellos operadores que permiten realizar las operaciones aritmticas, de
la misma forma como se utilizan en las matemticas.

0perador
+

Descripcin
Suma
Resta

Multiplicacin
Divisin
Divisin entera
Exponenciacin

Mod

Mdulo (resto de una divisin)

Dependiendo el lenguaje de programacin los operadores varan, o no implementan uno u otro operador,
en el caso de C++ implementa los siguientes.

Operador
+

escripcin
Suma
Resta

Multiplicacin
Divisin
%

Mdulo (resto de una divisin)

Para elevar a una potencia se usa pow(9.0, 2.0), dentro de los parmetros se coloca nmeros reales
(double) y para divisin entera use / pero con nmeros enteros.

Divisin Real

Divisin Entera

N = 9.0 /4.O

N=9/4 //retorna2

//retorna2.25

| ruritniub ctn c+i '"' "

'='

'

"

'

Expresiones Aritmticas

Equivalea

8x3
8

8+3o 3

tqurvalea

82

Equivale

8/3 = 2.666666

8\3=2

8^2 = 64

Equivalea

ug
94
ett

8*3=24

9^(1-lZ)=Z

Equivalea 9Mod4=1

Operadores Relacionales: Llamados tambin operadores de comparacin


valores guardan alguna relacin entre s.

y permiten evaluar si dos

Descripcin

Operador

lgualdad

Mayor que
Menor o igual que

>=

Menor que
Menor o lgual que

<=

Diferente

Dependiendo el lenguaje de programacin los operadores varan o no implementan uno u otro operadol
en el caso de C++ varia la simbologa en algunos.
Descripcin

Operador

lgualdad

Mayor que
Menor o igual que

>=

Menor que
Menor o lgual que

<=

Diferente
Expresiones lgicas (condiciones)

(Algoritmo)
8=3

Falso

8>3

Verdadero

3
8 <> 8

Verdadero

8 <=

Falso

Operadores Lgicos: Son aquellos operadores que se utilizan en combinacin con los operadores de
relacin.

Operador

Descripcin
Y Lgico

O Lgico

No

No Lgico

Y Lgico: Si p y q son valores lgicos, ambos deben ser verdaderos para que Y devuelva verdadero.

Expresiones lgicas (condiciones)

8>4
7 <>5

Y
Y

3=6
5>=4

Falso

Verdadero

O Lgico: Si p y q son valores lgicos, uno de ellos debe ser verdadero para que O devuelva verdadero.

Expresiones lgicas (condiciones)

(Algoritmos)

8>4
7 <>5

O
Y

3=6
5>=4

Verdadero
Verdadero

NO Lgico: Si p es un valor lgico, el operador NO invierte su valor.


Expresiones lgicas (condiciones)
NO (8 >
NO (7 <>

4)
7)

Falso

Verdadero

Para C++ se uliza la siguiente simbologa.

Operador

Descripcin

&&

Y Lgico

O Lgico

No Lgico

Operadoresde Cadena:Son aquellos operadores que permiten realiza operaciones con cadenas, por lo
general permiten unir cadena llamado tambin concatenar.
Operador

Descripcin

Unir cadenas

&

Unir Cadenas

Expresiones de cadena

"Ricardo"

+" " +"Marcelo"

"ricardomarcelo" & " @" & "hotmail.com

Ricardo Marcelo
ricardomarcelo@ hotmail.com

Control de flujo
Todos los lenguajes de programacin implementan estructuras para co.:'-.
programa, estas son:

o
.
.
o
o

' .

e-ecucin de un

Estructurasecuencial
Estructura selectiva simple y doble
Estructura selectiva mlple

Estructura repetiva mientras


Estructura repetiva para

En los siguientes

captulos se explican cada uno de las siguientes estructuras mencionadas.

Captulo 2

Estructura Secuencial
Estructura secuencial
Son aquellos algoritmos que ejecutan instrucciones en forma consecutiva, es decir uno detrs de otro,
hasta finalizar el proceso.

lnstruccion

lnstruccion 2

lnstruccion

Problema 0'l
Enunciado: Dado dos nmeros enteros, hallar la suma.
la solucin de este problema, se requiere que el usuario ingrese dos nmeros enteros y el
sistema realice el clculo respectivo para hallar la suma, para esto usar la siguiente expresin.

Anlisis: Para

Expresin Matemtica

s=n1+n2
Expresin Algortmica

s<-n1+n2

I salda
I e La suma (s).

Entrada

Dos nmeros (n1 y n2).

Diseo:
lnterfaz de Usuario

--''*.

--1,.,'

Algoritmos con C++


Algoritmo
Diagrama de Flujo

Inicio

Inicio

n2, s : Entero

n1

/Leer rtI , n2/

s-

n' + r)

/ascLb:r-

Pseudocodigo

//variables
n1, fr2, s : Enterc
/ /Enl-rada
Leer n1, n2
/

/Proceso

/SaLda

s. nL+n2
s

Fin

Escribir

Fin
Codificacin:

#include (iostream)
using namespace std;
void main (void)
/

/Varlables

inr

nl

n?

!!-

/Entrada

cout<<"Numero 1: "; cin>>n1;


cout<("Numero 2: ",. cin>>n2;
/ / Proceso
1 t

-r.

/ / saraoa
-^11laa"\tt.\

\rr

cout(("Suma

: "<<s<<"\n";

Problema 02
Enunciado: Hallar el cociente y el residuo (resto) de dos nmeros enteros.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese dos nmeros enteros y el
sistema realice el clculo respectivo para hallar el cociente y residuo, para esto use la siguiente expresin.

Expresin Algortmica

c-nL/n2
renlModn2

Entrada

Salida

.
.

Dos nmeros (n1 y n2).

Diseo:

El Cociente (c).
El Residuo (r).

lnterfaz de Usuario

, nxl

-",.,.-",...-:i:.,.,,,i

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio
fnicio
n1

//variables
o1, r.2, ct r : Entero

n2rcrr:Entero

/ /EnErada

/Leer nr, ,2/

!LU!

c*nl\n2
*nlModn2
/ /SaLida
Escribir c, r

/Escr:-bir c, r/

Fin

Fin
Codificacin:

#include {iostream.h)
void main (void) {

//Variables
int nl" , {\2 , c, r;
/ / Ejntrada

c<ut({"Numero 1r "; cin>>n1;


cout{{"Numero 2:
/ vroceso

c:n1/n2;
r=n1?"n2;
//salioa
cout{{endl;

: "({c<<endl
cout<("ReSiduo : "((r(<endl,'
COUt<</,COCiente

rt

/ /Proeeso

c*nl\n2
r-n1Modn2

rr!f

Problema 03
Enunciado: Dado el Valor de venta de un producto, hallar el IGV (I9%) y el Precio de venta.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese el Valor de venta del
producto y el sistema realice el clculo respecvo para hallar el IGV y el Precio de venta, para esto use la
srguiente expresn.
Expresin Algortmica

igvevv*0.1-9
PVevv+igv
Entrada

Salida

.
.

Valor de venta (vv).

El IGV (igv).
El Precio de Venta (pv).

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio
Inicio

//Variables
vv, igv, pv : Real
/

Leer vv

igv-vv*0.19
pvevv+igv
,/ /EscrlArr

VVr

-U\

:=:_

/nntrada

T ^^..
!CCL

a9V

.--.
VV

/Proceso

igv-vv*0.19

pvevv+igv
rgv, pv/

Fin

/ /SaLda
Escribir igv, pv

Fin

Codificacin:

#include (iostream>
el

r^
td

using namespace sld,.


void main (void) {

'ly';TJ,"frv,

PV,.

/ /Enr.rada

cout<("Vafor de venta: "; cin))vv;


/ /Proceso

igv=vv*0.19;
pv=vv+igv,.
/ lSalida
cout<</,\n,/;

cout<<"fGV: "<<igv<<"\n";
cout(<"precio de venta: "<<pv<<"\n",'
I
J

Problema 04
Enunciado: Hallar la potencia de a", donde

y n pertenecen a Z* (nmeros enteros positivos).

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese dos nmeros enteros
posivos a y

n, luego el sistema procesa y obene la potencia

p.

Expresin Matemca

P=an

=axaxax...xa
\-/-n factores

Expresin Algortmica

P<-^n
Entrada

Salida

Dos nmeros enteros (a, n).

La Potencia (p).

Diseo:
lnterfaz de Usuario

Algoritmos con C++


$
il'..'.-.'.'..-.
Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Tnicio

//variables
.-)-ut

at rt i Entero corto
p: Entero largo

/Pntrada
Leer a/ n
/

/ Leer a, r' /
p

/ /Proceso
pa^n

I]

/E=,.'c:':-

/satia

Escribir

Fin
l'r_n

Codificacin:

#rnclude <ioscream>
#include <math.h>
using namespace sLd;
void main (void) {
/

/VariabLes

olar]rrv!L

ir-rt

srrrl

p.'

/ /Entrada
cout{{"a: t',' cin>>a;
coul({"n: ",' cin)>n,'

/ / Proceso

p : (int)
/

pow ( (double)

a' (double) n) ;

/9aLda
cout((" \n";
cout(<"Potencia : "<<c<<" \::"

Problema 05
Enunciado: Hallar la radicacin e ..,6 , donde a y n pertenecen a Z* (nmeros enteros posivos).

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese dos nmeros enteros
positivos a y n, luego el sistema procesa y obtiene la radicacin
Expresin Matemtica

"

Expresin Algortmica

r-an(1/n)

r.

S,,pttl,l"ii'2:::,.Egt

L
Entrada

Salida

Dos nmeros enteros (a, n).

8Ec6nei.1

La Radicacin (r)

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Inicio

Inacro

,//Variables

n/r:Enterocorto
a : Entero largo

nrr:Enterocorto
a : Entero larqo
/

t^^-

/!L!rqr"/

r t a '

/ /Er:Lrada

T
r
!L!!

(1/n)

q,

1r

/Proceso

r * d ^ (l,in)

/zscrrbir

r7

/ /sataa
Escribir r

Fin

Fin
Codificacin:

#include <iostream>
#include <marh. h>
using namespace std;

void main(void)

/ / varaaores

int a;
short n, r,'

/ /Entrada
cout(("a: t'; cin)>a;
cout(("n: "; cin))n;

eros

/ / Praceso

r : po!(a,

(1

.A/n));

//Sal1da
cout<("\n",'
cout(("Radicacion:
)

"({r({"\n";

Problema 06
Enunciado: Dado un nmero de 5 dgitos, devolverel nmero en orden inverso.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero n, luego el
sistema procesa y obtiene el nmero inverso ni, realizando 4 divisiones sucesivas entre 10, para acumular
el residuo y el ltimo cociente.
1234s1 10
ai 1234 | 10

(^In

l7o

12t

@c

Entrada

Salida

Un nmero entero (n).

10

El

nmero inverso (ni).

Diseo:
lnterfaz de Usuario

Pseudocodigo

Diagrama de Flujo
I

nf ni,

r:

Inicio
//variables
n, ni, r: Entero largo

ni cio

Entero Ldrgo

reern

r. rLmod10
n * n \ 10
114

lU

r+nmod10
n - n \ 10
/^i
-;
rrr

\rrr

Ll

10

renmodl0
n - n \ 10
ni-(ni+r)

10

r+nmodlO
n . n \ 10
ni-(ni+r)

10

ni*ni+n

/nscribir ni7
Fin

/ /BErada
Leer n
/ /Proceso
r+rLmod10
n * n \ 10
ni*r*10
r-nmodlO
n * n \ 10
ni-(ni+r)*10
r+nmod10
n * n \ 10
ni. (ni+r)*10
r+omodlO
n - n \ 10
ni - (ni + r) * 10
renmodl0
n - n \ 10
*10
ni*(ni+r)
ni-ni+n
/ /sa:-iaa
Escribir ni
Fin

Codificacin:
n

include (iost-ream>

usrng namespace std;

void

main
/

(void)

/variables
rnt

tnLrT;

/ / Lintrada

cout{("Numero: "; cin})n;


,/

/ Proceso
*-^o_
I - ll

-j

!---o--

10;
10;
1n.

/ 10

ni : (ni +r)*
---o,
L
-

lL

-d

11

+ r\

11r

* 10;

1n.

n:n/
10;
ni: (nl
rlf

10;

10;

ni _ (ni
!

,-

10;

L!,

//5ar1da
cout{( " \n//;
cout<{"Inverso:

"<<ni(<"\n";

Problema 07
Enunciado: Determinar la suma de los N primeros nmeros enteros positivos (2.) use la siguiente
frmula.

N(N+1)
2

Anlisis: Para la solucin de este problema,

se requiere que el usuario ingrese un nmero entero positivo


n, luego el sistema procesa y obene la suma de los primeros nmeros enteros posivos hasta n.

Expresin Matemtica

,_N(N+1)
2

Expresin Algortmica

se(n*(n+1)l/2
Entrada

Salida

Nmero entero (n).

Suma (s).

r*'---T

$50fi

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio
Tnicio

//variables
n/ s : Entero corr.o

n,s:Enterocorto
,/

Leer

/ /EnErada

Leer

s - (n * (n + 1)) /
/E scribir

/Proceso

s + (n * (n * -))
/

/Sa]-da

Escribir
Fin

Fin
Codificacin:

#include (iostream)
using namespace std;

void

main

(void)

/ / Varlab les
i nl
arrL

n
rrf

c.
Jt

/ /Enlrada
cout<("Numero:

cin)>n,'

/ / Proceso

s:

(n * (n + 1)) / 2;

//SaIida
cout<<"\n",'
cout <<//Suma : "<<s<(" \n";
)

Captulo

2: Estructura Secuencial

Problema 08
Enunciado: Calcular el inters compuesto generado por un capital depositado durante cierta cantidad
de tiempo a una tasa de inters determinada, aplique las siguientes frmulas.
Jy =

(1+

r%)t.C

l=M-C
Monto (M):
Tasa de

Es la

suma del capital ms sus intereses producido en determinado tiempo.

inters (r%l:Es la ganancia que se obtiene por cada 100 unidades monetarias en cada periodo

de tiernpo.
Capital (C):

Es

todo aquello que se va a ceder o imponer durante algn empo para generar una ganancia.

lnters (l): Parte de la utilidad que obtiene el capitalista prestar su dinero.


Tiempo (t):

Es

el periodo de tiempo durante el cual se cede el capital.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el capital c y la tasa de
inters r, luego el sistema procesa y obene el inters ganado y el monto producido.

Expresin Matemca
y

(1+

r%),.C

Expresin Algortmica

m-((1+r/1O0ll^t)*c
Entrada

Salida

Capital (c)

Tasa de

Tiempo (t)

inters (r)

.
.

lnters (i).

Monto (m).

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inicio
c, rt L, 1, m : Real
/Leer

c, r, l/

n - ((1+r'100)^t)*c
i*m-c
LscfrDLr

Lf

Fan

//Variables
ct r, L, L, m :
/nntrada
Leer c, r, t
/

((L+r/100)^t)*c
i*m-c

/ /satia
Escribir i,

Fin

#include <ioslream)
#include <mat-h. h>
usi ng namespace sLd;
main

(void)

/ /Variables
float c.r,L,i,mi
/ /EnLrada
"; cin>>c;
cout({"Capital:
cout({"Tasa de interes: "; cin>>ri
cout<<"Tiempo: "; ci n))c,'
/ / DT^-^c^
/ / r , vuvuv

m: pow((1 + r / IOO), t) * c;
i : m - c;
/

/ SaLtda
cout<<"\n",'
cout<<" Interes : "<<i<<"\n";
cout<<"Monto : "<<m<<"\n" i

/Pxoceso

Codificacin:

void

Real

Problerna 09
Enunciado: Crear un programa para encontrar el rea de un Crculo, use

la

frmula:

A = n.12

rea (A):

Es

el rea del crculo.

Pl (n): Representa el valor constante pi (3.14159)

Radio (r): Es el radio del crculo

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el radio del crculo y el
sistema procesa y obtiene el rea del crculo.

Expresin Aritmtica
A = n.r2

Expresin Algortmica

A<-3.14159*r^2
Entrada

Salida

Radio (r)

rea (a).

Diseo:
lnterfaz de Usuario

Diagrama de Flujo

Ini ci

Pseudocodigo

Inicio

//Constantes
PI - 3.I4I59 : Real

PI:3.I4L59
/

/YariabLes

rt a :

Real

/ /Enl-rada

Leer r
a-PI*r^2

Escribir

/Proceso

a*PIxr^2
a

/ /satia
Escribir

Fin

Real

$ Algoritmos con G++

Codificacin:

#include diostream)
#include <math.h>
using namespace std,'
voiC main (vord) {
/ /ConsLante

const float' PI : 3.14159F;


/ /Varabl_es

fl^-r
ttwdL

d,

L,

/ /Ent,rada

couL(("Radio: "; cin))r,'


/ / Praceso

a: PI * pow(r , 2);
/ /saLida
cout<(" \n";

cout(("Area: "<<a<<"\n"i
l

Problema 10
Enunciado: Crear un programa que permita convertir una cantidad de segundos en horas, minutos y
segundos.
Para la solucin de este problema, se requiere que el usuario ingrese un tiempo expresado en
segundos y el sistema procesa y obene las horas, minutos y segundos restantes.

Anlisis:

Entrada

Salida

.
.
.

Tiempo en segundos (t)

Horas (h)

Minutos (m)
Segundos (s)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio
Inicio

//Constantes

HORA-360:Entero
MINUTO:60:Entero
t, h, m, s: Entero
/

LeerL

h-t\HORA
t-tModHORA
,m - I \ MINUTO
s * t- Mod MINUTO
/ Lscrlllrr

n, m, s/

Fin

HORA:360:Entero
MINUTO:60:Entero
//Variables
L, h, m, s : Entero
/ /nntrada
Leer t/ /Proeeso

h-r\HORA
t*tModHORA

m-t\rxuro

s-tModMINUTO

Fin
v

rn'

/satiaa

trscribir h, m,

Isollo,t
Codificacin:

#include (iostream)
using namespace std;
void

ma-in

(void)

/ lConstanles
const i.nl HORA:3600;
const int MINUTO : 60;
/ /varrab-Les
I ^r
rL/nrmrs;
L
rnL
- -.

/ / Y,nLrada

cout<<"Tiempo en segundos: "; cin>>l;


/ /Proceso
h=t/HORA,'
+L

rL

q UnD^.
O
llv!\n,

M:t/MINUTO;
s=te"MINUTO;
/ /Salida
cout<<"\n";
COUt(("HOra: "<<h<<"\n";
coul{("Mnuto : "<<m<<"\n";

couc<<"Segundo "<45(("\n"

Problemas Propuestos
Los siguientes

problemas le servirn para medir su aprendizaje, es importante que los resuelva.

Propuesto 0'l
Enunciado: Dado dos nmeros enteros (Z), aV b, hallar a + b y

b.

Propuesto 02
Enunciado: Dado dos nmeros enteros, determinar cuantos nmeros enteros estn incluidos en ellos.

Propuesto 03
Enunciado: Dada una cantidad de milmetros, expresarlo en la mxima candad de metros, el resto en
decmetros, centmetros, y milmetros.

Propuesto 04
Enunciado: Obtener el valor de c y d de acuerdo a la siguiente frmula'
L--

14a4

+3ba+b2
at

-b'

, (3c'+a+b)
o:4

Propuesto 05
Enunciado: Dado 4 nmeros enteros, obtener el porcentaje de cada uno en funcin a la suma de los 4
nmeros ingresados.

Propuesto 06
Enunciado: Hallar el rea y el Permetro de un Cuadrado.

Propuesto 07
Enunciado: Dada una candad de horas obtener su equivalente en minutos y segundos.

Propuesto 08
Enunciado: Convertir una cantidad de grados Fahrenheit a Celsius y kelvin'

Propuesto 09
Enunciado: Hallar el rea y el Permetro de un Rectngulo.

Propuesto 10
Enunciado: Convertir grados sexagesimales a centesima les.

Captulo

Estructura Selectiva Simple y Doble


lntroduccin
Vuchas veces tenemos que decidir y realizar una u otra tarea dependiendo de una condicin, en la
programacin existe una estructura que permite evaluar una condicin (expresin lgica que devuelve
verdadero o falso) y determina que instruccin o instrucciones se debe ejecutar si la condicin es
verdadera o si la condicin es falsa.
En este captulo usted aprender a resolver problemas que permitan evaluar condiciones lgicas, esta es
una de las estructuras bsicas y la ms ulizada en todo lenguaje de programacin.
A estas estructuras tambin se las conoce como estructura condicional, alternativas y de decisiones.

Estructura Selectiva simple


Evala una expresin lgica (condicin),
i

si es verdadero ejecuta una determinada instruccin

nstrucciones.

si

(Instruccion
<Instruccion

Ins truccion

Instrucci

on

Fin Si

Sintaxis C++

/vna instruccin
if (<trxp. Log.>)
<Instruccion 1>;
/ /Yaras instrucciones
if (<Exp. Log.>) {
<Instrucclon 1>;
(Instruccion n>;
/

<trxp. Log.> Entonces


1>
n>

-1

I:--'OO ll

etgoritmos con C++

Estructura Selectiva doble


Evala una expresin lgica (condicin), si es verdadero ejecuta una o varias instrucciones y si es falso
ejecuta otro grupo de instrucciones.

Si

/r\,^
\L^P.

^^ \/
Lw9.

Entonces

(Tnstruccion 1>
(Instruccion n)
SiNo

nstruccton
Ins truccion

Instrucclon

(Instruccion
(Instruccion

Ins truccion

Fin

1>

n>

si

Sintaxis C++

if (<Exp. Log.>) {
<Instruccion
(Instruccion
) else {
<Instruccion
<Instrucclon

1>;

n>;
I >;

n>;

Estructuras anidadas
Son aquellas estructuras que contienen una o ms estructuras, es decir esta permido colocar dentro de

una estructura otra estructura.

Exp. Log.
Exp. Log.

Instrucci on
Ins truccion

Instruccion
Ins truccion

Instruccion
Instruccion

Si <trxp. Log.> Entonces


Si <Exp. Log.> Entonces
<Instruccion 1>
<Instruccion n>
Fin Si
SiNo

Si <Exp. Log. > Entonces


(Instruccion 1>
<Instruccion n>
SiNo

<Instruccion
<Instruccion
Fin Si
Fin Si

1>

n>

Sintaxis C++

j.f (<Exp. Log.>) {


if (<Exp. Log.>) {
<Instruccion 1>;
(Instruccion n>;
l

) else {
if (<Exp. Log.>) {
<Instruccion 1>;
(Instruccion n);
) else {
<fnstruccion 1>;
(Instruccion n>;

Problema

11

Enunciado: Dado dos nmeros enteros diferentes, devolver el nmero Mayor.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese dos nmeros enteros
diferentes y el sistema realice el proceso para devolver el nmero mayor.
Expresin
Si n1 > n2
Si n2 > n1

=
=

n1 es Mayor
n2 es Mayor

Entrada

I .

Dos nmeros (n1 y n2).

Salida

Nmero Mayor (m).

lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inicio
n1

n2, m : Entero

,/reet nr,

n2

//Variables
nl, fl2, n
/ /BnLrada

Leer n1,
F

r:2

,n l

/ /Pxoceso

,t/

5r n1 > :.m . :Frn S-

ni
t

t:--=F'

Si n2

:_---'

lm-

fin Sr

n2

/ Escribir
trin

>

m * :lt

V
/

rt

/satiaa

Escribi:
Fin

ll-.-

111S

Estructura Selectiva Simple y Doble


Codificacin:

#i-nclude (iostream)

using namespace std;


void main (void) {
/,/Variabf es
int n1,n2,m-0;
/ / EnLrada

cout(("Numero 1:
cout(("Numero 2:
,1

cin)>n1;
cin>)n2;

,/Proceso
n2)
m = nl;

if (nl >
) F ln)

> nl\

n2;

/ /c I i /'l
^^11+//,t\
uvuu\\

\rr^t'

t'

cout({"Mayor: "<<m<("\n";
]

Problema 12
Enunciado: Determinar si un nmero entero es posivo, negativo o neutro.
Para la solucin de este problema, se requiere que el usuario ingrese un nmero entero y el
sistema verifique si es positivo, negativo o neutro.

Anlisis:

Expresin

Sin>0=POSITIVO
Sin<0=NEGATIVO
Sin=0>NEUTRO
Entrada

Salida

Nmero (n).

Resultado (r

_
_

POSITIVO
NEGATIVO
NEUTRO

Diseo:
lnterfaz de Usuario

Diagrama de Flujo

n : Entero
r : Cadena

Leer

Pseudocodigo

Inicio

Inicio

./

Algoritmo

/ /YarabLes
n : Entero
r : Cadena

/ /Enl-rada
Leer n

---l--".\-t"-

/ /Proeeso

SITIVO"

Sln>OEntonces
r ._ "POSITIVO"
Fin Si

>-.-..

Sln<0Entonces
r * "NEGATIVO"
Fin Si

,V
GATIVO,,

Srn:0Entonces
r - "NEUTRO"
Fin Si
EUTRO"

/satiaa

Escribir
/ nscribir r /
Fin
Codificacin:

#include {iost'ream)
#include <string>
using namespace std;
void main (void) {
,/,/Va

riables

inL

n;

c+vi

na

r.

/ / Entrada
cout(("Numero: "; cin>>n;
/ /Proceso
if (n > 0) i
r : '*POSITIVO";
)

.E'r-n

Captulo 3: .Estructura Selectiva Simple y Doble

if (n < 0){
r : '-NEGATIVO";
]

rt(n:=
' T:
l a

0){

l^

"NEUTRO",'

/ /sal lda
cout< < " \n-,.

cout<<"Resulcado : *<<r<<" \n";


i

Problema'13
Enunciado: Dado un caracter determinar si es una vocal.
Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un caracter y el sistema
verifica si es una vocal.
Expresin

c='a'vc=A'=VOCAL
Si c='e'vc='E'=VOCAL
Si

Si

c='i'vc='l'=VOCAL

Si

c='o'vc='O'+VOCAL

5i C='U'VC='U'=+VOCAL

Entrada

Salida

Caracter (c).

Resultado (r)

ES

NO

Diseo:
lnterfaz de Usuario

VOCAL
ES VOCAL

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inicio

/Yariabl-es
c : Caracter
r : Cadena

c: Caracter
r : Cadena

/nntrada
Leer c
/

l;;-'-

/ /Proc,eso

,V

]S

r * "NO trS

VOCAT

VOCAL"

Si c:'at O c:'A' Entonces


r - "ES VOCAL"
Fin Sr

tr ,---1
,V

Si c-'e' a c-'E' :ntonces


r - "ES VOCA "
Frn Sr

VOCAL,,

->--

F _---:1

Si c-'1'
r+
Fin Si

t-

lrF

"ss I VOCAL"

l>=

----<1
f

Ir*"Es ; VOCAL" l

Si c-'U'
Frn Si
/

f,rn

/satia

Es

Fin
/ zscrrbir r /

Si c:'o'
r. \\-.
fin Sr

t>=

F ,---:1

\\]

cribi r

tptulc,:3! .tbit*tt1rE:: sci',.@':$lmplq:tr:P obte


Codificacin:

#include <iostream)
#include <string>

:sing namespace std,.


void main (void) {
/,/ va rlabl es
char c;
string r = "";

/ /E'nLrada

cout{<"Caracter:

cin>)c;

/ / Proceso

r = "NO ES
:+t- \U
II

VOCAL",.

\-/d

--

-r : "ES

l,I I

(- ::

\nt\
A ) i
r

VOCAL"

if

1s :: 'e' ll c
r = "ES VOCAL"

]
:Fr^
1r
\u

\r,a

--

-r : "ES

; t^
rr
\u

r :

\^/
u

.t--

I I

(-]

VOCAL"

"ES

L l
I I

VOCAL"

if (q::
'u' ll C
r : "ES VOCAL"
)

/Salida

uvuL\\
^^11t//tt\

\rl^tt

cout(("Resu1tado

"<<r<4,'1nr,,.

Problema 14
Enunciado: Determinar si un nmero es mltiplo de 3 y 5.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero
entero
luego el sistema analiza y determina si es er nmero es mlplo de 3 y de 5.
Expresin
Si

nMod3=0^nMod5=0=
Sl ES MULTIPLO DE 3 y 5

SiNo

NO

ES

MULTIPLO DE 3 y 5

n,

fi*$f,itttt*.
Entrada

Salida

Nmero (n).

Resultado (r)

ES

NO ES MULTIPLO

MULTIPLO

Diseo:
lnterfaz de Usuario

Algoritmo
Inr

c.r o

n : Entero
r : Cadena
/

r * "ST ES

MIIT,TTPLO DE

3't

Leer

5' I I r . "NO ES M'"rLT.P-a lI

/ Escribtr

r/

Fin
Pseudocodigo

Inicio
//Variables
n : Entero
r : Cadena
/

/v,ntrada

/Proceso

Leer

SinMod3:0
r*"SIES
S rNo
r-"NOtrS
Frn Sr
/ /satiaa
Escribir r
Fin

YnMod5-0

Entonce

MULTIPLO DE

MULTIPLO DE

y5"
y5"

3 Y 5"

.9.: ut*

L
Codificacin:

=include <iostream>
+include <string>
-ising namespace std;
-.'crd main (void)
/ / Var

int

rables

n,'

r...,

^+-i'.L! rl19

/ / Elntrada

cout(("Nunero:

"; cin))n;

/ /Proceso

f (n 2 ?::
!-^
jr^lsf e

--

f
1

r :

n
\\T
Ja

ttNO

trc

^o-tr--

MITT TFTDT A

o)

nr
UL

2 vL trrr.
J
f

MUL?TPLO Dtr ? Y 52.

/Sa1da

uvul\\
^^\ir//tr\

\rr^rt.

cout<{"Resultado : "<<r(<"\n";

Problema 15
Enunciado: Determinar si un nmero entero es par o impar.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero entero
rego el sistema verifica si el nmero es par o impar.
Expresin
Si

nMod2=0=
PAR

SiNo
IMPAR

Entrada

Nmero (n).

Salida

Resultado (r).

PAR

IMPAR

Diseo:
lnterfaz de Usuario

n,

Algoritmo
Diagrama de Flujo

Pseudocodigo

fnicio
Inicio

//Variables
n : Entero
r : Cadena

n : Entero
r : Cadena
Leern

--r\

r----\__---l
Mod 2:C
-/

tMPAR"

L_

-lItt

/EnLrada
Leer n
/

/Proceso
SinMod2-0Entonces
r - "PAR"
/

r*,

/ zscrlbr r/

rNo

r *
Frn Si

"TMPAR"

/ /Sa]-i-da

Fin

trscribir
!'t-n

Codificacin:

#include <i-osLream>
#include <string>
using namespace stdi

void

main

(vord)

//Variabtes
int' n,'
string r;
/ / Lnttao,a
CoUt((/'Numero : ",. cin))n;
/ / ?roceso

if (n

%
!

2:=

}tt
DAD/' f'

lIr\

r : '*IMPAR";
I

/ /SaIida
cout(("\n",'
cout{("Resul-tado : "<{r(("\n";

Problema 16
Enunciado: Dado tres nmeros enteros, devolver el nmero mayor.
Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese tres nmeros enteros
^2 y n3 luego el sistema verifica y devuelve el nmero mayor.

I Salida
I . Nmero mayor (m).

Entrada

Tres nmeros (n1, n2, n3).

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Inici

n3, m : Entero
Leer

n1

, n2, n3

nl>n2
n2>n3

n1>n3

Escribir

n1,,

Pseudocodigo

Inicio
//Variables
fli, n2, n3 : Entero
/

/vnErada

Leer n1, fi2,


/

n3

/Proceso

Sr nl > n2 Entonces
Sr nl ) n3 Entonces
m-n1
S iNo
m*n3
trrn Sr
S rNo
Sr n2 > n3 Entonces
m*n2
S rhlo
m*n3
Fin Sr
Frn Si/ /satia
Escribir m
Fin
Codificacin:

#include (i-ostream)
using namespace std;
void main (void) {
/,/Variables
int nl,n2,n3,m;
/ / Entrada
cout(("Numero 1: *',' cin>>n1,'
cout(("Numero 2: "; cin>>n2,'
cout(('/\lumero 3: "i cin>>n3;
/

/Proceso

if (n1 > n2) I


if (n1 > n3){
m : n1;
]else{
m:n3;^
i
]else{
if (n2 > n3) {
m = n2;
ielse{ :
m n3,'
1

/ /SaLlda
cout(("\n";
cout(("Mayor : "<(m(("\n",'

l,S,0ohle

Problema 17
Enunciado: Dado un nmero, devolver el doble si el nmero no es par, caso contrario el triple.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero entero
luego el sistema verifica y devuelve el doble o el triple del nmero.
Expresin

Si -(n Mod 2 = 0)=

r=n*2
SiNo

r=n*3
Entrada

Salida

Nmero entero (n).

Resultado (r).

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio
Inicio

n, r:

//Variables
n

Entero

lL,

trn1-r

/ /ErrLrada

Leer
F

-G.1: ^. .-:>--

n*2

/ /Proeeso
Sr No(n Mod

Y*fi*2
S

/ /-t1scraDtr r
Fin

iNo

r*n*3
Fin Si
/ /SaLda
Escrlbir r

Fin

2:0) Entonces

n,

Codificacin:

#include <iostream>
usi ng namespace sud;

void main (void)

/ / vaf rab tes


inr

LtLv

r.

tLt

L I

/ /Entrada
cout(("Numero: "; cin>>n,'
/ / Proceso
%

if (l(n
)

else

!-

2 =:0)){
* ).
^ *
11

2.
J,

/ I SaLtda

couc(("\n",'

cout,(<"Resuf tado

: "<(r(("\n",'

Problema f8
Enunciado: Dado 3 nmeros, devolver los nmeros en orden ascendente.
Para la solucin de este problema, se requiere que el usuario ingrese tres nmeros (n1, n2
n3), luego el sistema verifica y devuelve los nmeros ordenados en forma ascendente.

Anlisis:

Primero se debe encontrar el nmero Mayo luego el nmero Menor y al final el nmero lntermedic
que es el resultado de Sumar los tres nmeros - (Mayor + Menor).
Entrada

Nmeros (n1, n2, n3)

I Salida
| . Nmeros

Diseo:
lnterfaz de Usuario

ordenados (ma, int, me)

iiiilliit1

y,,Sohl$

Algoritmo
Diagrama de Flujo

Ini ci

nl, n2, n3, mayor, rnter, menor: Entero


Leer nl,

n2, n3

n1>n2 Y n1>n

2>nl Y n2>n3
mayor:

mayor

n3

n2

mayor

n1

nI<n2 Y n1(n

n2(nl Y n2<n
menor

n3

menor - n2

menor - nl

, nZY

inter * (n1+n2+n3)-(mayor+menor)
redio,

Escribir mayor, inter,

menor

Pseudocodigo

Inicio
//variables
o1, fl2, D3, mayor/ inter,

menor : Entero

/ /EnLrada

Lcer nl, n2,

n3

/Proceso
Si n1 > n2 Y n1 > n3 Entonces
malor * nl
/

3 'No

Sr n2 > nl Y n2 > n3 Entonces


maYor * n2
S

iNo

Frn Si

mayor -

n3

fin Sr
Sr n1 < n2 Y nl < n3 Entonces
menOr * n1
S

iNo

Si n2 < nl Y n2 < n3 Entonces


196 * n2
.:aNo

Fin

Frn Si

menor * n3

inter * (n1+n2+n3) - (mayor+menor)


/ /satiaa
Escribir mayor/ inter,
-E'.an

menor

I
I

L
Codificacin:

*include <iostream>
usrng, namespace std;

void

main

(void)

/ / var-LaDles

int

n1 ,

n2, n3 / mayor,

inter,

menor;

/ /trn-rad.a

cout(("Numero 1: ",. cin>>n1;


coutd("Numero 2 : ",. cin))n2 i
cout(("Numero 3: ",. c'in>>n3;
/

/Proceso

else

if(n1 > n2 e& nl > n3) {


mayor : ni-;
{

if(n2 > nl
ielset

&& n2 > n3) {


mayor : n2;
mt\7^r

n?.

if (n1 < n2 && 1 < n3){


menor : n1i
l

else

rf(n2<n1

&&n2<n3){

menor - n2;

IJ sa I rs
ca ft

menor

n3;

i
]

= (n1 + n2 + n3) - (mayor +

inter
/

/Salid.a

\ \ ,

r^111tt\^tr.

: "{(mayor(<"\n" i
cout(("Intermedio : "((inte r1<', \n',
cout{("Menor : "{(menor(("\n";
cout<<"Mayor

menor)1.

Problema 19
Enunciado: Un restaurante ofrece un descuento del

1,O%

para consumos de hasta S/.100.00

un

descuento de20% para consumos mayores, para ambos casos se aplica un impuesto del19%. Determinar
el monto del descuento, el impuesto y el importe a pagar.
Para la solucin de este problema, se requiere que el usuario ingrese el consumo y el sistema
verifica y calcula el monto del descuento, el impuesto y el importe a pagar.

Anlisis:

Salida

Entrada

e
.
.

Consumo (c)

Monto del descuento (m_d)


lmpuesto (m_igv)

lmporte a pagar (p)

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inicio

//Constantes

: 0.1 : ReaL
D2:A.2:ReaL
IGV=0.19:ReaL

D1

- 0.1 : Real
- 4.2 : Real
IGV-0.19:Real

D1
D2

p:

c, md, migw,
/

Leer

Real

/
t

m_d -

c*D1

|-_m_igv*(c-m_d)*IGV
-

/Y,scribr

m_d.,

Fin

Real

/ /nnlrada
Leer c

P!-ll.u-ll.-9V

//Variables
ct te_d, :. iov, p :

l^

m_igv,

p7

/Proceso

Si c <: 100 Entonces


md-c*D1
SiNo

md*c*D2
Fln Sl
m igv * (c - m_d) *
p*c-m_d+m_iqv

IGV

/ /satiaa
Escribir m_d, m_igv,

Fin

,CdF

:,$: EstkrCif.:$o

lsntitA::Si#piA::tbffi ei

Codificacin:

=include (iostream)
JN

al

:sing namespace sld;


-.-cid main (void) {

na

/,/Constantes
cons* floaL Dl - 0.lF;
consL fl.oar D2 : 0 .2tr;
const float IGV : 0.1 9F;

/,/Variables
float c, m_d, m_ig'v,

p,.

/ /EnLrada
cout({"ConSumo: "; cin>>c,'
,/

I Proce so

if (c <: 100 ) {
md - 9
U! t
a I oa
jI uruv
md - u^ * 4.
ua,
]*
m*igv:(c-m_d)*IGV;
J

P -

U _-l
- llr Ll - ln_lgV,'

/ I Saltd.a

cout{( " \n",'


cout.<{"Monto descuento: t'<{m d<<"\n";
cout(<"Impuesto IGV: "<<m tqv<<"\n";
cout(('/lmporte a pagar: "?<p<<"\n";

Problema 20
Enunciado: Debido a los excelentes resultado, el restaurante decide ampliar sus ofertas de acuerdo

ia siguiente escala de consumo, ver tabla. Determinar el monto del descuento, el importe del impuesto
'/ el importe a pagar.

Consumo (S/.)

Descuento (%)

Hasta 100

10

Mayor a 100

20

Mavor a 200

30

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el consumo y el sistema
verifica y calcula el monto del descuento, el impuesto y el importe a pagar.

Entrada

Salida

Monto del descuento (m_d)


. lmpuesto (m_igv)
o lmporte a pagar (p)

Consumo (c)

m
Diseo:

lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Ina cao

- 0.1 : Real
D2*A.2: Real
D3 * 0.3 : ReaL
IGV. 0.19: Real
D1

c,md,migv,p:Rea1
/

c*D1

/tscL-bir

d-c

Pseudocodigo

//Constantes
D1

/ /Entrada
Leer c

Reaf

D2l

lt_d.

*IGV

m_d, m_igv,
Fin

: 0.1 : Real
D2:4.2 : Real
D3: 0.3 : Real
IGV:0.19:Real
//Variables
c, fr_d, m_igv, p :

/
/

m_igrv-(c-m_d)
p-c-m_d+migv

Inicio

--

c>240

m_d *

^^r

Lv-L

P7

*D3

E's r,*ril
/Pxoceso
i- c > 200 Entonce
*D3
md*c
/

-No

Sic>

100 Entonces

_d*c*D2
m d-s*1

m
S

rNo

Fin Sr
frn Sr
*-igv
(c !*c-m_d+m

d) *

rGV

I9V

/ /Sa]-ida
-scribir m_d,

-igv,

Codificacin:

=-nclude (iostream)
'-sing namespace stdi

'.-:id

(void)

main

/,/Constan Les
const. float D1 : 0.1F;
consE float D2 :0.2T;
const floar D3 : 0.3F;
const float IGV = 0.19F;
//

varrar)les

*
I
Llodt ^cffi
orm
lgvrp;

{1^-+

/ /EnLrada
cout{("Consumo: "; cin>)c;
/ / Proceso

il(c

> 200){
_

lLL U

elseT

UJ,

if (c > 100 ){
]

md:c
elseT
md:c

l*

D1;

m_iqv:(c-m_d
v

rJ

/ / Sal
vvuL
^^1.r//"\

-m.]r-

*IGV;

,fl lqv;

ida
\

j
\- ^,t.

ceut(("Monto descuento : "<<m d<<,,\n,,;


cout<("TmpuesLo fCV: "<<m igv<(,,\n,',couc<<"Importe a pagar: "<<<<',\n,,;

Problema 2l
Enunciado: Al ingresar el valor de una temperatura, obtener el po de clima segn la siguiente tabla'
Tipo de Clima

Temperatura
Ternp. < 10

Fro

Temp. Entre 10 Y 20

Nublado

Temp. Entre 21.Y 30

Calor

Temp. > 30

Tropical

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese la temperatura y
sistema verifica y determina el clima.

I satda
I . clma (.)

Entrada

Temperatura (t)

Diseo:
lnterfaz de Usuario

Algoritmo
Inicio
Ente ro
Cadena

>:11 Y t<-2
=21 Y t<:3

c * "NUBLADC"

c . "TROPICAL"

Escribir

el

Gaptulo

3:

EstructUra Selectiva Simple v Doble

;*%@.@,.*_.*;*-:*-*--g

Pseudocodigo

Inicio
//variables
t : Entero
c : Cadena
/ /EnLxada
Leer t
/ /Proc.eso

,Srt(lOEntonces
c * "FRIO"
SiNo
Sr t >= 11 Y t <:20 Entonces
c * "NUBLADO"
S rNo
Sr t >: 27 Y L (:20 Entonces
c * "CALOR"
S rNo
c * "TROPICAL"
Frn Si
Fin Sr
Fin Si

yel

/ /sattaa
Escribir

! l-n

Codificacin:

4rnclude (iostream)
#incfude <string)
using name$pace sld;
void main (void) {
/ / varaables
i

nt

r,'

<]-ri nn
rL!fLY

.
u/

/ / LnLTac-a

COUt({'/Temperatura: "; cin>}t;


trruLgu
// //D-^^^-^

if (r. < 10) {


c : "FRIO";
II
CJ
J UIU9

if(t >= 10 && t <: 20) {


c = "NUBLADO";
] else {
ir {t">- ?3o13*!, <= 3o ) {

)eIse{:
c

I
I

..

"TROPICAL",'

l
)

/ /Sa) ida
cout((" \n";
cout(<"Clima:

"<<c<<"\n";

Problema 22
Enunciado: lJn negocio trene dos trpos de cliente, Cliente general (G) o Cliente afitado (A), recbe dos
'ormas de pago al Contador (C) o en Plazos (P), Nos piden crear un programa que al ingresar el monto de
a compra se obtenga el Monto del descuento o el Monto del Recargo y el Totala Pagar segn la siguiente
ra b la.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el monto de la compra,

tipo de cliente y la forma de pago y el sistema verifica y determina el monto de descuento o recargo
',, el total a pagar.
e1

contado {c}

Plazos (P)

Dscuento

Recarso

Cliente general (G)

1.5%

to%

Cliente afiliado (A)

20%

5%

Tipo

Entrada

Salida

.
.
.

o Monto de descuento o recargo (m)


. Total a pagar (tp)

Monto de la compra (mc)


Tlpo de cliente (tc)
Forma de pago (fp)

Diseo:
lnterfaz de Usuario

L
Algoritmo
Diagrama de Flujo
Jos

de

nte

nl cio

DESCG*0.15:Real
DESC_A - 4.2 : Real
REC_G-0.10:Reaf
REC_A * 0.05 : Real

)(4,

fgo

mc, m, tp:
tc, fp, r:

Cadena

m*mc*REC_A

m*mc*DESC_A

tp*mc+m

tp*mc-m

m-mc*REC
tp*mc+m

r*"DESC. 2AZ"

r-"REC. L0Z"

r*"REC.

5?"'

Pseudocodigo

Inicio
//Constantes

DESC_G: 0.15 : Reaf


: 0.2 : Real
RtrC_c : 0.10 : Real
RtrC A: 0.05 : Real
DESC_A

/ /YarLabLes

frc, m, tp: Real


tcrrprTiCadena
/ /Entrada
Leer mc, tc, fp
/

Real

/proceso

e l +^
rr
LL -

LnLOnCeS

Si fP = "C" Entonces

^^/

LP

m*nc * DESC_G

tP-mc-m

r*"DESC. T5Z"

*MC*DESCG

tp
S

-filC-fl

*DESCUENTO 15?"

* MC * REC-G

rNo

tp *mc+m
T

*RECARGA 1O%"

F:-n S r
: lL\O
qi

- \\C/ Entonces
MEMC*DESCA
tp*mc-m
r - "DESCUENTO 20%"

fn

rNo

*IIIC*REC_A
tp*mc+m
-I

Fin Sr

\\nr^nD-n
nlL^gn

Ea-tl
Jo

: tn 5a

/satiaa
-:cribir r, m'
/

LP

Frn
Codificacin:

=-ncl-ude (iostream)

=-nclude <string>

'
jsang'namespac(
) std;
void

main
/

(void)

/Constantes
float- DESC

const
const
const
const

float
float
float

0.15F;

DESC

U_
RtrC_;-

?F.
n 18.

REC_ la-

0.05F;

//Variables
float mc, mr_tp,'
1rr

fLv/

Jc -r -i f nn
rlv

fn.
tYr
!r. ,

/ / Ent'racla

cout<<"Monto de comPra: ",' cin))mc;


cout<<"Tipo de cliente: "; cin>>Lci
66u(("Forma de pago: "; cin>>fP,'
/ / Proceso
iF(rr
! \uv

=-

\l]'\f
v

if (fp ::

'C')

:!:i.'$s*r$$ffi

;#ibsffi

$61pE

y:

$oble

rc^
-.
m: --.IIU * ULJ!
U,
lp :mc-*i
r - "DESCUENTO 15%";

1e-Lse

m:

+ DEr/- C.

tp :mc*mi

r =

"RECARGO L0%";

m --

h^
rilu

r -

"DilSCUENTO 20%";

)
I ^t

^^
crse

f
1

!!il^
\rIJ

\^

u
*

,i I
rCulJU

l '
nt

tp

I ^1^^

ICfU1

m :

PE/-

r\!v

tp :mc+m;
r : "RECARGO

1,

^.

5%";

)
J

/ / Sal
-^i1t"\
LvuL\\

ida
\l^"

.
,

cout<<r<<": "<<m<<"\n";
cour<<"Total a pagar: "<<tp<<"\n";
l

Problema 23
Enunciado: Elabore un algoritmo que resuelva una ecuacin de primer grado.

aX+b=O ,=1
a

Considerar si a es diferente a 0 no es una ecuacin de primer grado.

Anlisis: Para la solucln de este problema, se requiere que el usuario ingrese el valor de
sistema verifica y determina el valor de x
Entrada

Salida

.
.

Coeficiente a (a)

Raz x (x)

Termino independiente b (b)

Diseo:
lnterfaz de Usuario

a y b, luego el

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio
Inicio

//Variables
a, b, x: Real

a,b,x:Real
/ /E.rLrada

ol>:---,2

Leer a,

a, b,/

/reer

\/

b/a

/Proceso

iNo

Sia<>0Entonces
x*-b/a
Fin

/Escrlbir

x/

x*O
Sr

/sa:-iaa

Escribir r
Fin
t'.r_n

Codificacin:

=-:.clude <ioscream>
'
'js:ng
ct.l .
namespace std,'

-.'oid main (void)

/lvariables
+l^^+
ttvv

L L,
,,.
- p,
Q,

/ / EnLracla

couc<<"a: ",' cin>>a;


cout(("f "; cin)>b;
/

/Proceso

I /^

t-

^\

x=-bla;
la I aal
I vJUU
t
w

O.

//

sartda

cout(<"\n";
cout(("x: "<<x<<"\n";

tProblerna 24
Enunciado: Elabore un algoritmo que obtenga las races reales de una ecuacin de segundo grado.

ax2+bx*c=0
x1 =

-b+!6' -4ac

Considerar que a 0, para poder dividir.

Considerar

b2

x2=

2a

-b-Jb'-4r.
2a

4ac * 0, para obtener la raz cuadrada.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese el valor de a, b y c, luego

:l

sistema verifica y determina el valor de x1 y x2.


Entrada

.
.
.

Salida

.
.

Coeficiente a (a)
Coeficiente b (b)

Primera raz x (x1)


Segunda razx(x2)

Trmino independiente c (c)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

fnicio

//Variables
at b, c, xl, x2 : Real
//Entrada'l-'
Toar
r

b, c, d, xL, x2 : Reaf

/reer
d

!uu!

a, b, c,,/

(b^2)-4-

a-c

-lt>.--

e ----<-;7'"

x1

x1* (-b+d^

XL

x2- ( -5-^

xl ,
"2,,'

z/tsxibir
Fin

r/2)\ /2*a
r/2\ ) /2*a

qt

u,

/Proceso

d-(b^2)-4*a*c
Sia<>0Yd>:0
Entcnces
x1 * (-b + d ^ (7 / 2)) / 2 *
x2 - (-b
(I / 2)) / 2 *
S iNo
xl -0
x2*,0
Fin Si
/ /satiaa
trscribir x1,

Fin

x2

Codificacin:

#include (iostream)
#rrc i ude <stri nq>
#incfude <math.h>
,rsing namespace

void

(void)

main

sEd,'
{

//Variables

double a, b, c, d, xL, x2;


/ / Ent rada

cout({"a : t'; cin))a;


cout(("b: "; cin>>b;
sout<<"c: "; cin))c;
/,/Proceso

d: pow(b , 2.0) - 4.0 * a * c;


if (a l= 0 && d >- 0) {
xl : (-b + pow(d, (I.A / 2.0\t) / 2 * a;
x2: (-b - pow(d, (L.O / 2.0))l / 2 * a;
]

efse

Af

V/

x2 : 0;
]

/ / sal rda

cout<<"\n-;
cout(d"x1 : "<<x1(<"\n";
couL11" x2: "<<x2(<"\n" ;

Problema 25
EnunCiadO: Dado la hora, minuto y segundo, encuentre la hora del siguiente segundo.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese la hora, minuto y segundo,
luego el sistema verifica y determina la hora, minuto y segundo del siguiente segundo.
Entrada

Salida

.
.
.

.
.
.

Hora (h)

Minuto (m)
Segundo (s)

Hora (h)

Minuto (m)
Segundo (s)

i
I

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Inicio
hrmrs:Entero
1.
/LeeT
n, m, s/

Pseudocodigo

Inicio
//Variables
hrm/s:Entero
/

/strada

l^^z
!uu!

s*s+1

s:

60

lv

s-0
m-m+1
F

m=

60
V

lS .-

b_-, V+1
t

undo,

24

r,.

/Escribr h, m, s /
Fin

h
rr,

ttt,

/ /Pxoc,eso

s-s*1
Sr s:60Entonces
s*0
m-m+1
Si
m:60EnLonces
m-0
h-h+1
Sl
h-60Entonces
h*0
Fin Si
Fln Si
Fin Sr
/ /satia
trscriblr h, m/

Fin

ro
Codifica

#incLude (ioslream)
usi-ng namespace std;

void main (void)


/

/var rables
hfir r si

int

/ /EnLrada
COut(("HOra: "; Cin>>h;
cout(("Minuto: ",' cin))m;
cout(("Seg:undo: "; cin))s;
/ / Proceso

1r (s :: bu)
c

+:

if

(m

1;

::
m=

60)

O;

h +:1.

f (h ::
h:

24)
0;

//

SaIda

r^11+latt\tt.
\ \rr

cout<<"Hera: "<<h<<"\n"i
cout<< "Minuto ! 't <<m<< " \n" i
cout{{"Segundo : "(<sd("\n" ;

Problemas Propuestos
Los siguientes

problemas le servirn para medir su aprendizaje, es importante que los resuelva.

Propuesto

11

Enunciado: Dado la edad de una persona determinar si es Mayor de edad o Menor de edad, considere
que mayor de edad es mayor o igual a 18.

Propuesto f 2
Enunciado: Dado dos nmeros enteros, devolver el nmero Menor.

Propuesto 13
Enunciado: Dado dos nmeros determinar si son iguales o son diferentes.

Propuesto {4
Enunciado: Dado un nmero entero, devolver el doble del nmero si el nmero es Posivo, el Triple del
mero si es Negativo, y Cero si el nmero es Neutro.

Propuesto 15
Enunciado: Crear un programa que al ingresar tres nmeros enteros, devuelva los nmeros ordenado en

'orma ascendente y en forma descendente.

Propuesto 16
Enunciado: Despus de ingresar 4 notas, obtener el promedio de la tres mejores notas y el mensaje
Aprobado si el promedio es mayor o iguala 11, caso contrario Desaprobado.

Propuesto 17
Enunciado: Dado los siguientes datos de entrada: Saldo anterior, Tipo de Movimiento R (retiro) o
ideposito) y Monto de la transaccin, obtener como dato de Salida el saldo actual.

Propuesto 18
Enunciado: Dado 2 nmeros enteros a y b, determinar cual es mayor con respecto al otro.
a es mayor que b
b es mayor que a
a es igual a b

Propuesto f9
Enunciado: Dado 3 longitudes, diga si forman un tringulo.
TEOREMA: En todo tringulo, cada lado es menor que la suma de los otros dos, pero mayor que su
d ife

rencia.

Propuesto 20
Enunciado: Dado 3 longitudes, si forman un tringulo devolver el tipo de tringulo segn sus lados.
T. Equiltero: Sus 3 lados son iguales
T. lssceles: 2 lados iguales.
T. Escaleno: 3 lados diferentes.

Captulo 4

Estructura Selectiva Mltiple


lntroduccin
Sabes que en la actualidad tienes muchos bancos financieros que ofrecen prstamos con condiciones
: rerentes, usted al solicitar un prstamo, ene que evaluar diversas alternativas y decidir por una de

:
t.

+
,ti

*
T

3S.

:-

ios lenguajes de programacin se cuenta con una implementacin similar, llamada estructura selecva

--1ple que permite evaluar varias alternativas y realizar el proceso si cumple con la condicin elegida.
','rchas veces para solucionar este tipo de problemas se uliza estructuras selectivas dobles anidadas

:^

cascada), dando una solucin muy complicada y confusa para analizar, es recomendable que cuando
tenga que evaluar varias alternativas se utilice estructuras selectiva mltiples por ser la ms legible,
:'ciente y fcil de interpretar.

::

Estructura selectiva mltiple


rermite comparar un valor con diversas alternativas, si la comparacin tiene xito se ejecuta el grupo de
rstruccin que contenga la alternava seleccionada y luego sale de la estructura.
Muchas se pueden implementar en forma opcional una alternava por defecto, es decir al comparar con
todas las alternativas propuestas no se ene xito con ninguna, entonces se ejecuta la alternava por
defecto.

Vaforl
In s t

rucci

one s

Valor2
In s t rucci one s

Valor3
In s t

rucci

one s

Sea
En Caso que <Exp. >
Caso Valor1
<Instrucciones>
Caso Vafor2
<Instrucciones)
Caso Valor3
<Instrucciones>

Fin

Caso

Sintaxis 1 C++

switch (<Exp.>) {
case Valorl:
< Ins trucciones);
break;
case Valor2:
(Instrucciones);
break;
case Valor3:
<Instrucciones);
break;
)

En Caso que <Exp.> Sea


Caso Valorl

Valor l
I ns t

Valor

ruccione

( Ins1-ruccione

Instruccion-os

nstrucc ione

Sintaxis 2 C++

switch (<Exp.>) {
case Valor1:
< Instruccione s >;
break;
case Va1o12:
< fns truccione s);
break;
default:
< Instrucci one s );
break;
)

nstrucciones)
Caso Valor2
<

s>

SiNo
( Ins truccione s>
Fin Caso

Estructura selectiva mltiple usando rangos


" :structura selecva mltiple permite comparar un valor (igualdad), pero cuando se requiere manejar
(>= y <=), se puede usar una estructura selecva mltiple similar a la estructura selectiva doble

-:-;cs
- --l-

Si <Exp.Log.> Entonces
<Instrucciones>
Ins t rucc ione

SiNoSi <Exp.Log.> Entonces

<Instrucciones)
Ins t rucci one

SiNoSi <Exp.Log.> Entonces

<

Ins t rucc ione


I

nst ruccione

fns

trucci

ones>

SiNo

(Instrucci.ones>

Fin Si
Sintaxis C++

if (<Exp. Log.>)
( I ns trucci ones>,.
else if (<Exp. Log.>)
Instrucciones>;

<

else if (<Exp. Log.>)


< Ins trucc i ones),.
else
<Tnst.rucciones);

Problema 26
Enunciado: Al ingresar un nmero entre

1-

tabla.

y 4 devolver la estacin del ao de acuerdo a la siguiente

Nmero

Estacin

Verano

Otoo

lnvierno

Primavera

An!isis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero entero y el
sistema realice el proceso para devolver la estacin.
Entrada
I Salida

Nmero (n).

| .

Estacin (e).

lnterfaz de Usuario

Algori tmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio
Ente ro
Cadena

/ /varLabLes
n : Entero
e : Cadena
/ /EnLrada
Leer n
/ /Proceso
En Caso que n Sea
Caso 1
e - "VERANO"
LASO

* "INVItrRNO"
Caso

e -

Caso
e*" INVIERNO"

e *
Fln

Fin
Escrrbir

Caso

/ /satiaa
Escrlbir

e. " PRIMAVERA"

"OTOO"

"PRIMAVtrRA"

Entrada

Nmero (n).

t Salida
| . Resultado (r).

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo
I

Inicio

ni cio

ntero

//Variables
n : Entero
I : Cadena
/gn:'xada
Leer n
/

/ /Proeeso

En Caso que n
Caso 0

*CtrRO,,

I Caso

*UNO"

I Caso

\\n^c//

Caso 3
I - *TRES"
Caso 4
I - *CUATRO,,
Caso 5
I * *CINCO"
Caso 6

1*''CUATRO''

1-"

rNCO "

rrcrTcrr

L-'' S ItrTtr ''

bLI)

Caso

Caso

Caso

T.L\::

Fin
L. ''NUtrVE ''

Caso

/satiaa

Escribir i
Escribir

Sea

t'r-n

Codificacin:

(iostream)
=:rclude
+:ncl ude <stri nq)
:sing namespace std;
void main (void) t
//Variables
int
n,.
\\rr.
olrin^
I
rrrrr\.j

/Entrada

cout<<"Numero: "; cin>>n,.


/ / Proceso
switch (n) {

case 0:
1 : "CERO";
break;
case 1:
1 = "UNO,,;
break;
case 2: ..
I = DOS,, ;
break;

ca

1.

I =

"TRES,,;

break;
case 4:
I

ca

= "l-TIATqa\" '

nt..Li"",t'"
I =

^^-^
uaJe

'

(.

..CINCO',,

break;
E
(r. -

f :..SEfS,,;

break;
case ?:
-l-

* "SrE?E,,;

break;
case 8:

I =

"OCHO,,;

I =

.TNUEVE,';

break,.
case 9:

break;
)

/ / ba1]-da

cOut{{"\n";

cout(<"Letra : "((l(("\n,,,.

Problema 28
Enunciado: Dado dos nmeros enteros y un operado r +, -, * y devolver
la operacin de los dos
/,
nmeros segn el operador ingresado, considere que si el segundo
nmero es cero y el operador es /, no
es divisible con el primer nmero, entonces devolver como resultado
0.

IFEruT;

:$

,. ., :,.',

':- -;il l#i*,illit*rl;,i

,i

iffi;i

y dos
Anlisis: para la solucin de este problema, se requiere que el usuario ingrese un operador
de la operacin'
nmeros y el sistema verifica que operacin debe realizar y devuelve el resultado
Salida
Entrada

.
.

operador (op).

Resultado (r).

Nmero (n1 y n2).

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inico

Ini cr o

op : Caracter
n]- ,n2,r:Entero
Leer op, nL,

n?

//Variables
op : Caracter
fil,

fL2, r : Entero

/ /sntrada
Leer opr n1,

o2

/ /Proceso
En Caso que oP

r*nI1n2

T,dJU
^--^

1:

r*n7-n2

Sea

\t

r*nt+n2
\,
('

:*nl-t2
\Yt

l-:=_

::-:--*t'2
aa c-

r-n1*n2

Sr n2 <> I E::-.onces
r-a"-tn2
S

r*n7 / n2

r-C
Frn Srn
Fin
/

Caso

/satiaa

EJSCIII)IT

Escrr-Orr r

rNo

Fin

lo
dos

4: Estructura Selectiva Mltiple

Codificacin:

#include (iost ream)


us

rng namespace std,'

void

main

(vord)

riabl e s
rnt nl ,n2rr / /Va

nhr
vsr

O;

n.
vrt

/ / L;nt rada

cout{{"Operacion: "; cln>>op,'


cout({"Numero 1: "; cin}}n1;
cout{{"Numero 2: "; cin>)n2;
/ / Proceso

if (op ::

r+')

r:nl-n2;
]else if(op =='-')
r=nl-n2;
)else if (op :: '*')
r

n1

n).

lLL,

)else if (pp =: '/'


l-

1F t)
\rr

n\

v I

r:n1/n2;
else

r = u;

/ SaIida

r^11Tatt\tt.

COt((//ReSUltado "14<<"\n" ;

Problema 29
Enunciado: Dado una letra determinar si en una vocal.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese una letra l, luego
slstema analiza y determina si es una vocal.
Entrada

Salida

Letra (l).

Resultado (r)

el

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio
//Variables
f : Caracter
r : Cadena

Caracter
Cadena

/ lsnLrada
Leer I

r-"ES

VOCAL"

r*"ES

VOCAL"

/Proceso
Si I :'a'
O I ='A' Entonces
r - "ES VOCAL"
O I :'E'
Entonces
SiNoSi I :'e'
r - "ES VOCAL"
SiNoSi I :'i'
O I = \I' Entonces
/

L
r._

1,.-

r*"ES

Vl/t

Al'

VOCAL"

f,-

VULAI

SiNoSi I :'o'
O l- -'O' Entonces
r * "ES VOCAL"
SrNoSi I ='u' O I : rgz Entonces
* "ES VOCAL"
SrNo

- "NO ES
trin Sr
r-"ES
r-"NO ES VOCAL"

VOCAL"

Fin
Escribir

/SaLda

trscribir r

VOCAL"

c*pji*tlgrE

*ia,:$sldetivi* liipte

Codificacin:

+lnclude (lostream)
#rnclude <string>
using namespace std;
void main (void) {
,/,/Variabl,es

cha L;
cri

nn

L,

/ / Entrada
cout(("Letra:
/ / Proceso
:E1
rr \r

--

\-'d

"; cin>>1;
rr t_
r :II
VOCAL",'

rnr\
A

r = "ES
e-lse if (1 ::'e'
ll 1::
r : "ES VOCAL";

else if(1 :: 'i' I


r : "ES VOCAL",.
else rf(I :: 'o' I
r = "ES VOCAL";
else if(1 := 'u' I
r - "ES VOCAL",'

I
!

r :

\\l\T trq \/^a^T".


v vu!

.E,)
\T/
t

I ==

ra,
v

\I

I
f--u)
--

\rrt

---

ef se

/ / 5a1].da

cout{{" \n";
cout({"Resultado : ..{(r((,,\n,,,.

Problema 30
Enunciado: Al ingresar el nmero de un mes, devolver la estacin del ao de acuerdo a la siguiente

ta bla.

Mes

Estacin

1,2,3

Verano

4,5,6

Otoo

7,8,9

lnvierno

10,1L,1.2

Primavera

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese el nmero del mes, luego
el sistema verifica y determine la estacin.
Entrada

Mes (m).

t Salida
| . Estacin (e).

c*****T

tE* roo t L

.:.:i.i:;i:.:.:.:.*:;::ii;i;;:;:;i,:;:*i

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Inicio

Inicio

Entero
Cadena

Leer

Pseudocodigo

//Variables
m : Entero
e : Cadena
/

/tntrada

Leer

/ /Proceso
En Caso que m
Caso I,2,3

e*

"VERANO"

Caso 4, 5,

e*

Sea

"OTOO"

Caso 7, 8, 9

e*
.'^*," f

NVIERNO"

Caso 1A,tL,L2

e_
IA

,II

Fin

,1.2

e._" PRIMAVERA"

Escribir

"INVIERNO"

Caso

/ /satida
Escrlbir
e

Fin

.'PF.Ii"1AVERA'

-- :

Codificacin:

#include (iostream)
#include <string>
using namespace std;
void maln (void) {
/

/varrabres

int m;
string e =

\\

' ;

/ /EnLrad,a
nrrrzZ"Moc.
I'rgJ .
u9uu\\

vLtL/
i n))m:
/tttr

/ / Yroceso

switch (m) {
case 1:
case 2:
case 3:
e :

*VERANO";

break,'
case 4:
case 5:
(id>c

u.

e :

"OTOO";

break,'
case 7:

^--^ o.

qa

Q.

e:

"fNVfERNO";

break;
case 10:
case 1l:
case 12:

e:

break;

"PRIMAVERA";

/ / satiaa
cout<<"\n";

cout(("Estacion: "<<e<<"\n";
l

Problema

31

Enunciado: Dado la nota promedio de un alumno, obtener la categora, segn la siguiente tabla.
Promedio

Categora

Entre 0 Y 5

Psimo

Entre 6 Y 10

Malo

Entre 11 Y 14

Regular

Entre 15 Y 17

Bueno

Entre 18 y 20

Excelente

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese el promedio, luego

el

sistema verifique y devuelva la categora.

Entrada

satioa

| .

promedio (p).

categora (c).

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio

//variables
p : Entero
u
. uduclld
^-^^^

Caracte r
Cadena

/ /gnErada

Leer
c-"

PE S IMO"

>:6 Y p<:1

\:l
1 v ^-1
-ttr},\_!

c*"RtrGULAR"
q
/\-1 LJ

vr

^\
P/-L

>-18 Y p<:2
c-,,trXCELENTtr,.

/Proceso

Sipt:0Yp<=5EnLonces
c - "PESIMO"
SrNoSi p >: 6 Y p <: 10 trntonces
c . "MALO"
SrNoSr p >: 11 Y p <: L4 Entonces
c . ..REGULAR,,
SrNoSi o >: 15 V p i: 17 Entonces
c - "3UENO"
SiNoSr p >: 18 Y p <: 20 Entonces
c - "EXCE'ENTE"
F rn Si
/

/SaLda

trscribir
Fin

Escribir

Codificacin:

#include <iostream>
#rnclude <string>
using namespace std;
void main (void) {

//Varlables
int p,'
\\/'.
ct r i nn
'ulrIY

^9

/ / LnLrao-a

cout<<"Promedio: "; cin>>p,'


/ /Proceso
if (p >:0 && p <:5){
c = "PESfMO"i
ielse if (p >: 6 ee p <- 10) {
q - "MALO";
>= 11 && p <: 14)
lel se rf (p
c : "REGULAR",'
>= 15 && P <= 17)
]else if (P
c : "BUENO",'
)else rf (p: >: 18 ee p <= 20)
c
"EXCELENTE",'

{
{
{

/ /Sa1 i da

cout<< " \n"

cout{("Calegorla : "<(c<("\n";
)

Problerna 32
Enunciado: Al ingresar el da y el nmero de un mes, devolver la estacin del ao de acuerdo a

la

siguiente tabla.
Estacin

Tiempo

Verano

Del 21 de Diciembre al 20 de Marzo

Otoo

Del 21 de Marzo al 21 de Junio

lnvierno

Del 22 de Junio al 22 de Septiembre

Primavera

Del 23 de Septiembre al 20 de Diciembre

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el da y el mes, luego el
sistema verifica y devuelve la estacin.
Entrada
Salida

.
.

Dia (d).

o Estacin (e).

Mes (m).

Diseo:

lnterfaz de Usuario

re

$ Algoritmos con C++'

Diagrama de Flujo

Pseudocodigo

Inicro

Inicio
d, m : Entero
e : Cadena
T.eer d,

//Variables
d, m : Entero
e : Cadena
/ /Entrada
Leer d, m

e-"VERANO"

/ /Proc,eso
En Caso que m Sea
Caso L, 2, 3

m=3 Y d>

e - "VtrRANO"
Srm:3Yd)20trntonces
e - "oToo"
trin Si
Caso 4, 5, 6

Srm:6Yd>2lEntonces
e - "TNVIERNO"
Frn Sr
Caso 7, 8, 9
* "INVItrRNO"
Srm-9Yd>22Entonces
e * "PRIMAVERA"
trrn Sr
Caso 10, LI, 12
e - "PRIMAVtrRA"
Sim:12Yd>20Entonces
e - "VERANO'
Frn Sr

e-" INVIERNO"

e_,,INVIERNO,,

m-9 Y

cl>

e. ,, PRIMAVERA

LA ,

II,12

Fin

-"PRIMAVtrRA"

:12 Y

Caso

/ /Sal-da
trscribir

d>

Fin

Escribir

*oroo"

Codificacin:

#include {iostream)
#include (string>
using namespace st.d;
void main (vold) {
//varraores
int d, m,'
c1-ri

\\//.

/ / Entrad.a

cout(<"Dia: "; cin>)d;


coul<<"Mes: "; cin>>m;
/ / Pfacesa

switch (m) {
case 1:
>ca
<a

).
?

e :

"VERANO",'

: E t*
r!\rLL
---

e :

3 &6, d > 20)


"OTONO";

br eak,'

case 4:
(.

ca

case 6:
rv

uNO"

,'

rf (m:: 6 && d > 27)


e = "INVIERNO";
L*^-]-.
!!
cd^,
l-.

^:ca

case 8:
case 9:
e : *TNVTERNO",'
if (m:: 9 && d > 22)
e - "PRTMAVERA";
L-^!rYo^/

case

I 0:

LdC

I.

1-.

CASE i::

e = "PRIMAVERA";
rf (m -- 12 && d >
e : "VERANO";

20)

brea k,'
i

/ / Salida
-^111"\^'t.\

\r

cout<<"Estacion : "<<e<<"\n",'

Problema 33
Enunciado:

En una Universidad se ha establecido los siguientes puntajes de ingreso a sus respectivas

facu ltades:

Puntaje Mnimo

Facultad
Sistemas

100

Electrnica

90

lndustrial

80

Adm inistracin

70

De acuerdo al puntaje obtenido por un postulante determinar la facultad a la cual ingres o dar un
mensaje correspondiente para el caso que no ingrese.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese


sistema verifica y devuelve la facultad que ingreso.
Entrada

Puntaje (p)

Salida

I o Facultad (f)
I

Diseo:
lnterfaz de Usuario

el

puntaje, luego

el

Algoritmo
Diagrama de Flujo

Pseudocodigo

rva s

I ni

Incio

cro

Entero

//Variables

Cadena

rt^-^
lrrLgr9

f :

Cadena

//entrada
>:70 Y
tr

p<=

T r

un

f-"CIENCIAS"
go el

>=80 Y p<:B

f-" INDUSTRlAL"
>=90 Y p<:g
f*"ELtrCTRONICA"
P>=1

00

f*"SISTEMAS"
r*"NINGUNA"

/Proceso

iNo

Si p >: 70 Y p <: -/9 Enronces


f * *CIENCIAS"
SiNoSi P >: B0 Y p <: 89 Entonces
f * .. INDUSTRTAL"
SiNoSl p >: 90 Y p <= 99 Entonces
f * *ELECTRONICA"
SiNoSr p >:100 Entonces
f -.ISISTEMAS"
Fin
/

f -

*NINGUNO"

Sr

/SaLda

Escribir f
Escribir

Fin

Codificacin:

#rnclude (iostream)
#include <string>
usi ng nanespace std,'

void

(void)

main

/ ., VaL -LdU LeS


i ^r
^.
lrrL
P,
\\//.
ctrin
rf -JLIarlV

/nnLrada

g6ul(("Puntaje: "; cin>>p;


r!vusDv
// //o-^-^ca
/(P \fi +
r /^

frval qq
cr

\^P z-

fl O\
Jt

f: *CIENCIAS";
else if (p >: 80 && p <f : "INDUSTRIAL";
a <a iln ): 90 ee p <:
f : *ELtrC{RON1CA";
r!

^lc^

e-Lse

\H

if t 1n
rY

>:
-

89)
99)

r1O'\
vv'l

f _ *SISTEMAS";
f :

/ / a-l
/ t Jd-

"NINGUNA",'

A^

atva

UUUL\\
^^\1?//t,\

\II

^,,

cout(("Facultad: "<<f(("\n";
II

Problema 34
Enunciado: Determine el importe a pagar para el examen de admisin de una unlversidad, cuyo valor
depende del nivel socioeconmico y el colegio de procedencia.
NivelSocial

ABC

Colegio
Nacional
Pa

rticu la r

300 200
400 300

100

200

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese el colegio y el nivel
socioeconmico y el sistema verifica y determina el monto a pagar.
Entrada

Salida

.
.

Colegio (c)
Nvel (n)

Monto a pagar (mp)

lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicro

/Variabtes
ct n : Carcter
mp : Entero
/

Caracter
Entero

/ /srErad'a
T aar

/ /Proeeso
En Caso que c Sea
Caso \N'
En Caso que n
mp-3

Sea

Cas o

mp * 300
.B'
mp * 200
Caso .C'
mp * 100
Caso

Fn Caso
Caso 'P'
trn Caso que
valor

mp*4

00

mp*3

00

mp-2

00

Caso

Fln

Escribir

Caso

/ /satiaa
Escribir

nivel

400

300

2AA

Caso

Fin
'l

Sea

mp

Fin

mp

Caso

Codificacin:

#include (iostream)
using namespace std;

void

main

(void)

//variables
}r:r

vt

n.

LL,

lnt mP :

0;

/ / LnLrada

cout<<"Colegio: "; cin))c;


cout<<"Nive1 : ",' cin))n;
/ /D-^^^^^
/ / r rvgsov

-it(c := 'N'){
j f (n :: 'A')
mP = 300;
else if (n :: 'B')
mp : 200;
else if (n := 'C')
mP = 100,'
)e1se if (c :: 'P') {
if (n :: 'A' )
mp : 400;
else if (n -: 'B')
mp
^t ^^
e-Lse

:lI c t^
(rl

mp :

300;
-_

\^tl-

\
/

200;

//Salida
cout<<"\n",'

cout{("Monlo a pagar :

"<<mp<<-

\n-,'

Problema 35
Enunciado: Dado el nmero del mes y el ao (cuatro dgitos) de una fecha, determinar que mes es
en letras y cuantos das ene, considerar que febrero tiene 28 o 29 das si el ao es bisiesto, un ao es
bisiesto si es mlplo de 4, pero no de 100 y si de 400.
Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese el mes y ei ao y
sistema verifica y determina cuantos cjas tiene y que mes es en letras.
Entrada

.
.

Mes (m)

Ao (a)

'

Salida

.
.

Dias (d)

Mes Letras (ml)

el

:E*tlfr tum. $elctiva Mltiple


Diseo:
lnterfaz de Usuario

Diagrama de Flujo

Ini ci

m, a, d: Entero
ml : Cadena
Leer m,

d*

31

mf-"JULIO"

d-

31

ml-"ENERO"

d*
ml.

(a Mod 100 <>

aMod4O0:0

ml*"fEBRERO"

d - -?0
ml*" SETItrMBRtr"

m}-,,OCTI]RRF,,

d-

ml-"MARZO"
5es
0es

d-

30

ml- "ABRI

"

31

"AGOSTO"

30

ml-"NOVItrMBRtr "

d,

31

ml-"

DIC I EMBF.E "

yel

d-

ml.

31

"MAYO"

Escr,l:,r

l,

m.l-

Pseudocodigo

Inicio
//Variables

. rtn., <), O:
-II-efo

mf : Cadena
/s\trada
Leer m, a
/

/ /Proceso
trn Caso que m Sea
Caso 1
d * 31
ml - "ENERO"
Caso 2
SraMod4:0Y

d*29
SiNo

d*28
Fin Si
ml - "FEBRERO"

Caso

!d>U
^-^^

d - 31
ml * "MARZO"
Caso 4
d - 30
ml - "ABRIL"
tr

d - 31
ml * "MAYO"
Caso 6
d - 30
ml - "JUNIO"
Caso 7
d - 31
ml * "JULIO"
Caso

d-

31

mI - "AGOSTO"
Caso 9
d - 30
mI * ..SEPTIEMBRE"
Caso

10

d-

rnf *
Caso 11

Fin
/

31
"OCTUBRE"

d - 30
ml - "NOVIEMBRE"
Caso 12
d * 31
ml - "DICIEMBRE"
Caso

/SaLda

trscribir d,
Fin

ml

(a

<>00
a Mod 400 : 0) Entonces

Mod 100

:ltilti!*ildi$:t':iH$

if,,,$rtcctia,,lllttlpb

Codificacin:
# include <iostream>
#include {string>

using namespace sLd;

void

main

(void)

/ /Varlables
inl m, at d
string ml

0;

/ / Lntrada
cout,(("Mes:
cout,(("Ao:

cin>>m;

cin>>a;

/,/ Proceso

switch

(m)

case 1:

ml -

"ENERO",'

1-rra1,.

v!vul\,

case 2:

:t(a e :: O && (a
d - 29;
e 1se
d, = 28;
ml : "FEBRERO",'
L-^-t-.
UIgdA,

case 3:

O : JI,.
ml : "MARZO",'
!!ga^,

case 4:
d = JU,'
*l
m-L
-=

\\n

rf
//
A}JKLt,.''

l^-^-r..
!IgAN,

case 5:

d : 3l;

mf :

"MAYO",'

L-^-t-.
U!gdA,

case

6:

d:

30;

= "JUNO";
L-^-t-.

ml-

gaN,

!r

d:
l
-lrLa

31;
-*

\\ TI'T T^/,
uv!rv

UICdA'

case 8:
d : 31;
mI : "AGOSTO",.
u r gd^,

case

9:

d=30;
mf : "SEPTIEMBRE",.

!rgd^,

100 l:0

$ 119

l1 a

400::0))

case 10:
d -- 31;
m] = "OCTUBRE",'
break,'

case 11:

d : 30;
ml : "NOVfEMBRE",'

break;
case 12:

d=31i

MI : *DICIEMBRE,';
break;
I

/ / bar10a
cou L<<'\n";

cout({"Mes : "({ml({"\n";
cout<("Dias : "((d({"\n";

Problema 36
Enunciado: Una empresa ha establecido diferentes preciosa sus productos, segn la calidad.

Calidad

5000

4500

4000

4500

4000

3500

4000

3500

3000

Prou.i\

Cree un programa que devuelva el precio a pagar por un producto y una calidad dada.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese la calidad y el producto,

luego el sstema verifica y determina el precio.


Entrada

Salida

.
.

Catidad (c)

Precio (precio)

producto (p)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio

//Varialles
ct p : Entero
precio : Entero

c, p i Entero
precio:
Entero

//Entrada
T ^^!ggr

precio*5

000

precio-4

500

precio-4

^
u/

/ /Proc,eso
En Caso que c Sea
Caso 1
En Caso que p Sea
Caso 1
n-o-,n ._ 5000
Caso 2
precio * 4500
Caso 3
n-ar . 4000
Fin Caso
Caso 2
En Caso que p Sea
Caso 1
nreein - 4500
Caso 2
nroi n * a00O
Caso 3
precio - 3500
Fin Caso
Caso 3
trn Caso que p Sea
Caso 1
-''^^: ^ ._ 1'000
PISUIV
'Caso 2
Y!evlv

precio*4

500

precio*4

000

precio*3

500

precio*4

to,

00

precio *
Caso

precio*3500

precio*3

Fin

000

/ /satia
Escriblr precio

Fin

3500

orecio
Caso

Fi-n Caso

Escribir precio

3000

$ Algoritmos con C++


Codificacin:

#include {iostream)
using namespace std;
void main (void) {
/

/Varj.abIes

int c, p, precio :

0;

/ /EnLrada

CoUc(('/Calidad: "; cin)>c;


cout<<"Producro: ",' cin>>p;
/ / Broceso

switch (c) {
case 1:
swltch (p) i
case 1:

precio:5000;

h-^-t-.
!!cdN,
t.

^--^

precio:4500;
l-.raL.
?.

precio :

L-^-1..
!rgont

4000;

break;
case 2:
switch

(p )

:ca

T.

precio:4500;
br eak;

ca

? .

precio:4000;
break,'

^--^

?.

precio:3500;
break;

)
l-rraL.
!!9uJ\,

case 3:
switch (p) {
case 1:

precio :

4000;

3500;

precio :

3000;

break;
case 2:
^ --^
uc>E

i:::i:
a.
J,

]
)

/ / SaLida
cout({ " \n";
cout<<"Precio: "(<precio(<"\n";

Problema 37
Enunciado: Disee un algoritmo que califique el puntaje obtenido en el lanzamiento de tres dados en
base a la cantidad de seis obtenidos, de acuerdo a lo siguiente:
Tres seis: Oro

Dos seis: Plata


Un seis: Bronce

Ningn seis: Perdi


Para la solucin de este problema, se requiere que el usuario ingrese el puntaje de los dados y
el sistema verifique y determine el premio.

Anlisis:

Entrada

Salida

.
.
.

Primer dado (d1)

premio (p)

Segundo dado (d2)


Tercer dado (d3)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio

i2, d3
l: l:na

//Variables
dI, d2, d3 : Entero
p : Cadena
/ /F,trada
Leer d1, d2,

d3

/ /Proceso

Sr d1:6 Y d2=6 Y d3:6 Entonces


p . "ORO"
SiNoSl (d1:6 Y d2-6) a (d1-6 y d3:6)
O (d2:6 Y d3-6) Entonces
p . "PLATA"
SiNoSi d1:6 O d2-6 O d3:6 Entonces
p * "BRONCE"

- (d1:6 Y d2:6) o (d1-6 Y d3=6)


-o (d2:6 Y d3:6 )
p*"PLATA"

SiNo

1:6od2=6Od3-

Fin Si
/

/satida

F-^-tLl
Lr!rrurr

p*"PERDIO"

Fin

Escribir

Codificacin:

#incl-ud.e <iostream>

#include <srring>
using namespace std;

void

main

(void)

,/ /Variables
int d1 , d2, d3;
olFin^
uulflY

\\rr.

/ / Elntrada

cout<<"Dado 1:
cout{("Dado 2:

coul(("Dado 3:

..pERDIO,,

p-

cin>>d1 i
cin>>d2,'
cin>>d3;

^y

taxpihilo.,4;,:,,,F uetr*,,$eh,g.1iv,$Eigf e

/ / Proceso

if(Of:6 *e d2::6 && d3 -:6)


p : "oRo";
else if( (d1 :: 6 && d2 :: 6) I I (d1 :: 6
(d2::6 && d3:: 6))
n

efse

Ur\v\g

P:

=: 6)

&&

\\ DT A.I'A // .

else if (d1 :: 6 'l


\\PDrlNIr-r".

&& d3

d.2

:: 6 lt d3 ::

6)

'

.'PERD]O";

/ /SaLida
cout(("\n";

cout<<"Prem i o: t'<<p<<"\n",'

Problema 38
Enunciado: Dado el da, mes y ao, determine si es una fecha correcta, considere los aos bisiestos.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el da, mes y aos, luego
el sistema verifica V determina el resultado si es o no una fecha correcta.

Entrada

Salida

.
.
.

oa (d)

Respuesta (r)

Mes (m)

Ao (a)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Ini c o

/ /vaxabLes

d, m, a, dmax : Entero
r : Cadena
Leer d, m,

IL. J.
2

tr -t O
1^
J.
. A I tV.

/ /sn|.rada
Leer d, m,

31

11

Caso
dmax *

/ /Proc.eso
En Caso que m Sea
Caso 1 ,3, 5,1 ,8 ,10 , 12

1)
la

dmax
a

d, m, a, dmax: Entero
r : Cadena

30

dmax 4, 6, 9,
dmax *

Caso 2
Si a Mod 4

31
11
30

0 And (a Mod 100 <>

Or a Mod 400 = 0) Entonces


dmax * 29
S

lNo
dmax

(a Mod 100 <>

trin Si

aMod400=0
dmax - 28

iNo

t:*
: -:- S:
/

r-"

INCORRECTO"

Escribir r

28

Fin Caso
si d>0 Y d<-dmax) Y (m>0Ym<13)
Entonces
Y a>0
T* ..CORRECTO"

dmax - 29

(d>0 Y d<-dmax) Y
(m>OYm<13) Ya>0

/sataa

Escr::c-:
Fin

INCORRECTO,,

Capitulo 4: Estructura Selcctiva Mltiple


Codificacin:

#include <iostream>
#include <string>
using namespace sld;

void

main

(void)

/Variables
int drm, a, dmax
/

clri
u!!r1lY

nn

/ /trnLrada

cout<("Dia:

\\
\\

cout({"Ao:

\\

Cout(("Mes:
/ / -^^^-^
sw i rch (m)

cin))d,'
cin))m;
cln>)a;

/ / TIUUEJU

case r:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:

<>0
.le s

dmax

31;

break;
_3)

'

:ca

case

6:

:ca

O'

case 11:
dmax
^-^^

30,'

L-^-l-.
!rga^,
t.

9o
if /=
\a

--

A
a

--

dmax

29;

omax

28,'

else

(l(a

100::0)

ll a ?;400::0))

i f ((O > 0 && d <: dmax)


el se

//

r =

"CORRECTO";

r -

"fNCORRECTO";

&&

(m>0eem<13)

sarraa

cout(("\n";

cout.{{"Respuesta

: "((r(("\n"

eea>0)

fi

m3

Problema 39
Enunciado: Dada una fecha vlida, halle la fecha del siguiente da.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el da, mes y ao, luego
el sistema devuelve la fecha del siguiente da.

Entrada

Salida

.
.
.

.
.
.

oia (d)
Mes (m)

Ao (a)

oa (d)
Mes (m)

Ao (a)

Diseo:
lnterfaz de Usuario

Diagrama de Flujo

Pseudocodigo

Inicio

Inicio
lo

d, m, a, dmax : Entero
r : Cadena
Leer d, m,

r,3,5,1

/YarabLes

/ /sntrada
Leer d, m/

,8 , rA , 12

dmax
a

d, m/ a, dmax : Entero
r : Cadena

/ /Proceso
En Caso que m Sea
Caso 1,3,5,'7,8tL0,L2

31

11

Caso

(a Mod 100 <>

dmax - 31
4, 6, 9, 11
dmax - 30

Caso 2
Si a lvlod 4 : 0 y (a l.4cd 100 <> 0
O a Mod 400 - 0) Entonces
dmax * 29
S iNo
dmax * 28

QaMod400:0)
dmax - 29

Fln Sr
Fin Caso
d:d+1
Srd>dmaxEntonces
d*1
m*m*1
Sim:13trntonces
m-1
aea+1

d-1
m-m+1

t1n 51
Fin Si
/

/satia

trscribird,m/a
Fin

Escribir

d, m ,a

Codificacin:

#include (iostream)
using namespace std,.
void main (vord)
//Variables
int drmrardmax :
/ /EnLrada

cout(("Dia:

cin))d,'

cout<<"Mes:
cout<<"Ao:
/ / Proceso
sw i uch (m)

cin>>m;

cin>>a;

case l:
case 3:
case 5:
case ?:
case B:
case 1O:
case I 2:
dmax

dmax

break;
case 4:
case 6:
case 9:
case 11:
break;
case 2:

31;

30;

if (a * 4 :- 0 && (l(a
dmax : 29;
else
dmax : 28;

d : d + 1;
if (d > drnax)
^

1.

m +:1;
if (m :=

m*
a**;

13 )

]
)

//Salida
cout((" \n",'
cout(("Dia: ..<<d<(" \n,,,.
cout<<"Mes: "<<m<<" \n";
\\<<a<<"\'t.
cout<("Ao:

100::0)

a';400::0))

Problema 40
Enunciado: Convierta a nmeros romanos, nmeros menores a 4000.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese el nmero, luego el
sistema convierte y devuelve e[ nmero a romano.
Entrada

Nmero decimal (n)

salida

I .

rumero romano (r)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Inicio
n, u, d, c/ m: Entero
r : Cadena
v

n<-3999

u-flMod10
n * n \ 10
d-nMod10
n * n \ 10
c. nModlO
n .., n \ 10
nl . flModl0

vrrrwwtt

rLrtWWWtt

T*r+"XL"

r*r+"LXX"
r*r+"LXXX"

r*r+"XC"

r*r+"xx"
r*ri"XXX"

r*r+"XL"
r*f:+"cccll
rtf

+" c)tt

r*r+"LX"
r*r't"LXX"
r-r+"LXXX"
r*ri"XC"

r*r+"DCCC"

Escribir r

3,,' -,,,' l ''' . :. ::;,,';,'.n,

9ryt.ulo# Est3ctUraSele,ctiva Mltiple I

Pseudocodigo

Inicio
//Variables
n, u/ d, c, m : Entero
r : Cadena
/ /sntrada
Leer n
/

/Proceso

Sr n (:3999 trntonces
u*rrMod10
n - n \ 10
d-nModlO
n - n \ 10
c*oMod10
n * n \ 10
tll*oMod10
En Caso que m
Caso 1
Caso

Caso

Sea

r -

"MM"

Fin Caso
En Caso que c Sea
Caso 1
T*r+\C//
Caso 2
r*T-*CC"
Caso 3
L*r
Caso 4
r. r-"CD"
Caso 5
T*t+"D"
Caso 6
rer+"DC"
Caso 7
T+L

Caso

Caso

r +

"DCCC"

T, r-t'CM"
Fin Caso
En Caso que d Sea
Caso 1

\\V/,

T+T+..XX"

Caso

Caso

Caso

Caso

T*T+*XXX,,
T+T+*XL"
T*T+"L"
a

Caso

Caso

Caso

\\l

V//

T+T+"LXX"
T+T+*LXXX"
lel+"XC"
Fin Caso
En Caso que u Sea
Caso 1
r - r + \\I//
Caso

I e I + "II"
Caso

Caso

Ud>U

L e r + *III"
y*T+*IV"

tr

\\ r 7//

l*lfv
Ud5U

Caso

Caso

Caso

Fin
Fin Sr
/ /satia
Escribir r

Fin

Caso

\\r7Tl/
VI

\\\ /T T T //

\\TV//

Codificacin:

#rnclude {iostream}
#include <string>
usinq namespace std;

void

main

(void)

/,/Variables

int
q

n, u, d, c,m;

J:rin

\\t,.

/ /Entrada
cout{("Numero:

/ / PTOCeSA

if (n <:3999)
u = n % 10;
n : n / L0;
.lu -- 11
9 1^.
- _o
IV,
n : n / 7A;
c : n % 10;

// 1^.
rr :- lL
Lv;
m : n % 10;
switchr (m) {
case 1:
r

\\M/'

'
r.rrl'

case 2:
r :
a-^-,-.
^^-^
uaDg

\\MM// '
'

!!gq^,
?.
J.

r :

L-^-t-.
UIgOA,

"MMM"'

switch (c)

{
f

r-!r!

r\^/r.

br eak;

case 2:

r=r+"CC",.

h-ak.

case 3:
f. : r + \\^r-n"'
--'
h'rL.
!!Cq^t
case 4:
r:r+'tCD"i
break;
case 5:
T. : r * "D",'
^^^^

hr^ ts.
a.
r : r * ttDC";
h ra: l

case 7:
r = r +
tr-*^-r.

!!EOL,

\\nrar-r/.

case 8:

. : t +
L-^
gd^,- t!a

\\nan-',.

case 9:

r:r
Lr.ri.;

l lgollgqe',qgq"*,+': .j'.:" :.:-:::.r:.,r',,. l


switch (d) {

case 1
+
break;
a.

^-^^
LdSC

\\\z//.

Z:

r=r+"XX";

brea k;

case 3:

r : r + "XXX'';

break,'
A.:

e d5e

!-tAD,

\\vT ,/.

break;
at
ca
LODS

\.
J.

T:r+"L";

break;
case 6:
r:r+*tLX";
break;
case 7:
r:r+"LXX";
break;
o
o. -

^-^^
uoDg

r:r+t'f,XXX",.

break;
Q.
T:T+"XC",.

ca

break,'
)

swltch (u) 1{

.
f .

^-^^
UdDE

T : r * "I";
break;
case 2:
I

\\Tf,,.
lI

L*^
r_,rrearkr.

f .

^-^^

r : r + "ff I";

ca

break;
4.

r = r + ttIV";

break,'

case 5:
r=r+"V";
break;
case 6:

r=r+,.Vf,/;

L-^^
urcak;
case 7:

r*f+"Vff"i
break;
case B:
r:r+\'\/TTTr':
r".i;
case 9:
r * r + ".IX";
break;

]
)

/ / barlda
a^r1l't\tt.\

\rr

cout({"Romano

: "<(r({"\n"

..:.*

:.. -

:,"",

Cpitulo4: Estructura.Setecva.Mltiule

Problemas Propuestos
Los siguientes

problemas le servirn para medirsu aprendizaje, es importante que los resuelva.

Propuesto 2'l
Enunciado: Dado el nmero de un mes, devolver el mes en letras.

Propuesto 22
Enunciado: Lea un nmero del 1al 7 y devuelva el da de la semana, considere que 1es Domingo.

Propuesto 23
Enunciado: Dado los siguientes operadores aritmticos r, -, * y /, devuelva el nombre del operador.

Propuesto 24
Enunciado: Dado el nmero de un canal de televisin, determine cual es el nombre del canal.

Propuesto 25
Enunciado: En una empresa se ha determinado la siguiente poltica de descuento.
Sexo

Hombres

Mujeres

Obrero

15%

L0%

Empleado

20%

7s%

Tareta

Determine mediante un programa, cual ser el monto del descuento al sueldo ingresado de

trabajador.

Propuesto 26
Enunciado: Una frutera ofrece las manzanas con descuento segn la siguiente tabla:
Kilos

% Descuento

o-2

o%

2.01 - 5

L00/o

5.01 - 10

20%

Mayor a 10

30%

Determinar cuanto pagar una persona que compre manzanas en esa frutera.

Propuesto 27
Enunciado: Obtenga el nombre del estado civil segn la siguiente tabla
Estado civl

Cdigo
0

Soltero

Casado

Divorciado

Viudo

Propuesto 28
Enunciado: Determinar el monto que recibir un trabajador por utilidades, despus de ingresar el empo
de servicio y el cargo, segn la siguiente tabla.
Cargo

Administrador

Contador

fmpleado

Entre0y2aos

2000

1500

1000

Entre3y5aos

2500

2000

1500

Entre6y8aos

3000

2500

2000

Mayor a 8 aos

4000

3s00

1s00

Tiempo\"
de Servicio

Propuesto 29
Enunciado: Segn la siguiente tabla, obtener la ciudad que visitar, despus de ingresar su sexo y el
puntaje obtenido en un examen.
Sexo

Masculino

Femenino

Entre 18 y 35

Arequipa

Cuzco

Entre 36 y 75

Cuzco

lquitos

Mayor a 75

lq

Puntaie

itos

Arequipa

Propuesto 30
Enunciado: Dada una fecha determine cuntos das faltan para que acabe el ao.

Captulo 5

Estructura Repetitiva Mientras


lntroduccin
Muchas veces se requiere repetir una o varias instrucciones para llevar a cabo una tarea, en la
programacin se cuenta con estructuras que permiten realizar este proceso, llamados tambin bucles,
iterativas, lazos, entre otros.

ct

Dependiendo el lenguaje de programacin, estas incorporan dos o ms estructuras repetitivas, dentro de


las cuales las infaltables son mlentras (while) y para (for), con las cuales se puede resolver todo problema

que involucre procesos repetivos.

Cuando se trabaja con estas estructuras se uliza trminos como contadores, acumuladores, forzar la
salida del bucle y continuar al inicio del bucle.

Contador
Son variables enteras que se incrementan (+) o decrementan (-) con un valor constante, por ejemplo una
variable c cuyo valor se incrementa de 1 en 1, se conoce como variable contador.
Ejemplos Pseudocodigo

c..c+1
i*i+2
t*)-1
C++

a:.
!

+ 1.
)-

L,

Acumulador
Son variables de cualquier po que almacenan valores variables, por ejemplo la variable c cuyo valor se
incrementa por el valor que va tomando otra variable llamada x.

Ejemplo Pseudocodigo
C+.C+x

i-a+c
r*j-i
C++

c:c
I

f-

t.

-)-

Salir del bucle


Es una instruccin que permite forzar la salida de un bucle, para esto los lenguajes de programacin
incorporan una instruccin que permita realizar dicha operacin.

Pseudocodigo

Salrr
C++
1-rrL.

Gontinuar al inicio del bucle


Es una instruccin que permite saltaral inicio del bucle para volvera ejecutarse, para esto los lenguajes
de programacin incorporan una instruccin que permita realizar dicha operacin.

Pseudocodigo
Con

i nuar

C++

continue;

Estructura repetitiva Mientras


Permite repetir una o ms instrucciones hasta que la condicin (expresin lgica) sea
verdadera, cuando

la condicin es falsa sale del bucle.

Mientras Exp. Lgica


xp. Lgic
Ins

Instruccin

Instruccin

Tns

truccin I
truccln n

Fin Mientras

Sintaxis C++

while (<Exp. Log.>)


(instruccin
(instruccin

1>,.

n>;

Estructura repettiva Mientras andada


Dentro de la estructura repetitivJ es posible colocar una o ms estructuras repetitivas
as como otras
estructu ras.

Mientras Exp. Lgica

xp. Lgic

Mientras Exp. Lgica


xp. Lgi
Instruccin
Instruccin

Instruccin
Instruccin
1

Fin Mientras
Fin Mentras

Sintaxis C++

while (<Exp. Log.>) t


while (<Exp. Log.>)
<instruccion 1 >;
<ins trucc ionn>;
l
)

Problema 4f
Enunciado: Obtener la suma de los primeros N nmeros naturales positivos.
Para la solucin de este problema, se requiere que el usuario ingrese un nmero y el sistema
realice el proceso para devolver la suma de los N primeros nmeros.

Anlisis:

Salida
| . Suma (s).

Entrada

Nmero (n).

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inic-c
F,nler:o

//variables
i,n/s:Entero
/ /entrada
Leer n
/

/Proceso

1-1
Mientras i<:n
* i

i*i

trin Mient:as
Escribir

/Sa]-da

^rr

!'r-n

h-

Codificacin:

#include (iostream)
usrng namespace std;
void main (void)

/ / Varlab-Les
'i nt

^ ^
,ltrD

-_

n.
V,

/ / Lntrada
cout(("Numero: "; cin>)n;
1 / ! ruuqu

while (i <: n) {
c :
i :

a + i.
i r-1 .

/ / 5a11da

cout(("\";
COuc((/'SUma

: "<<S<<"\n",.

Problema 42
Enunciado: Dado un rango de nmeros enteros, obtener la cantidad
contiene.

Anlisis:

de numeros enteros que

Para la solucin de este problema, se requiere que el usuario ingrese el nmero inicial y
final,
luego el sistema procesa y devuelve la candad de nmeros enteros que contiene
el rango.
Entrada
Salida

.
.

Nmero lnicial (ni).

Cantidad (c).

Nmero Final (nf).

Diseo:
lnterfaz de Usuario

-,nr:xi

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Tnicio

, c, ni,

nf,

Leer ni,

/varabLes

: Entero

i, ct ni, nf : Entero

nf

/ /entrada
Leer ni, nf

i*ni+1
/

/Proceso

r-ni+1
Mientras i < nf
c*c+1
+1
i*i
Fin Mientras
Escribir

/ /satiaa
Escribir

Fin
Codificacin:

#incfude <iosream>
using namespace std;

void

main

(void)

/ /variables
int i,ni,nf,c:0;
/ / Ln.Lrada

cout({"Num. Inicial : ",' cin>>ni,'


cout(("Num. Final: "; cin>>nf;
/ / Proceso

i = ni + 1,'
while (1 < nf)

i++;
//SaLida

cout<("\n";

cout<<"Canti dad: "<<c<<'\n",'

Problema 43
Enunciado: Dado un rango de nmeros enteros, obtener la cantidad de nmeros pares que
contiene.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el nmero


inicialyfinal y
el sistema procese y devuelva la candad nmeros pares que contiene el rango.

Entrada

.
.

Salida

Nmero inicial (ni).

Candad de pares (cp).

Nmero final (nf).

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Inf cio
Entero

Leer ni,

nf

Pseudocodigo

Inicio
//Variables
i, cp, ni, nf:

Entero

/ /Entrada
Leer nl, nf

i*ni+l
/

/proceso

i*ni+1
Mientras _i < nf
Sr i Mod 2.: 0 Entonces
cp-cp+1
Fin Si
r-i
+1
Fin Mientras

cP*cP+1

/ /satiaa
Escribir

Fin
Escribir

cp

cp

146

| Algoritmos con G++

=.nclude (iostream)
using namespace std;
void

ma

i n (void)

,/,/Variabf es
:-nt i,ni,nf,cp

: 0;

I /Entrada
cou-'<<"Num. Inicial- : ",' cin>>ni;
cout<<"Num. Final: ",' cin>>nf ,'
/ / Yracea-.

i : ni - -;
while(i <:.:'{
if (r
- =: .)
ul]

i++,'
)

/ / SaLda

g611("i 1",'
cout(("Ca:::.

Pares: "<<cp<<"\n",'

Problema 44
Enunciado: Obtener la cantidad de los primeros N nmeros mltiplos de

5.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese


sstema devuelva la candad de nmeros mlplos de 5.
Entrada

Nmero (n).

Salida

| .
I

Candad (c).

Diseo:
lnterfaz de Usuario

un nmero, luego el

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio

Entero

//variables
i, ct n : Ent.ero
/ /Enl-rada
Leer n

/Proceso
i*1
Mientras i (- n
Si i- Mod 5:0
EnLonces
c. c+1
Fin Sr
* 1
r*r
F in Mientras
/

/ /SaLda
Escribir

Escribir

!'l-n

Codificacin:

#include (iostream)
using namespace std;
void main (void) {
/,/Variables
r

I nt
rrrL

:_

a, ^LL, v^

/..1.
v,

/ / l-nLrada
cout<<"Numero: "; cin)>n,.
/.i / tsroceso

* r.
Lt
-

while (1 <: n)
:t:t:
I tr
f

\r

c +- 1;

{
.--

--

0)

i++;
]

/SaLida tt .
11"
\ n
cout<<//Cantidad : "<<c(<"\n",.
/

rattl

\Il

Problema 45
Enu-c

:: l::c

un nmero, determinar cuantos dgitos tiene.

A-; s": ::'= asolucindeesteproblema,serequierequeel usuarioingreseunnmeroentero,


. -1- = .='fica y determina la candad de dgitos que conene.
i -:-:a
I Salida
. ', --ero (n).
I . cantiad de dgitos (c).
l,seo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

-:llCaO

c, r : dltero

//Variables
n
LL,

tr'nlr

/ /Entxada
Lee: l

n* n\

10

C-c*1

/ /Pxoceso
r'lag-1Ltd5

i1l

n * I \
Fin Mienr::a"

Escribir

/satiaa

Escribir c
Fin

rC

luego

tiffiiliiif ii

gi

Codificacin:

finclude (iostream)
usl-ng namespace std;

void

main

(void)

//Varrables
int n,c : O;
/ /Entrad,a

cout(<"Numero:'t; cin>>n,.
/ /Proceso
while (n >

n:n
uf*

0)

/ 1A.
1.

//

Salida

cout(<"\n";
cout(("Cant. Digitos : ..((c<(,,\n,,;

Problema 46
Enunciado: Dado un nmero, determinar la cantidad de dgitos pares que
contiene.

Anlisis:

Para la solucin de este problema, se requiere que el usuario


ingrese un nmero entero y el
sistema verifica y devuelve Ia cantidad de dgitos enteros que
conene el nmero.

Entrada

Nmeros (n).

I Salida
I . Cantlad de dgitos pares (c).

Diseo:
lnterfaz de Usuario

Al$oritmo*s

Algoritmo

Diagrama de Flujo

Inicio

Pseudocodigo

Inicio

i, d, c, n : Entero

//variables
, d, ct n : Entero
/

/Etrada

Leer
/

d. nMod10

n . n \

/Proceso

Mientras n > 0
d-nMod10
SidMod2:AEntonces
c*c-1-1
Fin Si
n - n \ 10
F in Mientras

10

/ /satiaa
Escribir

Fin

Codificacin:

#lnclude (iostream)
using namespace std;
void main (void) {
/ /Variabfes
rnt i, d, c :

O, n,'

/ /EnLrada
cout{("Numero: "; cln)}n;

/ / Proceso

while (n > 0) {
d : n % 10;
af tA 2 )::

+!

\s

c+=

I
It

/ -

0)

1.

LV t

//salt.da
aattl

11tt\nt'.

cout{("Cant. Digito pares: "<<c{<"\n";

,F-$.fi$tura,Seie1itiva Mientrae

Problema 47
Enunciado: Dado un nmero, devolver el dgito mayor.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese


un nmero entero, luego
el sistema verifica y devuelve el dgito mayor.

Entrada

salida

| .

Nmero entero (n).

Dgito mayor (m).

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio
Ent e ro

//variables
drm/n:Entero
/EnLrada
Leer n
/

d-nMod1

n. n \

10

/ /proceso
Mientras n > 0
d*nMod10
Sid>nEntonces
m*d
Fin Si
n * n \ 10
F in Mlentras
/ /SaLLda

Escribir
Escrrbir

Fin

Codificacin:

#include <iostream)
us

ng namespace std;

vold main (void)

/ /Variables

inu d,m = O,n,'

/ /EnLrad,a

cout(("Numero: "; cin>)n;


/ / Procesa
while (n > 0) {
d - n e" 10;
rf (d > m) {
m:d;
)

n /:

70;

]
/ /cI i ^
/ / oallgd

cout<<"\n",.

coul{{"Di-gito

mayor

: "<<m<<,,\n',;

Problema 48
Enunciado: Dado 2 nmeros diga si son amigos, recuerde que dos nmeros son amigos si la suma de sus
divisores de uno de ellos es igual al otro y viceversa, por ejemplo 220 y 2g4 son amigos:
Divisores de 220 son:

+ 2 +4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 1,1.0 = 284

Divisores de 284 son:

I+2+4+7I+I42

=220

Anlisis:

Para la solucin de este problema, se req uiere que el usuario ingrese dos nmeros (n1 y n2),
luego el sistema verifica y devuelve si es o no nme ro amigos.

Entrada

Salida

Nmeros (n1, n2)

Respuesta (r)

SON AMIGOS

NO SON AMIGOS

Diseo:
lnterfaz de Usuario

Captulo 5: Estructura Repetitiva Mientras


Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio

i, s1, s2, nI, n2 : Entero

//Variables
i, s1, s2, fl1, n2
r : cadena

r : Cadena
Leer nl,

n2

Entero

//entrada
Leer nl, n2
i<:n1\2

/Proceso

r-1
Mientras r <: n1\2
SinlModi:0
s1 * sl +
Fin Sr
r:r*1
Fin Mientras

s1 * s1 + i

Entonce s
.r

r*1
Miencras i <: n2\2

Sin2Modl:0Entonces
s2*s2+t
Frn Sr
i:1+1

i<=n2\2

in Mientras
Sr nl - s2 Y n2 : nI
F

r *

s2*s2+i

iNo

r * "NO SON AMIGOS"


Frn Si
/ /satiaa
trscribir r

Fin

l:s2 Y n2:s
r*"NO

SON AMIGOS"

EnLonces

"SON AMIGOS"

r-"SON

Escribir r

AMIGOS"

Codificacin:

--nclude <ioslream>
*:nclude <string>
us.i

nq namespace

s Ld,.

void main (void)

/ / var. labIes
'i
rrrL
^+

I
I,

e]-ri

nn

*1
^a
LtL I IIL

^1
5l

A, s2 -

0;

Ll

/ / EnLrada

cout<<"Numero 1:
cout<<"Numero 2:

cin>)n1,'

cin)>n2;

/ / Praceso

while (1 <= nI / 2) {
rf (n1 e i :: 0){
c1 +:

i++,'
]
I

a,

while (i <: r)
Lf (n2 i

t/
ri

c?

)\ tI
Lt
fl\
v/

--

+-

i++;
]

rr\n
el se

a
:- sz d& rz:=
-r = "SON. IAMIGOS";

^1\
s-L)

r : "NO SON AMIGOS"..

//Salida
cout((" \ n";
cou t<<"Resu-L L.ado:

"<(r<<" \n";

Problema 49
Enunciado: Dado un nmero, devuelva el inverso del nmero.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el nmero y el sistema
procesa y devuelve el inverso del nmero.

Entrada

'

Nmero (n)

I Salida
| . Nmero inverso

(i)

C{p,tulo,g r,:H$tructufa :Re.pstitiva ilientras


Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio
Entero

/YariabLes

d,n,i:Entero
/ /sl.rada
Leer n
/

d. nMod10
n . n \ 10
i * i * 10 +

Escribir i

//satia
Escrrbrr r
Fin

Codificacin:

#include (iost.ream)
using namespace std;
void main (void)

/ / varlaDles
lnt drn,i = 0;

/ /EnLrada
cout(('/Numero: "; Cin>>n,.
/ / Proceso
whil-e (n > 0)

d : n % 10;
n : n / LO;
i-i*10+d;

/ / sartd.a
cout<<" \n",'
couL<<"fnverso
]

: "<<i<<"\n",'

/Proceso

Mientras n >
d*nModlO
n * n \ 10
I . :- * 10 +
Fin Mientras

Problema 50
Enunciado: Crear un algoritmo que indique si un nmero es cubo perfecto (anstrong) o no, se dice que

un nmero es cubo perfecto si al sumar los cubos de sus dgitos dan el mismo nmero, por ejemplo 153,
cubos de sus dgitos 13 + 53 + 33 = 153 el nmero 153 es cubo perfecto.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el nmero y el sistema
procesa y determina si es o no un cubo perfecto.

Entrada

Salida

Nmero (n)

Respuesta (r)

CUBO PERFECTO

NO

ES

CUBO PERFECTO

Diseo:
lnterfaz de Usuario

Diagrama de Flujo

Algoritmo
Pseudocodigo

Inicio

Inrcio

//Variables
Lt d, s/ n:
r : Cadena

t, d, s/ n : Entero
r : Cadena

Entero

/ /tnt-tada
Leer n
/ /Proceso
t*n
Mienrras t >
d*tModlO

r*r \

*tMod10

r- r \

10

S*S+d^3

10

Fin Mientras

s*s+d^3

Sin:sEntonces
r * "CUBO ptrRFECTO"
Si-No

r * "NO ES CUBO
Fln Si
r-"CUBO PERFECTO"

Escribir r

/ /SaLda
Escribir r

Fin

PERFECTO.

-t
Codificacin:

4i-nclude (iostream)
#lnclude (st.ring>
4include <marh.h>

using namespace sLd;

void

main

(void)

/ / va rlal)les
int t, d, s
ry

cFrin
ru!rrrY

O, n,'

\\//.

/ / Entrada
cout({'Numero : -',- cin)}n;
/ /Praaa.n

t:n;

while (t > 0) {

d- t
t

/=

% 10;
1.t

Lv

s = (int) {s + pow( {double)d, 3.0));


et

r :

"CUBO DFDT'T'TA/"

!r

\\nT^
!\u

--

r
L.)

CUBO PERFECTO";

/ / 5ar1oa

cout(<"\n";

cout({"Resuf t.ado : ..<(r<<,,\n,,

Problema 5l
Enunciado: obtenga el cocente y el residuo de una divisin mediante restas sucesivas, por ejemplo si
el dividendo es 3989 y el divisor es 1247, entonces:

- 7247 = 2742
2742 - 1247 = 1,495
3989

R(1)
R(2)

1,495-1.247 =248
R(3)
puede seguir restando, pues 248 es menor a 1,247, entonces el cociente es el nmero
de veces
restado (3) y el residuo es el lmo nmero obtenido (24g).

Ya no se

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese la temperatura y
sistema verifica y determina el clima.
Entrada

.
.

Numerador (n)
Denominador (d)

Salida

.
.

Cociente (c)
Residuo (r)

el

Diseo:

lnterfaz de Usuario

Diagrama de Flujo

Pseudocodigo

Inicio

Inicio
Ent-e

Leer n,

ro

/varabLes

/sntrada

n, d, ct t: : Entero
Taar
lue!

n-r-C
C.

n
r1l

/Proceso

".
n. n-d
c. c+1

\ I ^ ^ .-

C+-

trin Mientras
I+Il

Escribir c, r

Fin

Codificacin:

#include (iostream)
using namespace std;
void main (vo1d) {
/ /Variables
int nrd,c : 0,r;
/ / EnLrada

cout(<"Numerador: "; cin>>n;


cout(("Denominador: "; cln>>d;
/ / Proceso

whjte(n
'-v, d) t
n
1]
-=
^14 , r
U

'.1.

//Saltda
cout<<"\n";
cout<<"Cocience : "(<c<<"\n",'
cour(<"Residuo: "<r<<"\n";

/satia

Escribir c, r

Froblema 52
Enunciado: Determine si un nmero es capica o no, se dice que un nmero capica es aquel nmero
que al invertir sus cifras da el mismo nmero, por ejemplo 12321 invertido es 1232L entonces es un
nmero capica.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero y el sistema
verifica y determina el es o no capica.
Entrada

Salida

Nmero (n)

Respuesta (r)

ES CAPICUA

NO

ES CAPICUA

Diseo:
lnterfaz de Usuario
n!X1
--.-.i;-.

-.

-..1

Diagrama de Flujo

Pseudocodigo

Inico

Inicio

//variables
n,i,d:Entero
: Cadena

n,r.d:Enterc
r : Cadena

/sntrada
Leer n
/

/ /Proeeso

t.,n
Mientras t > 0
d * r Mod 10r, _ t \ 10
i * r * 10 + d

d-tMod10

r*r\
i.

10

i*10+d

fin Mientras
Sin:iEntonces
r . "trS CAPICUA"
S

r*"NO ES

r. ,,ES

CAPICUA

Es

cribi r

CAPICUA,,

iNo

r * "NO ES CAPICUA"
Frn Si
/ /satiaa
Escribir r
.E'r-n

Algorihnos con G++

Codificacin:

#include (iostream)
#include <string>
using namespace std;
void main (vord) {

//Variables
int n,i : 0,d,t;
\\n.
cJ-rinn

/ / Ln-Lrada

cout(("Numero: "; cin>>n;


/ /Proceso
I

n.

whrle (t > 0)

d- t \

r: r/

7A;

7a;

i:i*10+d;

ir

l|11 --

r./

r = "ES CAPICUA";
else
r : "NO trS CAPICUA";
/ / satida
cout{("\n";
cout({"Resultado : "((r{("\n";
)

Problema 53
Enunciado: Dado un nmero, determine si un nmero primo, recuerde que un nmero primo es aquel
que solo es divisible por 1 y por si mismo.
Para la solucin de este problema, se requiere que el usuario ingrese un nmero y el sistema
determina si primo.

Anlisis:

Entrada

Salida

.
-

Nmero (n)

Respuesta (r)
ES

PRIMO

NO

ES

Diseo:
lnterfaz de Usuario

PRIMO

Algoritmo
Diagrama de Flujo
I

Pseudocodigo

Inicio

ni cio

n, i : Entero
flag : Logico
r : Cadena

flag * Verdadero
-2

//Variables
.

I|,

L t^y^

flag : Logico
r : Cadena
/ /Enl-rada
Leer n
/ /Proc,eso

i<-n\2

flag-Fal so

flag - Verdadero
t*2
Mientras i <: n\2
SinModi-0
flag - Fal-so
Salir
I r-n 5r
i*r+1
F-in Mientras
Sr flag Entonces
r - "ES PRIMO"
S

r*"NO ES

r - "NO ES
Frn Si

PRIMO"

Escribir

rNo

/ /Sa]-ida
trscribir r

Fin

PRIMO"

Atgqiif lass,,E*F,,S*f:,
Codificacin:

ude <i osLream>


#-LncIude <srring>
#

i nc

using namespace st.d;

void

(void)

main

//Variables
inL n,j,'
bool flag;
crrinn
bL!r11V

L7 --

\\//.
-"';

/ /Entrada
gout<<"Numero : ",' cin>>n,'
/ / Proceso
flag : true"
:L
-

a.
Z;

while(i <: n / 2)l


if (n ". r::
O){
flag : false;
brea k;
l
J

i+)

"

if (flag)
r : "ES PRIMO";
efse
r : "NO ES PRIMO";

//sarioa

couL(<"\n",'
cout({"Respuesta : "(<r(("\n"

Problema 54
Enunciado: Dado un nmero y su base, determine si el nmero pertenece a la base ingresada, recuerde
que un nmero pertenece a un base si sus dgitos son menores a su base.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero, luego
sistema verifica y determina si pertenece a la base.
Entrada

Salida

.
.

Nmero (n)
Base (b)

Respuesta (r)

BASE CORRECTA
BASE INCORRECTA

el

Rgfetitiva filientras

CapJtulo:5:
Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Ini ci

Inicio

n,b,d:Entero
flag : Logico
r : Cadena

//variables
^-1,

h
p,

flag:
T I Cadena

trn|
----ifo

Loqico

/sntrada
Leer n, b
/

flag - Verdadero

n. n\

l-0

flag - Falso
Sal ir

/ /Proceso
flag - Verdadero
Mientras n > 0
d-nModlO
n - n \ 10
Sid>=bEntonces
flag *. Falso
SaLir
Fin Sr
Fin Mlentras

Si flaq Entonces
L "B.ASE
S

Fin Si
r.,,BASE

INCORRECTA,,

r-,,BASE CORRECTA"

Escribir r

r - "BASE

/ /satia
trscribir r

Fin

CORRECTA"

rNo
INCORRECTA"

Codificacin:

#include <iostream>
#include <string>
using namespace std,'

void

(vord)

main
/

/var iabl es

int

n ,prvt
l-r ',1.

L^^f

t^^.

rJU(Jr
irdg,
7
rc+rin
u! rrY

\\//.

/ /EnLrada
cout(("Numero: "; cin))n;
cout(("Base: "; cin))b,'
/

/Proceso

flrlqY:n

lrrra.

while (n > 0) {
d: n % lO;
n /: IO;
if (d >: b) {
flag : false,'
brea k;
]

rf

(flag)

r :
e1 se
r :

"BASE CORRECTA'".

"BASE INCORRECTA";

/ / Salaoa
cout<<" \n";

coul({"Resultado : t'<(r(("\n"

Froblema 55
Enunciado: Dado un nmero entero en base 10, convertir el nmero a otra base menor que 10.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese el nmero entero y
base a convertir; luego el sistema devuelve el nmero converdo a su nueva base.

Entrada

Salida

.
.

Nmero (n)
Base (b)

Nmero convertido (r)

la

lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

fni ci o

n, d, i, r : Entero

//Variables
n, d, i, r : Entero

Leer n, b
/

/EnErada

Leer n,

/Proceso
Mi-entras n >
/

d-nModb
n-n\b
i - i * 10 + d

d*nModb
n : n \ 10
i : i * 10 +

Fln Mientras
Mientras r >
d*iModlO
i : i \ 10
r : r * 10 +
Fln Mientras
O

d*iMod10
i * i \ 10
r - r * 10 +

Escribir r

/ /satia
Escribir r
-E'.an

Codificacin:

#include (i-ostream)
using namespace sLd;

void

maln
,/

(void)

/Variables

int n,b,d, i:0, r:0;


/ /Entrada
qout(("Numero Base 10 "; cin>>n;
cout(("ConverLir a base: "; cin>>b;
/ /Proceso
while (n >
-^o,
u /LL
^
/i-i*
a-r

rl

0)
o

bt

l-.
p,

l_0

+d;

t
I

while (i >

0)

10;

u-ao
/-

LV,

r=r*

10+d;

\
J

/Sa|ida

cout<< " \n";

cout(("Resultado : "((r(("\l-t"

Problemas Propuestos
Los siguientes

problemas le servirn para medir su aprendizaje, es importante que los resuelva.

Propuesto

31

Enunciado: Obtener el factorial de un nmero, recuerde que elfactorial de un nmero es el producto de


Ix2x3 x... x N.

Propuesto 32
Enunciado: Dado un rango de nmeros enteros, obtener la cantidad de nmeros pares e impares que
contiene el rango, sin considerar los mltiplos de 5.

Propuesto 33
Enunciado: Calcular la suma y el producto de los N primeros nmeros naturales mltiplos de 3.

Propuesto 34
Enunciado: Dado un nmero, determinar cuantos dgitos 0 conene.

Propuesto 35
Enunciado: Se requiere saber si existe un determinado dgito en un nmero dado.

Propuesto 36
Enunciado: Dado un nmero, determinar cual es el porcentaje de nmeros pares, impares y neutros
(0).

Propuesto 37
Enunciado: Dado un rango de nmeros determine cuntos nmeros primos conene.

Propuesto 38
Enunciado: Dado un rango de nmeros determine cuntos nmeros capica hay.

Propuesto 39
Enunciado: Dado 2 nmeros obtener el MCD (mximo comn divisor), utilice el mtodo EUCLIDES
(divisiones sucesivas).

Propuesto 40
Enunciado: Dado 2 nmeros obtener el MCD (mximo comn divisor), utilice el mtodo Factorizacin
simultanea.
Recuerde: El mximo comn divisor es el divisor mayor comn de todos ellos.

Captulo 6

Estructura Repetitiva Para


lntroduccin
Cada vez que requiere repetir un proceso una cantidad de veces, deber usar la estructura repetiva
para (for) que facilitar realizar en forma simple este trabajo.
Esta estructura usa una variable contador donde se estable el valor inicial (vi), valor final (vf) y el valor de
incremento (inc), que determina las veces a repetir la instruccin.

Estructura repetitiva Para


Permite repetir una o ms instrucciones una candad de veces.

i
vf
+1

Es

nuestra variable contador, donde establecemos el valor inicial.

Representa el valor final de la variable contador.


Valor de incremento.

Para i * vi Hasta vf Inc


Ins

truccione

Sintaxis C++

for (r:vr;i<:vf;i++)
<

lnstruccaone s >;

I ns t
s

Fin Para

ruccione

+1

AIS$t{tf

f-rfi

6*rF

h:'c*:f

Estructura repetitiva Para anidada


Dentro de la estructura repetitiva es posible colocar una o ms estructuras repetivas as como otras
estructu ras.

Para i - vi Hasta vf Inc +1


Para j - vi Hasta vf Inc
Insc rucc i ones
Fin Para
Fin Para

Inst rucciones

+1

Sintaxis C++

for (i:vi;i<:vf;a++)
for (l=vi;j<:tf;l++)
<

{
{

instruccrones),'

Problema 56
Enunciado: Obtener la suma de los primeros N nmeros naturales positivos.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese un nmero y el sistema
realice el proceso para devolver la suma de los N primeros nmeros.

Entrada

Nmero (n).

salida

| .

sur,

(r)

Diseo:
lnterfaz de Usuario
D! x,
::l

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio

//Variables
i,nrs:Lntero

Entero

/ /Enl'rada
Leer n

/Proceso
Para i*l Hasta n Inc
q_a
+1
Fin Para
/

/ /satiaa
Escribir

Escribir

Fin

Codificacin:

#include diostream)
using namespace std;

void

main

(void)

/ / varaaDres

int lrn.s

: 0;

/ / LnLrada
cout(("Numero:

cin))n;

/ / Proce so

for(i=1

J_

i++
^

/ /SaLida
cout(( " \ n";

a:.

cout<<"Suma: "<<s(<"\n";

Problema 57
Enunciado: Dado un rango de nmeros enteros, obtener la cantidad de nmeros enteros que
contiene.
Para la solucin de este problema, se requiere que el usuario ingrese el nmero inicial y final,
luego el sistema procesa y devuelve la candad de nmeros enteros que contiene el rango.

Anlisis:

Entrada

Salida

.
.

Nmero lnicial (ni).

Cantidad (c)

Nmero Final (nf).

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Ini cio
Ente ro

Leer ni,

nf

//variables
, c, Di, nf : Entero
/

/sntrada

!uu!

-i

^l

rrrt

a!!

nf*nf-1

/ /Proc,eso

nr*ni+1
nf. nf-1
Para i*ni Hasta nf Inc
c*c+lFin Para
/

Escribir

/satiaa

Escribir c
c
.E'r-n

Codificacin:

#incl ude <iostream>


using namespace std;
vo

id

ma

j n (void)

/ / varla.o Ies
i+

lllL

Ir

-i
Ilf

^+

r ll!

t 9

^.

V t

/ / LnLraaa

cout(("Num. I ni cial : "; cin>>ni;


cout((/'Num. Final : t'; cin>)-nf ;
/

/ pYA-ac^

ni = ni + 1;
nf:nf-1,'
rvL

\r

LLL,

/-^.

I\-lLt

r++

C +: 1;
/ /c-r.; r/ I OLLVQ
attr1"\n't.

cout.(("Cantidad:

"<<c(("\n";

Problema 58
Enunciado: Dado un rango de nmeros enteros, obtener la cantidad de nmeros pares que contiene.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese el nmero inicial
el sistema procese y devuelva la cantidad nmeros pares que conene el rango.

Entrada

Salida

.
.

Nmero inicial (ni).

Cantidad de pares (cp)

Nmero final (nf).

Diseo:
lnterfaz de Usuario

yfinaly

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio
i, cp, ni, nf:

//Variables
i, cp, ni, nf:

Entero

Entero

r ni, nf
/ /Enl-rada

ni. ni+1
nf-nf-1

Leer ni, nf
/ /Pxoeeso

ni-ni+1
nf-nf-1
Para i*ni Hasta nf Inc 1
SrrMod2:aEntonces
cp*cp+1
Fin Sr
trin Para

cp-cp+1

Escribir

/ /satia
Escribir

cp

Fin
Codificacin:

#include (iostream)
using namespace stci,'
void main (vold) {
/ /Variables
int i,ni,nf

cp =

0,'

/ / L;nt raoa
gouL<<"Num. Tnicial :
cout<<"Num. Final: "

c j-n>>ni;
cin>>nf ,'

";

rruLcu
// //

^^^^-^

ni : ni + 1,'
nf:nf-1;
for(i - ni; r (: nf,' i++) {
if(i%2-:a) .
n

+,

1Lt

/ / SaLida

cout(( " \ ";


couc<<"CanL. Pares: "<<cp<<"\n";

cp

Problema 59
Enunciado: Obtener la cantidad de los primeros N nmeros mltiplos de

5.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero, luego
sistema devuelva la cantidad de nmeros mltiplos de 5.
Entrada

Salida

Nmero (n).

Candad (c)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

fnicio
inicro
Ente:o

//Variables
i,atn:Entero
/ /EnErada

Leer
/

/Proceso

rdLd

L*L
U*L

Fin Para
Escribrr

/satiaa
cribir

Es

Fin

Hasta n Inc

+1

el

Codificacin:

hinclude <iostream>
using namespace std;

void

main

(void)

/ /var i ables

int i,nrc:

O,'

/ /trnLrad.a

cout{<"Numero: "; cn>>n;


/

/Proceso

for (i : 1; i(:,' i+=5)


c +: !;
/ /satta
cout((" \n" ;
cout(<"Cantidad: "<<c<("\n";
)

Problema 60
Enunciado: Obtener la suma de pares e impares de los primeros N nmeros enteros posivos.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero, luego
sistema devuelva la suma de pares e impares.
Salida

Entrada

Nmero (n).

.
.

Suma pares (sp)


Suma impares (si)

Diseo:
lnterfaz de Usuario

el

Algoritmo

Diagrama de Flujo

Pseudocodigo

Inic I o

Inicio
n : Entero

L, sp, si,

//Variables
i, sp, sl, n : Entero
/

/tntrada

Leer

/ /Proeeso

Para i-l

si
trin
YdLd

Hasta n Inc

si - i

Para
L*Z

ndSLd

spsp+i
trin

sp*sp+i

Para

/satiaa

rc^rilirrvr!

Loe!

Fin

Codificacin:

#include (iostream)
using namespace std;
void main (void) {
/ /YariabLes

rnt i,nrsp = 0, sj :

O;

/ l E,ntraoa

cout{{"Numero: "; cin)}n;


proce so

/
;;li-:-I;
,/

i <- n; i +: zt{

si +: i;

forli:2i<:
on +:
i
UY

L'

n; i +- 2){

l
/ /Salida
cout(("\n";

cout{{"Suma pares: "{{sp{{"\n


cout.((/Suma impares: "<<si<<"

<n

Jyl

"i

nc

Problema 6l
Enunciado:Hallarel cuadradodeunnmerousandolasiguienterelacinN2=1+3+5+.....+2N-1.
Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero, luego
sistema devuelva el cuadrado del nmero.

Entrada

Salida

I .

Nmero (n).

cuarado (c)

Diseo:
lnterfaz de Usuario

Pseudocodigo

Diagrama de Flujo

fnicio

Inrcio

//Variables
L,nrc:Entero

i,n,c:Entero

/El-rada

!ccl

1t

/Proceso

l1
rdl d _L-r
C*C

Hasta n Inc
\L

Fin Para
Escribir

/satiaa

Es

Fin

cribir

1
rl

el

Sa$ftul$.,$i
Codficacin:

#include (lostream)
using namespace s cd,'

void main(void)

/ / varl.a0-Les

inc i,n,c:A;
/ / LnlL'rada

g6rtl((

/'Nurne

ro : " ,'

/Proceso
for(i:
1; j<=

cin))n;

c:c+(2*
//Satida
couc(("\n",'
coul<<"Cuadrado

n,'

i++
'I -

1\ '

: "<<c<<"\n";

Problema 62
Enunciado: Crear el algoritmo que indique si un nmero es perfecto o no, se dice que un nmero es
perfecto si la suma de sus divisores es igual al nmero, por ejemplo 6 ene como divisores 1,2 y 3,

entoncesl+2+3=6el nmero6esperfecto,si el nmeroes9tienecomodivisoresl,3,entoncesl+


3 = 4 no es perfecto.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nmero, luego
sistema devuelva si el numero es o no perfecto.

Entrada
. Nmero (n).

salida

I r
I

Respuesta (r)

Diseo:
lnterfaz de Usuario

el

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inicio
hrsri:Enterc
r : Cadena

//Variables
nrsri:Entero
r : Cadena
/ /st-rada
Leer n

i<:n \ 2

/Proceso
Para i*1 Hasta n\2 Inc
/

SinModi:0Entonces
s*s * i
F

r n 5l

Fin Para
Sin=sEntonces
r - "PERFECTO"
S

iNo

r * "NO trS
r-"NO ES

PERFECTO"

r*"PERFECTO"

Escribir r

Fi,n Sr
/ /satia
Escribir r
! l-n

PERFtrCTO"

Codificacin:

#include <iostream)
*incfude (string>
using namespace std;
void ma j n (void) {
/ /Var i ables

i -r
^ s=u,
^-n
l-Itt
n,
.1 ;
<r'i

nn

/ /Eni_rad,a

cOut(<"Numero: "; Cin>>n,.


j / 9r^-^c^

for(i r+/-: 1,'


i <= n / 2; i++)
o ' __
rr

\r|o
c

a -+:
i'

0)

L,

if (n == s
r = *PERFECTO",'
el se
r - "NO ES PERFECTO";
1

/.:^1 ; A.

^^\1t//tt\

\Ir-,t

.
,

cout(<"ResuItado : "<<r<<"\n",'

Problema 63
Enunciado: Dado 2 nmeros diga si son amigos o no, recuerde que dos nmeros son amigos si la suma
de sus divisores de uno de ellos es igual al otro y viceversa, por ejemplo 220y 284 son amgos:
Divisores de220son: 1 + 2 + 4 + 5 + 10 +
Divisores de284 son: 1+

1,1,

+ 20 + 22 + 44+ 55 + 110 = 284

2+4+7L+!42 =220

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese dos nmeros, luego el
sistema devuelva el resultado si los nmeros son amgos o no.

Entrada

Nmeros (n1, n2)

r Salida
| ' Resultado (r)
I

Diseo:
lnterfaz de Usuario

Pseudocodigo

Diagrama de Flujo

Inicio

io

I nic

Entero
,nI,n2,sI,s2:
r : Cadena

//variables
i, n1, n2 , sI , s2 : Entero
r : Cadena

l-eer n1, nz

/nntrada
Leer n1, n2
/

i<:nl\2

/Proceso
Para 1*1 Hasta n\2 Inc 1
Sr nl Mod r :0 Entonces
s1 - s1 + i
/

^1

lln

51

Fi-n Para

Para i*1 Hasta n\2 Inc 1


Si n2 Mod r :0 Entonces

i<=n1\2

<2_
F

n2Modi:
^)

^"

s2+i

in Si

Fin Para
I

Sr n1:s2 Y n2:s1 Entonces


r - "SON AMIGOS"
\r

\a

r * "NO SON
f rn 51

r:s2 v n2:s
r*"NO

SON AMIGOS"

r*"SON

Escribr r

/
AMIGOS"

/satiaa

Eiscrlbrr r
Fin

AMIGOS"

Codificacin:

#include (iostream)
#include (string)
using namespace std;

void

main
/

{void)

/Variabfes

int i,n1,n2, sl=0,s2=0i


rclriu!

na
rrrY

/F,ntrada
cout{("Numero 1: ",' ci-n>>nl,'
cout(("Numero 2: "; cj-n>>n2;
/

/ /Proceso
for(i = t,' t <: nI/2;
if (n1 % r := 0)

i++1

for(i : 1; t <: n2/2;

i++)

i-t(nZ r::0)
'l

'

i .
L,

if(n1 :: s2 && n2 :: sl)


r : "SON AMIGOS";
efse

r : "NO SON AMIGOS";

/Salida
cout(( " \n";
/

cout<<"Resuf tado

: "<<r(("\n",'

:'".

.:.-::::
-.-:. " "'-. .: :. .-':;"::'. ..:
ilii:ii::::::i i:li4l:i:iii:i!'ji;,i;iiriil:iiri:i;!:i:i:i;jil;i:i:irir;:jii:

Problema 64
Enunciado: Escriba un algoritmo que calcule, la suma de la siguiente serie, hasta el nmero entero
positivo N ingresado.

1'27
tza j+a4 , poreiemplosi N es 3 entonces l+:-r-r
2
3
2 3 4 N"

6-=1,7666667

Anlisis: para la solucin de este problema, se requiere que el usuario ingrese un nmero, luego
sistema devuelva el resultado de la suma de quebrados.
r Salida
Entrada

| . sr..

Nmero (n)

1r

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Fluio

Inicio
Tnicio
Entero

//Variables
, ors : Entero
/

/ntrada

/Proceso
Para t._- ilasta n-1 lnc I
s - s + (i / ( + 1)\

s+ (j / tt+t

Escribir

in

Para

/ /satiaa
Escribir
l'.1-n

el

re
Codificacin:

#include (iostream)
using namespace std,.
vo

id

main
,/

(void)

/Vari abl e s

Iloat

n,

i, s :

0,.

/ /nnLrada
cout(("Numero:

ci n))n;

/ /Proceso

for(1 = 1; i
---,>T

/-

(i / (i

i++
1)

);

/ / Salida
cout< < " \n";

cout<<"Suma: "<<s<<"\n";
)

Problema 65
Enunciado: Dado un rango numrico entero num. inicial y num. final, obtener la candad de nmeros
positivos y negativos que existen en el rango.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese dos nmeros, luego el
sistema devuelve la cantidad de nmeros positivos y negativos.

Entrada

Salida

r
.

.
.

Nmero lnicial (ni)


Nmero Final (nf)

Cantidad Positivos (cp)

Cantidad Negativos (cn)

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inicio

ni, nf, cp, cn, i:

Entero

//variables
ni, fif, cp, C, i :

Leer ni, nf

Encero

/ /nntrada
Leer ni, nf

/ /Proceso

Para i*ni Hasta nf Inc

Sir<>0Entonces
Sr r<0 Entonces

Cn*C*
SiNo
LP-uPrr

Fin Si
Fin Si
l

r III--

cribir cp,

cn

Codificacin:

#lnclude {iosLream)
using namespace std;
maj-n

(void)

,/,/Variables
int. ni, nf , cp:0, cn:0, i,'
/ /EnLrada
cout(("Num. Inicial : ",' cin>>nl
cout(("Num. Final-: ",' cin)>nf ,'
/

/Proceso

for (i - ni; i <= nf ,' i++)


: a t:
ar\r

I
:-

if (i

/satiaa

Escribir cp,
Fin

void

TdId

v) tI
^\
< 0)

cn

^^

cn +:
ef se
u}J

/ / 5al10a
cout<<"\n",'

cout<<"Cant. Positlvo: "<<cp<<"\n";


cout(("Cant. Negativo: "<<cn<<"\n";

Problema 66
Enunciado: Hallar cuantos mltiplos de M hay en un rango de nmeros enteros.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese tres nmeros (Num.
lnicial,Num. Final y Num. Mltiplo), luego el sistema devuelve la cantidad de mltiplos que hay en el
ra

ngo.

Entrada

Salda

.
.
.

Nmero lnicial (ni)

Cantidad (c)

Nmero Final (nf)


Nmero Mltiplo

Diseo:
lnterfaz de Usuario

1Ii.r,,,,,,*,,,,,rrr,.*,",,,

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inicio

ni, nf, nm, c, i:

//variables
ni, nf, ofr, ct i : Entero

Entero

Leer ni, nf,


/ /entrada
Leer ni , flf,

nm

/ /Proc,eso

Para i*ni Hasta nf Inc 1


Si i Mod nm : O Entonces
+1
C*C
Fin Sr
Fin Para
/

Escrrbrr

Escribir
c

l'l-n

Codificacin:

#include {iostream)
using namespace stdi
void main (void)

/ /Varrab-Les

int ni, nl,

nm, c=0,

i;

/ /EnLrada
coul(('/Num, Inicial:
"; cin>>ni;
cout{{"Num. Final: "; cin}}nf;
cin>>nm;
sel{{/'Num. Multiplo:'t;
/ / Proceso

for (i = ni; i(=nf ,' i++


;fli

!!

\r

*?u nm::
rrllt

c *:

o\
V,/

1;

/ / Sa\ida

/satiaa

cout(("\n";
cout(("Cantidad: "<<c<<"\n",'

Problema 67
Enunciado: Crear un algoritmo para hallar el factorial de un nmero, elfactorial

es el producto de todos
los nmeros consecutivos desde la unidad hasta el nmero, por ejemplo factorial de 3l (se denota l) es

1X2X3=6.

Anlisis: Para la solucin de este problema,

se

requiere que el usuario ingrese un nmero, luego el

sistema devuelva el factorial del nmero.

r Salida
| . Factorial

Entrada

Nmero (n).

(f)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio
Ente:c

/Yarab]-es

n/f,i:Entero
/ /etrada
Leer n
/

/Proceso

f-1
Para i*1 Hasta n Inc
*i
ftf
Fin Para
/

Escribir

/SaLida
cribl r

trs

!'r-n

Codificacin:

#include <iostream)
using namespace std,'
void main (vo:.d)
,/

/Var i abl

tnt nrIrlr'
/ /Entrada
cout(("Numero: "; cin>>n;

/ /Proceso
I
L

_
-

1.
Lt

for(i : 1; i(-n; i++)


f

*:

cout<<" \n"

//satiaa
cout(("Factorial : "<<f(("\n";

Problema 68
entre
Enunciado: Determine si un nmero es primo, se dice que un nmero es primo si es divisible

1y

entre si mismo.

Anlisis: para la solucin de este problema, se requiere que el usuario ingrese un nmero, luego
sistema devuelva si el nmero es o no primo.
Entrada

Nmero (n).

Salida

Respuesta (r)

Diseo:
lnterfaz de Usuario

el

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Int cio

//Variables
r\, i : Entero
flag : Loqico
r : Cadena

rnlar

flag: Logico
r : Cadena

/ /tnt-rada
Leer n

flag - Verdadero

/ /Proeeso
flag * Verdadero
Para i*1 Hasta n\2 Inc
SinModi:0Entonces
flag - Faf so
Sa1lr
Fin Sr
Fin Para

i<:n\2

flag - Falso

Safir

Si flaq : Verdadero Entonces


r * "ES PRIMO"
511\O

r * "NO ES

g-VerCadel

r-"NO trS

PRIMO"

Escrlbir

r-"ES

Fin Sr
PRIMO"

/ /Salda
Escribir r

Fin

PRIMO"

Codificacin:

#include <iostream)
4inctude <strl-ng>
uslng namesPace std;

void

(void)

main

/Variables
i.

.i^,

ML

-ll,

I flag;
scring r : *'''

boo

/ /EnLrada
cout{("Numero: "; cin>>n;
/ /Proceso

"'

rt^-

''
'i"Z ;,
for(i = 2; i<=n/2; i++
j,f (n :- :: 0)
flaq = false,'

brak;

)
)

if

(flag)

eLse

r : "ES PRIMO";
r : "NO FS PRIMO";

//Salida
cout((" \n"

ggsl((/'ResPuesta

"

<<r<<"

\n";

Problema 69
nmeros enteros positivos'
EnUnCiadO: Determine cuantos nmeros primos hay en los primeros N

un nmero' luego el
AnliSiS: Para la solucin de este problema, se requiere que el usuario ingrese
primos 1,3,
nmeros
4
7,hay
ingresa
sistema devuelve la candad de nmeros primos, por ejemplo si

5v7.
Entrada

Nmero (n).

salida

| .

Cantidad (c)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Ini ci

Pseudocodigo

nt ct , f : Entero

Inicio
//Variables
n, ct i, j : Entero
flag: Logico
lvntrada
Leer n
/

flag * Verdadero

/ /Proceso

j<=i\2

Para i*2 Hasta n Inc 1


flag * Verdadero
Para j- 2 Hasca r\2 Inc

SiiNrodj:0
*

tldg

flag * Fa]so

Sal

Salir

Frn Si
Fin Para
Si flag Entonce
c*l

Fin Si
Fln Para
/

/satiaa

trscribir
Escribir

Fin

rr

Entonce
traIso

Codificacin:

#include <iostream>
using namespace std;

void

main

(void)

/ / vaL I oulsJ
inl
n
lrru
rr, ^ :

,Irl

bool flag;
/ /LnLrada
ggul(("Numero:'t;

cin>>n;

/ /Proceso
2; i<:ni i r +
for (i
flaq : true,'
for(j - 2; 1<: i / 2; j t+)
if (i % j ::0)
i
flag: false;
break;
1

)
'|

if

(f1as)

c +:

1;

flaq : true''
)
)

/ / SaLda

cout<<"\n";

cout<<"Cantidad : "<<c<<"\:r",'

Problema 70
Enunciado: Dado un nmero y un divisor, determine cual es el nmero mltiplo antecesor al nmero
rngresado,porejemplos ingresaN=21 yD=3,entoncesR=18porqueesel nmeromlplode3
antecesor de 21.

Anlisis: Para la solucin de este problema,

se

requiere que el usuario ingrese un nmero, luego el

sistema devuelva si el nmero mltiplo antecesor.


Entrada

.
.

Nmero (n).
Divisor (d).

r Salida
| . Respuesta (r).

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio
Inl cio
Entero

//Variables
n, d, r, r : Entero
/ /EnLrada
Tr
!!!r

11,

/Proceso
Para 1-n-1 Hasta 1 Inc -1
/

SirModd:0Entonces
r-i
Salir
Fin Si
Fin

Para

/satiaa
Escribir r
/

Escribir r

Fin

....:.....l,..".:.....:....

con C++
It- Alqoritmos_'-
Codificacin:

= lciude (iostream)
is ng namesPace sLd;
void maln (void)
lVariables
int n,d,irr

= 0;

/ /Enlrada
cout<<"Numero : ",' cin))n,'

cout<("D ivisor:

",' cin>>d;

/ / Proceso
!^-^
t:
T .
I
..-uI \r
- ^-. - L, - >= I;

e r:=

:+ti\f

rr

j
1\
1-=I)

0){

brea k,'
]

/ / SaLda

cout(("\n";
cout(("Respue-sta : "((r{{"\n";

;,"llJ
Problemas Propuestos
Los

siguientes problemas le servirn para medir su aprendizaje, es importante que los resuelva.

Propuesto

4l

Enunciado: Calcule la suma de los cuadrados y cubos de los N primeros nmeros naturales.

Propuesto 42
Enunciado: Obtener la suma y la cantidad de los nmeros divisibles por 3 y 5 a la vez, de los N primeros
nmeros naturales.

Propuesto 43
Enunciado: Dado un rango numrico entero positivo a y b, obtener la suma y la cantidad de los nmeros
pares, impares y mltiplos de 3.

Propuesto 44
Enunciado: Calcule la suma y la cantidad de nmeros de la serie de fibonacci, menores a N. La serie de
fibonacci es una secuencia de nmeros cuya caracterstica es, que cada nmero de la serie debe ser igual
a la suma de los 2 nmeros anteriores, la serie empieza con 0 y l-, entonces si el nmero N ingresado es

30,entonceslaserieseriamenora30estoequivalea0ll2358132T,yloquesepideeslasumayla
cantidad de nmeros de la serie.

Propuesto 45
Enunciado: Dado un rango de nmeros determine cuantos nmeros capica hay.

Propuesto 46
Enunciado: Dado la cantidad de cifras y un divisor, determine cuantos nmeros mltiplos existen del
divisor con dichas cifras.

Propuesto 47
Enunciado: Calcule la suma de la siguiente serie.
s

Lxx'x'xoxn
+...+-+-+-+-+
0l 1! 2l 3! 4l
nl

Propuesto 48
Enunciado: Calcule de cuantas formas se pueden ordenar n objetos.

Propuesto 49
Enunciado: Obtenga la candad de los nmeros primos de n cifras.

Propuesto 50
Enunciado: Obtenga la cantidad de los nmeros capicas de n cifras.

Captulo 7
Estructuras de Datos
Arreglos (vectores y matrices)
lntroduccin
En muchas situaciones se necesita procesar una coleccin de datos que estn relacionados entre s, por

ejemplo la lista de notas de los alumnos, los participantes de una carrera deporva, etc.
Procesar ese conjunto de datos en forma independiente con variables simples (primivas), es
tremendamente difcil es por eso que los lenguajes de programacin incorporan un mecanismo que
facilita la manipulacin y organizacin para una coleccin de datos llamada Estructura de datos.
Para explicartodo lo relacionado a estructura de datos se necesita escribirtodo un libro que detalle los
temas involucrados, para este captulo solo se esta considerando una parte bsica e mportante en la
estructura de datos, llamada array (arreglos).

Vector
012340123
15

12

18

1,4

Matriz

t2

25

10

15

32

52

10

18

18

22

Las estructuras de datos estn subdivididas por estticas (espacio fijo establecido
dinmicas (sin restricciones y limitaciones en el espacio usado en memoria).

en memoria)

Estructuras de datos estcas

.
.
.
.

Arrays (vectores y matrices)


Cadenas
Registros

Ficheros

Estructuras de datos dinmicas

.
.
.
.

Listas (pilas y colas)


Listas en lazadas

rboles
Grafos

diferencia entre cada estructura es la forma de cmo se almacena y manipula el conjunto de datos,
permiendo as su eficiencia en el resultado de una operacin sobre dichos datos.
La

:r
I
I

ZOO

ll ''Algrrritrrlooe
l.4

Arrays (Arreglos)
un conjunto finito (tamao fijo) y ordenado (usa un ndice) de datos homogneos (datos del mismo
tipo).
Los arreglos pueden ser de una dimensin (vector), dos dimensiones (matriz) y n dimensiones
(multidimensional).
En todos los lenguajes de programacin los arrays usan un ndice numrico para cada elemento que
contiene, que por lo general inician con el ndice 0, llamado Limite lnferior (Ll) y el ultimo elemento
tendr el ndice llamado Limite Superior (LS), que en si es la cantidad de elementos del array menos 1.
Es

Arreglo de una dimensin

Arreglo de dos dimensiones

(Vector de 5 items)

(Matriz de 3X4)

12

15

t4

18

Ll 2da Dimensin
(Columnas)
J
0L2

L2
Ll

Ll

N
D

15

72

18

I4

12

c
E

LS+

1ra Dimensin
(Filas)

LS*

LS

I
3

25

10

15

32

52

10

18

18

22

5 Elementos

(tems)

Operaciones con Arrays


Las

operaciones son el procesamiento y el tratamiento individual de los elementos del array, las cuales

son las siguientes.

.
.
.
.
.
.

Asignacin
Lectura

Escritura

Recorrido

Actualizacin (inserta borrar, modificar)


Ordenacin
Bsqueda

{vetores y matrices}

Greacin de Arrays
Para la creacin de un arrayse requiere conocerel nombre, las dimensiones, el tamao de elementosy
el tipo de dato.

Pseudocodigo

/nrray de una dimensin (Vector)


/ 5 eLementos Lr - u y rD - r
Nt5l : Entero
/
/

--

/Array de dos dimensiones (Matriz)


/ 3x4 elementos
// Iera D:-m. LI : 0 y LS: 2
// 2da Dim. LI : 0 y LS : 3
Nt3l t4l : Entero
/
/

C++

/nrray de una dimensin (Vector)


// 5 elementos LI : 0 y LS : 4
int N [5] ;
/

//Array de dos dimensiones (Matrrz)


/ / 3x4 elementos
//

Iera

ljlm.

11 = U y

//2daDm.LI:0y:S:3
rnt Nt3l tal;

5:

Recorrido por los elementos del Array


para realizar un recorrido por cada elemento del array utilizaremos la estructura repetiva para (for).
En el siguiente diagrama se tiene el vector N de 5 elementos y se asigna el valor 10 a cada elemento'

Para i*

Hasta 4 Inc

N[r] *
NIr] .

+1

10

10

Fin Para

Sintaxis C++

for

i-0; i<:4; r++)


Ntil =

10;

)
En el

siguiente diagrama se tiene la matriz N de 3X4 elementos y se asigna el valor 10 a cada elemento.

Para i* 0 Hasta 2 frc +I


Para j- 0 Hasta 3 Inc
Ntil

Ntil ttl*

10

Sintaxis C++

for i:0; i<:2; i++ {


for (::0; I <:3; I ++
Ntil ttl : 10;
(

)
)

Fin Para
Fin Para

trl *

10

+1

."

""

. ''

.Gapitulo 7t 'Estructuras'de Datos - Arreglos ('vactores y matrices)


I

Problema 7'l
Enunciado: Dado 5 nmeros obtener la suma.
Para la solucin de este problema, se requiere que el usuario ingrese 5 nmeros y el sistema
realice el proceso para devolver la suma.

Anlisis:

I Salida
| . Suma (s)

Entrada

5 Nmeros n[5].

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio
I

ni cio

//Variables
I
l,

+^v^
LllLe!V

/axxeglos (Vector)

rqt
11 L J I

Leer n[0],n[1],
nl2l ,n l3l,n[4]

.
.

rrav

/ /Enl-rada

Leer n[0],n[1],n12),nl3],n[4]
/Proceso
Para i-0 Hasta 4 Inc
S e s + n[r]
Fin Para
/

s * s + nlil

Escribir

/ /SaLda
Escribir

Fin

Algorilno*
Codificacin:

#include (iostream)
using namespace sld,'

void

(void)

main

/ / varrabl-es
'inr

n
w,

i.

Lt

/ lArregLos
inc nf5';
/ /Entrada
cout(("Numero
cout(("Numero
coul(("Numero
cout({"Numero
cout{("Numero

1:
2:
3:
4:
5:

\';
";
";
';
\\;

cln>>n[0
cin>>nl1
cin>>n[2
cn>>n[3
cin>>n[4

/Praceso
: .- 4; i r+)
+^- t;
+nIi];
s
/

!v!

\r

//Salida
cout<<" \n",'
cout<<"Suma: "<<s<<"\n";

Problema 72
Enunciado: Dado 5 nmeros obtener el nmero mayor.
Para la solucin de este problema, se requiere que el usuario ingrese 5 nmeros y el sistema
proceso
para devolver el mayor.
realice el

Anlisis:
Entrada

5 Nmeros n[5].

Salida

I o
I

Mayor (m)

Diseo:
lnterfaz de Usuario

,/lr.rcglos {vectores y matrices}


Algoritmo

Diagrama de
I

i^^I ) \^

Pseudocodigo

Inicio

ni cio

//variables
r, m : Entero

i, m : Entero
n[5] : Entero

/ArregLos (Vector)

". T I
ltLJl

Leer n[0],n[1],

nl2),nt3l,ntal

..

r^+^-^
Lrrug!v

/ /EnErada

Leer n[0],n[1],nl2l,n[3],n[4]
/Proceso
Para 1. U Hast 4Inc1
Si n[r] > m Entonces
m - n[i]
Frn Si
fin Para
/

m - n[i]

/ /satia
Escribir
t'r_n

Escribir

Codificacin:

#include {iostream)
using namespace sld;
voici main (vord) {
/ /Yarabt.es
int m = 0,i;
/ /

ac

int^--a1n[5];
LltvL1Vd
// //r^+--A^

cout<<"Numero
cout{<"Numero
cout<("Numero

qgu(("Numero
cout<(/'Numero

cin>>n
cin>>n
cin>>n
cin>>n

2
3
4

.cin>>nl4l

/ / Pfoceso

Ior (r : O,' j <: 4,' i++


iFlhTil
!1
\ir

Lr I
-:

L
I

\- m\
Lttl
nf il.
L!LL)

'

/satida
cout{{"Mayor: "{(m(("\n";
/

cout<<"\n",'

l
l
|2l
|3l
|0
|1

Problema 73
Enunciado: Dado 5 nmeros y un divisor; determinar cuantos nmeros mltiplos hay del divisor en los
5 nmeros ingresados.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese 5 nmeros, luego

el

sistema procesa y devuelve la cantidad de nmeros mlplos que hay.


Entrada

Salida

.
.

5 Nmeros (n[5]).

Cantidad (c).

Divisor (d).

Diseo:

lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio
d,1,c:Entero
-f (l
tt \ J

'

rr^7^

Leer n[0],nl1l,
nl2),n [3],nl4l,d

//Variables
j

{
u,

L f

!t

^IO

/AxregLos (Vector)

:[5] : Entero

/sntrada
i,ee n [0],n[1],n 12),nl3],n[4],d
/

/ /Proceso

Para i-0 Hasta 4 Inc

SinlilModd:0Entonces
c*c+1

in

Fi-n Si
Para

/ /satiaa
Escribir

Fin

Codificacin:

#include (iostream)
using namespace std;
void main (void) {
/,/Variables

inr
rru

A
utLrvi

-f).v,

/Arreql-os

tnt nl5i;

/ /sntrada
cout{("Numero 1:
cout{{"Numero 2:
cout{{"Numero 3:
ceut(("Numero 4:
cout(d"Numero 5:

/Proceso

for(i=0;i<=
if (ntil % d
c += 7;

[0]

cin>>n
cin>>n
cin>>n
cin>>d,'

[2]
[3]
[4]

cr-n>>n I I l

cout(("Divisor:
/

cin>>n

A.

i++)

0)

/ /Salida
qgLll(( " \n";
cout(("Cantidad:

"<<c<<"\n";

Probfema 74
Enunciado: Dado 5 nmeros, obtener la candad de nmeros primos ingresados.

Anlisis:

Para la solucln de este problema, se requiere que el usuario ingrese 5 nmeros y el sistema
procesa y devuelve la candad nmeros primos.

Entrada

5 Nmeros (n[5])

I salda
I . candad (c)

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

c,,:Entero
flag: Logico
n[5] : Entero
Leer nIO], nl1l,
n[2], nt3l, nt4l

Inicio
//Variables
c,rr):Entero
flan : Logico
/lrregLos (vector)
n[5] : Entero
/

/ lar:Erada

Leer n[0],nl1l,n12),n[3],n[4]
/ /Proc,eso

flag - Verdader

j<-nIi] \z
[i] Mod flag * Falso

Salir

Para i*0 Hasta 4 Inc 1


flag - Verdadero
Para . 2 Hasta n I il \2 Inc
Si n[i] Mod :O Entonces
flag - Falso
Salir
Fin Si
Fin Para
lr
c;
r--.nces
!1
sv
rrqY
u r

c*c+1
Frn Si
trin Para
/satiaa
Escribir
/

Fin
Escribir

Codificacin:

#include {iostream)
using namespace std,'
voi d main (void)

es
/,/Varrabl
.;^r
.i

f IIL U-V
^-n t Lt
L^^t
{t--.
uuu L 1fd9,

+.t
_J

/AxreqIos

'l^+
rrrL

Ii^l(1.
LJ.l

/ / LttLLAJd

couL{("Numero
cout{("Numero
cout<<"Numero
cout(("Numero
cout((//|.lsmero
/

1:
:
3:
4:
5:
2

";
";
";
",'
",'

cin>>n[0];

cin>>n | 1]

,'

cln>>n[2],'

cin>>n [3 ] ;
cin>>n [4 '] ,'

/Proceso

for (i : Q,' i<: 4r i++) {


fl^^
_
: r.-t'rue"
Tlag
forj : 2' j<=nIil/2;

j++){

;f(rt:1
__,-rLrl

J -- U, t
,1 ^^
a^t
o ^^.
'J::_;.
'
'!Dc/
!rgd^,

]
]

-Lr (Jldg/

c +:

1;

/sataa
cout(("Cantidad: "<<c<<"\n";
/

cout(( " \n",'


]

Problema 75
Enunciado: Busque un nmero en 7 nmeros ingresados y determine la posicin y si existe o no

el

nmero buscado, use el mtodo de bsqueda secuencial.

Anlisisl Para la solucin de este problema, se requiere que el usuario ingrese 7 nmeros, luego
sstema devuelva la respuesta si existe o no el nmero y la posicin del nmero encontrado.
Entrada

Salida

.
.

.
.

7 Nmeros (n[7]).

Numero a buscar (nb)

Respuesta (r)
posicin (p)

el

Diseo:
lnterfaz de Usuario

Pseudocodigo

Diagrama de Flujo

I r-ii c

Inicio

io

nb, p, i: Entero
r : Caclena
n[7] : Entero
Leer nt0l,nlI),n12),
n[3],nL4l,n[5],n.6l,nb

r *

"NO trXISTtr"

/variabaes

nb,p,1:Entero
r : Cadena
/ /l.rregLos (Vector)
n[7] : Entero

/snl-rada
Leer n[0],n[1],nl2l ,n [3],n[4]
/

n[5],n[6]'nb

^T

/ /Proe,eso
r ._ "NO EXISTE"
.-

nlil
v

_1

Pu=u.. 0 Hasta 6 Inc 1


Sr n[:] : nb Ehtonces
r - "EXISTE"
*i
Salir
Fin Sr
trln Para

bn

\\EVfCnF//

P-i
Salir

/satiaa

trscribir r,
Escribir r,

Fin

Cpltulo T: Estructuras de Datos -Arreglos {vectores y matrices}

odificacin:

#rnclude <iostream)
#include <string>

using namespace std,'


void maln (void) {
/ /vaLLabIes

int nb,p, i;
crrinn
Ju!frrY

\\//.

/tLL

/Entrada

int nlTl;
cout.(("Numero
cout(("Numero
ggpl(("Numero
cout({"Numero
cout({"Numero
cout{("Numero
gggf(("NUmero
CoUt((//Numero
/

";
";
";
";
";
"i
";

cin>>n [ 0
cin>>n [1
cin>>n [2
4
cin>>n [3
5
cin>>n [4
6
cin>>n l5
7
cin>>n [ 6
a buscar : ",' cin>)nb,'
1

2
3

/Proceso

r = "NO EXISTE"
^ - _1r, .
P
for(i:0;i<:6;i++)
:rl c /.^ r I l
\-lLL{
--,,b)
r : "HXISTE",'
Y

i.
-l

break;
i
]

/ /Salida
cout.(("\n";

cout(("Respuesta : "((r(("\n";
cout((/'Posicion : "<<p<<"\n",'

Problema 76
Enunciado:
llamado

B,

Lea 4 nmeros y almacnelo en un vector de llamado A, y otros 4 nmeros en un vector

y determine cuantos nmeros de A se encuentran en

B.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese 8 nmeros, luego
sstema devuelve la cantidad.
Entrada

Salida

.
.

4 Nmeros (a[a]).
4 Nmeros (b[]).

Candad (c)

el

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio
1n

ac10
E

a 4

nle ro

: Entero

Leer al0l,atTl,al2j,
l3l,bt0l,bt1l,bf2l,bf

/varables

lt

L'i^

/Arreglos (vector)
al4l, bt4l : Entero

r,l4l : Entero
a

/ /nnErada

Leer a[0],a[1],al2l, al3l,


b[0],b[1],b[2],b[3]
/Proceso
Para 1. 0 Hasta 4 Inc 1
Para j*0 Hasta-4 Inc

Sr aIr]:bIl] Entonces
c*c*1
trin Si
Fin Para
Fin Para
/

/sat:-aa

Escriblr
Escri-rlir c

Fin

Codificacin:

#include (iostream)
using namespace std,void main (void)

//Varra,bIes
'inr

: VI L'i -.
J'

/ArregLos

int a[4];
inl

+rg

1-rl1l.
L t
v

/ / Entrada
cout(("Arreglo

A \n";

LVUL\\

cout<<'lNumero 1:
cout{(/'Numero 2:
cout<("Numero 3:
cout<<"Numero 4 :

\jt

";
";
",'
",'

cin>>a[0
cin>>a[1

cin>>a l2
cin>>a l3

cout(("\n"i

cout<<"Arreglo B \n";
UUUU\\
^^111/

t'

\ /r .

---------:

cout<<"Numero
cout{('Numero
gggl(("Numero
cout<<"Numero

1:
:
3:
4:

";
\';
\\;
",'

cin>>bl0];
cin>>b l1] ;
cin>>b[2];
cin>>b [3 _] ;

/Proceso
for(i:0;i
<-3; i-*){
for(; :0; J <:3; l+.)
if (aIi] :: bl,_)
/

,-|

1.
I,

i
]

/ / SaLda
cout{< " \n";
cout({"Cantidad:

"<<c({"\n";

Problema 77
Enunciado: Ordene 4 nmeros usando el mtodo de ordenacin por intercambio (burbuja).

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese 4 nmeros, luego
sistema devuelva los nmeros ordenados.

Entrada
. 4 Nmeros (n[a]).

Salida
I . 4 Nmeros

ordenados (n[4])

el

I Algoritmos con C++

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio
tmp,

Inicio

r, j , LI, LS : Entero

nl4l :

//Variables
tmp,i,l,LI,LS
/

Leer nlOl, n l1'.,:.'.21,

n I 3l

LI*C
TC

: Entero

Entero

/trxegLos (Vector)
.

al A1

E-nlora

/ /sntrada
Leer n[0],n[1],n[2],n[3]
/ /Proeeso

LI LS-3

Para l*Lf Hasta LS-1 Inc 1


Pa:a l-LI Hasta LS-1 Inc
t

j l>n tj+1

tmp * nlj]
ntjl * nIj+1]
n[;+1] * tmp

l -1n Jl

Fin Para
fin Para
/ /satiaa
Escribir n [0],n[1],n[2],n[3]

Escribir

[0], n l] l,nL2l,n [3]

Sl nljl>nlj+11 Entonces
'np nii
:.ll - n[j+1]
:l-l+11 * tmp

Fin

Codificacin:

#include (iostream)
usang namespace std;

void

main

(void)

/ /Variables
int tmp, i, j, LI,
,/ /Arreglos
int n[4];

/ /EnLrada
cout{(//Numero 1:
coul(("Numero 2,
cout{("Numero 3:
cout{{"Numero a.
,/

\\

\\

1\

;
;
,'
;

cin>>n[0],'

cin>>nl1l;
cin>>n[2];
cln>>nLJl;

/ Proce so

LI = 0;
LS : {sizeof

(n)

/sizeof (int) ) -1;

for(1 - LI; i <: LS Far

lvl

l
\J

T I.

ur,

TC

; i++)
-

1.
Lt

if (ntjl > n[] + 1l) {


cmp : n[ t.)t
n[:] : ni j + '1 l.
n[] + 1l
tmp,

)-rr\ tl

l,/ sat ioa

cout(("\n";
COut(("Ordenado \n";
cout({"Numero 1: "((n
cout<<"Numero 2: "<<n
cout{("Numero 3: "<<n
cout<("Numero 4: t'<<n

0l
1l

<<"\n";
{("\n";

2)'1{" \n" ;

3](("\n",-

L,-:*i

;#!:

Problema 78
Enunciado: lngrese 6 nmeros en un arreglo de dos dimensiones (matriz) de 3X2 y obtenga la suma de
los nmeros ingresados.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese 6 nmeros, luego
sistema devuelva la suma de los nmeros.

I sata
| . suma (s)

Entrada

6 Nmeros (n[3][2]).

Diseo:

lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inicic
Eat-e

ro

nt3l i2l : Entero


Leer nt0l l0l,nIO] i1l

nllllOl,r-l1rl1l,
nl2l t0l,nl2l l1l

//variables
s.irj : Entero
/ /lxxegLos (Matriz)
ni3lt2l : Entero

/snl-rada

-e:::.t0
0l,n[0]11.],
1i1lt0l,n[0] [1],
.,i2)l0l,nl0l [1],
/Proceso
:. naSI'a Z LnC L
ra-ra I-u
Para -0 Hasta 1 Inc

s - s * ntillrl

trin

Escribir

in

s - s + ntll tjl

Para
Para

/ /sat:'aa
Escribir
s

Fin

el

Codificacin:

#include <iostream)
us

ing namespace scd;

vold main (void)

/Variables

inr

c:

O
i i.),
vt
Lt

/Arreglos

int nt3l l2l;

/ /Enl*rada
cout<<"Numero (0,0)
cout<<"Numero (0,1)
cout(("Numero (1,0)
cout{("Numero (1.1)
cout.(("Numero (2, A)

cout(("Numero (2rIj

";
";
"i
";
"i
";

cin))n
cin))n

0
0

cin>>n

cin))n
cin))n
cin))n

2
2

t0l;
r1t
Lrt,

[0];
t1t;
t0t;
t1t

//Proceso

for(i = 0; t <: 2; i++


for(j : 0; j <: 1; j'-)
s +: nlrl ljl;
/
/

t^,1:
JdIILId

-1 -

cout(( " \n";


cout(("Suma: "((s<("\n";

Problema 79
Enunciado: lngrese L2 nmeros en un arreglo bidimensional (Matriz) de 4X3, y obtenga la suma de cada
columna.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese 12 nmeros, luego
sistema devuelva la suma de cada columna.
Entrada

Salida

.
.
.

l-2 Nmeros (nlal[3])

Suma Columna 1 (s0)


Suma Columna 2 (s1)
Suma Columna 3 (s2)

el

llgo*tmos:esn:s+*

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

In icio

//variables
>urJrt>atlt

ntal t3l : Entero


Leer nl0 I Io],n

nlll[0 ,n[1]
nl2lt0 ,n12l
n[3] tO ,n[3]

t1l

,n

,nlrl

c)

-?

l0l
l2
12

nl3)

12

/ArregLos (Matriz)
ntal t3l : Entero
/ /Entrada
Leer nt0l t0l,n[0] [1],nt0l t2l
n[1] [0].n[1] tll,nll) l2l,
nt2l t0l,n [2] lIl,nl2) l2l,
n[3] [0].rr[3] t1l ,nl3)12),
/ /Proc,eso

litr
1'

Escribir s0, s1,

'Entero

n12l

s0 . sO + nfi
s1 . sl + n[i

s2

P:a -._! Hasta 4 I.nc 1


s-r - sC + ntil t0l
si * s, + ntrl t1l
s2 * s2 + n[r] [2]
trin Para
/ /satia
Escribir s0, s1,

Fin

s2

Captulo ?:,, EstructraE da Oats,- rggtos {V6tfote*

r,

malrices}

Codificacin:

#incfude <iostream)
using namespace sLd;
void main (void)
/

/Varlables

inr
-rr-

c=
cl:A vtLc?-^ vtlt I
JU-vrr

r.
),

/ArregLos

int ntall3l;
/ lEntrada
cout(("Numero
couL({"Numero
cout(("Numero
cout(("Numero
cont(("Numero
cout(("Numero
cout<("Numero
cout(("Numero
cout(("Numero
cout(("Numero
cout(("Numero
cout(("Numero
/Proceso
for(i : 0; i<:3
s0 += n 1
s1 += n I

(0,0):
(0,1):
(0 ,2) :
(1,0):
(1,1):
(7 ,2) :
(2,0):
(2,1,\ :
(2,2) :
(3.0):
(3,1):
(3,2):

s2+=n

i,

i++

";
";
't;
";
";
"i
";
";
";
";
";

cin>>n[0 t0l
cin>>n[0 t1l
cin>>n [0 t2l
cin>>n[1 t0l
t1l
cin>>n

[1]

cin>>n[2]

t2)
{01

cin>>n [ 2 t1l
cin>>n [2 l2)

cin>>n[3 t0l
cin>>n[3 t1l
cin>>n[3 t2)

0
1
2

l
//

sarida

cout.<<"\n";

cout<<"Suma Col.

0: "<<s0<("\n'i

cout(("Suma Col. 1: "<(s1<("\n";


cout{<"Suma Col. ,. \\<<<211"\n't

Problema 80
Enunciado: Almacene en una matriz de 3X2, 6 nmeros y obtenga la cantidad de pares e impares

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese 6 nmeros, luego
sistema devuelva la candad de pares e impares.
Entrada

6 Nmero (nt3ltzl)

Salida

.
.

Cantidad de pares (cp)


Cantidad de impares (ci)

el

t_ru
Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Tn

cp,

Inicio

i cio

//Variables
cp, ci, i,1 : Entero

ci, i, j : Entero

/txregLos (Matriz)
nt3lt2l : Entero

nt3l[2] : Entero

-eer n 0l t ,n 0 lLl,

,.lt

,r.-rllll,
n.2. .',:-2. Il

'I

I
F

--;--------=

_:---;:;

.-l{
-Tv
''----1a
F

iil l'l

Mod

2=j)J

ci*ci+

cP* p+1

/Proceso
Para i*0 Hasta 2 Inc t
:l. u^ rIrrasLa 1 Inc I
ldLd
Sr nIr] tjl Mod 2:0 Entonces
cp. cp+1
S

/satia

Escribi r cpr ci
Fin

Fin

rNo

ci-ci+1
I rn br
Fin Para
Fin Para
/

/ zscrlbir cp,ci /

/Er:l-rada

/
F

r-=

Leer nt0l t0l,n[0] [1]'


n[1]t0l,n[1]111,
n12) l0l , n [2) lIl

Captulo 7: Estructuras de Datos - Arreglos (vectores y matrices)

Codificacin:

#include (iostream)
using namespace std;
void main (void) {
/ / var rables

int cp=Q, si:,


/ /Arreqlos
int nl3l t2l;
/ /Entrada
cout<<"Numero

cout(("Numero
cout<<"Numero
cout(("Numero
cout(<"Numero

(0,0)
(0,1)
(1,0)
(1.1)

crn>>n t0t t0l


cin>>n t0ltrl
cin>>n t1t t0l
cin>>n t1t tr l
cin>>n t2lt0l

(2, A)
cout<< "Numero (2, r1

cin))n t2lt1l

I /Proceso

for (i : A; <=2; i++


forl = 0;j<'1; e.j--) {
if (ntilf jl
2 ::
cp +: 1,'
eI se
ci +: 1;
1

0)

]
]

/,/SaIida
cout<<"\n";
couc<<"CanL. Pares: "<<cp<<"\n".'
cout.<"CanL. lmpares :'t<-<ci<<-\ n--

Problema

81

Enunciado: Busque un nmero dentro de una matriz de 4X3 y determine la posicin y si existe o no el
nmero buscado, use el mtodo de bsqueda secuencial.

Anliss: Para la solucin de este problema, se requiere que el usuario ingrese dos nmeros, luego el
sistema devuelve la cantidad de nmeros positivos y negavos.
Entrada

.
.

Matriz (nt+lt3l)
Nmero a buscar (nb)

Salda

.
.
.

Respuesta (r)
Posicin lera dim. (p1)
Posicin 2da dim. (p2)'

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Tni cio

nb,i,j,p7,p2 : Entero
r : Caciena
nlali3l : Entero
Leer nt0l t0l,nl0l t1l,n[0] L2l'
n[1] LOl,nL1l tll,ntIl l2l,
n t2I t0 L nl2l l|l , n12) 12) ,
nt3l t0l,n[3] [1],nt3l t2l

r . 'NO EXISTE

Inicio
//variables
nb, , ), Pl, P2 : Ente"o
r : Cadena
/

/AxregLos (Matriz)

ntal t3l : Entero


/ /PnErada

Leer nt0l t0l,nIO] [1],nIO] [2],

nlll [0],nl1l tll,nlIl 12),


n[2]i0l,n[2]lLl ,nl2l 121 ,
nl3l l0l,n[3] t1l,n[3] [2]

/ /Proeeso

r - "SI
pl . r
P2*)

EXI STI,.

SaLir

=,,SI EXISTE
Salir

r - "NO EXISTtr"
p1--1
p2*-r
Para i-O Hasta 3 Inc 1
Para i*O Hasta 2 lnc I
Si n Ii] it l:nb Entonces
r * "SI EXISTE"
p1
P2 )
SaIrr
Fin Sr
Fin Para
Si ::"SI EXISTE" Entonces
:a-i r
;

:,:,

Fin

Fara

/satia
Escribir r, PL,
/

Fin
Escribir r,pI,p2

5i

P2

Codificacin:

#rnclude {iostream)
#include <string>
using namespace std;
void main (void)

/ /Variables
inl nb, , j ,pL,p2;
string r : "";

/arregLos

i nl

n IL I ILJ]1 l
'I

/ lEnLrada
cout(("Numero (0,0)
cout(("Numero (0,1)
cout{{"Numero (0,2)
cout({"Numero (1,0)
cout(("Numero (1,1)
cout(("Numero (L,2)
cout(("Numero (2, A)
cout(("Numero \2,l)
cout(("Numero (2,2)
cout({"Numero (3,0)
cout((//Numero (3, 1 )
cout(("Numero (3,2)
cout(("Numero a busc

"; c j-n>>n t0I l0I ;


"; cln))nl0I lll;
"; cin))nl0I l2I;
";
";
\\;
";
\\";
";

cin))n t1l I0I;


cin>>nl1l l1I;
r1l
^l-\\-^
cin))n
lI) ral12l ;
cin>>nl2I i0I;
ral
^i^\\..
cin>>n
12l TT
lI)I ;
cin>>n l2l l2't;
-

^ih\\

t1
- tL l?l
L r ) | w

"; cin>>nt3ll1l;
"; cin>>n 13 : l2l ;

/ /Proceso
r : "NO EXISTE";
n]
yr
^t
YL

*-

-1
1.
Ll

for(i:0;
i<:3;i++){
for(l = 0;l<:2;) ,){
if(nlil tjl :- nb) {
r : "SI EXISTE";
pl - 1;

p2

L-^---,
!rg4A/

: );

]
l
J

:!!F t \!

-L-^-t-.
!rgo,

\\cr

-,

r
ixISTE")

SaLd,a

cout((" \n";

cout(<"ReSpuesta : "(<r<<"\n",.

cout(<"Posicion lera Dim. : "({p1(("\n";


cout(<"Posicion 2da Dim. : "(<p2(("\n",.

$ Algoritmos con C++

Problema 82
Enunciado: Dado la matriz A de 2X2,la matriz

de 2X2, obtenga la suma de dichas matriz.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese 8 nmeros, luego
sistema devuelve la suma de matrices.
Entrada

Salida

.
.

'

4 Nmeros matriz A (a[2][2])

4 Nmeros matriz

4 Nmeros matriz B (bt2lt2l)

Diseo:
lnterfaz de Usuario

(c[z][z])

el

Algoritmo
Diagrama de Flujo

Inicio

Ini cio
Ent

Pseudocodigo

ro

//Variables
lt

t1l : Entero
t1l : Entero
Lrl

.
.

L'l^y^

/trreg 1os (Matriz)


1
1
: Entero
1
b 1
: Entero
c 1
: Entero
/

,1

at0l t0l,aIO] [1],

al1 [0],al1l l1l,


bl0 [0],b[0] [1],
bt1 l0t,bt1l t1l

/v,ntrada

Leer

a[1
bt0
bt1

LUI dL
ulrdLr

0l,bl0
0l,b[1

[1].

Ll,
Ll,

rl

/Proceso
Para i*0 Hasta 1 Inc

^ nt''asta I Inc

YdLd

)*v

trin

Para

cIr] [j]-atil tjl+btil ttl


ctil i:l*atil tjl+btil tjl

III

FdI.i

/ /satiaa
Escribir ct0l t0l,c[0] [1],
c[1] [0],c[1]t1l
SCTfDLT

c[0] i0l,cl0l [1]


clll

lOl,cl1l

l1

Fin

Codificacin:

#lnclude (iostream)
us i ng namespace

void

main

(vord)

sro;
{

//Variables
int i, j;
/

/ArregLos

int
rnr
'i
nr

Lzl

12
12
Ll)) ) tl)

b 12)

/ /Enl-rada

cout({"Arreglos
cout(('/Numero
coul<("Numero
cout({"Numero
cout(("Numero

\n"
\n"

A:

(0,

(0,1)
(1,0)
(1,1)

cout<<"\n",'

cout(("Arreglos

B:

cout(("Numero (0,0)
cout<<"Numer: (0r 1)
cout<<"Numerc (1,0)
cout(("Nurnero (1, 1)
/

cin>>a t0t t0t;


cin>>a tot tlt;

cin))a t1t tot;


cin>>a t1l t1t;
\n";
\n";

cin}'>b t0t t0t;


cin>>b tot tll;
cin>>b t1l t0l;
cin>>b t1l tll;

/Prcceso

for (1 : 0; i<:1; i++ I


fcr( :0; :<=L; ,r++)
: aii i ir l + bIj-] tjl;
ctilljl
]

//Salida
cout(("Arreglos
^

C:

\.-t//,t--

coul(<"Numero
cout(("Numero
cout(("Numero
. cout({"Numero

(0,0)
(0,1)
(1,0)
(

1,

*((c

l', -

C,

<<,, \:r,,

't<<c 0j !': <<,,

*((c 1l 3j

\,,:t,'

"<<c 1j 1j <<"\n"

Problema 83
Enunciado: lngrese 6 nmeros en una matriz de 3X2 y obtenga el numero mayor ingresado.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese 6 nmeros, luego
slstema devuelva el nmero mayor.
Entrada

6 Nmeros (n[3][2]).

Salida

I o
I

Mayor (m)

el

Captulo 7: Estructuras de Datos - Arreglos (vectores y matrices)

ZZI I
liL-*-f;

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inici-o

Inicio

//Variables
Entero

n[3]t2l : Entero
Leer nt0l i0j,riCl [1
n f -I i!,, :.'.i-, l--'',
n l2I i-r' ,.. -2', l--,'_

tLtt

lt

.
.

Lir

/ArregJ-os (Matriz)

12; : Entero

r:i-3';

/ /nnErada

reer rit0l t0l,nIO] [1],


:[1] t0l,n[1][1],
ni2lt0l,n[2'tiI)
/ /Proceso
m - niOl tOl
Para i. O Hasta 2 lnc
Par a _. O Hastc -

Sr nIr]il,>n
r1r * jr[,] itl
Frn Sr

ln Para
Para

nlilll

Fin
/

/SaLida

Escrlbir
Fin
Escribrr

Inc

Entonce

Codificacin:

#include (lostream>
us jng nanespace std,'
void main(void)

/ /variables
int. m, i; j ;
,/ /Arreglos
int nl31l21;

/ / EnLraoa

cout{("Numero
cout(("Numero
cout(("Numero
cout((//Numero
cout(("Numero
cou L <<

"Numero

(0,0)

cin>>nl0l t0l
cin))nl0l t1l
cin>>nt1l l0l
cin))nill t1l
cin))nt2l l0l
cin>>nt2l t1l

(0r 1)

(1,0)

(1r 1)

\2,A)

(2 , 7 )

/ / Proceso
m = nLUl LUI;

for (i =

A;

i<:2;1++)

for(j : O; j<-1;j-*)'{
ir(ntil tjl > m)
m = nttl tjl;
I

//Salida
couL<<"\n";
cout<("Mayor : "<<m(("\n".'
)

Problema 84
Enunciado: lngrese 6 nmeros en una matriz de 3X2 y ordene los nmeros de cada columna.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese 6 nmeros, luego
sistema devuelva las columnas ordenadas.
Entrada

6 Nmeros (n[3][2])

I Salida
| . cada columna ordenada (n[]lzl)
I

Diseo:
lnterfaz de Usuario

el

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio
tmp,l,j,LS

//Variables
tmp, i, l, LS : Entero

: Entero

nt3l [2] : Entero


Leer nl0l tCl,nt0l l1l,

ni1lt0l,nt1ll1l,

nl2l tcl,nl2llll

/ArregLos (Matriz)

nl?l
..1,r

l?l
L_r

trnr
.. .-,,_Jro

/sntrada
Leer nt0l t0l,n[0] [1],
/

n[1]tOl,n[1][1],
n[2][0],n[2)17]

:/

r a

/Proceso

LS*2
Para i-0 Hasta LS-l Inc 1
Para *0 Hasua LS-1 fnc i

tljl lol>n[+1]

[O

tmp * nljl l0l


ntjllCl. nlj+ilICr
n[j+1] lOl * tmp

ljl

t1l>ntl+11 [1

tmp - nltl t1l


ntjllll* ntj+1lt1l
nlj+11 [1] .- tmp

Sr n[]l t0l>nIj+1] [0] Entonces


tmp * ntjl tOl
nIt][0]* ntj+11 t0l
n It+1] [0] - tmp
Frn Sr
S:- n Ir ] t1l>n It+1] [1] Entonces
tmp - nil l1l
ntjltllntl+1ll1l
n[1+i] [1] . tmp
Frn Sr
Fin Para
Fin Para
/

Fin

Leer nt0l t0l,n[0] [1],


n[1]t0l,n[1] [1],
nt2l[0],nl2l [1]

/sat-aa

trscribir ntOl tOl,ni0l l1l,


ntll t0l,n[1j :1],
n12)lOl,n[2)lr)

Algoritmos con G++

Codificacin:

#include (iosLream)
us

i nq narnespace scd;

void

main

(void)

//VaraaI)les

inl

tmp,

i, j,

/ /Arreqlos
int n l3l l2l

LS;

,/ /Entrada
cout({"Numero (0,0)
cout<("Numero (0,1)
cout({"Numero (1,0)
cout({"Numero (1, 1)
cout(("Numero (2,0 j
couL(("Numero 12,L)

cin>>n | 0 l
cin>>n [ 0 ]
cin>>n [ 1 ]
cin>>n [ 1 ]
cin>>n | 2 l
cin>>n [ 2 ]

[0];
lll.

t0t;
1t.
Llt

0l;
1l;

/ /Proceso
Tc

l.

for(i : 0;i<:r,S - 1; i++)


for(i :0,'-<:LS - 1; l++){
rf (n[r]l0l > nlj + 1ltOl ){
tmp : ntjl [0];
ntjlt0l : ntj + 1l l0l;
ntj + 1i i0l : tmp;
]
if (n[j]tll > n[j + 1][1])i
tmp = nijL iil;
ntillll : n:j + llirl;
ntj * llt1l : ::rP;
{

/ /SaLida
s9l((/\n";
cout(("Ordenado por columnas\n"
couc(<"Numero (0, O) "<<n[0] [ 0
cout({"Numero (0,1) *'<<n I o ] 1 (("\n";
cout({"Numero (1r 0) "<<n[1] 0 {<"\n";
cout<<"Numero (1,1) *'<<n [1] 1 <<"\n"i
couc(("Numero (2,0) *<<nt2l [0]
cout(("Numero (2, 1 ) "<<n [ 21 ltl

Captulo 7: Estructuras de Datos - Arreglos (vectores y matrices)

Problema 85
Enunciado: Almacene 9 nmeros en una matriz de 3X3 y obtenga los nmeros ordenados.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese 9 nmeros, luego
sistema devuelve la matriz con los nmeros ordenados.
Entrada

9 Nmeros (nlEltl).

Salida

9 Nmeros ordenados (n[3]t3l)

Diseo:
lnterfaz de Usuario

el

Algoritmo
Diagrama de Flujo
I

ni cio

Entero
n

l3l t2l r Entero

Leer nt0l t0l,n[0] [1],nlOl [2]


ntll [0],n[1] [1],n[1] [2]
n t2l t 0l , n 12l l7l , nl2l l2l

ntil tjl- o[x]


x*x*1

Escri-bir

o[x] - ntil tj
x*x+1

nt0l t0l,n[0] [1],n[0] [2],


nt1
n

-otjl > oIj+1


tmp

* o[j+1]

oIj+1]* otl

o[i] -

tmp

tOl,ntll tll,nll.l

t2l tOl,nl2)

l1-1,

12),

nl2l

12

Pseudocodigo

Inicio
//variabtes
tmp, i, ), xt LS : Entero
flag: Logico
/ /ArregLos (Matriz y Vector)
nt3l t3l : Entero
Ot9l : Entero

/snl.rada
Leer nt0l t0l,nIO] [1],nl0l 12l
n[1] [0],n[1] tll,nlLl l2l,
n t2l t0l, n [2] lLl,nl2) l2l
/

/Proceso

x*0

Para i*0 Hasta 2 Inc 7


Para j._0 Hasta 2 Inc I

oIx] * ntiltjl
x*x*1

LtL

dLd

Fin Para
.LJ-

Para 1*0 Hasta LS-1 fnc 1


Para j*O Hasta LS-l Inc I

Fin

Sr oIj] > o[1+1] Entonces


tmp*o(+1)
o(j + 1) _ o(j)
o(t) - tmp
Fin Sr
Fln Para
Para

x-0

Para i-0 Hasta 2 Inc I


Para 1*0 Hasta 2 Inc
ntil tjl * o[x]

Fln

Fin

x*x*1

Para
Para

/satia
Escribir nt0l IO],nlOl l1 ,n[0] [2]
n[1] [0],n[1][1],n[1 12) ,
nt2l t0l,n[2] lL),n12 12l
/

Fin

Codificacin:

#include (iostream)
using namespace std;
void main (void)

/Variables
int tmp, ,1,x,
/

/ /^--^-1
/ /!re9f

LS,'

^uD

int nl3l t3l;


int o[9];
/ / Entrada

(0,0)
(0,1)
(o,2)
(1,0)
(1,1)

cin>>n t0l t0l ;

cout(("Numero \Lt)
cout(("Numero (2,0)
cout(("Numero (2,I)
cout((/'Numero (2,2)

cin>>n ]) 121 ;
cin>>n t2l l0l ;

cout(("Numero
cout(("Numero
cout{{"Numero
cout(("Numero
cout<<"Numero

cln>>nlUl lIl;
cin>>nt0l i2l;
crn>>n11llUl,'

cin>>ni1l tll;

cin>)n t2) lL1 ;


cin>>n 12)

/ Proceso

for (i = 0,' <--2; i++ {


forl : g' )<:2; j++)
o[x] : nlil ttl;

x++;
)

LS = (sizeof (o) /s izeof (int) ) - I


f or (i : 0,'i<:LS - 1; i ++ ) {
t^-t:
rul \J

--

A.
v,

4 /J --

a
ruc

'1
!, .

if (otjl > oLj + 1l)


tmp: olj + 1];
otj + 1l : otjl;
oljl : Lmp;

+f,f,\ l
J "
{

121 ;

Captulo 7: Estructrra*, de, Oatss' Arrelo${w.ctrs :rnatrice*}

for(i = 0; i<:2; i++)


farli
!v!

O.
vt

;<-).
) -

-r

ntil ttl : olxl;

i-*\,
't
)

x++;
]

satida
cout(("\n";
cout(( //Qdenado \ n ",'
cout(("Numero (0,0)
cout(("Numero (0,1)
//

cout<<"Numero (0,2)
cout(("Numero (1,0)
cout(("Numero (1,1)

cout(("Numero (I,2)
couL<<"Numero (2, 0 )
couL<<"Numero (2,I)
cout(("Numero (2,2)

"<<n lol [ 0 ] <<"\n"


*<<nlol [ 1 ] ({"\n"
"<<nl0l [ 2 ] <<"\n"
"<<nl1l [ 0 ] <<"\n"
"<<nl1l [ 1 ] <<"\n"
"<<nl1l [2]<<"\n',
"<<nl2l [0] <<"\n"
*<<nl2l [1]<<"\n"
"<<n[2] [2 ] <<"\n"

.$

Problemas Propuestos
Los siguientes

problemas le servirn para medir su aprendizaje, es importante que los resuelva.

Propuesto

51

Enunciado: Dado 4 nmeros y almacnelo en un vector, luego obtenga la suma y el promedio de los
valores almacenados.

Propuesto 52
Enunciado: Dado 4 nmeros y almacnelo en un vector, el nmeros mayor y menor.

Propuesto 53
Enunciado: Dado 6 nmeros y almacnelo en un vector, luego obtenga cuantos nmeros mlplos de

ha ingresado.

Propuesto 54
Enunciado: Ordene 5 nmeros segn la forma que se indique A (ascendente) o D (descendente).

Propuesto 55
Enunciado: lngrese 6 nmeros y determine cuantos nmeros repetidos existen.

Propuesto 56
Enunciado: lngrese 6 nmeros en una matriz de 3X2 y obtenga la suma de cada fila.

Propuesto 57
Enunciado: lngrese 6 nmeros en una matriz de 3X2 y obtenga el promedio aritmtico.

Propuesto 58
Enunciado: En una matriz de 2X3 ingrese 6 nmeros y mltiple su contenido por un valor
suma de los nmeros de la matriz.

Propuesto 59
Enunciado: Cree una matriz de A de 2X2 y otra B de2X2 y obtenga una matriz

C=

A*

Propuesto 60
Enunciado: Cree una matriz de 4X3 y obtenga los nmeros mayores de cada columna.

y obtenga la

Captulo

I
Cadenas de Caracteres

lntroduccin
lnicialmente las computadoras fueron creadas con la finalidad de resolver problemas aritmcos, sin
embargo hoy en da el manejo de datos alfanumricos (texto) es importante para el procesamiento de
operaciones con caracteres (cadenas) y es de gran utilidad.
Una cadena de caracteres es una secuencia de cero o ms smbolos, que incluye letras del alfabeto,
dgitos y caracteres especiales.

Juego de caracteres
Los lenguajes de programacin ulizan un conjunto de caracteres para comunicarse con las computadoras,
dentro de las cuales existen diferentes tipos de juego de caracteres de los que destacan elASC|l, UNICODE,

etc.

Standard ASCII (Caracteres Alfa numricos)


33

49

65

81

97

113

34

50

66

82

98

tt4

115

35

51

67

83

99

36

52

68

84

100

37

o/
/o

53

69

85

101

38

&

54

70

86

55

7L

87

toT f
103 g

56

72

88

to4

47

57

73

89

10s

42

i<

58

74

90

106 j

43

59

75

91

ta7

44

60

76

92

108

45

61

77

93

46

52

78

94

47

63

79

@,

80

39
40

48

64

1-16
717
118

Ltg

12O

127
L22
3.23

t24

109

1.2s

t26

95

1L0
LL1

127

96

t72

t
v

Caracteres Extendidos de ASCII

728

1.44

160

176

129

L45

761

177 *

130

1.46

1.37

t47

132

t48

133

L49

162
163 f
164 0
165 *

r34 t

150

166

13s

151

L67

136

152

t37

o/oo

138
139
L40

s
(

(E

754
156

r43

193

209

194
195
196

2ro

Ir

198 n

211, o
212 0
2r3 0
214 0

r82 f

!9s e

2t5

183

200

216 0

168

184

201

7!7

1.69 0

185

170

186 v

ce

17t

TM

t57

158

t4r
t42

153

rs7

180
181

I87

))

t72

188

Y4

173

189
190
191

1ss v

174

ts2

175

179
tlg

(<

'/z

A
A

225
226

227

228

229
23O &
231- I
232
233
234

202 E 218
203 E 219 u 235
204 i 220 236
20s I 22T Y 237
206 I 222 p 238
239
207 t 223
208 D 224 240
B

tL

i
r

247
242
243
244
245
246
241
248
249

250

251
252

Representa un solo valor de tipo carcter, por lo general se representa con comillas simples'

/
(,

/Crear una variabLe caracter


.

Ld!dLLCr
^---^!^-

/Asignar un valor

C++

/Crear una variable caracter


char c,'
/

/asgnar un valor
\a/.

253 t
2s4 b
255 y

Carcter (char)

Pseudocodigo

Representa un conjunto de caracteres y por lo general


lo representamos entre comillas dobles.
Pseudocodigo

/ /Crear una variabfe cadena


c : Cadena
/

/lsqnar
+

un vafcr

AllL

C++

,lJna o ITas caracteres


strinq c;
/

/ /esiqnar un valor
c : "ABC";

Operaciones con cadena


Para la manipulacin de las cadenas los lenguajes de programacin
incorporan una variedad de funciones

y/o mtodos que permiten realizar operaciones con cadenas.


Las

r
.
.
.
.
.

operaciones con cadenas mas usadas son:

Concatenacin
Comparacin
Clculo de longitud
Extraccin de cadenas (subcadenas)
Bsqueda de cadenas
Conversiones

Concatenacin
Unir varias cadenas en una sola.
Pseudocodigo

/ /\Jntr cadenas
c*"ABC"+*xYZ,,
C++

unrr cadenas
c : "ABC"
//

II zqo

ll

Aisgitttr

Comparacin
lgualdad y desigualdad de cadenas.

Pseudocodigo

/IguaLdad (ralso)
AAA

\\^^^r/
ddd

//Desigualdad (Verdadero)
..LUISA" > ..LU]S"
C++

'Igualdad
^nn

(Falso)
aaa

'Desigualdad (Verdadero)
..LUISA" > ..LU]S,,,.

Clculo de longitud
Obtener la cantidad de caracteres de una cadena.
Pseudocodigo
/ /eLUrlid

I * Longrtud ("aaa")
C++

//Retorna 3
I : "aaa".lengch();

Extraccin de cadenas (subcadenas)


Extraer una parte especifica de la cadena, por lo general cada carcter de una cadena se representa por
una posicin que inicia con 0, es decir "JUAN" consta de 4 caracteres J es el primer carcter cuya posicin
es 0, U segundo carcter posicin L, as sucesivamente.
En Visual Basic las posiciones de los caracteres de una cadena

Pseudocodigo

/ExLraer el primer caracter


// I cantrdad a extraer
c * Izqurerda (*ABC-,1)
/

/Tambln se usa
// 0 poslcion
// 1 cantrdad a extraer
c * subcadena (*ABC" ,0, I)
/

/trxt:raer e1 ltimo caracter


// 7 cantidad a extraer
c - Derecha("ABC",1)
/

/Tambin se usa
/ 2 posrcron
// I cancioad a exrrae-r
c - subcadena ('ABC",2,I\
/
/

/ /ExLraer e1 segundo caracter


/ / 2 posicion
/ / I can t- i dad a ext raer

c * Extraer ("ABC",l,I)
c - subcadena (*ABC",I,l)
C++

/ExLraer el primer caracler


c: "ABC".substr(0,1);
/

/ /ExLraer el ltimo caracter


c : "ABC". substr (2,7) ;
/ /trxLraer el segundo caracter
c:'ABC".substr(1,1);

inician con

1.

Problema 86
Enunciado: Dado un nombre, obtener la cantidad de caracteres que conene.
Para la solucin de este problema, se requiere que el usuario ingrese una cadena de caracteres
y el sistema devuelve la cantidad de caracteres que conene.

Anlisis:

r Salida
| . cantdad

Entrada

Cadena de caracteres (nom).

(can).

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio
Inicio
CaGena

can:

Cantidad

,/

Leer nom

can * Longitud(nom)
/ Escriblr
trin

//Variables
: Cadena
can : Entero

nom

nom :

can /

/ /sn:.rada
Leer nom
/ /Proc,eso

can * Longitud
/ /sattaa
:scribir

Fin

can

(nom)

'.

.- ',, .'-

,,,',i',,-

:,:

Captulo8: Cadenas'dertiaetere

Codificacin:

#incfude <iostream>
#include (string>
using namespace std;

void

main
/

/\/^-

(void)

r hlc

string nom,'
int. can;
/ / LnLrada
cout(("Nombre : "; cin))nom,.
/ / Proceso

can :

nom.

length

O;

/ / saLt"da

cout(< " \n";


cout(("Cantidad :'\((can(<"\n",.
]

Problema 87
Enunciado: lngrese su nombre y apellido y obtenga su nombre y apellido en mayscula separado por
una coma XXXXX, XXXXX.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese su nombre y apellido y el
sistema devuelve su nombre y apellido separado por una coma y en mayscula.

Entrada

Salida

.
.

Nombre (nom).

Nombre y Apellido (nom_ape).

Apellido (ape)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio
Inicio

//Variables
nom/ape/nom_ape

nom,ape,nom_ape : Cadena

T r

Escribir

/ /Proc.eso
nom_ape*Mayus (nom

nom ape

/satiaa

Escriblr
l'r-n

Codificacin:

#include <iostream)
#include <string>
i ng namespace srd,'

void

main
/

(void)

/Yariables

sLr i ng nom, ape, nomape,'


/ / Entrada
coUt((f'Nombre: " i cin>>nom;
cout<("Apelfido: "; c-in>>ape,'
/ / vroceso
nomape = nofil -'t

uYv

" + ape)

us

Cadena

/ /EnExada

Leer nom, ape


nom ape-Mayus (ncm + ",

" + ape;

//Salida
cout<<"\n";
cout<<"Nombre y ApeIlido:

"<<nomape<<"\n"

nom ape

+ "/ "

+ aPe

Problema 88
Enunciado: Dado un carcter devolver su cdigo

Anlisis:

ASC|l.

Para la solucin de este problema, se requiere que el usuario ingrese un carcter y el sistema

devuelva el ASC|l.

Entrada

Caracter

Salida

I .

(c).

ASCII (a).

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inlcao

//variables
c : Caracater
a: Entero

a : Entero
/

Leer

/ /Enl-rada
Leer c

a . Cod-gc(c)

,/

,Eiscrlbrr

Fin

/ /Proc,eso

a * Ccdrgo (c)
/ /SaLida
Escribir

Fin

$ Algoritmos,con,O++
Codificacin:

#include (iostream>
#include <string>
using namespace std;

void

main

(void)

//variables
char c,'
int a;
/ /Ent rada
g6(("CalacLer:

cin>>c,' i

/ /Proceso
a : (int) c;
/ /SaLida
cout(("\n";
couL<<"ASCII: "<<a<<"\n",'

(:

Problema 89
Enunciado: Al ingresar una letra determine

si es una vocal.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese una letra y el sistema
devuelve si es o no una vocal.
Entrada

Letra (l).

r Salida
| . Respuesta (r).

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio

//Variables
I : Caracter
r : Cadena

Caracte r
Cadena

/ /sntrada
Leer l-

I * Mayus (l)

/Proceso
I * Mayus (l)
Si f:'A' Entonces
R * "trS VOCAL"
SrNoSl L:' Et Entonces
R * *ES VOCAL"
SrNoSr l:r 7r Entonces
R * *ES VOCAL"
SiNoSr \:t 6r Entonces
R "ES VOCAL"
SrNoSr \:tgt Entonces
R * *ES VOCAL"
/

r*"ES

VOCAL"

r-"ES

VOCAL"

r-"trS

VOCAL"

r*"ES

VOCAI

"

r*"ES
r*"NO ES

VOCAL"

VOCAL"

iNo
R - "NO ES VOCAL"

Fln Si
/

/satiaa

Escribir r
Escribir r

Fin

Codificacin:

#:ncl ude <iostream>


# -nclude <string>

using namespace std;

vod

main
/

(void)

/Variables

urral

I,

st.ring r;
/ / !,n|Lrad-a

cout(("Letra: "; cin>>l;


/

/Proceso

f : toupper(1);
f:Ft1
! \r

--

\^r\
n

r : "ES VOCAL";
el-se if tl- =: 'E')
r - oES VOCAL";
else if (f := 'I')
r : "ES VOCAL",
else i-f (1 :: 'O')
r = "ES VOCAL";
else if (1 :: 'U')
r : "ES VOCAL";
e: se

r :

"NO ES VOCAL";

/ /SaLda
couL((" \n";
cout{("RespuesLa: "<<r<("\n"

Problema 90
Enunciado: Dado un carcter, determine si es una letra, nmero o smbolo.

Anlisis:

Para la solucin de este problema, se requiere que el usuario ingrese un carcter y el sistema
devuelve si es letra, nmero o smbolo.

Entrada
. Caracter (c).

I Salida
| . nespuesta

(r)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Ini ci

Pseudocodigo

Inicio

a---^r^-

Cadena

/vari-abl.es

c : Caracter
t
. L
duclld
^-^^^

Ente ro

a : Ent.ero
a*Codigo (Mayus (c)

/ /Enl'rada
Leer c

>=48 Y a<:5i

r-"ES

NUI4ERO"

>:65 Y a<:9
r-.'ES
r-"ES

SIMBOLO"

Escribir r

LETKA,,

/ /Proceso
a - Codrgo (Mayus (c) )
Si a>=48 Y a<-57 Entonces
r - "ES NUMERO"
SrNoSr a>=65 Y a<:90 Entonces
I - "ES LETRA"
S

iNo

r * t'ES
Fln Sr
/ /SaLda
Escribir r

Fin

SIMBOLO"

Algoriso*,,cgn
Codificacin:

#lnclude (lostream)
#include <strlng>
usi ng namespace std,'

void

main

(void)

,/ /Variables
char c;
i ^
rci r! r rrrY

int

!r. t

a,'

/ /EnLrada

cout<<"Caracter: "; cin>>c,'


/ lProceso
a : (int) toupper (c) ;
if(u >: 48 && a <: 57)
r : "ES NUMERO",'
efse if(a >: 65 && a <:
r = "ES LETRA";
el- se

r : "ES

90)

SIMBOLO",'

//Salida
CorJl((/'\";
cout<< "Resultado : "<<r<<" \n",'

Caplth,:Sl,

Problema 9l
Enunciado:

Se desea

obtener los N primeros caracteres de un nombre.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nombre y una cantidad
y el sistema devuelve los primeros caracteres indicados por la cantidad.
Entrada

Salida

.
.

Nombre (n).

Respuesta (r).

Cantidad (c)

Diseo:
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Pseudocodigo

Ini-cio
Ir:icic

//Variables

n, r : Cale.
a

itt

/-rln

trn1-r

7--:-

Leer r., :

/ /EnErada
T r
lLe!

1r,

r - Izquierda(n,c)
/

/-

/
t scIIDfr

Fin

/Proceso

r * Izquierda
/ /satiaa
Escribir r

l'r-n

(n, c)

Codificacin:

#include (iostream)
#include <string>
using namespace std;

void

main

(void)

/,/Variables
strlnq n / r,'
int c,'
/ / EnLrada

qguf(("Nombre: "; cin>>n;


geuf(("Cantidad: "; cin))c;
/ /Proceso
r : n. substr (0, c) ;
/ / SaIda
cot.{("\n";
cout(("Respuesta:

"({r<<"\n";

Problema 92
Enunciado: Segn las siguientes especificaciones, genere un cdigo basado en el nombre ingresado.
Especificaciones para generar el cdigo
Lera carcter del cdigo: Primer carcter del nombre.
2do carcter del cdigo: Tercer carcter del nombre.

3er carcter del cdigo: ltimo carcter del nombre.


4to carcter del cdigo: Cantidad de caracteres del nombre.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese un nombre, luego
sistema procesa y obtiene el cdigo generado.
Entrada

r Salida
| . Cdiso (c).
I

Nombre (n).

Diseo:
lnterfaz de Usuario

el

::,r,

,'

.,

Captulo8: Cadena

G ra

treE,..$

Algoritmo
Diagrama de Flujo

Pseudocodigo

Ini-ci.o

iiicic
ptt-,\),lrn,
/

/ /YariabLes
prtrllrlrnrc:

c : Caciena

Leet

/ntrada

Leer
p . Izquierda (n,1)
t * Extraer (n,2,I)
u * Derecha(n, 1)
,L . Cadena (Longitud (n) )
c . Mayus(p + t + u + l)

9in
Codificacin:

#include (iostream)
#rnc i ude <strt nq>
#include <sstrean>
using namespace std,'
{

/ /Va riables
string prtru.nrc,'
osLringscream 1,'

/ / LnLaoa
cout(("Nombre : "; cin>>n,.
,/

/ Proceso

P - n.substr(0,1);
t = n. substr (2, I) ;
u : n. substr (n. length
f << n. length ( ) ;

-1, 1) ;

c - p + t + u - l.scrO,.
,//SaLrda

c-- -'-

Izquierda (n, 1
Extraer (n,2,I)
Derecha(n, 1)

Cadena (Lonqrtud (n) )


Mayus(p + t +'r + l)

/ /satiaa
Escribir

Fin

void main (void)

/ /Proceso

p*
t *
u*
I *
c*

r7

/trscrrbrr

<"\n";

la,;--<< "Codrgo

Cadena

: "<<c<("\n",.

Problema 93
Enunciado: Determine cuantas veces se repite una letra en una frase dada.
Para la solucin de este problema, se requiere que el usuario ingrese una frase y una letra y
luego el sistema devuelve la candad de veces que se repite la letra en la frase'

Anlisis:
Entrada

Salida

.
.

Frase (f)

Cantidad (c).

Letra (l)

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio

Inicio

/
f

a-lan:

/YaxiabLes

E
I r
ut

1
I
!i

.
.
.

--!^-^
lAUCrld
Efr^

/Entrada
Leer f,
/

i<=Longitud (f) -1

/Proceso

Para i-0 Hasta Longitud(f)-1 Inc


(Extraer (n, i,1) :ttayus

Si
(

(Extraer (n, i,1)


Entonces

Mayus

c-c+1
trrn Si
Fin Para

Escribir

/ /satiaa
Escribir
c

Fin

-Mayus

(l)

Qapltul* fi: CIadanas der:Caclere*


Codificacin:

#include <iostream>
#include <string>
uslng namespace std;

void

main

(void)

/ /Variabfes

strrng r,
int
lrru

:
e

vf

_L;

i.

r,

/ /Ent-rada
cout.(("f5s
cout(("Letra:
/
f

"; getline
"; cln>>1;

(cin, f);

/Proceso
or (i : O; i<:f . lengch O -1,' i++ ) i
if (toupper (f lil )::toupper (l [0]

c++ i
)

/ / sat iaa
cout<<"\n";

Cout(('/Cantidad

1\191(//\z

Problema 94
Enunciado: Dado una frase devolver la frase sin espacio en blancos.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese una frase y el sistema
devuelva la frase sin espacios en blancos.
Entrada

Salida

Frase (f1)

Frase sin espacios en blanco (f2).

Diseo:
lnterfaz de Usuario

Algoritmo
Pseudocodigo

Diagrama de Flujo

Inicio
fI,f2,t:
Cadena
i,p : Entero
Leer f1

p*0
fl - Recortar ( f1 )
i<=Longitud (f1) -1

Inicio
//variables

1
, L, Fa
!- r te .. r=A
--*-jna
'i ^ . rf^r^
-r ll

/ /EnErada

Leer f1
/

/Proceso

P*O
f1 * Recortar(f1)
Para i*O Hasta Longrtud(f)-1 Inc

Extraer (f I , :.,1) -" "

Si Extraer (fI, r,I:"

" Entonces

t * Extraer(f1,p,i-p)
p*i+1
f2*f2+L

t * Extraer (f1,p, i-p)


p. i+1
f2*f2+T,

rin Si
F-in Para

L Exrrae r (11. , p, i-p)


f2-f2+L

t . Extraer (f1,p, r-p)


f2-f2+t
Escribir f2

/ /satiaa
trscribrr f2

Fin

Codificacin:

#include (iostream)
4 incl ude (string>
using namespace std;

void

main

(void)

//Variables
string f7, f2:""
1nt 1 tPi
/ /EnLrada
cout{("Frase:

l;

"; getline

(cin, fl);

/ / Proceso

p : 0;
for (i : 0 i<f l-.length () ; i++)
i f (f1. substr (i, 1) -- * *)
t = fl .substrtp,i-p);
p : i + 1;
f2:f2+t;

{
{

t: f1 .substr{p, i-p);
f2=f2+L;
//Salida
\n";

cout<<//

Cot.(('/Frase sin espacios : "<<f 2<<" \n" i

Problema 95
Enunciado: Dado una frase, devuelva los espacios en blanco de

la frase

con *.

Anlisis: Para la solucin de este problema, se requiere que el usuario ingrese una frase y el sistema
devolver la frase en formato encriptado.
Entrada

Frase (f1)

I Salida
| . Frase encriptada

Diseo:
lnterfaz de Usuario

(f2)

Algoritmo
Diagrama de Flujo

Pseudocodigo

Inicio

Inicio
fI,f2,c
i:

//Variables
fL,f2,c : Cadena
i : Entero

: Cadena
Entero

Leer fl
/ /Entrada
Leer f1

i<:Longitud (:1) -1

i,

c - Extraer(fl,

c * Caracter(Codigo(c)

LL

LL

/ /Proeeso

1)

Para 1*0 Hasta Longrtud(f1)-1 Inc

c - Extraer ( fl , i, I)
Si c <> \\ \\ Entonces
c * Caracter(Codigo(c) +

1)

Frn Sr
f2*f2+c

Fa

Esc::i::: i2

ra

/ /Sa]-ida
Escrib- r f2

Fin

1)

Codificacin:

#lnclude (iostream)
#include <string>
using namespace std;

void

main
//

(void)

var].ables

crrinn

int

Fl

)-'tt'

LL'

^.

LL

'9'

1;

/ / EnLTada

cout({"Frase:
/ / Procesa
f or (i - 0;
^ -

(cin, f1);

"; getline

i<:f 1.f ength

+1 -,,1--r-/i

1\,

l.L\!,Ll'

if (c == * '
U_
^ - \\*'/.

-1,' i++)

ta
LL

U,

//Salida
cout((" \n";
cout{("Frase

encriptada:

"<<f2<("\n";

Problemas Propuestos
Los siguientes

problemas le servirn para medir su aprendizaje, es importante que los resuelva.

Propuesto 6l
Enunciado: Dado el nombre de una persona obtenga el mensaje "Bienvenido: Sr(a) Gustavo, a su enda
de preferencia".

Propuesto 62
Enunciado: Dado un nombre obtenga el nombre en forma invertido, por ejemplo Julio invertido oiluJ.

Propuesto 63
Enunciado: Dado un frase devuelva la frase con asteriscos en lugar de espacios en blancos.

Propuesto 64
Enunciado: Dado una letra determine si esta en minscula o mayscula.

Propuesto 65
Enunciado: Lea una frase y una palabra y determine si existe o no la palabra en la frase.

Propuesto 66
Enunciado: Dado una palabra determinarsi es palndromo (una palabra es palndromo si se lee igual de
izquierda a derecha o de derecha a izquierda), por ejemplo ANA.

Propuesto 67
Enunciado: Dado una frase determine cuantas palabras palndromos ha ingresado.

Propuesto 68
Enunciado: Dado una frase determine cuantas palabras se repiten.

Propuesto 69
Enunciado: Cree el algoritmo para encriptar una frase con el valor del carcter ASCII sumando
posiciones.

Propuesto 70
Enunciado: Cree el algoritmo para desencriptar la frase generada por el algoritmo anterior.

Captulo 9

SubAlgoritmos
(Procedimientos y Funciones)
Introduccin
Una frase bastante usada en el mundo informco para resolver problemas complejos que se aplica
con mucha frecuencia, es "Divide y Venceras", acuada altema de subalgoritmos (subprogramas), que
consiste en dividir un problema grande en problemas mas pequeos que se encargarn de resolver
temas especficos.
Los subalgoritmos (subprogramas) se dividen en dos tipos procedimientos (subrutinas) y funciones que
evitar la duplicidad de cdigo y ayuda a crear mdulos ms pequeos para un mejor mantenimiento,
pudiendo reutilizarlo muchas veces.

El mtodo de disear la solucin de un problema principal (main) en subproblemas se conoce como


diseo descendente (top-dow design), difundida por la programacin modular.

El problema principal corresponde al programa o algoritmo principal y la solucin de los subproblemas

mediantes subprogramas (procedimientos y funciones), en el lenguaje algortmico se conoce como


subalgoritmos.
El subprograma recibe datos y es invocado desde el programa principal, despus de terminar el proceso
que tuvo que realizar el subprograma devuelve el resultado correspondiente al programa principal.

Progra ma

SubPrograma

Principal

Retorno

Ia za+

ll etgor*ffids

Procedimientos
y no retornar un resultado, s posible
que
embargo si es
implementar
devuelva resultados por intermedio de parmetros llamados de
salida o por referencia.
Los procedimientos se caracterizan por realizar una tarea especfica

Pseudocodigo

/ /Crear un procedimiento
Procedimiento Procl (E: Paraml: Entero)
<

Instrucciones)

Fin Procedimiento
/

/Invocar el procedimiento

Llamar Procl

(10)

C++

retorna ningun valor (void)


(int
void Procl
Paraml) t
/ /Funcn que no

<

Inst.ruccione s );

l
'Tnvocar al mtodo
Procl (10);

Funciones
Son ms conocidos por devolver un valor como resultado de la tarea realizada, los lenguajes de
programacin incorporan funciones que realizan algunas tareas ya programadas conocidas como
funciones internas, pero las funciones programadas por el usuario (programador) se conocen como
externas o funciones definidas por el usuario (FDU).
Pseudocodigo

/ /Crear una funcin


Funcion Funcl (E : Paraml :Entero)
<

I ns

trucciones)

Retorna <Vafor)

Fin Funcion
/ /lnvocar fa funcin
c - Funcl (10)

:Cadena

C++

/Crear una mtodo que retorna un vafor


string Funcl (rnt paraml) {
/

(Instrucciones),.

return (Valor),.
l
/ / Invacar el metodo
c : Funcl (10)
,.

Paso de parmetros
Muchas veces los procedimientos y funciones requieren que le enven una lista de valores llamados
parmetros (argumentos), para usarlos en la solucin de la tarea encomendada.
Los parmetros son va ria bles muchas veces de entrada (reciben valores) y de
o ambos de entrada/salida.

sa

lida (devuelven resultados)

Estos parmetros tambin toman el nombre de parmetros por valor (entrada)


referencias (salida).

y parmetros por

Parmetros por valor (entrada)


Los valores que se envan a los parmetros son asignados como una copia de los valores originales,
desconectando el programa principal con el subprograma, es decir si los valores de los parmetros
cambian dentro del suborograma no afecta al programa principal.
Pseudocodigo

'/

rear

u:_

tu:.:rot

Funcion Increnentar (E:N:Entero) :Entero


N - N + L /iqodrfica ef valor de

Retorna

Fin Funcion
/ /Itccar 1a funcin
Num*5
Res - I:-::er,entar(Num) / /EI valor de Num se copia en
Imp:::-: li:r
/,/su vator sigue siendo 5
fmc:::_: :+..
su va Lor es 6

C++

l:ear un mtodo
int Incrementar(int

N)

N - N + 1,. //Modifica el valor de

return

N;

/rnvocar el mtodo
Num : 5;
Res : Incrementar (Num) ; / /trI valor de
cour<(Num; //su vaLor sigue siendo 5
cour<(Res; //su vaLor es 6
/

Num

se copia en

Parmetros por referenca (salida)


Se asignan las referencias de las variables (direccin de memoria de la variable) a los parmetros,
conectando el programa principal con el subprograma, es decr si los valores de los parmetros cambian
dentro del subprograma afecta a las variables del programa principal.

Pseudocodigo

/Crear una funcin


Funcion Incrementar (S :N:Entero) :Entero
/

N . N + I / /l.lodiflca el vaf or de

Retorna

Fin Suncion
/ /rnvocar la funcin
Num-5
Res - fncrementar (Num) / /trL parmetro
ImprimJ-r Num / / su vaLor ahora es 6
Imprimir Res //su vaLor es 6
C++

/Crear una funcin


int Incrementar (rnt &N) {
/

N - N + 1,' //ModLfica el vafor de

return
)

N;

hace referencia

Num

/'Invocar la funcin
: 5,'
Res - Incrementar(Num); //trI parmetro N hace referencia
cout<<Num; / / su valor ahora es6
cout<<Res ; / / su valor es 6
/

Num

Num

Problema 96
Enunciado: Dado dos nmeros enteros, hallar la suma. Cree una funcin para resolver el problema
Sumar(

E:

N u

l-

Entero,

E:

Nu

m2

:E

ntero) : Ente ro

lnterfaz de Usuario

:r?i*
-l

Algoritmo
Diagrama de Flujo

Pseudocodigo

Principal

Principal

Ini-cio

//variables
n1, n2, s : Enterc
/// LaaY r-it

/ /gnErada

nZ/

Lgcl

s*
/

Sumar

(nl,

Escribir
Fin

n2

1
L!lt

*a
tra

/ /Proc.eso

s*Sumar(n1+n2)
/

/satiaa

Escribir
Fin

SubAlgoritmo

Diagrama de Flujo

Pseudocodigo

Sumar

Funcion

Num1,Num2,s

: Entero

:Entero,
E :Num2 : Entero) : Entero

Sumar (E :Numl

Inicio

/VarabLes locales

s: Entero
/Leer

Num1, Num2/

Escrrbir s /

Fin Funcion

Codificacin:

#include (iostream)
using namespace std;
i-nt Sumar (int Num1, inL

/Ent:rada

/Proceso

Num2);

cout<</'Numero
cout<<"Numero

1: ",' c-Ln)>n1;
2: "; cin>>n2;

s = Sumar(n1, nz]ri
/ /satioa
cout<<"\n",.
cout(('/Suma : "{(s(("\n"

,//Euncion Sumar
int Sumar(int Num1, int Num2)
/ / Varrab-Les

int s;
/

/Proceso

s:Numl+Num2i
'//satioa
return
)

s,'

/satia

Retornar

Fin

/ /PrneLpal
void main (void)
,/ /Va riables
inl n1,n2,s;

/Proceso

s*Num1*Num2

s.Num1+Num2

Caphrlo 9: SubAlgorifnos {procedim

Problema 97

Enunciado: Dado dos nmeros enteros diferentes,


devolver el nmero Mayor. Cree una funcin para
resolver el problema.
Mayor(E:n1:Entero, E:n2 :Entero):Entero

Algoritmo
Diagrama de Flujo

Pseudocodigo

Principal

Principal

fnicio
/ ,/ ,r'4:talo_l_gs

/Leer r,,, ,.- /

/EnErada

/ptoceso

m - Mayor (nI , rt2)

/- t!scIIb1r

./

Fin

lTl *

\':

/ /Salda
trscriblr

Fin

SubAlgoritmo
Pseudocodigo

Diagrama de Flujo

Mayor

Inicio
n1

Funcion Mayor (E : n1 :Entero,


E:n2:Entero) lEntero

n2, m : Entero

/YarabLes locales
m : Entero
/

/Leer nI,
F

n2

'n2 -\
v

-t

"t

/Proceso

Si nl > n2 Entonces
m*nl
trin Si

Si n2 > n1 trntonces
m*n2
fin Sr

:.--=t-

.____-_____l

t\

,,2
|

/satiaa

Retorna
/ Escrtt- -: rr /

Fin Funcion

Fir
Codificacin:

#include (iost'ream.h)

int Mayor(int nf int


//Principal
void main (void)

n2)

/Variables
int nl , n2 ,m:0;
,/

/ lF'r,trada
cout'(("Numero 1 :
cout{{"Numero 2:,

"; cin>>n1;
",' cin>)n2;

/ / Praceso

: Mayor(n1,

//Salida

n2) ;

cout<(endl;
cout.(("Mayor: "<<m((endl;

//Funcion Mayor
int Mayor(int nl, int n2) {
/,zVarrabtes
inc m : 0,.
/ /Proceso
i f /1

> n?\
-

!!L

m:n1;
if (n2 > nl)
m : n2i
/

/ SaId.a

r^lr1rh
!v
Lurr

.
rrL/

Problema 98
Enunciado: Determinar si

un nmero entero es par

o impar. Cree

un procedimiento para resolver el

problema.
Parlmpar(

:num : Entero,

S: res

lnterfaz de Usuario

Entero)

f Algoritmos con C++

::,",,

r::_-

Algoritmo
Pseudocodigo

Diagrama de Flujo

Principal

Principal

Inicio
Inicio

//Variables
n : Entero
r : Cadena

nl

nI, n2/

/r"ut

/gnLrada

Leer
m - Mayor (nI ,n2)

/
,/

.-

Escrr-b1r

/Proceso

(n, r)

Parlmpar

/ /satiaa
Escribir r

Fln

Fin

SubAlgoritmo
Pseudocodigo

Diagrama de Flujo

Parlmpar

Procedimiento ParIpar (E : num: Entero


S:res:Cadena)

Ini cio

/variabLes locales
r : Cadena
/

num : Entero

res, r : Cadena
/

Leer

num

s--<--*-:{
J

;-.- {MPAR
__l________i

/Proceso

SrnumMod2:0Entonces

>l

r - "l

-T
/ nscribir res -

\\DN D,/

r _

..

r lL\
IMPAR,,

Frn Sr
/

/satiaa

TS*I

Fin

Fin Procedimiento

Codificacin:

#include <iostream>
#include (string)
using namespace sld;

vojd Parlmpar(int num, string eres);


//Principal
d main (void)

vo j

/ /Varl abl-es
rttL

!1,

string r;
/ /EnLrada
cout<<"Numero: "; cln))n;

/ / E1:OCeSo
Parlmpar (n, r);

sataa
cout<<"\n";
cout(("Resultado
//

: "<(r<<"\n";

//Euncion Parlmpar
void Parlmpar(int num, string
,/,/variables
-i -i^^
Lrfrru

r-

/ / Pl-Oceso

\\rr.

if(num Z 2 -* A){
r : "PAR";
t
e^l
r : "]MPAR";
)

//Salida

&res)

Problema 99
Enunciado: Dado

un nmero, determinar cuantos dgitos

tiene. Cree una funcin para resolver

problema.
CantidadDigitos(

num

Entero) : Entero

lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Principal

Pseudocodigo

Principal

Inicio
Inrcio

/ /YarLabl.es
LL,

tr'nlr

fi^7^

Leern

. CantdadDigitos (n)
/

Escribir
Fin

/ /nntrada
Leer n
/

/Proceso
c - CantidadDigrtos (n)

/sattaa

Escribir c
Fin

el

SubAlgoritmo
Pseudocodigo

Diagrama de Flujo

CandadDigitos
I

Funcion CantidadDigitos
(E : num: Entero) : Entero

ni cio

num, c : Entero

/variab]-es locales
c : Entero
/

/ /Proeeso
nrim)0

num-num

c*c*1

Escribir

10

Mientras num>O
uffi*num\10
c*c*1
Fin Mient ras
/ /satiaa
Retornar

Fin Funcion

m
Codifica

#include <iostream>
#include <strinq>
usi ng namespace std,'

int CantidadDigitos (int


//Principal
void main (void)
/

/Variables

fi-+
ltL

^ g
^
rl,

n.
vt

--

/ /Ent-rada
cout(("Numero:
I

num);

cin)>n,'

/Proceso
c : CantidadDigitos (n),'

//Salida
couL(<"\n",'
cout<<"Cant. Dlgl-tos: "<<c<<"\n";
)

/,/F'uneion CantidadDigitos
int CantidadDigitos (int num)
/ / Varrables

int c:0;

/ /Proceso
while(num > 0)

num:num/lO;
u
^

ar-

1
f ,.

/ /Saltda
return c;

lcapa&o:isli i,sr$H
.

fgtti i1.;{F}db'edimiaxts'

y,

rF,u*i**}r

'fi

Problema 100
Enunciado: Crear un algoritmo para hallar el factorial de un nmero, el factorial es el producto de todos
los nmeros consecutivos desde la unidad hasta el nmero, porejemplo factorial de 3! (se denota !) es
1X 2 X 3 = 6. Cree una funcin para resolver el problema.
Factorial(

E: n

um: Entero): Entero

lnterfaz de Usuario

.,1,1

,
Pseudocodigo

Diagrama de Flujo

Principal

Principal

Inicio
Inicio

//variables
ltr

ltlLgrv

n,

t:

Leet r

/znl-rada
l-eer: n

f - Fac--orial (n)

/ /Proc,eso

Entero

Escribir f
fin

f . Fac--oriaL (n)

/ /satiaa
trscribir: f

Fin

SubAlgoritmo
Diagrama de Flujo

Pseudocodigo

Elncion Factorial

(E

nun: Entero) : Entero

Inrcio
/

num,f,i:Entero
Leer

num

/VarabLes locales

L'l^v^

/Proceso

I._l

Para i*1 Hasta num Tnc


f -f * r
r an PaIa
/

/satiaa

Retornar f

Fin Funcion
Escribir f

Codificacin:

#include <iostream>
usi ng namespace std,'

inl Factorial (int


//Principal
void mai n (void)

num)

/Varables

ttr r,

tltL

/ / Lntrada
cout{("Numero: "; cin)}n;
/ / Proceso

f = Factorial (n);

/Salida
cout(("\";
cout(("Factorial
/

: "<{f<<"\n"i

])

//Funcion Factorial
inr Factoriat (int num)

/ / varraptes
Iltu

Ir

!t

/ / vroceso
L

Lt

for(-i = I; i<-num; i++


+ --!

l/salioa
return f;

:,.
Lt

Problema 101
Enunciado: Dado 5 nmeros obtener la suma. Cree una funcin para resolver el problema.
Sumar(E:num[] : Entero) : Entero

lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Principal

Pseudocodigo

Principal

Inicio
Inicio

s: Entero
n[5] : Entero

//Variables
s : Entero
/

/Leer nlOl,n[1],r
nl2l , n [3] ,nl4l/
s-

,/

Sumar (n)

.Escrlbtr

Fin

/ArregLos (Vector)

nlElL

.
I

Enlarn

lEnLrada

/Proceso

Leer nIO],n[1],n12),n[3],nl4l

s*

Sumar (n)

/ /sattaa
Escribir s

Fin

'

Captulo 9: SubAlgoritmos (procedirnientos y Funciones) I


SubAlgoritmo
Diagrama de Flujo

Pseudocodigo

Sumar

^nrcto

Funcion

Entero
/

L'+^r^

/proceso
Para i-O Hasta 4 Inc
s - s + num[1]

num

Fin
s.-Slnum[i]

Escribir

:Entero) : Entero

/VarabLes locales

:;n, ] : Entero
Leer

Sumar (E : num[]

Para

/ /satia
Retornar

Fin Funcion

Codificacin:

#rnc L ude <ioscream>

using namespace
inr

Sumar

(int

num

/ /Prnci-;pal
void main (void)

rd,'

[]

,'

,//Variables
int s : 0;
/

/ArregLos
int n l5l ;

/ / EnLrac1a

cout({"Numero 1
cout(("Numero a.
cout(<"Numero 3:
cout{{"Numero 4:
cout(("Numero q.

cin>>n I 0l
cin>>n I 1l
cin>>n 21
ci-n>>n 3l
ci-n))n 4l

froceso
s : Sumar (n) ;

//

ida
cout((" \n"

/ /SaI

,'

Cout(("Suma : "<<s<<" \ n",'


]

//Funcion Sumar
j.nt Sumar (int, num [ ] )

/ / varlaDles
11t

Vt

I / Proceso

Lt

for(1 = 9' i <- 4; i++


s += numlrl;
//satia
return s,'

Problema 102
Enunciado: Ordene 4 nmeros usando el mtodo de ordenacin por intercambio (burbuja).
procedimiento para resolver el problema.
Ordenar (S:num[] :Entero)
lnterfaz de Usuario

Algoritmo
Diagrama de Flujo

Principal

Pseudocodigo

Principal

Inicio
Ini cio

n[4] : Entero
/t eer n IO],n [1],n i 21,nl3l//
Ordenar (n)

/Escribir

IO],

Fin

[1],n [2), nl3l/

/ /ArregLos (Vector)
n[4] : Entero
/ /EnErada

Leer n J ,n[lt,nL2),n13)
/ /Proc,eso
Ordenar (r)

/ /sattaa
Escribir n[0],n [1], nl?1,

Fin

-- ,- "' '-:
I Algoritmos Gofr c++
SubAlgoritmo
Diagrama de Flujo

Pseudocodigo

Ordenar

Inr ci
Lmp,

Procedimiento Ordenar

r,1,LI ,- S : Entero

num[4]: Entero

(S : num[

] : Entero)

/ /varabLes locales
tmp, i/ i / LI/ LS : Entero

/ /Proceso

Lr-0
TC
!J

J2

Para i*LI Hasta LS-1 Inc 1


Para j. Ll Hasta LS-1 lnc

Si

tmp - num[1]
numIj ] - numIj+1]
num[j 1] ._ t-mp

Fin Sr
Fin Para
umIj]>numIj+1
tmp . numlj]

numljl *

numl+11

numl+11 - tmp

rl ". D^-^
I f 11 Fdrd

/satia
Escribir
/

num

Fin Procedimiento

Escribir

num

num[] I >numIj+1] Entonces

Codificacin:

#include <iosLream)
using namespace std;

void Ordenar (int


//Principal
void main (void)

num [ ] ) ;

/Arreglos
int n[4];

/ / EnLrada
couL(("Numero
cout(("Numero
cout(("Numero
cout({"Numero

crn>>nl0l;
cin>>n[1];

f.

2z

cin>>n
cin>>n

3
4

[2]

[3]

/,/ Proceso

Ordenar (n);

/ / SaLida

cout<< " \n";

cout(("Ordenado \rr t
cout(("Numero 1: *<<n Io] <<,,\n',
ggut<<"Numero 2: "<<nl1l (("\n"
g6l(("Numero 3 "<<n [2 l <<"\n"
cout({"Numero 4 "<<n [ 3 ] <<"\n"
]

//Funcion Ordenar
void Ordenar(int nll)
/ /Variable s
int tmp, i, j , LI,

t
!J

/ / Proceso

for

{1

Lr,

for (j :

:1. t^
rr
\rr

/L!,

a Q

1_;

i++)

ljl > nI it.)r


t-mp : nl )lt
ntjl : n rj
nIj + 1]

l.

LS

1l ) {
r

11.

t.np;

t++)

Los siguientes

problemas le servirn para medirsu aprendizaje, es importante que los resuelva

Propuesto

71

Enunciado: Hallar el rea y el permetro de un de un Cuadrado, cree un procedimiento para realizar


dicha tarea.
Cuadrado (E:Lado: Real, S:Area : Real, S:perimetro:

Rea l)

Propuesto 72
Enunciado: Dado tres notas, obtenga el promedio de las dos notas mayores, cree un procedimiento para
realizar dicha tarea.
Promedio(E:

N L:

Real,E: N2: Real,E: N3: Real,S:promedio:Real)

Propuesto 73
Enunciado: Dado la edad de una persona, determine en que etapa de su vida se encuentra, cree un
orocedimiento para realizar dicha tarea.
Etapa (E:Edad:Entero, S:Etapa:Cadena)
Edad

Etapa

Entre 0 y 2

Beb

Entre 3 y 5

Nio

Entre 6 y 12

Pubertad

Entre 13 y

Adolescente

l_8

Entre 19 y 25

Joven

Entre 26 y 60

Adulto

Mayor a 60

Anciano

Propuesto 74
Enunciado: Dado un nmero obtener la suma de sus dgitos pares e impares.
Recuerde: Crear un procedimiento que realice la tarea.

Propuesto 75
Enunciado: Dado un carcter determinar, si es vocal, letra mayscula, letra minscula,
nmero o

simbolo.

Recuerde: Crear un procedimiento que realice la tarea.

Propuesto 76
nunciado: Hallar el rea de un Rectngulo, cree una funcin para realizar dicha tarea.
AreaRectangulo(E:Base: Real, E:Altura :Real) : Real

Propuesto 77
nunciado: Un negocio tiene dos tipos de cliente, Pblico en general (G) o Cliente Afiliado (A), recibe dos
:'-:. je pago al Contador (C) o en Plazos (P), Nos piden crear un programa que al ingresar el monto de
::-:'3 se obtenga el Monto del descuento o el Monto del Recargoyel Totala Pagarsegn la siguiente

Contado (C) Descuento

Plazos {P) Recargo

Pblico en general (G)

t5%

t0%

Cliente Afrliado (A)

20%

5%

Tipo

% de Recargo
Reca rgo(

:Ti po :Ca

rcter) : Real

:: ce descuento
Descuento(E:Ti po:Carcter):Real

Propuesto 78
runciado:-i3

,='-:: 3l- :
ecuerde

-'-;-rc;

Cevueiva el nmero en forma inversa, porejemplosi ingresa 123, su nmero

-E'esa 123.15, nmero inverfido 5432L

:'..r. ,].

funcin que realice la tarea.

Propuesto 79
runciado: Dado una palabra determinarsi es palndromo (una palabra es palndromo

se lee igual de

i - .'. a derecha o de derecha a izquierda), por ejemplo ANA.


xuerde: Crear una funcin que realice la tarea.

Propuesto 80
runciado: Cree una matriz de A de 2 X 2 y olra B de 2 X 2 y obtenga una matriz
tcuerde: Crear una funcin que realice la tarea.

C=

A * B.

rcffi

tlaffi
lnCurlrro gro{rcc:

lmpreso en los talleres Grficos de


ISAGRAF S.R.L.
Surquillo

9243-2003

827*2650

Seembre 2008

Como no recordar Ias primeras clases-deAlgoritmo y la ilusin


de aprender a programar esta obra plasma los primeros pasos
que todo estudiante de la carrera de Ingeniera de Sistemas,
Software e lnformtica debe conocer para empezar a analizar,
disear y codificar sus primeros algoritmos y pasar la barra
que todo programador debe dominar que son las estructuras
de controi deujo tales como if, switch (c++, java y c#) y select
case (vb). whle Y for.
Es importante en toda la carrera que usted sepa utilizar las
estruituras de control por que es la base de todos los cursos

afines, este libro contiene

9 captulos con ms de 100

algoritmos resueltos y B0 propuestos y al finalizar de leer la


obra estoy seguro que usted formar parte del mundo de los
desarrolladores de software,

Profesional de sistemas

contabilidad, con mas de 10 aos de


experiencia en Tl. ha ParticiPado

como asesor

desarrollador en

o'oyectos oe soltware para diversas


empresas privadas y pblicas del
oas como Minera del Hill, Aruntani,

VerK.rler. MINSA, IPD

Captulo

: Fundamentos de

Programacin

doble
mltiPle
: Estructura repeiitiva nrientras
: Estructura repetitiva para

t'ansnacionares como Magna

uapriuro J : Estructura selectiva simple y

Rosseta Ceramica - MRC utilizando

uaprtulo 4 : Estructura selectiva

sus conocimientos de contabilidad y

ingeniera de software en el
s y oiseo oe software con
RUP, UML Y Patrones de
arqditectJra, oiseo de software

de

anlis

con lenguajes Java, .NET Y PHP Y


base de datos Oracle, SQL Server,
t\4ySQL y PostgreSQL.

Difunde su experiencia como

"::

''

Captulo 2 : Estructura secuencial

Captulo 5

Captulo 6

',,,,,,,,',,

::::':

:,

,,,,,,, ::

,,,,.,,,

Captulo 7 : Estructura de datos Arreglos (vectores y matrices)


Captulo

B :

Cadena de caracteres

Captulo 9 : SubAlgortimo (Procedimientos y Funciones)

docente en la Universidad Nacional

de lngeniera (UNl-FllS -

CEPS-

UNI). lnstituto San lgnacio (lSlL) y


capacitaciones paTa emPresas
(Telefnica del Per, FAP, La Caia de
Pensones Militar Policial, ALPECO.
Banco de Materiaies entre otros).
Adems participa como exposiior en

resa
:a nuestf :
F oro

Jnq

universidades e institutos

(Universidad Nacional de lngeniera


- CEPS-UNl, Universidad Naciot'al

de Trujillo, Unrversidad Cesar


Vallejos de Trujillo, Universiciad
Nacional Jos Faustino Snchez

iv!*ti.ed tor al fia ro.


i

i"

Nestros aulores

Canin de Huacho. lnstituto San


Aqustn, lnsiituto Jos Pardo,
lnstituto Manuel Seoane Corrales,
lnstrtuto La Reyna ltlercedaria)

* Autor exclusivo de la

Empresa Edtora Macro

Contenido
Video tutoriales
Ejemplos
Prcticas
lmgenes
i

*q8N

:'v i8-*il3'4t 7'*$-4

Telf .:(511)719-9700

lt$itil[fiililli[[1lfi

aoi

es;

,: las,dudas que pud;!:# :


refrente al libro fi a :

ventas@editorialmac ro . :
www.editorialmacro.con