Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Alien-Z

#21
Más datos hombre, ¿usas una librería específica (WinAPI, QT, wxWidgets...) o vas a ejecutar guiones shell...?, ¿multiplataforma o para un SO específico?.

Si estás buscando una opinión general te recomiendo QT. Aquí un ejemplo para envíar e-mails:

smtp.h:
Código (cpp) [Seleccionar]
   /****************************************************************************
   ** $Id: qt/smtp.h 3.3.6 edited Aug 31 2005 $
   **
   ** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.
   **
   ** This file is part of an example program for Qt. This example
   ** program may be used, distributed and modified without limitation.
   **
   *****************************************************************************/
   
   #ifndef SMTP_H
   #define SMTP_H
   
   #include <QTcpSocket>
   #include <QString>
   #include <QTextStream>
   #include <QDebug>
   #include <QMessageBox>
   
   class Smtp : public QObject
   {
   Q_OBJECT
   
   
   public:
   Smtp( const QString &from, const QString &to,
   const QString &subject, const QString &body );
   ~Smtp();
   
   signals:
   void status( const QString &);
   
   private slots:
   void stateChanged(QTcpSocket::SocketState socketState);
   void errorReceived(QTcpSocket::SocketError socketError);
   void disconnected();
   void connected();
   void readyRead();
   
   private:
   QString message;
   QTextStream *t;
   QTcpSocket *socket;
   QString from;
   QString rcpt;
   QString response;
   enum states{Rcpt,Mail,Data,Init,Body,Quit,Close};
   int state;
   
   };
   #endif


stmp.cpp:
Código (cpp) [Seleccionar]
   #include "smtp.h"
   
   Smtp::Smtp( const QString &from, const QString &to, const QString &subject, const QString &body )
   {
   socket = new QTcpSocket( this );
   
   connect( socket, SIGNAL( readyRead() ), this, SLOT( readyRead() ) );
   connect( socket, SIGNAL( connected() ), this, SLOT( connected() ) );
   connect( socket, SIGNAL(error(SocketError)), this,
   SLOT(errorReceived(SocketError)));
   connect( socket, SIGNAL(stateChanged( SocketState)), this,
   SLOT(stateChanged(SocketState)));
   connect(socket, SIGNAL(disconnectedFromHost()), this,
   SLOT(disconnected()));;
   
   message = "To: " + to + "\n";
   message.append("From: " + from + "\n");
   message.append("Subject: " + subject + "\n");
   message.append(body);
   message.replace( QString::fromLatin1( "\n" ), QString::fromLatin1( "\r\n" ) );
   message.replace( QString::fromLatin1( "\r\n.\r\n" ),
   QString::fromLatin1( "\r\n..\r\n" ) );
   this->from = from;
   rcpt = to;
   state = Init;
   socket->connectToHost( "smtp.yourserver.com", 25);
   if(socket->waitForConnected ( 30000 )) {qDebug("connected"); }
   
   t = new QTextStream( socket );
   }
   Smtp::~Smtp()
   {
   delete t;
   delete socket;
   }
   void Smtp::stateChanged(QTcpSocket::SocketState socketState)
   {
   
   qDebug() <<"stateChanged " << socketState;
   }
   
   void Smtp::errorReceived(QTcpSocket::SocketError socketError)
   {
   qDebug() << "error " <<socketError;
   }
   
   void Smtp::disconnected()
   {
   
   qDebug() <<"disconneted";
   qDebug() << "error " << socket->errorString();
   }
   
   void Smtp::connected()
   {
   output->append("connected");
   qDebug() << "Connected ";
   }
   
   void Smtp::readyRead()
   {
   
   qDebug() <<"readyRead";
   // SMTP is line-oriented
   
   QString responseLine;
   do
   {
   responseLine = socket->readLine();
   response += responseLine;
   }
   while ( socket->canReadLine() && responseLine[3] != ' ' );
   
   responseLine.truncate( 3 );
   
   
   if ( state == Init && responseLine[0] == '2' )
   {
   // banner was okay, let's go on
   
   *t << "HELO there\r\n";
   t->flush();
   
   state = Mail;
   }
   else if ( state == Mail && responseLine[0] == '2' )
   {
   // HELO response was okay (well, it has to be)
   
   *t << "MAIL FROM: " << from << "\r\n";
   t->flush();
   state = Rcpt;
   }
   else if ( state == Rcpt && responseLine[0] == '2' )
   {
   
   *t << "RCPT TO: " << rcpt << "\r\n"; //r
   t->flush();
   state = Data;
   }
   else if ( state == Data && responseLine[0] == '2' )
   {
   
   *t << "DATA\r\n";
   t->flush();
   state = Body;
   }
   else if ( state == Body && responseLine[0] == '3' )
   {
   
   *t << message << "\r\n.\r\n";
   t->flush();
   state = Quit;
   }
   else if ( state == Quit && responseLine[0] == '2' )
   {
   
   *t << "QUIT\r\n";
   t->flush();
   // here, we just close.
   state = Close;
   emit status( tr( "Message sent" ) );
   }
   else if ( state == Close )
   {
   deleteLater();
   return;
   }
   else
   {
   // something broke.
   QMessageBox::warning( 0, tr( "Qt Mail Example" ), tr( "Unexpected reply from SMTP server:\n\n" ) + response );
   state = Close;
   }
   response = "";
   }


Invocación:
Código (cpp) [Seleccionar]
   Smtp *newMail = new Smtp("from@address.com","to@address.com"," Your Subject","My body text");
   delete newMail;


Fuente: http://www.qtcentre.org/threads/2221-Sending-email-using-Qt

Saludos.
#22
A dia de hoy el futuro está en la política y no en la intelectual; jodida realidad.
#23
Programación C/C++ / Re: problemilla en c++
4 Septiembre 2013, 12:54 PM
Cita de: Eternal Idol en  3 Septiembre 2013, 19:26 PMlo que tenes que hacer es  depurar tu programa, te recomiendo usar el WinDbg.

CitarEl programa funcionaba bien hasta que añadí algunas líneas de código.

Aunque es evidente te comento que deberías empezar por depurar la zona de código que añadiste y, si no se soluciona, continúa por funciones, métodos y rutinas que sean llamadas por dichas líneas.

Saludos.
#24
¡Buen trabajo!.

Un par de recomendaciones: El código queda más comprensible de cara a otros programadores cuando la información tiene identificadores significativos, en las variables de tu código hay que volver arriba varias veces para saber qué era exactamente cada dato.

Y para esto:

Código (java) [Seleccionar]
for (double i =1;i<21;i++){  //COMPROBACIÓN
i-=1;
i =aniadir(i);
for (double i1=0;i1<21;i1++){
double fatemp[];
i1-=1;
// System.out.println("USados "+i+" "+i1);
i1 =aniadir(i1);
fatemp =math(u,d,i,i1);
if (fatemp[0]+fatemp[1]==t){
if(verificar(i,i1,u1,d1,t1)){
System.out.println("¡Bingo!,¡Bango!,¡Bongo! , x igual a "+i+ " e y igual a "+i1);
break;}
}
}
}

for (double i =1;i<20;i++){  //SEGUNDA COMPROBACIÓN
i-=1;
i=aniadir(i);
for (double i1=0;i1>-20;i1--){
double fatemp[];
i1+=1;
// System.out.println("USados "+i+" "+i1);
i1 =aniadirminus(i1);
fatemp =math(u,d,i,i1);
if (fatemp[0]+fatemp[1]==t){
if(verificar(i,i1,u1,d1,t1)){
System.out.println("1¡Bingo!,¡Bango!,¡Bongo! , x igual a "+i+ " e y igual a "+i1);
break;}
}
}
}


for (double i =1;i>-20;i--){ // TERCERA COMPROBACIÓN
i+=1;
i=aniadirminus(i);
for (double i1=0;i1<20;i1++){
double fatemp[];
i1-=1;
// System.out.println("USados "+i+" "+i1);
i1 =aniadir(i1);
fatemp =math(u,d,i,i1);
if (fatemp[0]+fatemp[1]==t){
if(verificar(i,i1,u1,d1,t1)){
System.out.println("2¡Bingo!,¡Bango!,¡Bongo! , x igual a "+i+ " e y igual a "+i1);
break;}
}
}
}

for (double i =1;i>-20;i--){//CUARTA COMPROBACIÓN
i+=1;
i=aniadirminus(i);
for (double i1=0;i1>-20;i1--){
double fatemp[];
i1+=1;
// System.out.println("USados "+i+" "+i1);
i1 =aniadirminus(i1);
fatemp =math(u,d,i,i1);
if (fatemp[0]+fatemp[1]==t){
if(verificar(i,i1,u1,d1,t1)){
System.out.println("T¡Bingo!,¡Bango!,¡Bongo! , x igual a "+i+ " e y igual a "+i1);
break;}
}
}
}

}


¿Por qué no haces otro bucle anidado en vez de escribir 4 veces el mismo código?.

Un saludo.
#25
Hay dos formas sencillas de hacerlo:

1- Desde la interfaz gráfica de Ubuntu: http://askubuntu.com/questions/186865/how-do-i-start-a-program-automatically-when-i-boot

Si dices que estás trabajando con un servidor esa opción está descartada porque no tendrá interfaz gráfica.

2-Con un fichero especial que reconoce Ubuntu como autoejecutable (esta es tu parada): http://astarothsworld.blogspot.com.es/2008/10/cmo-hacer-un-autorun-para-ubuntu.html

Si no te aclaras, no dudes en comentar.

Saludos.

PD: Este tema iria más bien en el apartado de guiones shell.
#26
Cita de: m@o_614 en 29 Agosto 2013, 05:12 AM
saludos Alien-Z yo pense que con:

*(romano+i) = (char*)malloc((strlen(B)+1)*sizeof(char));

strlen(B)+1 ya le estaba agregando el fin de cadena \0.

La función strlen(B) lo que hace es devolver el tamaño en bytes de la cadena B sin contar el byte que ocupa '\0', pero no la modifica ni le asigna nada, ni si quiera la marca fin.

Es luego con strcpy() donde copias el contenido de B en array['i] incluyendo '\0', pero si no tiene suficiente tamaño se queda fuera.

Lo que yo te quería decir es que esto "(strlen(B)+1)" es lo mismo que la constante "TAM", y que debes controlar que la entrada no sea más grande que dicha constante, cosa que no se hace con la función "gets" y por tanto debes incluir tú manualmente la marca fin '\0'.

Saludos.
#27
Java / Re: Preciso una ayudita sobre array
27 Agosto 2013, 22:37 PM
Parece estar bien, prueba así:

Código (java) [Seleccionar]
boolean ascendente = true;
int i = 1; //Empezamos desde la segunda posición del array
while (i < ordenado.length && ascendente) {
  if (ordenado[i-1] > ordenado [i]) //Si no está ordenado
     ascendente = false;

  i++;
}
if(ordenado)
  system.out.println("El array está ordenado.");
else
  system.out.println("El array no está ordenado.");


Saludos.
#28
Los punteros a arrays se utilizan como un array en si, creo que esto es lo que preguntas:

Código (cpp) [Seleccionar]
int nombre_funcion(char *a[], int n)
{
  for (int i = 0; i < n; i++)
   cout << a[i] << endl;
  return 0;
}


Un par de cosas:

Código (cpp) [Seleccionar]
*(array+i) = (char*)malloc((strlen(B)+1)*sizeof(char));

¿Te das cuenta de que lo que haces es reservar en cada posición de la tabla un byte más que en la posición anterior?, es decir, si array[3] ocupa 3 bytes (y solo caben 3 caracteres), array[4] va a ocupar 4 bytes y caben 4 caracteres, por tanto no todas las posiciones tienen el mismo tamaño.

Además debes añadir la marca fin "\0" a las cadenas de tipo char.

No es correcto el uso de gets, en su lugar utiliza fgets: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Un saludo.
#29
Programación C/C++ / Re: Creando un bat
27 Agosto 2013, 21:44 PM
Suponemos como premisa que no quieres comandos shell porque has puesto el tema en un subforo de C/C++.

-necesito que el bat auto detecte si windows es 32 bits o 64 bits.

Consulta alguno de los archivos de información del sistema operativo, aqui tienes un ejemplo: http://support.microsoft.com/kb/556009

-Que desistale un programa si esta instalado Gameforge live.

Desinstalar un programa no es más que eliminar la carpeta de dicha aplicación y modificar los archivos de configuración correspondientes.

-Instale un programa "Tortoise SVN" que esta en la misma carpeta que el bat.(en modo silencioso)

Instalar un programa es lo mismo que copiar la carpeta al PC. Si dices que ya se encuentra en la carpeta del bat (y ésta en el disco duro), colócala en alguna ruta más clara. Ej: C:\Archivos del programa\carpeta de tu aplicación\ficheros que componen tu aplicación

-Que copie la carpeta Micromacro al escritorio.
-Y que copie la carpeta rom a Micromacro/Scripts/
-Despues que copia la carpeta ingamefuncions que esta en Micromacro/Scripts/devtools/ingamefuncions
y que la copie a archivos de programa/Runes of Magic/Interface/Addons/


¿Pero exactamente qué API o librería estás utilizando?. Tienes desde:

Código (cpp) [Seleccionar]
system("copy C:\\origen\\archivo1.txt C:\\destino");

O usando la API de Windows: http://www.delphiaccess.com/forum/trucos-y-consejos-16/%28multilenguaje%29-copiar-multiples-archivos-y-carpetas/

Con lo cual la harías dependiente de este SO (Win API = cosa mala).

Lo que yo te recomiendo es alguna librería con una implementación medianamente decente y que mantenga el carácter multiplataforma de C/C++ como QT: http://www.zonaqt.com/foro/copiar-y-eliminar-directorios#comment-2213

Cita de: Ambolia en 27 Agosto 2013, 20:12 PM
una cosa mi foro es http://www.elrincondelbot.p.ht/ y esta en construccion y no tumbarlo por favor.

Demasiado tarde Muahahahaha
#30
Manejo de ficheros en C++: http://c.conclase.net/curso/?cap=039

Saludos.