Struct complejo
{
private:
double re, im;
public:
void Cplx_Print(const complejo c)
complejo operator + (const complejo & a, const complejo & b) //suma
complejo operator - (const complejo & a, const complejo & b) //resta
complejo operator * (const complejo & a, const complejo &
b)//multiplicacin
complejo operator ~ (const complejo & c) //conjugada
complejo operator - (const complejo & c) //cambio de signo
complejo operator + (const complejo & c) // operador unario de conservacin
de signo.
complejo operator ! (const complejo & c) // inverso
complejo operator / (const complejo & a, const complejo &b) //divisin
double Cplx_Mod(const complejo & c) //modulo
void operator += (complejo & a, const complejo & b) //
void operator -= (complejo & a, const complejo & b)//
void operator *= (complejo & a, const complejo & b) //
void operator /= (complejo & a, const complejo & b) //
};
SOLUCIN
#include <conio.h>
#include<iostream>
#include<math.h>
double Sqr(double d) {
return d * d;
}
struct complejo {
double re, im;
};
complejo Cplx_Crear(double re, double im) {
complejo Temp;
Temp.re= re;
Temp.im= im;
return Temp;
}
void Cplx_Print(const complejo c) {
cout << c.re << " + " << c.im << "i";
}
complejo operator + (const complejo & a, const complejo & b) {
complejo Temp;
Temp.re= a.re + b.re;
Temp.im= a.im + b.im;
return Temp;
}
complejo operator - (const complejo & a, const complejo & b) {
complejo Temp;
Temp.re= a.re - b.re;
Temp.im= a.im - b.im;
return Temp;
}
complejo operator * (const complejo & a, const complejo & b) {
complejo Temp;
// (a + Ai) * (b + Bi) = (ab - AB) + (aB + Ab)i
Temp.re= (a.re * b.re) - (a.im * b.im);
Temp.im= (a.re * b.im) + (a.im * b.re);
return Temp;
}
a= Cplx_Crear(1.0, 1.0);
b= Cplx_Crear(2.0, 2.0);
c= Cplx_Crear(1.0, 0);
b+= a;
c= a / c;
d*= b + c - a;
c+= -b * d + c / d - ~a;
c*= Cplx_Crear(2.0, 0.0);
d= ~c;
d= -c;
d= +d;
d= !a;
#include<iostream>
#include <conio.h>
#include <math.h>
double Sqr(double d) {
return d * d;
}
class complejo
{private:
double re;
double im;
public:
complejo();
complejo(double,double);
void imprimir(const complejo);
complejo operator +(const complejo & a, const complejo & b);
complejo operator - (const complejo & a, const complejo & b);
complejo operator * (const complejo & a, const complejo & b);
complejo operator ~ (const complejo & c);
complejo operator - (const complejo & c);
complejo operator + (const complejo & c);
void complejo:: Div_Cero();
complejo operator ! (const complejo & c);
complejo operator / (const complejo & a, const complejo &b);
double Cplx_Mod(const complejo & c);
void operator += (complejo & a, const complejo & b);
void operator -= (complejo & a, const complejo & b);
void operator *= (complejo & a, const complejo & b);
void operator /= (complejo & a, const complejo & b);
};
complejo::complejo()
{}
complejo::complejo(double r,double i )
{
re=r;
im=i;
}
void complejo::imprimir(const complejo c)
{
cout << c.re << " + " << c.im << "i";
}
complejo complejo::operator+(const complejo & a, const complejo & b)
{
re= a.re + b.re;
im= a.im + b.im;
return complejo(re,im);
}
complejo complejo::operator - (const complejo & a, const complejo & b)
{
re= a.re - b.re;
im= a.im - b.im;
return complejo(re,im);
}
complejo complejo::operator * (const complejo & a, const complejo & b)
{
re= (a.re * b.re) - (a.im * b.im);
im= (a.re * b.im) + (a.im * b.re);
return complejo(re,im);
}
complejo complejo::operator ~ (const complejo & c)
{
re = c.re;
im = -c.im;
return complejo(re,im);
}
complejo complejo::operator - (const complejo & c)
{
}
complejo complejo::operator + (const complejo & c)
{
im = -c.im;
re = -c.re;
return complejo(re,im);
}
void complejo:: Div_Cero()
{
cout << "Divisin por cero!! ";
}
complejo complejo::operator ! (const complejo & c)
{
double Den= Sqr(c.re) + Sqr(c.im);
if (!Den) {
Div_Cero();
return complejo(0, 0);
}
int main() {
complejo a, b, c, d;
a(1.0, 1.0);
b(2.0, 2.0);
c(1.0, 0);
b+= a;
c= a / c;
d*= b + c - a;
c+= -b * d + c / d - ~a;
c*(2.0, 0.0);
d= ~c;
d= -c;
d= +d;
d= !a;
#include<iostream.h>
#include<math.h>
double Sqr(double d) {
return d * d;
}
class complejo {
private:
double re, im;
static void Div_Cero();
public:
const complejo & Poner(double re, double im);
void Print();
// Implementaciones
void complejo::Print() {
cout << re << " + " << im << "i";
}
Temp.re= re + b.re;
Temp.im= im + b.im;
return Temp;
}
Temp.re= re - b.re;
Temp.im= im - b.im;
return Temp;
}
return Temp;
}
complejo complejo::operator ~ () {
// conjugado
complejo Temp;
Temp.re = re;
Temp.im = -im;
return Temp;
}
complejo complejo::operator - () {
// cambio de signo
complejo Temp;
Temp.im = -im;
Temp.re = -re;
return Temp;
}
void complejo::Div_Cero() {
cout << "Divisin por cero!! ";
}
complejo complejo::operator ! () {
// Inverso
complejo Temp;
double Den= Sqr(re) + Sqr(im);
if (!Den) {
Div_Cero();
Temp.Poner(0., 0.);
}
else {
Temp.re= re / Den;
Temp.im= -im / Den;
}
return Temp;
}
double complejo::Mod() {
// mdulo
return sqrt(Sqr(re) + Sqr(im));
}
void main() {
complejo a, b, c, d;
(void)a.Poner(1.0, 1.0);
(void)b.Poner(2.0, 2.0);
(void)c.Poner(1.0, 0);
b+= a;
c= a / c;
d*= b + c - a; // Qu lindo
c+= -b * d + c / d - ~a; // Lindsimo
complejo Temp;
(void)Temp.Poner(2.0, 0.0);
c*= Temp; // Multiplicar por 2
d= ~c; // El conjugado
d= -c; // Negado
d= +d; // Nada;
d= !a; // El inverso
1. Introduccin de un alumno
2. Introduccin de un profesor
3. Mostrar datos (muestra los datos ingresados)
4. Salir(salir del programa)
Y segn la opcin elegida pide los datos que se pueden observar en la ventana
de aplicacin.
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
class Persona{
protected:
int edad;
char estado_civil;
char *nombre;
public:
Persona(int e,char ec,char *n);
virtual void Mostrar();
};
void Persona::Mostrar()
{cout<<"Edad= "<<edad<<"\nEstado civil= "<<estado_civil<<"\nNombre=
"<<nombre;
void Alumno::Mostrar()
{Persona::Mostrar();
cout<<"\nCurso= "<<curso<<"\nNumero de asignaturas=
"<<num_asignaturas<<endl;
}
void Profesor::Mostrar()
{Persona::Mostrar();
cout<<"\nDepartamento= "<<departamento<<"\nAdscripcion=
"<<adscripcion<<endl;
}
int main()
{Persona *datos[50];
int op,p=0,e,c,na,i;
char ec;
char n[10],d[10],a[10];
do {
cout<<"\n1. Introduccion de un alumno \n";
cout<<"2. Introduccion de un profesor\n";
cout<<"3. Mostrar datos \n";
cout<<"4. Salir\n";
cout<<"Introduce opcion: ";
cin>>op;
if (op<1 || op>4)
cout<<"Opcion incorrecta\n";
else
switch (op)
{
case 1:if (p<50)
{cout<<"Introduce la edad: "; cin>>e;
cout<<"Introduce el estado civil (C=casado, S=Soltero, O=Otros: ";
cin>>ec;
cout<<"Introduce el nombre: "; cin>>n;
cout<<"Introduce el curso: ";cin>>c;
cout<<"Introduce el nmero de asignaturas: ";
cin>>na;
datos[p]=new Alumno(e,ec,n,c,na); p++;
}
else cout<<"\nNo se pueden introducir mas datos\n";
break;
case 2:if (p<50)
{cout<<"Introduce la edad: ";
cin>>e;
cout<<"Introduce el estado civil (C=casado, S=Soltero, O=Otros: ";
cin>>ec;
cout<<"Introduce el nombre: ";
cin>>n;
cout<<"Introduce el departamento: ";
cin>>d;
cout<<"Introduce la adscripcion: ";
cin>>a;
datos[p]=new Profesor(e,ec,n,d,a); p++;
}
else cout<<"\nNo se pueden introducir mas datos\n";
break;
case 3: cout<<"\nDatos\n";
for (i=0;i<p;i++)
{
datos[i]->Mostrar();
if ((i%3==0) && (i!=0))
{ cout<<"\nPulsa una tecla para continuar";
getch();cout<<endl;}
}
cout<<"\nPulsa una tecla para continuar";getch();cout<<endl;
break;
case 4:for (i=0;i<p;i++) delete datos[i];
}
}while (op!=4);
Rectangulo::~Rectangulo()
{
}
void Rectangulo::ponLH( double _lh)
{
lh = _lh ;
}
void Rectangulo::ponLV( double _lv)
{
lv = _lv ;
}
double Rectangulo::dameLH( )
{
return( lh) ;
}
double Rectangulo::dameLV( )
{
return( lv) ;
}
double Rectangulo::area()
{
return( lh * lv) ;
}
double Rectangulo::perimetro()
{
return( 2 * lh + 2 * lv) ;
}
class Circulo: public Punto
{
private:
double radio ;
public:
Circulo ( ) ;
Circulo( Punto p, double r) ;
~Circulo() ;
void ponRadio( double _r) ;
double dameRadio( ) ;
virtual double area() ;
virtual double perimetro() ;
};
Circulo::Circulo ( ) :Punto()
{
radio = 10 ;
}
Circulo::Circulo( Punto p, double r): Punto( p)
{
radio = r ;
}
Circulo::~Circulo()
{
}
void Circulo::ponRadio( double _r)
{
radio = _r ;
}
double Circulo::dameRadio( )
{
return( radio) ;
}
double Circulo::area()
{
const double PI = 3.1514 ;
return( PI * pow( radio, 2)) ;
}
double Circulo::perimetro()
{
const double PI = 3.1514 ;
return( 2 * PI * radio) ;
}
class Cilindro: public Circulo
{
private:
double altura ;
// Constructores para inicializar las coordenadas
public:
Cilindro ( ) ;
Cilindro( Circulo c, double a) ;
~Cilindro() ;
void ponAltura( double _a) ;
double dameAltura( ) ;
virtual double area() ;
// virtual double perimetro() ; NO TIENE
};
Cilindro::Cilindro ( ): Circulo()
{
altura = 15 ;
}
Cilindro::Cilindro( Circulo c, double a): Circulo( c)
{
altura = a ;
}
Cilindro::~Cilindro()
{
}
void Cilindro::ponAltura( double _a)
{
altura = _a ;
}
double Cilindro::dameAltura( )
{
return( altura) ;
}
double Cilindro::area()
{
const double PI = 3.1514 ;
double aLateral = 2*PI * dameRadio() * altura ;
double base = Circulo::area() ;
return( aLateral + 2 * base) ;
}
int main()
{
//int argc, char* argv[];
Circulo c1 ; //= new Circulo;
Punto p1 ;
Punto *p2 ;
Cilindro ci( c1, 20) ;
p2 = new Circulo( p1, 30) ;
cout << endl << " Circulo C1" ;
cout << endl << "El centro es: ( " << c1.dameX() << ", " << c1.dameY() << ")";
cout << endl << "El radio es: " << c1.dameRadio() ;
cout << endl << "El area es: " << c1.area() ;
cout << endl << "El perimetro es: " << c1.perimetro() ;
cout << endl ;
cout << endl << " Circulo P2" ;
cout << endl << "El centro es: ( " << p2->dameX() << ", " << p2->dameY() << ")";
cout << endl << "El radio es: " << ((Circulo*)p2)->dameRadio() ;
cout << endl << "El area es: " << p2->area() ;
cout << endl << "El perimetro es: " << p2->perimetro() ;
cout << endl ;
cout << endl << " Cilindro ci" ;
cout << endl << "El centro es: ( " << ci.dameX() << ", " << ci.dameY() << ")";
cout << endl << "El radio es: " << ci.dameRadio() ;
cout << endl << "La altura es: " << ci.dameAltura() ;
cout << endl << "El area es: " << ci.area() ;
//cout << endl << "El perimetro es: " << p2->perimetro() ;
delete p2 ;
getch();
return 0;
}
}
int main() {
int n,i,v1[20];
}
}
template<class T>
void mostrar( T a[N],int na)
{
int i;
for(i=0;i<na;i++)
{
cout<<a[i]<<" ";
cout<<endl<<endl;
}
}
template<class T>
int reemplazar(T a[N],int na,T x,T y)
{
int i,r;
r=0;
for(i=0;i<na;i++)
if(a[i]==x)
for(i=0;i<na;i++)
if(a[i]==x)
{
a[i]=y;
r++;
}
return r;
}
int main()
{
int ae[N];
char ac[N];
int n,nr,w,k;
cout<<"ingrese cantidad de elemtos";
cin>>n;
cout<<"arreglo de enteros"<<endl<<endl;
leer(ae,n);
mostrar(ae,n);
cout<<"ingresar dato que ser reemplazado";
cin>>k;
cout<<"ingrese nuevo dato";
cin>>w;
nr=reemplazar(ae,n,k,w);
if(nr==0)
cout<<"no se raalizaron reemplazos"<<endl;
leer(ac,n);
mostrar(ac,n);
system("pause");
return 0;
}
7. Usando Plantillas realizar un programa que dada dos matrices A y B
intercambiar los mnimos de A con los mximos de B
#include <stdio.h>
#include <conio.h>
template<class T>
void llenar (T M[20][20], int f, int c)
{
for (int i = 1 ; i <= f ; i++)
{
for (int j = 1 ; j <= c ; j++)
{
printf ("Inserte pos[%d][%d]: ",i,j);
scanf("%d",&M[i][j]);
}
}
}
template<class T>
void mostrar (T M[20][20], int f, int c)
{
for (int i = 1 ; i <= f ; i++)
{
printf("\n");
for (int j = 1 ; j <= c ; j++)
{
printf ("[%d]",M[i][j]);
}
}
}
template<class T>
int menor (T M[20][20], int f, int c)
{
int men = M [1] [1];
for (int i = 1 ; i <= f ; i++)
{
for (int j = 1 ; j <= c ; j++)
{
if (M [i] [j] < men)
men = M [i] [j];
}
}
return (men);
}
template<class T>
int maximo (T M[20][20], int f, int c)
{
int max = M [1] [1];
for (int i = 1 ; i <= f ; i++)
{
for (int j = 1 ; j <= c ; j++)
{
if (M [i] [j] > max)
max = M [i] [j];
}
}
return (max);
}
template<class T>
void intercambiar (T A[20][20], int fa, int ca, T B[20][20], int fb, int cb)
{
int min_a = menor (A, fa, ca);
int max_b = maximo (B, fb, cb);
//para cambiar los minimos de A con los maximos de B
for (int i = 1 ; i <= fa ; i++)
{
for (int j = 1 ; j <= ca ; j++)
{
if (A[i][j] == min_a)
A[i][j]=max_b;
}
}
//para intercambiar los maximos de con los minimos de A
for (int i = 1 ; i <= fb ; i++)
{
for (int j = 1 ; j <= cb ; j++)
{
if (B[i][j] == max_b)
B[i][j]=min_a;
}
}
}
ARCHIVOS DE TEXTO
8. Realizar un programa con archivo que pida ingresar el nombre del archivo a
crear, se pueda ingresar dos nmeros y adems en el archivo guarde las
operaciones bsicas y verificar si el nmero obtenido en cada operacin es
primo o no.
SOLUCIN:
#include<iostream>
#include<fstream>
#include<conio.h>
int main()
{ char Texto[15];
int a, b, suma,resta,div,k,i;
cout<<"Ingrese el nombre del archivo ";
cin>>Texto;
ofstream curso;
curso.open(Texto);
if (curso.fail())
{
cerr<<"No se puede abrir"<<endl;
cout<<"verifique si exite"<<endl;
getch();
exit(1);
}
curso<<"Algoritmos y Programacion ";
cout<<"Ingrese dos numeros";
cin>>a>>b;
suma = a + b;
resta= a - b;
if(b!=0)
div=a/b;
else
curso<<"no existe";
getch();
return 0;
}
void esprimo(ofstream &curso,int num)
{
int k=0;
for(int i=2;i<num;i++)
if(num%i!=0)
k++;
if(k>1||num==1)
curso<<"no es primo"<<endl;
else
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <iomanip>
using namespace std;
const int N=80;
struct alumno
{
char cod[10],obs[15];
int ep,ef,pp,pl;
float pf;
};
void leer(ofstream &f1,alumno x[],int n)
{f1.open("datos.txt");
if(f1.fail())
cout<<"erro";
else
{
for(int i=0;i<n;i++)
{
cout<<"procesando datos del alumno"<<i+1<<endl;
fflush(stdin);
cout<<"codigo";gets(x[i].cod);
cout<<"examen parcial";cin>>x[i].ep;
cout<<"examenfinal";cin>>x[i].ef;
cout<<"prom pract";cin>>x[i].pp;
cout<<"prom lab";cin>>x[i].pl;
x[i].pf=(x[i].ep+x[i].ef+x[i].pp+x[i].pl)/4;
if(x[i].pf>10)
strcpy(x[i].obs,"aprobado");
else
strcpy(x[i].obs,"desaprobado");
f1<<x[i].cod<<"\t"<<x[i].ep<<"\t"<<x[i].ef<<"\t"<<x[i].pp<<"\t"<<x[i].pl<<"\t"<<
x[i].pl<<"\t"<<x[i].pf<<"\t"<<x[i].obs<<endl;
}
}
f1.close();
}
void mostrar(ifstream &f2)
{
char c1[10],ob[15];
int ep1,ef1,pp1,pl1;
float pf1;
f2.open("notas,txt");
f2>>c1;
while(f2.peek()!=EOF)
{
f2>>ep1>>ef1>>pp1>>pl1>>pf1>>ob;
cout<<c1<<"\t"<<ep1<<"\t"<<ef1<<"\t"<<pp1<<"\t"<<pl1<<"\t"<<pf1<<"\t"<<o
b<<endl;
f2>>c1;
}
f2.close();
}
void buscar(ifstream &f3)
{
char c1[10],ob[15],mcod[15];
int ep1,ef1,pp1,pl1;
bool t=false;
float pf1;
cout<<"ingrese codigo a buscar";gets(mcod);
f3.open("notas.txt");
f3>>c1;
if(f3.fail())
cout<<"erro";
else
{
while(f3.eof()==false&&(t==false))
{
f3>>ep1>>ef1>>pp1>>pl1>>pf1>>ob;
if(strcmp(c1,mcod)==0)
{cout<<c1<<"\t"<<ep1<<"\t"<<ef1<<"\t"<<pp1<<"\t"<<pl1<<"\t"<<pf1<<"\t"<<
ob<<endl;
t=true;
}
}
f3.close();
if(!t)
cout<<"alumno no resgistrado"<<endl;
}
}
int main()
{
alumno a[N];
int m;
cout<<"nmero de alumnos a procesar";
cin>>m;
ofstream arch;
ifstream arch1,arch2;
leer(arch,a,m);
mostrar(arch1);
buscar(arch2);
system("pause");
return 0;
}
ARCHIVOS BINARIOS
10. Escribir un programa que abra el archivo (archivos binarios) acta de notas,en el
que se pueda almacenar una cierta cantidad de alumnos, lo que se guardaran
con su cdigo y su promedio ponderado.( Escribir objetos a un archivo binario
reinterpret_cast<char *> )
#include <fstream>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
const int MAX = 50;
using namespace std;
struct alumno {
char codigo[10];
char nombre[40];
float promedio;
} acta_notas[MAX];
int main()
{
ofstream salida("acta.dat", ios::out | ios::binary);
int num;
cout<<"Cuantos alunmos desea incluir en el acta? ";
cin>>num; fflush(stdin);
#include <fstream>
#include <iostream>
#include <conio.h>
/* Escribir y leer un arreglo de float en binario */
using namespace std;
int main() //binario1.cpp
{ float nums[]={10.25, 25.333, 14.0, 3.1415, 0.08025,7.0};
int i;
// escribiendo al archivo
ofstream salida("array.dat", ios::out | ios::binary);
if (!salida)
{ cout << "No se puede abrir archivo!..."<<endl;
exit(1);
}
salida.write(( char*) &nums, sizeof nums);
salida.close();
// Mostrar el contenido de3l archivo
for (i = 0; i < sizeof(nums)/sizeof(float); i++)
nums[i] = 0;
// leyendo el archivo
ifstream entrada("array.dat", ios::in | ios::binary);
entrada.read(( char *) &nums, sizeof nums);
for (i = 0; i < sizeof(nums)/sizeof(float); i++)
cout << nums[i] <<" ";
// cerrar archivo
entrada.close();
getche();
return 0;
}
CLASES VIRTUALES
//Ej14_03.cpp
#include <iostream>
using namespace std;
tipo * v;
int Tam;
void Construir(int t) {
Tam= t;
if (Tam)
v= new tipo[Tam];
else
v= NULL;
}
void Destruir() {
if (v != NULL) delete []v;
}
public:
static void Poner_Error(tipo i) {
ERROR= i;
}
vector(int t= 0) {
Construir(t);
}
~vector() {
Destruir();
}
int main() {
vector<int>::Poner_Error(-1);
vector<int> v(10);
int i, Elem;
i= 1;
v[i]= 2;
Elem= v[i];
cout << Elem; // 2, lgicamente
v[1000]= 3;
system("pause");
}
POLIMORFISMO