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