• Sábado 14 de Diciembre de 2024, 09:29

Autor Tema:  Paso De C++ A C  (Leído 8286 veces)

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Paso De C++ A C
« en: Jueves 1 de Febrero de 2007, 12:06 »
0
Hola.

Busacando en internet he dado con un programa que necesito, pero el problema es que está en C++. Me gustaría pasarlo a C.

¿Alguien podría decirme cómo?

EDITO: Pues no pongo el mensaje y se me olvida el código..vaya cabeza tengo.

Código: Text
  1. #include<iostream.h>
  2. class DivDiff{
  3. float *x,*f;
  4. int n,intial,final;
  5. public:
  6. void iovalues();                
  7. float dd(int,int);
  8.                     };
  9. void DivDiff::iovalues()
  10. {
  11.  cout<<"Enter number of points :"<<endl;
  12.  cin>>n;
  13.  x=new float[n];
  14.  f=new float[n];
  15.  for(int i=0;i<n;i++)
  16.     {cout<<"Enter x["<<i<<"]"<<endl;
  17.      cin>>x[i];
  18.      cout<<"Enter f["<<i<<"]"<<endl;
  19.      cin>>f[i];}
  20.  while(1){
  21.           cout<<"Enter intial r(-1 to exit)"<<endl;
  22.           cin>>intial;
  23.           if(intial==-1)break;
  24.           cout<<"Enter  final r"<<endl;
  25.           cin>>final;
  26.           cout<<dd(intial,final)<<endl;
  27.          }
  28. }
  29. float DivDiff::dd(int intial,int final)
  30. {
  31.  float temp=0;
  32.  if((final-intial)==1)
  33.     temp=(f[final]-f[intial])/(x[final]-x[intial]);
  34.  else
  35.     temp=(dd(intial+1,final)-dd(intial,final-1))/(x[final]-x[intial]);
  36.  return temp;
  37. }
  38.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #1 en: Jueves 1 de Febrero de 2007, 13:12 »
0
Yo lo haria mas o menos asi para empezar:

Código: Text
  1.  
  2. typedef struct _DivDiff
  3. {
  4.   float *x,*f;
  5.   int n,intial,final;
  6. }DivDiff, *PDivDiff;
  7.  
  8. void iovalues(PDivDiff this);
  9. float dd(PDivDiff this, int intial, int final);
  10.  
  11.  

Tene en cuenta que las variables tienen que ser declaradas todas al principio de una funcion, tenes que acceder a todos los campos que antes se accedian directamente con this->campo y que tenes que reemplazar cin/cout.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Paso De C++ A C
« Respuesta #2 en: Jueves 1 de Febrero de 2007, 15:47 »
0
No se ve muy complicado, y Eternal te ha dado una buena solución, lo único que puedo añadir (y prácticamente es nada :P):

Cambia esto:
Código: Text
  1.  
  2. #include <iostream.h>
  3.  
  4.  
por
Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h> // (Por si acaso :P)
  4.  
  5.  

Esto
Código: Text
  1.  
  2. cout<<"Enter number of points :"<<endl;
  3. cin>>n;
  4.  
  5.  
por:
Código: Text
  1.  
  2. printf( "Enter number of points: \n" );
  3. scanf( "%d", &n );
  4.  
  5.  

También, procura lo de declarar variables al inicio de las funciones, aunque según entiendo en las últimas versiones del estándar ya se permite declarar en cualquier punto (¿o estoy confundido :P?). De cualquier forma, faltaría que tu compilador lo soportara :).

Suerte,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #3 en: Jueves 1 de Febrero de 2007, 16:08 »
0
Cita de: "Geo"
También, procura lo de declarar variables al inicio de las funciones, aunque según entiendo en las últimas versiones del estándar ya se permite declarar en cualquier punto (¿o estoy confundido :P?). De cualquier forma, faltaría que tu compilador lo soportara :).
Si, C99 lo soporta, pero no se que compilador soporta completamente C99 (creo que ninguno popular lo hace el 100%) :lol: Esta caracteristica en particular no compila en VC++ y si por ejemplo los comentarios en una sola linea (//).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #4 en: Jueves 1 de Febrero de 2007, 17:37 »
0
Haciendo una mezcla de lo que me habéis dicho los dos me sale algo así.

Código: Text
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct _DivDiff
  5. {
  6.  float *x,*f;
  7.  int n,intial,final;
  8. }DivDiff, *PDivDiff;
  9.  
  10. void iovalues(PDivDiff this);
  11. float dd(PDivDiff this, int intial, int final);
  12.  
  13.  
  14.              };
  15. void DivDiff::iovalues()
  16. {
  17. printf( "Enter number of points: \n" );
  18. scanf( "%d", &n );
  19. x=new float[n];
  20. f=new float[n];
  21. for(int i=0;i<n;i++)
  22.   {printf("Enter x[i]");
  23.    scanf("%f",&x[i]);
  24.    printf("Enter f[i]");
  25.    scanf("%f",&f[i]);}
  26. while(1){
  27.       printf("Enter intial r(-1 to exit)");
  28.       scanf("%d",&intial);
  29.       if(intial==-1)break;
  30.       printf("Enter  final r");
  31.       scanf("%d",&final);
  32.       printf("(intial,final)");
  33.       }
  34. }
  35. float DivDiff::dd(int intial,int final)
  36. {
  37. float temp=0;
  38. if((final-intial)==1)
  39.   temp=(f[final]-f[intial])/(x[final]-x[intial]);
  40. else
  41.   temp=(dd(intial+1,final)-dd(intial,final-1))/(x[final]-x[intial]);
  42. return temp;
  43. }
  44.  

Pero claro, esto que he hecho no está bien.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #5 en: Jueves 1 de Febrero de 2007, 17:46 »
0
Tenes que ponerle un poco mas de esfuerzo ... en la linea 14 tenes el primer error ... despues en la 15 usa el nuevo prototipo.

No me hiciste caso en cuanto a los campos, no podes acceder a n o x directamente, tenes que usar this->n.

No podes usar new, tenes que usar malloc y de paso agregale el free a eso con una funcion que sea equivalente al destructor que debia tener esa clase ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #6 en: Jueves 1 de Febrero de 2007, 18:03 »
0
Gracias, pero no se usar malloc, ni donde ni como ponerlo. Tampoc entiendo lo de los campos.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #7 en: Jueves 1 de Febrero de 2007, 20:37 »
0
Cita de: "Nevhazovat"
Gracias, pero no se usar malloc, ni donde ni como ponerlo. Tampoc entiendo lo de los campos.
¿Entonces para que lo queres en C? ¿Sabes alguno de los dos?

malloc se usa pasandole como parametro el tamaño de la memoria a reservar y devuelve un void* por lo tanto hay que hacer un casting al tipo que queremos usar:

float *f = (float*)malloc(2 * sizeof(float));

Con eso reservamos el tamaño necesario para dos variables float.

Con campos me refiero a las variables que eran miembros de esa clase (x,f, etc) y que antes se podian usar directamente (el this estaba implicito) y para las que ahora tenes que usar un puntero a una estructura que en este caso la llamamos this por gusto.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #8 en: Jueves 1 de Febrero de 2007, 21:26 »
0
Saber lo que se dice, no se ninguno de los dos. Este es mi primer año estudiando C y la verdad es que me resulta bastante complicado cuando nos salimos de los superbásico.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #9 en: Jueves 1 de Febrero de 2007, 21:28 »
0
Cita de: "Nevhazovat"
Saber lo que se dice, no se ninguno de los dos. Este es mi primer año estudiando C y la verdad es que me resulta bastante complicado cuando nos salimos de los superbásico.
OK. Pero entonces no se para que queres pasar ese codigo de C++ a C, ni siquiera se si lo entendes ... ¿Que es lo que necesitas en realidad?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #10 en: Jueves 1 de Febrero de 2007, 22:16 »
0
Pues tengo que hacer una programa que calcule la derivada de un polinomio. Que pregunte primero el grado del polinomio y a continuación
pida los coeficientes de cada x.

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #11 en: Domingo 4 de Febrero de 2007, 00:56 »
0
¿Nadie sabe como hacerlo?

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #12 en: Domingo 4 de Febrero de 2007, 02:00 »
0
Es una tarea, verdad?  :no:
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #13 en: Domingo 4 de Febrero de 2007, 09:21 »
0
Cita de: "Nevhazovat"
¿Nadie sabe como hacerlo?
¿Es una pregunta en serio? Lo hice a los 10 minutos de ver el problema, y entre varios te dejamos los pasos para hacerlo (incluso en otro foro tambien) pero otra cosa muy diferente es que como bien dice su- te vayamos a hacer la tarea.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #14 en: Domingo 4 de Febrero de 2007, 10:08 »
0
Cita de: "su -"
Es una tarea, verdad?  :no:

Sí, es una tarea como tu dices.

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #15 en: Domingo 4 de Febrero de 2007, 10:12 »
0
Cita de: "Eternal Idol"
Cita de: "Nevhazovat"
¿Nadie sabe como hacerlo?
¿Es una pregunta en serio? Lo hice a los 10 minutos de ver el problema, y entre varios te dejamos los pasos para hacerlo (incluso en otro foro tambien) pero otra cosa muy diferente es que como bien dice su- te vayamos a hacer la tarea.

Está bien. Creo que voy por el mal camino así. Quizás lo mejor sea olvidarme de ese programa y empezar uno nuevo. El problema está en como paso de 2x^3+5x^2+3 a 6x^2+10x. Ahí, no se que hacer.

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Paso De C++ A C
« Respuesta #16 en: Domingo 4 de Febrero de 2007, 11:39 »
0
Aqui nadie te va a hacer la tarea, asi que lo mejor es que repases los siguientes temas:

Reserva de memoria dinamica para vectores
Manejo de punteros
Entrada/Salida de datos

Lo unico un poco complicado es la reserva de memoria, por lo demas con unas nociones basicas de c se puede sacar facilmente

Si realmente quieres sacar partido al foro debes hacer preguntas concretas, como por ejemplo: ¿Como puedo crear un vector dinamico de n elementos? ¿Como manejo ese vector? ¿Como lo imprimo por pantalla? ... etc etc

salu2  :hola:

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #17 en: Domingo 4 de Febrero de 2007, 16:30 »
0
Cita de: "Diodo"
Aqui nadie te va a hacer la tarea, asi que lo mejor es que repases los siguientes temas:

Reserva de memoria dinamica para vectores
Manejo de punteros
Entrada/Salida de datos

Lo unico un poco complicado es la reserva de memoria, por lo demas con unas nociones basicas de c se puede sacar facilmente

Si realmente quieres sacar partido al foro debes hacer preguntas concretas, como por ejemplo: ¿Como puedo crear un vector dinamico de n elementos? ¿Como manejo ese vector? ¿Como lo imprimo por pantalla? ... etc etc

salu2  :hola:

Juer, más concreta que: ¿cómo se hace? es difícil.

Ahora en serio. Es verdad, tenéis razón, hay que currárselo algo. Ya vendré y postearé resultados. Mientras tanto si me indicáis un poco con el código mejor que mejor. Porque a mi si me decís:

Citar
Reserva de memoria dinamica para vectores
Manejo de punteros
Entrada/Salida de datos

pues la verdad no me entero de mucho.

Un saludo.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #18 en: Domingo 4 de Febrero de 2007, 16:38 »
0
Pues, mira este link:
http://foros.solocodigo.com/index.php?showtopic=23877

Si no es suficiente, comprate un libro, o busca en red (alexa, exalead, google, lycos, yahoo) que te aseguro que hay mucho por ahi de esto  :devil:
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #19 en: Domingo 4 de Febrero de 2007, 16:54 »
0
Tengo repasadísima la red buscando algo parecido a lo que yo quiero hacer. Y solo encontré el código ese de C++ que ni siquiera se si es lo que yo busco exactamente.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #20 en: Domingo 4 de Febrero de 2007, 18:37 »
0
No, no, la cosa no es encotrarlo ya hecho, vos lo tenes que hacer... para que cree que es la tarea  :huh:

http://www.exalead.com/search?action=searc...es+en+C&x=0&y=0
http://www.exalead.com/search?action=searc...os+en+C&x=0&y=0

Lee lo que Diodo, Eternal Idol y todo te han dicho, con eso tienes.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Paso De C++ A C
« Respuesta #21 en: Domingo 4 de Febrero de 2007, 19:05 »
0
Código: Text
  1. Juer, más concreta que: ¿cómo se hace? es difícil.
  2.  

Se hace asi  :comp:   :D

No te vas a morir por intentar hacerlo tu solo, es muy facil recurrir a buscar un codigo en internet pero asi nunca aprenderas, ademas , internet es grande pero no tanto como para que encuentres todas las tareas que te manden. Realmente si piensas dedicarte a la programacion deberias estrujarte un poco mas el coco y empezar a adentrarte en el maravilloso mundo del autoaprendizaje

Ahora bien: ¿cual es la primera duda que tienes al ponerte delante del proyecto en blanco?

 :hola:

Nevhazovat

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Paso De C++ A C
« Respuesta #22 en: Domingo 4 de Febrero de 2007, 21:33 »
0
La duda es como pasar de X^3 a 3X^2

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Paso De C++ A C
« Respuesta #23 en: Domingo 4 de Febrero de 2007, 22:37 »
0
Eso se llama derivada. Si se te pidió un programa que calcule la derivada de "algo", lo primero es saber qué es la derivada y cómo aplicársela a ese "algo", ¿ok?

La derivada de x^n es: nx^(n-1). En tu caso, es sencillo lo que vas a hacer, leer los coeficientes constantes de cada miembro del polinomio, así como sus exponentes, luego derivas para cada miembro del polinomio, esto es simple: el resultado de la derivada es la multiplicación del exponente por el coeficiente, la variable se mantiene pero con un nuevo exponente que es igual al original menos 1.

La programación es una herramienta. En tu caso, DEBES conocer cómo obtener la derivada, la computadora no lo va a saber hacer por ti porque simplemente sabes cómo compilar un programa. No se trata de encontrar en internet un programa "mágico" que "le metas algo" y te de la(s) respuesta(s) que buscas, tú tienes que indicarle cómo darte las respuestas.

Por último, este es el foro de C/C++, no de matemáticas.

Suerte con tu tarea, nos vemos.
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Paso De C++ A C
« Respuesta #24 en: Lunes 5 de Febrero de 2007, 02:21 »
0
Cita de: "Nevhazovat"
La duda es como pasar de X^3 a 3X^2
Fijate por Aquí  :comp:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.