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 - eferion

#321
Cita de: leosansan en 10 Julio 2014, 10:14 AM
Usa un:

Código (cpp) [Seleccionar]
for(i=0;i<strlen(cad);i++)
    printf("%d  ",cad[i]);


para que veas con qué int se corresponden la ñ y la á y ya tá.

Si por ejemplo fuese UTF-8... la codificación de la 'ñ' y la 'á' ocuparían más de un byte.
#322
Nota inicial: El código, mejor si lo pones con las etiquetas GeSHi. Gracias.

No existe una única conversión "número<->carácter", sino que hay muchas. Algunas tablas de conversión son ASCII, UTF-8, UTF-16, las diferentes tablas ANSI...

Esta heterogeneidad explica que en algunas páginas Web o correos electrónicos, a veces aparezcan caracteres raros sustituyendo caracteres acentuados o propios de un lenguaje concreto.

En tu caso, lo que puede suceder es que tu programa no esté usando la codificación ASCII. Puede que esté usando, por ejemplo, UTF-8, con lo que la codificación de la 'á' y la 'ñ' serán diferentes.
#323
Programación C/C++ / Re: Temporizadores
9 Julio 2014, 08:33 AM
¿Es un entorno de consola? ¿aplicación de escritorio? ¿usas alguna librería para la interfaz de usuario?

Tu pregunta, así planteada, es demasiado escueta.
#324
Cita de: Gh057 en  8 Julio 2014, 12:25 PM
hola gibranini , por favor fíjate en los errores de compilación; solo a simple vista se observa que no llamas a la misma función que tienes definida... saludos

A mi me da la sensación de que el segundo código intenta ser una versión del primero pero encapsulado en una clase...

gibranini... cuando has puesto:

Código (cpp) [Seleccionar]
j=contador;//Es un contador variable, lleva el registro del numero de datos ingresados

¿En qué estabas pensando?... si se supone que i y j son los límites de la búsqueda no viene a cuento modificar 'j' con un valor que te estás sacando de la manga.
#325
Nota inicial: Usa las etiquetas GeSHi para poner el código, gracias.

Código (cpp) [Seleccionar]

void mostrar(void){
        for(int i=0;i<N;i++)cout<<V<<"";
        cout<<endl;
        return;
    }


¿Pretendes imprimir "N" veces el vector "V"? me da la sensación de que te falta indicar el elemento a mostrar en cada iteración del for:

Código (cpp) [Seleccionar]

void mostrar(void){
        for(int i=0;i<N;i++)cout<<V[i]<<"";
        cout<<endl;
        return;
    }


PD.: por qué no usas la clase "vector" en vez de un arreglo? ¿si es por practicar o por exigencias del ejercicio vale, en caso contrario no merece la pena complicarse la vida.

Código (cpp) [Seleccionar]

#include <algorithm>
#include <vector>

class Clase
{
private:
  std::vector< int > elementos; // V no me dice absolutamente nada, mejor nombres descriptivos

public:
  Clase(int numElementos // n tampoco me dice nada)
  {
    for ( int i = 0; i < numElementos; ++i )
    {
      // has inicializado el generador de numeros aleatorios en algun sitio?
      elementos.push_back( rand( ) % 51 );
    }

    // return; <<-- No es necesario
  }

  ~Clase()
  {
    // delete[]V; <<-- Con la clase vector, esto ahora sobra
    // return; <<-- No es necesario
  }

  // En C++ no es necesario poner "void" cuando una funcion no tiene argumentos
  void mostrar( )
  {
    for_each( elementos.begin( ), elementos.end( ), [](int elemento){ cout<< elemento <<" "; } );
    cout<<endl;
    // return; <<-- No es necesario
  }

  // Es mejor que este operador devuelva una referencia, si no obligas a hacer una copia
  // adicional del objeto, con el coste en tiempo y recursos que conlleva.
  // Y lo mismo para el argumento de la funcion, es mejor pasar los "objetos" por referencia
  // que por valor.
  // El coste en este caso es muy bajo... pero es mejor adquirir buenas practicas desde el comienzo
  const Clase& operator=( const Clase& m )
  {
    elementos = m.elementos; // Y ya esta, no necesitamos nada mas
    return(*this);
  }
};


Por cierto, deberías revisar los comentarios que he puesto en el código.
#326
Cita de: jmrivas en  7 Julio 2014, 16:31 PM
¿No es correcto poner el & en el encabezado para ese parámetro?

No hace falta hacer cosas raras para programar. El código limpio y sencillo es mucho más sencillo de mantener que uno con "ideas felices". O usas punteros o usas referencias, pero artilugios raros como punteros a referencias o referencias a punteros pueden darte más de un disgusto. Además no parece una solución demasiado limpia.

Por otro lado... se supone que la idea es mover los elementos de una lista a otra??? ¿copiarlos tal vez?


#327
Generalizando, cualquier función que uses en C++ (sea tuya propia o de terceros ), se compone de dos partes:


  • Cabecera: es la declaración de la clase, se suele encontrar en los archivos de cabecera (*.h)
  • Implementación: la chicha de la función, es la parte que tiene el código fuente, se encuentra en ficheros de código (*.c)

Cuando quieres incluir una función en tu código necesitas ambas partes para que el invento funcione.

Cuando tu compilas una DLL se generan dos archivos:


  • La librería (*.dll), incluye el código de la librería debidamente compilado.
  • Archivo con la interfaz de la librería (*.a, *.lib). Este archivo te lo va a requerir la aplicación que vaya a usar tu librería para poder "enlazar" correctamente con las funciones contenidas en la dll

El error que te está dando el compilador es que, como no le estás indicando dónde se encuentra el archivo con la interfaz de la librería y, en consecuencia, no es capaz de encontrar los puntos de entrada a las funciones contenidas en tu dll.

Solución: modifica tu proyecto para incluir el archivo de la interfaz en el proceso de linkado.
#328
Nota incial: Usa las etiquetas GeSHi para poner código fuente en tus mensajes.

Dicho esto, vamos al grano.

Código (cpp) [Seleccionar]

void TOBA(nodo*& l1, nodo*& l2)
{
  nodo* x;

  if(l1 != NULL)
  {
    // ...
  }
  else
  {
    // ...
  }
}


l1 o es puntero (usas el asterisco) o es una referencia (usas el amdpersand)... pero no mezcles los dos en la misma sentencia... Si necesitas modificar la posición de memoria a la que apuntan los punteros, usa punteros dobles. No hagas inventos raros si no estás totalmente seguro de lo que estás haciendo.

Además, la lógica de esa función es un poco extraña... ¿Qué se supone que estás intentando hacer? Llamar a TOBA de forma recursiva va a hacer que ejecutes el código:

Código (cpp) [Seleccionar]

x = l1;
l1 = l1->sig;
x ->sig = l2;
l2 = x;


un número indeterminado de veces... además, el nombre que tiene esa función no aporta absolutamente nada de información que permita "descifrar" o "comprender" mínimamente tus intenciones.

Hay que tener mucho cuidado a la hora de programar funciones recursivas... los resultados pueden ser catastróficos en caso contrario.
#329
Cita de: nolasco281 en  4 Julio 2014, 00:18 AM
Genial muchas gracias por los ejemplos solo tengo una pregunta:

En que parte de los ejemplos se utilizan estas librerias y para que? muchas gracias por compartir y suga aumentadolo si queda tiempo

Código (cpp) [Seleccionar]

#include <algorithm>
#include <utility>


PD:Ya investique que son pero tal vez me puede dar  un concepto mas general de como las uso.

Saludos y gracias.

algorithm tiene una colección de clases y funciones para trabajar con rangos de datos ( vectores, matrices, arreglos, ... ).

utility permite, por ejemplo trabajar con el template "pair". En un principio se podría decir que "utility" sirve de saco para aquellas utilidades que no han sabido ubicar en una librería más apropiada.
#330
Programación C/C++ / Re: principiante
2 Julio 2014, 13:31 PM
Cita de: leosansan en  2 Julio 2014, 13:21 PM


,,,
. .
|
\-/



La declaración de fichero y cadena han de ir antes de los case porque si los metess en el case te cantará error:

¡¡¡¡ Saluditos! ..... !!!!






Si encierras el contenido del case con llaves el error debería desaparecer.