Vous êtes sur la page 1sur 104

1.

CONCEPTOS GENERALES DE PROGRAMACIN


Software
Componente lgico del computador. Conjunto de programas para que el computador
funcione.
Entre ellos se tiene: Sistemas operativos, compiladores/intrpretes (Lenguajes de
programacin), editores de texto, utilitarios, graficadores y otros.
Lenguajes de Prograa!"#n
Sirven para escribir programas que permitan la comunicacin usuario/mquina.
Lenguajes de mquina (0 / 1)
Lenguajes de bajo nivel (Ensamblador)
Lenguajes de alto nivel
Lenguajes de a$to n"%e$
Utilizan reglas sintcticas similares a los lenguajes humanos.
Primeros lenguajes
Cobol, Fortran V, Basic, Logo
Posteriores
C, C++, Pascal, Visual Basic, Java, C#
Extendidos
Ada-95, Modula-2, Prolog, LSP, Smalltalk, Eiffel
Otros visuales
Borland, Delphi, SQL, Power Builder
Para nternet
Java, HTML, XML, Java Script, Visual J, C#, ASP Net, PHP, Ajax, Ruby, etc.
Co&"$ador
Programa de computadora que permite traducir de un programa fuente a un programa
objeto.
Ejemplo:
De%C'' de ($oods)ed y se ejecuta bajo Windows
GCC de GN*, se ejecuta bajo Linux y Unix

Prograa
Conjunto de instrucciones que indican al computador qu debe hacer. Programa o software
son conceptos similares.
Prograa fuente+ instruccin escrita por el programador o desarrollador en un
lenguaje de programacin.
Prograa o,jeto+ instrucciones en lenguaje mquina producida por el computador.
1
SOL*CION DE PRO(LEMAS - PROGRAMACIN
1.1 A$gor"to
Secuencia finita de instrucciones, reglas o pasos que describen de modo preciso las
operaciones que un computador debe realizar para ejecutar una tarea determinada en
un tiempo finito [ Knuth 68 ].
Es un razonamiento que nos permite resolver un problema.
A
- dea
- Razonamiento
- Bosquejo (
Pro,$ea
- Matemtico
- Lgico
Ejemplo:
Teniendo las edades de Juan y Jos debe determinar lo siguiente:
1. Promedio de edades
2. Quin es mayor
So$u!"#n:
Edad de Juan = X aos 1
Edad de Jos = Y aos 2
a) X + Y Mat. +, / Algorit. Mat.
2
b) Si X > Y Juan > que Jos "V, F
Si Y > X Jos > que Juan "T, F Algoritmo
Si X = Y Edades iguales
Re!oenda!"ones
Un algoritmo debe ser lo ms corto posible.
Si un problema grande, para su solucin, se divide en partes pequeas, entonces es
ms fcil de resolver.
"Divide y vencers...
Esto es lo que en programacin se llama "modularizar
Sugeren!"a
Usar comentarios en los algoritmos y ms tarde en los programas.
.
2 1
3
n
...
Dado el enunciado de un problema, se puede elaborar un algoritmo, seudo cdigo, y
posteriormente el programa.
"C
"Delphi
"LSP
"Prolog
"PHP
1.. Seudo !#d"go
- Paso previo entre algoritmo y programa.
- Se usan comandos en castellano.
- Nosotros creamos los comandos.
- Se puede convertir fcilmente a un lenguaje de programacin.
- Con la experiencia se puede obviar.
- Seudo cdigo usa estructuras fijas (programacin estructurada)
- Seudo cdigo similar a las pginas estructuradas (eventos, mdulos) .
1./ 0ar"a,$e de Meor"a
Espacio de memoria que se necesita para almacenar un dato, y puede cambiar su valor
durante la ejecucin del programa o aplicacin.
- Espacio de memoria RAM
- Guardar un dato
- Nombre nico
x
Nombre variable
/
Enun!"ado
A$gor"to
1Crear
D"se2ar3
seudo !#d"go
Prograa

Entender el problema
Qu datos tengo? D"agraa de 4$ujo
Qu necesito?
Procesar A$gor"to
Entregar $a so$u!"#n Infora!"#n
Pseudo!#d"go

Datos Procesos nformacin

NUMERCAS
CONSTANTES
ALFANUMERCAS
DATOS
VARABLES
NUMRCA
VARABLES CARACTER
ALFANUMRCA
STRNG
Eje&o de def"n"!"#n de 0ar"a,$e
Valor = 5
Definicin
Otros ejemplos
Total = Valor + 2
Valor = Valor + 1 (Contador)
1.5 TIPO DE 0ARIA(LES
0ar"a,$e Nu6r"!as+ Guardan nmeros, ejemplo: 0,1,2 ........, 9
5
Datos
Bajo smbolos inventados se puede
simular varios lenguajes.
Herramienta utilizada en el diseo
del programa para describir la
solucin del problema en forma de
algoritmos, dirigido a la mquina,
haciendo uso del lenguaje natural
lgico, sometido a ciertas reglas.
Nombre
de la
variable
Ej. Valor = 5
i ) V. Numricas reales
ii) V. Numricas enteras
0ar"a,$es a$fanu6r"!as:
Contienen letras y nmeros: "A,B....Z,a,b ..z,0,1,2 .........., 9
La condicin es que estn encerrados entre comillas.
Ejm. NOMBRE = "Juan
Jose = "Jose
Nomb. de Representa
variable al dato
Las variables alfanumricas son las mismas que las variables tipo cadena, string, character,
cadena.
0ar"a,$es $#g"!as:
.T., .F.
.V., .F.
Los puntos entre T, V, F sirven para identificar un valor lgico.
La lgica es una herramienta que usa el computador.
SISTEMA (INARIO
0 .F. 0FF
1 .T. ON


1.7 OPERADORES
OPERADORES ARITMETICOS
( ) Parntesis
^ Circunflejo (Potencia)
** Potencia
* Multiplicar
/ Slash (Dividir)
+, - Suma, Resta
= gualar
div divisin entera
mod resto de una divisin
OPERADORES RELACIONALES
A > B Mayor que
>= Mayor o igual
< Menor que
<= Menor o igual que
< > Diferente a {! =, #}
= gual a
7
OPERADORES LGICOS
.AND. ncluyente
.OR. Excluyente
.NOT. Negacin
Hallando en el ejemplo el valor lgico, dados A=5, B=10, C=-1, D=0
AND
V V
V F
F V
F F
V
F
F
F
8
Seudo !#d"go
Hallar el promedio de edades de 2 personas:
Juan = X Jose = Y
Algoritmo
Seudo !#d"go
Juan = 0
Jose = 0
Leer (Jose)
Leer (Juan)
Prom = (Jose + Juan)/ 2
Escribir ( PROM )
Otra fora
EJose = 0
EJuan = 0
Escribir ('ngrese edad de Jos:')
Leer (EJose)
Escribir ('ngrese edad de Juan:')
Leer ( EJuan)
/*Prom: contiene el resultado*/
Prom = (EJose + EJuan)/2
Escribir ( 'El promedio de ambas edades:', Prom)
9 ERRAMIENTAS PARA RESOL0ER PRO(LEMAS
1.8 DIAGRAMA DE 4L*:O
; Edad de :uan
- Edad de :os6
; ' - Edad Proed"o
.
nicio o fin de un proceso
INICIO
4IN
Proceso (operaciones)
- Asignacin
- Operacin Aritmtica
Entrada o salida general de datos
Condicional
<

Lneas de unin
ndican la direccin que
siguen los datos
mpresora
Teclado
Sub-programas
Conector de
pgina
=
Problema:
Dados dos nmeros elaborar un seudo cdigo(algoritmo) para hallar la suma, y mostrar la
suma de dichos nmeros.
A Recibidor 1er N
B Recibidor 2 N
C A+B

Seudo !#d"go
ALGORTMO Suma
VARABLES: A,B,C, enteros
nicio
A 0
B 0
C 0
Escribir 'ngresar un valor'
Leer (A)
Escribir 'ngresa otro valor'
Leer (B)
C A + B
Escribir( 'La suma es:', C)
Fin-inicio
Un algoritmo consta de 2 partes
1. Cabecera de programa
2. Bloque algoritmo
nstrucciones Bsicas de un Algoritmo
Asignacin RECEPTOR EMISOR
mpresin: Escribir <mensajes>, <variables>
Ej.
Escribir ('Hola')
/* X: Contenido de una Variable */
Escribir ('Hola', X)
Escribir ('Hola', X, 'que tal')
Entrada de Datos
INICIO
A <== 0
B <== 0
C <== 0
Leer
A
Leer
B
C <== A+B
'La suma
es ', C
FIN
>
Leer <variable>
Ej.
Leer (A)
Leer (A,B)
1.< T?CNICAS DE PROGRAMACIN 1E0OL*CION DE LA PROGRAMACIN3
- Programacin Lineal
-
- Programacin modular
-
- Programacin estructurada
-
- Programacin orientada a objetos
PROGRAMACIN ORIENTADA A O(:ETOS 1POO3
POO es una tcnica o estilo de programacin que utiliza objetos como bloque esencial de
construccin.
Los objetos son tipos abstractos de datos (TAD)
Ej. En C (Leng. Prog.) un TAD es typedef, struct
C++ define y utiliza TAD
Un objeto es una coleccin de datos, junto con las funciones asociadas, utilizadas para
operar sobre esos datos.
La potencia de los objetos radica en las propiedades que soportan;
- Herencia
- encapsulacin
- polimorfismo
- clases
- mtodos
- mensajes
Ejemplo de trabajo con POO
Objeto: Ventana en la pantalla
Operaciones:
- Mover objeto ventana a la derecha
- Mover objeto ventana a la izquierda
- Mover objeto ventana hacia arriba
- Mover objeto ventana hacia abajo.
1@
.. CAC''ADe%C''
El Lenguaje C, naci en los laboratorios Bell. Este lenguaje est inspirado en el lenguaje B,
escrito por Ken Tompson en 1970.
En 1972 Dennis Ritche modifica este lenguaje creando de esta manera el lenguaje C.
El C (plus plus) (C + +) es un lenguaje de propsito general. Basado en el lenguaje C, fue
desarrollado por Bjarne Stroustrup en 1985 en los mismos laboratorios Bell.
..1 Cara!terBst"!as
1. Es de propsito general, utilizado para una gran variedad de tareas de todo tipo.
Sistemas cientficos, financieros, programas de educacin, Gestin Empresarial, de
pasatiempo, etc.

2. Es de alto y bajo nivel con ms caractersticas de lenguaje de alto nivel ya que es un
lenguaje civilizado, es decir cuyas instrucciones, son escritas en palabras similares a los
lenguajes humanos lo que le hace ms fcil leer y entender por el programador.
A$to
goto
print
label
lenguaje C (intrprete)

(ajo
MOV
RCL
NOP

3. Es estructurado.
4. Se debe seguir un orden y cumplir ciertas reglas para el diseo de programas.
5. Permite el diseo modular aumentando la productividad de este lenguaje.
Nota:
Es Estructurado: porque por ejemplo primero se definen las variables y luego son
utilizadas.
Adems cuando hay procedimientos que se repiten son incluidos en ellos.
Es no estructurado: cuando conforme se va necesitando se va definiendo las
variables.
Adems cuando en la ejecucin va y ordena a cualquier lado.
6. Posteriormente orientado a objetos.
IDENTI4ICADORES
Los identificadores son una secuencia de caracteres que pueden tener cualquier longitud.
Pero slo los primeros 32 caracteres sern significativos. Se utilizan para definir: nombres
de constantes, variables, funciones y etiquetas del programa. Los caracteres pueden ser
maysculas o minsculas y se consideran como caracteres diferentes.
Ej: A y a son variables diferentes A a (Caracteres s )
Para def"n"r un "dent"f"!ador se de,e segu"r $as s"gu"entes reg$as+
a) Debe comenzar con una letra (de la A.......Z) o de (a,....., z) exceptuando el caracter ,
adems se puede utilizar el carcter de subrayado.
Ej. _23 (dentificador), nom _ape
b) No puede ser palabras reservadas
Ej. goto
11
c) No debe contener espacios en blanco ni caracteres especiales como por ejemplo: +, - ,
&, *, /, ni cdigos ASC, ni vocales acentuadas.
Ej.
Nom
Nom / ape ;
Nota 1
1ra. Nota ;
nom_ape
nom ape ;
nomb ape ;
break ;
PALA(RAS CLA0E 1PALA(RAS RESER0ADAS3
Son identificadores predefinidos que tienen un significado especial para el lenguaje C. Un
identificador definido por el usuario no puede tener el mismo nombre que una palabra clave.
Ejms. auto
break
do
char
long
union, etc.
white (Todos los colores)
CONSTANTES
Una constante es un identificador cuyo valor se mantendr inalterable desde el inicio hasta
el final del programa.
(1) # define (identificador) (valor)
(2) const tipo (identificador) = (Valor)
0ARIA(LE
Es un identificador cuyo valor puede variar o cambiar durante la ejecucin de un programa.
Las variables almacenan valores de un determinado tipo de dato.
TIPOS DE DATOS PREDE4INIDOS
a3 !)ar 1!ara!ter C 1 ,Dte3+ Se a$a!ena en un ,Dte.
Es un tipo que puede almacenar un solo carcter, correspondiente al cdigo ASC.
Tambin puede almacenar un nmero entero en el rango: - 128 a 127. De forma similar
con el modificador unsigned (sin signo) puede almacenar valores en el rango de 0 a
255
Ej.
char op;
char letra;
1.
op = 'A';
letra = 164; letra = ;
Ej.
char op, op2;
op = 65 ; ~ op = 'A' ;
op = 65 + ; ~ op = 'B' ;
= 65 + 100 =
op = 165 ~ op = '' ;
op = 'A' + 1 ; ~ op = 'B'
op = 165 ; ~ op = '' ;
,3 s)ort 1entero C . ,Dtes3E "nt 1. C 5 ,Dtes de eor"a3
s)ort+ Almacena la parte entera de un nmero en el rango de 32768 y 32767 de forma
similar con el modificador unsigned puede almacenar valores en el rango : 0 a 65535
Ejs: unsigned int num3, int num1, num2 ;
num1 = 10 ;
num1 = 10.9 ; //no considera como error pero solo asume 10
num1 = 100 + 500 ;
num2 = 400000 ;// (error) (sobrepasa desbordamiento)
num3 = 400000 ; // (error) (sobrepasa desbordamiento)
"nt+ Almacena la parte entera de un nmero en el rango de 2147483648 y
+2147483647

!3 $ong 1entero $argo o!u&a 5 ,Dtes de eor"a3
Almacena la parte entera de un nmero en el rango : -2147483648 y 2147483647. De
forma similar el tipo unsigned puede almacenar valores en el rango : y 4294967295
uns"gned $ong areaF&a"s E
$ong Te$ef E
Te$ef G <7.77@E
d3 f$oat 1rea$es en s"&$e &re!"s"#n C 5 ,Dtes3 1o!u&a 5 ,Dtes de eor"a3
Almacena al conjunto de los nmeros reales, es decir aquellos que poseen parte decimal
o fraccionario. Su rango de funcionamiento va desde:
-3.4 x 10
38
hasta 3.4 x 10
38
(7 dgitos)
No eH"ste e$ od"f"!ador uns"gned &ara f$oat.
Ejs:
f$oat nota E
f$oat &" E
&" G /.1518 E
nota G 1@.7 E
e3 dou,$e 1rea$es en do,$e &re!"s"#n C = ,Dtes3
Al igual que el tipo f$oat almacena al conjunto de los nmeros reales, pero su rango de
almacenamiento es mucho mayor.
Almacena valores en el rango de :
Rango : -1.7 x 10
308
hasta 1.7 x 10
308
(15 dgitos)
Ej:
1/
double monto = ;
double cuenta ;
$ong dou,$e 1= ,Dtes3
Almacena en el rango de: 3.4 x 10
-4932
hasta 2.1 x 10
4932
(19 dgitos)
E$ t"&o de dato ,oo$
Guarda los valores "verdadero (true) o "falso (false), permitiendo declarar variables lgicas.
Si en el compilador de C++ no est disponible el tipo bool, se puede utilizar el tipo de dato
int para representar el tipo de dato bool. C++ utiliza el valor entero 0 para representar falso
y cualquier valor entero distinto de cero (normalmente 1) para representar verdadero. De
esta forma, se pueden utilizar enteros para escribir expresiones lgicas.
Ej.
bool b1, b2=false, b3=true;
int i1=b3, i4=10;
cout<< b2: "<<b2<<end1; // muestra el valor b2 que es 0
SENTENCIA
Son las instrucciones que van a ser ejecutadas y que controlan el flujo de la ejecucin de un
programa, toda sentencia termina con un punto y coma ( ; ) el cual significa "fin de
instruccin.
Puede existir 2 mas sentencias en una misma lnea.
Tipos de efectos de sentencia:
Sentencia de Declaracin int num ;
Sentencia de asignacin num = 20 ;
Sentencia de funcion printf ("hola) ;
Sentencia de control if (num > 50)
Tipos de sentencias:
Sentencia Simple : Que es simplemente una sola instruccin.
Sentencia Compuesta : bloque de instrucciones ; que es el conjunto de 2 o
mas sentencias entre llaves ({ } ).
OPERADORES :
Son smbolos que indican como deben ser manipulados los datos ;
Se clasifican en :
a) Ar"t6t"!os :
( ) parntesis
/ slash (divisin) "divisin entera
* asterisco (multiplicacin)
% Residuo
+ Suma
- Resta
Nota :
- En la divisin si ambos operandos son enteros el resultado ser un N entero,
de lo contrario el resultado ser real (flotante).
- En el residuo, para obtener el residuo (modulo) de
una divisin entera los operandos tienen que ser enteros.
15
Ej.:
float C ;
C = 5/2 C = 2
C = 5./2 ; C = 2.5
C = 8*2%4 resto C =
C = 8+2/2 ; C = 9
C = (8+2)/2 C = 5
b) O&eradores L#g"!os :
& & y Lgico
O Lgico
! no Lgico
c) Re$a!"ona$es :
> Mayor
< Menor
>= mayor gual
! = Diferente
= = gual
Ej. int a ;
a = (10 > 5) ; // a = 1
a = (10 > 15) ; // a =
a = (10 = = 10) // a = 1
a = (5 >= 4+1) // a = 1
int b, a = 1 ;
b = ( a > 10 a < 20 ) ; // b = 1
b = (a + 20 < = 30 && a ! = 10) ; // b =
b = !1 ; // b = .. b es igual a no "1 (falso)
d) O&eradores de As"gna!"#n :
= Asignacin simple
+ + incremento
- - Decremento
*= Multiplicacin mas asignacin
/= Divisin mas asignacin
%= Mdulo mas asignacin
+= suma mas Asignacin
-= Resta mas asignacin
int a = , b = 1 , c = ;
a + + ; // a = a + 1 ; a = 1
b + = a ; // b = b + a ; b = 11

a = 1 ;
c = + + a + b ; //a = 2 ; c = 13 ;
a = ;
c = (a + +) + b ; // a = 1, c = 12 ; a = 2
17
Estru!tura gen6r"!a de un &rograa en C'' A De% C''
# include <archivo externo>

# define identificador valor

using namespace std;



declaraciones globales ;

declaraciones de funciones;
int main(int argc, char *argv[] ) // int main() //void main ( )

{
declaraciones locales ;



instrucciones ;



}
funcion _1 ( )
{
declaraciones locales;



instrucciones ;



}

funcion_N( )
{
declaraciones locales ;




instrucciones



18

}

I "n!$ude Jar!)"%o eHternoK
Es utilizado para incorporar (incluir) archivos externos de funciones (libreras de cabeceras)
a un programa escrito en C.
Ejs.
# include "stdio. h ~ # include <stdio.h>
# include "conio.h ~ # include <conio.h>
# include "iostream.h ~ # include <iostream.h>
I def"ne "dent"f"!ador %a$or
Es utilizado para definir una constante
# define P 3.14
# define notamax 20
De!$ara!"ones g$o,a$es
Son identificadores que podrn ser utilizadas en cualquier funcin del programa.
Las constantes son variables globales.
De!$ara!"ones Lo!a$es
Son identificadores que podrn ser utilizados solo en la funcin en que fueron declarados.
Senten!"as o Instru!!"ones
Son las instrucciones que controlaran el flujo de la ejecucin de un programa.
"nt a"n 1 3
Es la 1
ra
funcin que se ejecuta en todo programa en C++ / DevC++, siempre debe de existir
y ser nica, ya que define el inicio y el final de el programa.
fun!"#nF1 1 3 .....................................fun!"on FN 1 3
Son las funciones, o mdulos que pueden existir en todo programa, en la mayora de los
casos son necesarios.
De!$ara!"ones %ar"a,$es
Declarar una variable implica :
a) Definir su tipo de dato : char, int, short,
b) Asignarle un nombre o identificador
c) Opcionalmente asignarle un valor inicial
d) Adems cabe resaltar que toda variable ocupa una posicin fsica de memoria.
Ej:
int nota ;
int edad, promedio;
int suma = ;
int suma = , nota = ;
suma = nota =
float area ;
Es&e!"f"!adores de forato
1<
Son smbolos especiales que determinaran como deben de capturarse o visualizarse las
variables. Siempre empiezan con el smbolo % y estn seguido de uno o ms caracteres
permitidos.
Para manejar los enteros, dobles, largos necesitamos de espcificadores como por ejemplo:
Es&e!"f"!ador T"&o
%d int
%i int
%ld long
%f float
%lf double
%c caracter (char)
%s cadena (char*)
%p direcciones de memoria
%u enteros sin signos (unsigned)
4un!"#n &r"ntf 1std"o.)3
Escribe con formato una serie de caracteres o un valor en la salida estndar (pantalla).
Devuelve el N de caracteres escritos. Se encuentra en la librera stdio.h.
Nota. En C escribir todo en minscula, excepto por Ej: variables y etc.
4un!"#n !&r"ntf
Similar a printf se utiliza para visualizar atributos de video (ej: subrayado, negrito, colores),
se encuentra en la librera conio.h.
A$ "&r""r o ostrar en $a &anta$$a L D $eer +
En C En C ' '
printf ( ) cout<<........;
scanf ( ) cin ___;
gets() gets(); cin.getline( );
Entradas D sa$"das
En c++ la entrada y salida se lee y escribe en flujos (streams). Cuando "ostrea.) se
incluye en un programa , diferentes flujos estndar son definidos automticamente . El flujo
!"n se utiliza para la entrada , que normalmente se lee de teclado. El flujo cout se utiliza
para salida y, normalmente , se enva a la pantalla del usuario
Sa$"da 1!out3
El operador de insercin , <<, inserta datos en el flujo !out que los visualiza en la pantalla
del equipo. Es posible utilizar una serie de operadores, <<, en cascada.
cout<<"esto es una cadena;: // visualiza : esto es una cadena
cout<<500<<600<<700; // visualiza : 500 600 700
cout<<500<<" , <<600; // visualize : 500 , 600
C++ utiliza secuencias de escape para visualizar caracteres que no estn representados por
smbolos tradicionales. Entre las mas usadas estn : linea.nueva linea (\ n) , tabulacion (\ t) y
alarma (\ a). Una lista de las secuencias de escape se muestra en la tabla 1.1.

Ej
cout<<"\n Error \n Pulsar una tecla para continuar \n ;
La instruccin anterior salta de la lnea , escribe en otra lnea error , salta de lnea escribe
pulsar una tecla para continuar y saltar de lnea. Es decir produce la siguiente salida :
1=
Error
Pulsar una tecla para continuar
Ta,$a 1.1. Cara!teres se!uen!"as de es!a&e
Se!uen!"a de es!a&e S"gn"f"!ado
\ a Alarma
\ b Retroceso de espacio
\ f Avance de pagina
\ n Retorno de carro y avance de linea
\ r Retorno de carro
\ t Tabulacion
\ v Tabulacion vertical
\ \ Barra inclinada
\ ? Signo de interrogacin
\ " Dobles comillas
\ 000 Numero octal
\xhh Numero hexadecimal
\0 cero , nulo (ASC 0)
Entrada 1 !"n 3
El archivo de cabecera iostream.h de la biblioteca C++ proporciona un flujo de entrada
estandar cin y un operador de extraccin , , para extraer valores del flujo y almacenarlos
en variables . Si no se redirige explcitamente cin , la entrada procede del teclado.
int numero; double real ;
cinnumero; cinreal ;
Las ordenes cin leen dos datos del teclado y los almacenan en las variables nmero y real.
Ejemplo : Programa que lee las iniciales del nombre y primer apellido y las escribe en
pantalla seguidas de un punto.
#include <cstdlib>
#include <iostream>
using namespace std;
int main( )
{
char Nombre , Apellido ;
cout<<" ntroduzca la inicial de su nombre y primer apellido : " ;
cinNombreApellido;
cout<<"Hola, <<Nombre<< ".<<Apellido<<.\ n;
system ( " PAUSE);
return EXT_SUCCESS;
}

Es&a!"os de no,res 1NAMESPACES3
1>
Un espacio de nombres es un mecanismo para agrupar lgicamente un conjunto de
identificadores (nombres de tipos , funciones , etc). Existe un espacio de nombres global y
sobre l se define el resto de los espacios de nombres. A un identificador que se encuentra
en un espacio de nombres se puede acceder de distintas formas.
Ej: Espacio de nombre estandar.
En el programa estandar , la clasula using carga espacio de nombres estandar (std) en el
espacio de nombres actual, que es global permitiendo as el ejemplo de identificadores
como endl (declarado en <iostream> sin necesidad de cualificar con el operador de
alcance).
// Programa
#include <iostream>
...........
using namespace std ;
int main( )
{
cout<<" ! Hola amigos ! <<endl;
}
Un espacio de nombres namespace es una regin declarativa con nombre opcional . El
nombre de un espacio de nombres se puede utilizar para acceder a entidades declaradas
en ese espacio de nombres ; es decir los miembros del espacio de nombres .
En esencia , un conjunto de variables , de funciones , de clases y de subespacios de
nombres, miembros que siguen unas reglas de visibilidad . El espacio de nombres es una
caracterstica de C++ introducida en las ultimas versiones , diseada para simplificar la
escritura de programas.
Def"n"!"#n de un es&a!"o de no,res
naes&a!e "dent"f"!adorM!uer&oFde$Fes&a!"oFdeFno,res.N
Cuerpo_del_espacio_de_nombres
Seccion_de_declaraciones // miembros del espacio de nombre
Para acceder al espacio de nombres se debe invocar al nombre del mismo cuando se refiera
a ellos Existen dos procedimientos para hacer esto.
Metodo 1 : Proceder a cada nombre del elemento en el nombre del espacio y el operador de
resolucin del mbito de alcance (::).
Metodo 2 : Utilizar la directiva using , lo que permite poder utilizar el espacio de nombres a
partir de donde se declare.
Ej. Espacio de nombres geo
#include<iostream>
namespace geo
M
const double P = 3.141592;
double longcircun ( double radio)
{
return 2*P*radio;
.@
}
N
using namespace std ;
using namespace geo;
int main (int argc, char *argv[] )
M
cout<<" ! Hola amigos ! <<endl;
cout<<longcircun(16); // no funciona al omitir using namespace geo ;
cout<<geo::longcircun(20);
N
Ejer!"!"os se!uen!"a$es
1. Escribir un programa que visualice la letra B con asteriscos
*****
* *
* *
* *
******
* *
* *
* *
*****
#include <cstdlib>
#include <iostream>
using namespace std ;
int main ( )
{
cout<<"******* \ n ;
cout<<"* * \ n ;
cout<<"* * \ n ;
cout<<"* * \ n ;
cout<<"******* \ n ;
cout<<"* * \ n ;
cout<<"* * \ n ;
cout<<"* * \ n ;
cout<<"******* \ n
system ( " PAUSE);
return EXT_ SUCCESS;
}
O&eradores D eH&res"ones
En c++ los operadores fundamentales son: aritmticos, lgicos y relacionales; de
manipulacin de bits; condicionales y especiales. Adems, se analizan las conversiones de
tipos de datos y las reglas que sigue el compilador cuando concurran en una misma
expresin diferentes tipos de operadores. Estas reglas se conocen como reglas de prioridad
y asociatividad.
.1
Los programas C++ constan de datos, sentencias de programas y expresiones. Una
expresin es, una sucesin de operadores y operandos debidamente relacionados que
especifican un clculo. C++ soporta un conjunto potente de operadores unitarios, binarios y
de otros tipos.
O&erador de as"gna!"#n
El operador de asignacin es un operador cuya sintaxis es la siguiente:

variable=expresin;
donde variable es un identificador vlido de C++ declarado como variable. El operador =
asigna el valor de la expresin derecha a la variable situada a su izquierda. Este operador
es asociativo por la derecha, eso permite realizar asignaciones mltiples. As, A=B=C=D=12;
equivale a A= (B=(C= (D=12))) que asigna alas variables A,B,C y D el valor de 12. Esta
propiedad permite inicializar varias variables con una solo sentencia. Adems del operador
de asignacin =, C++ proporciona cinco operadores de asignacin adicionales dados en la
tabla 1.2.
Ejemplo
Programa que declara variables y hace uso de operadores de asignacin.
#include<cstdlib>
#include <iostream>
using namespace std;
"nt a"n1"nt arg!L !)ar Oarg%PQ3
{
int codigo, CoordX, CoordY;
float fahrenheit , valor;
codigo=3467;
valor=10 ;
valor *=3;
CoordX =525;
CoordY =725
CoordY - =10;
fahrenheit = 123.456;
system("PAUSE);
return EXT_SUCCESS;
}
Tabla 1.2 Operadores y equivalencias de asignacin C++
SB,o$o *so Des!r"&!"#n Senten!"a Senten!"a
a,re%"ada no a,re%"ada
= a=b Asigna el valor de b a a. m=n; m=n;
*= a *=b Multiplica a por b y asigna el resultado a la variable a. m *=n; m =m*n;
/= a /=b Divide a entre b y asigna el resultado a la variable a. m / =n; m=m/n;
%= a %=b Fija a al resto de a/b. m%=n; m=m%n;
+= a +=b Suma b y a y los asigna a la variable a. m+=n; m=m+n;
-= a - =b Resta b de a y asigna el resultado a la variable a. m-=n; m =m-n;
Operadores aritmticos
..
Los operadores aritmticos de C++ sirven para realizar operaciones aritmticas bsicas.
Siguen las reglas algebraicas tpicas de jerarqua o prioridad, clsica de matemticas. Estos
operadores se aprecian tambin en la tabla 1.3.
Tabla 1.3 Operadores aritmticos

Operador tipos enteros tipos reales
ejemplo

+ Suma Suma x + y
- Resta Resta b - c
* Producto Producto x * y
/ Divisin entera: Cociente Divisin en coma flotante b / 5
% Divisin entera: Resto b % 5
Los parntesis se pueden utilizar para cambiar el orden usual de evaluacin de una
expresin determinada por su prioridad y asociatividad. La prioridad de los operadores y su
asociatividad se recogen en la tabla 1.4

Tabla 1.4 Prioridad y asociatividad
Prioridad (mayor a menor) Asociatividad
+, - (unitarios) izquierda-derecha(---)
*, /, % izquierda-derecha(--)
+, - izquierda-derecha(--)
Eje&$o Evaluacin de expresiones
a) Cul es el resultado de evaluacin de la expresin: 5 * (10 2 * 4 + 2 ) 2?
5 * (10 2 * 4 + 2) -2
5 * (10 8 + 2) -2
5 * 4 -2
20- 2
18
b) Cul es el resultado de la expresin: 7 * 5 6 % 4 * 4 + 9?
7*5-6%4*4+9
35-6%4*4+9
35-2*4+9
35-8+9
27+9
36
c) Cul es el resultado de la siguiente expresin 15 * 14 3 * 7?
15*14-3*7
210-3*7
210-21
189
d) Cul es el resultado de la siguiente expresin 3 + 4 *(8 *(4-(9+3)/6))?
./
3+4*(8*(4-(9+2)/6))
3+4*(8*(4-11/6))
3+4*(8*(4-1))
3+4*(8*3)
3+4*24
3+96
99
EJEMPLO
Programa que lee el radio , calcula y visualiza la longitud de la circunferencia de ese radio ,
y el rea del circulo del mismo radio.
#include<cstdlib>
#include <iostream>
#define pi 3.141592
using namespace std;
int main(int argc, char *argv[])
{
float radio, longitud, area;
cout<<radio de una circunferencia=;
cin>>radio;
longitud= 2 * pi* radio;
area= pi * radio * radio;
cout<<radio=<<radio<<endl;
cout<<longitud=<<longitud<<endl;
cout<< "area = "<< area <<endl;
system("PAUSE);
return EXT_ SUCCESS;
}
EJEMPLO
Desglosar cierta cantidad de segundos introducida por teclado en su equivalente en
semanas, da, horas, minutos y segundos.
El programa lee el numero de segundos y realiza las conversiones, teniendo en cuenta que
una semana tiene 7 das , un da tiene 24 horas , una hora 60 minutos, y un minuto 60
segundos.
#include<cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int semanas ,dias, horas ,minutos ,segundos ,acu;
cout<<introduzca segundos;
cin>>acu;
segundos = acu%60;
acu = acu / 60;
minutos= acu%60;
.5
acu = acu / 60;
horas= acu%24;
acu = acu / 24;
dias= acu%7;
semanas = acu / 7;
cout<< segundos en semanas dias horas minutos y segundos<<endl;
cout<<numero de semanas<<semanas<<endl;
cout<<numero de dias<<dias<<endl;
cout<<numero de horas<<horas<<endl;
cout<<numero de minutos<<minutos<<endl;
cout<<numero de segundos<<segundos<<endl;
system("PAUSE);
return EXT_SUCCESS;
}
En resultado de ejecucin dar lo siguiente:
ntroduzca segundos 4567456
Segundos en semanas dias horas minutos y segundos
Numero de semanas 7
Numero de dias 3
Numero de horas 20
Numero de minutos 44
Numero de segundos 16
Presione una tecla para continuar. . .
O&eradores de "n!reenta!"#n D de!reenta!"#n
De las caractersticas que incorpora C++ una de las mas tiles son los operadores de
incremento ++ y decremento--. Estos operadores unitarios suman o restan 1
respectivamente a la variable y tiene la propiedad de que puedan utilizarse como sufijo o
prefijo. El resultado de la expresin puede ser distinto, dependiendo de contexto. En la tabla
1.5 se recogen los operadores de incremento y decremento.
Tabla 1.5 operadores de incremento(++)y decremento(- -)

ncrementacin Decrementacin
++n, n++ --n, n--
n += 1 n -= 1
n= n+1 n= n 1
si los operadores ++ y - - estn de prefijo, la operacin de incremento se efecta antes que
la operacin de asignacin; si los operadores ++ y - - estn de sufijos, la asignacin se
efecta en primer lugar y la incrementacin o decrementacin a continuacin.
Ejemplo diferencias entre operadores de preincrementacion y postincrementacion.
#include<cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
.7
int m= 10, n;
n=++m; // primero se incrementa m y luego se asigna a n
cout<<m=<<m<<n=<<n<<endl;
n=m++; // primero se asigna a n y luego se incrementa m
cout<<m=<<m<<n=<<n<<endl;
cout<<m=<<m++<< endl;
cout<<m=<<++m<< endl;
n=5;
m=++n * - -n; // ++n pone n a 6, luego - - n pone n a 5, luego m =25
cout<<n=<<n<<m=<<m<<endl;
system("PAUSE);
return EXT_SUCCESS;
}
Resultado de la ejecucion
m =11 n=11
m =12 n=11
m =12
m =14
n =5 m =25

O&eradores re$a!"ona$es
C++ soporta el tipo ,oo$ que tiene dos literales false y true. Una expresin booleana es, por
consiguiente, una secuencia de operandos y operadores que se combinan para producir uno
de los valores true y false. C++ utiliza el tipo int para representar los valores verdadero (true)
y falso (false). El valor entero 0 representa a falso y cualquier valor distinto de cero a
verdadero. Operadores tales como >= y == que comprueban una relacin entre dos
operandos se llaman operadores relacionales y se utilizan en expresiones de la forma:
expresin
1
operador_relacional expresin
2
expresin
1
y expresin
2
expresiones compatibles C++
operador_relacional un operador de la tabla 1.6
La tabla los operadores relacionales que se pueden aplicar a operandos de cualquier tipo de
dato estandar:
char, int, float, double,etc
Tabla de 1.6 operadores relacionados de C
Operador significado forma ejemplo
== igual a a== b 'A' == C' FALSO
!= no igual a a != b 2 != 4 VERDADERO
> mayor que a > b 5 > 6 FALSO
< menor que a < b 'a' < 'c' VERDADERO
>= mayor o igual que a >= b 'B' >='b' FALSO
<= menor o igual que a <= b 2 <= 1 FALSO
.8
OPERADORES LOGICOS
Los operadores lgicos se utilizan con expresiones para devolver un valor verdadero
(cualquier entero distinto de cero) o un valor falso(0). Los operadores lgicos de C son:
not(!), and (&&) y or(ll). El operador unitario logico ! (not, no) produce falso (cero) si su
operando es verdadero(distinto de cero) y viceversa. El operador binario logico &&(and , y)
produce verdadero solo si ambos operandos son verdaderos(no cero); si cualquiera de los
operandos es falso produce falso. El operador binario logico ll (or, o) produce verdadero si
cualquiera de los operandos es verdadero(distinto de cero ) y produce falso solo si ambos
operandos son falsos.
La precedencia de los operadores es: los operadores matemticos tienen precedencia
sobre los operadores relacionales, y los operadores relacionales tienen precedencia sobre
los operadores lgicos.
El operador ! tiene prioridad mas alta que &&, que a su vez tiene mayor prioridad que ll . La
asociatividad es de izquierda a derecha.
E%a$ua!"#n en !orto!"r!u"to. En C++ los operandos de la izquierda de && y ll se evalun
siempre en primer lugar ; si el valor del operando de la izquierda determina de forma
inequvoca el valor de la expresin, el operando derecho no se evala. Esto significa que si
el operando de la izquierda de && es falso o el de || es verdadero, el operando de la
derecha no se evala. Esta propiedad se denomina evaluacin de corto circuito.
Las sentencias de asignacin se pueden escribir de modo que se pueda dar un valor de tipo
bool o una variable bool.
Ejemplo: Sentencias de asignacin a los tipos de variables bool.
int n;
float x;
char car;
bool r, esletra, espositiva;
r=(n>-100) && (n<100); //true si n estan entre -110 y 100
esletra=(('A'<=car) && (car<='Z'))
(('a'<=car) && (car<='Z'));
// si car es una letra la variable es la letra true, y toma false en otro caso
//espositivo = x >= 0;
O&eradores de an"&u$a!"#n de ,"ts
Los operadores de manipulacin o tratamiento de bits (bitwise) ejecutan operaciones lgicas
sobre cada uno de los bits de los operandos. Estas operaciones son comparables en
eficiencia y en velocidad a sus equivalentes en lenguaje ensamblador. Cada operador de
manipulacin de bits realiza una operacin lgica bit a bit sobre datos internos. Los
operadores de manipulacin de bits se aplican solo a variables y constantes char, int y long,
y no a datos en coma flotante.
La tabla 1.7 recoge los operadores lgicos bit a bit.
.<
Tabla 1.7 Operadores lgicos bit a bit
Operador Operacion
& y (and) lgica bit a bit.
| o (or) lgica (inclusiva) bit a bit
^ o (xor) lgica (exclusiva) bit a bit (or exclusive,xor).
~ Complemento a uno (inversin de todos los bits)
<< Desplazamiento de bits a izquierda
>> Desplazamiento de bits a derecha
O&eradores de des&$aRa"ento de ,"ts 1KKLJJ3
Efecta un desplazamiento ala derecha (>>) o a la izquierda (<<) de numero_de_bits
posiciones de los bits del operando, siendo numero_ de _ bits un numero entero. Los
formatos de los operadores de desplazamiento son:
1. valor << numero_de_bits; 2. valor >> numero_de_bits;
Eje&$o senten!"a de an"&u$a!"#n de ,"ts
0ar"a,$e 0. entero 0 ,"nar"o
X 9 00001001 1001
Y 10 00001010 1010
X & Y 8 00001000 1001 & 1010 and bit a bit
X | Y 11 00001011 1001 | 1010 or bit a bit
X Y 3 00000011 1001 1010 xor bit a bit
X << 2 36 01000100 10001@@ aparecen dos ceros a la derecha
Y >> 2 2 00000010 10
E$ s"gu"ente &rograa !o&rue,a $os %a$ores anter"ores de an"&u$a!"#n de ,"ts
#include<cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char*argv[])
{ int x=9, y=10, x_y_y, x_or_y, x_Xor_y;
x_y_y = x & y;
x_or_y = x | y;
x_Xor_y = x y;
cout << "x= << x << " \n;
cout << "y= << y << " \n;
cout << "x_y_y = << x_y_y << " \n;
cout << "x_or_y = << x_or_y << " \n;
cout << "x_Xor_y = << x_Xor_y << " \n;
x=x<<2;
y=y>>2;
cout << "x<<2= << x << " \n;
cout << "y>>2= << y << " \n;
system ("PAUSE);
return EXT_SUCCESS;
.=
}
El resultado de ejecucin del programa anterior es :
x=9
y=10
x_y_y=8
x_or_y=11
x_Xor_y=3
x << 2=36
x >>2=2
O&eradores de as"gna!"#n ad"!"ona$es
Los operadores de asignacin abreviados estan disponibles tambien para operadores de
manipulacin de bits estos operadores se muestran en la tabla 1.8.
Tabla 1.8. Operadores de asignacin adicionales
Smbolo Uso Descripcin
<<= a << =b Desplaza a a la izquierda b bits y asigna el resultado a a.
>>= a >> =b Desplaza a a la derecha b bits y asigna el resultado a a
&= a &= b Asigna a a el valor a & b.
= a = b Establece a a a=b.
||= a ||= b Establece a a a | b.
O&eradores de d"re!!"ones
Son operadores que permiten manipular las direcciones de los objetos. Se recogen en la
tabla 1.9
Tabla 1.9 operadores de direcciones
O&erador A!!"#n
* Lee o modifica el valor apuntado por la expresin. Se corresponde con un puntero
y el resultado es de tipo apuntado.
& Devuelve un puntero al objeto utilizado como operando, que debe ser un lvalue
(variable dotada de una direccin de memoria). El resultado es un puntero de tipo
idntico al del operando.
. Permite acceder a un miembro de un objeto agregado (unin, estructura).
-> Accede a un miembro de un objeto agregado (unin, estructura) apuntado por el
operando de la izquierda.
O&erador !ond"!"ona$ S
El operador condicional ?, es un operando ternario que devuelve un resultado cuyo valor
depende de la condicin comprobada. El formato del operador condicional es:
expresion_L ? expresion_v: expresion_f;
Se evala la expresin lgica expresin_L y su valor determina cual es la expresin a
ejecutar; si la condicin es verdadera se ejecutara expresin_v y si es falsa se ejecutara la
expresin_f. La presencia de
.>
? es menor que la de cualquier otro operando tratado hasta ese momento. Su asociatividad
es a derecha.
Ejemplo Uso del operador condicional ?.
#include<cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int x = 10, y = 12, mayor, menor;
bool z;
z= x >= y ? true : false ; // z toma el valor de false.
mayor= x >= y? x : y; // calcula y almacena el mayor
menor= x >= y? y : x ; // calcula y almacena el mayor
cout<< "x=<< x << \n;
cout<< "y=<< y << \n;
cout<< "el mayor es = "<< mayor << \n;
cout<< "el menor es =<< menor << \n;
system ("PAUSE);
return EXT_SUCCESS;
}
RESULTADO DE EJECUCON
x=10
y=12
el mayor es=12
el menor es = 10
O&erador !oa
El operador coma permite combinar dos o mas expresiones separadas por comas en una
sola lnea. Se evalua primero la expresin de la izquierda y luego las restantes expresiones
de izquierda a derecha. La expresin mas a la derecha determina el resultado global de la
expresin. El uso del operador coma es:
expresion1, expresion2, expresion3....expresin
Cada expresin se evala comenzando desde la izquierda y continuando hacia la derecha
Ejemplo Uso del operador condicional , .
#include<cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
nt i, j, r, k;
r = j = 10, i = j, k=(i++,i+1);
cout << i= "<< << " j = << j << " r= "<< r << k= << k << \n ;
system ("PAUSE);
retun EXT_SUCCESS;
}
/@
EL RESULTADO DE EJECUCON ES:
i=11 j=10 r=10 k=12
j toma el valor de 10 , r toma el valor de j que es 10, i toma el valor de 10. Posteriormente i
toma el valor de 11 se ejecuta la expresin de i + 1 que es 12 y se asigna a k.
O&eradores es&e!"a$es 1 3L P Q D ++
C++ admite algunos operadores especiales que sirven para propositos diferentes. Cabe
destacar : ().[] y ::.
El operador () es el operador de llamada a funciones. Sirve para encerrar argumentos de
una funcion, efectuar conversiones explicitas de tipo, indicar en el seno de una declaracion
que un identificador corresponde a unaq funcion y resolver los conflictos de prioridad entre
operadores.
El operador [] sirve para designar un elemento de un array. Tambien se puede utilizar en
union con el operador delete ; en este caso , indica el tamao de arraya destruir y a su
sintaxis es: delete[tamao_array] puntero_array;
El operador :: es especifico de C++ y se denomina operador de ambito de resolucion , y
permite especificar el alcance o ambito de un objeto. Su sintaxis es:
class::miembro o bien ::miembro
E$ o&erador sizeof
C++ proporciona el operador sizeof, que toma un argumento, bien un tipo de dato o bien el
nombre de una variable (escalar, array, registro,etc), y obtiene como resultado el numero de
bytes que ocupa. El formato del operador es:
sizeof(nombre_variable)
sizeof(tipo_dato)
sizeof expresin
Ejemplo El siguiente programa escribe el tamao de los tipos de datos en el computador.
#include<cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
cout<< " el tamao de variables de esta computadora son:\n;
cout<<entero: "<<sizeof(int) << ' \n';
cout<<entero largo: "<<sizeof(long int) << '\n';
cout<< rael : "<< sizeof(float)<<'\n';
cout<<doble; "<<sizeof(double) << '\n';
cout<< long doble: "<<sizeof(long double) << '\n';
cout<< long doble:<<sizeof 20 << '\n';
system ("PAUSE);
return EXT_SUCCESS;
}

Con%ers"ones de t"&os
Las conversiones de tipos pueden ser implcitas (ejecutadas automticamente) o explicitas
(solicitadas especficamente por el programador). C++ hace muchas conversiones de tipos
/1
automticamente: convierte valores cuando se asigna un valor de un tipo a una variable de
otro tipo; convierte valores cuando se combinan tipos mixtos en expresiones; convierte
valores cuando se pasan argumentos a funciones.
Con%ers"#n "&$B!"ta. Los tipos fundamentales (bsicos) pueden ser mezclados libremente
en asignaciones y expresiones. Las conversiones se ejecutan automticamente: los
operandos de tipo mas bajo se convierten a los de tipo mas alto de acuerdo con las
siguientes reglas: si cualquier operando es de tipo char, short o enumerado se convierte en
tipo int ; si los operandos tienen diferentes tipos, la siguiente lista determina a que operacin
convertir. Esta operacin se llama promocin integral.
nt, unsigned int, long, unsigned long, float, double
El tipo que viene primero , en esta lista , se convierte en el que viene segundo, etc.
Conversiones explicitas. C++ fuerza la conversin explicitas de tipos mediante el operador
de molde (cast). El operador molde tiene el formato (tiponombre) valor. Convierte valor a
tiponombre.
Por ejemplo dada la declaracion : float x;
X= 3/2 asigna a x el valor de 1,
X= (float)3/2 asigna a x el valor de 1. 5
Ejemplo: El siguiente programa muestra conversiones implcitas y explicitas de enteros y
caracteres
#include<cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char c='Z' + 1 ; //asigna a c el siguiente carcter de 'Z'
cout <<'A' << " " <<(int)'A' << endl; //carcter y numero ASC
cout <<'0' << " " <<(int)'0' << endl; //carcter y numero ASC
cout <<'a' << " " <<(int)'a' << endl; //carcter y numero ASC
cout <<'c' << " " <<(int)'c' << endl; //carcter y numero ASC
cout <<'z' +1 << " " <<(char)('Z'+1) << endl; // numero ASC y carcter
system("PAUSE);
return EXT_SUCCESS;
}
LA EJECUCON DEL PROGRAMA ANTEROR
A 65
0 48
a 97
[ 91
91 [
Pr"or"dad D aso!"at"%"dad
La prioridad o precedencia de operadores determina el orden en que se aplican los
operadores a un valor. A la hora de evaluar una expresin hay que tener en cuenta de las
siguientes reglas y la tabla 1.10.
/.
- Los operadores del grupo 1 tienen mayor prioridad que los de grupo 2 y as
sucesivamente.
- Si dos operadores se aplican el mismo operando, el operador con mayor
prioridad se aplica primero.
- Todos los operadores del mismo grupo tienen igual prioridad y asociatividad
- La asociatividad izquierda-derecha significa aplicar el operador mas a la
izquierda primero , y en la asociatividad derecha-izquierda se aplica el operador
mas a la derecha
- Los parntesis tiene la mxima prioridad .
Tabla 1.10 Prioridad y asociatividad de los operandos
Prioridad Operadores Asociatividad

1 :: x -> [ ] () - D
2 ++ -- ~ ! - + & * sizeof D -
3 . * ->* - D
4 * / % - D
5 + - - D
6 << >> - D
7 < <= > >= - D
8 == != - D
9 & - D
10 ^ - D
11 | - D
12 && - D
13 | | - D
14 ?: (expresin condicional) D -
15 = *= /= %= += -= <<= >>= &= ||= ^= D -
16 ,(operador coma ) D
D : ZQUERDA A DERECHA D : DERECHA A ZQUERDA
EJERCCOS :
a. Determina el valor de las siguientes expresiones aritmeticas
15/12 15&12
24/12 24%12
123/100 200%100
b. Cul es el valor de cada una de las siguientes expresiones?
a) 10 * 14 3 * 2 d) (4-40/5)%3
b) -4 +5 *2 e) 4*(3+5)-8*4&2-5
c) 13-(24+2*5)/4 & 3 f) -3*10+4*(8+4*7-10*3)/6
//
TRA(A:O PARCIAL
1. Elaborar un seudo cdigo-algoritmo para hallar el mximo comn divisor de dos
nmeros.
Sugerencia: aplicar repetidamente la resta del mayor con el menor, hasta que ambos
sean iguales.
2. Elaborar un algoritmo para hallar el cuadrado de un nmero de un nmero entero n.
Sugerencia: el cuadrado de un nmero entero n se evala por la suma de los n
primeros impares.
3. Calcular la planilla de una empresa, se ingresa el nmero de los empleados, y para cada
uno de ellos se ingresa el nmero de horas y el pago por hora; se calcula el pago y se
acumula para el total de la planilla.
4. Algoritmo que calcule el producto de los n primeros nmeros naturales.
5. Escribir un algoritmo que permita emitir la factura correspondiente a la compra de un
solo artculo determinado del que se adquieren una o varias unidades. Si al precio
bruto(Precio del artculo*Nro de unidades del artculo)-Valor de venta de la factura se
realiza un descuento del 1%, calcular el GV (18%), adems el precio de venta.
6. Dados tres nmeros A,B,C; hallar el menor, intermedio y el mayor.
7. Dados tres nmeros A,B,C; hallar el mayor.
8. Dados tres nmeros A,B,C; hallar el menor.
9. Se necesita conocer una serie de datos de una empresa con 50 empleados:
a. Cuntas personas ganan ms de 3000 nuevos soles al mes?
b. Entre 700 y 3000 nuevos soles?
c. Menos de 700 nuevos soles
d. mprimir el valor del menor sueldo.
10. Realizar un algoritmo que permita calcular la nota media(promedio) general de todos los
alumnos de un curso considerando N (como nmero de alumnos)
Nota: se debe pedir el nmero de alumnos, nombre del alumno, adems nota promedio
de cada alumno en el curso.
/5
Es independiente de la
condicin
/. ESTR*CT*RAS DE CONTROL SELECTI0AS
Permiten evaluar una condicin y puede ser: simple, doble, mltiple.
Estru!tura de Contro$ s"&$e 1Cond"!"ona$ S"&$e3
Evala una condicin simple.
Si <condicin>
----
----
----
----
Fin_Si
----
----
----
----
Ejercicio
Realizar un algoritmo que determine cul es el mayor de 3 datos numricos ingresados.
A ( C
1 2 3
Condici
n
----
----
----
----
----
----
SI
/7
ESTR*CT*RA DE CONTROL DO(LE 1CONDICIONAL DO(LE O DE DOS CAMINOS3
S NO

Evala una condicin, y ejecuta un conjunto de instrucciones en caso de ser verdadera y
otra en caso de ser falsa.
Si A > B
Si A > C Si A > B
Escribir 'El mayor es', A VMAYOR A
Si_no Si_no
Escribir 'El mayor es', C VMAYOR B
Fin_si
Fin_si
Si_no
Si B > C Si C > VMAYOR
Escribir 'El mayor es', B VMAYOR C
Si_no
Fin_si
Escribir 'El mayor es', C Escribir 'El mayor es', VMAYOR
Fin_si
Fin_si
A ( C
0MA-OR
1 2 3 3
Condici
n
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
/8
ALGORITMO MA-OR
Variables:
A, B, C, VMAYOR: Entero
INICIO
A = 0
B = 0
C = 0
VMAYOR 0
Escribir 'ngrese el primer valor'
Leer A
Escribir 'ngrese segundo valor'
Leer B
Escribir 'ngrese tercer valor'
Leer C
Si A > B
VMAYOR A
Si_no
VMAYOR B
f_si
si C > VMAYOR
VMAYOR C
f_si
Escribir 'El mayor es', VMAYOR
4FINICIO

/<

SI 0MA-OR J (
0MA-OR (
4Fs"
SI 0MA-OR J C
0MA-OR C
4Fs"
Si NO

NO S



"f C e$se 1 S" C S"no 3
Ejecuta una instruccin si una condicin dada es verdadera, y opcionalmente otra en caso
sea falsa.
INICIO
A 0
B 0
C 0
VMAYOR 0
ngrese el 1er.
valor
A
ngrese el 2do.
valor
B
ngrese el 3er.
valor
C
A >
B
C >
VMAYOR
VMAYOR C
'El mayor es',
VMAYOR
4IN
VMAYOR B VMAYOR A
/=
Formato
if (Condicin)
nstruccin;
else
nstruccin;
Donde la condicin es una expresin lgica (solo puede ser verdadero o falso.)
nstruccin.- Es el grupo de sentencias que sern ejecutadas.
Observaciones.-
1. Si la condicin es verdadera, la sentencia "if asumir que el valor resultante en la
condicin fue 1. de lo contrario fue 0.
2. Si hay mas de una instruccin, estas deben estar encerradas entre llaves.
Ejemplo
Elaborar un programa que pida el sueldo de un empleado y determine su bonificacin si:
a) Si el Empleado gana menos de 500, la bonificaron ser de 15%
b) Si el Empleado gana 500 o mas, la bonificaron ser del 10%
El programa deber imprimir la bonificacin que le corresponde a ese empleado junto
con su nuevo sueldo.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
float sueldo,bonif,tot ;
cout<<" ngrese Sueldo: ";
cin>>sueldo;
if (sueldo>=500)
bonif= sueldo* 0.10;
else
bonif= sueldo*0.15;
tot= sueldo+ bonif;
cout<<"\n La bonificacion es: "<<bonif;
cout<<"\n El sueldo total es: "<<tot<<endl;
system("PAUSE");
return EXT_SUCCESS;
}
ESTR*CT*RA DE CONTROL M*LTIPLE 1SELECCIN M*LTIPE3
(Segn sea o caso de /case)
Permite evaluar una condicin y seleccionar un caso dependiente de la accin que se
requiere.
/>
Ver figura 1.1
Ejer!"!"o
1. Disear un algoritmo que escriba los nombres de los das de la semana en funcin del
valor de una variable Da introducida por teclado.
Los das de la semana son 7; por consiguiente, el rango de valores de das ser 1..7, y
caso de que da fuere un valor fuera de este rango se deber producir un mensaje de crear
advirtiendo la situacin ano malas.
Figura 1.1
Segn- sea E hacer
nicio
E1: Accin S1
E2: Accin S2
E3: Accin S3
*
*
*
*
En: Accin Sn
Fin
Otras : accin Sx
Fin Segn
Caso expresin de
C1: Accin S1
C2: Accin S2
C3: Accin S3
*
*
*
*
Cn: Accin Sn
En cualquier otro caso
Accin Sx
AcFF
FF
1
Accin
C2
Accin
C3
Accin
Cn Accin
C3
Co
F
in
......
5@
Fin caso
sw"t!) 1 SegTn Sea3
Permite ejecutar una o varias sentencias, evala una expresin y compara su valor en una
lista de opciones.
Formato
switch ( expresin )
{
case const1 : instruccin ; break ;
case const2 : instruccion ; break :
*
*
*
*
case constN : instruccion ; break ;
default : instruccion ; break;
}
Donde :
Expresin. Puede ser un valor entero o de tipo char.
nstruccin. Puede ser una sentencia simple o compuesta.
Ejemplo:
Dado el nmero de un mes del 1 al 12, mostrar el nombre del mes, en otro caso error.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int nmes;
cout<<"\n ngrese Numero de Mes:";
cin>>nmes;
switch(nmes)
{
case 1 : printf ( "Enero");break ;
case 2 : printf ("Febrero");break ;
case 3 : printf ("Marzo");break ;
case 4 : printf ("Abril");break ;
case 5 : printf ("Mayo");break ;
case 6 : printf ("Junio");break ;
case 7 : printf ("Julio");break ;
case 8 : printf ("Agosto");break ;
case 9 : printf ("Sieptiembre");break ;
case 10 : printf ("Octubre");break ;
51
case 11 : printf ("Noviembre");break ;
case 12 : printf ("Diciembre");break ;
default : printf ("Mes Erroneo");break;
}
cout<<"\n";
system("PAUSE");
return EXT_SUCCESS;
}
Ejemplo:
Elaborar un programa que permita hacer conversiones de temperatura entre grados
Fahrenheit, Celsius, Kelvin y Ranking. Primero debe preguntar que tipo de grados quiere
convertir. Por ejemplo si se le indica que se desea convertir una temperatura en grados
Fahrenheit, debe leer la cantidad de grados y luego su equivalente en grados Celsius,
Kelvin y Rankine, y as hacer lo mismo en cada uno de los casos otros tipo, para convertir a
Celsius la temperatura Fahrenheit se le resta y se le multiplica por 5/9, para convertir a
Kelvin, se le suma 273 a los grados Celsius. Para convertir a rankine a los grados
Fahrenheit se le suma 460.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int op1;
float f,c,k,r;
cout<< "\n conversiones de temperatura";
cout<< "\n1 De oF a oC, oK ,oR";
cout<< "\n2 De oC a oF, oK, oR";
cout<< "\n3 De oK a oF, oC, oR";
cout<< "\n4 De oR a oF, oC, oK";
cout<< "\n seleccione opcion:";
cin>>op1;
switch(op1)
{
case 1 : cout<<"\n ngrese temperatura en oF:";
cin >>f;
c=(f-32)*5/9;
k=c+273;
r=f+460;
cout<< "\n"<<"oF cequivale a:";
cout<< "\n"<<c<<"oC";
5.
cout<< "\n"<<k<<"oK";
cout<< "\n"<<r<<"oR";break;
case 2 : cout<<"\n ngrese temperatura en oC:";
cin>>c;
f=(9/5*c)+32;
k=c+273;
r=f+460;
cout<<"\n"<<"oC cequivale a:";
cout<<"\n"<<f<<"oF";
cout<<"\n"<<k<<"oK";
cout<<"\n"<<r<<"oR";break;
case 3 : cout<< "\nngrese temperatura en oK:";
cin>>k;
c=k-273;
f=(9/5*c)+32;
r=f+460;
cout<<"\n"<<"oK cequivale a:";
cout<<"\n"<<c<<"oC";
cout<<"\n"<<f<<"oF";
cout<<"\n"<<r<<"oR";break;
case 4 : cout<< "\n ngrese temperatura en oR:";
cin>>r;
f=r-460;
c=(f-32)*5/9;
k = c+273;
cout<< "\n"<<" oR cequivale a:";

cout<< "\n"<<f<<"oF";
cout<< "\n"<<c <<"oC";
cout<< "\n"<<k<<"oK";break;
default : cout<< "\n ERROR, pulse 1,2,3,4,";break;
}
cout<< "\n";
system("PAUSE");
return EXT_SUCCESS;
}
5/
5. ESTR*CT*RAS REPETITI0AS
Permiten evaluar procesos repetitivos. Se tiene:
Mientras, para, repetir.
Mientras <condicin>
___________
___________
___________
___________
FN MENTRAS


4
0

Ejercicios:
1. Ejercicio Hallar suma de los cinco primeros nmeros naturales
2. Hallar la suma de los 50 primeros nmeros naturales impares
Ejecuta un grupo de instrucciones mientras la
condicin sea verdadera .
Caso de ser falsa sale del mientras.
condici
n
----
--
----
Ej. Para que nunca entre a la condicin
A 6
B 6
C 0
SW 0
Mientras SW = 1
C A + B
SW 0
F_mientras
Escribir 'C=', C
Ej. Para que Si entre a la condicin
A 8
B 6
C 0
SW 1
Mientras SW = 1
C A + B
SW 0
f-Mientras
Escribir 'C=', C
55
Re&et"r
UUUUUUU
UUUUUUU
UUUUUUU
9asta 1J!ond"!"#nK3

NO

Otro Ejm. de Mientras
C 5
Mientras C <> 50
A 0
B 0
C 0
Escribir 'valor de A'
Leer A
Escribir 'valor de B'
Leer B
C A + B
Escribir la suma, =', C
Fin Mientras
Re&et"r
Escribir 'ngrese respuesta < s/n>'
Leer RP
--------
--
--------
--

<Condicin>
Se realizan por lo
menos una vez
In"!"o
A <
( 5
C @
SV @
Re&et"r
C A ' (
SV 1
9asta 1SV G 13
Es!r","r WCGXL C.
4"n
Otro eje&$o de re&et"!.
Re&et"r
A @
( @
C @
Es!r","r W0a$or deXL A
Leer A
Es!r","r W0a$or deXL (
Leer (
CGA'(
Es!r","r WLa sua es+ WL C
9asta 1C G 7@3
SI
57
Hasta (RP = 's' O R RP ='N')
Ej. M"entras D Re&et"r
RP 'S'
Mientras RP ='S'
A 0
B 0
C 0
Escribir 'valor de A'
Leer A
Escribir 'valor de B'
Leer B
C A + B
Escribir la suma, =', C
Repetir
Escribir 'ngrese respuesta <S/N>'
Leer RP
Hasta (RP='S' or RP='N')
F-mientras
Con un re&et"r fuera D 1 re&et"r dentro
Repetir
A 0
B 0
C 0
Escribir 'valor de A'
Leer A
Escribir 'valor de B'
Leer B
C A + B
Escribir la suma, =', C
Repetir
Escribir 'ngrese respuesta <S/N>'
Leer RP
Hasta (RP='S' oR RP='N')
Hasta (RP='N')
AC*M*LADOR
Variable que recibe el valor que anteriormente tena ms un valor cualquiera.
X = X + Y
X = X + < valor variable>
CONTADOR
X = X + <valor fijo>
58
Contador: Variable que nos permite guardar su valor anterior ms un valor fijo.
Para
Para Valor nicial Hasta Valor final Variando Valor de cambio
________
________
________
Fin-para
Para 1 hasta 5
Escribir
Fin_para
In"!"o de $a Instru!!. Para


F
Para 1 hasta 5 variando 2
Escribir
Fin_para
_______
_______
_______
Si <condicin>
_______
_______
_______
_______
F_si
El conjunto de instrucciones se ejecuta
"N veces
A stas instrucciones no le interesa con que valor llegue ", ella
mismo (el para) se encarga de inicializar
I 1
I >
5
Escribir

+ 1

I 1
< =
5
Escribir

+ 1
5<
An"dados
Si <C1>
_______
_______
_______
Si <C2>
_______ S" C. Es 0
_______
_______
f_si
_______ S" C1 es 0
_______
_______
Si no
_______
_______
_______
Si <C3>
_______
_______ S" C/ es 0
_______

si no
_______ S" C/ es 4
_______
_______
_______
_______
_______
f_si
f_si
Mientras <c1>
----------
----------
----------
mientras <c2>
----------
----------
----------
f-mientras
----------
----------
----------
F-Mientras
5=
Repetir
----------
----------
----------
Repetir
----------
----------
----------
Hasta (c2)
----------
----------
---------
Hasta (c1)
Para 1 hasta 5
----------
----------
----------
Para 1 hasta 4
----------
----------
----------
Fin para
----------
----------
----------
Fin-Para
5>
Eje&$o+ Anidados en F
En una empresa deseamos contar los varones y mujeres que son programadores y los
hombres y mujeres que son usuarios.
si la especialidad es programador
Si el sexo es hombre
Contar hombre_P
Si no
Contar mujeres_P
f-si
si no
si el sexo es hombre
contar hombres_u
si no
Contar mujeres_u
f-si
f-si
Esp = 'P'
Sex = 'H' Sex = 'H'
CMUCMU+1 CHUHU+1 CMP CMP +1 CHP CHP +1
F
F
F V
V
V
7@
PRO(LEMAS
Deduzca el salario neto de un trabajador, a partir de los siguientes datos de entrada:
nombre, horas trabajadas, precio de la hora, y sabiendo que los impuestos son el 10% sobre
el salario bruto.
NOMPER
PAGHOR
HORTRA
SUENET
SUEBRU
DSCLEY
PROGRAMA S*ELDO
Entorno (Variables):
NOMPER: Cadena
PAGHOR, HORTRA, SUENET, SUEBRU, DSCLEY: Reales
Algoritmo:
nicio
PAGHOR .
HORTRA .
SUENET .
SUEBRU .
DSCLEY .
NOMPER ''
Escribir 'nombre'
Lee NOMPER
Escribir 'Horas Trabajadas'
Leer HORTRA
Escribir 'pago por hotra'
Leer PAGHOR
Sue Bru HORATRA * PAGHOR
DSCLEY SueBru * 0.10
SUENET SueBru - DscLey
Escribir 'El sueldo neto es:', SUENET
Fin-nicio
Sueldo para "n personas; n definido
PROGRAMA S*ELDO
71
Entorno (Variables)
NomPer : Cadena
PagHor, Hortra, SueNet: Reales
, N: Entera
Algoritmo:
nicio
PAGHOR .
HORTRA .
SUENET .
N

Escribir 'ngresa el N de Trabajadores'
Lee N
Para 1 hasta N
NOMPER ' '
Leer NOMPER
Escribir "horas trabajada
Leer HORTRA
Escribir 'pago por hora'
Leer PAGHOR
SUENET PAGHOR*HORTRA*0.9
Escribir, NOMPE, 'SUELDO NETO', SUENET
HORTRA
PAGHORA
SUENET
Fin-Para
Sueldo para N personas, "Cuando N: indefinido
Programa Sueldo
Entorno
NOMPER : Cadena
PAGHOR, HORTRA, SUENET: REALES
RP : Carcter
Algoritmo:
nicio
PAGHOR .
HORTRA .
7.
SUENET .
RP ' '
Repetir
NOMPER ' '
Leer NOMPER
Escribir 'Pago por Hora'
Lee PAGHOR
SUENET PAGHOR * HORATRA*0.9
Escribir "NOMPER, Sueldo Neto, SUENET
PAGHOR
HORTRA
SUENET
Escribir "desea continuar < S/N>'
Leer RP
Hasta (RP = 'N')
Otra fora
Algoritmo
Repetir
PAGHOR
HORTRA
SUENET
RP W W
NOMPER W W
Escribir 'Horas Trabajadas'
Leer HORTRA
Escribir 'pago por hora'
Leer PAGHORA
SUENET PAGHOR * HORATRA * 0.9
Escribir, NOMPER, SUENET
Escribir 'Desea Continuar <S/N>'
Leer RP
Hasta (RP = 'N')
PROGRAMA S*ELDO
Entorno
Entorno:
NOMPER: Cadena
PAGHOR, HORTRA, SUENET, SUEBRU, DSCLEY: Reales
RP 'S'
7/
mientras RP = 'S'
PAGHOR .
HORTRA .
SUENET .
NOMPER ''
Escribir 'nombre'
Lee NOMPER
Escribir 'Horas Trabajadas'
Leer HORTRA
Escribir 'pago por hora'
Leer PAGHOR
SUENETO PAGHORA * HORTRA * 0.9
Escribir NOMPER 'El sueldo neto es:', SUENET
Escribir 'Desea continuar <S/N>'
Leer RP
F-Mientras
Ejer!"!"os
1. Se desea realizar un Seudo cdigo que resuelve el siguiente problema:
- Calculo de 1.5 salario semanales de los empleados de una empresa, sabiendo que stos
se calculan en base a las horas semanales trabajados y de acuerdo a un precio especificado
por cada hora. Si se pasan de 40 horas semanales, las horas extras se pagan a razn de
1.5 veces la hora ordinaria.
N Horas normales : 4
Nomper
Horatra
Paghor
1.4 x Paghor por c/hora extra
Ejemplo si sueldo x hora = S/ 80.00
Hora extra = 1 s (10) = S 15.
Hora Extra: Hora Extra 40
PROGRAMA S*ELDO1
Entorno
RP: Carcter
Nomper: Cadena
Hortra, Paghor, SueNet, : Reales
Algoritmo
75
nicio
RP 'S'
Mientras RP= 'S'
Nomper ' '
Hortra .
Suenet .
RP ' '
Escribir 'nombre'
Leer Nomper
Escribir 'pago por hora'
Leer Paghor
Escribir 'horas, trabajados
Leer Hortra
Si Hortra < 4
SueNet Pag Hor * hortra
Si no
Sunet Paghor * 40 + (Hortra -40) x 1.5 x paghor
F-si
Escribir 'sueldo net', suenet
To+sue tot sue + suenet
Escribir 'Desea continuar <S/N>'
Leer RP
Fin Mientras
Escribir 'El total de sueldos es: ', totsue
Fin-nicio
.. Se debe ingresar una lista de nacionalidades y se desea saber cuantos chilenos y
peruanos han sido ingresados a su vez deber UD. indicar cuantas personas ingresaron
CONTPER
CONTCH
CONTOT
NAC
RP
PROGRAMA NACIONALIDAD
Entorno
77
CONTPER, CONTCH, CONTOT: Enteros
NAC: Cadena
RP: Carcter
Algoritmo
nicio
CONTPER 0
CONTCH 0
CONTOT 0
RP 'S'
Mientras RP = 'S'
NAC ' '
Escribir 'nacionalidad' :
Leer NAC
Si NAC = 'Peruano' OR NAC = 'Peruana'
CONTPER CONTPER + 1
F-Si
Si NAC = 'CHLENO' OR NAC= 'CHLENA'
CONTCH CONTCH + 1
F-Si
CONTOT CONTOT + 1
RP ' '
Escribir 'Desea continuar <S/N>'
Leer RP
Fin Mientras
Escribir 'El total de peruanos es:', CONTPER
Escribir 'El total de Chilenos es:', CONTCH
Escribir 'El total de nacionalidades ingresadas es:', CONTOT
Fin-nicio
PRO(LEMAS
Dado: 10 nmeros enteros, visualizar la suma de los nmeros pares de la lista. Cuntos
nmeros pares existen y cul es la media aritmtica de los Numeros impares?
Programa: NPE
RES,COC,NroEnt, , COMPART, CONMPAR, SUM PAR, SUMMPAR: Enteros
Promp: Real
ALGORTMO
NCO
SumaPar 0
Sumampar 0
78
ConPar 0
Conmpar 0
Para 1 Hasta 10
NROENT 0
Escribir 'ingrese un N'
Leer NroEnt
Coc Parte entera (nroent/2)
Res Nroent (2*COC)
Si res = 0
Conpar Conpar +1
Sunpar Sunpar + nroent
Si no
Conimpar Conimpart +1
Sunimp Suminp + nroent
F-si
F-Para
Promp Summp/Conmpar
Escribir ' Promedio mpares', Prompar
Escribir 'Suma de Pares', SumPar
Escribir 'Hay', ConPar, 'Nros Pares'
Los empleados de una fbrica trabajan en dos turnos, diurno y nocturno. Se desea calcular
el jornal diario de acuerdo con los siguientes puntos.
1. La tarifa de las horas diurnas es de 10 nuevos soles
2. La tarifa de las horas nocturnas es de 15 nuevos soles
3. En caso de ser domingo, la tarifa se incrementa en 8 nuevos soles el turno diurno y al
doble en turno nocturno
Programa Jornal
Entorno
Rp,Turtra: Carcter
DiaTra, Nomtra: Cadena
Hortra, JorDia: Enteros
ALGORTMO
NCO
Repetir
Nomtra ' '
Escribir ' Nombre del Trabajador'
Leer Nomtra
DiaTra ' '
Escribir 'Dia trabajado: '
7<
Leer DiaTra
TurTra ' '
Escribir ' Turno Trabajado'
Leer TurTra
Si DiaTra= 'Domingo'
Si Turtra='D'
JorDia 18*HorTra
Sino
JorDia 30*HorTra
F-si
Sino
Si Turtra='D'
JorDia 10*HorTra
Sino
JorDia 15*HorTra
F-si
F-si
Escribir 'El Jornal es',JorDia
Repetir
RP ' '
Escribir 'Desea Continuar <S/N>
Leer RP
Hasta RP = 'S' OR RP='N'
Hasta(RP='N')
Escribir el 'Sueldo total pagar': , SUetotal
FN-NCO
PROGRAMA S*ELNET
Entorno
RP: Carcter
mpMen PagHor
Hortra, SueNetMen
PagMen; Real
Nomtra : Cadena
Algoritmo
nicio
Repetir
Nombre ' '
Escribir nombres trabajador:
Leer Nomtra
7=
Escribir ' Horas Trabajadas'
Leer Hortra
Escribir 'pago hora:'
Leer PagHor
mpMen 0.000
Si Hortra < = 35
SueNet Sem PagHor * Hortra
Pag Mens Sue Net Sen *4
Si no
Sue Net SemPag Hor * 1.5 * (Hortra -35)+PagHor *35
Pag Mens Sue Net Sen *4
F-si
Si PagMens > 300 and. Pag Men <= 1100
mpMen 0.15 * (Pag Mens 300)
Si no
Si Pag Mens >1.100
mpMen 0.30 * (Pag Men - 1100)
F-si
F-si
Sue Net Sem Sue Net Sem _ mpMen
Escribir Nomtra, sue Net Sem
Repetir
Escribir 'desea continuar' <S/N>'
Leer RP.
Hasta (RP = 'S' .OR. RP = 'N')
Hasta RP = 'N'
F-nicio
E$eentos ,Ys"!os de un a$gor"to+
- Palabras reservadas (nicio, fin)
- dentificadores (Nombres de variables)
- Carcter especiales (coma, apostrofe etc)
- Constantes
- Variables
- Expresiones
- nstrucciones
- Contadores
7>
- Acumuladores
- nterruptores (switch)
- Estructuras:
o Secuenciales
o Selectivas
o Repetitivas
w)"$e 1 "entras 3
Ejecuta una instruccin simple o compuesta: ninguna, una o mas veces dependiendo del
valor de la condicin.
Formato:
while ( condicin )
Loop {
o nstrucciones;
Bucle }
Ejecucin:
1. Se evala la condicin.
2. Si el resultado de la evaluacin es verdadero (1) la instruccin se ejecuta y el proceso se
repite mientras que la condicin sea verdadera.
3. Si la condicin es falsa no se ejecuta la sentencia y se procede a ejecutar el resto del
programa.
Ejemplo
Programa que imprime los nmeros del 1 al 10.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int c;
c =1;
while(c<=10)
{
cout<<c<<endl;
c++ ;
}
system("PAUSE");
return EXT_SUCCESS;
}
8@
do w)"$e 1)a!er U "entras3
Ejecuta una instruccin simple o compuesta por lo menos una vez dependiendo del valor de
la condicin.
Formato
do
{
nstrucciones;
}
while (condicin);
Ejecucin
1. Se ejecuta la instrucciones simples o compuestas
2. Se evala la condicin
3. Si el resultado es verdadero el proceso se repetir hasta que la condicin se
convierta en falsa.
Si el resultado de la condicin es falso se pasa a ejecutar el resto del programa.
Ejemplo
Programa para indicar que nos encontramos en un bucle repetitivo (do while). Desea
continuar < s / n >, el proceso se repite cuando al final la respuesta es: s o S.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char resp ;
do
{
cout<<"\n Estamos dentro de un do_while\n";
cout<<" Desea continuar < s / n >.......";
cin>>resp;
}while(resp== 'S' || resp =='s');
cout<<"\n Eso fue todo";
81
cout<<"\n";
system("PAUSE");
return EXT_SUCCESS;
}
for 1 &ara3
Ejecuta un conjunto de instrucciones un determinado N de veces cuyo valor se conoce por
anticipado.
Formato
for 1%ar G%"E !ond"!"#nE &rogres"#n3
M
nstrucciones;
N
Donde:
var = vi; var representa a una variable que ser inicializada con el valor vi ( se evala una
sola vez)
Condicin : es una condicin lgica si se omite se asume que es verdadera.
Progresin: es una expresin que incrementa o decrementa la variable var.
Ejempo
Programa que permita calcular el producto de 2 nmeros usando solamente sumas.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i, num1, prod,num2;
prod =0;
cout<<"ngrese Primer Numero : ";
cin>>num1;
cout<<"\n ngrese Segundo Numero: ";
cin>>num2;
for (i =1 ; i <=num1 ; i++)
8.
{
prod =prod + num2;
}
cout<<"El producto es "<<prod;
cout<<"\n";
system("PAUSE");
return EXT_SUCCESS;
}
7. P*NTEROS
Cuando una variable se declara, se asocian tres atributos: nombre, tipo y direccin en
memoria. Al valor, o contenido de una variable se accede por medio de su nombre. A la
direccin de la variable se accede por medio del operador de direccin &.
Una referencia es una alas de otra variable. Se declara utilizando el operador de referencia
(&) que se aade al tipo de la referencia.
Ejemplo: Obtener el valor y la direccin de una variable y una referencia.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int Variable=100; // Declaracin de variable
int &Referencia = Variable; // Referencia(direccin) e inicializacin
cout<<"Contenido de Variable = "<<Variable<<endl;
cout<<"Direccion de &Variable = "<<&Variable<<endl;
cout<<"Contenido de Referencia = "<<Referencia<<endl;
cout<<"Direccion de &Referencia = "<<&Referencia<<endl;
system("PAUSE");
return EXT_SUCCESS;
}
Reg$as
& se refiere a la direccin en que se almacena el valor. El carcter & tiene diferentes usos en
C++:
1. Cuando se utiliza como prefijo de un nombre de una variable, devuelve la direccin de
esa variable.
2. Cuando se utiliza como un sufijo de un tipo en una declaracin de una variable, declara la
variable como sinnimo de la variable que se ha inicializado.
8/
3. Cuando se utiliza como sufijo de un tipo en una declaracin de parmetros de una
funcin, declara el parmetro referencia de la variable que se pasa a la funcin.
Puntero
Un puntero es una variable que contiene una direccin de una posicin de memoria que
puede corresponder o no a una variable declarada en el programa. La declaracin de una
variable puntero debe indicar el tipo de dato al que apunta; para ello se hace preceder al
nombre con asterisco (*):
< tipo de dato apuntado> *<identificador de puntero>
C++ no inicializa los punteros cuando se declaran y es preciso inicializarlos antes de su uso.
Para asignar una direccin de memoria a un puntero se utiliza el operador &, ste mtodo
de inicializacin, denominado esttico requiere:
o Asignar memoria estticamente definiendo una variable y, a continuacin, hacer que
el puntero apunte al valor de la variable.
o Asignar un valor a la direccin de memoria.
Otro mtodo para inicializar un puntero, consiste en utilizar asignacin dinmica de
memoria, utilizar operadores new y delete.
Operadores de punteros
Operador Propsito
& Obtiene la direccin de una variable
* Define una variable como puntero
* Obtiene el contenido de una variable puntero
Notas:
- Siempre que aparezca un (*) en una definicin de variable, sta es una variable puntero.
- Siempre que aparezca un (*) delante de una variable puntero se accede a la variable
contenido del puntero.
- El operador & devuelve la direccin de la variable a la cual se aplica.
Ejemplo. Asignar a una variable puntero una direccin, y a su contenido un valor.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int var;
int *pun; //puntero al entero pun

pun=&var; //direccion de var a pun
*pun=120;
cout<<" &var. Direccion de var = "<<&var<<endl;
cout<<" pun. Contenido de pun es la misma de var = "<<pun<<endl;
cout<<" Contenido de var = "<<var<<endl;
cout<<" Contenido de *pun es el mismo de var = "<<*pun<<endl;
system("PAUSE");
return EXT_SUCCESS;
}
Gest"#n d"nY"!a de eor"a
O&erador new
85
puntero = new nombreTipo (inicializador opcional)
o bien:
1. tipo *puntero=new tipo // No arreglos
2. tipo *puntero=new tipo[dimensiones] // Arreglos
Sintaxis de operadores new y delete
puntero = new tipo;
delete puntero:
Asignacin-desasignacin de un arreglo dinmico
puntero Array= new [tamao del arreglo];
delete[] puntero Array;
Ejemplo. Asignar memoria dinmica a una cadena de caracteres y a un entero y se libera la
memoria asignada.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char *Cadena=" Buenas tardes a los alumnos de Algoritmica 1";
int *pEntero, longCadena, Entero=20;
char *pCadena;
longCadena=strlen(Cadena);
pCadena=new char[longCadena+1]; //memoria mas una posic.de fin de cadena
strcpy(pCadena,Cadena); // Cadena a pCadena
pEntero=new int; // reservar memoria para pEntero
*pEntero=Entero; // se almacena en pEntero 20
cout<<"pCadena = "<<pCadena<<", longitud = "<<longCadena<<endl;
delete pCadena; // libera memoria de pCadena
cout<<" *pEntero = "<<*pEntero<<endl;
delete pEntero;
system("PAUSE");
return EXT_SUCCESS;
}
87
Ejemplo. Reservar, asignar memoria dinmica a un vector de enteros, cargar el vector,
mostrar los contenidos, visualizar las direcciones de memoria.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int n,*v,*d,i;
cout<<"Asignacion dinamica de memoria a un vector de enteros"<<endl;
cout<<"Numero de elementos: ";
cin>>n;
v=new int[n];
d=v;
for(i=0;i<n;i++)
{
cout<<"\n v["<<i+1<<"]=";
cin>>*v;
v++;
}
cout<<"CONTENDO DRECCON DE MEMORA "<<endl;
for(i=0;i<n;i++)
{
cout<<" v["<<i+1<<"]="<<*d<<"\t\t\t"<<d<<endl;
d++;
}
system("PAUSE");
return EXT_SUCCESS;
}
88
8. 4*NCIONES
Las funciones contienen varias sentencias bajo un solo nombre, que un programa puede
utilizar una o ms veces para ejecutar dichas sentencias.
Si se agrupan funciones en bibliotecas, otros programas pueden reutilizar las funciones.
Las funciones tambin pueden ser definidas por el usuario.
8.1 4un!"ones de ,",$"ote!a o fun!"ones estYndar
Las funciones estndar o predefinidas, se dividen en grupos; todas las funciones que
pertenecen al mismo grupo se declaran en el mismo archivo de cabecera(librera), ejemplo:
L",rerBa 4un!"ones
<stdlib.h> random(num); atoi(cadena);
<ctype.h> toupper(ch); tolower(ch);
<math.h> exp(num); pow(a,b); sqrt(num);
<string.h> strcpy(cadena1,cadena2); strcmp(cadena1,cadena2);
<stdio.h> gets(cad); scanf("cadena de formato;&Lista de Argumentos);
printf("cadena de formato,[Lista de Argumentos]);
8.. 4un!"ones de usuar"o
Es un conjunto de instrucciones que ejecutan una tarea especfica. Tiene las siguientes
caractersticas:
No puede contener otra funcin.
Posee un tipo determinado
Puede o no retornar un valor
Tiene que ser reconocida antes de la funcin main( )
4orato
t"&o Nombre ([lista de argumentos])
{
definiciones locales;
instrucciones;
[return (valor);]
}
t"&o
Es el tipo de datos que retorna la funcin. En caso que la funcin no retorne valor alguno
ser del tipo void (vaco).
No,re
Es el identificador que definir el nombre de la funcin.
L"sta de arguentos
Tambin llamadas parmetros formales. Son el conjunto de identificadores separados por
comas que utilizaran la funcin. A estos se le pueden considerar como variables locales, las
cuales han recibido un valor inicial.
return
Es una sentencia opcional encargada de devolver algn valor, puede ser o no las ltima y
puede aparecer mas de una vez en una funcin.
Si la funcin no retorna valor ser del tipo void (vaci).
Nota
Todas las funciones deben estar desarrolladas antes de la funcin main( ), en caso contrario
debern ser definidos como cualquier variable al inicio del programa. A esta funcin definida
se le denomina funcin prototipo.
Ejemplo
float suma(float x, float y)
{
float w;
8<
w=x+y;
return (w);
}
Ejemplo:
Hallar en una funcin el mximo comn divisor de dos nmeros enteros, y mostrar el
resultado en el programa principal.
#include <cstdlib>
#include <iostream>
using namespace std;
int mcd(int x, int y);
int main(int argc, char *argv[])
{ int x,y,r1;
double r2;
cout<< "\n Hallando mcd de dos numeros";
cout<< "\n 1er numero:";
cin>>x;
cout<< "\n 2do numero:";
cin>>y;
r1=mcd(x,y);
cout<<"\n el mcd de:"<< x<<" y "<<y<<" es "<<r1;
cout<<"\n";
system("PAUSE");
return EXT_SUCCESS;
}
int mcd(int x, int y)
{ while(x!=y)
{if(x>y)
x=x-y;
else
y=y-x;
}
return(x);
}
8=
ParYetros de una fun!"#n
a. Paso &or %a$or1&aso &or !o&"a3+ La funcin recibe una copia de los valores de los
parmetros actuales. La funcin receptora no puede modificar la variable de la
funcin(parmetro pasado).
Eje&$o+
Leer un nmero entero cualquiera, pasar el valor ledo a travs de una funcin de paso de
parmetro por valor, en la funcin mostrar el valor enviado, duplicar el valor. Al trmino de la
funcin, regresar al programa principal mostrar el valor ledo despus de la llamada de paso
por valor.
#include <cstdlib>
#include <iostream>
using namespace std;
void paso_por_valor(int x);
int main(int argc, char *argv[])
{
int x;
cout<<"\n ngrese un numero: ";
cin>>x;
cout<<"\n Antes de la llamada de paso por valor x= "<<x<<endl;
paso_por_valor(x);
cout<<"\n despues de la llamada a paso por valor x= "<<x<<endl;
system("PAUSE");
return EXT_SUCCESS;
}
void paso_por_valor(int x)
{
cout<<"\n dentro de paso por valor x= "<<x<<endl;
x*=2;
cout<<"\n despues de x*=2 y dentro de paso por valor x= "<<x<<endl;
}

8>
b. Paso &or referen!"a 1o d"re!!"#n3+ Cuando una funcin debe modificar el valor del
parmetro pasado y devolver este valor modificado a la funcin llamadora.
Eje&$o+
En el programa principal inicializar una variable entera con un valor, mediante la llamada a
una funcin de paso de parmetro por referencia modificar el valor de la variable, y mostrar
el resultado en el programa principal.

#include <cstdlib>
#include <iostream>
using namespace std;
void referencia(int &x)
{
x+=2;
}
"nt a"n1"nt arg!L !)ar Oarg%PQ3
{
int x=20;
cout<<"antes de la llamada: "<<"x= "<<x<<endl;
referencia(x);
cout<<"despues de la llamada: "<<"x= "<<x<<endl;
system("PAUSE");
return EXT_SUCCESS;
}
<@
REC*RSI0IDAD
Un programa recursivo es aquel que se llama asimismo ( y una funcin recursiva es aquella
que se llama asimisma) pero con una condicin de termino que autorice al programa a dejar
de llamarse asimismo ( y que la funcin deje de definirse en trminos de si misma).
Ej. Desarrollar un algoritmo para hallar factorial de un nmero entero positivo usando
recursividad, incluir el cero.
n! = n(n-1)! Para n > =1 con 0! =1
Programa factorial
Def. Variables
Respta,n: enteros
ALGORTMO
NCO
Escribir(' ngresar Nro entero positivo para hallar factorial')
Leer(n)
Respta=factorial(n)
Escribir(El factorial de , n, es, Respta)
FN
Funcion entero factorial(entero n)
NCO
Si n= 0
Retornar 1
Caso contrario
Retornar(n*factorial(n-1))
Fin-si
FN
<. ARREGLOS
Son conocidos como vectores o matrices, sea por ejemplo


DATOS
DATOS(1) DATOS(3) DATOS(15)
Tiene las siguientes caractersticas
.......
<1
- La misma longitud
- El mismo tipo de datos
- Referencias a un mismo nombre.
Eje&$o+
Datos(15) : Arreglo de enteros
Nombre Arreglo (Nro de Elementos) : Arreglo de <tipo>
Prograa Nros
Entorno:
Datos (15): Arreglo de enteros
Suma, : Entero
Agoritmo
nicio
Suma 0
Para 1 hasta 15
Datos () 0
Fin Para
Para 1 Hasta 15
Escribir 'Nro', , '-'
Leer Datos ()
Suma Suma + Datos ()
Fin - Para
Limpia Pantalla
Para 1 hasta 15
Escribir 'Datos (', , '). ', Datos ()
Fin - Para
Escribir 'La suma de stos datos es:' , Suma
Fin nicio
Se necesita ingresar en nombre y las evaluaciones de cada uno de los alumnos del curso
de programacin, existen 2 evaluaciones por alumno. El Psedocdigo debe permitir la
impresin de la Acta de Notas de dicha seccin. Los datos al imprimir deben ser los
siguientes:
- Nombre
- Evaluacin 1Not Par)
- Evaluacin 2 (Not Fin)
- Promedio
PROGRAMA ACTAS
Entorno:
<.
NomAlu(45): Arreglo de cadenas
NotPar (45) , NotFin(45), ProAlu(45): Arreglo de reales
, K: Entero
RP: Carcter
Algoritmo
nicio
Para hasta 45
NomAlu() ' '
NotPAr () .00
NotFin () 0.00
ProAlu () 0.00
Fin Para
0
Repetir
+ 1
Escribir 'nombre del alumno'
Leer NomAlu ()
Escribir 'Ex-parcial'
Leer NotPar ()
Escribir Ex_Final
Leer NotFin ()
ProAlu () (NotPar () + NotFin ())/2
RP ' '
Escribir 'Hay ms alumnos <S/N>'
Leer RP
Hasta (RP = 'N')
Para k 1 hasta
Escribir NomAlu (K),'b', NotPar(K), 'b', NotFin(K), 'b'. ProAlu(K)
Fin para
Fin nicio
Ejercicio
Se necesita ingresar el nombre, las evaluaciones y los trabajos de los alumnos del curso de
contabilidad bsica, existen cuatro evaluaciones por alumno y dos trabajos parciales. El
seudo cdigo debe permitir la impresin del Acta de notas de dicho curso. Los datos ha
imprimir son los siguientes:
Nombre Ex1, Ex2, Ex3, Ex4, T1, T2 PF
El promedio final es un promedio simple.
</
ORDENAR
SORTEAR LOS DATOS DE *N 0ECTOR 1METODO (*R(*:A3
Mtodo de intercambio (Burbuja)
El algoritmo consiste en:
r comparando los valores almacenados, en las diferentes posiciones del arreglo. Las
comparaciones se realizan tomando 2 valores por iteracin (Accin de repetir algo) los
valores a comparar deben estar en posiciones consecutivas, empezando de la posicin
N01
Con!$us"#n
Si Nros (y) > Nros(y+1)
Aux Nros (y)
Nros (y) Nros (y+1)
Nros (y+1) Aux
F-si
Para x 1 hasta N-1
Para y 1 hasta N-x
Si Nro(y)> Nros (y+1)
Aux Nros (y)
Nro (y) Nros (y+1)
Nro (y+1) Aux
F- si
F-para
F- para
Donde:
x = Nro del anlisis al algoritmo
y: ndica las posiciones del vector (controlar comparaciones)
N: Nro de datos a ordenar
N-1: N de anlisis a realizar
N-x : N de comparaciones por cada anlisis
(ZS[*EDA EN ARREGLOS
Ejemplo: ngresa 50 nombres a un vector, tipear un nombre aleatorio y verificar si se
encuentra en el arreglo.
Prograa (Ts\ueda
Entorno:
Nomper(50) : Arreglo de Cadenas
,SW : Entero
NomBus : Cadena
Algoritmo
nicio
Para 1 Hasta 50
Nomper () ' '
<5
Escribir 'nombres: '
Leer NomPer()
Fin Para
Nombus ' '
Escribir 'ngresa el nombre a buscar:'
Leer NomBus
SW 0
Para 1 hasta 50
Si Nombus = NomPer ()
Escribir 'lo encontre'
50
SW 1
F-S
F-Para
Si SW = 0
Escribir 'no existe el nombre'
F-si
Fin
OTRA 4ORMA
Algoritmo
nicio
Para 1 hasta 50
NomPer () ' '
Escribir 'nombre:'
Leer Nomber ()
F-Para
NomBus ' '
Escribir ingrese nombre a buscar: '
Leer Nombus
Para Hasta 50
Si Nombus = NomPer()
Escribir 'lo encontre'
51
Fin si
Fin Para
Si = 51
Escribir 'NO EXSTE'
Fin-si
Fin-si
INSERCIN DE DATOS EN *N 0ECTOR
PROGRAMA NSERTAR
Entorno Nro(5) : Arreglo de enteros
<7
Pos, , Dato: Entero
Algoritmo
nicio
Para 1 Hasta 5
Nros() 0
Escribir 'numero'
Leer Nros()
Fin - Para
DATO 0
Escribir 'ngresar el valor a insertar'
Leer Dato
Pos 0.
Escribir 'ngresar posicin donde desea insertar'
Leer POS.
Para 5 hasta Pos+1 Variando 1
Nros () Nros (-1)
Fin Para
Fin
E:ERCICIO
En el vector anterior
i) Ordenar de < a >
ii) nsertar el valor 12 en el lugar correspondiente, ya sea eliminado el ltimo valor o
ampliando el vector y no eliminado valor alguno.
Para 1 Hasta 4
Para 1 hasta 5-
Si V(J) > V(J+1)
Temp. V(J)
V(J) V(J+1)
V(J+1) Temp.
Fin si
Fin Para
Fin para
Dato 0
Escribir ('ngresar valor a insertar:')
Leer (Dato)
SW 0
Para i 1 Hasta 5
Si Datoins <= V()
Para J 6 hasta
V(J) V(J-1)
Fin- para
V() Dato
<8
5
SW 1
Fin si
Fin para
*****************************************************************
#include<iostream>
#include<cstdlib>
using namespace std;
int main(int argc, char *argv[]){
int V[6],j,i,dato,aux;
cout<<"\nLeer Vector ";
cout<<"\n";
for(i=0;i<5;i++){
cout<<"Numero ["<<i+1<<"]= ";
cin>>V[i];
}
for(i=0;i<5;i++){
for(j=0;j<5-i-1;j++){
if(V[j]>V[j+1]){
aux=V[j];
V[j]=V[j+1];
V[j+1]=aux;
}
}
}
cout<<"\nVector ordenado ";
for(i=0;i<5;i++){
cout<<"\nElemento ["<<i+1<<"]= "<<V[i];
}
cout<<"\nDato a insertar(menor que el mayor valor): ";
cin>>dato;
for(i=0;i<5;i++){
if(dato<=V[i]){
for(j=5;j>=i;j--)
V[j]=V[j-1];
V[i]=dato;
i=4;
}

}
cout<<"\nVector y valor insertado ";
for(i=0;i<6;i++)
<<
cout<<"\nV["<<i+1<<"]= "<<V[i]<<endl;
system("PAUSE");
return EXT_SUCCESS;
}
PROGRAMA ACTAS
Entorno
Nom(12): Arreglo de cadenas
Notas: (13,4)
Arreglo de reales
, J, Confat : Entero
AcuNot, AcuPro : Reales
Algoritmo
nicio
AcuPro 0
Confalt 0
AcuNot 0
Para 1 hasta 12
Escribir 'nombre'
Leer Nom()
Para J hasta 3
Escribir 'nota', J.
Leer Notas (,J)
Si Notas (,) = 88
Confalt Confalt + 1
Si no
AcuNot AcunNot + Notas (, J)
Fin-si
Fin - para
Notas (, J) AcuNot/3
AcuPro AcumPro + Notas (,J)
AcuNot + 0
F Para
Notas (13,4) AcuPro/12
Notas (13,1) 000
Notas (13,2) 000
Notas (13,3) 000
Para Hasta 12
Si Notas (,1)! = 88
Notas (13,1) Notas (13,1) + Notas (,1)
Fin si
Si Notas (,2)! = 88
<=
Notas (13,2) notas (13,2)+ Notas (,2)
F-S
Si notas (,3)! = 88
Notas (13,3) Notas (13,3) + notas (,3)
F-si
F-para
Notas (13,1) Notas (13,1)/12
Notas (13,2) Notas (13,2) /12
Notas (13,3) Notas (13,3)/12
E:ERCICIOS
1. Se desea un algoritmo que proporcione la palabra inversa simtrica de una dada. Por
ejemplo AML es la palabra inversa simtrica de LMA.
2. Se dispone de una lista de cien nmeros enteros. Calcular el valor mximo y el orden
que ocupa en la lista.
3. Calcular los promedios de las asignaturas de una clase. Deducir cuntas son ms altas
que el promedio y cuntas son ms bajas que el promedio.
4. Elaborar un algoritmo para ingresar o aadir registros a un archivo.
5. Hallar el factorial de un nmero entero positivo usando usando recursividad.
6. Dados dos nmeros enteros positivos cualesquiera hallar la raz cuadrada del mayor.
7. Elaborar un algoritmo el cual nos permita ingresar un menu de opciones: ingreso,
ordena, listado y cuadro.
Al ingresar los datos se pide: nmero de alumnos, nombre, sexo y nota promedio.
Al ordenar se ordena de mayor a menor por el promedio.
Adems se emite un listado y mensaje de aprobado o desaprobado.
8. nvestigar otros mtodos para ordenar datos, aparte del mtodo de la burbuja (mtodo
del intercambio) visto en clase. Describa por lo menos un mtodo y su algoritmo.
9. Dar concepto y por lo menos un ejemplo de rbol y grafo.
Ejercicio
Dar dos matrices enteras de orden 2, y hallar el producto de dichas matrices.
#include <cstdlib>
#include <iostream>
using namespace std;
<>
int main(int argc, char *argv[])
{
float A[4][4],B[4][4],C[4][4];
int m,n,p,q,i,j,x,y,z;
cout<< "\n Dar dos matrices y hallar el producto";
cout<< "\n Filas y columnas de la primera matriz:";
cin>>m>>n;
cout<< "\n filas y columnas de la segunda matriz:";
cin>>p>>q;
if(n!=p)
cout<< "\n No es posible producto";
else
{
cout<< "\n Lectura de la matriz A:\n";
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cout<< "A["<<i<<"]["<<j<<"]=";
cin>>A[i][j];
}
cout<< "\n";
}
cout<< "\n Lectura de la matriz B:\n";
for(i=0;i<p;i++ )
{
for(j=0;j<q;j++)
{
cout<< "B["<<i<<"]["<<j<<"]=";
cin>>B[i][j];
}
cout<< "\n";
}
for(x=0;x<m;x++)
{
for(y=0;y<q;y++)
{
C[x][y]=0;
for(z=0;z<n;z++)
{
C[x][y]=C[x][y]+A[x][z]*B[z][y];
}
}
cout<< "\n";
}
cout<< "\n Matriz producto\n";
for(i=0;i<m;i++)
{
for(j=0;j<q;j++)
cout<<C[i][j]<<" ";
cout<< "\n";
}
}
system("PAUSE");
return EXT_SUCCESS;
}
=@
Ejercicio
ngresar cinco nombres y ordenar alfabticamente por apellidos.
#include <iostream.h>
int main(int argc, char *argv[])
{ char apellidos_ns[5][30];
char temporal[30];
int i,x,y;
cout<<"ORDENAR POR APELLDOS Y NOMBRES";
for(i=0; i<5;i++)
{ fflush(stdin);
cout<<"\nAPELLDOS Y NOMBRES["<<i+1<<"]=";
//gets(apellidos_ns[i]);
cin.getline(apellidos_ns[i],28);
}
cout<<"DATOS NGRESADOS";
for(i=0; i<5;i++)
{
cout<<"\n"<<i+1<<" ."<<apellidos_ns[i];
}
for(x=0;x<4;x++)
{
for(y=0;y<4-x;y++)
{if(strcmp(apellidos_ns[y],apellidos_ns[y+1])>0)
{
strcpy(temporal,apellidos_ns[y]);
strcpy(apellidos_ns[y],apellidos_ns[y+1]);
strcpy(apellidos_ns[y+1],temporal);
}
}
}
cout<<"\nDATOS ORDENADOS";
for(i=0; i<5;i++)
{
cout<<"\n"<<i+1<<" ."<<apellidos_ns[i];
} cout<<endl;
//getch();
system("PAUSE");
//return 0;
return EXT_SUCCESS;
}
=1
CAMPO+ Elemento de datos (Elemental)
Nombre Direccin Tf. Fecha.Nac. EsSalud Sueldo
Un campo es la menor unidad de informacin de un registro
Existen casos en que un campo se divide en subcampos
Ejemplo:
1 7 0 5 2 0 0 4
Sub campo Dia Mes Ao
=. REGISTROS 1 ESTR*CT*RAS3
Un registro es una coleccin de informacin (campos) relacionados entre s relativa a una
entidad particular.
Eje&$os de reg"stros
- Registros de nacimiento (Nombre, da Nac. Padre, Madre)
- Registros de empleos (Nombre, direcc, fecha, estudios, sueldo) etc.
Los registros pueden ser de long. Fija o variable
Los registros organizados en campos denominan registros lgicos
Los registros de datos organizan frecuentemente un ejercicio de campos, registros y
archivos.
Un registro es diferente de un arreglo lineal por los siguiente:
- Un registro puede ser un conjunto de datos no homogneos es decir los elementos de
cada registro puede ser de diferente tipo.
- Los elementos de un registro se referencia a travs del nombre de cada atributo, por lo
que no existe un orden natural de sus elementos.
Ejemplos:
:
REGISTRO
=.
De un registro de asistencia mdica de maternidad donde se registra nacimientos
1 Recin Nacido
2 Nombre
2 Sexo
2 Da nacimiento
3 da
3 mes
3 ao
2 Padre
3 Nombre
3 Edad
2 Madre
3 Nombre
3 Edad
El Nmero de izquierda de identificador recibe el nombre de N de nivel.
Acceder a un elemento determinado de un registro
Ejemplo:
Recin nacido como un archivo con 20 registro: en este caso cada elemento del registro se
convierte en un arreglo de 20 elementos.
Algunos lenguajes referencian el sexo del recin nacido, como:
Recin_nacido.sexo [6]
Otro, edad del padre del 6
Recin_nacido.padre.edad [6].
ARREGLO COMO REGISTROS
Los elementos pueden almacenarse en un array.
Suponemos una lista de miembros de una organizacin con:
Nombre, edad, sexo, tf.
JUAN
LUS
ROSA
1
2
3
22
23
16
M
M
F

284952
280011
214950

Nombre Edad Sexo Tf.
=/
Para un determinado ndice K los elementos NOMBRE [K]
Edad[K], Sexo [k], TF [K] Pertenecen al mismo registro.
Datos almacenados en array paralelos (cuatro)
Ejer!"!"o
Usando la estructura alumno:
struct alumno{
int cod;
char nom[30];
char sexo;
float prom;
};
Desde un men de opciones, permitir aadir alumnos, y listar.
#include <cstdlib>
#include <iostream>
//using namespace std;
# define max 50
struct alumno{
int cod;
char nom[30];
char sexo;
float prom;
};
int menu();
void carga(struct alumno *p, int * pn);
void lista(struct alumno p[], int x);
int main(int argc, char *argv[])
{
int n=0, op;
alumno d[max];
do
{
op=menu();
switch(op)
{
case 1: carga(d,&n); break;
//case 2: ordena(d,n); break;
case 3: lista(d,n); break;

}
}while(op!=4);
system("PAUSE");
return EXT_SUCCESS;
}
int menu()
{ int op1;
=5
cout<<"\n MENU ";
cout<<"\n 1. Carga ";
cout<<"\n 2. Ordena ";
cout<<"\n 3. Listado ";
cout<<"\n 4. Salir ";
cout<<"\n Seleccione Opcion: ";
cin>>op1;
return op1;
}
void carga(struct alumno *p, int *pn)
{
int k;
struct alumno e;
cout<<"cuantos alumnos desea ingresar:";
do
{
cin>>*pn;
}while(*pn<1 || *pn>max);
for(k=0; k<*pn;k++)
{
cout<<"datos del alumno N."<<k+1<<"\n\n";
cout<<"codigo :";
cin>>e.cod;
fflush(stdin);
cout<<"nombre:";
cin.getline(e.nom,30); // o, gets(e.nom). ngresar a lo sumo 28 caracteres.
fflush(stdin);
cout<<"sexo : m - f";
do
{
cin>>e.sexo;
}while(e.sexo!='m'&& e.sexo!='f');
cout<<"promedio: " ;
do
{
cin>>e.prom;
}while(e.prom<0 || e.prom>20);
*(p+k)=e;
}
}
void lista(struct alumno p[], int x)
{
int k;
cout<<" LSTADO DE ALUMNOS "<<endl;
cout<<" CODGO NOMBRE SEXO PROMEDO "<<endl;
for(k=0;k<x;k++)
{
cout<<"\n"<<p[k].cod<<"\t"<<p[k].nom<<"\t\t\t"<<p[k].sexo<<"\t"<<p[k].prom<<endl;
}
}
=7
Ejer!"!"o
Ejer!"!"o
Se pretende representar un tringulo en el espacio tridimensional, pero minimizando el
espacio necesario para almacenarlo. Teniendo en cuenta que un tringulo en el espacio
tridimensional viene determinado por las coordenadas de sus tres vrtices, escribir un
programa con una estructura para representar un tringulo que usando un vector dinmico
almacene el ndice de los tres vrtices (de esta forma se almacena los tres vrtices con tres
enteros en lugar de nueve, ahorrando memoria).
Luego indique si los puntos dados forman o no un triangulo.
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <math.h>
struct Punto{
int CoordX;
int CoordY;
int CoordZ;
};
Punto *Vector;
void LeerVectorPuntos(Punto *Vector,int n);
void MostrarVectorPuntos(Punto *Vector,int n);
int estriangulo(Punto *p);
int main(int argc, char *argv[])
{
int n,rpta;
cout<<"\n REPRESENTANDO TRANGULO EN EL ESPACO TRDMENSONAL";
do{
cout<<"\n Vertices del triangulo en el espacio tridimensional(3):";
cin>>n;
}while(n!=3);
Vector=new Punto[3];
LeerVectorPuntos(Vector,n);
MostrarVectorPuntos(Vector,n);
=8
rpta=estriangulo(Vector);
if(rpta==1)
cout<<"\n LOS PUNTOS DADOS FORMAN UN TRANGULO";
else
cout<<"\n LOS PUNTOS DADOS NO FORMAN UN TRANGULO";
getche();
return 0;
}
void LeerVectorPuntos(Punto *Vector,int n)
{
int i;
for(i=0;i<n;i++)
{cout<<"\n COORDENADAS X,Y,Z: "<<"del punto "<<i+1<<": ";
cin>>Vector[i].CoordX>>Vector[i].CoordY>>Vector[i].CoordZ;
}
}
void MostrarVectorPuntos(Punto *Vector,int n)
{int i;
for(i=0;i<n;i++){
cout<<"\n COORDENADAS DEL PUNTO: "<<i+1;
cout<<": ("<<Vector[i].CoordX<<","<<Vector[i].CoordY<<","<<Vector[i].CoordZ<<")";
}
}
int estriangulo(Punto *p)
{
double d1,d2,d3;
d1=sqrt(pow((p[1].CoordX-p[0].CoordX),2)+pow((p[1].CoordY-
p[0].CoordY),2)+pow((p[1].CoordZ-p[0].CoordZ),2));
d2=sqrt(pow((p[2].CoordX-p[0].CoordX),2)+pow((p[2].CoordY-
p[0].CoordY),2)+pow((p[2].CoordZ-p[0].CoordZ),2));
d3=sqrt(pow((p[2].CoordX-p[1].CoordX),2)+pow((p[2].CoordY-
p[1].CoordY),2)+pow((p[2].CoordZ-p[1].CoordZ),2));
if(d1<d2+d3 && d2<d1+d3 && d3<d1+d2)
return 1;
else
return 0;
}
=<
>. ARC9I0OS
En C/C++/DevC++, encontramos archivos de tipo texto, binario.
En general los archivos podemos reconocer como registros relacionados entre si con
aspectos en comn y organizado para un propsito especfico.
Organizar los datos de tal manera que se pueden: actualizar recuperar, borrar insertar
Tienen: nombre, tamao(peso), fecha, etc.
CLA0E+ (ndicativo)
Clave que identifica el registro y lo diferencia de otros registros
Ejemplos: de clave: N de identificacin
Ejercicio 1:
Usando la estructura empleado con los campos: cdigo, nombre, y sueldo, crear un archivo
empleados.dat, que permita realizar las siguientes acciones en el siguiente:
MENU
1. Adicin de un empleado
2. Modificar por cdigo
3. Consultar por cdigo
4. Eliminar por cdigo
5. Listado
6. Salir

Seleccione opcin:
Nota+
El programa siguiente solo permite: adicin de un empleado, y listado.

#include <cstdlib>
#include <iostream>
//#include <fstream>
using namespace std;
struct empleado{
char codigo[10];
char nombre[30];
float sueldo;
};
empleado Reg;
FLE *almacen1;
int menu();
void adicionar_empleado();
void listado();
int main(int argc, char *argv[])
{ int op;
do{
op=menu();
switch(op)
{
case 1: adicionar_empleado(); break;
case 2: break;
case 3: break;
case 4: break;
==
case 5: listado();break;
case 6: break;
default: cout<<"\n Error, pulse: 1,2,3,4,5,6";break;
}
}while(op!=6);
cout<<"\n";
system("PAUSE");
return EXT_SUCCESS;
}
int menu()
{
int op1;
cout<<"\n MENU";
cout<<"\n 1. Adicion de un empleado";
cout<<"\n 2. Modificar por codigo";
cout<<"\n 3. Consultar por codigo";
cout<<"\n 4. Eliminar por codigo";
cout<<"\n 5. Listado";
cout<<"\n 6. Salir";
cout<<"\n Seleccione Opcion:";
cin>>op1;
return op1;
}
void adicionar_empleado()
{ char R;
almacen1=fopen("D:\\algoritmos1\\empleados.dat","ab");
if(almacen1!=NULL)
{
do{
cin.clear();
cout<<"\n ngreso de datos de empleado \n";
cout<<"\n Codigo:";
cin>>Reg.codigo;
fflush(stdin);
cout<<"\n Nombre:";
cin.get(Reg.nombre,30); //ngresar a lo sumo 28 caracteres
fflush(stdin);
cout<<"\n Sueldo:";
cin>>Reg.sueldo;
fwrite(&Reg,sizeof(Reg),1,almacen1);
cout<<"\n Continuar <s/n>:";
do{
cin>>R;
R=toupper(R);
}while(R!='S' && R!='N');
}while(R=='S');
}
else
cout<<"\n No pudo crearse el archivo empleados.dat \n";
fclose(almacen1);
}
void listado()
{
almacen1=fopen("D:\\algoritmos1\\empleados.dat","rb");
if(almacen1!=NULL)
{
cin.clear();
=>
cout<<"\n LSTADO DE EMPLEADOS ";
cout<<"\n ====================";
cout<<"\n CODGO"<<"\t\t"<<"NOMBRE "<<"SUELDO ";
cout<<"\n ===================================================";
fread(&Reg,sizeof(Reg),1,almacen1);
while(!feof(almacen1)){
//cout<<"\n";
//printf("\n%3c\t%28s\t%8.2f",Reg.codigo,Reg.nombre,Reg.sueldo);
cout<<"\n"<<Reg.codigo<<"\t"<<Reg.nombre<<"\t\t"<<Reg.sueldo;
fread(&Reg,sizeof(Reg),1,almacen1);
}
cout<<"\n";
system("PAUSE");
}
else
cout<<"\n El archivo empleados.dat no existe \n";
fclose(almacen1);
}
>@
Ejercicio 2:
Escribir un programa que gestione una agenda de direcciones, utilizando archivos. Los
datos de la agenda utiliza estructuras, la cual tiene los siguientes campos: nombre,
direccin, telfono fijo, telfono mvil, direccin de correo electrnico. El programa debe
permitir aadir una nueva entrada a la agenda, mostrar agenda, modificar contacto, buscar,
y eliminar una entrada.
#include <iostream>
//#include <stdlib.h>
#include <cstdlib>
#include <stdio.h>
#include <conio.h>
//#include <conio.c>
#include <string>
#include <iomanip>
#include <cmath>
#include <ctype.h>
using namespace std;
struct PERSONA{
char nom[20];
char ape1[20];
char ape2[20];
char direc[30];
char fijo[10];
char movil[15];
char msn[30];
};
void CrearRegistro(FLE *F, PERSONA A);
void MostrarRegistro(FLE *F, PERSONA A);
void BuscarNombre(FLE *F, PERSONA A);
void BuscarApellidoPaterno(FLE *F, PERSONA A);
void BuscarApellidoMaterno(FLE *F, PERSONA A);
void BuscarMovil(FLE *F, PERSONA A);
void EditarRegistro(FLE *F, FLE *G, PERSONA A);
void EliminarRegistro(FLE *F, FLE *G, PERSONA A);
void msjerror();
void datos(PERSONA A);
void MenuBusqueda();
void MenuPrincipal();
int main(int argc, char *argv[])
{
//textbackground(YELLOW);
//system("color",4);
system("cls");
//textcolor(GREEN);
FLE M;
FLE N;
PERSONA Z;
int op,op2;
do{
system("cls");
MenuPrincipal();
>1
cout<<"\nngrese su opcion ---> ";
cin>>op;
switch(op){
case 1:
system("cls");
CrearRegistro(&M,Z);
system("pause");
system("cls");
cout<<"\n\nPERSONA GUARDADA
CORRECTAMENTE!!!!!!\n\n";
system("pause");
break;
case 2:
system("cls");
MostrarRegistro(&M,Z);
system("pause");
break;
case 3:
system("cls");
EditarRegistro(&M,&N,Z);
system("pause");
break;
case 4:
do{
system("cls");
MenuBusqueda();
cout<<"\n\nngrese su opcion ---> ";
cin>>op2;
switch(op2){
case 1:
system("cls");
BuscarNombre(&M,Z);
system("pause");
break;
case 2:
system("cls");
BuscarApellidoPaterno(&M,Z);
system("pause");
break;
case 3:
system("cls");
BuscarApellidoMaterno(&M,Z);
system("pause");
break;
case 4:
system("cls");
BuscarMovil(&M,Z);
system("pause");
break;
case 5:
break;
default :
system("cls");
cout<<"\n\nNGRESE OPCON
CORRECTA !!!!!\n\n";
system("pause");
break;
>.
}
}while(op2!=5);
break;
case 5:
system("cls");
EliminarRegistro(&M,&N,Z);
system("pause");
break;
case 6:
exit(1);
break;
default :
system("cls");
cout<<"\n\nNGRESE OPCON CORRECTA !!!!!!!\n\n";
system("pause");
break;
}
}while(op);
system("PAUSE");
//return 0;
return EXT_SUCCESS;
}
void MenuBusqueda()
{
cout<<"**************************************************\n";
cout<<"************* MENU DE BUSQUEDA ****************\n";
cout<<"**************************************************\n";
cout<<"****** 1.- BUSQUEDA POR NOMBRE ******\n";
cout<<"****** 2.- BUSQUEDA APELL. PATERNO ******\n";
cout<<"****** 3.- BUSQUEDA APELL. MATERNO ******\n";
cout<<"****** 4.- BUSQUEDA TELEFONO MOVL ******\n";
cout<<"****** 5.- SALR ******\n";
cout<<"**************************************************\n";
cout<<"**************************************************\n";
}
void MenuPrincipal()
{
cout<<"**************************************************\n";
cout<<"**************** MENU PRNCPAL **************\n";
cout<<"**************************************************\n";
cout<<"****** 1.- AGREGAR CONTACTO ******\n";
cout<<"****** 2.- MOSTRAR AGENDA ******\n";
cout<<"****** 3.- MODFCAR CONTACTO ******\n";
cout<<"****** 4.- BUSCAR CONTACTO ******\n";
cout<<"****** 5.- ELMNAR CONTACTO ******\n";
cout<<"****** 6.- CERRAR AGENDA ******\n";
cout<<"**************************************************\n";
cout<<"**************************************************\n";
}
void CrearRegistro(FLE *F, PERSONA A)
{
cout<<"\n\n Nombre ---> ";
cin.seekg(0,ios::end);
cin.clear();
cin.getline(A.nom,20);
>/
cout<<" Apellido Paterno ---> ";
cin.getline(A.ape1,20);
cout<<" Apellido Materno ---> ";
cin.getline(A.ape2,20);
cout<<" Direccion ---> ";
cin.getline(A.direc,30);
cout<<" Telefono fijo ---> ";
cin.getline(A.fijo,10);
cout<<" Telefono movil ---> ";
cin.getline(A.movil,15);
cout<<" correo electronico --> ";
cin.getline(A.msn,30);
F=fopen("AGENDA.dat","a+");//abrimos el archivo(creamos)
if(F==NULL){
msjerror();
}
//guardamos la estructura en un registro
fwrite(&A,sizeof(A),1,F);
fclose(F);//cerramos el archivo
}
void MostrarRegistro(FLE *F, PERSONA A)
{
F=fopen("AGENDA.dat","a+");
if(F==NULL)
msjerror();
//cargamos el 1er registro a la RAM
fread(&A,sizeof(A),1,F);
cout<<"\n\t*******************************\n";
cout<<"\t*** AGENDA ***\n";
cout<<"\t*******************************\n\n";
cout<<"\n=========================================\n";
while(feof(F)==0){
datos(A);
fread(&A,sizeof(A),1,F);//cargamos el siguiente registro a la RAM
}
cout<<"\n=========================================\n";
fclose(F);//cerramos el archivo
}
void BuscarNombre(FLE *F, PERSONA A)
{
char aux[20];
int hallado=0;
cout<<"\nNombre a buscar --> ";
cin.seekg(0,ios::end);
cin.clear();
cin.getline(aux,20);
F=fopen("AGENDA.dat","a+");//abrimos el archivo
if(F==NULL)
msjerror();
fread(&A,sizeof(A),1,F);//cargamos el registro a la RAM
>5
while(feof(F)==0){
if(strcmp(aux,A.nom)==0){
datos(A);
hallado=1;
}
fread(&A,sizeof(A),1,F);
}
if(hallado==0){
cout<<"\n\nPERSONA NO ENCONTRADA !!!!!\n\n";
}
fclose(F);//cerramos el archivo
}
void BuscarApellidoPaterno(FLE *F, PERSONA A)
{
char aux[20];
int hallado=0;
cout<<"\nApellido Paterno a buscar --> ";
cin.seekg(0,ios::end);
cin.clear();
cin.getline(aux,20);
F=fopen("AGENDA.dat","a+");//abrimos el archivo
if(F==NULL)
msjerror();
fread(&A,sizeof(A),1,F);//cargamos el registro a la RAM
while(feof(F)==0){
if(strcmp(aux,A.ape1)==0){
datos(A);
hallado=1;
}
fread(&A,sizeof(A),1,F);
}
if(hallado==0){
cout<<"\n\nPERSONA NO ENCONTRADA !!!!!\n\n";
}
fclose(F);//cerramos el archivo
}
void BuscarApellidoMaterno(FLE *F, PERSONA A)
{
char aux[20];
int hallado=0;
cout<<"\nApellido Materno a buscar --> ";
cin.seekg(0,ios::end);
cin.clear();
cin.getline(aux,20);
F=fopen("AGENDA.dat","a+");//abrimos el archivo
if(F==NULL)
msjerror();
fread(&A,sizeof(A),1,F);//cargamos el registro a la RAM
while(feof(F)==0){
if(strcmp(aux,A.ape2)==0){
datos(A);
>7
hallado=1;
}
fread(&A,sizeof(A),1,F);
}
if(hallado==0){
cout<<"\n\nPERSONA NO ENCONTRADA !!!!!\n\n";
}
fclose(F);//cerramos el archivo
}
void BuscarMovil(FLE *F, PERSONA A)
{
char aux[20];
int hallado=0;
cout<<"\nTelefono Movil a buscar --> ";
cin.seekg(0,ios::end);
cin.clear();
cin.getline(aux,20);
F=fopen("AGENDA.dat","a+");//abrimos el archivo
if(F==NULL)
msjerror();
fread(&A,sizeof(A),1,F);//cargamos el registro a la RAM
while(feof(F)==0){
if(strcmp(aux,A.movil)==0){
datos(A);
hallado=1;
}
fread(&A,sizeof(A),1,F);
}
if(hallado==0){
cout<<"\n\nPERSONA NO ENCONTRADA !!!!!\n\n";
}
fclose(F);//cerramos el archivo
}
void EditarRegistro(FLE *F, FLE *G, PERSONA A)
{
char aux[20];
cout<<"\nNombre a Editar --> ";
cin.seekg(0,ios::end);
cin.clear();
cin.getline(aux,20);
F=fopen("AGENDA.dat","r+");//abrimos el archivo
if(F==NULL)
msjerror();
G=fopen("auxiliar.dat","a+");//creamos-abrimos un archivo temporal
if(G==NULL)
msjerror();
int hallado=0;
fread(&A,sizeof(A),1,F);//cargamos el 1er registro en la RAM
while(feof(F)==0){
if(strcmp(aux,A.nom)==0){
datos(A);
cout<<"\nNuevo Nombre --> ";
cin.seekg(0,ios::end);
>8
cin.clear();
cin.getline(A.nom,20);
cout<<"Nuevo Apellido Paterno ---> ";
cin.getline(A.ape1,20);
cout<<"Nuevo Apellido Materno ---> ";
cin.getline(A.ape2,20);
cout<<"Nueva Direccion --> ";
cin.getline(A.direc,30);
cout<<"Nuevo Telefono fijo ---> ";
cin.getline(A.fijo,10);
cout<<"Nuevo Telefono movil ---> ";
cin.getline(A.movil,15);
cout<<"Nuevo correo electronico --> ";
cin.getline(A.msn,30);
fwrite(&A,sizeof(A),1,G);//guardamos el registro en el archivo G
hallado=1;
}
else {
fwrite(&A,sizeof(A),1,G);//guardamos el registro en el archivo G
}
fread(&A,sizeof(A),1,F);//cargamos el sieguiente registro a la RAM
}
if(hallado==0){
system("pause");
system("cls");
cout<<"\n\nEsta Persona no existe !!!!\n\n";
}
else {
system("pause");
system("cls");
cout<<"\n\nRegistro Editado con exito!!!!!\n\n";
}
//cerramos los archivos
fclose(F);
fclose(G);
remove("AGENDA.dat");//eliminamos el archivo AGENDA.dat
rename("auxiliar.dat","AGENDA.dat");//cambiamos de nombre aux.dat a AGENDA.dat
}
void EliminarRegistro(FLE *F, FLE *G, PERSONA A)
{
char aux1[20],aux2[20],aux3[20];
cout<<"\nDATOS DE CONTACTO A ELMNAR :\n";
cout<<"\nNombre --> ";
cin.seekg(0,ios::end);
cin.clear();
cin.getline(aux1,20);
cout<<"\nApellido Paterno ---> ";
cin.getline(aux2,20);
cout<<"\nApellido Materno ---> ";
cin.getline(aux3,20);
F=fopen("AGENDA.dat","r+");//abrimos el archivo AGENDA.dat
if(F==NULL)
><
msjerror();
G=fopen("auxiliar.dat","a+");//creamos-abrimos un archivo auxiliar
if(G==NULL)
msjerror();
int hallado=0;
fread(&A,sizeof(A),1,F);//cargamos un registro a la RAM
while(feof(F)==0){
if(strcmp(aux1,A.nom)!=0 || strcmp(aux2,A.ape1)!=0 || strcmp(aux3,A.ape2)!
=0){
fwrite(&A,sizeof(A),1,G);
}
if(strcmp(aux1,A.nom)==0 && strcmp(aux2,A.ape1)==0 &&
strcmp(aux3,A.ape2)==0)
hallado=1;
fread(&A,sizeof(A),1,F);
}
fclose(F);
fclose(G);
remove("AGENDA.dat");
rename("auxiliar.dat","AGENDA.dat");
if(hallado==0){
system("pause");
system("cls");
cout<<"\n\nPERSONA NO ENCONTRADA _!!!!!\n\n";
}
else{
system("pause");
system("cls");
cout<<"\n\nPERSONA ELMNADA CON EXTO_!!!!!!\n\n";
}
}
void msjerror()
{
cout<<"\n\nNO SE PUEDE ABRR EL ARCHVO \n\n";
system("pause");
exit(1);
}
void datos(PERSONA R)
{
cout<<"\n------------------------------\n";
cout<<"\tNOMBRE : "<<R.nom<<endl;
cout<<"\tAPELLDO PATERNO : "<<R.ape1<<endl;
cout<<"\tAPELLDO MATERNO : "<<R.ape2<<endl;
cout<<"\tDRECCON : "<<R.direc<<endl;
cout<<"\tTELEFONO FJO : "<<R.fijo<<endl;
cout<<"\tTELEFONO MOVL : "<<R.movil<<endl;
cout<<"\tCORREO ELECTRONCO : "<<R.msn<<endl;
cout<<"\n------------------------------\n";
}
11. LISTAS ENLA]ADAS
>=
Estructura de datos dinmica, que es una coleccin de elementos llamados nodos,
dispuestos uno a continuacin de otro, cada uno de ellos conectado al siguiente elemento
por un enlace o "puntero.
Los elementos se almacenan en posiciones de memoria que no son contiguas o
adyacentes.
T"&os+
Listas simplemente enlazadas
Listas doblemente enlazadas
Lista circular simplemente enlazada
Lista circular doblemente enlazada
L"stas s"&$eente en$aRadas
Operaciones: declaracin de los tipos nodo, puntero a nodo, clase nodo; declaracin de
clase lista, creacin; insertar elementos en una lista, buscar, eliminar, recorrer una lista
enlazada; comprobar si la lista est vaca.
De!$ara!"#n de $os t"&os nodo D &untero a nodo D !$ase nodo
En C++, se puede definir un nodo mediante las palabras reservadas struct o class.
struct Nodo { class Nodo {
public
int dato; int dato;
Nodo *enlace; Nodo *enlace;
// constructor
}; };
Declaracin e implementacin de una clase Nodo que contiene informacin de tipo
elemento y el siguiente de tipo puntero a nodo.
class Nodo typedef class Nodo typedef double Elemento;
{ { class Nodo
public: public: {
int info; int info; public:
Nodo* sig; Nodo *sig; Elemento info;
}; }NODO; Nodo *sig;
};
Una clase Nodo tiene dos atributos protegidos que son el elemento e y Sig que es un
puntero a la propia clase Nodo. Ambos atributos sirven para almacenar la informacin del
nodo, y la direccin del siguiente nodo. Se declaran como funciones miembro tres
constructores. Estos constructores son: el constructor por defecto, el constructor que
inicializa el atributo x del Nodo al valor de x, y pone el atributo Sig a Null; el constructor, que
inicializa los dos atributos del Nodo. Las funciones miembro encargadas de !tener y Poner
tanto el elemento e como el puntero Sig son: Telemento OE(); void PE(Telemento e); Nodo
*Osig(); y void Psig(Nodo *p).. El destructor, se declara por defecto. El tipo elemento de la
clase Nodo es un entero, pero al estar definido en un typedef, puede cambiarse para que
almacene otro tipo de informacin.
#include <cstdlib>
#include <iostream>
using namespace std;
typedef int Telemento;
!$ass NodoM
protected:
Telemento e;
>>
Nodo *Sig;
public:
Nodo(){} // Constructor vacio
Nodo(Telemento x); //Constructor
Nodo(Telemento x, Nodo* s); //Constructor
~Nodo(){} // Destructor
Telemento OE(); // Obtener elemento
void PE(Telemento e); // Poner elemento
Nodo *OSig(); // Obtener siguiente
void PSig(Nodo *p); // Poner siguiente
NE
Nodo::Nodo(Telemento x)
{ // constructor inicializa e a x y Sig a Null
e=x;
Sig=NULL;
}
Nodo(Telemento x, Nodo* s)
{ // constructor inicializa e a x y Sig a s
e=x;
Sig=s;
}
Telemento Nodo::OE()
{ // obtiene una copia del atributo e
return e;
}
void Nodo::PE(Telemento x)
{ // pone el atributo e a x
e=x;
}
Nodo* Nodo::OSig()
{ // obtiene una copia del atributo sig
return Sig;
}
void Nodo::PSig(Nodo *p)
{ // Pone el atributo Sig a p
Sig=p;
}
RE4ERENCIAS
1@@
1. H.M Deitel, P.J. Deitel. C'' !oo Prograar. Edit. Prentice Hall
Hispanoamericana, S.A 2012. Mxico.
2. Garca, Flix; Carretero, Jess et al. Prograa!"#n en Lenguajes
Estru!turados. Edit. Paraninfo. 2008. Espaa. SBN: 978-84-9732-549-3. 447p.
3. Ceballos Sierra, Fco. Javier. En!"!$o&ed"a de$ $enguaje C''. 2009. Edit.
Alfaomega Ra-Ma. Mxico. SBN: 978-607-7686-43-9. 856p.
4. Cair, Osvaldo. METODOLOG^A DE LA PROGRAMACIN, 2011. Edit.
Alfaomega. Mxico. SBN: 970-15-1100-X. 462p.
5. Joyanes, Luis; Zahonero, Luis. Prograa!"#n en CL C''L :a%a D *ML. Edit. Mc
Graw Hill. 2010.. Mxico.
1@1
INDICE
PYg.
1. Conceptos Generales de Programacin ................................................... 1
2. C/C++/DevC++ ........................... 11
3. Estructuras de Control Selectivas .................... 35
4. Estructuras Repetitivas .......................... 44

5. Punteros ............................... 63
6. Funciones ............................... 67
7. Arreglos ................................ 71
8. Registros ............................... 82
9. Archivos ............................... 88
1@.
Agrade!""ento+
A D"osL a "s &adresL a $os
\ue fueron "s a$unosL D
todos $os \ue !o$a,oraron en
$a &resente guBa.
1@/
*NI0ERSIDAD NACIONAL MA-OR DE SAN MARCOS
4AC*LTAD DE INGENIERIA DE SISTEMAS E IN4ORMATICA
E.A.P INGENIERIA DE SISTEMAS
Notas del Curso Algortmica I

Lu"s Guerra Grados
Agosto C .@15
1@5

Vous aimerez peut-être aussi