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ú

Temas - Zodiak98

#1
¡Hola! Soy nuevo en el desarrollo web con ASP.NET MVC, y tengo una duda.

Estoy haciendo un sitio web que simplemente rellene una base de datos, pero quiero que una vez el usuario haya ingresado algo en la base de datos, abajo aparezca un mensaje diciendo que la inserción fue exitosa.

Pero cuando intento hacer esto, el mensaje no se muestra.

Esta es la función que llama el form al presionar el submit:
Código (cpp) [Seleccionar]

[HttpPost]
        public ActionResult Create(PersonModels person)
        {
            try
            {
                // TODO: Add insert logic here
                //Adding to database and holding the response in the viewbag.
                string strInsertion = ConnectionModels.insertPerson(person);
                ViewBag.InsertionResult = strInsertion;

                return RedirectToAction("Index");
            }
            catch
            {
                return View("Index");
            }
        }


Y este es el Index:
Código (cpp) [Seleccionar]

public ActionResult Index()
        {
            return View();
        }


Y pues esto es lo que intento hacer en el index.cshtml
Código (html) [Seleccionar]

<div>
    <label>
       @ViewBag.InsertionResult
    </label>
</div>


Ese div está debajo del form, no lo publico completo porque sería muy extenso.

¡Gracias de antemano! :)
#2
Primero, no sé si esta es la zona correcta para publicar esto, de no ser así por favor moverlo.  :)

Estoy intentando crear un evento en MySQL pero ya llevo hora y media investigando y no he logrado dar con nada.

Este es el código del evento que estoy haciendo:

Código (cpp) [Seleccionar]

DELIMITER |

CREATE EVENT Event_Log_Counter
ON SCHEDULE
EVERY 15 SECOND
STARTS '2017-05-12 15:30:00'
    ENDS '2017-05-12 16:30:00'
DO
BEGIN
DECLARE cValueCounter BIGINT UNSIGNED;
   
    SELECT cValueCounter := Counter FROM Log_Counter;
    SET cValueCounter := cValueCounter + 1;
   
    UPDATE log_counter
    SET Counter = cValueCounter;
END |

DELIMITER ;
#3
Este problema me ha estado comiendo la cabeza todo el día.

La función que tengo es:
Código (cpp) [Seleccionar]

private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e) {
        std::vector<Mat> images;
        std::vector<int> labels;

        std::vector<cv::String> filenames;
        glob("Dataface/*.jpg", filenames, false);

        if (filenames.size() == (size_t)0) {
            MessageBox::Show("La carpeta está vacía.", "Error", MessageBoxButtons::OK, MessageBoxIcon::Error);
            return;
        }

        for (size_t i = 0; i < filenames.size(); i++) {
            images.push_back(imread(filenames[i]));
            labels.push_back((int)i);
        }

        Ptr<FaceRecognizer> model = createEigenFaceRecognizer();

        model->train(images, labels);

        Mat img = imread("C:\\Users\\Germán Aguilera\\Desktop\\Christina.jpg");

        int prediction = model->predict(img);

        //MessageBox::Show(prediction.ToString());

        //rModel = &model;

        MessageBox::Show("El programa ya ha sido entrenado.", "Reconocimiento facial", MessageBoxButtons::OK, MessageBoxIcon::Information);
    }


La línea que me está arrojando la excepción es:
Código (cpp) [Seleccionar]

int prediction = model->predict(img);


¿Pero por qué sucede eso?
No tuve ningún problema con:
Código (cpp) [Seleccionar]

model->train(images, labels);


Quería chequear los resultados del predict, así que copié y pegué en otra carpeta una imagen ya procesada para usarla en el predict, y me arroja esa excepción.

¿Alguien podría echarme una mano?

Gracias de antemano. :)
#4
Programación C/C++ / [Error] Tabla Hashing
16 Febrero 2017, 01:59 AM
Verán, estoy intentando representar una Tabla Hash, pero por alguna razón me dice que existe un error de enlace o algo así.

Estoy trabajando en Visual Studio 2015, esto es lo que llevo:
Nodo.h
Código (cpp) [Seleccionar]

#pragma once

template<class T>
class Nodo {
private:
Nodo<T>* siguiente;
Nodo<T>* anterior;
T clave;
public:
inline Nodo();
inline Nodo(T clave);

inline Nodo<T>* getSiguiente();
inline Nodo<T>* getAnterior();
inline T getClave();

inline void setSiguiente(Nodo<T>* siguiente);
inline void setAnterior(Nodo<T>* anterior);
inline void setClave(T clave);
};


Nodo.cpp
Código (cpp) [Seleccionar]

#include "Nodo.h"

template <class T>
inline Nodo<T>::Nodo() {
siguiente = nullptr;
anterior = nullptr;
clave = 0;
}

template <class T>
inline Nodo<T>::Nodo(T clave) {
siguiente = nullptr;
anterior = nullptr;
this->clave = clave;
}

template <class T>
inline Nodo<T>* Nodo<T>::getSiguiente() {
return siguiente;
}

template <class T>
inline Nodo<T>* Nodo<T>::getAnterior() {
return anterior;
}

template <class T>
inline T Nodo<T>::getClave() {
return clave;
}

template <class T>
inline void Nodo<T>::setAnterior(Nodo<T>* anterior) {
this->anterior = anterior;
}

template <class T>
inline void Nodo<T>::setSiguiente(Nodo<T>* siguiente) {
this->siguiente = siguiente;
}

template <class T>
inline void Nodo<T>::setClave(T clave) {
this->clave = clave;
}


ListaDoble.h
Código (cpp) [Seleccionar]

#pragma once
#include "Nodo.h"

template <class T>
class ListaDoble {
private:
Nodo<T>* inicio;
public:
inline ListaDoble();

void agregar(Nodo<T>* n);
void eliminar(Nodo<T>* n);
void listar();

inline Nodo<T>* getInicio();
};


ListaDoble.cpp
Código (cpp) [Seleccionar]

#include "ListaDoble.h"

template <class T>
inline ListaDoble<T>::ListaDoble() {
inicio = nullptr;
}

template <class T>
void ListaDoble<T>::agregar(Nodo<T>* n) {
n->setSiguiente(inicio);

if (inicio != nullptr) {
inicio->setAnterior(n);
}

n->setAnterior(nullptr);
inicio = n;
}

template <class T>
void ListaDoble<T>::eliminar(Nodo<T>* n) {
if (n->getAnterior() != nullptr) {
n->getAnterior()->setSiguiente(n->getSiguiente());
} else {
inicio = n;
}

if (n->getSiguiente() != nullptr) {
n->getSiguiente()->setAnterior(n->getAnterior());
}

delete n;
}

template <class T>
inline Nodo<T>* ListaDoble<T>::getInicio() {
return inicio;
}

template <class T>
void ListaDoble<T>::listar() {
for (Nodo<T>* aux = inicio; aux != nullptr; aux = aux->getSiguiente()) {
cout << "Clave: " << aux->getClave() << endl;
}
}


TablaHash.h
Código (cpp) [Seleccionar]

#pragma once
#include "ListaDoble.h"

#define TAM 701

template <class T>
class TablaHash {
private:
ListaDoble<T>* H[TAM];
public:
TablaHash();

void agregar(Nodo<T>* n);
void eliminar(Nodo<T>* n);
Nodo<T>* buscar(T clave);

inline int h(int clave);

void listar();
};


TablaHash.cpp
Código (cpp) [Seleccionar]

#include "TablaHash.h"

template<class T>
TablaHash<T>::TablaHash() {
for (int h = 0; h < TAM; h++) {
H[h] = nullptr;
}
}

template<class T>
inline int TablaHash<T>::h(int clave) {
return (clave % TAM);
}

template<class T>
void TablaHash<T>::agregar(Nodo<T>* n) {
int slot = h((int)n->getClave());

if (H[slot] == nullptr) {
H[slot] = new ListaDoble<T>;
}

H[slot]->agregar(n);
}

template <class T>
Nodo<T>* TablaHash<T>::buscar(T clave) {
int slot = h((int)clave);

if (H[slot] != nullptr) {
for (Nodo<T>* aux = H[slot]->getInicio(); aux != nullptr; aux = aux->getSiguiente()) {
if (aux->getClave() == clave) {
return aux;
}
}
}

return nullptr;
}

template <class T>
void TablaHash<T>::eliminar(Nodo<T>* n) {
int slot = h((int)n->getClave());
Nodo<T>* aux = buscar(n->getClave());

if (aux != nullptr) {
H[slot]->eliminar(aux);
}

if (H[slot]->getInicio() == nullptr) {
H[slot] = nullptr;
delete H[slot];
}
}

template <class T>
void TablaHash<T>::listar() {
for (int i = 0; i < TAM; i++) {
if (H[i] != nullptr) {
H[i]->listar();
}
}
}


main.cpp
Código (cpp) [Seleccionar]

#include <iostream>
#include "TablaHash.h"

using namespace std;

int main() {
TablaHash<int> myHashTable;

Nodo<int>* nodo1 = new Nodo<int>(25);
Nodo<int>* nodo2 = new Nodo<int>(35);
Nodo<int>* nodo3 = new Nodo<int>(45);


return 0;
}


El error que me da es el siguiente:

- Error LNK2019 unresolved external symbol "public: __thiscall TablaHash<int>::TablaHash<int>(void)" (??0?$TablaHash@H@@QAE@XZ) referenced in function _main
- Error LNK2019 unresolved external symbol "public: __thiscall Nodo<int>::Nodo<int>(int)" (??0?$Nodo@H@@QAE@H@Z) referenced in function _main

- Error LNK1120 2 unresolved externals


Supongo que tiene algo que ver con las cabeceras, ¿alguien podría decirme que estoy haciendo mal?

Gracias de antemano. :)
#5
Programación General / [Duda] Diagrama de Voronoi.
23 Diciembre 2016, 16:00 PM
Hola a todos.

Resulta que ya pude construir la triangulación de Delaunay en javascript, pero la duda que tengo ahora es, una vez que ya se ha podido construir la triangulación de Delaunay, ¿cómo de ahí se deriva al diagrama de Voronoi? Por ejemplo, leí por ahí que se usa el centro de la circunferencia de los triángulos de Delaunay, y la mitad de cada "Edge", vale, ¿pero qué patrón utilizo para conectarlos? Puedo calcular todo eso, pero el problema que tengo es que no sé qué patrón o procedimiento utilizar para conectar todos esos puntos y se genere el diagrama.

¿Alguna sugerencia de cómo derivar Delaunay a Voronoi? Gracias de antemano. :)
#6
Desarrollo Web / [javascript] Diagrama de Voronoi.
20 Diciembre 2016, 05:19 AM
Buenas a todos. :)
Verán, resulta que mi profesor es un ca****nazo y nos ha dejado como asignación de "fin de año" realizar el diagrama de Voronoi en javascript.

El problema es que no tengo ni idea de cómo empezar, o sea, no vine acá a pedir que me hagan la asignación, lo que quiero es que más o menos me orienten, ¿qué necesito? ¿cómo empiezo? Porque la verdad no tengo ni idea, no dijo que usáramos un algoritmo en específico, sino el de nuestra preferencia. Me gustó el de Fortune, pero pues la verdad se ve muy difícil de implementar.

¿Algún consejo?
#7
Primero que nada, iba a postear esto en programación C/C++ pero como mi pregunta es algo general no sé si irá acá, por eso lo pongo acá, si no es así, por favor muévanlo a la zona correcta.

Ok, ahora al grano. Verán, ni siquiera sé cómo empezar. Mi duda yace en que no sé cómo relacionar un programa con otro. Me leí por ahí que hay que saber cómo está construido el programa que se quiere "hackear" primero que nada.

Bien, supongamos que tenemos un programa bastante absurdo, como este:

Código (cpp) [Seleccionar]

#include <iostream>
#include <windows.h> //Para la función Sleep.

int main() {
     for(int h = 0;;h++) {
          std::cout << "El valor de H es: " << h << std::endl;
          Sleep(1000);
     }

     return 0;
}


Ahora, ya sé cómo está construido, ¿cómo haría yo para que a través de otro programa que yo haga, la variable 'h' se reinicie a cero.

O sea, esa es mi duda, ¿cómo diantres se relaciona un programa externo con otro? Por ejemplo, más o menos como en los juegos, los shooters, que el personaje sea inmortal, o que dispare inmediatamente la mira detecte a otro personaje, etc...

Y ojo, que no pretendo crear programas maliciosos para dañar a alguien o a algo, o sea, simplemente tengo curiosidad en saber cómo carrizos funcionan esos programas.

Porque no tengo ni *** idea de cómo relacionarlos.

Un abrazo. :)
#8
Programación C/C++ / [C++] Error con ficheros.
26 Noviembre 2016, 19:21 PM
Verán, estoy haciendo un programa simple que lee desde un archivo, el trabajo del programa es sustituir cada espacio en blanco por un guión bajo.

El programa ya está hecho (más o menos), la cosa es que, no me da ningún tipo de error sino que se crashea y deja de funcionar en su ejecución.

Acá el código que llevo hasta ahora:
Código (cpp) [Seleccionar]

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

//Función que devuelve una línea con cada espacio en blanco con un guión bajo
string reemplazar(string linea);

int main() {
    //Creación del archivo.
    fstream archivo("archivo.txt", ios::in | ios::out);
    //Variable para almacenar cada línea del archivo.
    string linea;
    //Variable para reemplazar todo lo que está en el archivo.
    string dArchivo = "";

    //Comprobando que el archivo exista.
    if(!archivo) {
        cerr << "Error: El archivo no existe." << endl;
        return -1;
    }

    //Leyendo cada línea del fichero.
    while(!archivo.eof()) {
        //Obteniendo línea por línea desde el archivo.
        getline(archivo, linea);

        //Almacenando las líneas con los guiones bajos ya reemplazados.
        dArchivo += reemplazar(linea) + "\n";
    }

    //Sobreescribiendo el archivo con los guiones bajos ya establecidos.
    archivo << dArchivo;

    //Cerrando el archivo.
    archivo.close();

    return 0;
}

//Implementando el método para reemplazar los espacios en blanco por un guión bajo.
string reemplazar(string linea) {
    //Nueva línea
    string nLinea = "";

    //Sustituyendo cada espacio en blanco con un guión bajo.
    for(unsigned int h = 0; h < linea.length(); h++) {
        if(linea[h] == ' ') {
            nLinea[h] += '_';
        } else {
            nLinea[h] += linea[h];
        }
    }

    return nLinea;
}
#9
Buenas a todos, estoy realizando un ejercicio de la universidad donde se nos pide que usemos interpolación de LaGrange para el cálculo de una valor Y, recibiendo de entrada el valor X desde un TextBox, ya el ejercicio está resuelto el problema es que hay como un tipo de desbordamiento, porque hice los cálculos manualmente y me da el resultado esperado, pero mostré el valor de la variable con un alert y me regresa un valor totalmente inesperado.

La función que me hace el cálculo es la siguiente:
Código (cpp) [Seleccionar]

function calculate() {
//Value taken in order to calculate y's value into the function from the textbox
var x = parseInt(document.getElementById('f_Value').value);

//L0
var l_0 = ((x - 50)*(x - Math.pow(3,4))*(x - Math.pow(1,6)))/((12 - 50) * (12 - Math.pow(3,4)) * (12 - Math.pow(1,6)));
//L1
var l_1 = ((x - 12)*(x - Math.pow(3,4))*(x - Math.pow(1,6)))/((50 - 12) * (50 - Math.pow(3,4)) * (50 - Math.pow(1,6)));
//L2
var l_2 = ((x - 12)*(x - 50)*(x - Math.pow(1,6)))/((Math.pow(3,4) - 12) * (Math.pow(3,4) - 50) * (Math.pow(3,4) - Math.pow(1,6)));
//L3
var l_3 = ((x - 12)*(x - 50)*(x - Math.pow(3,4)))/((Math.pow(1,6) - 12) * (Math.pow(1,6)- 50) * (Math.pow(1,6) - Math.pow(3,4)));

//Final value after calculating it inside our function.
var v_Function = (2 * l_0) + (4 * l_1) + (100 * l_2) + (700 * l_3);

alert(l_2);
//alert("The Y value for " + x + " is: " + v_Function);
}


f_Value es el id que identifica al textbox, si meto 30000 l_2 debería obtener el valor de 1, pero en lugar de ello me retorna: 157452780.85203367, no sé si ocurre algún tipo de desbordamiento. ¿Alguien podría echarme una mano?
#10
Verán, estoy intentando hacer un programa bastante simple en C++ pero por alguna razón en la línea 134 me arroja un error y no puedo averiguar por qué.

¿Puede alguien echarme una mano?

Código (cpp) [Seleccionar]

#include <iostream>
#include <sstream>
#include <stdio.h>

using namespace std;

class Cliente
{
public:

    Cliente(string nombre, string apellido, long int cedula, short int edad);

     // funciones de la clase.
     // tipo de dato a retornar/ nombre / (lista de parametros),.

     string getNombre();
     string getApellido();
     long int getCedula();
     short int getEdad();
     string toString();
     void setNombre(string nombre);
     void setApellido(string apellido);
     void setCedula(long int cedula);
     void setEdad(short int edad);
     string convertirCedula(long int cedula);
     string convertirEdad(short int edad);

private:

    string nombre, apellido;
    long int cedula;
    short int edad;
};

// Constructor, fuera de la clase.
Cliente::Cliente(string nombre, string apellido, long int cedula, short int edad)
{
    this->nombre=nombre;
    this->apellido = apellido;
    this->cedula = cedula;
    this->edad = edad;
}

string Cliente::getApellido()
{
    return apellido;
}

string Cliente::getNombre()
{

    return nombre;
}

long int Cliente::getCedula()
{
    return cedula;
}

short int Cliente::getEdad()
{
    return edad;
}

void Cliente::setNombre(string nombre)
{
    this->nombre = nombre;
}

void Cliente::setApellido(string apellido)
{
    this->apellido = apellido;
}

void Cliente::setCedula(long int cedula)
{

    this->cedula = cedula;
}

void Cliente::setEdad(short int edad)
{
    this->edad = edad;
}

string Cliente::toString()
{

    string total;

    string cedulaTrans, edadTrans;

    cedulaTrans = convertirCedula(cedula);
    edadTrans = convertirEdad(edad);

    total = nombre + "\n" + apellido + "\n" + cedulaTrans + "\n" + edadTrans;

    return total;
}

string Cliente::convertirCedula(long int cedula)
{
      stringstream flujo;

      flujo << cedula;

      return (flujo.str());
}

string Cliente::convertirEdad(short int edad)
{
    stringstream flujo;

    flujo << edad;

    return (flujo.str());

}

class Banco
{
public:

    Banco();
    string agregar(Cliente c);
    string mostrar();

private:

    Cliente c[20];
    int cont;
};

Banco::Banco()
{
    this->cont=0;

}

string Banco::agregar(Cliente aux){

    if(cont<20)
    {
        c[cont]=aux;
        cont++;
        return "Cliente agregado satisfactoriamente";
    }

    return "Banco lleno. No se puede agregar mas personas";

}

string Banco::mostrar()
{
    string x;

    for(int i=0; i<cont; i++)
    {
        x = x + c[i].toString();
    }

    return x;

}

int leerentero(string sms)
{
    int aux;

    cout << sms;
    cin >> aux;

    return aux;

}

Cliente leercliente()
{
       string nombre;
       string apellido;
       short int edad;
       long int cedula;

       cout << "\nIngrese Nombre: " << endl;
       cin.clear();
       fflush(stdin);
       getline(cin, nombre);
       cout << "\nIngrese Apellido: " << endl;
       cin.clear();
       fflush(stdin);
       getline(cin, apellido);
       cout << "\nIngrese Cedula: " << endl;
       cin >> cedula;
       cout << "\nIngrese Edad: " << endl;
       cin >> edad;

       Cliente aux(nombre, apellido, cedula, edad);
       return aux;

}

int main()
{
    Banco b;
    int opc;
    do
    {

        cout << "\n[1]Agregar Persona. \n[2]Mostrar Personas. \n[3]Salir" << endl;
        opc = leerentero("\nIngrese su opcion: ");

        switch(opc)
        {
            case 1:
                cout << b.agregar(leercliente()) << endl;
            break;
            case 2: cout << b.mostrar() << endl;
            break;
            case 3: return 0;
            break;

        }

    }while(opc!=3);

    return 0;
}

#11
Verán, actualmente estoy programando un juego bastante simple en Java, pero hay una cosa. Cuando yo presiono la tecla de la flecha izquierda(por ejemplo) la nave empieza a moverse (lógicamente) hacia la izquierda, pero si mientras la tengo presionada, presiono espacio (para disparar), la nave se detiene.

Lo que quiero es que me orienten en cómo hacer que eso no suceda, es decir, que la nave no deje de moverse mientras tenga la tecla presionada independientemente si presiono espacio.

Es decir, me muevo, presiono espacio, que dispare, y si no he soltado la tecla, que no se detenga sino que siga moviéndome hasta que la suelte (en este ejemplo, la izquierda).
#12
Programación C/C++ / [DUDA] Polimorfismo.
11 Junio 2016, 01:37 AM
Buenas a todos. Necesito que me expliquen algo que me está confundiendo un poco.

Tengo un código que me he sacado de C ConClase.
El código es el siguiente.
Código (cpp) [Seleccionar]

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

class Persona {
 public:
  Persona(const char *n) { strcpy(nombre, n); }
  Persona(const Persona &p);
  virtual void VerNombre() {
     cout << nombre << endl;
  }
  virtual Persona* Clonar() { return new Persona(*this); }
 protected:
  char nombre[30];
};

Persona::Persona(const Persona &p) {
  strcpy(nombre, p.nombre);
  cout << "Per: constructor copia." << endl;
}

class Empleado : public Persona {
 public:
  Empleado(const char *n) : Persona(n) {}
  Empleado(const Empleado &e);
  void VerNombre() {
     cout << "Emp: " << nombre << endl;
  }
  virtual Persona* Clonar() { return new Empleado(*this); }
};

Empleado::Empleado(const Empleado &e) : Persona(e) {
  cout << "Emp: constructor copia." << endl;
}

class Estudiante : public Persona {
 public:
  Estudiante(const char *n) : Persona(n) {}
  Estudiante(const Estudiante &e);
  void VerNombre() {
     cout << "Est: " << nombre << endl;
  }
  virtual Persona* Clonar() {
     return new Estudiante(*this);
  }
};

Estudiante::Estudiante(const Estudiante &e) : Persona(e) {
  cout << "Est: constructor copia." << endl;
}

int main() {
  Persona *Pepito = new Estudiante("Jose");
  Persona *Carlos = new Empleado("Carlos");
  Persona *Gente[2];

  Carlos->VerNombre();
  Pepito->VerNombre();

  Gente[0] = Carlos->Clonar();
  Gente[0]->VerNombre();

  Gente[1] = Pepito->Clonar();
  Gente[1]->VerNombre();

  delete Pepito;
  delete Carlos;
  delete Gente[0];
  delete Gente[1];

  return 0;
}



La duda que tengo es la siguiente:
Si mal no tengo entendido el puntero "this" hace referencia al objeto desde cual se está llamando a una función (por ejemplo).

Entonces, al llamar a la función "clonar", tengo lo siguiente:
Código (cpp) [Seleccionar]

virtual Persona* Clonar() {
     return new Estudiante(*this);
  }


Se supone que el parámetro "*this" hace referencia al objeto desde cuál se está llamando, que es de tipo "Persona*", pero el constructor de Estudiante, recibe un estudiante como parámetro y no una Persona. ¿Por qué es válido a hacer eso?

Sé que por polimorfismo, una persona puede ser igual a un estudiante, siempre y cuando estudiante herede de persona. Pero, ¿por qué si la función recibe un parámetro de tipo estudiante puede recibir uno de tipo persona? Es decir, estoy haciendo un estudiante igual a una persona (lo opuesto a lo que mencioné primeramente). Eso debería ser incorrecto, pero no lo es, ¿alguien me puede explicar por favor por qué?

Me estoy ahogando en un vaso de agua, lo sé. xD
#13
Verán, el programa que tengo que hacer es el siguiente.
Leer N cantidad de estudiantes, y dentro de otra estructura sus notas (parte teórica y parte práctica), como un máximo de 5 calificaciones para cada alumno. Es decir, si digo que son 3 notas prácticas serán 3 notas prácticas para todos los alumnos, lo mismo para la parte teórica.

En fin, todo chévere, pero cuando intento mostrar las calificaciones que ingresé previamente, me muestra valores basura.

¿Alguien podría echarme una mano? El programa lo estoy haciendo en Code::Blocks.
Acá les dejo el código fuente que llevo hasta ahora:

Código (cpp) [Seleccionar]

#include <iostream>
#include <cstdlib>

using namespace std;

//Variables globales para la cantidad de prácticos y parciales.
int nPracticos, nParciales;

struct Notas {
    int practicos[];
    int parciales[];
    float promedio;
};
typedef struct Notas Notas;

struct Estudiante {
    char nombre[25];
    char apellido[35];
    char cedula[10];
    char sexo;
    int edad;
    Notas notas;
};
typedef struct Estudiante Estudiante;

int leerEstudiantes();
int leerEvaluaciones(char tipo[]); //Para leer la cantidad de practicos y parciales.

void llenarEstudiante(Estudiante& estudiante, int id);
void mostrarEstudiante(const Estudiante& estudiante, int id);

int main() {
    int nEstudiantes;
    nEstudiantes = leerEstudiantes();
    nPracticos   = leerEvaluaciones((char*)"Practicos");
    nParciales   = leerEvaluaciones((char*)"Parciales");

    system("cls");

    Estudiante estudiante[nEstudiantes];

    //Llenando cada uno de los estudiantes.
    for(int est = 0; est < nEstudiantes; est++) {
        llenarEstudiante(estudiante[est], est);
    }

    system("cls");

    //Mostrar datos de los estudiantes.
    for(int est = 0; est < nEstudiantes; est++) {
        mostrarEstudiante(estudiante[est], est);
    }

    return 0;
}

int leerEstudiantes() {
    int nEstudiantes;

    do {
        cout << "Introduzca la cantidad de estudiantes: ";
        cin >> nEstudiantes;

        if(nEstudiantes <= 0) {
            cerr << "Cantidad de estudiantes invalida." << endl;
        }
    }while(nEstudiantes <= 0);

    return nEstudiantes;
}

int leerEvaluaciones(char tipo[]) {
    int cantidad;

    do{
        cout << "Ingrese la cantidad de " << tipo << ": ";
        cin >> cantidad;

        if(cantidad <= 0 || cantidad > 5) {
            cerr << "Cantidad incorrecta." << endl;
        }
    }while(cantidad <= 0 || cantidad > 5);

    return cantidad;
}

void llenarEstudiante(Estudiante& estudiante, int id) {
    //Variables para calcular el promedio.
    int pPracticos = 0, pParciales = 0;

    //Lectura de datos generales.
    cout << "Ingrese nombre de estudiante [" << (id + 1) << "]: ";
    cin >> estudiante.nombre;
    cout << "Ingrese apellido de estudiante [" << (id + 1) << "]: ";
    cin >> estudiante.apellido;
    cout << "Ingrese cedula de estudiane [" << (id + 1) << "]: ";
    cin >> estudiante.cedula;
    cout << "Ingrese edad de estudiante [" << (id + 1) << "]: ";
    cin >> estudiante.edad;
    cout << "Ingrese sexo de estudiante [" << (id + 1) << "] (M/F): ";
    cin >> estudiante.sexo;

    //Lectura de notas prácticas.
    for(int pr = 0; pr < nPracticos; pr++) {
        do {
            cout << "Ingrese nota del practico [" << (pr + 1) << "]: ";
            cin >> estudiante.notas.practicos[pr];

            if(estudiante.notas.practicos[pr] < 0 || estudiante.notas.practicos[pr] > 10) {
                cerr << "Nota incorrecta." << endl;
            }
        }while(estudiante.notas.practicos[pr] < 0 || estudiante.notas.practicos[pr] > 10);
    }

    //Lectura de notas parciales.
    for(int pa = 0; pa < nParciales; pa++) {
        do {
            cout << "Ingrese nota del parcial [" << (pa + 1) << "]: ";
            cin >> estudiante.notas.parciales[pa];
            if(estudiante.notas.parciales[pa] < 0 || estudiante.notas.parciales[pa] > 10) {
                cerr << "Nota incorrecta." << endl;
            }
        }while(estudiante.notas.parciales[pa] < 0 || estudiante.notas.parciales[pa] > 10);
    }

    //Calculando el promedio del estudiante:
    //Sumatoria de Prácticos
    for(int pr = 0; pr < nPracticos; pr++) {
        pPracticos += estudiante.notas.practicos[pr];
    }
    //Sumatoria de Parciales
    for(int pa = 0; pa < nParciales; pa++) {
        pParciales += estudiante.notas.parciales[pa];
    }
    //Cálculo del promedio.
    estudiante.notas.promedio = pPracticos/nPracticos*0.20 + pParciales/nParciales*0.50;
}

void mostrarEstudiante(const Estudiante& estudiante, int id) {
    cout << "Nombre de estudiante [" << (id + 1) << "]: " << estudiante.nombre << endl;
    cout << "Apellido de estudiante [" << (id + 1) << "]: " << estudiante.apellido << endl;
    cout << "Cedula de estudiante [" << (id + 1) << "]: " << estudiante.cedula << endl;
    cout << "Sexo de estudiante [" << (id + 1) << "]: " << estudiante.sexo << endl;
    cout << "Edad de estudiante [" << (id + 1) << "]: " << estudiante.edad << endl;

    for(int j = 0; j < nPracticos; j++) {
        cout << "Nota del practico [" << (j + 1) << "] del estudiante [" << (id + 1) << "]: " << estudiante.notas.practicos[j] << endl;
    }

    for(int j = 0; j < nParciales; j++) {
        cout << "Nota del parcial [" << (j + 1) << "] del estudiante [" << (id + 1) << "]: " << estudiante.notas.parciales[j] << endl;
    }

    cout << "Promedio del estudiante [" << (id + 1) << "]: " << estudiante.notas.promedio << endl;
    cout << "-------------------" << endl;
}
#14
Verán, estoy aprendiendo sobre sockets y hasta ahora todo bien. El problema es que sólo puedo manejar una conexión a la vez, ¿cómo podría manejar conexiones múltiples? Leí un tema que se logra a través de un Thread, pero estoy un poco confundido.

Estos son los códigos que llevo hasta ahora:

Servidor:
Código (cpp) [Seleccionar]

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <IPHlpApi.h>
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib, "Ws2_32.lib")

#define DEFAULT_PORT "27016"
#define DEFAULT_BUFLEN 516

int main() {
WSADATA wsaData;
int iResult;

char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
int recvBytes;

iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}

struct addrinfo *result = NULL,
hints;

ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;

iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
if (iResult != 0) {
printf("getaddrinfo error: %d\n", iResult);
WSACleanup();
return 1;
}

SOCKET ListenSocket = INVALID_SOCKET;

ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);

if (ListenSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
return 1;
}

iResult = bind(ListenSocket, result->ai_addr, result->ai_addrlen);
if (iResult == SOCKET_ERROR) {
printf("Error at bind: %d\n", iResult);
freeaddrinfo(result);
closesocket(ListenSocket);
WSACleanup();
return 1;
}

freeaddrinfo(result);

if (listen(ListenSocket, SOMAXCONN) == SOCKET_ERROR) {
printf("Listen failed with: %ld\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}

SOCKET ClientSocket = INVALID_SOCKET;

ClientSocket = accept(ListenSocket, NULL, NULL);
if (ClientSocket == INVALID_SOCKET) {
printf("accept failed with error: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}

printf("A CONNECTION HAS BEEN FOUND!!\n");

iResult = shutdown(ClientSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed with error: %d\n", iResult);
closesocket(ClientSocket);
WSACleanup();
return 1;
}

do {
recvBytes = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (recvBytes > 0) {
printf("Client >> ");
for (int i = 0; i < recvBytes; ++i) {
printf("%c", recvbuf[i]);
}
//printf("Bytes received: %d\n\n", recvBytes);
}
else if (recvBytes == 0) {
printf("Connection closing...\n");
}
else {
printf("recv failed: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
} while (recvBytes > 0);

closesocket(ClientSocket);
WSACleanup();

system("pause>nul");

return 0;
}


Cliente:
Código (cpp) [Seleccionar]

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <IPHlpApi.h>
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib, "Ws2_32.lib")

#define DEFAULT_PORT "27016"
#define DEFAULT_BUFLEN 516

int main() {
WSADATA wsaData;
int iResult;

char sendbuf[DEFAULT_BUFLEN];
int iSendResult;

iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}

struct addrinfo *result = NULL,
*ptr = NULL,
hints;

ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;

iResult = getaddrinfo("127.0.0.1", DEFAULT_PORT, &hints, &result);
if (iResult != 0) {
printf("getaddrinfo failed with error: %d/n", iResult);
WSACleanup();
return 1;
}

SOCKET ConnectSocket = INVALID_SOCKET;

ptr = result;

ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);

if (ConnectSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
return 1;
}

iResult = connect(ConnectSocket, ptr->ai_addr, ptr->ai_addrlen);
if (iResult == SOCKET_ERROR) {
closesocket(ConnectSocket);
ConnectSocket = INVALID_SOCKET;
}

freeaddrinfo(result);

if (ConnectSocket == INVALID_SOCKET) {
printf("Unable to connect to server!\n");
WSACleanup();
return 1;
}

do {
printf("Send a message to the server: ");
fgets(sendbuf, DEFAULT_BUFLEN, stdin);

iSendResult = send(ConnectSocket, sendbuf, (int)strlen(sendbuf), 0);
if (iSendResult == SOCKET_ERROR) {
printf("send failed: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
//printf("Bytes sent: %d\n\n", iSendResult);
} while (iSendResult > 0);

iResult = shutdown(ConnectSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed: %d\n", iResult);
closesocket(ConnectSocket);
WSACleanup();
return 1;
}

closesocket(ConnectSocket);
WSACleanup();

system("pause>nul");

return 0;
}


Estoy trabajando en Visual Studio Community 2015.
#15
Vean, estaba haciendo una especie de "juego", y a la hora de programar la rutina de las balas me ha surgido un problema, podemos disparar las veces que queramos y no pasará nada, pero en el momento cuando la última bala llega al tope, el programa deja de funcionar.

El error está (creo) en la liberación de la memoria dinámica, no sé qué estoy haciendo mal. Verán, esta es la parte:

Código (cpp) [Seleccionar]

       for(it = balas.begin(); it != balas.end(); ++it) {
           (*it)->borrar_bala((*it)->GetX(),(*it)->GetY());
           if(!(*it)->rng_fuera()) {
               (*it)->mod_pos_bala((*it)->GetY());
               (*it)->pintar_bala();
           }
           else {
               delete (*it);
               balas.erase(it);
           }
       }


La función rng_fuera() retorna un valor booleano, retorna true si la bala ha llegado al tope, es decir, cuando y = 0. Y false en caso contrario.

Entonces yo, como se muestra arriba, borro de la pantalla la posición actual de la bala, si ha llegado al tope, pues libero la memoria y borro ese elemento del vector, en caso contrario modifico la posición actual de la bala a la nueva posición y la pinto. Pero algo sucede y no puedo encontrar el error.

Si necesitan el código completo para entenderlo mejor, pídanmelo y lo publico en los comentarios. :)
#16
Programación C/C++ / [Ayuda] Librería dinámica.
14 Noviembre 2015, 13:34 PM
Bueno, iré al grano, me puse a crear una librería dinámica y para ser honesto no sé si estoy haciendo bien la importación/exportación.

Acá el código:

// main.h
Código (cpp) [Seleccionar]

#ifndef __MAIN_H__
#define __MAIN_H__


#ifndef DLL_MATH
   #define DLL_MATH __declspec(dllimport)
#else
   #define DLL_MATH __declspec(dllexport)
#endif

int DLL_MATH suma(int a, int b);
int DLL_MATH resta(int a, int b);
int DLL_MATH multip(int a, int b);

#endif //__MAIN_H__



// main.cpp
Código (cpp) [Seleccionar]

#include "main.h"

int DLL_MATH suma(int a, int b) {
   return (a + b);
}

int DLL_MATH resta(int a, int b) {
   return (a - b);
}

int DLL_MATH multip(int a, int b) {
   return (a*b);
}



Como verán es bastante simple, hasta ridículo. Si cambio el orden, es decir, de esta forma:

//main.h
Código (cpp) [Seleccionar]

#ifndef __MAIN_H__
#define __MAIN_H__


#ifndef DLL_MATH
   #define DLL_MATH __declspec(dllexport)
#else
   #define DLL_MATH __declspec(dllimport)
#endif

int DLL_MATH suma(int a, int b);
int DLL_MATH resta(int a, int b);
int DLL_MATH multip(int a, int b);

#endif //__MAIN_H__



Sí funciona, pero a lo mejor he captado mal de dónde he leído, ¿no se suponía que si la macro no estaba definida se debía importar en la DLL, y una vez definida, exportar hacia el programa con el cual la estemos corriendo? Corregidme acá, por favor. :)
#17
Verán, quiero empezar a programar sockets pero no tengo ni idea de qué hacer o cómo empezar. He buscado información en internet pero he encuentro código y más código ya hecho, y obviamente no entiendo nada. O sea, no explican línea por línea para qué sirve 'X' cosa o qué hace exactamente. Por eso vengo a pedirles si alguno tiene un libro o algo para empezar desde cero. Porque como dije, no tengo ni idea de cómo empezar.

Se los agradecería un montón. :)
#18
Verán, estoy haciendo un programa que lo que hace es que si escribes cierta cantidad en números, este los traslada a letras, por ejemplo: 16 - "dieciséis".

Por ahora sólo estoy con decenas, ya luego lo haré con números mayores, pero tengo un problema, hay valores que sí funcionan, y otros que no. Por ejemplo, 54, 88, 19, y otros con los que no funcionan. Por ejemplo, 18, 87, 84. Al escribir esos números (y otros varios) me manda a la condición incorrecta y escribe lo que no debería.

Las 2 líneas que están en comentario fueron de una prueba para asegurarme que le estaba pasando el parámetro correcto a la función, y ver qué valor tomaba la variable lAux, que efectivamente en algunos casos, toma el incorrecto, por ejemplo, a veces cuando le paso 7 me devuelve un "seis".

Acá les dejaré el código que llevo:

Código (cpp) [Seleccionar]

#include <iostream>
#include <string.h>

using namespace std;

string lNumero(int i);
void decimas(int num);

int main(void) {

    int num = 0;

    cout << "Escribe un numero: ";
        cin >> num;

    decimas(num);
    cout << endl;

    return 0;
}

void decimas(int num) {
    float aux = (float)num/10;
    num /= 10;
    aux = (aux - num) * 10;

    string lAux = lNumero(aux);
    //cout << lAux << endl;
    //cout << aux << endl;

    switch(num) {
    case 0:
        cout << lAux;
    break;
    case 1:
        switch((int)aux) {
            case 0: cout << "diez"; break;
            case 1: cout << "once"; break;
            case 2: cout << "doce"; break;
            case 3: cout << "trece"; break;
            case 4: cout << "catorce"; break;
            case 5: cout << "quince"; break;
            default: cout << "dieci" << lAux; break;
        }
    break;
    case 2:
        if (aux == 0) cout << "veinte";
        else cout << "veinti" << lAux;
    break;
    case 3:
        if (aux == 0) cout << "treinta";
        else cout << "treinta y " << lAux;
    break;
    case 4:
        if (aux == 0) cout << "cuarenta";
        else cout << "cuarenta y " << lAux;
    break;
    case 5:
        if (aux == 0) cout << "cincuenta";
        else cout << "cincuenta y " << lAux;
    break;
    case 6:
        if (aux == 0) cout << "sesenta";
        else cout << "sesenta y " << lAux;
    break;
    case 7:
        if (aux == 0) cout << "setenta";
        else cout << "setenta y " << lAux;
    break;
    case 8:
        if (aux == 0) cout << "ochenta";
        else cout << "ochenta y " << lAux;
    break;
    case 9:
        if (aux == 0) cout << "noventa";
        else cout << "noventa y " << lAux;
    break;
    }
}

string lNumero(int i) {
    switch(i) {
    case 1: return "uno";
    case 2: return "dos";
    case 3: return "tres";
    case 4: return "cuatro";
    case 5: return "cinco";
    case 6: return "seis";
    case 7: return "siete";
    case 8: return "ocho";
    case 9: return "nueve";
    }
    return "cero";
}

#19
Miren, intento hacer un programa que agarre el segundo argumento que se le pase desde la línea de comandos y luego este imprima un mensaje si es el correcto:
Algo por ejemplo así:

programa.exe argumento.

Luego dentro del programa se comparará si ese argumento es el que está dentro ya establecido o otro, de ser así imprimirá un mensaje en la pantalla.
Pero no sé qué estoy haciendo mal, este es el código que llevo:

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
    /*
    cout << "Cantidad de argumentos: " << argc << endl;

    for(int i = 0; i < argc; i++) {
        cout << argv[i] << endl;
    }*/

    //cout << argv[1] << endl;
    if(argv[1] == (char*)"123") {
        cout << "Argumento correcto." << endl;
    }

    cin.get();
    return 0;
}


Gracias de antemano. :D
#20
Me gustaría saber cómo podría hacer para evitar que los usuarios ingresaran valores que no corresponden al tipo de variable. Por ejemplo, supongamos que tengo un código bastante sencillo como este:

Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;

int main(void)
{
     int n;
     cin >> n;

     if(n > 10) cout << "Es mayor que 10" << endl;
     else cout << "Es menor a 10" << endl;

     cin.get();
     return 0;
}


Pero, ¿cómo podría hacer para prever una situación donde en lugar de un número introduzca un caracter o una cadena de caracteres y realizar otra acción?

Sé que es algo bastante simple y hasta ridículo, pero igual me gustaría saberlo.

Gracias de antemano. :) 
#21
Programación C/C++ / ¿Cómo detengo un Thread?
27 Diciembre 2014, 06:55 AM
Verán, quisiera saber cómo hago para detener la ejecución de un Thread mediante una condición. O sea que, si se cumple dicha condición detener la ejecución de ese Thread.

Tengo un código así:
Código (cpp) [Seleccionar]
#include <iostream>
#include <thread>
#include <Windows.h>

using namespace std;

void firstfor(int* x2)
{
for(int x = 0; x <= 9999; ++x)
{
*x2 = x;
Sleep(20);
}

cout << "\nThis for has finished!" << endl;
}

int main(void)
{
int x = 0;
int y = 1;

thread funcion1(firstfor, &x);

while(1)
{
cout << "Type either '1' or '0': "; cin >> y;

if (y == 0)
{

break;
}
else if(y == 1)
{
cout << "Currently the 'x' value is: " << x << endl;
Sleep(1000);
}

system("cls");
}

cin.get();
return 0;
}


Básicamente el programa te pide que ingreses ya sea el número 0 o 1 para ver qué valor tiene el valor de la variable 'x' actualmente, ya que dicha valor se está aumentado en un proceso diferente. Pero quiero saber cómo hacer para detener ese thread cuando el usuario ingrese el valor 0.
#22
Bueno, es un poco tonto preguntar esto, pero la verdad es que me puse a practicar con las funciones anónimas, y me da un error, tuve dudas así que me puse a practicar con este código simple y me dió el mismo error. ¿Alguien me puede decir qué estoy haciendo mal? Gracias de antemano. :)

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>

using namespace std;

int main(void)
{
    int x = 2;
   
    int (*funcion1)(int) = [x](int a)
    {
        return (a * x);
    };

    cout << funcion1(8) << endl;

    system("pause>null");
    return 0;
}
#23
Hola, bueno es que me he estado preguntando qué pasa exactamente al pasar un parámetro como este:
Código (cpp) [Seleccionar]

MB_ICONINFORMATION | MB_OK


Por ejemplo:
Código (cpp) [Seleccionar]

MessageBox( hwnd, (LPSTR) "Function Not Yet Implemented.",
                              (LPSTR) szClassName,
                              MB_ICONINFORMATION | MB_OK );


¿Qué sucede exactamente? No sé si me logré explicar con exactitud, pero es que he visto muchos códigos fuentes y algunos reciben ese tipo de parámetros; por ende, supe que será de utilidad saberlo con exactitud. Espero respuestas, saludos. :)
#24
Programación C/C++ / [Ayuda] Redondeo en C++
22 Julio 2014, 20:26 PM
Ya logré resolverlo, gracias. :)
Si un moderador ve este, por favor cierre el tema. n.n
#25
¡Hola! :)
Tengo un problema con un ejercicio que me encontré en la web y que pensé que no me daría problemas y empecé a escribir código, pero le subestimé. Haha Mi problema es el siguiente, tomar una cadena por teclado e invertirla y ponerla dentro de otro arreglo. Cuando inserto una cadena grande, el programa si la invierte muy bien; sin embargo, cuando coloco cadenas cortas el programa inserta además 'basura'.

Acá les dejaré el código fuente:
Código (cpp) [Seleccionar]

#include <iostream>
#include <cstdlib>

using namespace std;

int main() {
   char MString[40];
   char BString[40];
   int CVariable = 0;

   cout << "Enter a string: "; cin >> MString;
   for(int h = 0; h < 39; h++) {
       if(!(MString[h] == '\0'))
           CVariable += 1;
       else if(MString[h] == '\0')
           break;
   }

   for(int h = 1; h <= CVariable; ++h)
       BString[(h - 1)] = MString[CVariable - h];

   cout << "--------------------------------------------" << endl;
   cout << "The string has: " << CVariable << " letters." << endl;
   cout << "The original string: " << MString << endl;
   cout << "The backwards string is: " << BString << endl;
   cout << "--------------------------------------------" << endl;

   system("pause>nul");
   return 0;
}


Y el problema radica acá:
Código (cpp) [Seleccionar]

   for(int h = 1; h <= CVariable; ++h)
       BString[(h - 1)] = MString[CVariable - h];


¡Gracias de antemano! :)
#26
Hola, bueno es que quiero sacarme esta duda de la cabeza.

Obviamente China está por tirar por la borda a EE.UU en el poderío económico, pero aún si esto sucediese, ¿el Inglés continuará siendo la lengua más globalizada como segunda lengua?

Tengo entendido que históricamente todos los idiomas internacionales han sido reemplazados por uno más sencillo de aprender, por esta razón difícilmente un idioma más complicado que el inglés pueda gozar de ese privilegio.

Un idioma no se hace el más importante solo por su número de hablantes. El mandarín siempre ha sido más hablado que el inglés y probablemente el español sea el más hablado en 50 años. Sin embargo ninguno de estos idiomas son más fáciles de aprender que el inglés, ni tampoco los son el francés, alemán, italiano, ruso o japonés.

Por esta razón supongo que aunque China se convierta en la próxima potencia mundial, el idioma que continuará predominando será el Inglés. Pero no estoy seguro. ¿Qué piensan ustedes?
#27
Bueno es que quiero crear un programa que haga actualizaciones, literalmente un launcher. Pero no tengo ni idea de cómo empezar, una idea que me hice es que, al abrirse este revise cierta carpeta de otro ordenador y si hay archivos nuevos los descargue. Pero la verdad, no sé cómo hacer que el programa descargue esos archivos, tengo entendido que no es nada del otro mundo, pero, ¿alguien me echa su mano?

Gracias de antemano. ;)
#28
Bueno, lo que intento hacer podría decirse que es un "Launcher"; tratar de que mi programa hecho en C# llame a otro ejecutable y lo ejecute, pero no tengo ni mínima idea de cómo hacerlo. ¿Alguien me echa una mano? Una breve explicación bien resumida supongo que bastará. Saludos \o
#29
Programación C/C++ / Problema con un juego.
6 Diciembre 2013, 04:22 AM
Bueno estaba aburrido y me puse a programar un juego el cual no pensé que me llegaría a dar problemas por lo sencillo que sería, lastimosamente subestimé la cuestión xdd, bueno el caso es que, trato de hacer de que la bala al impactar con los bloques los bloques desaparezcan, así es, simplemente eso, es claramente una tontería, pero bueno acá les dejaré el código para que lo ojeen:

-- EDIT --
La bala cuando toca la matriz, parece que los bloques desaparecen pero en realidad no, la matriz continúa llena, y es porque a medida que avanza la bala; dónde estaba situada anteriormente programé para que pintara un espacio en blanco, pero en realidad el elemento de la matriz sigue ahí, en pocas palabras, jamás se limpia el buffer en ese programita.

Código (cpp) [Seleccionar]

#include <windows.h>
#include <conio.h>
#include <stdio.h>

void gotoxy(short int x, short int y);
void pintar_avion(char avion[3][6], int x, int y);
void borrar_avion(int x, int y);
inline void pintar_bala(char bala,int x, int y);
inline void borrar_bala(int x, int y);
void pintar_bloques(char bloques[10][41]);

int main()
{
   //Dibujo del avión:
   char avion[3][6] = {{' ',' ','*',' ',' ',0},
                       {' ','*','*','*',' ',0},
                       {'*','*','*','*','*',0}};


   char bloques[10][41];
   //Búcle que lo que hace es rellenar la matriz anterior; todos sus elementos le colocará el caractér '*':
   for(int f = 0; f < 10; f++) {
       for(int c = 0; c < 40; c++) {
           bloques[f][c] = '*';
       }
   }

   //Dibujo de la bala:
   char bala = char(2);

   //Coordenadas del avión:
   int cX = 38, cY = 20;

   //Variable que almacenará la tecla presionada por el usuario:
   char tecla = '\0';

   //Coordenadas de la bala:
   int bX = cX, bY = cY;

   //Variable que permitirá disparar una bala a la vez:
   bool disparo = false;

   pintar_avion(avion,cX,cY);
   pintar_bloques(bloques);

   while(1) {
       if(kbhit()) {
           tecla = getch();
       }

       if((tecla == 'a' || tecla == 'A') && cX > 0) {
           borrar_avion(cX, cY);
           cX -= 1;
           pintar_avion(avion,cX,cY);
       }
       else if((tecla == 'd' || tecla == 'D') && cX < 74) {
           borrar_avion(cX, cY);
           cX += 1;
           pintar_avion(avion,cX,cY);
       }
       else if((tecla == 'w' || tecla == 'W') && !disparo) {
           disparo = true;
           bY = (cY - 1);
           bX = (cX + 2);
       }

       if(disparo) {
           borrar_bala(bX, bY);
           bY -= 1;
           pintar_bala(bala,bX,bY);
           if(bY == 1) {
               borrar_bala(bX,bY);
               disparo = false;
               bY = cY;
           }
       }

       Sleep(20);

       tecla = '\0';
   }

   system("pause>nul");

   return 0;
}

void gotoxy(short int x, short int y) {
   HANDLE identificador;
   COORD coordenadas = {x , y};
   identificador = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleCursorPosition(identificador, coordenadas);
}

void pintar_avion(char avion[3][6], int x, int y) {
   for(int f = 0; f < 3; f++) {
       for(int c = 0; c < 5; c++) {
           gotoxy((x + c),(y + f));
           printf("%c",avion[f][c]);
       }
   }
}

void borrar_avion(int x, int y) {
   char borrar[6] = {' ',' ',' ',' ',' ',0};
   for(int h = 0; h < 3; h++) {
       gotoxy(x,(y + h));
       printf("%s",borrar);
   }
}

inline void pintar_bala(char bala,int x, int y) {
   gotoxy(x,y);
   printf("%c",bala);
}

inline void borrar_bala(int x, int y) {
   gotoxy(x,y);
   printf(" ");
}

void pintar_bloques(char bloques[10][41]) {
   for(int f = 0; f < 10; f++) {
       gotoxy(20,(1 + f));
       for(int c = 0; c < 40; c++) {
           printf("%c",bloques[f][c]);
       }
   }
}
#30
Hacking / [AYUDA] ¡Necesito entrar a un juego!
1 Diciembre 2013, 18:37 PM
Bueno, como dice el título, recientemente descargué un juego en que solamente pueden entrar jugadores Europeos, por ende, no puedo entrar. Quisiera saber algún programa que me sirva para cambiar mi dirección IP a una española.

Quiero hacer notar que el juego está instalado en mi ordenador, no entro a través de navegadores, por ende, necesito es un programa que me cambie dicha dirección para poder acceder al juego, espero haberme explicado. Saludos. \o
#31
Programación C/C++ / [Duda] Retorno de referencias.
30 Septiembre 2013, 18:11 PM
Hola bueno es que me puse a leer un tema sobre sobrecarga de operadores y me tope con una parte que decía "También podemos hacer retornos de referencias con flujos streams" me puse a buscar y encontré un ejemplo cómo este:
Código (cpp) [Seleccionar]

int& max (int a, int b) {
 if (a >= b) return a;
 return b;
}

Claro que esta es una función cualquiera que retorna una referencia a int.
Alguien podría explicarme cómo funciona el retorno por referencias y de que serviría? :)
#32
Bueno es que me dio por crear un programa que lo que hace es al presionar el boton el textbox tenga cierto texto, pero lo programe cómo práctica a una dll, la idea era programar la función del botón dentro de esa dll, pero al yo poner el código en esa dll, no me reconoce el textBox1.text espero haberme explicado, alguien me dice cómo se puede hacer eso?
#33
Bueno es que siempre he utilizado el método de molde: " int(example) ; " y pues recién acabo de ver un código así: " (int) example; " Y pues supuse que hacía lo mismo que el primero, hice la prueba y así fue:
Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

int main()
{
     //Entre:
     double a = 13.456;
     double b = (int) a;

     cout << b << endl;

     //Y esto:

     double c = 13.456;
     double d = int(c);

     cout << d << endl;

     system("pause>nul");

     return 0;
}


No hubo diferencia en ese simple ejemplo. Mi pregunta es: Hacen exactamente lo mismo? O existe alguna diferencia?
#34
.NET (C#, VB.NET, ASP) / [Pregunta] MessageBox.
18 Septiembre 2013, 06:52 AM
Hola, bueno es que tengo una duda, teniendo un programa tan sencillo cómo este:
Código (cs) [Seleccionar]

MessageBox.Show("Example","Example",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Exclamation);


Cómo hago para que el programa ejecute cierta acción en caso de que el usuario seleccione cierta opción? O sea porque en ese simple MessageBox se abren 3 opciones: "Sí", "No", y "Cancel". Cómo puedo saber que botón eligió el usuario para que mi programa ejecute cierta instrucción? Espero haber sido claro. :)
#35
Windows / ¿Ayuda con mi Windows 8 Pro?
14 Septiembre 2013, 05:39 AM
Ehm bueno esto no me pasaba antes, cada vez que abro la ventana para ver las propiedades de mi sistema, esta se queda pegada unos segundos y luego me cierra todas las carpetas que tengo abiertas.
Y antes me aparecia Windows está activado. junto con mi ID de productor, ahora solo me aparece algo cómo ID: Id no disponible, y no me sale lo de Windows está activado, tampoco me sale la Marca de Agua y utilice un comando de CMD y me dice que mi sistema está activado permanentemente wtf!? Use el activador de KJ, alguien puede decirme a que chucha se debe esto??
#36
Hola bueno, he estado programando un juego de Naves cómo el que programó un joven llamado David en uno de sus vídeos, solo que yo lo hice sin ver sus vídeos, ehm.. Hasta ahora voy bien (bueno no tanto), estoy programando la rutina de los asteroides pero los asteroides solo se mueven cuando muevo el avión de los contrario están quietos. Cómo puedo hacer para que se muevan mientras yo presione o no presione una tecla?

El avión se mueve con las teclas: 'W', 'A', 'S' y 'D'; También se mueve con las flechas del teclado.

Acá está lo que llevo:
Código (cpp) [Seleccionar]

#include <iostream>
#include <windows.h>
#include <conio.h>
#include <time.h>

using namespace std;

void gotoxy(int x, int y);
void pintar_avion();
void pintar_asteroides();

#define FLECHA_DERECHA      77
#define FLECHA_IZQUIERDA    75
#define FLECHA_ARRIBA       72
#define FLECHA_ABAJO        80

//Avión que se pintara cuando se desplace hacia la derecha
char avion_x1_1[5] = {'-',' ',' ',' ',0};
char avion_x1_2[5] = {'*','-',' ',' ',0};
char avion_x1_3[5] = {'*','*','-',' ',0};
char avion_x1_4[5] = {'*','*','*','*',0};
char avion_x1_5[5] = {'*','*','-',' ',0};
char avion_x1_6[5] = {'*','-',' ',' ',0};
char avion_x1_7[5] = {'-',' ',' ',' ',0};

//Avión que se pintara cuando se desplace hacia la izquierda
char avion_x2_1[5] = {' ',' ',' ','-',0};
char avion_x2_2[5] = {' ',' ','-','*',0};
char avion_x2_3[5] = {' ','-','*','*',0};
char avion_x2_4[5] = {'*','*','*','*',0};
char avion_x2_5[5] = {' ','-','*','*',0};
char avion_x2_6[5] = {' ',' ','-','*',0};
char avion_x2_7[5] = {' ',' ',' ','-',0};

//Avión que se pintara cuando se desplace hacia abajo
char avion_y1_1[8] = {'|','*','*','*','*','*','|',0};
char avion_y1_2[8] = {' ','|','*','*','*','|',' ',0};
char avion_y1_3[8] = {' ',' ','|','*','|',' ',' ',0};
char avion_y1_4[8] = {' ',' ',' ','*',' ',' ',' ',0};

//Avión que se pintara cuando se desplace hacia arriba
char avion_y2_1[8] = {' ',' ',' ','*',' ',' ',' ',0};
char avion_y2_2[8] = {' ',' ','|','*','|',' ',' ',0};
char avion_y2_3[8] = {' ','|','*','*','*','|',' ',0};
char avion_y2_4[8] = {'|','*','*','*','*','*','|',0};

//Coordenadas del avión
int cX = 37 , cY = 20;

//Coordenadas de los asteroides
int xA1 , yA1;
int xA2 , yA2;
int xA3 , yA3;
int xA4 , yA4;
int xA5 , yA5;

//Asteroide
char Asteroide = char(2);

//Variable que determinara el cambio de posición del avión
// 0 = Arriba
// 1 = Abajo
// 2 = Izquierda
// 3 = Derecha
typedef unsigned short int USINT;
USINT cPosition = 0;

int main()
{
    srand(time(NULL));

    xA1 = (rand() % 76);
    xA2 = (rand() % 76);
    xA3 = (rand() % 76);
    xA4 = (rand() % 76);
    xA5 = (rand() % 76);

    yA1 = (rand() % 19);
    yA2 = (rand() % 19);
    yA3 = (rand() % 19);
    yA4 = (rand() % 19);
    yA5 = (rand() % 19);

    pintar_asteroides();
    pintar_avion();
    char tecla = getch();

    do
    {
        yA1++;
        yA2++;
        yA3++;
        yA4++;
        yA5++;

        if(yA1 == 25)
        {
            yA1 = 0;
            xA1 = (rand() % 76);
        }
        if(yA2 == 25)
        {
            yA2 = 0;
            xA2 = (rand() % 76);
        }
        if(yA3 == 25)
        {
            yA3 = 0;
            xA3 = (rand() % 76);
        }
        if(yA4 == 25)
        {
            yA4 = 0;
            xA4 = (rand() % 76);
        }
        if(yA5 == 25)
        {
            yA5 = 0;
            xA5 = (rand() % 76);
        }

        if((tecla == 'a' || tecla == 'A' || tecla == FLECHA_IZQUIERDA) && cX > 2)
        {
           cX -= 2;
           cPosition = 2;
        }
        else if((tecla == 'w' || tecla == 'W' || tecla == FLECHA_ARRIBA) && cY > 0)
        {
            cY -= 2;
            cPosition = 0;
        }
        else if((tecla == 's' || tecla == 'S' || tecla == FLECHA_ABAJO) && cY < 22)
        {
            cY += 2;
            cPosition = 1;
        }
        else if((tecla == 'd' || tecla == 'D' || tecla == FLECHA_DERECHA) && cX < 72)
        {
            cX += 2;
            cPosition = 3;
        }

        system("cls");

        pintar_avion();
        pintar_asteroides();

        tecla = getch();

    }while(1);

    system("pause>nul");

    return 0;
}

void pintar_avion()
{
// 0 = Arriba
// 1 = Abajo
// 2 = Izquierda
// 3 = Derecha
    if(cPosition == 0)
    {
        gotoxy(cX,cY);
        cout << avion_y2_1 << endl;
        gotoxy(cX,(cY + 1));
        cout << avion_y2_2 << endl;
        gotoxy(cX , (cY + 2));
        cout << avion_y2_3 << endl;
        gotoxy(cX , (cY + 3));
        cout << avion_y2_4 << endl;
    }
    else if(cPosition == 1)
    {
        gotoxy(cX,cY);
        cout << avion_y1_1 << endl;
        gotoxy(cX,(cY + 1));
        cout << avion_y1_2 << endl;
        gotoxy(cX , (cY + 2));
        cout << avion_y1_3 << endl;
        gotoxy(cX , (cY + 3));
        cout << avion_y1_4 << endl;
    }
    else if(cPosition == 2)
    {
        gotoxy(cX,cY);
        cout << avion_x2_1 << endl;
        gotoxy(cX,(cY + 1));
        cout << avion_x2_2 << endl;
        gotoxy(cX , (cY + 2));
        cout << avion_x2_3 << endl;
        gotoxy(cX , (cY + 3));
        cout << avion_x2_4 << endl;
        gotoxy(cX , (cY + 4));
        cout << avion_x2_5 << endl;
        gotoxy(cX , (cY + 5));
        cout << avion_x2_6 << endl;
        gotoxy(cX , (cY + 6));
        cout << avion_x2_7 << endl;
        //gotoxy(cX , (cY + 7));
        //cout << avion_x2_7 << endl;
    }
    else if(cPosition == 3)
    {
        gotoxy(cX,cY);
        cout << avion_x1_1 << endl;
        gotoxy(cX,(cY + 1));
        cout << avion_x1_2 << endl;
        gotoxy(cX , (cY + 2));
        cout << avion_x1_3 << endl;
        gotoxy(cX , (cY + 3));
        cout << avion_x1_4 << endl;
        gotoxy(cX , (cY + 4));
        cout << avion_x1_5 << endl;
        gotoxy(cX , (cY + 5));
        cout << avion_x1_6 << endl;
        gotoxy(cX , (cY + 6));
        cout << avion_x1_7 << endl;
        //gotoxy(cX , (cY + 7));
        //cout << avion_x1_7 << endl;
    }
}

void gotoxy(int x, int y)
{
    HANDLE hCon;
    COORD dwPos;
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    dwPos.X = x;
    dwPos.Y = y;
    SetConsoleCursorPosition(hCon,dwPos);
}

void pintar_asteroides()
{
    gotoxy(xA1,yA1);
    cout << Asteroide;
    gotoxy(xA2,yA2);
    cout << Asteroide;
    gotoxy(xA3,yA3);
    cout << Asteroide;
    gotoxy(xA4,yA4);
    cout << Asteroide;
    gotoxy(xA5,yA5);
    cout << Asteroide;
}
#37
Hola bueno es qué estaba leyendo sobre "Manejo de Archivos en C++" y pues ya lo domino regularmente pero... quisiera saber cómo crear una carpeta con un fichero adentro, o sea crear la carpeta directamente desde C++, que la cree en caso de que no exista.
#38
Programación C/C++ / [Ayuda] Estructuras
21 Agosto 2013, 03:55 AM
Bueno quisiera saber cual seria la diferencia entre hacer/programar/construir una estructura de la siguiente y de la otra manera:

Código (cpp) [Seleccionar]

typedef struct miestructura
{
    int INT_example;
    float FL_example;
};

Esta es la manera más "común" (sin el typedef):
Código (cpp) [Seleccionar]

struct miestructura
{
    int INT_example;
    float FL_example;
};


Alguien me explica de que sirve el typedef como prefijo de las estructuras? Perdonen mi ignorancia. Una idea que me hice es que en C tienes hacer lo siguiente:
Código (cpp) [Seleccionar]

typedef struct miestructura miestructura;

Para poder crear objetos tal como se hace en C++, ya que si no se hace, los objetos se instancian de la siguiente manera:
Código (cpp) [Seleccionar]

struct miestructura objeto;


Supongo que es para evitar eso... pero no estoy seguro alguien me echa una mano?  :D
#39
O sea yo siempre he programado colocando siempre el main de tipo 'int' y obviamente retornando, pero o sea yo tengo claro (hasta los momentos) que el main siempre sera 'int' (al menos todos lo ejemplos que he visto y los programas que he creado ha sido de esa manera): Pero ahora si mi pregunta, ¿Qué hace el sistema operativo con el valor que retorna el main? ¿Nada? ¿Nada de nada? >_< xDD Ya se que los programadores utilizan diferentes valores para identificar errores e utilizan el '0' para indicar que el programa finalizo completo como se debía y sin ningún error.

Espero haberme aclarado.

Otra cosa perdonen por ser tan preguntón, pero como dicen, las dudas llevan al conocimiento profundo y preciso. (y) xDDD
#40
Programación C/C++ / [Ayuda] Simple juego.
22 Julio 2013, 20:09 PM
Bueno es que estaba aburrido y me puse a programar un juego muy sencillo que trata sobre meter un numero entre el 1 y el 15 y tú compañero tiene que adivinarlo. Pero lo que quiero hacer es que no se puedan ingresar letras solo números acá esta el código:

Código (cpp) [Seleccionar]

#include <iomanip>
#include <cstdlib>
#include <windows.h>
#include <iostream>

using namespace std;

bool Ingreso_Numero(int* pNumero);
bool Adivina_Numero(int* pNumero);

int main()
{
  int numero;

  if(Ingreso_Numero(&numero))
   {
       system("cls");
       system("color 2");
       cout << "________________________________________________________________________________" << endl;
       cout << setw(60) << "*** Felicidades has ganado el juego! ***\n" << endl;
       cout << setw(50) << "|| El numero correcto es: " << numero << " ||\n" << endl;
       cout << setw(53) << "*** Gracias Por Jugar! ***" << endl;
       cout << "________________________________________________________________________________" << endl;
   }

   else
   {
       cout << endl;
       system("color 4");
       cout << "----------------------------------------------------------" << endl;
       cout << "Has perdido! \nEl numero correcto era: " << numero << endl;
       cout << "Trata nuevamente en la proxima..." << endl;
       cout << "-----------------------------------------------------------" << endl;
   }

   system("pause>nul");

   return 0;
}

bool Ingreso_Numero(int* pNumero)
{
   char Decision;

   Introduce_Numero:

   cout << "Introduce el numero para que adivine tu rival (1-15): ";
   cin >> *pNumero;

   Repeticion2:

   if(*pNumero > 15)
   {
       cout << endl;

       cout << "El numero ingresado es demasiado alto. " << endl;

       Introduce_Numero_Alto:

       cout << endl;

       cout << "Introduce el numero para que adivine tu rival (1-15): ";
       cin >> *pNumero;

       if(*pNumero > 15)
       {
           cout << endl;
           cout << "El numero ingresado es demasiado alto. " << endl;
           goto Introduce_Numero_Alto;
       }
   }

   if(*pNumero < 1)
   {
       cout << endl;
       cout << "El numero ingresado es demasiado bajo." << endl;

       Introduce_Numero_Bajo:

       cout << endl;

       cout << "Introduce el numero para que adivine tu rival (1-15): ";
       cin >> *pNumero;

       if(*pNumero < 1)
       {
           cout << endl;
           cout << "El numero ingresado es demasiado bajo. " << endl;
           goto Introduce_Numero_Bajo;
       }

       if(*pNumero > 15)
       {
           goto Repeticion2;
       }
   }

   if(*pNumero >= 1 && *pNumero <= 15)
   {
       Decision_Error:

       cout << endl;

       cout << "Estas seguro que deseas que tu rival adivine este numero S/N: ";
       cin >> Decision;

       if(Decision == 'N' || Decision == 'n')
       {
           cout << endl;
           goto Introduce_Numero;
       }

       else if((Decision != 'S' && Decision != 's') && (Decision != 'N' && Decision != 'n'))
       {
           cout << endl;
           cout << "Has introducido una decision erronea, intentalo nuevamente." << endl;
           cout << endl;
           goto Decision_Error;
       }

       else if(Decision == 'S' || Decision == 's')
       {
           cout << endl;
           system("cls");

           for(int x = 5 ; x > 0 ; x--)
           {
               cout << "El juego comenzara en: " << x << endl;
               Sleep(1000);
               system("cls");
           }
           return Adivina_Numero(pNumero);
       }
   }
}

bool Adivina_Numero(int* pNumero)
{
   int Contador_Vidas;
   int COMP_Numero;

   cout << "Tienes 5 intentos para adivinar el numero." << endl << endl;

   for(Contador_Vidas = 5 ; Contador_Vidas > 0 ; Contador_Vidas--)
   {
       cout << endl;

       repeticion:

       if(Contador_Vidas == 1)
       {
           cout << endl;

           cout << "Te queda: " << Contador_Vidas << " vida." << endl;
           cout << "Ingresa un numero: "; cin >> COMP_Numero;

           if(COMP_Numero <= 0 || COMP_Numero > 15)
           {
               if(COMP_Numero <= 0)
               {
                   cout << endl;

                   cout << "El numero ingresado es demasiado bajo."<< endl;

                   goto repeticion;
               }

               else if(COMP_Numero > 15)
               {
                   cout << endl;

                   cout << "El numero ingresado es demasiado alto.";

                   goto repeticion;
               }
           }
       }

       else
       {
           cout << endl;

           cout << "Te quedan: " << Contador_Vidas << " vidas." << endl;
           cout << "Ingresa un numero: "; cin >> COMP_Numero;

           if(COMP_Numero <= 0 || COMP_Numero > 15)
           {
               if(COMP_Numero <= 0)
               {
                   cout << endl;
                   cout << "El numero ingresado es demasiado bajo.";
                   cout << endl;

                   goto repeticion;
               }

               else if(COMP_Numero > 15)
               {
                   cout << endl;
                   cout << "El numero ingresado es demasiado alto.";
                   cout << endl;

                   goto repeticion;
               }
           }
       }

       if(COMP_Numero == *pNumero)
       {
           return true;
       }

       else
       {
           continue;
       }
   }

   return false;
}
#41
Fui a recurrir a Wikipedia pero estaba en ingles y el traductor de google no ayudo mucho, trate de darle algo de lógica pero no me conformo con lo qué logre captar. Así qué alguien me explica claramente qué es exactamente un Packet y para qué sirve?
#42
Bueno al empezar a codear un objeto o la forma o x cosa siempre te colocan 2 variables por default qué son 'e' y 'sender'. Pero la verdad no sé para qué son, alguien me explica?

1 - ¿Qué son exactamente?
2 - ¿De qué servirían?

Saludos.
#43
Programación C/C++ / [Duda] Funciones
11 Julio 2013, 04:56 AM
Bueno es qué me puse a trabajar con un source enorme de un mmorpg para tratar de desarrollar conocimiento sobre este lenguaje pero a medida qué lo veia me encontre con estos 2 condicionales:

Código (cpp) [Seleccionar]

if( !GetLocatorDBMgr()->GetBlockCountryCodeList(bcl) )
{
DeleteCountryFilter();
mlog( "Fail to Init BlockCountryCode.\n" );
return false;
}

if( !GetLocatorDBMgr()->GetCustomIPList(cil) )
{
DeleteCountryFilter();
mlog( "Fail to Init CustomIPList.\n" );
return false;
}


Como pueden notar en las lineas:
Código (cpp) [Seleccionar]

if( !GetLocatorDBMgr()->GetBlockCountryCodeList(bcl) )
if( !GetLocatorDBMgr()->GetCustomIPList(cil) )

/*
El GetLocatorDBMgr() asumo qué por tener paréntesis en una función pero porqué una función tiene el operador de indirección de punteros (->) ? Alguien me explica esto?
*/

#44
Hola bueno me puse a leer temas sobre funciones y dierón una explicación sin ejemplo solo una simple linea de explicación la cual decia qué una función de este tipo cuyos parametros sean elipsis esta función puede o no recibir parametros "infinitos".

Código (cpp) [Seleccionar]


#include <stdio.h>

int ejemplo_elhacker(...);

int main(void)
{
    int prueba = 15;

    ejemplo_elhacker(prueba);
    return 0;
}

int ejemplo_elhacker(...)
{
    /*
     Como yo hago para trabajar esa variable qué le pase dentro de esta función?
    */
}
#45
Bueno quisiera saber porqué en el Code::Blocks que estoy utilizando no aparecen las casillas "Debug" y "Release" para palomear al crear un nuevo file. Alguien sabe a que se debe?