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

#461
Podrías tener una lista enlazada o un árbol.

En el caso de la lista, las estructuras van todas en orden, una detrás de otra... luego para añadir un elemento en su posición concreta es tan sencillo como recorrer la lista hasta encontrar su posición e insertar ahí el elemento.


// Ejemplo de una estructura preparada para gestionar listas enlazadas
struct nodo
{
  int valor;
  struct nodo* siguiente; // puntero al siguiente elemento de la lista, null si es el ultimo.
};


En el caso de los árboles, la estructura lógica se complica ligeramente. Cada nodo tiene dos punteros, uno en el que se encuentran los nodos más pequeños y otro para los nodos más grandes.

Si no hace falta balancear el árbol, el proceso para rellenar el árbol es bastante sencillo.


// Ejemplo de una estructura preparada para ser utilizada en arboles
struct nodo
{
  int valor;
  struct nodo* izquierdo; // puntero a nodos de menor valor
  struct nodo* derecho; // puntero a nodos de mayor valor
};


Cada una de estas dos opciones tiene su teoría y sus trucos por detrás, echa un vistazo por internet y verás que información no te va a faltar. Si te escribiese aquí todo lo relacionado sobre el tema más de uno acababa dormido :)

Un saludo.

#462
deberías repensar un poco el algoritmo.

Las constantes deberían ir en mayúsculas, ayuda a identificarlas dentro del código... sobretodo si le das nombres tan "currados" como "n".

Por otro lado, el parámetro "int *q" no es necesario para tu código. Puedes conseguir el mismo efecto haciendo que la función "mover" devuelva un entero para indicar si se ha encontrado una solución o no.

Luego, fíjate que tienes la línea

Código (cpp) [Seleccionar]
if (*q) matriz1[u][v] = 0; /* borra el candidato */

Es decir, si hay solución, entonces te cargas la solución encontrada?? ¿No debería ser al reves?

Aplicando los cambios a mí me funciona:



        Estos son los valores de la matriz

                 MATRIZ ORDENADA
     1     8    11    16     3    18    13    64
    10    27     2     7    12    15     4    19
    53    24     9    28    17     6    63    14
    26    39    52    23    62    29    20     5
    43    54    25    38    51    22    33    30
    40    57    42    61    32    35    48    21
    55    44    59    50    37    46    31    34
    58    41    56    45    60    49    36    47
#463
Cita de: do-while en 12 Mayo 2014, 19:06 PM
Todo depende del uso que vayas a darle a la función.

Cierto, pero los casos como estos no son precisamente comunes. Alguien que programe aplicaciones de escritorio por ejemplo puede no encontrarse nunca con este problema.

En cualquier caso, tal y como se ha comentado, la función tiene 200 líneas... la sobrecarga que puede suponer la llamada a la función con respecto al tiempo de ejecución de la función es despreciable
#464
Programación C/C++ / Re: Grafos C++
13 Mayo 2014, 08:57 AM
¿Implementar? A nivel lógico, gráfico o ambos?

Cada nodo en un grafo no es sino una estructura ( o clase si estás en C++), y las relaciones entre los diferentes nodos se implementan mediante punteros, que conectan los nodos entre sí.

#465
Citar¿Qué regla es la que se esta violando segun tú?

¿No se hacen tareas quizás?

CitarAdemás a nadie le importa si un usuario con XXXXX mensajes viene a pedir ayuda y no tiene aportaciónes, si alguien desea ayudarle lo hará o no.

Cada uno es libre de hacer lo que le plazca, eso me incluye a mí con mis opiniones...

Lo lógico, para mí al menos, es que para participar en cualquier comunidad, ya sea foro, reunión de cualquier índole (rol, cine, etc), quedada, ... molestarse en conocer las normas que lo supervisan. Esto es por respeto a los que están en dicha comunidad.

No creo que la gente nueva que suela escribir aquí tenga 10 años, es gente que está aprendiendo a programar y de media creo que la mayoría son mayores de edad... en cualquier caso todos saben leer y escribir... leerse las normas no está de más, y lo vuelvo a decir, es simplemente por respeto.

Pero es que no es solo por respeto. Hay que motivar a la gente para que aprenda a buscarse la vida... y dando los ejercicios resueltos de primeras no es la mejor opción. Perfectamente podría responder a la inmensa mayoría de las preguntas de este foro... pero no creo que se trate de demostrar todo lo que se, eso ya tuve que hacerlo en la universidad y lo tengo que hacer en mi trabajo todos los días... no tengo necesidad de demostrarlo aquí también. Aquí lo que pretendo es aportar mi granito de arena para que los que vienen aprendan a desenvolverse en este mundo.

Mi forma de actuar te puede parecer bien o mal. Si te parece bien, estupendo. Si te parece mal... que le vamos a hacer, yo no te juzgo a ti y espero que al menos tu hagas lo mismo. Si no te gusta la respuesta que doy, pon tu aporte y haz las cosas a tu manera, pero no me juzgues... o por lo menos no lo hagas de forma pública en el foro, no creo que sea ni el sitio ni las formas adecuadas.

CitarY eferion, deja de de escribir a todos los nuevos usuario que
no se hacen tareas,etc muchos no son tareas,etc.

Pues mira, he estado revisando el historial de mis mensajes para buscar este supuesto acoso por mi parte hacia los usuarios...  en las primeras 5 páginas (70 mensajes) solo hay 2 referencias al hecho de que no se hacen tareas... este mensaje y el que comento a continuación:

CitarHola, tengo un programa de conversión de base numérica para cualquier base con un rango de 1 byte, el programa funciona correctamente, mi asunto es que esta programada en C++ y lo necesito en C, podría alguien ayudarme a  pasarlo? o decirme como funcionan las funciones que aparecen?

No he seguido retrocediendo porque no creo que aumente la proporción de citas.

¿Y por qué les cito la norma? Porque así al menos saben el motivo que tiene la gente para no responder.

¿Que te parece correcto? estupendo ¿que no? dímelo por privado y limamos asperezas... pero no en público... por esa vía si que no pienso ceder ni un ápice.

CitarY no, no se necesita 'el handle de la aplicación'

HINSTANCE no es un handle??

Código (cpp) [Seleccionar]

int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nCmdShow)
{
  HHOOK mouseHook = SetWindowsHookEx(WH_MOUSE_LL,mouseHookProc,hInstance,NULL);

 // ...
  return 0;

}

#466
Un procesador ya viejo digamos que un pentium III es capaz de ejecutar 2 millones de instrucciones por segundo.

Una llamada a una instrucción puede suponer, digamos 20 instrucciones ( con paso de parámetros )... es decir, una llamada supone 0.01 ms... tu crees que es necesario optimizar eso?

Obviamente en procesadores más modernos ese tiempo será aún menor.
#467
Citar
Código (cpp) [Seleccionar]
//faltaban << y el resutado de la variable c no puede ir << c SINO ASI <<c

¿¿¿????

remarco la parte que no entiendo: "c no puede ir << c SINO ASI <<c"

Esa afirmación es totalmente incorrecta.

Veamos, esta es la declaración del operador de inserción

Código (cpp) [Seleccionar]
ostream& operator<< (int val);

Yo ahí no veo dónde dice que no puede haber separación entre el operador y la variable, es más, podría incluso poner la variable en la siguiente línea y seguiría funcionando:

Código (cpp) [Seleccionar]

int c = 4;
cout << c <<      c <<
         c;


Salida:

444
#468
No se hacen tareas, aunque leyendo tu mensaje entiendo que ya tienes código hecho... ¿Cuál es ese código?

Si pones tu código y demuestras que, al menos, lo has intentado, es bastante posible que te echemos una mano.
#469
Llevas 11 mensajes en este foro... aún no te has leído las reglas???

CitarNo se hacen tareas

Empieza a pegarte con el código y luego expón tus dudas.

No creo que nadie te responda si no haces ningún aporte.

Lo único que te puedo decir así de primeras es que te mires las llamadas a la API de windows... necesitarás el handle de la aplicación para poder capturar los mensajes.
#470
C++ es un lenguaje orientado a objetos. Esto quiere decir que C++ permite la creación y uso de objetos para modelar y encapsular las diferentes funcionalidades de una aplicación.

Uno de estos objetos es la clase "string". La clase "string", simplificando, contiene internamente un puntero tipo char y un entero... algo así (escrito en C):

Código (cpp) [Seleccionar]

typedef struct
{
 char* puntero;
 int longitud;
}


Alrededor de este diseño, la clase "string" implementa una serie de funciones que facilitan enormemente el uso de cadenas de caracteres en una aplicación:

* Implementado el operador copia: hace innecesario el uso de la función strcpy

Código (cpp) [Seleccionar]

std::string cad1 = "abcd";
std::string cad2;

// En vez de strcpy( cad1, cad2 );
cad1 = cad2;


* Soporta iteradores: facilita su manipulación en bucles

* Gestiona memoria dinámica de forma interna: evita lagunas de memoria, buffer overflow, ...

* Implementa operaciones de búsqueda.

* Implementa operador comparación: permite comparar strings de forma más natural que C.

Código (cpp) [Seleccionar]

// En C++
if ( cad1 == cad 2 )

// En C
if ( strcmp( cad1, cad2 ) == 0 )


* Operadores de inserción: Permite componer cadenas de forma simple:

Código (cpp) [Seleccionar]

std::string cad;

cad << "Hola" << " " << "mundo";


Todas estas operaciones tienen su símil en un array de tipo char... pero hay que tener más cuidado al manipular un puntero a tipo char y, claro, no es lo mismo usar operadores que usar funciones.

Bueno, hasta aquí el comentario para desgranar un poco las diferencias entre la clase string y las cadenas tipo "char".

Las clases en C++, a diferencia de los tipos nativos ( int, char, char*, ... ), tienen un archivo de cabecera y una implementación. Para poder usar una clase necesitas, por tanto, incluir su archivo de cabecera en tu código. De otra forma el compilador no sabe cómo utilizar esa clase ( no conoce el tamaño que ocupa, necesario para hacer reservas en la pila, no conoce el formato ni la ubicación de las funciones, ... )

En el caso de la clase "string", tal y como te indicó noele1995, se encuentra en

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

Nota que los includes de la librería estándar de C++ no tienen ".h", es una diferencia básica entre C y C++.