Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MiguelYeah en 16 Noviembre 2013, 12:45 pm



Título: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: MiguelYeah en 16 Noviembre 2013, 12:45 pm
Hola, buenas a todos. Tengo un problema, pues tengo que entregar un ejercicio en C, y no tengo mucha idea. Lo tengo hecho en Java, y acudo por si alguien puede ayudarme. El codigo en cuestion es este:

public class Problema1 {

public static String Base(int n){
String ret;

if(n==0){

ret="Lado";

}else{

ret=(Base(n-1)+ "E" + Base(n-1) + "RR" + Base(n-1) + "E" + Base(n-1));

}

return ret;

}


}


El "codigo" que yo he hecho y que no consigo que compile puesto que tendra mil fallos es:

char Base(int n) {

      char ret;

      if(n==0)

         ret="Lado";

      else

         ret=(Base(n-1)+ "E" + Base(n-1) + "RR" + Base(n-1) + "E" + Base(n-1));



      return ret;

   }

void main(void){

   int n;

   printf("Introduzca el numero de n: \n");

   fflush(stdout);
   fflush(stdin);
   scanf("%d", &n);

   printf(ret);
   fflush(stdout);




Tendria que poner con un test que pida el valor de n por consola. Lo estoy haciendo con Eclipse. Muchas gracias de antemano y a ver si alguien puede ayudarme con este gran dolor de cabeza.


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: xaps en 16 Noviembre 2013, 19:06 pm
Acostumbrate a poner el código dentro de contenedores de código. Para ello, cuando escribas un post, veras una lista desplegable dónde pone GeSHi. Si le das click, podrás escoger el lenguaje de programación con el cual has hecho el código para aplicarle el formato correcto.

Una vez hayas hecho esto, publica tu código en C juntamente con el error que te da el compilador y intentaré ayudarte, ya que ahora mismo se me hace imposible con el formato con el que lo has publicado.


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: MiguelYeah en 16 Noviembre 2013, 21:57 pm
Ok, lo siento, es la primera que escribo. Intento hacerlo como me has dicho.

El código en Java que funciona como deberia funcionar es este:
Código
  1.  
  2. public class Problema1{
  3.  
  4. public static String Base(int n){
  5. String ret;
  6.  
  7. if(n==0){
  8.  
  9. ret="Lado";
  10.  
  11. }else{
  12.  
  13. ret=(Base(n-1)+ "E" + Base(n-1) + "R" + Base(n-1) + "E" + Base(n-1));
  14.  
  15. }
  16.  
  17. return ret;
  18.  
  19. }
  20.  
  21.  
  22. }
  23.  
  24.  
  25.  

Y lo tengo que pasar a C, junto con un test para que muestre por pantalla alguna iteracion(n) que yo le diga por consola. Esto es lo que yo tengo, el cual no da nada:



Código
  1.  
  2. #include<stdio.h>
  3. char Base(int n) {
  4. char ret;
  5. if(n==0){
  6. ret='Lado';
  7. }else{
  8. ret=(Base(n-1)+ 'E' + Base(n-1) + 'R' + Base(n-1) + 'E' + Base(n-1));
  9. }
  10. return ret;
  11. }
  12. int main() {
  13. int n;
  14. char ret;
  15. printf("Introduzca el valor de n: \n");
  16. fflush(stdout);
  17. fflush(stdin);
  18. scanf("%d", &n);
  19. ret = Base(n);
  20. printf("El resultado en la iteracion %d es : %s\n", n, ret);
  21. fflush(stdout);
  22. }
  23.  
  24.  
  25.  

Espero haberlo hecho bien esta. Muchas gracias por decirme como es. Creo que el error esta en concatenar las cadenas, aunque no lo se porque estoy empezando con C y estoy aun muy verde. Al

Gracias de nuevo, a ver si me puedes echar un cable


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: xaps en 16 Noviembre 2013, 22:04 pm
No te preocupes, ahora el formato está perfecto.

No se si estoy en lo cierto, pero para declarar un string has de crear un vector de chars, por lo que deberías cambiar

Código
  1. char ret;

por

Código
  1. char ret[];

ya que, si no le pones los [], se declara como un único char.

Pruébalo y coméntame si te ha servido.

EDITO:

En la línea 6, el string ponlo con comillas dobles, ya que comillas simples suelen representar un char, y las dobles un string. Lo mismo para la línea 8.


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: ivancea96 en 16 Noviembre 2013, 22:21 pm
Aportandoalgo más, para pasar el código de Java a C, tendrás que usar un método para concatenar las strings:
Código
  1. ret=(Base(n-1)+ "E" + Base(n-1) + "R" + Base(n-1) + "E" + Base(n-1));

Eso no sirve en C.

Si fuera C++, podrías usar una string. Hacer el código sería más fluido.


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: xaps en 16 Noviembre 2013, 22:52 pm
Aportandoalgo más, para pasar el código de Java a C, tendrás que usar un método para concatenar las strings:
Código
  1. ret=(Base(n-1)+ "E" + Base(n-1) + "R" + Base(n-1) + "E" + Base(n-1));

Eso no sirve en C.

Si fuera C++, podrías usar una string. Hacer el código sería más fluido.

Lo sospechaba, pero no me he atrevido a decir nada ya que he trabajado bastante poco en C.

Aquí tienes un enlace que te puede servir para concatenar cadenas:
http://stackoverflow.com/questions/308695/c-string-concatenation (http://stackoverflow.com/questions/308695/c-string-concatenation)


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: MiguelYeah en 17 Noviembre 2013, 08:53 am
Muchas gracias, me pongo a ello ahora mismo y comento. Sospechaba que podia ser la concatenación, pero por mas que miraba, no daba con una solución. Ahora ya tengo por donde tirar. Gracias de verdad.

Pues despues de probar todas las combinaciones posibles, sigue sin funcionar. No se que mas hacer, he leido que si arrays de caracteres, que si strcat...pero tras probar todo, sigue sin compilar.  :-(


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: xaps en 17 Noviembre 2013, 12:13 pm
Muchas gracias, me pongo a ello ahora mismo y comento. Sospechaba que podia ser la concatenación, pero por mas que miraba, no daba con una solución. Ahora ya tengo por donde tirar. Gracias de verdad.

Pues despues de probar todas las combinaciones posibles, sigue sin funcionar. No se que mas hacer, he leido que si arrays de caracteres, que si strcat...pero tras probar todo, sigue sin compilar.  :-(

¿Que error te muestra al compilar?


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: MiguelYeah en 17 Noviembre 2013, 15:02 pm
Pues ninguno, se queda colgado sin mas. No me marca errores de compilacion con strcat, pero no hace nada, se cuelga.


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: ivancea96 en 17 Noviembre 2013, 17:41 pm
Mm yo hice strcat, y también me dejó de funcionar. Yo soy hijo de C++, así que no te podré ayudar mucho más xd


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: rir3760 en 18 Noviembre 2013, 02:49 am
tengo que entregar un ejercicio en C, y no tengo mucha idea. Lo tengo hecho en Java
El valor de retorno de la función main debe ser int y no deberías utilizar "fflush(stdin)". Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Si apenas empiezas con el lenguaje C sera algo difícil ya que debes utilizar punteros y las funciones:
* strlen para conocer el numero de caracteres de una cadena sin incluir el '\0'.
* malloc para reservar un bloque de memoria donde almacenar una cadena.
* strcpy para copiar la cadena en el bloque de memoria indicado.
* sprintf para imprimir varias cadenas y caracteres en un bloque de memoria.

Supongo esas funciones ya las vieron en clase, ¿Correcto?

Un saludo


Título: Re: Porfavor, necesito ayuda pasar codigo de Java a C
Publicado por: kellogs95 en 23 Noviembre 2013, 19:09 pm
Varias Cosas desconozco el lenguaje Java pero te intento ayudar con la parte en c:

Código
  1. #include<stdio.h>
  2.  
  3. //*     (Base(n-1)+ 'E' + Base(n-1) + 'R' + Base(n-1) + 'E' + Base(n-1))
  4.  
  5. int main(void) {
  6. int n, i;
  7. char array[4];
  8. const char lado [4] = {'l','a','d','o'};
  9. const char test [4] = {'t','e','s','t'};
  10. int x;
  11.  
  12. printf("\n Introduzca el valor de n: ");
  13. scanf("%d", &n);
  14. fflush (stdin);
  15. printf("\n El resultado en la iteracion %d es: ", n);
  16.  
  17. if(n==0)
  18. for (x=0; x<4; x++)   //* Copiamos el array lado[] a array[]
  19. array[x] = lado[x];
  20. else
  21. for (x=0; x<4; x++)  //* Copiamos el array test[] a array[]
  22. array[x] = test[x];
  23.  
  24. for(i=0; i < 4; i++)    //* Imprimimos cada uno de los caracteres del array
  25.        printf("%c", array[i]);
  26.  
  27. fflush(stdout);
  28.  
  29. return 0;
  30. }
  31.  
  32. /* FALLOS:
  33.  * %s es para cadena de caracteres, uso de punteros.
  34.  * declaramos como arrays para no tener que lidiar con el caracter NULL */
tambien soy "principiante" en c, asi que me la he apañado con lo que sabia; No he usado ninguna funcion ya que me daba muchos errores de compilacion, pero si realmente necesitas trascribirlo con funciones yo usaria una funcion void Base (n), ya que si usas el return ret[] solo puedes igualar el primer caracter del array.

Y por ultimo no entiendo el algoritmo {(Base(n-1)+ 'E' + Base(n-1) + 'R' + Base(n-1) + 'E' + Base(n-1))}, por eso te he puesto la palabra "test", si me puedes detallar a lo que te refieres con eso....  :huh:

saludos y espero haberte ayudado.