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

#1131
Cita de: Darkgold9 en 20 Agosto 2011, 20:07 PM

1- Caso base. (Entiendelo como el caso en el que para y deja de llamarse asi mismo, dicho en plan chapuza  :xD)
2- Caso recursivo. (Esta es la parte en la que el algoritmo se llama asi mismo una y otra vez hasta llegar al caso base)


Caso base = llamada inicial (por algo se llama base )... por ende si fuera este el caso base el caso de termino, no seria recursivo. La recursividad termina hasta un Caso de termino. Una vez llegado al caso Termino se retornando TODO al caso Base aplicando la teoria de la PILA ( El ultimo es el primero en salir ). quizas esto era lo que querias decir realmente.

https://secure.wikimedia.org/wikipedia/es/wiki/Pila_%28inform%C3%A1tica%29
http://www.lcc.uma.es/~lopez/modular/recursion/transp_recursion.pdf
https://secure.wikimedia.org/wikipedia/es/wiki/Recursi%C3%B3n
https://secure.wikimedia.org/wikipedia/es/wiki/Algoritmo_recursivo

Por otro lado solo hay dos tipos de recursividad:

* Directa
* Indirecta

en los enlaces esta la explicacion.

Es como en algebra, debes empezar a resolver los parentesis mas internos... hasta dar con el resultado final.

Dulces Lunas!¡.
#1132
.

#include <stdio.h>

int sumar(int n) {
    if (!n)
        return n;
    return sumar(n / 10) + (n % 10);
}
int main()
{
    printf("%d\n", sumar(126));
    getchar();
    return 0;
}



n = 126
sumar(n/10) + (n % 10) --> recursivamente....hasta n = 0... es decir:

-->sumar( 126 ) //llamada...

//Se aplica la teoria de la pila (el ultimo el el primero en salir) asi que...
0   <-- segun el algoritmo anterior ya no se ejecuta sumar.
sumar( 0 ) + 1
sumar( 1 ) + 2
sumar( 12 ) + 6
//Se leen las llamadas de abajo hacia arriba... donde el de arriba {0} es el caso de termino.

Por lo tanto:

((((0) + 1) + 2) + 6) = 9

Dulces Lunas!¡.
#1133
.
Ni idea yo uso el IDE CodeBlocks con el compilador predeterminado.

Dulces Lunas!¡.
#1134
.
Antes que nada no me oriente solo a cadenas de texto... di una obtativa de invertir un bloque de BYTE.

Cita de: escabe en 19 Agosto 2011, 01:24 AM
Si, tienes razón...
Sin desmerecer tu código BlackZeroX▓▓▒▒░░, el título del hilo... ¿No se refería a cadenas? Y el código inicial ¿No iba enfocado a cadenas de texto?

Para este caso yo uso strrev

Saludos.


Dos palabras: Texto Unicode!¡.
Por que no hacer una funcion mas dinamica?, acaso quieres estar reescribiendo una funcion para cada caso que se te presente?
Esta buena strrev() para cadenas ANSI con terminacion de una cadena en Nulo, pero fuera de eso si es igual una cadena ANSI pero que tiene un caracter nulo que se debe tomar en cuenta?...

@Queta

Codigo Prolijo-Dinamico!¡.

La funcion tiene un sentido de ser Dinamica y no encerrarse en una sola cuestion, si es multiusos que mejor no lo crees?, pero fuera de esto no te he respondido adecuadamente.

Use la macro BYTE debido a que la funcion designa de manera mas descriptiva que trabajara con un bloque de Bytes segun el puntero, en esta cuestion NO veo que afecte el transcurso normal de un algoritmo que tan solo invierte un bloque de X de Bytes sea cual sea, En otras palabras: NO ME QUISE ENCERRAR EN CADENAS ANSI, ademas la macro jamas se compila ¬¬".

Dulces Lunas!¡.
#1135
Archivos Fuente, y Compilados



La funciones isNumericA e isNumeriW con mis versiones en C...

Temibles Lunas!¡.
#1136
.
Son debido a los TLB o algo asi, habria que RECREAR algunos codigos pero antes se le informaria al compilador que no ocupe los TLB predeterminados, algo asi era. me lo lei hace tiempo, llegue a compilar un exe de tan solo 500 bytes... en google hay algo de informacion.

Para crear una interaccion vb6 c/c++ bajate CodeBlocks, y crea un proyecto Shared Library... o mirate este post donde hago una interaccion entre los dos, te van a hacer falta conocimientos de las estructuras basicas que manera vb6 a nivel memoria solo para las strings.

http://foro.elhacker.net/programacion_cc/cisnumeric_vb6_a_c-t336564.0.html

En ese post deje un proyecto donde creo una dll para manejarla como API en vb6... el proyecto de la dll esta en C <--- te recomiendo Codeblocks para compilarlo.

lo del tamaño del compilado:

http://foro.elhacker.net/programacion_cc/reducir_mas_el_tamano-t254118.0.html

Dulces Lunas!¡.
#1137
Programación C/C++ / Re: [C]isNumeric (VB6 a C)
20 Agosto 2011, 03:21 AM
.
No te molesta si te dejo el EXE?, igual pongo una captura.

Archivos Fuente dll, y Compilados



La funcion isnumeric_Black esta en VB6, es la version en vb6 de la que esta aqui...

Dulces Lunas!¡.
#1138
.
ammm ANSI C es mas liviano y rapido de alguna manera.



#include <stdio.h>
#include <stdlib.h>

int main() //(int argc, char *argv[])
{
    fprintf(stdout, "Tamaño de char: %d\n", sizeof(int));
    fprintf(stdout, "Tamaño de int: %d\n", sizeof(int));
    fprintf(stdout, "Tamaño de float: %d\n", sizeof(float));
    fprintf(stdout, "Tamaño de double: %d\n", sizeof(double));
    //fflush(stdout);
    getchar();
    return EXIT_SUCCESS;
}



Temibles Lunas!¡.
#1139
Programación C/C++ / Re: [C]isNumeric (VB6 a C)
20 Agosto 2011, 02:50 AM
.
Los tiempos se han calculado con las APIS:

@kernel32
QueryPerformanceCounter
QueryPerformanceFrequency

Dulces Lunas!¡.
#1140
Programación C/C++ / Re: [C]isNumeric (VB6 a C)
20 Agosto 2011, 02:40 AM
.
Los test (tiempos) ya estan en la url... esta funcion trabaja a nivel Bit y es una traduccion mera de la que esta en vb6, tiene un tiempo de diferencia de 5-10 msc respectivamente a 1000 ciclos con varias strings a probar, lo unico en lo que radica esta verison con la de vb6, es que en VB6 no puedo trabajar directamente con cada caracter, y en esta si, en la de vb6 use RtlMoveMemory para tal cosa.

A esta version le saque dos variantes segun las string a probar es decir ANSI y UNICODE.

La funcion es grandota pero trabaja tan rapido como lo permiten las operaciones a nivel Bit y por punteros sin usar tanta memoria para las variables booleanas, en la de vb6 tomo partido de la longitud INT32 como es nativo de vb6 y de igual manera sacandole partido a las operaciones a nivel Bit...

En el caso de reinventar la rueda:
* Es cierto, pero si la funcion es lenta... o no cumple las espectativas, o mejor aun si no la puedes editar mejor recrearla, en este caso salio una funcion mas optimizada que la de vb6 y a su vez mas rapida, creo que reinventar la rueda en ocasiones tiene sus ventajas.

No soy el unico que hace este tipo de cosas: VBSpeed

Nota: No use en ningun momento LBound ni Ubound ya que no ocupo ningun tipo de array, estas funciones trabajan directamente con la estructura del SafeArray de un Array como es obvio...

Dulces Lunas!¡.