0% encontró este documento útil (0 votos)
206 vistas

Programación en C++

El documento introduce el lenguaje de programación C++. Explica que C++ fue creado por Bjarne Stroustrup en 1983 como una extensión del lenguaje C, agregando características de orientación a objetos como clases y objetos. C++ pretende llevar a C a un nuevo paradigma de programación orientada a objetos, permitiendo modelar el mundo real a través de la creación de objetos agrupados en clases.

Cargado por

juan carlos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
206 vistas

Programación en C++

El documento introduce el lenguaje de programación C++. Explica que C++ fue creado por Bjarne Stroustrup en 1983 como una extensión del lenguaje C, agregando características de orientación a objetos como clases y objetos. C++ pretende llevar a C a un nuevo paradigma de programación orientada a objetos, permitiendo modelar el mundo real a través de la creación de objetos agrupados en clases.

Cargado por

juan carlos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 74

PROGRAMACIN EN C++

Introduccin al curso
C++ es un lenguaje de programacin creado por Bjarne Stroustrup en los laboratorios de At&T en 1983.
Stroustrup tom como base el lenguaje de programacin ms popular en aquella poca el cual era C.
El C++ es un derivado del mtico lenguaje C, el cual fue creado en la dcada de los 70 por la mano del
finado Dennis Ritchie para la programacin del sistema operativo (un sistema parecido a Unix
es GNU/Linux), el cual surgi como un lenguaje orientado a la programacin de sistemas (System
Programming) y de herramientas (Utilities) recomendado sobre todo para programadores expertos, y
que no llevaba implementadas muchas funciones que hacen a un lenguaje ms comprensible.
Sin embargo, aunque esto en un inicio se puede convertir en un problema, en la prctica es su mayor
virtud, ya que permite al programador un mayor control sobre lo que est haciendo. Aos ms tarde, un
programador llamado Bjarne Stroustrup, creo lo que se conoce como C++.
Necesitaba ciertas facilidades de programacin, incluidas en otros lenguajes pero que C no soportaba,
al menos directamente, como son las llamadas clases y objetos, principios usados en la programacin
actual. Para ello redise C, ampliando sus posibilidades, pero manteniendo su mayor cualidad, la de
permitir al programador en todo momento tener controlado lo que est haciendo, consiguiendo as una
mayor rapidez que no se conseguira en otros lenguajes.
C++ pretende llevar a C a un nuevo paradigma de clases y objetos con los que se realiza una
comprensin ms humana basndose en la construccin de objetos, con caractersticas propias solo de
ellos, agrupados en clases. Es decir, si yo quisiera hacer un programa sobre animales, creara una clase
llamada animales, en la cual cada animal, por ejemplo, un pato, sera un objeto, de tal manera que se
ve el intento de esta forma de programar por ser un fiel reflejo de cmo los humanos (en teora)
manejamos la realidad.
Se dice que nuestro cerebro trabaja de forma relacional (relacionando hechos), es por ello que cada vez
que recuerdas algo, (cuentas un hecho), termina siendo diferente (se agregan u omiten partes).

Conceptos y Operaciones Bsicas

Ejercicio 1:
Escriba un programa que nos permita hallar el rea de un tringulo
#include <iostream>
using namespace std;
int main(){
float base,altura,area;
cout<<"Ingrese la base del triangulo:";
cin>>base;
cout<<"Ingrese la altura:";
cin>>altura;
area = (base*altura)/2;
cout<<"El area es "<<area<<endl;
return 0;
}
Ejercicio 2:
Escriba un programa que nos permita hallar el volumen de una esfera V = (4/3)*PI*R^3
#include <iostream>
#include <cmath>
using namespace std;
int main(){
const float PI = 3.14159;
float radio,volumen;
cout<<"Ingrese el radio de la esfera : ";
cin>>radio;

volumen = 4/3*PI*pow(radio,3);
cout<<"El volumen es "<<volumen<<endl;
return 0;
}
Ejercicio 3:
Escriba un programa que lea 3 notas y muestre el promedio final.
#include <iostream>
using namespace std;
int main(){
float nota1,nota2,nota3,promedioFinal;
cout<<"Nota 1:";
cin>>nota1;
cout<<"Nota 2:";
cin>>nota2;
cout<<"Nota 3:";
cin>>nota3;
promedioFinal = (nota1+nota2+nota3)/3;
cout<<"Promedio final :"<<promedioFinal<<endl;
return 0;
}
Ejercicio 4:
Construya un programa que permita convertir una temperatura en grados Celsius a
Fahrenheit(((C*9) /5) +32 = F) y Kelvin (C = K-273.15).
#include <iostream>
using namespace std;
int main(){
float celsius, fahrenheit, kelvin;
cout<<"Ingrese los grados celsius:";
cin>>celsius;
fahrenheit = ((celsius*9) /5) +32;
kelvin = celsius + 273.15;
cout<<"Los grados en kelvin es "<<kelvin<<endl;

cout<<"Los grados en fahrenheit es "<<fahrenheit<<endl;


return 0;
}
Ejercicio 5:
Calcular la distancia entre 2 puntos (P_1 y P_2) localizados en un plano XY.
Distancia = Raiz((x2-x1) ^2 + (y2-y1) ^2)
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int x1, y1, x2, y2;
double distancia;
cout<<"PUNTO 1"<<endl;
cout<<"X:";
cin>>x1;
cout<<"Y:";
cin>>y1;
cout<<"PUNTO 2"<<endl;
cout<<"X:";
cin>>x2;
cout<<"Y:";
cin>>y2;
distancia = sqrt(pow(x2-x1,2) + pow(y2-y1,2));
cout<<"La distancia es "<<distancia<<endl;
return 0;
}

Estructuras de Control
ESTRUCTURAS CONDICIONALES
#include <iostream>
using namespace std;
int main(){
/**ESTRUCTURA CONDICIONAL SIMPLE**/
/** if -> si

else -> sino **/

if(5<5){
cout<<"Entro al if"<<endl;
}

else{
cout<<"No se cumple el if"<<endl;
}
return 0;
}
#include <iostream>
using namespace std;
int main(){
/**ESTRUCTURA CONDICIONAL MULTIPLE**/
char variable;/**char**/
cin>>variable;
switch(variable){
case '1': cout<<"Caso 1"<<endl;
break;
case '2': cout<<"Caso 2"<<endl;
break;
case '3': cout<<"Caso 3"<<endl;
break;
default: cout<<"Ningun caso"<<endl;
}
return 0;
}
Ejercicio 6:
Escriba un programa que diga si un numero entero ingresado es par o impar
#include <iostream>
using namespace std;
int main(){
int numero;
cout<<"Ingrese el numero:";
cin>>numero;
if(numero%2==0){
cout<<"El numero es par"<<endl;

}
else{
cout<<"El numero es impar"<<endl;
}
return 0;
}
Ejercicio 7:
Escriba un programa que diga si un nmero es positivo, negativo o neutro
#include <iostream>
using namespace std;
int main(){
int numero;
cout<<"Ingrese el numero:";
cin>>numero;
if(numero>0){
cout<<"El numero es positivo"<<endl;
}
else if(numero<0){
cout<<"El numero es negativo"<<endl;
}
else{
cout<<"El numero es neutro"<<endl;
}
return 0;
}
Ejercicio 8:
En un estacionamiento cobran $/.1.50 por hora o fraccin. Disee un programa que determine
cuanto debe pagar un cliente por el estacionamiento de su vehculo, conociendo el tiempo de
estacionamiento en horas y minutos.
#include <iostream>
using namespace std;
int main(){
int horas,minutos;

float total;
cout<<"Horas:";
cin>>horas;
cout<<"Minutos:";
cin>>minutos;
if(minutos>0){
horas++;/**horas=horas+1;**/
}
total = horas*1.5;
cout<<"El total a pagar es "<<total<<endl;
return 0;
}
Ejercicio 9:
Construya un programa que ingrese un nmero del 1 al 12 y muestre el nombre de mes
correspondiente.
#include <iostream>
using namespace std;
int main(){
int numero;
cout<<"Ingrese el numero del mes:";
cin>>numero;
switch(numero){
case 1:cout<<"Enero";
break;
case 2:cout<<"Febrero";
break;
case 3:cout<<"Marzo";
break;
case 4:cout<<"Abril";
break;
case 5:cout<<"Mayo";
break;

case 6:cout<<"Junio";
break;
case 7:cout<<"Julio";
break;
case 8:cout<<"Agosto";
break;
case 9:cout<<"Setiembre";
break;
case 10:cout<<"Octubre";
break;
case 11:cout<<"Noviembre";
break;
case 12:cout<<"Diciembre";
break;
default: cout<<"Numero de mes incorrecto"<<endl;
}
return 0;
}

Ejercicio 10:
Construya un programa que identifique si una letra es una vocal.
#include <iostream>
using namespace std;
int main(){
char letra;
cout<<"Ingrese un letra:";
cin>>letra;
switch(letra){
case 'a':

case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':cout<<"Es una vocal"<<endl;
break;
default:cout<<"No ha ingresado una vocal"<<endl;
}
return 0;
}

Ejercicio 11:
Ingresar el sueldo de un trabajador,categoria, condicion estable(E) o no estable(N) y reportar el
pago total que se le debe hacer de acuerdo a lo siguiente. El porcentaje de bonificacion con
respecto al sueldo se calcula con respecto a la siguiente tabla:
CATEGORIA ESTABLE
A

20%

17%

18%

15%

15%

14%

12%

10%

NO ESTABLE

El clculo del descuento es con respecto al sueldo + bonificacin.


Estable 6%

No estable 4%

#include <iostream>
using namespace std;
int main(){
float sueldo;
char categoria,condicion;
cout<<"Categoria:";
cin>>categoria;
cout<<"Condicion:";
cin>>condicion;
cout<<" Sueldo:";
cin>>sueldo;
if(condicion == 'E'){
switch(categoria){
case 'A': sueldo = sueldo*1.20;
break;
case 'B': sueldo = sueldo*1.18;
break;
case 'C': sueldo = sueldo*1.15;
break;
case 'D': sueldo = sueldo*1.12;
break;
}
sueldo = sueldo*0.94;
}
else if(condicion == 'N'){
switch(categoria){
case 'A': sueldo = sueldo*1.17;
break;
case 'B': sueldo = sueldo*1.15;
break;
case 'C': sueldo = sueldo*1.14;
break;

case 'D': sueldo = sueldo*1.10;


break;
}
sueldo = sueldo*0.96;
}
cout<<"El sueldo final es "<<sueldo<<endl;
return 0;
}

ESTRUCTURAS REPETITIVAS
#include <iostream>
using namespace std;
int main(){
/** Estructuras repetitiva
1.- While

-> Mientras

2.- Do While -> Hacer mientras


**/
int numero = 5;
/** "PRE"-CONDICION **/
while(numero==6){
cout<<"Ciclo while"<<endl;
}
/** "POST" CONDICIONAL***/
do{
cout<<"Ciclo do-while"<<endl;
}while(numero==6);/**<--**/
return 0;
}

Contadores
#include <iostream>
using namespace std;
int main(){
/** Contador y acumulador
**/
int contador=0,acumulador=0;
cout<<acumulador<<endl;
while(contador<=10){
cout<<contador<<endl;
contador++;
acumulador = acumulador + contador;
/**
CONTADOR

ACUMULADOR

10

15

21

28

36

45

10

55

11

66

**/
}
cout<<"Contador "<<contador<<endl;
cout<<"El valor de acumulador es "<<acumulador<<endl;
return 0;
}

Estructura For
#include <iostream>
using namespace std;
int main(){
/** Estructura for (Para) **/
for(int i=1;i<=10;i--){
cout<<i<<endl;
}
return 0;
}

mbito de una variable


#include <iostream>
using namespace std;
int i=100;
int main(){
/** Ambito de una variable **/
for(;;i++){
cout<<i<<endl;
if(true){
cout<<i<<endl;
}
}
return 0;
}
Ejercicio 12:
Mostrar los primeros nmeros naturales.
#include <iostream>
using namespace std;
int main(){

for(int i=0;i<=100;i++){
cout<<i<<endl;
}
return 0;
}
Ejercicio 13:
Escriba un programa que calcule la cantidad de dgitos que tiene un nmero
#include <iostream>
using namespace std;
int main(){
int numero,contador=0;
cout<<"Ingrese el numero:";
cin>>numero;
do{
numero = numero/10;
contador++;
}while(numero!=0);
cout<<"La cantidad de digitos es "<<contador<<endl;
return 0;
}
Ejercicio 14:
Escriba un programa que lea varios valores hasta ingresar un valor negativo. Luego muestre la
suma de estos.
#include <iostream>
using namespace std;
int main(){
float numero,suma=0;
do{
cout<<"Numero:";
cin>>numero;
if(numero>=0){
suma = suma + numero;

}
}while(numero>=0);
cout<<"Total "<<suma<<endl;
return 0;
}
Ejercicio 15:
Muestre el resultado de la siguiente sucesin: 1/2 + 1/3 + 1/4 + 1/5 + ... 1/N .
#include <iostream>
using namespace std;
int main(){
int N;
float suma=0;
cout<<"Ingrese N :";
cin>>N;

for(int i=2;i<=N;i++){
suma = suma + 1.0/i;
}
cout<<"La suma total es "<<suma<<endl;
return 0;
}
Ejercicio 16:
Escriba un programa que dibuje un triangulo rectngulo usando algn caracter. Ingrese por consola
el valor de N, siendo N la base y altura del triangulo.
Ejemplo. N = 4
*
**
***
****
#include <iostream>
using namespace std;
int main(){

int N;
cout<<"Ingrese N:";
cin>>N;
for(int i=1;i<=N;i++){
for(int e=1;e<=i;e++){
cout<<"*";
}
cout<<endl;
}
return 0;
}

Ejercicio 17:
Los trminos de la sucesin de Fibonacci se calculan as: a1 = 0 a2 = 1 an = an-1 + an-2.
Disear un programa que calcule el n-simo trmino de la sucesin de Fibonacci.
valores 0 1 1 2 3 5 8 13 21 34 55
termino 0 1 2 3 4 5 6 7 8

9 10

#include <iostream>
using namespace std;
int main(){
int N,a1=0,a2=1,an;
cout<<"Ingrese N:";
cin>>N;
if(N<2){
cout<<"El n-esino termino es "<<N<<endl;
}
else{
for(int i=2;i<=N;i++){
an = a1+a2;
a1 = a2;
a2 = an;

}
cout<<"El n-esino termino es "<<an<<endl;
}
return 0;
}

ARRELGOS UNIDIMENSIONALES Y BIDIMENSIONALES


Arreglos unidimensionales

#include <iostream>
using namespace std;
int main(){
/** Arreglos unidimensionales **/
int arreglo1[10];/**declaracion**/
int arreglo2[]={1,2,3,4,5};/**asignacion**/
for(int i=0;i<10;i++){
cout<<"Indice "<<i<<":";
cin>>arreglo1[i];
}
for(int i=0;i<10;i++){
cout<<arreglo1[i]<<" ";
}
/**EL PRIMER ELEMENTO TIENE INDICE 0**/
/**EL ULTIMO ELEMENTO TIENE INDICE n-1**/
/*cout<<"El primer elemento es "<<arreglo1[0]<<endl;
cout<<"El ultimo elemento es "<<arreglo1[9]<<endl;
*/
return 0;
}
Cadenas de texto
#include <iostream>
using namespace std;
int main(){
/** CADENAS DE TEXTO **/
char cadena1[] = "Gianmarco Tantaruna";
char cadena2[] = {'G','i','a','n','m','a','r','c','o','\0'};
char cadena3[30];

cout<<"Ingrese una cadena:";


cin.getline(cadena3,30);
cout<<"La cadena es "<<cadena3<<endl;

return 0;
}
Buffer de entrada
#include <iostream>
using namespace std;
int main(){
/** BUFFER DE ENTRADA **/
char nombre[25];
int edad;
/*******BUFFER**********
**********************/
cout<<"Ingresa tu edad:";
cin>>edad;
cin.ignore();/**ELIMINA EL PRIMER CARACTER QUE ENCUENTRA**/
cout<<"Ingresa tu nombre:";
cin.getline(nombre,25);
cout<<"Te llamas "<<nombre<<" y tu edad es "<<edad<<endl
return 0;
}
Ejercicio 18:
Lea 2 arreglos unidimensionales con valores reales y usando otro arreglo calcule la multiplicacin
de los valores de ambos arreglos.
1

2 3

5 6

10 18

#include <iostream>
#define MAX 5
using namespace std;
int main(){
int arreglo1[MAX];
int arreglo2[MAX];
int arreglo3[MAX];

cout<<"ARREGLO 1:"<<endl;
for(int i=0;i<MAX;i++){
cout<<"Indice "<<i<<" :";
cin>>arreglo1[i];
}
cout<<"ARREGLO 2:"<<endl;
for(int i=0;i<MAX;i++){
cout<<"Indice "<<i<<" :";
cin>>arreglo2[i];
}
cout<<"ARREGLO RESULTANTE"<<endl;
for(int i=0;i<MAX;i++){
arreglo3[i] = arreglo1[i]*arreglo2[i];
}
for(int i=0;i<MAX;i++){
cout<<arreglo3[i]<<" ";
}
return 0;
}
Ejercicio 19:
Lea 2 arreglos enteros y genere otro con la combinacin de ambos arreglos.
No necesariamente tendrn la misma dimensin.
Arreglo1

1 2 3 4

Arreglo2

5 6 7

Arreglo3

1 2 3 4 5 6 7

#include <iostream>
#define MAX 100
using namespace std;
int main(){
int arreglo1[MAX],arreglo2[MAX],arreglo3[MAX*2];
int n1,n2,n3,e;
do{

cout<<"Ingrese la cantidad de elementos del arreglo 1:";


cin>>n1;
}while(n1>MAX || n1<=0);
for(int i=0;i<n1;i++){
cout<<"Elemento del indice "<<i<<" :";
cin>>arreglo1[i];
}
do{
cout<<"Ingrese la cantidad de elementos del arreglo 2:";
cin>>n2;
}while(n2>MAX || n2<=0);
for(int i=0;i<n2;i++){
cout<<"Elemento del indice "<<i<<" :";
cin>>arreglo2[i];
}
cout<<"ARREGLO FORMADO"<<endl;
e = 0;
n3 = n1+n2;
for(int i=0;i<n1;i++){
arreglo3[e] = arreglo1[i];
e++;
}
for(int i=0;i<n2;i++){
arreglo3[e] = arreglo2[i];
e++;
}
for(int i=0;i<n3;i++){
cout<<arreglo3[i]<<" ";
}
return 0;
}
Ejercicio 20:

Lea su nombre en minscula y muestre por consola su nombre escrito en mayscula. Use la
funcin toupper.
#include <iostream>
using namespace std;
int main(){
char nombre[30],c;
int i=0;
cout<<"Ingresa tu nombre:";
cin.getline(nombre,30);
while(nombre[i]){
c = toupper(nombre[i]);
i++;
cout<<c;
}
return 0;
}
Ejercicio 21:
Lea un arreglo e indique cual es el menor elemento y en qu ndice se encuentra.
5 8 6 3 1 0 9
M
#include <iostream>
using namespace std;
int main(){
int arreglo[10];
int menor;
for(int i=0;i<10;i++){
cout<<"Ingrese el valor de indice "<<i<<" :";
cin>>arreglo[i];
}
menor = 0;
for(int i=1;i<10;i++){
if(arreglo[i]<arreglo[menor]){

menor = i;
}
}
cout<<"El menor elemento es "<<arreglo[menor]<<" con el indice "<<menor<<endl;
return 0;
}
Ejercicio 22:
Ordenamiento Burbuja
5 3 1 6 4 2 7 -> despues del primer paso
3 1 5 4 2 6 7 -> despues del segundo paso
1 3 4 2 5 6 7 -> despues del tercer paso
1 3 2 4 5 6 7 -> despues del cuarto paso
1 2 3 4 5 6 7 -> despues del quinto paso
7 6 5 4 3 2 1 -> necesitaria 7 pasos
#include <iostream>
using namespace std;
int main(){
int A[]={6,5,9,3,0,1,8,7,4,2};
for(int i=0;i<10;i++){
for(int e=0;e<9;e++){
if(A[e]<A[e+1]){
int aux = A[e];
A[e] = A[e+1];
A[e+1] = aux;
}
}
}
for(int e=0;e<10;e++){
cout<<A[e]<<" ";
}
return 0;
}

Arreglos bidimensionales
#include <iostream>
using namespace std;
int main(){
/** MATRICES
C0 C1 C2
F0 1 2 3
F1 4 5 6
F2 7 8 9
**/
int A[][3]={{1,2,3},{4,5,6},{7,8,9}};
int filas=3,columnas=3;
int B[filas][columnas];

for(int i=0;i<filas;i++){
for(int j=0;j<columnas;j++){
cout<<"["<<i<<"]["<<j<<"] :";
cin>>B[i][j];
}
cout<<endl;
}
for(int i=0;i<filas;i++){
for(int j=0;j<columnas;j++){
cout<<B[i][j]<<" ";
}
cout<<endl;
}
return 0;
}

Ejercicio 23:

Escriba un programa que pida al usuario los datos de dos matrices de NxN y luego muestre su
suma.
#include <iostream>
#define MAX 100
using namespace std;
int main(){
int A[MAX][MAX];
int B[MAX][MAX];
int C[MAX][MAX];
int N;
cout<<"Ingrese el valor de N:";
cin>>N;
cout<<"MATRIZ A"<<endl;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
cout<<"["<<i<<"]["<<j<<"]:";
cin>>A[i][j];
}
}
cout<<"MATRIZ B"<<endl;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
cout<<"["<<i<<"]["<<j<<"]:";
cin>>B[i][j];
}
}
cout<<"MATRIZ SUMA"<<endl;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
C[i][j] = A[i][j] + B[i][j];
cout<<C[i][j]<<" ";
}
cout<<endl;

}
return 0;
}
Ejercicio 24:
Escriba un programa que pida dos matrices de NxN y luego genere otra matriz con el producto de
estas.
a b

e f

a*e+b*g a*f+b*h

c d

g h

c*e+d*g c*f+g*h

#include <iostream>
#define MAX 100
using namespace std;
int main(){
int A[][3] = { {1,2,3},
{4,5,6},
{7,8,9}};
int B[][3] = { {5,6,7},
{2,1,3},
{2,3,1}};
int C[3][3];/** 15 17 16
42 47 49
69 77 82**/
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
C[i][j] = 0;
for(int k=0;k<3;k++){
C[i][j] = C[i][j] + (A[i][k]*B[k][j]);
}
cout<<C[i][j]<<" ";
}
cout<<endl;
}
return 0;

}
Ejercicio 25:
Escriba un programa que genere la matriz transpuesta de
una matriz.
1 2 3

1 4

4 5 6

2 5
3 6

#include <iostream>
using namespace std;
int main(){
int A[][3]={{1,2,3},{4,5,6}};/** 2 filas 3 columnas
int filas = 2,columnas = 3;
int B[columnas][filas];
for(int i=0;i<filas;i++){
for(int j=0;j<columnas;j++){
B[j][i] = A[i][j];
}
}
for(int i=0;i<columnas;i++){
for(int j=0;j<filas;j++){
cout<<B[i][j]<<" ";
}
cout<<endl;
}
return 0;
}

**/

PUNTEROS Y REFERENCIAS
Declaracin de un puntero y operador de direccin
#include <iostream>
using namespace std;

int main(){
/** PUNTEROS
* -> declaracion de puntero
& -> direccin de ...

partes de la variable
nombre y tipo
contenido
direccin de memoria
**/
int var = 100;
int *puntero = &var;
cout<<"Contenido de var "<<var<<endl;/** MUESTRO EL CONTENIDO DE LA VARIABLE **/
cout<<"Direccin de var "<<&var<<endl;/** MUESTRO LA DIRECCIN DE LA VARIABLE **/
cout<<endl;
cout<<"Contenido del puntero "<<puntero<<endl;
cout<<"Direccion del puntero "<<&puntero<<endl;
return 0;
}
Operador de indireccin
#include <iostream>
using namespace std;
int main(){
/** Indireccion
* -> indireccion -> dentro de la direccion
**/
int var = 10*10;
int *puntero = &var;/** 4 bytes **/
*puntero = 50;
cout<<"El valor de var es "<<var<<endl;
return 0;
}

Referencias
#include <iostream>
using namespace std;
int main(){
/** Referencia
& -> operador de referencia
**/
int var = 100;
int &referencia = var;
cout<<"El contenido de var es "<<var<<endl;
cout<<"La direccion de var es "<<&var<<endl;
cout<<endl;
cout<<"El contenido de referencia es "<<referencia<<endl;
cout<<"La direccion de referencia es "<<&referencia<<endl;
return 0;
}
Arreglos y aritmtica de punteros
#include <iostream>
using namespace std;
int main(){
/** PUNTEROS Y ARREGLOS **/
int array[] ={10,20,30,40};
cout<<*array<<endl;
cout<<*(array+1)<<endl;
cout<<*(array+2)<<endl;
cout<<*(array+3)<<endl;
return 0;
}

FUNCIONES
Funciones y procedimientos
#include <iostream>
using namespace std;

/** PROTOTIPO **/


void mensaje();
int suma(int a,int b);
bool esPar(int);
int main(){
if(esPar(8)){
cout<<"El numero es par"<<endl;
}
else{
cout<<"No es par"<<endl;
}
return 0;
}
void mensaje(){
cout<<"Mensaje dentro de un procedimiento"<<endl;
}
int suma(int a,int b){
int c = a+b;
return c;
}
bool esPar(int a){
if(a%2==0){
return true;
}
else{
return false;
}
}
Paso por valor y paso por referencia
#include <iostream>
using namespace std;
void cambiarCien(int&);

int main(){
int numero = 5;
cout<<"Antes del procedimiento :"<<numero<<endl;
cambiarCien(numero);
cout<<"Despues del procedimiento :"<<numero<<endl;
return 0;
}
/** PASO POR VALOR
Paso unicamente EL VALOR de la variable
---int a = numero;
PASO POR REFERENCIA
Paso LA REFERENCIA de una variable
---int &a = numero;
**/
void cambiarCien(int &a){
a = 100;
}

Paso de punteros
#include <iostream>
using namespace std;
void cambiarCien(int*);

int main(){
int numero = 5;
cout<<"Antes del procedimiento :"<<numero<<endl;
cambiarCien(&numero);
cout<<"Despues del procedimiento :"<<numero<<endl;
return 0;
}
/** PASO DE PUNTEROS
int *a = &numero;
**/
void cambiarCien(int *a){
*a = 100;
}
Paso de arreglos y matrices
#include <iostream>
#define MAX 100
using namespace std;
void mostrarArreglo(int[],int);
void llenarArreglo(int[],int);
void mostrarMatriz(int[][MAX],int,int);
void llenarMatriz(int[][MAX],int,int);
int main(){
int A[5];
int M[10][MAX];
llenarArreglo(A,5);
mostrarArreglo(A,5);
llenarMatriz(M,2,2);
mostrarMatriz(M,2,2);
return 0;
}
void mostrarArreglo(int A[],int N){
for(int i=0;i<N;i++){

cout<<A[i]<<" ";
}
cout<<endl;
}
void llenarArreglo(int A[],int N){
for(int i=0;i<N;i++){
cout<<"Elemento "<<i<<":";
cin>>A[i];
}
}
void mostrarMatriz(int M[][MAX],int filas,int columnas){
for(int i=0;i<filas;i++){
for(int j=0;j<columnas;j++){
cout<<M[i][j]<<" ";
}
cout<<endl;
}
}
void llenarMatriz(int M[][MAX],int filas,int columnas){
for(int i=0;i<filas;i++){
for(int j=0;j<columnas;j++){
cout<<"Elemento "<<i<<","<<j<<":";
cin>>M[i][j];
}
cout<<endl;
}
}

Sobrecarga de funciones
#include <iostream>
using namespace std;
int suma(int,int);

float suma(float,float);
double suma(double,double);
float suma(int,double);
int main(){
int a = 10,b=40;
float c = 40.0,d = 50.0;
double e = 100.50;
cout<<suma(c,d)<<endl;
return 0;
}
int suma(int a,int b){
return a+b;
}
float suma(float a ,float b){
return a+b;
}
double suma(double a,double b){
return a+b;
}
float suma (int a,double b){
return a+b;
}
Ejercicio 26:
Escriba una funcion que calcule la potencia de un numero
valor -> exponente
2 ^ 3=8

#include <iostream>
using namespace std;
int potencia(int valor,int exponente);
int main(){

cout<<potencia(7,7)<<endl;
return 0;
}
int potencia(int valor,int exponente){
/** 2 ^ 3 = 2*2*2

**/

int acumulador = 1;
for(int i=1;i<=exponente;i++){
acumulador=acumulador*valor;
}
return acumulador;
}
Ejercicio 27:
Escriba una funcion que diga si dos nmeros son amigos.
Dos numeros son amigos si cada uno de ellos es igual a la suma de
los divisores del otro.
284: 1 + 2 + 4 + 71 + 142 = 220
220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
#include <iostream>
using namespace std;
bool sonAmigos(int n1,int n2);
int sumaDivisores(int numero);
int main(){
if(sonAmigos(284,220)){
cout<<"Son amigos"<<endl;
}
else{
cout<<"NO son amigos"<<endl;
}
return 0;
}
bool sonAmigos(int n1,int n2){
if(sumaDivisores(n1) == n2 && sumaDivisores(n2)==n1){

return true;
}
else{
return false;
}
}
int sumaDivisores(int numero){
/** 10 -> 1 2 3 4 5 6 7 8 9 **/
int acumulador = 0;
for(int i=1;i<=numero/2;i++){
if(numero%i==0){
acumulador = acumulador + i;
}
}
return acumulador;
}
Ejercicio 28:
Cree una funcion que permita invertir los elementos de un arreglo
#include <iostream>
using namespace std;
void invertir (int[],int);
void mostrarArreglo(int[],int);
int main(){
int arreglo[]={9,0,1,8};
mostrarArreglo(arreglo,4);
invertir(arreglo,4);
mostrarArreglo(arreglo,4);
return 0;
}
void invertir (int A[],int N){
/***
9,0,5,1,8 -> 8 1 5 0 9

01234
9 0 1 8 -> 8 1 0 9
*****/
for(int i=0;i<N/2;i++){
int aux = A[i];
A[i] = A[N-1-i];
/**
0 3
1 2
**/
A[N-1-i] = aux;
}
}
void mostrarArreglo(int A[],int N){
for(int i=0;i<N;i++){
cout<<A[i]<<" ";
}
cout<<endl;
}

REGISTROS
#include <iostream>
using namespace std;
struct Persona{
char nombre[30];/** campos **/
char apellido[30];
int edad;
};
int main(){
/** REGISTROS **/
Persona p;
cout<<"Ingrese el nombre:";

cin.getline(p.nombre,30);
cout<<"Ingrese el apellido:";
cin.getline(p.apellido,30);
cout<<"Ingrese la edad:";
cin>>p.edad;
cout<<"LOS DATOS SON:"<<endl;
cout<<"Nombre :"<<p.nombre<<endl;
cout<<"Apellido:"<<p.apellido<<endl;
cout<<"Edad :"<<p.edad<<endl;
return 0;
}
Ejercicio 28:
Escribir un programa que defina una tabla de proveedores teniendo cada proveedor los siguientes
datos: nombre, cantidad vendida, precio unitario (introducidos por teclado) e importe (calculado).
Visualizar los datos de cada proveedor, el importe total de compra as como el nombre del
proveedor Ms barato y el del Ms caro.

#include <iostream>
using namespace std;
struct Proveedor{
char nombre[30];
int cantidadVendida;
float precioUnitario;
float importe;
};
void llenarProveedores(Proveedor[],int);
Proveedor buscarMasCaro(Proveedor[],int);
Proveedor buscarMasBarato(Proveedor[],int);
void mostrarProveedor(Proveedor);

int main(){
Proveedor proveedores[30],masBarato,masCaro;
int N = 5;
llenarProveedores(proveedores,N);
masBarato = buscarMasBarato(proveedores,N);
masCaro = buscarMasCaro(proveedores,N);
cout<<"PROVEEDOR MAS BARATO"<<endl;
mostrarProveedor(masBarato);
cout<<"PROVEEDOR MAS CARO"<<endl;
mostrarProveedor(masCaro);
return 0;
}
void llenarProveedores(Proveedor A[],int N){
for(int i=0;i<N;i++){
cout<<"Proveedor "<<i+1<<endl;
cout<<"

Nombre :";

cin.getline(A[i].nombre,30);
cout<<"Cantidad vendida :";
cin>>A[i].cantidadVendida;
cin.ignore();
cout<<" Precio Unitario :";
cin>>A[i].precioUnitario;
cin.ignore();
A[i].importe = A[i].precioUnitario*A[i].cantidadVendida;
cout<<endl;
}
}
Proveedor buscarMasCaro(Proveedor A[],int N){
Proveedor masCaro = A[0];
for(int i=1;i<N;i++){
if(A[i].precioUnitario>masCaro.precioUnitario){
masCaro = A[i];

}
}
return masCaro;
}
Proveedor buscarMasBarato(Proveedor A[],int N){
Proveedor masBarato = A[0];
for(int i=1;i<N;i++){
if(A[i].precioUnitario<masBarato.precioUnitario){
masBarato = A[i];
}
}
return masBarato;
}
void mostrarProveedor(Proveedor p){
cout<<"

Nombre :"<<p.nombre<<endl;

cout<<"Precio Unitario :"<<p.precioUnitario<<endl;


cout<<"Cantidad vendida:"<<p.cantidadVendida<<endl;
cout<<"

Importe :"<<p.importe<<endl;

Ejercicio 29:
Escribir un programa que permita ingresar el nombre y 3 notas de N alumnos y los almacene en un
array de estructura. Mostrar los alumnos ingresados incluyendo su promedio ordenado por orden
de merito.
#include <iostream>
using namespace std;
struct Alumno{
char nombre[30];
float nota1;
float nota2;
float nota3;
float promedio;
};

void llenarAlumnos(Alumno[],int);
void mostrarAlumnos(Alumno[],int);
void ordenarPromedios(Alumno[],int);
int main(){
Alumno alumnos[30];
int N = 4;
llenarAlumnos(alumnos,N);
ordenarPromedios(alumnos,N);
cout<<"ORDEN DE MERITO"<<endl;
mostrarAlumnos(alumnos,N);
return 0;
}
void llenarAlumnos(Alumno A[],int N){
for(int i=0;i<N;i++){
cout<<"ALUMNO "<<i+1<<endl;
cout<<"Nombre : ";
cin.getline(A[i].nombre,30);
cout<<" Nota 1: ";
cin>>A[i].nota1;
cin.ignore();
cout<<" Nota 2: ";
cin>>A[i].nota2;
cin.ignore();
cout<<" Nota 3: ";
cin>>A[i].nota3;
cin.ignore();
cout<<endl;
A[i].promedio = (A[i].nota1+A[i].nota2+A[i].nota3)/3;
}
}
void mostrarAlumnos(Alumno A[],int N){
for(int i=0;i<N;i++){

cout<<" Nombre : "<<A[i].nombre<<endl;


cout<<"Promedio : "<<A[i].promedio<<endl;
cout<<endl;
}
}
void ordenarPromedios(Alumno A[],int N){
/*****
13 12 10 9
*******/
for(int i=1;i<=N;i++){
for(int j=0;j<N-1;j++){
if(A[j].promedio<A[j+1].promedio){
Alumno aux = A[j];
A[j] = A[j+1];
A[j+1] = aux;
}
}
}
}

Ejercicio 30:
Disear un programa que imprima todos los nombres, apellidos y edades de todos los varones
nacidos entre dos fechas ingresadas desde el teclado. Un registro contiene los siguientes datos :
Apellidos,Nombres,Fecha de nacimiento(Da,Mes,Ao), edad y sexo
#include <iostream>
using namespace std;
struct Fecha{
int dia;
int mes;
int anho;
};
struct Persona{
char nombre[30];

char apellido[45];
int edad;
char sexo;
Fecha fechaNacimiento;
};
void llenarPersonas(Persona[],int);
void mostrarVarones(Persona[],int,Fecha,Fecha);
Persona leerPersona();
Fecha leerFecha();
bool estaEntreFechas(Persona,Fecha,Fecha);
int numeroDias(Fecha);
int main(){
Persona personas[30];
int N = 4;
Fecha ini,fin;
llenarPersonas(personas,N);
cout<<"Fecha inicio :";
ini = leerFecha();
cout<<"Fecha de fin :";
fin = leerFecha();
cout<<endl;
mostrarVarones(personas,N,ini,fin);
return 0;
}
void llenarPersonas(Persona P[],int N){
for(int i=0;i<N;i++){
cout<<"PERSONA "<<i+1<<endl;
P[i] = leerPersona();
cout<<endl;
}
}
void mostrarVarones(Persona P[],int N ,Fecha ini,Fecha fin){

for(int i=0;i<N;i++){
if((P[i].sexo == 'M') && (estaEntreFechas(P[i],ini,fin))){
cout<<" Nombre : "<<P[i].nombre<<endl;
cout<<"Apellido: "<<P[i].apellido<<endl;
cout<<"

Edad: "<<P[i].edad<<endl;

cout<<endl;
}
}
}
Persona leerPersona(){
Persona p;
cout<<" Nombre :";
cin.getline(p.nombre,30);
cout<<"Apellido:";
cin.getline(p.apellido,45);
cout<<"

Edad:";

cin>>p.edad;
cout<<"

Sexo:";

cin>>p.sexo;
cout<<"Fecha de nacimiento : ";
p.fechaNacimiento = leerFecha();
cin.ignore();
return p;
}
Fecha leerFecha(){
Fecha f;
cin>>f.dia>>f.mes>>f.anho;
return f;
}
bool estaEntreFechas(Persona p,Fecha ini,Fecha fin){
/**
1/1/1 = 1 + 1*30 + 1*365 = 396

5/1/1 = 5 + 1*30 + 1*365 = 400


27/1/1= 27 + 1*30+1*365 = 422
**/
int diasIni = numeroDias(ini);
int diasFin = numeroDias(fin);
int diasNacimiento = numeroDias(p.fechaNacimiento);
if(diasIni<=diasNacimiento && diasNacimiento<=diasFin){
return true;
}
else{
return false;
}
}
int numeroDias(Fecha f){
return f.dia + f.mes*30+f.anho*365;
}

ARCHIVOS DE TEXTO Y BINARIOS


Archivos de texto. Salida ( Escritura )
#include <iostream>
#include <fstream>
using namespace std;
int main(){
/***** ARCHIVOS DE TEXTO *****/
/**
cout -> Console OUTput -> SALIDA por consola
cin -> Console INput -> ENTRADA por consola

ifstream -> InputFile Stream -> Flujo de entrada de Archivo (lectura)

ofstream -> OutputFileStream -> Flujo de salida a archivo (Escritura)

3 PASOS PRINCIPALES
1.- Abrir mi archivo
2.- Operar sobre mi archivo
3.- CERRAR tu archivo
**/
/** CUANDO ES FLUJO DE SALIDA EL ARCHIVO SE CREA AUTOMATICAMENTE **/
ofstream salida;
salida.open("archivo.txt");
/** REDIRECCION DE FLUJO **/
salida<<"Hola mundo"<<endl;
salida.close();
return 0;
}

Archivo de texto. Entrada ( Lectura )


#include <iostream>
#include <fstream>
using namespace std;

int main(){
/***** ARCHIVOS DE TEXTO *****/
/**
cout -> Console OUTput -> SALIDA por consola
cin -> Console INput -> ENTRADA por consola

ifstream -> InputFile Stream -> Flujo de entrada de Archivo (lectura)

ofstream -> OutputFileStream -> Flujo de salida a archivo (Escritura)

3 PASOS PRINCIPALES
1.- Abrir mi archivo
2.- Operar sobre mi archivo
3.- CERRAR tu archivo
**/
ifstream entrada;
char linea[80];
entrada.open("archivo.txt");
entrada.getline(linea,80);
cout<<linea<<endl;
entrada.close();
return 0;
}

Modos de apertura
#include <iostream>
#include <fstream>
using namespace std;
int main(){
/***** MODOS DE APERTURA *****/
/**
ios:: in -> modo lectura (entrada)
ios:: out -> modo escritura (salida)
ios::binary-> modo binario
ios::ate -> La posicion inicial al final del archivo (AT the End -> al final)
ios::app -> Las operaciones se realizan siempre al final del archivo

ios::trunc -> si el archivo existe, se elimina su contenido para escritura


**/
ofstream salida;
salida.open("archivo.txt",ios::app);
salida<<"Linea 7"<<endl;
salida<<"Linea 8"<<endl;
salida<<"Linea 9"<<endl;
salida.close();
return 0;
}
Verificar el estado de flujo
#include <iostream>
#include <fstream>
using namespace std;
int main(){
/***** ESTADO DEl ARCHIVO *****/
/**
bad() -> Cuando no tenemos permiso. Cuando no hay espacio. Cuando no existe el archivo
fail() -> Error de formato (tratas de leer int y solo encuentras un char).
eof() -> Fin de archivo End Of File
good() -> **/
ifstream entrada;
char linea[80];
entrada.open("archivo.txt");
if(entrada.good()){
entrada.getline(linea,80);
cout<<linea<<endl;
}
else{
cout<<"Archivo en mal estado"<<endl;
}
return 0;

}
Leer mltiples lneas de texto
#include <iostream>
#include <fstream>
using namespace std;
int main(){
/***** LEER MULTIPLES LINEAS ******/
ifstream entrada;
char linea[256];
entrada.open("Estado_Flujo.cpp");
if(entrada.good()){
cout<<"Archivo en buen estado"<<endl;
while(!entrada.eof()){
entrada.getline(linea,256);
cout<<linea<<endl;
}
}
else{
cout<<"No se puede leer"<<endl;
}
entrada.close();
return 0;
}
Archivos Binarios. Escritura
#include <iostream>
#include <fstream>
using namespace std;
struct Persona{
char nombre[8];
int edad;
};
int main(){

/***** ARCHIVOS BINARIOS ******/


ofstream salida;
salida.open("data.bin",ios::binary);
/**
EL PROCESO DE ESCRITURA ES
DESDE MEMORIA --> AL ARCHIVO
(es byte por byte)
1.- Desde que punto de la memoria empezar el traspaso
2.- Cuantos bytes voy a pasar
**/
/****
1er parametro.-Un puntero de tipo char que guarde el byte de inicio del registro
2do parametro.- Cuantos bytes voy a pasar
****/
Persona p = {"Gian",23};
salida.write((char*)&p,sizeof(Persona));
salida.write((char*)&p,sizeof(Persona));
salida.close();
return 0;
}

Archivos Binarios. Lectura


#include <iostream>
#include <fstream>
using namespace std;
struct Persona{
char nombre[8];
int edad;
};
int main(){
/***** ARCHIVOS BINARIOS LECTURA ******/
/**

EL PROCESO DE LECTURA ES
DESDE ARCHIVO --> A MEMORIA
(es byte por byte)
1.- A que punto de la memoria voy a pasar los bytes
2.- Cuantos bytes voy a pasar
**/
/****
1er parametro.-Un puntero de tipo char que guarde el byte de inicio del registro
2do parametro.- Cuantos bytes voy a pasar
****/
Persona p;
ifstream entrada;
entrada.open("data.bin",ios::binary);
while(entrada.read((char*)&p,sizeof(Persona))){
/**********
EOF

READ?

NO

SI

Gian,23

NO

SI

Gian,23

NO

NO

Gian,23

SI
************/
cout<<p.nombre<<endl;
cout<<p.edad<<endl;
}
entrada.close();
return 0;
}

Remover y renombrar los archivos


#include <iostream>
#include <fstream>
using namespace std;

int main(){
/***** ELIMINAR Y RENOMBAR ARCHIVO ******/
/** RENAME
if(rename("archivo.txt","nuevoArchivo.txt")==0){
cout<<"El archivo se renombro con exito"<<endl;
}
else{
cout<<"NO se pudo renombrar"<<endl;
}**/
/** REMOVE**/
if(remove("nuevoArchivo.txt")==0){
cout<<"Se elimino con exito"<<endl;
}
else{
cout<<"NO se pudo eliminar"<<endl;
}
return 0;
}

Ejercicio 31:
Escribe un programa que lea un archivo archivo.txt y escriba en otro archivo archivo2.TXT el
contenido del archivo de entrada con todas las letras en maysculas.
#include <iostream>
#include <fstream>
using namespace std;
void pasarAMayusculas(char cadena[]);
void pasarLineas(char origen[],char destino[]);
int main(){
pasarLineas("archivo.txt","archivo2.txt");
return 0;
}
void pasarAMayusculas(char cadena[]){

int i=0;
while(cadena[i]){
cadena[i] = toupper(cadena[i]);
i++;
}
}
void pasarLineas(char origen[],char destino[]){
ifstream entrada;
ofstream salida;
char linea[256];
entrada.open(origen);
salida.open(destino);
if(entrada.good()){
while(!entrada.eof()){
entrada.getline(linea,256);
pasarAMayusculas(linea);
salida << linea << endl;
}
}

else{
cout<<"NO se pudo realizar el paso de lineas"<<endl;
}
entrada.close();
salida.close();
}

TALLER: Creacin de una agenda bsica


#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <conio.h>
using namespace std;
const char DIR_ARCHIVO[] = "contactos.dat";

struct Contacto{
char nombre[30];
char apellido[45];

int edad;
char correo[45];
};
/*********** FUNCIONES DEL PROGRAMA ****************/
void ingresarContacto(Contacto c);
Contacto leerContacto();
bool existeContacto(char nombre[],char apellido[]);
Contacto buscarContacto(char nombre[],char apellido[]);
void mostrarContacto(Contacto c);
void listarContactos();
void eliminarContacto(char nombre[],char apellido[]);
void actualizarContacto(char nombre[],char apellido[]);
/***************************************************/

/*********** FUNCIONES PARA EL MENU ****************/


void menuIngresar();
void menuBuscar();
void menuListado();
void menuEliminar();
void menuActualizar();
/***************************************************/
int main(){
/***** AGENDA

*****/

/** Ingresar Contacto


Buscar un Contacto
Ver listado de Contactos
Eliminar un contacto
Actualizar un Contacto
**/
int op;
do{

system("cls");
cout<<"\t\t\t\t\tAGENDA"<<endl;
cout<<"\t\t\tIngresar contacto............[1]"<<endl;
cout<<"\t\t\tBuscar contacto..............[2]"<<endl;
cout<<"\t\t\tVer listado..................[3]"<<endl;
cout<<"\t\t\tEliminar contacto............[4]"<<endl;
cout<<"\t\t\tActualizar contacto..........[5]"<<endl;
cout<<"\t\t\tSALIR........................[6]"<<endl;
cout<<"\t\t\tIngrese una opcion ->:";
cin>>op;
cin.ignore();
switch(op){
case 1 : system("cls");/** CLean Screen **/
menuIngresar();
break;
case 2 : system("cls");
menuBuscar();
break;
case 3 : system("cls");
menuListado();
break;
case 4 : system("cls");
menuEliminar();
break;
case 5 : system("cls");
menuActualizar();
break;
case 6 : break;
default: cout<<"\t\t\tOpcion incorrecta"<<endl;
}
}while(op!=6);
return 0;

void ingresarContacto(Contacto c){


ofstream salida;
/**/
salida.open(DIR_ARCHIVO,ios::binary | ios::app);
salida.write((char*)&c,sizeof(Contacto));
salida.close();
}

Contacto leerContacto(){
Contacto c;
cout<<"\t\t\tNOMBRE : ";
cin.getline(c.nombre,30);
cout<<"\t\t\tAPELLIDO : ";
cin.getline(c.apellido,45);
cout<<"\t\t\tEDAD

: ";

cin>>c.edad;
cin.ignore();
cout<<"\t\t\tCORREO : ";
cin.getline(c.correo,45);
return c;
}

bool existeContacto(char nombre[],char apellido[]){


Contacto c;
ifstream entrada;
entrada.open(DIR_ARCHIVO,ios::binary);
if(entrada.good()){
while(entrada.read((char*)&c,sizeof(Contacto))){
/**strcmp -> string comparison -> comparacion de cadenas**/
if(strcmp(nombre,c.nombre)==0 && strcmp(apellido,c.apellido)==0){

entrada.close();
return true;
}
}
entrada.close();
return false;
}
else{
entrada.close();
return false;
}
}

Contacto buscarContacto(char nombre[],char apellido[]){


Contacto c;
ifstream entrada;
entrada.open(DIR_ARCHIVO,ios::binary);
if(entrada.good()){
while(entrada.read((char*)&c,sizeof(Contacto))){
/**strcmp -> string comparison -> comparacion de cadenas**/
if(strcmp(nombre,c.nombre)==0 && strcmp(apellido,c.apellido)==0){
entrada.close();
return c;
}
}
}
}
void mostrarContacto(Contacto c){
cout<<endl;
cout<<"\t\t\t NOMBRE : "<<c.nombre<<endl;
cout<<"\t\t\t APELLIDO : "<<c.apellido<<endl;
cout<<"\t\t\t EDAD

: "<<c.edad<<endl;

cout<<"\t\t\t CORREO : "<<c.correo<<endl;


cout<<endl;
}

void listarContactos(){
ifstream entrada;
entrada.open(DIR_ARCHIVO,ios::binary);
Contacto c;
if(entrada.good()){
while(entrada.read((char*)&c,sizeof(Contacto))){
mostrarContacto(c);
}

}
else{
cout<<"No se puede leer el archivo"<<endl;
}
entrada.close();
}

void eliminarContacto(char nombre[],char apellido[]){


/**
contactos.dat
|
REGISTRO2
**/
ifstream entrada;
ofstream temporal;
entrada.open(DIR_ARCHIVO,ios::binary);
temporal.open("temp.dat",ios::binary);
Contacto c;
if(entrada.good()){

while(entrada.read((char*)&c,sizeof(Contacto))){
if(strcmp(nombre,c.nombre)!=0 || strcmp(apellido,c.apellido)!=0){
temporal.write((char*)&c,sizeof(Contacto));
}
}
}
entrada.close();
temporal.close();
remove(DIR_ARCHIVO);
rename("temp.dat",DIR_ARCHIVO);
}

void actualizarContacto(char nombre[],char apellido[]){


/**
contactos.dat

REGISTRO1REGISTRO2REGISTRO3
temp.dat

REGISTRO1REGISTRONREGISTRO3
**/
ifstream entrada;
ofstream temporal;
entrada.open(DIR_ARCHIVO,ios::binary);
temporal.open("temp.dat",ios::binary);
Contacto c;
if(entrada.good()){
while(entrada.read((char*)&c,sizeof(Contacto))){
if(strcmp(nombre,c.nombre)==0 && strcmp(apellido,c.apellido)==0){
Contacto actualizado = leerContacto();
temporal.write((char*)&actualizado,sizeof(Contacto));
}
else{
temporal.write((char*)&c,sizeof(Contacto));

}
}
}
entrada.close();
temporal.close();
remove(DIR_ARCHIVO);
rename("temp.dat",DIR_ARCHIVO);
}

/******************************/
void menuIngresar(){
cout<<"\t\t\t\tINGRESO DE NUEVO CONTACTO"<<endl;
Contacto nuevo = leerContacto();
ingresarContacto(nuevo);
cout<<"\t\t\tContacto agregado con exito"<<endl;
}

void menuBuscar(){
cout<<"\t\t\t\tBUSCAR CONTACTO"<<endl;
char nombre[30],apellido[45];
cout<<"\t\t\tIngrese los datos de busqueda:"<<endl;
cout<<"\t\t\tNOMBRE : ";
cin.getline(nombre,30);
cout<<"\t\t\tAPELLIDO: ";
cin.getline(apellido,45);
if(existeContacto(nombre,apellido)){
Contacto buscado = buscarContacto(nombre,apellido);
mostrarContacto(buscado);
}
else{
cout<<"\t\t\tNO se encuentra ese contacto"<<endl;
}

void menuListado(){
cout<<"\t\t\t\tLISTA DE CONTACTOS"<<endl;
listarContactos();
getch();/**obtener caracter**/
}

void menuEliminar(){
cout<<"\t\t\t\tELIMINAR CONTACTO"<<endl;
char nombre[30],apellido[45];
cout<<"\t\t\tIngrese los datos de eliminacion:"<<endl;
cout<<"\t\t\tNOMBRE : ";
cin.getline(nombre,30);
cout<<"\t\t\tAPELLIDO: ";
cin.getline(apellido,45);
if(existeContacto(nombre,apellido)){
Contacto eliminar = buscarContacto(nombre,apellido);
int op;
cout<<"\t\t\tSeguro que desea eliminar el siguiente contacto?";
mostrarContacto(eliminar);
do{
cout<<"\t\t\tSI[1]....NO[2]:";
cin>>op;
switch(op){
case 1: eliminarContacto(nombre,apellido);
cout<<"\t\t\tContacto eliminado con exito"<<endl;
break;
case 2: break;
default: cout<<"\t\t\tOPCION INCORRECTA"<<endl;
}
}while(op!=1 && op!=2);

}
else{
cout<<"\t\t\tNO EXISTE EL CONTACTO"<<endl;
}
}
void menuActualizar(){
cout<<"\t\t\t\tACTUALIZAR CONTACTO"<<endl;
char nombre[30],apellido[45];
cout<<"\t\t\tIngrese los datos de modificacion:"<<endl;
cout<<"\t\t\tNOMBRE : ";
cin.getline(nombre,30);
cout<<"\t\t\tAPELLIDO: ";
cin.getline(apellido,45);
if(existeContacto(nombre,apellido)){
Contacto buscado = buscarContacto(nombre,apellido);
cout<<"\t\t\tRegistro a modificar:"<<endl;
mostrarContacto(buscado);
actualizarContacto(nombre,apellido);
cout<<"\t\t\tSE ACTUALIZO EL REGISTRO"<<endl;
}
else{
cout<<"\t\t\tNO EXISTE EL CONTACTO"<<endl;
}
}

También podría gustarte