[C con Clase] Problema con un "tres en raya" de proporciones variables.
Jesus Mayoral Itarte
jesumayoral en hotmail.com
Lun Abr 16 01:41:16 CEST 2012
Buenas, tengo un problema con una espeie de tres en raya que estoy intentando desarrollar,
el problema llega cuando quiero comprobar las diagonales y no hay manera de resolverlo,
voy a pegar el codigo al completo por si a alguien le sirviera para ayudarme. El problema lo tengo especificamente en
la función char comprobar_ganador(tablero &tablero){ (He dejado este codigo en color rojo)
y es que de una forma u otra siempre me acaba petanto el vector o en su defecto acaba ganando la ficha equivocada,
haber si alguíen me puede ayudar con eso, estoy seguro que devería haber una forma bastante mas facil de hacerlo que la
forma que he utilizado yo.
Muchas gracias. ^^
// Tres en raya.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <vector>
#include <conio.h>
typedef std::vector< std::vector< int > > tablero;
//-----------------Funciones----------------------
void jugadores(tablero &tablero);
char comprobar_ganador(tablero &tablero);
void mostrar_tablero(tablero &tablero);
tablero dimensionar_vector(tablero &tablero);
int comprobar_ganador_pasodos(tablero &tablero, int &num_x, int &num_o,int &i,int &j);
int comprobar_ganador_pasotres(int &num_x, int &num_o);
void FinPartida();
/*void mostrar_tablero(tablero &tablero)
{
for(int i=0; i<tablero.size(); i++) {
std::cout<<"\n--------------------------------------------------------------------------------";
std::cout<<"| "<< static_cast < char >( tablero[ i ].size() );
for (int j=1; j<tablero.size(); j++){
std::cout<<" | "<<" "<< static_cast < char >( tablero[ i ].size() );
}
}
std::cout<<"\n--------------------------------------------------------------------------------\n";
}
*/
void mostrar_tablero(tablero &tablero)
{
int i;
int j;
for(i=0; i<tablero.size(); i++) {
std::cout<<" "<<" " << static_cast < char >( tablero[ i ][ 0 ] );
std::cout<<" |"<<" " << static_cast < char >( tablero[ i ][ 1 ] );
std::cout<<" |"<<" "<< static_cast < char >( tablero[ i ][ 2 ] );
if (tablero.size() >= 4)std::cout<<" |"<<" "<< static_cast < char >( tablero[ i ][ 3 ] );
if (tablero.size() >= 5)std::cout<<" |"<<" "<< static_cast < char >( tablero[ i ][ 4 ] );
if (tablero.size() >= 6)std::cout<<" |"<<" "<< static_cast < char >( tablero[ i ][ 5 ] );
if (tablero.size() >= 7)std::cout<<" |"<<" "<< static_cast < char >( tablero[ i ][ 6 ] );
if (tablero.size() >= 8)std::cout<<" |"<<" "<< static_cast < char >( tablero[ i ][ 7 ] );
if(i==i) std::cout<<"\n-------------------------------------------------------------------------------"<<std::endl;
}
std::cout<<"\n"<<std::endl;
}
void jugadores(tablero &tablero) {
int x;
int y;
int z=1;
do{
std::cout<<"es el turno del jugador"<<z<<":"<<std::endl;
std::cout<<"Introduce las cordenadas y, x del lugar en el que quieras colocar la ficha"<<std::endl;
std::cin>> x >> y;
x--;
y--;
if( x < 0 || x >= tablero.size() || y < 0 || y >= tablero.size() ){
std::cout<<"Las coordenadas que has indicado son erroneas.\n\nvuelbe a intentarlo:"<<std::endl;
if (z==2){
z=z-1;
}
jugadores(tablero);
}
if(tablero[x] [y] == 'X' || tablero [x] [y] == 'O') {
std::cout<<"Tienes que escribir las cordenadas y, x del lugar en el que quieras colocar la ficha.\n Vuelbe a intentarlo:"<<std::endl;
if (z==2){
z=z-1;
}
jugadores(tablero);
}
else if(z==1) tablero[x][y] = 'X';
else if (z==2) tablero[x][y] = 'O';
z=z+1;
mostrar_tablero(tablero);
comprobar_ganador(tablero);
}while(z==1||z==2);
}
char comprobar_ganador(tablero &tablero)
{
int num_x = 0;
int num_o = 0;
int controlador=tablero.size();
int contador =0;
int controladori=0;
int controladorj=0;
//Buscar las x y los O de cada columna y los va sumando solo si hay otro caracter igual(o O o X) adyacente.
for (int j=0; j<tablero.size(); j++){
for ( int i=0; i<tablero.size(); i++){
if (tablero[i][j] == 'X'){
++num_x;
}else if(tablero[i][j] != 'X' && num_x < 3)
num_x = 0;
if (tablero[i][j] == 'O'){
++num_o;
}else if(tablero[i][j] != 'O' && num_o < 3)
num_o = 0;
}
comprobar_ganador_pasotres(num_x, num_o);
}
//Buscar las x y los O de cada fila y los va sumando solo si hay otro caracter igual(o O o X) adyacente.
contador=0;
for ( int i=0; i<tablero.size(); i++){
for ( int j=0; j<tablero.size(); j++){
if (tablero[i][j] == 'X'){
++num_x;
}else if(tablero[i][j] != 'X' && num_x < 3)
num_x = 0;
if (tablero[i][j] == 'O'){
++num_o;
}else if(tablero[i][j] != 'O' && num_o < 3)
num_o = 0;
}
comprobar_ganador_pasotres(num_x, num_o);
}
///Buscar las x y los O de las diagonales y los va sumando solo si hay otro caracter igual(o "O" o "X") adyacente (Derecha):
contador=0;
num_o=0;
num_x=0;
for (int i=0; i<tablero.size();i++){
for(int j=0;j<tablero.size();j++){
controladorj=j;
controladori=i;
while (tablero[controladori][controladorj]=='X'&& controladori<=controlador-2 && controladorj<=controlador-2||
tablero[controladori][controladorj]=='O'&& controladori<=controlador-2 && controladorj<=controlador-2||
controladori>=controlador-2 && controladorj>=controlador-2 && num_x>0 && num_x<=3||
controladori>=controlador-2 && controladorj>=controlador-2 && num_o>0 && num_o<=3||
controladori>=controlador-1 && num_x>0 && num_x<=3||controladori>=controlador-1 && num_o>0 && num_o<=3||
controladorj>=-1 && num_x>0 && num_x<=3||controladorj>=-1 && num_o>0 && num_o<=3){
if (tablero[controladori][controladorj]=='X')
num_x++;
if (tablero[controladori][controladorj]=='O')
num_o++;
if (controladori < controlador-1 || controladorj < controlador-1){
controladori++;
controladorj++;
}else {
break;
}
if (controladorj>= controlador-2 && num_x <2 || controladori>controlador-1 ){
break;
}
}
if (tablero[i][j]=='X' && num_x<3)
num_x=0;
if (tablero[i][j]=='O' && num_o<3)
num_o=0;
}
comprobar_ganador_pasotres(num_x, num_o);
}
///Buscar las x y los O de las diagonales y los va sumando solo si hay otro caracter igual(o "O" o "X") adyacente (izquierda):
contador=0;
num_o=0;
num_x=0;
for (int i=0; i<tablero.size();i++){
for(int j=0;j<tablero.size();j++){
controladorj=j;
controladori=i; // // //
while (tablero[controladori][controladorj]=='X'&& controladori<=controlador-2 && controladorj>=0||
tablero[controladori][controladorj]=='O'&& controladori<=controlador-2 && controladorj>=0||
tablero[controladori][controladorj]=='X'&& controladori<=controlador-2 && controladorj<=controlador-2||
tablero[controladori][controladorj]=='X'&& controladori<=controlador-2 && controladorj<=controlador-2||
controladori>=controlador-2 && controladorj<=1 && num_x>0 && num_x<=3||
controladori>=controlador-2 && controladorj<=1 && num_o>0 && num_o<=3||
controladori>=controlador-2 && controladorj>=controlador-2 && num_o>0 && num_o<=3||
controladori>=controlador-2 && controladorj>=controlador-2 && num_x>0 && num_x<=3||
controladori>=controlador-1 && num_x>0 && num_x<=3||controladori>=controlador-1 && num_o>0 && num_o<=3||
controladorj<=-1 && num_x>0 && num_x<=3||controladorj<=-1 && num_o>0 && num_o<=3){
if (tablero[controladori][controladorj]=='X')
num_x++;
if (tablero[controladori][controladorj]=='O')
num_o++;
if (controladori>=controlador-1)
break;
if (controladori > controlador-1 || controladorj > 0){
controladori++;
controladorj--;
}else
break;
if (controladorj <= 1 || controladori>=controlador-1)
break;
}
if (tablero[i][j]=='X' && num_x<3)
num_x=0;
if (tablero[i][j]=='O' && num_o<3)
num_o=0;
}
comprobar_ganador_pasotres(num_x, num_o);
}
return ' ';
}
int comprobar_ganador_pasotres(int &num_x, int &num_o){
if (num_x >= 3){
std::cout<<"Han ganado las x"<<std::endl;
FinPartida();
}else if (num_o >= 3){
std::cout<<"Han ganado los O"<<std::endl;
FinPartida();
}
return num_x, num_o;
}
tablero dimensionar_vector(tablero &tablero) {
int tamañovector=0;
tablero;
std::cout<<"Elige las dimensiones del tablero(Maximo 8) Ejemplo: 5 = 5x5"<<std::endl;
std::cin>>tamañovector;
if (tamañovector>=9){
std::cout<<"Las proporciones dadas son demasiado grandes, el maximo es de 8x8 (8)\nVuelbe a intentarlo:"<<std::endl;
system("pause");
dimensionar_vector(tablero);
}
tablero.resize( tamañovector );
for(int i=0; i < tamañovector; ++i) {
tablero[i].resize(tamañovector);
}
return tablero;
}
int main()
{
tablero tablero;
char v=' ';
std::cout<<"Tres en raya:\n";
std::cout<<"El jugador1 jugara con X y el jugador2 con O\n\n";
dimensionar_vector(tablero);
std::cout<<"este es el tablero de juego:"<<std::endl;
mostrar_tablero (tablero);
do {
jugadores(tablero);
} while(v==' ');
std::cin.get();
return 0;
}
void FinPartida(){
int jugarsalir;
std::cout<<"La partida ha finalizado\n\n Pulsa 1 para jugar otra partida, de lo contrario pulsa cualquier otra tecla para salir del programa"<<std::endl;
std::cin>>jugarsalir;
if (jugarsalir == 1){
system("cls");
main();
}else
exit(1);
}
> From: cconclase-request en listas.conclase.net
> Subject: Resumen de Cconclase, Vol 71, Envío 19
> To: cconclase en listas.conclase.net
> Date: Sun, 15 Apr 2012 23:31:31 +0200
>
> Envíe los mensajes para la lista Cconclase a
> cconclase en listas.conclase.net
>
> Para subscribirse o anular su subscripción a través de la WEB
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> O por correo electrónico, enviando un mensaje con el texto "help" en
> el asunto (subject) o en el cuerpo a:
> cconclase-request en listas.conclase.net
>
> Puede contactar con el responsable de la lista escribiendo a:
> cconclase-owner en listas.conclase.net
>
> Si responde a algún contenido de este mensaje, por favor, edite la
> linea del asunto (subject) para que el texto sea mas especifico que:
> "Re: Contents of Cconclase digest...". Además, por favor, incluya en
> la respuesta sólo aquellas partes del mensaje a las que está
> respondiendo.
>
>
> Asuntos del día:
>
> 1. Hola Jhoan (Alejandro Fernández )
> 2. Re: Tengo una duda en java (Diego)
> 3. Correccion de Ejercicio Particular (Luis Gutierrez Gomez)
> 4. Re: Correccion de Ejercicio Particular (Steven Davidson)
> 5. Problema al leer datos de un documento externo al programa
> (Marcos Collado)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Sun, 15 Apr 2012 17:43:27 +0200
> From: "Alejandro Fernández " <cronopiomx en discapnet.es>
> To: cconclase en listas.conclase.net
> Subject: [C con Clase] Hola Jhoan
> Message-ID: <WC20120415154327.050ED0 en discapnet.es>
> Content-Type: text/plain; charset="iso-8859-1"
>
> podrias explicarte un poco mejor, algo mas concreto para saber que es lo
> que quieres??
>
> saludos
> alex
>
>
>
>
>
> ------------------------------
>
> Message: 2
> Date: Sun, 15 Apr 2012 12:53:13 -0500
> From: Diego <diegoartesanal en gmail.com>
> To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Tengo una duda en java
> Message-ID:
> <CAD9F7cupc2fTntyg=AV8LpE-B7-VDrS6z6HxngkLXjoQKFs0Cw en mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Como bien dijeron antes. Tu bucle funcionaría, si 'opcion' lo declaras como
> 'char' (caracter) y no como String. De esa manera si se puede comparar con
> el operador ==
>
> Saludos
> Diego.
>
> El 14 de abril de 2012 11:52, Samuel Díaz García
> <samueldg en arcoscom.com>escribió:
>
> > Lo mismo es que la cadena que comparas no es correcta, porque no hayas
> > incliudo el carácter de nueva línea y/o el retorno de carro.
> > El 14/04/2012 18:05, "Miguel Angulo Martínez" <djfunk19 en hotmail.com>
> > escribió:
> >
> >> Cuando hago que se me repita el bucle en el do }while
> >>
> >> con el String opcion;
> >>
> >> System.out.print("\n\t¿Desea seguir realizando altas?(S/N)");
> >> opcion=sc.nextLine();
> >> en el do{ while(opcion=="S");
> >>
> >> No se me repite cuando me dice quiere seguir realizando altas y le doy S.
> >> Que puede ser?
> >>
> >> Saludos comunidad
> >>
> >> public static void altas()
> >> {
> >> Scanner sc = new Scanner(System.in);
> >> String nombre, telefono, direccion;
> >> String opcion;
> >> int edad;
> >> try{
> >> TablaBaseDatos t = new TablaBaseDatos("Agenda.txt");
> >> int nR = t.dameNumeroRegistros();
> >> do{
> >> System.out.print("\n\tContacto nº "+(nR+1));
> >> System.out.print("\n\tIntroduce el nombre");
> >> nombre = sc.nextLine();
> >> System.out.print("\n\tIntroduce el telefono");
> >> telefono = sc.nextLine();
> >> System.out.print("\n\tIntroduce la direccion: ");
> >> direccion = sc.nextLine();
> >> System.out.print("\n\tIntroduce la edad: ");
> >> edad = sc.nextInt();
> >> nR++;
> >> t.escribeRegistro(nombre,telefono,direccion,edad,nR);
> >> System.out.print("\n\t¿Desea seguir realizando
> >> altas?(S/N)");
> >> opcion=sc.nextLine();
> >> }while(opcion=="S" || opcion=="s");
> >> t.cierraTabla();
> >> }
> >> catch(Exception e)
> >> {
> >> System.out.println(e);
> >> }
> >>
> >>
> >> }
> >>
> >> _______________________________________________
> >> Lista de correo Cconclase Cconclase en listas.conclase.net
> >> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> >> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >>
> >
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> > http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120415/4ac00e20/attachment-0001.html>
>
> ------------------------------
>
> Message: 3
> Date: Sun, 15 Apr 2012 19:46:56 +0000
> From: Luis Gutierrez Gomez <gutierrezgl en hotmail.com>
> To: Consultas CconClase <cconclase en listas.conclase.net>
> Subject: [C con Clase] Correccion de Ejercicio Particular
> Message-ID: <DUB110-W12870402C9F667581F53421B1390 en phx.gbl>
> Content-Type: text/plain; charset="iso-8859-1"
>
>
> Cordiales Saludos; Estuve siguiendo el curso de C++, que lo dan en la web de CConClase
>
> y estuvo muy interesante, como no habian muchos ejercicios para desarrollar y practicar lo aprendido,
>
> especialmente en aplicaciones propias de C++, consulté sobre donde conseguir ejercicios y me
>
> recomendaron el Libro de Deytel & Deytel, la verdad que es muy bueno y complementa muy bien con
>
> las enseñanzas de aca. Estoy resolviendo los ejerciccios del Capitulo 16 y por favor quisiera
>
> que lo corrijan y me digan si cometí errores o donde podria mejorar, de antemano muchas gracias por su
>
> apoyo.
>
>
>
> Aqui dejo el enunciado:
>
>
>
> 16.5 Cree una clase llamada Complejo para realizar aritmetica con numeros complejos. Escriba un programa
>
> controlador para probar sus clases.
>
> Los numeros complejos tienen la forma:
>
>
>
> parte real + parte imaginaria * i
>
>
>
> en donde i es:
>
> ___
>
> V -1
>
>
>
> Utilice variables double para representar datos de tipo private de una clase. Proporcione un constructor
>
> que permita inicializar un objeto de esta clase cuando se declare. El constructor debe contener valores
>
> predeterminados, en caso de que no se proporcionen inicializadores. Proporcione funciones miembro
>
> de tipo public para cada uno de los siguientes:
>
> a) Suma de dos numeros complejos: las partes reales se suman juntas y las partes imaginarias se suman
>
> juntas.
>
> b) Resta de dos numeros complejos: la parte real del operando derecho se resta de la parte real del
>
> operando izquierdo, y la parte imaginaria del operando derecho se resta de la parte imaginaria del
>
> operando izquierdo.
>
> c) Impresion de numeros complejos de la forma (a,b), en donde a es la parte real y b es la parte imaginaria.
>
>
>
>
> SOLUCION
>
> --------
>
>
>
> #include <iostream>
>
> using std :: cout;
> using std :: endl;
>
>
>
> class Complejo{
>
>
> public:
> Complejo(double = 0, double = 0);
> void SumaComplejo ( double , double );
> void RestaComplejo ( double , double );
> void ImpresionComplejo (void);
>
>
> private:
> double real;
> double imaginaria;
> };
>
>
>
> Complejo::Complejo(double re, double im){
> real = re;
> imaginaria = im;
> }
>
>
>
> void Complejo::SumaComplejo( double r2, double i2 ){
>
> real = real + r2;
> imaginaria = imaginaria + i2;
> cout << "El resultado de la suma de complejos es:" << endl;
> ImpresionComplejo ();
> }
>
>
>
> void Complejo::RestaComplejo( double r2, double i2 ){
>
> real = real - r2;
> imaginaria = imaginaria - i2;
> cout << "El resultado de la resta de complejos es: " << endl;
> ImpresionComplejo ();
> }
>
>
>
> void Complejo::ImpresionComplejo (){
>
> cout << " ( " << real <<" , " << imaginaria << " *i ) " << endl;
> }
>
>
>
>
>
> int main ()
> {
> Complejo C1;
> cout << "El complejo por defecto es: " << endl;
> C1.ImpresionComplejo();
> cout << "El segundo complejo es: "<< endl;
> Complejo C2( 12.5, 28.4 );
> C2.ImpresionComplejo();
> C2.SumaComplejo( 8.9, 34.2 );
> cout << "El tercer complejo es : " << endl;
> Complejo C3( 23.8, 32.12 );
> C3.ImpresionComplejo();
> C3.RestaComplejo( 11.5, 13.8 );
> return 0;
> }
>
>
>
>
> //////////////////////////////////////////////////////////////////
>
> estaré atento, muchas gracias
>
>
>
> Luis
>
>
>
>
> ------------------------------
>
> Message: 4
> Date: Sun, 15 Apr 2012 16:49:46 -0400
> From: Steven Davidson <srd4121 en njit.edu>
> To: Lista de correo sobre C y C++ <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Correccion de Ejercicio Particular
> Message-ID: <4F8B346A.1090403 en njit.edu>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> Hola Luis,
>
> On 4/15/2012 3:46 PM, Luis Gutierrez Gomez wrote:
> >
> > Cordiales Saludos; Estuve siguiendo el curso de C++, que lo dan en la
> > web de CConClase y estuvo muy interesante, como no habian muchos
> > ejercicios para desarrollar y practicar lo aprendido, especialmente
> > en aplicaciones propias de C++, consulté sobre donde conseguir
> > ejercicios y me recomendaron el Libro de Deytel& Deytel, la verdad
> > que es muy bueno y complementa muy bien con las enseñanzas de aca.
> > Estoy resolviendo los ejerciccios del Capitulo 16 y por favor
> > quisiera que lo corrijan y me digan si cometí errores o donde podria
> > mejorar, de antemano muchas gracias por su apoyo.
> >
>
> [CORTE]
>
> >
> > SOLUCION
> > --------
> >
>
> Veamos el programa. Te voy comentando a medida que vaya viendo el código
> fuente.
>
> > #include<iostream>
> >
> > using std :: cout;
> > using std :: endl;
> >
> > class Complejo{
> >
> > public:
> > Complejo(double = 0, double = 0);
> > void SumaComplejo ( double , double );
> > void RestaComplejo ( double , double );
> > void ImpresionComplejo (void);
> >
>
> Aunque escribir estos prototipos sea correcto, no aconsejo omitir los
> nombres de los parámetros; es más legible si los escribes.
>
> Tampoco es necesario indicar 'void' para una lista vacía de parámetros.
>
> > private:
> > double real;
> > double imaginaria;
> > };
> >
> > Complejo::Complejo(double re, double im){
> > real = re;
> > imaginaria = im;
> > }
> >
> > void Complejo::SumaComplejo( double r2, double i2 ){
> >
> > real = real + r2;
> > imaginaria = imaginaria + i2;
>
> Deberías acostumbrarte a usar el operador +=, como en este caso; esto es,
>
> real += r2;
> imaginaria += i2;
>
> > cout<< "El resultado de la suma de complejos es:"<< endl;
> > ImpresionComplejo ();
>
> Esto no es nada aconsejable. Cada función debe realizar la tarea que se
> le imputa; ni más ni menos.
>
> En este caso, realizas dos tareas:
> 1. Calcular la suma, y
> 2. Comunicar los resultado al usuario
>
> El diseño de 'SumaComplejo()' es la de sumar dos números complejos -
> nada más. El hecho de comunicarse o no con el usuario no es la
> responsabilidad de esta función miembro. Además, puedes ver que no
> siempre conviene mantener esta tarea, porque puede darse el caso de que
> tenemos que sumar varios miles de números complejos que forma parte de
> una tarea más complicada, como por ejemplo una suma total. No sería
> coherente que el usuario de repente vea en la pantalla miles de mensajes
> cuando en realidad pidió hacer una suma total y que obviamente la muestre.
>
> En general, es más fácil agregar funcionalidad que eliminarla.
>
> > }
> >
> > void Complejo::RestaComplejo( double r2, double i2 ){
> >
> > real = real - r2;
> > imaginaria = imaginaria - i2;
> > cout<< "El resultado de la resta de complejos es: "<< endl;
> > ImpresionComplejo ();
> > }
> >
>
> Aquí tenemos la misma situación que antes.
>
> >
> > void Complejo::ImpresionComplejo (){
> >
> > cout<< " ( "<< real<<" , "<< imaginaria<< " *i ) "<< endl;
>
> En matemáticas, el uso de "i" es para expresar un número complejo de
> forma algebraica; por ejemplo,
>
> 3 + 4i
>
> También se puede representar como una pareja ordenada:
>
> (3,4)
>
> Aconsejo elegir una u otra forma, pero no la combinación.
>
> Tampoco aconsejo agregar lo de 'endl', ya que como dije antes, es más
> fácil agregar esta funcionalidad que eliminarla.
>
> > }
> >
> >
> > int main ()
> > {
> > Complejo C1;
> > cout<< "El complejo por defecto es: "<< endl;
> > C1.ImpresionComplejo();
> > cout<< "El segundo complejo es:"<< endl;
> > Complejo C2( 12.5, 28.4 );
> > C2.ImpresionComplejo();
> > C2.SumaComplejo( 8.9, 34.2 );
> > cout<< "El tercer complejo es : "<< endl;
> > Complejo C3( 23.8, 32.12 );
> > C3.ImpresionComplejo();
> > C3.RestaComplejo( 11.5, 13.8 );
> > return 0;
> > }
> >
>
> En general, todo está bien hecho, aunque hay algunos matices sobre el
> diseño que te voy a comentar:
>
> 1. Aunque el ejercicio pide implementar ciertas funciones, siempre
> deberías tener presente que una clase debe ser útil. El problema es que
> no podemos acceder a la información de un número complejo: las partes
> real e imaginaria.
>
> Sugiero agregar funciones miembro para acceder a esta información, tanto
> para leer (obtener) como para escribir (asignar).
>
> 2. Para la suma y resta, sabemos que debe ser entre complejos, así que
> el nombre 'SumaComplejo()' no es necesario, por lo que podrías reducirlo
> a simplemente: 'suma()'.
>
> 3. Como es una suma o resta entre complejos, no es necesario permitir el
> paso de 2 valores de coma flotante. Deberías aceptar un objeto de tipo
> 'Complejo'. Esto es,
>
> Complejo Complejo::Suma( const Complejo &der );
>
> También impones que la suma realmente es una suma y asignación; es
> decir, modifica "este objeto" al realizar la suma. No sé si es eso lo
> que realmente quieres hacer.
>
>
> Espero haber aclarado las dudas.
>
> Steven
>
>
>
>
> ------------------------------
>
> Message: 5
> Date: Sun, 15 Apr 2012 23:05:48 +0200
> From: "Marcos Collado" <marquitos.mcm en gmail.com>
> To: "'Lista de correo sobre C y C++'" <cconclase en listas.conclase.net>
> Subject: [C con Clase] Problema al leer datos de un documento externo
> al programa
> Message-ID: <805FDEE4AF0E48579D445FFA9148BD0C en MarcosPortatil>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Creo que el título se entiende poco, a ver si me explico mejor por aquí:
>
> Estoy intentando realizando un programa por el cual escriba datos en un
> documento .dat y lea de ellos. El caso es que tiene una estructura el
> documento:
>
> PRODUCTOS
>
> id producto "nombre" precio_compra precio_venta stock num_unidades
>
> ...
>
> id producto "nombre" precio_compra precio_venta stock num_unidades
>
> FIN PRODUCTOS
>
>
>
> Entonces como puedo hacer para leer los datos por ejemplo de precio_compra y
> luego reescribirlos en esa misma zona?
>
>
>
> Gracias de antemano, un saludo ^^
>
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120415/12147bbe/attachment.html>
>
> ------------------------------
>
> _______________________________________________
> Cconclase mailing list
> Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> Fin de Resumen de Cconclase, Vol 71, Envío 19
> *********************************************
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120415/ed905f05/attachment.html>
Más información sobre la lista de distribución Cconclase