Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Software
Componente lógico del computador. Conjunto de programas para que el computador
funcione.
Entre ellos se tiene: Sistemas operativos, compiladores/intérpretes (Lenguajes de
programación), editores de texto, utilitarios, graficadores y otros.
Lenguajes de Programación
Sirven para escribir programas que permitan la comunicación usuario/máquina.
Lenguajes de máquina (0 / 1)
Lenguajes de bajo nivel (Ensamblador)
Lenguajes de alto nivel
Primeros lenguajes
Cobol, Fortran IV, Basic, Logo
Posteriores
C, C++, Pascal, Visual Basic, Java, C
Extendidos
Ada-95, Modula-2, Prolog, LISP, Smalltalk, Eiffel
Otros visuales
Borland, Delphi, SQL, Power Builder
Para Internet
Java, HTML, XML, Java Script, Visual J, C, ASP Net, PHP, Ajax, Ruby, etc.
Compilador
Programa de computadora que permite traducir de un programa fuente a un programa
objeto.
Ejemplo:
DevC++ de Bloodshed y se ejecuta bajo Windows
GCC de GNU, se ejecuta bajo Linux y Unix
Programa
Conjunto de instrucciones que indican al computador qué debe hacer. Programa o software
son conceptos similares.
Programa fuente: instrucción escrita por el programador o desarrollador en un
lenguaje de programación.
Programa objeto: instrucciones en lenguaje máquina producida por el computador.
1
1.1 Algoritmo
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
- Idea
- Razonamiento
- Bosquejo B
Problema
- Matemático
- Lógico
Ejemplo:
Teniendo las edades de Juan y José debe determinar lo siguiente:
1. Promedio de edades
2. Quién es mayor
Solución:
Edad de Juan = X años 1°
Edad de José = Y años 2°
Recomendaciones
Un algoritmo debe ser lo más corto posible.
Si un problema grande, para su solución, se divide en partes pequeñas, entonces es más
fácil de resolver.
2 1
3
n
...
“Divide y vencerás...”
2
Dado el enunciado de un problema, se puede elaborar un algoritmo, seudo código, y
posteriormente el programa.
Enunciado
V
V
V
Algoritmo (Crear
Diseñar)
seudo código
Enunciado
Problema
“C”
“Delphi”
Programa “LISP”
“Prolog”
“PHP”
Nombre variable
3
Entender el problema
¿Qué datos tengo? Datos Diagrama de Flujo
¿Qué necesito?
Procesar Algoritmo
Pseudocódigo
Bajo símbolos inventados se puede
simular varios lenguajes.
Herramienta utilizada en el diseño
del programa para describir la
solución del problema en forma de
algoritmos, dirigido a la máquina,
haciendo uso del lenguaje natural
lógico, sometido a ciertas reglas.
NUMERICAS
CONSTANTES
ALFANUMERICAS
DATOS
VARIABLES
NUMÉRICA
VARIABLES CARACTER
ALFANUMÉRICA
STRING
Valor 5
Nombre
de la Definición
variable
Otros ejemplos
4
Ej. Valor = 5
i ) V. Numéricas reales
ii) V. Numéricas enteras
Variables alfanuméricas:
Contienen letras y números: “A,B……..Z,a,b ….z,0,1,2 …………………………, 9”
La condición es que estén encerrados entre comillas.
Jose = “Jose”
Nomb. de Representa
variable al dato
Las variables alfanuméricas son las mismas que las variables tipo cadena, string, character,
cadena.
Variables lógicas:
.T., .F.
.V., .F.
Los puntos entre T, V, F sirven para identificar un valor lógico.
La lógica es una herramienta que usa el computador.
SISTEMA BINARIO
0 .F. 0FF
1 .T. ON
1.5 OPERADORES
OPERADORES ARITMETICOS
( ) Paréntesis
^ Circunflejo (Potencia)
** Potencia
* Multiplicar
/ Slash (Dividir)
+, - Suma, Resta
= Igualar
div división entera
mod resto de una división
OPERADORES RELACIONALES
5
OPERADORES LÓGICOS
.AND. Incluyente
.OR. Excluyente
.NOT. Negación
AND OR
VV V VV V
VF F VF V
FV F FV V
FF F FF F
6
Seudo código
Juan = X Jose = Y
X Edad de Juan
Y Edad de José
Algoritmo
X + Y Edad Promedio
2
Seudo código
Juan <- 0
Jose <- 0
Leer (Jose)
Leer (Juan)
Prom <- (Jose + Juan)/ 2
Escribir ( PROM )
Otra forma
EJose <- 0
EJuan <- 0
Escribir (‘Ingrese edad de José:’)
Leer (EJose)
Escribir (‘Ingrese edad de Juan:’)
Leer ( EJuan)
/*Prom: contiene el resultado*/
Prom <- (EJose + EJuan)/2
Escribir ( ‘El promedio de ambas edades:’, Prom)
Proceso (operaciones)
- Asignación
- Operación Aritmética
Condicional
7
Líneas de unión
Indican la dirección
que siguen los datos
Impresora
Teclado
Sub-programas
Conector de
página
8
Problema:
Dados dos números elaborar un seudo código(algoritmo) para hallar la suma, y mostrar la
suma de dichos números.
A Recibidor 1er Nº
B Recibidor 2º Nº INICIO
C A+B
A <== 0
Seudo código B <== 0
C <== 0
ALGORITMO Suma
VARIABLES: A,B,C, enteros
Inicio Leer
A
A0
B0
C0
Leer
Escribir ‘Ingresar un valor’ B
Leer (A)
Escribir ‘Ingresa otro valor’
C <== A+B
Leer (B)
CA+B
Escribir( ‘La suma es:’, C)
‘La suma
Fin-inicio es ‘, C
FIN
Un algoritmo consta de 2 partes
1. Cabecera de programa
2. Bloque algoritmo
Entrada de Datos
Leer <variable>
9
Ej.
Leer (A)
Leer (A,B)
- Programación Lineal
-
- Programación modular
-
- Programación estructurada
-
- Programación orientada a objetos
POO es una técnica o estilo de programación que utiliza objetos como bloque esencial de
construcción.
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 colección de datos, junto con las funciones asociadas, utilizadas para operar
sobre esos datos.
- Herencia
- encapsulación
- polimorfismo
- clases
- métodos
- mensajes
10
2. C/C++/DevC++
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 propósito general. Basado en el lenguaje C, fue
desarrollado por Bjarne Stroustrup en 1985 en los mismos laboratorios Bell.
2.1 Características
1. Es de propósito general, utilizado para una gran variedad de tareas de todo tipo. Sistemas
científicos, financieros, programas de educación, Gestión Empresarial, de pasatiempo,
etc.
2. Es de alto y bajo nivel con más características 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 más fácil leer y entender por el programador.
Alto
goto
print
label
lenguaje C (intérprete)
Bajo
MOV
RCL
NOP
3. Es estructurado.
4. Se debe seguir un orden y cumplir ciertas reglas para el diseño de programas.
5. Permite el diseño modular aumentando la productividad de este lenguaje.
Nota:
Es Estructurado: porque por ejemplo primero se definen las variables y luego son
utilizadas.
Además cuando hay procedimientos que se repiten son incluidos en ellos.
Es no estructurado: cuando conforme se va necesitando se va definiendo las
variables.
Además cuando en la ejecución va y ordena a cualquier lado.
6. Posteriormente orientado a objetos.
IDENTIFICADORES
Los identificadores son una secuencia de caracteres que pueden tener cualquier longitud.
Pero sólo los primeros 32 caracteres serán significativos. Se utilizan para definir: nombres de
constantes, variables, funciones y etiquetas del programa. Los caracteres pueden ser
mayúsculas o minúsculas y se consideran como caracteres diferentes.
a) Debe comenzar con una letra (de la A.......Z) o de (a,....., z) exceptuando el caracter ñ,
además se puede utilizar el carácter de subrayado.
Ej. _23 (Identificador), 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 códigos ASCII, ni vocales acentuadas.
Ej.
Nom
Nom / ape X
Nota1
1ra. – Nota X
nom_ape
nom – ape X
nomb ape X
break X
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.
VARIABLE
Ej.
char op;
char letra;
op = ‘A’;
12
letra = 164; letra = ñ;
Ej.
char op, op2;
op = 65 ; ~ op = ‘A’ ;
op = 65 + 1; ~ op = ‘B’ ;
= 65 + 100 =
op = 165 ~ op = ‘Ñ’ ;
op = ‘A’ + 1 ; ~ op = ‘B’
op = 165 ; ~ op = ‘Ñ’ ;
Almacena al conjunto de los números reales, es decir aquellos que poseen parte decimal
o fraccionario. Su rango de funcionamiento va desde:
-3.4 x 1038 hasta 3.4 x 1038 (7 dígitos)
No existe el modificador unsigned para float.
Ejs:
float nota ;
float pi ;
pi = 3.1416 ;
nota = 10.5 ;
Al igual que el tipo float almacena al conjunto de los números reales, pero su rango de
almacenamiento es mucho mayor.
Ej:
double monto = Ø ;
double cuenta ;
13
long double (8 bytes)
Almacena en el rango de: 3.4 x 10-4932 hasta 2.1 x 104932 (19 dígitos)
SENTENCIA
Son las instrucciones que van a ser ejecutadas y que controlan el flujo de la ejecución de un
programa, toda sentencia termina con un punto y coma ( ; ) el cual significa “fin de instrucción”.
Tipos de sentencias:
Sentencia Simple : Que es simplemente una sola instrucción.
Sentencia Compuesta : bloque de instrucciones ; que es el conjunto de 2 o
mas sentencias entre llaves ({ } ).
OPERADORES :
Son símbolos que indican como deben ser manipulados los datos ;
Se clasifican en :
a) Aritméticos :
( ) paréntesis
/ slash (división) “división entera”
* asterisco (multiplicación)
% Residuo
+ Suma
- Resta
Nota :
Ej.:
float C ;
C = 5/2 C=2
C = 5.ø/2 ; C = 2.5
14
C = 8*2%4 resto C=Ø
C = 8+2/2 ; C=9
C = (8+2)/2 C=5
b) Operadores Lógicos :
c) Relacionales :
> Mayor
< Menor
>= mayor Igual
! = Diferente
= = Igual
Ej. int a ;
d) Operadores de Asignación :
= Asignación simple
++ incremento
-- Decremento
*= Multiplicación mas asignación
/= División mas asignación
%= Módulo mas asignación
+= suma mas Asignación
-= Resta mas asignación
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
15
°
°
°
# define identificador valor
°
°
using namespace std;
declaraciones globales ;
°
°
declaraciones de funciones;
{
declaraciones locales ;
°
°
°
instrucciones ;
°
°
°
}
funcion _1 ( )
{
declaraciones locales;
°
°
°
instrucciones ;
°
°
°
}
°
°
°
°
°
funcion_N( )
{
declaraciones locales ;
°
°
°
°
instrucciones
°
°
°
°
}
16
Es utilizado para incorporar (incluir) archivos externos de funciones (librerías 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>
# define PI 3.14
# define notamax 20
Declaraciones globales
Son identificadores que podrán ser utilizadas en cualquier función del programa.
Las constantes son variables globales.
Declaraciones Locales
Son identificadores que podrán ser utilizados solo en la función en que fueron declarados.
Sentencias o Instrucciones
Son las instrucciones que controlaran el flujo de la ejecución de un programa.
int main ( )
Es la 1ra función 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.
función_1 ( ) .....................................funcion _N ( )
Son las funciones, o módulos que pueden existir en todo programa, en la mayoría de los
casos son necesarios.
Declaraciones variables
Declarar una variable implica :
Ej:
int nota ;
int edad, promedio;
int suma = Ø ;
int suma = Ø, nota = Ø ;
suma = nota = Ø
float area ;
Especificadores de formato
Son símbolos especiales que determinaran como deben de capturarse o visualizarse las
variables. Siempre empiezan con el símbolo % y están seguido de uno o más caracteres
permitidos.
Para manejar los enteros, dobles, largos necesitamos de espécificadores como por ejemplo:
Especificador Tipo
17
%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)
Función cprintf
Similar a printf se utiliza para visualizar atributos de video (ej: subrayado, negrito, colores), se
encuentra en la librería conio.h.
Entradas y salidas
En c++ la entrada y salida se lee y escribe en flujos (streams). Cuando iostream.h se incluye
en un programa , diferentes flujos estándar son definidos automáticamente . El flujo cin se
utiliza para la entrada , que normalmente se lee de teclado. El flujo cout se utiliza para salida
y, normalmente , se envía a la pantalla del usuario
Salida (cout)
El operador de inserción , <<, inserta datos en el flujo cout que los visualiza en la pantalla del
equipo. Es posible utilizar una serie de operadores, <<, en cascada.
C++ utiliza secuencias de escape para visualizar caracteres que no están representados por
símbolos tradicionales. Entre las mas usadas están : linea.nueva linea (\ n) , tabulacion (\ t) y
alarma (\ a). Una lista de las secuencias de escape se muestra en la tabla 1.1.
Ej
La instrucción anterior salta de la línea , escribe en otra línea error , salta de línea escribe
pulsar una tecla para continuar y saltar de línea. Es decir produce la siguiente salida :
Error
Pulsar una tecla para continuar
18
Secuencia de escape Significado
\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 interrogación
\“ Dobles comillas
\ 000 Numero octal
\xhh Numero hexadecimal
\0 cero , nulo (ASCII 0)
Entrada ( cin )
Las ordenes cin leen dos datos del teclado y los almacenan en las variables número 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( )
19
En el programa estandar , la claúsula 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;
}
namespace identificador{cuerpo_del_espacio_de_nombres.}
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
resolución 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.
#include<iostream>
namespace geo
{
return 2*PI*radio;
}
20
{
Ejercicios secuenciales
*****
* *
* *
* *
******
* *
* *
* *
*****
#include <cstdlib>
#include <iostream>
cout<<“******* \ n” ;
cout<<“* * \ n” ;
cout<<“* * \ n” ;
cout<<“* * \ n” ;
cout<<“******* \ n” ;
cout<<“* * \ n” ;
cout<<“* * \ n” ;
cout<<“* * \ n” ;
cout<<“******* \ n”
system ( “ PAUSE”);
return EXIT_ SUCCESS;
}
Operadores y expresiones
En c++ los operadores fundamentales son: aritméticos, lógicos y relacionales; de
manipulación de bits; condicionales y especiales. Además, se analizan las conversiones de
tipos de datos y las reglas que sigue el compilador cuando concurran en una misma expresión
diferentes tipos de operadores. Estas reglas se conocen como reglas de prioridad y
asociatividad.
Los programas C++ constan de datos, sentencias de programas y expresiones. Una expresión
es, una sucesión de operadores y operandos debidamente relacionados que especifican un
cálculo. C++ soporta un conjunto potente de operadores unitarios, binarios y de otros tipos.
Operador de asignación
21
variable=expresión;
Ejemplo
Programa que declara variables y hace uso de operadores de asignación.
#include<cstdlib>
#include <iostream>
using namespace std;
Operadores aritméticos
Los operadores aritméticos de C++ sirven para realizar operaciones aritméticas básicas.
Siguen las reglas algebraicas típicas de jerarquía o prioridad, clásica de matemáticas. Estos
operadores se aprecian también en la tabla 1.3.
22
- Resta Resta b-c
* Producto Producto x*y
/ División entera: Cociente División en coma flotante b/5
% División entera: Resto b%5
Los paréntesis se pueden utilizar para cambiar el orden usual de evaluación de una expresión
determinada por su prioridad y asociatividad. La prioridad de los operadores y su asociatividad
se recogen en la tabla 1.4
5 * (10 – 2 * 4 + 2) -2
5 * (10 – 8 + 2) -2
5 * 4 -2
20- 2
18
7*5-6%4*4+9
35-6%4*4+9
35-2*4+9
35-8+9
27+9
36
15*14-3*7
210-3*7
210-21
189
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
23
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;
cout<<”radio=”<<radio<<endl;
cout<<”longitud=”<<longitud<<endl;
cout<< “area = “<< area <<endl;
system(“PAUSE”);
return EXIT_ SUCCESS;
}
EJEMPLO
Desglosar cierta cantidad de segundos introducida por teclado en su equivalente en
semanas, día, horas, minutos y segundos.
El programa lee el numero de segundos y realiza las conversiones, teniendo en cuenta que
una semana tiene 7 días , un día tiene 24 horas , una hora 60 minutos, y un minuto 60
segundos.
#include<cstdlib>
#include <iostream>
using namespace std;
cout<<”introduzca segundos”;
cin>>acu;
segundos = acu%60;
acu = acu / 60;
minutos= acu%60;
acu = acu / 60;
horas= acu%24;
acu = acu / 24;
dias= acu%7;
semanas = acu / 7;
24
system(“PAUSE”);
return EXIT_SUCCESS;
}
De las características 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 expresión puede ser distinto, dependiendo de contexto. En la tabla 1.5 se recogen los
operadores de incremento y decremento.
Incrementación Decrementación
#include<cstdlib>
#include <iostream>
using namespace std;
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;
25
system(“PAUSE”);
return EXIT_SUCCESS;
}
Resultado de la ejecucion
m =11 n=11
m =12 n=11
m =12
m =14
n =5 m =25
Operadores relacionales
C++ soporta el tipo bool que tiene dos literales false y true. Una expresión 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 relación entre dos operandos
se llaman operadores relacionales y se utilizan en expresiones de la forma:
La tabla los operadores relacionales que se pueden aplicar a operandos de cualquier tipo de
dato estandar:
char, int, float, double,etc
OPERADORES LOGICOS
Los operadores lógicos se utilizan con expresiones para devolver un valor verdadero
(cualquier entero distinto de cero) o un valor falso(0). Los operadores lógicos 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
26
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 matemáticos tienen precedencia sobre
los operadores relacionales, y los operadores relacionales tienen precedencia sobre los
operadores lógicos.
El operador ! tiene prioridad mas alta que &&, que a su vez tiene mayor prioridad que ll . La
asociatividad es de izquierda a derecha.
Las sentencias de asignación se pueden escribir de modo que se pueda dar un valor de tipo
bool o una variable bool.
int n;
float x;
char car;
bool r, esletra, espositiva;
Operador Operacion
27
Operadores de desplazamiento de bits (>>,<<)
#include<cstdlib>
#include <iostream>
using namespace std;
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 EXIT_SUCCESS;
x=9
y=10
x_y_y=8
x_or_y=11
x_Xor_y=3
x << 2=36
x >>2=2
28
Operadores de asignación adicionales
Operadores de direcciones
Son operadores que permiten manipular las direcciones de los objetos. Se recogen en la tabla
1.9
Operador Acción
Operador condicional ?
#include<cstdlib>
#include <iostream>
using namespace std;
29
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 EXIT_SUCCESS;
}
RESULTADO DE EJECUCION
x=10
y=12
el mayor es=12
el menor es = 10
Operador coma
El operador coma permite combinar dos o mas expresiones separadas por comas en una sola
línea. Se evalua primero la expresión de la izquierda y luego las restantes expresiones de
izquierda a derecha. La expresión mas a la derecha determina el resultado global de la
expresión. El uso del operador coma es:
#include<cstdlib>
#include <iostream>
using namespace std;
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 expresión de i + 1 que es 12 y se asigna a k.
Operadores especiales ( ), [ ] y ::
C++ admite algunos operadores especiales que sirven para propositos diferentes. Cabe
destacar : ().[] y ::.
30
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 tamaño de arraya destruir y a su sintaxis es:
delete[tamaño_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:
El operador 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 expresión
#include<cstdlib>
#include <iostream>
using namespace std;
Conversiones de tipos
Conversión implícita. Los tipos fundamentales (básicos) pueden ser mezclados libremente
en asignaciones y expresiones. Las conversiones se ejecutan automáticamente: 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 operación convertirá.
Esta operación se llama promoción integral.
31
Int, unsigned int, long, unsigned long, float, double
El tipo que viene primero , en esta lista , se convierte en el que viene segundo, etc.
#include<cstdlib>
#include <iostream>
using namespace std;
A 65
0 48
a 97
[ 91
91 [
Prioridad y asociatividad
- 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 paréntesis tiene la máxima prioridad .
32
Tabla 1.10 Prioridad y asociatividad de los operandos
1 :: x -> [ ] () I-D
2 ++ -- ~ ! - + & * sizeof D-I
3 . * ->* I-D
4 * / % I-D
5 +- I-D
6 << >> I-D
7 < <= > >= I-D
8 == != I-D
9 & I-D
10 ^ I-D
11 | I-D
12 && I-D
13 || I-D
14 ?: (expresión condicional) D-I
15 = *= /= %= += -= <<= >>= &= ||= ^= D-I
16 ,(operador coma ) I–D
EJERCICIOS :
15/12 15&12
24/12 24%12
123/100 200%100
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
TRABAJO PARCIAL
1. Elaborar un algoritmo y seudo código para hallar el máximo común divisor de dos
números.
33
Sugerencia: aplicar repetidamente la resta del mayor con el menor, hasta que ambos sean
iguales.
3. Calcular la planilla de una empresa, se ingresa el número de los empleados, y para cada
uno de ellos se ingresa el número de horas y el pago por hora; se calcula el pago y se
acumula para el total de la planilla.
10. Realizar un algoritmo que permita calcular la nota media(promedio) general de todos los
alumnos de un curso considerando N (como número de alumnos)
Nota: se debe pedir el número de alumnos, nombre del alumno, además nota promedio
de cada alumno en el curso.
34
Estructura de Control simple (Condicional Simple)
Condici
SI ón
Si <condición> -
---- -
---- -----
---- -----
---- -----
Fin_Si -
---- -----
---- -
---- ----
----
-
-
-
- ----
----
- ----
- Es independiente de la
- ----
condición
-
----
Ejercicio
Realizar un algoritmo que determine cuál es el mayor de 3 datos numéricos ingresados.
A B C
1 2 3
35
ESTRUCTURA DE CONTROL DOBLE (CONDICIONAL DOBLE O DE DOS CAMINOS)
Condici
SI ón NO
----
----
----
----
----
----
----
----
----
Evalúa una condición, y ejecuta un conjunto de instrucciones en caso de ser verdadera y
otra en caso de ser falsa.
A B C VMAYOR
1 2 3 3
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
Fin_si
36
ALGORITMO MAYOR
Variables:
A, B, C, VMAYOR: Entero
Si A > B
VMAYOR A
Si_no
VMAYOR B
fin_si
si C > VMAYOR
VMAYOR C
fin_si
37
INICIO
A0
B0
C0
VMAYOR 0
SI VMAYOR < B
VMAYOR B
Ingrese el 1er.
valor F_si
A
SI VMAYOR < C
Ingrese el 2do. VMAYOR C
valor
B F_si
Ingrese el 3er.
valor
C
Si A> NO
B
VMAYOR A VMAYOR B
NO C> SI
VMAYOR
VMAYOR C
FIN
if – else ( Si – Sino )
Ejecuta una instrucción si una condición dada es verdadera, y opcionalmente otra en caso
sea falsa.
Formato
38
if (Condición)
Instrucción;
else
Instrucción;
Donde la condición es una expresión lógica (solo puede ser verdadero o falso.)
Observaciones.-
Ejemplo
Elaborare seucocódigo y programa que pida el sueldo de un empleado y determine su
bonificación si:
El programa deberá imprimir la bonificación que le corresponde a ese empleado junto con
su nuevo sueldo.
#include <cstdlib>
#include <iostream>
Co
Figura 1.1
Según- sea E hacer
Inicio
E1: Acción S1
E2: Acción S2
E3: Acción S3
*
*
*
*
En: Acción Sn
Fin
Otras : acción Sx
Fin – Según
Caso expresión de
C1: Acción S1
C2: Acción S2
C3: Acción S3
*
*
*
*
Cn: Acción Sn
En cualquier otro caso
Acción Sx
Fin caso
40
switch ( Según Sea)
Permite ejecutar una o varias sentencias, evalúa una expresión y compara su valor en una
lista de opciones.
Formato
switch ( expresión )
{
case const1 : instrucción(s) ; break ;
case const2 : instruccion(s) ; break :
*
*
*
*
case constN : instruccion(s) ; break ;
default : instruccion(s) ; break;
}
Donde :
Ejemplo:
Dado el número de un mes del 1 al 12, mostrar el nombre del mes, en otro caso error.
#include <cstdlib>
#include <iostream>
41
case 12 : printf ("Diciembre");break ;
default : printf ("Mes Erroneo");break;
}
cout<<"\n";
system("PAUSE");
return EXIT_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 otros casos tipo. Para convertir a Celsius
la temperatura Fahrenheit se le resta 32 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>
42
cout<< "\n"<<r<<"oR";break;
cout<<"\n"<<c<<"oC";
cout<<"\n"<<f<<"oF";
cout<<"\n"<<r<<"oR";break;
cout<< "\n"<<f<<"oF";
cout<< "\n"<<c <<"oC";
cout<< "\n"<<k<<"oK";break;
43
4. ESTRUCTURAS REPETITIVAS
Mientras SW = 1
C A+B
F SW 0
F_mientras
condici
ón Escribir ‘C=’, C
V A 8
B 6
C 0
SW 1
Mientras SW = 1
CA+B
---- SW 0
-- f-Mientras
Escribir ‘C=’, C
----
--
----
--
----
--
Ejercicios:
1. Ejercicio Hallar suma de los cinco primeros números naturales
2. Hallar la suma de los 50 primeros números naturales impares
44
Repetir
-------
-------
-------
Hasta (<condición>)
Inicio
A 7
B4
C0
SW 0
Repetir
C A+B
SW 1
Se realizan
-------- por lo menos
Hasta (SW = 1)
Escribir ‘C=’, C.
-- una vez
-------- Fin
SI
C 5
Mientras C <> 50
A0
B0
C0
Escribir ‘valor de A’
Leer A
Escribir ‘valor de B’
Leer B
CA+B
Escribir la suma, =’, C
Fin Mientras
Repetir
Escribir ‘Ingrese respuesta < s/n>’
Leer RP
45
Hasta (RP = ‘s’ O R RP =‘N’)
Ej. Mientras y Repetir
RP ‘S’
Mientras RP =’S’
A0
B0
C0
Escribir ‘valor de A’
Leer A
Escribir ‘valor de B’
Leer B
CA+B
Escribir la suma, =’, C
Repetir
Escribir ‘Ingrese respuesta <S/N>’
Leer RP
F-mientras
Repetir
A0
B0
C0
Escribir ‘valor de A’
Leer A
Escribir ‘valor de B’
Leer B
CA+B
Escribir la suma, =’, C
Repetir
Escribir ‘Ingrese respuesta <S/N>’
Leer RP
ACUMULADOR
Variable que recibe el valor que anteriormente tenía más un valor cualquiera.
X=X+Y
X = X + < valor variable>
CONTADOR
X = X + <valor fijo>
Contador: Variable que nos permite guardar su valor anterior más un valor fijo.
46
Para / Desde
________
El conjunto de instrucciones se
________ ejecuta “N” veces
________
Fin-para
Para I 1 hasta 5 A éstas instrucciones no le interesa con que valor llegue “I”,
ella mismo (el para) se encarga de inicializar
Escribir I
Fin_para
I 1 I 1
I> I<=
5 5
Escribir Escribir
I I
II+1 II+1
F
47
Anidados
Si <C1>
_______
_______
_______
Si <C2>
_______ Si C2 Es V
_______
_______
f_si
_______ Si C1 es V
_______
_______
Si no
_______
_______
_______
Si <C3>
_______
_______ Si C3 es V
_______
si no
_______ Si C3 es F
_______
_______
_______
_______
_______
f_si
f_si
Mientras <c1>
----------
----------
----------
mientras <c2>
----------
----------
----------
f-mientras
----------
----------
----------
F-Mientras
Repetir
----------
48
----------
----------
Repetir
----------
----------
----------
Hasta (c2)
----------
----------
---------
Hasta (c1)
Para I 1 hasta 5
----------
----------
----------
Para I 1 hasta 4
----------
----------
----------
Fin – para
----------
----------
----------
Fin-Para
49
Ejemplo: Anidados en IF
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
F V
Esp = ‘P’
F V F V
Sex = ‘H’ Sex = ‘H’
50
PROBLEMAS
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
ALGORITMO SUELDO
Variables:
NOMPER: Cadena
PAGHOR, HORTRA, SUENET, SUEBRU, DSCLEY: Reales
51
NomPer : Cadena
PagHor, Hortra, SueNet: Reales
I, N: Entera
Inicio
PAGHOR .
HORTRA .
SUENET .
N
I
Escribir ‘Ingresa el N° de Trabajadores’
Lee N
Para I 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
Variables
NOMPER : Cadena
Inicio
PAGHOR .
HORTRA .
SUENET .
RP ‘ ‘
52
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 forma
Algoritmo
Repetir
PAGHOR
HORTRA
SUENET
RP ‘ ‘
NOMPER ‘ ‘
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’)
ALGORITMO SUELDO
Entorno:
NOMPER: Cadena
PAGHOR, HORTRA, SUENET, SUEBRU, DSCLEY: Reales
RP ‘S’
mientras RP = ‘S’
PAGHOR .
HORTRA .
53
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
Ejercicios
1. Se desea realizar un Seudo código 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 razón de 1.5
veces la hora ordinaria.
N° Horas normales : 4
Nomper
Horatra
Paghor
ALGORITMO SUELDO1
Entorno (Variables)
RP: Carácter
Nomper: Cadena
Hortra, Paghor, SueNet, : Reales
Inicio
54
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-Inicio
2. 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
CONTCHI
CONTOT
NAC
RP
ALGORITMO NACIONALIDAD
Entorno (Variables)
CONTPER, CONTCHI, CONTOT: Enteros
NAC: Cadena
RP: Carácter
55
Inicio
CONTPER 0
CONTCHI 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 = ‘CHILENO’ OR NAC= ‘CHILENA’
CONTCHI CONTCHI + 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:’, CONTCHI
Escribir ‘El total de nacionalidades ingresadas es:’, CONTOT
Fin-Inicio
PROBLEMAS
Dado: 10 números enteros, visualizar la suma de los números pares de la lista. ¿Cuántos
números pares existen y cuál es la media aritmética de los Numeros impares?
Algoritmo: NPEI
RES,COC,NroEnt, I, COMPART, CONIMPAR, SUM PAR, SUMIMPAR: Enteros
ProImp: Real
INICIO
SumaPar 0
SumaImpar 0
ConPar 0
ConImpar 0
Para I 1 Hasta 10
56
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
ProImp SumImp/ConImpar
Escribir ‘ Promedio Impares’, ProImpar
Escribir ‘Suma de Pares’, SumPar
Escribir ‘Hay’, ConPar, ‘Nros Pares’
Los empleados de una fábrica 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
Algorito Jornal
Variables
Rp,Turtra: Carácter
DiaTra, Nomtra: Cadena
Hortra, JorDia: Enteros
INICIO
Repetir
Nomtra ‘ ‘
Escribir ‘ Nombre del Trabajador’
Leer Nomtra
DiaTra ‘ ‘
Escribir ‘Dia trabajado: ‘
Leer DiaTra
TurTra ‘ ‘
Escribir ‘ Turno Trabajado’
Leer TurTra
Si DiaTra= ‘Domingo’
57
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
FIN-INICIO
ALGORITMO SUELNET
Variables
RP: Carácter
ImpMen PagHor
Hortra, SueNetMen
PagMen; Real
Nomtra : Cadena
Inicio
Repetir
Nombre ‘ ‘
Escribir nombres trabajador:
Leer Nomtra
Escribir ‘ Horas Trabajadas‘
Leer Hortra
Escribir ‘pago hora:’
Leer PagHor
ImpMen 0.000
Si Hortra < = 35
58
SueNet Sem PagHor * Hortra
59
while ( mientras )
Ejecuta una instrucción simple o compuesta: ninguna, una o mas veces dependiendo del
valor de la condición.
Formato:
while ( condición )
Loop {
o Instrucciones;
Bucle }
Ejecución:
1. Se evalúa la condición.
2. Si el resultado de la evaluación es verdadero (1) la instrucción se ejecuta y el proceso se
repite mientras que la condición sea verdadera.
3. Si la condición es falsa no se ejecuta la sentencia y se procede a ejecutar el resto del
programa.
Ejemplo
Programa que imprime los números del 1 al 10.
#include <cstdlib>
#include <iostream>
system("PAUSE");
return EXIT_SUCCESS;
}
60
do while (hacer - mientras)
Ejecuta una instrucción simple o compuesta por lo menos una vez dependiendo del valor de
la condición.
Formato
do
{
Instrucciones;
}
while (condición);
Ejecución
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>
61
for ( para)
Formato
Donde:
var = vi; var representa a una variable que será inicializada con el valor vi ( se evalúa una
sola vez)
Condición : es una condición lógica si se omite se asume que es verdadera.
Progresión: es una expresión que incrementa o decrementa la variable var.
Ejempo
Programa que permita calcular el producto de 2 números usando solamente sumas.
#include <cstdlib>
#include <iostream>
using namespace std;
62
}
cout<<"El producto es "<<prod;
cout<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
5. PUNTEROS
Cuando una variable se declara, se asocian tres atributos: nombre, tipo y dirección en
memoria. Al valor, o contenido de una variable se accede por medio de su nombre. A la
dirección de la variable se accede por medio del operador de dirección &.
Una referencia es una alías de otra variable. Se declara utilizando el operador de referencia
(&) que se añade al tipo de la referencia.
#include <cstdlib>
#include <iostream>
Reglas
& se refiere a la dirección en que se almacena el valor. El carácter & tiene diferentes usos
en C++:
1. Cuando se utiliza como prefijo de un nombre de una variable, devuelve la dirección de
esa variable.
2. Cuando se utiliza como un sufijo de un tipo en una declaración de una variable, declara la
variable como sinónimo de la variable que se ha inicializado.
3. Cuando se utiliza como sufijo de un tipo en una declaración de parámetros de una
función, declara el parámetro referencia de la variable que se pasa a la función.
63
Puntero
Un puntero es una variable que contiene una dirección de una posición de memoria que
puede corresponder o no a una variable declarada en el programa. La declaración de una
variable puntero debe indicar el tipo de dato al que apunta; para ello se hace preceder al
nombre con asterisco (*):
C++ no inicializa los punteros cuando se declaran y es preciso inicializarlos antes de su uso.
Para asignar una dirección de memoria a un puntero se utiliza el operador &, éste método
de inicialización, denominado estático requiere:
o Asignar memoria estáticamente definiendo una variable y, a continuación, hacer que
el puntero apunte al valor de la variable.
o Asignar un valor a la dirección de memoria.
Operadores de punteros
Operador Propósito
& Obtiene la dirección de una variable
* Define una variable como puntero
* Obtiene el contenido de una variable puntero
Notas:
- Siempre que aparezca un (*) en una definición 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 dirección de la variable a la cual se aplica.
#include <cstdlib>
#include <iostream>
o bien:
64
1. tipo *puntero=new tipo // No arreglos
2. tipo *puntero=new tipo[dimensiones] // Arreglos
#include <cstdlib>
#include <iostream>
65
Ejemplo. Reservar, asignar memoria dinámica a un vector de enteros, cargar el vector,
mostrar los contenidos, visualizar las direcciones de memoria.
#include <cstdlib>
#include <iostream>
66
6. FUNCIONES
Las funciones contienen varias sentencias bajo un solo nombre, que un programa puede
utilizar una o más veces para ejecutar dichas sentencias.
Si se agrupan funciones en bibliotecas, otros programas pueden reutilizar las funciones.
Las funciones también pueden ser definidas por el usuario.
#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 EXIT_SUCCESS;
}
int mcd(int x, int y)
{ while(x!=y)
{if(x>y)
x=x-y;
else
y=y-x;
}
return(x);
}
68
Parámetros de una función
a. Paso por valor(paso por copia): La función recibe una copia de los valores de los
parámetros actuales. La función receptora no puede modificar la variable de la
función(parámetro pasado).
Ejemplo:
Leer un número entero cualquiera, pasar el valor leído a través de una función de paso de
parámetro por valor, en la función mostrar el valor enviado, duplicar el valor. Al término de la
función, regresar al programa principal mostrar el valor leído después de la llamada de paso
por valor.
#include <cstdlib>
#include <iostream>
69
b. Paso por referencia (o dirección): Cuando una función debe modificar el valor del
parámetro pasado y devolver este valor modificado a la función llamadora.
Ejemplo:
En el programa principal inicializar una variable entera con un valor, mediante la llamada a
una función de paso de parámetro por referencia modificar el valor de la variable, y mostrar el
resultado en el programa principal.
#include <cstdlib>
#include <iostream>
70
RECURSIVIDAD
Un programa recursivo es aquel que se llama asimismo ( y una función recursiva es aquella
que se llama asimisma) pero con una condición de termino que autorice al programa a dejar
de llamarse asimismo ( y que la función deje de definirse en términos de si misma).
Ej. Desarrollar un algoritmo para hallar factorial de un número entero positivo usando
recursividad, incluir el cero.
Algoritmo factorial
Variables
Respta,n: enteros
7. ARREGLOS
……………….
DATOS
DATOS(1) DATOS(3) DATOS(15)
71
Ejemplo:
Datos(15) : Arreglo de enteros
Algoritmo Nros
Variables:
Datos (15): Arreglo de enteros
Suma,I : Entero
Inicio
Suma 0
Para I 1 hasta 15
Datos (I) 0
Fin – Para
Para I 1 Hasta 15
Escribir ‘Nro’, I, ‘-‘
Leer Datos (I)
Suma Suma + Datos (I)
Fin - Para
Limpia Pantalla
Para I 1 hasta 15
Escribir ‘Datos (‘, I, ’). – ‘, Datos (I)
Fin - Para
Escribir ‘La suma de éstos datos es:’ , Suma
Fin Inicio
Se necesita ingresar en nombre y las evaluaciones de cada uno de los alumnos del curso de
programación, existen 2 evaluaciones por alumno. El Psedocódigo debe permitir la impresión
de la Acta de Notas de dicha sección. Los datos al imprimir deben ser los siguientes:
- Nombre
- Evaluación 1Not Par)
- Evaluación 2 (Not Fin)
- Promedio
ALGORITMO ACTAS
Variables:
NomAlu(45): Arreglo de cadenas
NotPar (45) , NotFin(45), ProAlu(45): Arreglo de reales
I, K: Entero
RP: Carácter
72
Inicio
Para I hasta 45
NomAlu(I) ‘ ‘
NotPAr (I) .00
NotFin (I) 0.00
ProAlu (I) 0.00
Fin Para
I0
Repetir
II+1
Escribir ‘nombre del alumno’
Leer NomAlu (I)
Escribir ‘Ex-parcial’
Leer NotPar (I)
Escribir Ex_Final
Leer NotFin (I)
ProAlu (I) (NotPar (I) + NotFin (I))/2
RP ‘ ‘
Escribir ‘Hay más alumnos <S/N>’
Leer RP
Hasta (RP = ‘N’)
Para k 1 hasta I
Escribir NomAlu (K),‘b’, NotPar(K), ‘b’, NotFin(K), ‘b’. ProAlu(K)
Fin para
Fin Inicio
Ejercicio
Se necesita ingresar el nombre, las evaluaciones y los trabajos de los alumnos del curso de
contabilidad básica, existen cuatro evaluaciones por alumno y dos trabajos parciales. El seudo
código debe permitir la impresión 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
73
Ir comparando los valores almacenados, en las diferentes posiciones del arreglo. Las
comparaciones se realizan tomando 2 valores por iteración (Acción de repetir algo) los valores
a comparar deben estar en posiciones consecutivas, empezando de la posición N°01
Conclusión
Si Nros (y) > Nros(y+1)
Aux Nros (y)
Nros (y) Nros (y+1)
Nros (y+1) Aux
F-si
Donde:
x = Nro del análisis al algoritmo
y: Indica las posiciones del vector (controlar comparaciones)
N: Nro de datos a ordenar
N-1: N° de análisis a realizar
N-x : N° de comparaciones por cada análisis
BÚSQUEDA EN ARREGLOS
Ejemplo: Ingresa 50 nombres a un vector, tipear un nombre aleatorio y verificar si se encuentra
en el arreglo.
Algoritmo Búsqueda
Variables:
Nomper(50) : Arreglo de Cadenas
I,SW : Entero
NomBus : Cadena
Inicio
Para I 1 Hasta 50
Nomper (I) ‘ ‘
Escribir ‘nombres: ‘
Leer NomPer(I)
Fin – Para
Nombus ‘ ‘
Escribir ‘Ingresa el nombre a buscar:’
Leer NomBus
SW 0
74
Para I 1 hasta 50
Si Nombus = NomPer (I)
Escribir ‘lo encontre’
I 50
SW 1
F-SI
F-Para
Si SW = 0
Escribir ‘no existe el nombre’
F-si
Fin
OTRA FORMA
Algoritmo
Inicio
Para I 1 hasta 50
NomPer (I) ‘ ‘
Escribir ‘nombre:’
Leer Nomber (I)
F-Para
NomBus ‘ ‘
Escribir ingrese nombre a buscar: ‘
Leer Nombus
Para I Hasta 50
Si Nombus = NomPer(I)
Escribir ‘lo encontre’
I 51
Fin – si
Fin – Para
Si I = 51
Escribir ‘NO EXISTE’
Fin-si
Fin-si
INSERCIÓN DE DATOS EN UN VECTOR
ALGORITMO INSERTAR
Variables Nro(5) : Arreglo de enteros
Pos, I, Dato: Entero
Inicio
Para I 1 Hasta 5
Nros(I) 0
Escribir ‘numero’
Leer Nros(I)
Fin - Para
75
DATO 0
Escribir ‘Ingresar el valor a insertar’
Leer Dato
Pos 0.
Escribir ‘Ingresar posición donde desea insertar’
Leer POS.
Para I 5 hasta Pos+1 Variando –1
Nros (I) Nros (I-1)
Fin – Para
Fin
EJERCICIO
En el vector anterior
i) Ordenar de < a >
ii) Insertar el valor 12 en el lugar correspondiente, ya sea eliminado el último valor o
ampliando el vector y no eliminado valor alguno.
Para I 1 Hasta 4
Para I 1 hasta 5-I
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 (‘Ingresar valor a insertar:’)
Leer (Dato)
SW 0
Para i 1 Hasta 5
Si Datoins <= V(I)
Para J 6 hasta I
V(J) V(J-1)
Fin- para
V(I) Dato
I5
SW 1
Fin si
Fin – para
*****************************************************************
#include<iostream>
#include<cstdlib>
using namespace std;
int main(int argc, char *argv[]){
76
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 EXIT_SUCCESS;
}
ALGORITMO ACTAS
Variables
Nom(12): Arreglo de cadenas
Notas: (13,4)
Arreglo de reales
77
I, J, Confat : Entero
AcuNot, AcuPro : Reales
Inicio
AcuPro 0
Confalt 0
AcuNot 0
Para I 1 hasta 12
Escribir ‘nombre’
Leer Nom(I)
Para J I hasta 3
Escribir ‘nota’, J.
Leer Notas (I,J)
Si Notas (I,I) = 88
Confalt Confalt + 1
Si no
AcuNot AcunNot + Notas (I, J)
Fin-si
Fin - para
Notas (I, J) AcuNot/3
AcuPro AcumPro + Notas (I,J)
AcuNot + 0
F Para
Notas (13,4) AcuPro/12
Notas (13,1) 000
Notas (13,2) 000
Notas (13,3) 000
Para I Hasta 12
Si Notas (I,1)! = 88
Notas (13,1) Notas (13,1) + Notas (I,1)
Fin –si
Si Notas (I,2)! = 88
Notas (13,2) notas (13,2)+ Notas (I,2)
F-SI
Si notas (I,3)! = 88
Notas (13,3) Notas (13,3) + notas (I,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
78
EJERCICIOS
1. Se desea un algoritmo que proporcione la palabra inversa simétrica de una dada. Por
ejemplo AMIL es la palabra inversa simétrica de LIMA.
2. Se dispone de una lista de cien números enteros. Calcular el valor máximo y el orden que
ocupa en la lista.
3. Calcular los promedios de las asignaturas de una clase. Deducir cuántas son más altas
que el promedio y cuántas son más bajas que el promedio.
6. Dados dos números enteros positivos cualesquiera hallar la raíz 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: número de alumnos, nombre, sexo y nota promedio.
Al ordenar se ordena de mayor a menor por el promedio.
Además se emite un listado y mensaje de aprobado o desaprobado.
8. Investigar otros métodos para ordenar datos, aparte del método de la burbuja (método del
intercambio) visto en clase. Describa por lo menos un método y su algoritmo.
Ejercicio
Dar dos matrices enteras de orden 2, y hallar el producto de dichas matrices.
#include <cstdlib>
#include <iostream>
Ejercicio
Ingresar cinco nombres y ordenar alfabéticamente 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 APELLIDOS Y NOMBRES";
for(i=0; i<5;i++)
{ fflush(stdin);
cout<<"\nAPELLIDOS Y NOMBRES["<<i+1<<"]=";
//gets(apellidos_ns[i]);
cin.getline(apellidos_ns[i],28);
80
}
cout<<"DATOS INGRESADOS";
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 EXIT_SUCCESS;
}
81
:REGISTRO
Nombre Dirección Tf. Fecha.Nac. EsSalud Sueldo
Ejemplo:
1 7 0 5 2 0 0 4
8. REGISTROS ( ESTRUCTURAS)
Ejemplos de registros
Ejemplos:
82
3 Edad
2 Madre
3 Nombre
3 Edad
El Número de izquierda de identificador recibe el nombre de N° de nivel.
Acceder a un elemento determinado de un registro
Ejemplo:
Recién 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 recién nacido, como:
Recién_nacido.sexo [6]
1 JUAN 22 M 284952
2 LUIS 23 M 280011
3 ROSA 16 F 214950
Ejercicio
Usando la estructura alumno:
struct alumno{
int cod;
char nom[30];
83
char sexo;
float prom;
};
#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);
}
}while(op!=4);
system("PAUSE");
return EXIT_SUCCESS;
}
int menu()
{ int op1;
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
84
{
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). Ingresar 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<<" LISTADO DE ALUMNOS "<<endl;
cout<<" CODIGO NOMBRE SEXO PROMEDIO "<<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;
}
}
85
Ejercicio
Ejercicio
Se pretende representar un triángulo en el espacio tridimensional, pero minimizando el
espacio necesario para almacenarlo. Teniendo en cuenta que un triángulo en el espacio
tridimensional viene determinado por las coordenadas de sus tres vértices, escribir un
programa con una estructura para representar un triángulo que usando un vector dinámico
almacene el índice de los tres vértices (de esta forma se almacena los tres vértices 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 TRIANGULO EN EL ESPACIO TRIDIMENSIONAL";
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);
rpta=estriangulo(Vector);
if(rpta==1)
cout<<"\n LOS PUNTOS DADOS FORMAN UN TRIANGULO";
else
cout<<"\n LOS PUNTOS DADOS NO FORMAN UN TRIANGULO";
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;
86
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;
}
9. ARCHIVOS
CLAVE: (Indicativo)
Clave que identifica el registro y lo diferencia de otros registros
Ejemplos: de clave: N° de identificación
Ejercicio 1:
Usando la estructura empleado con los campos: código, nombre, y sueldo, crear un archivo
empleados.dat, que permita realizar las siguientes acciones en el siguiente:
MENU
87
1. Adición de un empleado
2. Modificar por código
3. Consultar por código
4. Eliminar por código
5. Listado
6. Salir
Seleccione opción:
Nota:
El programa siguiente solo permite: adición 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;
FILE *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 EXIT_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:";
88
cin>>op1;
return op1;
}
void adicionar_empleado()
{ char R;
almacen1=fopen("D:\\algoritmos1\\empleados.dat","ab");
if(almacen1!=NULL)
{
do{
cin.clear();
cout<<"\n Ingreso de datos de empleado \n";
cout<<"\n Codigo:";
cin>>Reg.codigo;
fflush(stdin);
cout<<"\n Nombre:";
cin.get(Reg.nombre,30); //Ingresar 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 LISTADO DE EMPLEADOS ";
cout<<"\n ====================";
cout<<"\n CODIGO"<<"\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);
}
89
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, dirección,
teléfono fijo, teléfono móvil, dirección de correo electrónico. El programa debe permitir añadir
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;
90
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(FILE *F, PERSONA A);
void MostrarRegistro(FILE *F, PERSONA A);
void BuscarNombre(FILE *F, PERSONA A);
void BuscarApellidoPaterno(FILE *F, PERSONA A);
void BuscarApellidoMaterno(FILE *F, PERSONA A);
void BuscarMovil(FILE *F, PERSONA A);
void EditarRegistro(FILE *F, FILE *G, PERSONA A);
void EliminarRegistro(FILE *F, FILE *G, PERSONA A);
void msjerror();
void datos(PERSONA A);
void MenuBusqueda();
void MenuPrincipal();
FILE M;
FILE N;
PERSONA Z;
int op,op2;
do{
system("cls");
MenuPrincipal();
cout<<"\nIngrese 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);
91
system("pause");
break;
case 4:
do{
system("cls");
MenuBusqueda();
cout<<"\n\nIngrese 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\nINGRESE OPCION
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\nINGRESE OPCION CORRECTA !!!!!!!\n\n";
system("pause");
break;
}
}while(op);
system("PAUSE");
92
//return 0;
return EXIT_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 MOVIL ******\n";
cout<<"****** 5.- SALIR ******\n";
cout<<"**************************************************\n";
cout<<"**************************************************\n";
}
void MenuPrincipal()
{
cout<<"**************************************************\n";
cout<<"**************** MENU PRINCIPAL **************\n";
cout<<"**************************************************\n";
cout<<"****** 1.- AGREGAR CONTACTO ******\n";
cout<<"****** 2.- MOSTRAR AGENDA ******\n";
cout<<"****** 3.- MODIFICAR CONTACTO ******\n";
cout<<"****** 4.- BUSCAR CONTACTO ******\n";
cout<<"****** 5.- ELIMINAR CONTACTO ******\n";
cout<<"****** 6.- CERRAR AGENDA ******\n";
cout<<"**************************************************\n";
cout<<"**************************************************\n";
}
void CrearRegistro(FILE *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);
93
fclose(F);//cerramos el archivo
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
}
94
cin.clear();
cin.getline(aux,20);
F=fopen("AGENDA.dat","a+");//abrimos el archivo
if(F==NULL)
msjerror();
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(FILE *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();
while(feof(F)==0){
if(strcmp(aux,A.ape2)==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
}
95
msjerror();
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
}
96
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);
fread(&A,sizeof(A),1,F);
}
fclose(F);
fclose(G);
97
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 ELIMINADA CON EXITO_!!!!!!\n\n";
}
}
void msjerror()
{
cout<<"\n\nNO SE PUEDE ABRIR EL ARCHIVO \n\n";
system("pause");
exit(1);
}
void datos(PERSONA R)
{
cout<<"\n------------------------------\n";
cout<<"\tNOMBRE : "<<R.nom<<endl;
cout<<"\tAPELLIDO PATERNO : "<<R.ape1<<endl;
cout<<"\tAPELLIDO MATERNO : "<<R.ape2<<endl;
cout<<"\tDIRECCION : "<<R.direc<<endl;
cout<<"\tTELEFONO FIJO : "<<R.fijo<<endl;
cout<<"\tTELEFONO MOVIL : "<<R.movil<<endl;
cout<<"\tCORREO ELECTRONICO : "<<R.msn<<endl;
cout<<"\n------------------------------\n";
}
Estructura de datos dinámica, que es una colección de elementos llamados nodos, dispuestos
uno a continuación 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.
Tipos:
Listas simplemente enlazadas
Listas doblemente enlazadas
Lista circular simplemente enlazada
Lista circular doblemente enlazada
98
struct Nodo { class Nodo {
public
int dato; int dato;
Nodo *enlace; Nodo *enlace;
// constructor
}; };
Declaración e implementación de una clase Nodo que contiene información de tipo elemento
y el siguiente de tipo puntero a nodo.
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 información del nodo, y la
dirección 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 Obtener 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 información.
#include <cstdlib>
#include <iostream>
using namespace std;
typedef int Telemento;
class Nodo{
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
};
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;
99
}
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;
}
REFERENCIAS
1. H.M Deitel, P.J. Deitel. C++ como Programar. Edit. Prentice Hall
Hispanoamericana, S.A 2012. México.
3. Ceballos Sierra, Fco. Javier. Enciclopedia del lenguaje C++. 2009. Edit.
Alfaomega Ra-Ma. México. ISBN: 978-607-7686-43-9. 856p.
100
INDICE
Pág.
2. C/C++/DevC++ ……………………………………………………………………… 11
5. Punteros …………………………………………………………………………….. 63
6. Funciones ………………………………………………………………………….…. 67
7. Arreglos …………………………………………………………………………..…… 71
8. Registros ………………………………………………………………………….…. 82
101
9. Archivos ………………………………………………………………………………. 88
102
Agradecimiento:
103
Luis Guerra Grados
Abril – 2019
104