|
862
|
Programación / Programación C/C++ / Re: busqueda binaria
|
en: 6 Mayo 2010, 07:42 am
|
Veamos... en ese caso, lo que tienes que comparar es el resultado de la llamada a strcmp, una vez ya devuelto el valor, no dentro de su propia llamada.
por ponerte un ejemplo, luego tu ya pones acorde a tus necesidades
if (strcmp(cadena1, cadena2) >0) este if se cumplira siempre y cuando la cadena 2 sea alfabéticamente posterior a la primera.
por otro lado, cuando quieres comprobar si ambas cadenas son iguales la comprobación es strcmp(cadena1, cadena2)==0 . Puesto que cuando son iguales, retorna un 0. si cadena 1 es mayor, un numero negativo, y si cadena 2 es mayor, uno positivo.
|
|
|
863
|
Programación / Ejercicios / Re: Sistemas de numeracion
|
en: 6 Mayo 2010, 00:47 am
|
A primera vista sabes que una base menor de 8 no puede ser (tienes un 7, mayor dígito en octal) en ese ejemplo que tu has puesto. Por otra parte, hasta donde yo tengo conocimiento, cuando hay duda sobre la base del número, viene indicado. 1012 indica que esa cadena de dígitos es binario. Números expresados como 0xABCD indica un hexadecimal (no tanto por las letras sino por el 0x)
|
|
|
864
|
Programación / Programación C/C++ / Re: busqueda binaria
|
en: 6 Mayo 2010, 00:42 am
|
Podrías valerte de la búsqueda binaria numérica, pero en comparaciones de mayor o menor, puedes usar strcmp, de la biblioteca string.h
info de strcmp
int strcmp (const char * s1, const char * s2);
Valor de retorno: La función retorna un número entero mayor, igual, o menor que cero, apropiadamente según la cadena apuntada por str1 es mayor, igual, o menor que la cadena apuntada por str2. La comparación es según el orden lexicográfico de las cadenas str1 y str2.
como en la tabla ASCII las letras están ordenadas de la misma forma que en el abecedario (misma secuencia de orden) básate en el valor de retorno de strcmp para saber si tienes que buscar en la mitad inferior o superior del vector de palabras, o bien, si la has encontrado.
|
|
|
867
|
Programación / Programación C/C++ / Re: Que hago mal? compilar pero no ejecuta bien
|
en: 5 Mayo 2010, 21:34 pm
|
El problema, que no lo había pensado antes, es la "basura" que se queda por usar scanf, en concreto un \n de cuando pulsas la tecla enter para introducir el tamaño de la cadena. Y es lo que se come gets(cadena). Lo raro, es que te funcione si quitas un \n de un printf que nada tiene que ver con la entrada de datos. Lo que se me ocurre, es hacer un gets justo después del scanf, para limpiar el n residual, que luego es machacado por el siguiente gets(cadena). Aun así es una forma un tanto.. sucia de hacerlo, existiendo otras funciones que permiten una entrada mas "limpia" de datos, pero no las conozco. el apaño temporal para el programa es: char *cad =(char *)(malloc(sizeof(char)*l ));
|
|
|
868
|
Programación / Programación C/C++ / Re: Malloc ...
|
en: 5 Mayo 2010, 21:15 pm
|
http://biplab.in/2009/04/creating-portable-codeblocks-part-2/en los comentarios comentan una solución para el link faltante: Unfortunately the file has been deleted from FileFront due to some unknown reason.
But you can actually use any latest nightly version as a portable version. To do that- 1) Download cblauncher_v_0_1_1.7z file from the above post. 2) Download any newer nightly build of Code::Blocks and extract to any folder. 3) Extract cblauncher.exe from cblauncher_v_0_1_1.7z to the folder where codeblocks.exe file is present. 4) Double-click on cblauncher.exe file and it will run the nightly build as a portable version. PERO: parece que alguien se tomó la molestia de preparar un instalador para portable http://codecutter.net/tools/codeblocks.edu/
|
|
|
869
|
Programación / Programación C/C++ / Re: duda2
|
en: 5 Mayo 2010, 21:05 pm
|
grosso modo, si, son las "equivalencias". tienen diferente sintaxis pero el uso viene a ser el mismo.
printf --> cout scanf --> cin
Que alguien que lo sepa a ciencia cierta me corrija si no es así, pero creo que cin es más "limpia" que scanf.
|
|
|
870
|
Programación / Programación C/C++ / Re: Que hago mal? compilar pero no ejecuta bien
|
en: 5 Mayo 2010, 20:59 pm
|
el problema está aqui: void f_visu(char *cadena,int size){ int i=0; for(i=0;*(cadena+i)!='\0'&&i<size;i++){ } }
Para imprimir una cadena con printf y %s no necesitas ir realizando printfs como si imprimiras carácter a carácter, %s indica que le pasas una cadena, y la imprimirá entera. Por tanto tienes dos opciones: void f_visu(char *cadena){ printf("%s",cadena );/* imprimimos toda la cadena de una sola vez*/ }
Notese que no necesitamos el tamaño ni un contador en esta función. o bien, una solución mas similar a la función que daba problemas: void f_visu(char *cadena,int size){ int i=0; for(i=0;*(cadena+i)!='\0'&&i<size;i++){ printf("%c",*(cadena +i )); /*imprimimos caracter a carácter*/ } }
|
|
|
|
|
|
|