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

#101
Cita de: biribau en  3 Mayo 2010, 22:02 PM
No entiendo lo que haces, pero un error que canta a la vista es la condición del while, no estas mirando que se crucen los punteros, tienes que quitar para eso los asteriscos, o sea *(p++) != *(q--) por p++ != q--
Luego si pretendes ordenar, no sé, ordenar un vector requiere un análisis matemático para desarrollar un algoritmo nuevo. Simplemente lo digo porque ese método no funcionará, o imitas burbuja(requieres otro while anidado) o quicksort, no se que intentas, es parecido a ambos, pero no es ninguno. Ya de paso que sepas que casi fijo necesitarás 2 bucles anidados, porque toda ordenación genérica no puede bajar de O(nlog2n), o sea un bucle y algo más.

Bien, cambié lo que me dijistes, pero me peta en tiempo de ejecución, supongo que algun indice fuera de lugar, tenía pensado el método burbuja pero el enunciado dice simultáneamente desde los dos extremos, voy a mirar que puede ser y mañana os cuento. Salu2
#102
Buenas, estoy intentando, mediante punteros, ordenar los enteros de un array por orden ascendente yendo simultáneamente por los dos extremos del array, algo así:

4 5 1 2 7 8 5 4 3 6

Comparo 4, 5 y 3 y 6.

4 5 1 2 7 8 5 4 3 6

Comparo 5,1 y 4,3

4 1 5 2 7 8 5 3 4 6

etc.

El caso esque creo que me estoy haciendo un lío enorme y creo no estar planteando bien el ejercicio, llevo hecho esto:

Código (cpp) [Seleccionar]

/* PROBLEMA ->
Implementar en una función el siguiente algoritmo para ordenar un array de enteros.
La idea es recorrer simultáneamente el array desde el principio y desde el final, comparando los elementos. Si los valores comparados no están en el orden adecuado, se intercambian y se vuelve a empezar el bucle. Si están bien ordenados, se compara el siguiente par.
El proceso termina cuando los punteros se cruzan, ya que eso indica que hemos comparado la primera mitad con la segunda y todos los elementos estaban en el orden correcto.
Usar una función con tres parámetros:
void Ordenar(int* vector, int nElementos, bool ascendente);
De nuevo, no se deben usar enteros, sólo punteros y aritmética de punteros. */
#include <iostream>
using namespace std;
//Ej. 4 3 7 8 4 1 0 12 13 5
void Ordenar(int*, int, bool);
void leerarray(int*,int);
int main()
{
   int array[]={4,3,7,8,4,1,0,12,13,5};
   Ordenar(array,10,true);
   leerarray(array,10);
   cin.get(); cin.get();
}
void Ordenar(int *vector,int nElementos, bool ascendente)
{
   int *a, *b;
   a=&vector[0]; b=&vector[nElementos-1];
   while (*(a++) != *(b--))
   {
       int temp;
       if (*(a-1)>*a) { temp=*(a-1); *(a-1)=*a; *a=temp; }
       if (*(b+1)<*b) { temp=*(b+1); *(b+1)=*b; *b=temp; }
   }
}


Alguna idea sobre donde estoy metiendo la pata? Porque de verdad, tantos asteriscos y demás me atormentan.

PD: Aún no he realizado lo de modo ascendente.

Salu2 y gracias =D
#103
[pelotudo]
Cita de: un caradura como tuHOLA WENOZ DIAZ TENGO K AZER MI TAREA K ME PUZO EL PROFEZOR XRO ME DAAH PALO PORQUE TENGO OTRAZ COZAZ K AZER Y OZ LO MANDO DE DEBEREZ A VOZOTROZ  Y IO ME LLEVO EL MERITO
[/pelotudo]

Moderador en camino...!

Aquí no hacemos tareas ¬¬

Cita de: Leo Gutiérrez. en  3 Mayo 2010, 20:49 PM
¿Qué es atuda?

Cita de: Diccionario Vago-Civilizadoatuda f -> del griego atudus -> Sustantivo referido a irresponsabilidad y pereza, se suele escribir cuando el sujeto es muy caprichoso y tiene tanta prisa que no mira ni las faltas ortográficas básicas con las que plantea el texto.
#104
Me estoy descargando la ultima version antes de que quiten la descarga el 7 de mayo, va a 24bytes/s WTF...
#105
Programación General / Re: VB.NET o C ?
3 Mayo 2010, 00:23 AM
Pues yo empece con vb.net y manipular las cosas era fácil, pero quería programar a menor nivel de soft y sin tener que depender del framework, así que escogí C++

Perdona que te pregunte unas cosas que no vienen a cuento pero que relaciono con tu pregunta.

¿Vives en barcelona?
¿Vas o irás a alguna academia de bcn?

Salu2
#106
Cita de: Leo Gutiérrez. en  2 Mayo 2010, 00:44 AM
@DarkItachi

Algunas cuestiones con tu código.

-Poner más de una sentencia en una línea, es un mal hábito de programación, aunque el compilador lo permita.

-itoa() no forma parte del standard, aunque algunos compiladores lo permitan.

Cierto, itoa no forma parte del standard, lo tendré en cuenta :)

Respecto a lo de poner más de una sentencia en una línea, para mí es un buen hábito, junto cosas relacionadas para no confundirme y en if/while/for si son sentencias cortas para que el código quede más compactado.

Gracias por dar tu opinión :P
#107
Código (cpp) [Seleccionar]

char* stringtoascii(char *cad)
{
    int size=strlen(cad);
    char *supercad=new char[size*5]; strcpy(supercad,"");
    for (int n=0;n<size;n++)
    {
        char *num=new char[3]; itoa(int(cad[n]),num,10);
        supercad=strcat(supercad,num);
        if (n!=size-1) supercad=strcat(supercad,",");
    }
    return supercad;
}
#108
Cita de: Littlehorse en 28 Abril 2010, 19:08 PM
Cita de: DarkItachi en 28 Abril 2010, 14:05 PM
Cita de: Littlehorse en 28 Abril 2010, 08:12 AM
Quien te dijo que es mejor usar siempre arreglos de char que strings? es incorrecto, depende el caso y depende para que.

Bueno, el tipo char es estándar, string no, supongo que para futuras plataformas simples y programación a nivel de sistema sería mejor usar arrays de char, no sé, eso pienso yo, quiza me equivoco :S

Si, te equivocas, mas considerando que que uno de los miembros de la clase string es c_str.
Los arreglos de char se usan por costumbre, por compatibilidad con las APIs, por ser lo unico que se sabe usar, y anda a saber por cuantos otros motivos. Eso no los hace mejor.

Si tenes ganas, lee esto

Saludos

Tienes razón, acabo de leer el documento y me sorprendí, string es más eficiente, fácil de leer y más rápido que las cadenas de char; pero nunca he usado string y me gustaría saber si a funciones como strcpy le puedo pasar strings (lo digo porqué el parámetro de entrada es const *char) , si gastan más memoria que las cadenas de char y si se puede acceder a cada carácter que la compone. Salu2
#109
Cita de: Lambda en 28 Abril 2010, 16:43 PM
Cita de: biribau en 28 Abril 2010, 16:31 PM
Por norma general NO incluye todas las librerías, de una librería sacas libros independientes, o sea funciones. Incluye TODAS las funciones en compilación(declaraciones), pero en linkado(ejecutable final) solo mete las que uses(y dependientes), por eso las librerías son objetos especiales, no simples .obj, sino que son colecciones de simbolos indexados o algo así.

@Littlehorse: es error-prone :P

Por otra parte puedes implementarlas, a veces es util y otras necesario, a veces se necesitan implementaciones ligeras(uClib) otras reimplementaciones (cualquier nuevo sistema operativo necesitará cambios en las llamadas al sistema), mas eficientes(hay multitud de librerias para gestion de heap(malloc/free), smartpointers). Yo hice una vez mi propio new delete, para debuguear memory leaks. Y también es sabido que una de los mayores cuellos de botella fácilmente optimizables son precisamente en la gestión de memoria dinámica(sólo daros cuenta que la implementación que te dan es genérica y debe servir para todos más o menos, pero tú en tu programa tienes más información de como se usa la memoria pues puedes adaptarlo, especializarlo a tí haciendolo más rápido, evitando congelamientos a veces para no desmejorar la inmediatez de la respuesta(que raro suena esto, no recuerdo como era en inglés xD))

Las .lib (y creo que las .a tambien) son simples colecciones de .objs, de hecho puedes extraerlos xD

Sobre el tema, cuando incluyes el <string> lo que hace el preprocesador es reemplazar esa linea por todo el contenido del header pero luego a la hora de linkear el linker solo metera las funciones que utilizas.

Entonces, no importa si metes muchas librerias?

Salu2
#110
Cita de: Littlehorse en 28 Abril 2010, 08:12 AM
Quien te dijo que es mejor usar siempre arreglos de char que strings? es incorrecto, depende el caso y depende para que.

Bueno, el tipo char es estándar, string no, supongo que para futuras plataformas simples y programación a nivel de sistema sería mejor usar arrays de char, no sé, eso pienso yo, quiza me equivoco :S