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

#481
Ejercicios / Re: Reto/Juego Ejercicios en Python
4 Septiembre 2010, 22:17 PM
Código (python) [Seleccionar]
from math import sqrt

def isprime(num):
    if num <2:
      return False
    i=2
    while i <=sqrt(abs(num)):
      if num%i == 0:
         return False
      i+=1
    return True

min=int(raw_input("Min:  "))
max=int(raw_input("Max: "))

for num in range(min,max+1):
   if isprime(num):
      print num


No lo probé todavía pero debería funcionar si no exageran con el rango  ;D. Se podría hacer una implementación por probabilidades pero igualmente por lo menos para mi no lo vale.   :D

Voy a tomarme la libertad de poner dos retos, uno fácil y otro no tanto, así vemos si se suma mas gente.

El único reto que hay que completar para elegir el próximo reto es el fácil, pero por supuesto el de dificultad media lo pongo para quien quiera hacerlo.  :D

Reto fácil:

Desarrollar una función que permita insertar en una secuencia de dígitos los caracteres guión
cada 8 dígitos a partir del cuarto dígito, y un espacio cada 8 dígitos a partir del octavo dígito.
Si la cantidad de dígitos no fuera múltiplo de 8 se deberá adicionar ceros por la izquierda.
Ejemplo: 

472348237388539055823012 queda como 4723-4823 7388-5390 5582-3012.


Reto medio:

Desarrollar una función que permita insertar el nombre de X usuario y devolver cual es su actividad, siempre que sea posible, analizando https://foro.elhacker.net/who.html.

Saludos!  :D
#482
Citar1-. me dá error en la linea 10 (copiando exactamente el codigo)
un error raro expected ")" before string constant (me perece raro porque tengo todos mis paréntesis completos

Raro, porque el código expuesto es correcto. Proba de crear el projecto y el source nuevamente, para ir descartando posibilidades.

Citar2-. me da curiosidad esa sintaxis diferente en vez de main... es primera vez que la veo (soy medio pollo en c) ya la googlearé para ver que rayos es,

No hace falta googlear mucho, puedes revisar las chinchetas:

Principios básicos de programación Windows

Citar
pero eso estaba afectado que no me compilara/coriera?

No.
En cuanto a la librería, te faltaba enlazar la librería correcta como bien menciono rob1104, pero igualmente esa tampoco era la causa del error original, porque dada esa situación lo normal es que el linker te avise sobre las referencias indefinidas.

Lo ideal es que la directiva para el linker la pases desde Project/Build options/Linker settings, de lo contrario estas utilizando directivas globales que afectaran a todos tus proyectos.

Saludos!

#483
Que theme? yo con el azul no tengo problemas.

#484
 :laugh: ;-)

Nunca se me hubiese ocurrido que ese era tu problema, porque en el código que pusiste en C, ya tenias hecha la parte donde imprimías los caracteres, y lo hacías precisamente de esa forma  ;D.
En C++ podes usar el manipulador hex o ::setf.

Saludos
#485
Lamentablemente mas no puedo hacer porque no tengo la implementación de openssl instalada, pero funcionar debería funcionar correctamente con el código que te puse al menos que dentro de la función haya errores de los cuales no estamos al tanto. En todo caso postea los errores así lo vemos.  :D

CitarPerdona mi ignorancia compañero, pero no se que quieres decir ahí

Si, las cadenas al estilo C, deben finalizar con un carácter nulo . '\0', 0, etc. Como desconozco la tarea que realiza la función MD5, lo aclare por las dudas.

Si no sabes lo que es el carácter nulo, te recomendaría que le des un repaso al manejo de cadenas.

Saludos
#486
 ;D, vamos por partes:

Primero que nada, si no solucionas los errores en un código en determinado lenguaje, no lo intentes con otro solo por probar. C++ y C comparten muchas cosas pero también difieren en otras, por tanto en gran parte de los casos lo único que vas a obtener es dolores de cabeza extras.


CitarY el primer argumento de la función MD5 me da un error si subsano el error anterior con un casting:
main.cpp:16: error: invalid conversion from 'const unsigned char*' to 'const char*'
main.cpp:16: error:   initializing argument 1 of 'size_t strlen(const char*)'

Normal, es lo que debería suceder debido a que son distintos tipos a pesar que compartan el mismo tamaño y los mismos requerimientos de alineación.


Citar
   
Código (cpp) [Seleccionar]
const unsigned char* cad1 = (unsigned char*)"Ejemplo";
    unsigned char* cad2 = (unsigned char*)malloc(sizeof(char)*256);

    cad2 = MD5(cad1, strlen((char*)cad1)*sizeof(char), NULL);

No es necesario el *sizeof, al menos que en algún punto planees utilizar unicode, pero en el código actual no es lo que ocurre. Un char es 1 byte.

Proba esto:

Código (cpp) [Seleccionar]
     
unsigned char *hash=(unsigned char*)malloc(sizeof(char)*MD5_DIGEST_LENGTH);
const unsigned char cad1[]="Ejemplo";
  //Asegurarse que hash este terminada en NULL.
  MD5(cad1, strlen(reinterpret_cast<const char*>(cad1)),hash);
  //O podes hacer, en este caso, sizeof(cad1), ya que cad1 en este caso no es un puntero si no un array.
  cout<<"Frase: "<<cad1<<endl<<"Hash: "<<hash<<endl;



CitarPorqué si paso el code de C a C++ me da error con los parámetros de las funciones cuando lo dejo EXACTAMENTE IGUAL?

Habría que ver que tipos de errores, pero teniendo en cuenta que son dos lenguajes distintos no debería ser una sorpresa. Pasar de un lenguaje a otro sin mas como mínimo te garantiza algún que otro error.

Citar2.- Porqué C++ es así de ca**** con los tipos de las variables y C no?

No debería? es porque C++ utiliza un chequeo de tipos mas estricto, que en gran parte de los casos es una ventaja y no al revés.

Citar
3- Cómo voy a hacer bien el code si me obliga el compilador a usar castings por todas partes?

El problema es que estas acostumbrado a utilizar old-style casting, común en C pero obsoleto en C++. De hecho C++ provee toda una nueva gama de operadores para dicha tarea.

C++ Casting operators

Saludos!
#487
En estos momentos no tengo la implementación de openssl como para probar, pero viendo el código, se ven dos errores:

Código (cpp) [Seleccionar]

cad1 = (unsigned char*)"ejemplo";


Las cadenas literales son constantes, por tanto, el puntero debería tener el calificador const. Ademas, generalmente las cadenas literales se encuentran en una sección de solo lectura.

En casos como estos, lo ideal es:

Código (cpp) [Seleccionar]
const unsigned char* cad1="Ejemplo";

lo cual implica que cualquier intento de asignación posterior devuelve un error.

O bien, inicializar un arreglo:

Código (cpp) [Seleccionar]
unsigned char cad1[]="Ejemplo";

El segundo error:

Código (cpp) [Seleccionar]
cad2 = MD5(cad1, sizeof(cad1), cad2);

cad1 es un puntero, sizeof(cad1) devolverá 4 bytes (tamaño del puntero) y sizeof(*cad1) devolverá el tamaño del primer elemento de la cadena, es decir 1 byte, lo cual es incorrecto debido al objetivo de ese parámetro.

Saludos!
#488
Programación C/C++ / Re: Problema con programa...
2 Septiembre 2010, 22:46 PM
CitarPor cierto,Hay alguna manera de agregar una linea sin usar el cout sin nada entre ""? Probe el \n y no sirvio

Código (cpp) [Seleccionar]

   cout<<"Cad1 \n";
   cout<<"\n";
   cout<<endl;
   cout<<"Cad2"<<endl;
   cout<<"Cad3"<<"\n";
   etc>
   
#489
Programación C/C++ / Re: Duda con %i
2 Septiembre 2010, 19:04 PM
Ejecuta la aplicacion desde la carpeta del proyecto, y tendrás el error. Igualmente ni siquiera hace falta ver un error en tiempo de ejecución, ya el hecho que imprima caracteres aleatorios y acceda a posiciones de memoria invalidas implica que obviar los parámetros en printf es un error.

Saludos

#490
Programación C/C++ / Re: Duda con %i
2 Septiembre 2010, 18:27 PM
Un error en tiempo de ejecución. Probalo tranquilo que no vas a romper nada  ;D.