• Viernes 3 de Julio de 2020, 13:32

Autor Tema:  Problemilla con Divide y Venceras?  (Leído 2700 veces)

Comodoro

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Problemilla con Divide y Venceras?
« en: Viernes 21 de Enero de 2011, 19:14 »
0
Hola Camarada como estan, les cuento estoy practicando Lenguaje C (No tengo mas nada que Hacer), realizando un Programita de lo mas sencillo el cual tiene que Realizar Operaciones Matematicas.

Cuando programo en C todo el Codigo lo coloco en un mismo Archivo, funciones, procedimientos, constante, variables, etc. Pero esta vez lo he dividido por parte.

1.- Archivos de Cabecera: En donde he declarado las funciones, procedimientos, constante, variables, etc.      
2.- Archivo de Definicion: En el cual he Definido lo que he Declarado en el Archivo de Cabecera.
3.- Archivo Principal: En el que tiene el Codigo Principal que se va a ejecutar cuando Compile ( main() ).

El hecho es que me arroja error, y e intentado arregrarlo pero Nada. Haber si ustedes me pueden Ayudar.

Aqui les dejo el Codigo:

Código: C
  1.  
  2. #ifndef _MATES_H_
  3. #define _MATES_H_
  4.  
  5. /*Declaracion de Funciones*/
  6.  
  7. /*Funcion: Sumar
  8. *Recibe:
  9. *       a Valor Real.Sumando.(Parametro)
  10. *       b Valor Real.Suamndo.(Parametro)
  11. *Devuelve:
  12. *       Suma de a+b: Valor Real
  13. */
  14. float Sumar(float a, float b);
  15.  
  16. /*Funcion: Restar
  17. *Recibe:
  18. *       a Valor Real.Restando.(Parametro)
  19. *   b Valor Real.Restando.(Parametro)
  20. *Devuelve:
  21. *       Resta de a-b: Valor Real
  22. */
  23. float Resta(float a, float b);
  24.  
  25. /*Funcion: Multiplicar
  26. *Recibe:
  27. *       a Valor Real.Multiplicando.(Parametro)
  28. *       b Valor Real.Multiplicando.(Parametro)
  29. *Devuelve:
  30. *       Multiplicar de a*b: Valor Real
  31. */
  32. float Multiplicar(float a, float b);
  33.  
  34. /*Funcion: Dividir
  35. *Recibe:
  36. *       a Valor Real.Multiplicando.(Parametro)
  37. *       b Valor Real.Multiplicando.(Parametro)
  38. *       e Valor Entero.Codigo de Error(Referencia)
  39. *Devuelve:
  40. *       Division de a/b: Valor Real
  41. *Si b es Cero(o), se deposita en (e) el Valor -1 invalidando de este modo el
  42. *Resultado de la Division. En otro caso el Valor de (e) sera Cero(0) indicando
  43. *que el Valor devuelto es Correcto.
  44. */
  45. float Dividir(float a, float b, int *e);
  46.  
  47. #endif
  48.  
  49.  

Código: C
  1.  
  2. /*Descripcion:
  3. *Este Archivo corresponde al Archivo de Definiciones de la Cabecera asociada en
  4. *la que definimos las Funciones Declaradas Peviamente.
  5. */
  6.  
  7. #include "mates.h"
  8. /*Definicion de Funciones*/
  9.  
  10. float Sumar(float a, float b){
  11.     return a + b;
  12. }
  13.  
  14. float Resta(float a, float b){
  15.     return a - b;
  16. }
  17.  
  18. float Multiplicar(float a, float b){
  19.     return a * b;
  20. }
  21.  
  22. float Dividir(float a, float b, int *e){
  23.     if(b==0){               //En casi de que la Division sea por Cero
  24.         *e = -1;
  25.         return 0;
  26.     }else{
  27.         *e = 0;
  28.         return a / b;
  29.     }
  30. }
  31.  
  32.  

Código: C
  1.  
  2. //Descripcion: Primer ejemplo que muestra el empleo de Archivos de Cabecera
  3. #include <stdio.h>
  4. #include "mates.h"
  5.  
  6. main(){
  7. //Declaracion de Variables
  8. float numA, numB, resultado_parcial;
  9.  
  10. //Lectura de Datos por Teclado
  11. printf("nDame un Numero Real (numA): ");
  12. scanf("%f", &numA);
  13. printf("nDame un Nemero Real (numB): ");
  14. scanf("%f", &numB);
  15.  
  16. //Realizar Operaciones
  17. resultado_parcial = Sumar(numA, numB);
  18. printf("n%f+%f=%f", numA, numB, resultado_parcial);
  19.  
  20. resultado_parcial = Resta(numA, numB);
  21. printf("n%f-%f=%f", numA, numB, resultado_parcial);
  22.  
  23. resultado_parcial = Multiplicar(numA, numB);
  24. printf("n%f*%f=%f", numA, numB, resultado_parcial);
  25.  
  26. resultado_parcial = Dividir(numA, numB, &flag_error);
  27. if(flag_error == -1){
  28.     printf("Error: Division por 0(Cero)");
  29. }else{
  30.       printf("n%f/%f=%f", numA, numB, resultado_parcial);
  31. }
  32.  
  33. }
  34.  
  35.  

Bueno eso es todo, haber si me pueden ayudar, le estaria muy Agradecido.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Problemilla con Divide y Venceras?
« Respuesta #1 en: Sábado 22 de Enero de 2011, 16:29 »
0
Para que sea más fácil ayudarte debes dar más información ¿qué error te arroja? ¿error al compilar o al enlazar? qué compilador/IDE usas o compilas por línea de comandos?

El error que veo está en el código principal: no defines la variable flag_error antes de pasarla como parámetro a la función Dividir.
La imaginación es el límite.
Hardware & Software | Mexchip

Comodoro

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Problemilla con Divide y Venceras?
« Respuesta #2 en: Sábado 22 de Enero de 2011, 20:20 »
0
Hola Amigo Geo, te cuento estoy usando El Entorno de Desarrollo Integrado (IDE) Borland C++ 4.5. La Variable que no habia definido ya esta Declarada.

Pero me sigue arrogando errores, son en total 5, he estado Investigando un Poquillo y he leido que cuando divides el programa en distintos Archivos tienes que Compilar todos los Archivos que componen el Proyecto, lo cual he hecho y nada.

El Archivo en donde Declaro las Funciones y de mas cosas tienen extencion .h es decir, de cabecera, y las otras dos .c

Te pongo una Imagen que muestra los Errores:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problemilla con Divide y Venceras?
« Respuesta #3 en: Sábado 22 de Enero de 2011, 20:49 »
0
Yo no utilizo el Borland C++, sino el Visual C++, pero el error "Undefined Symbol" indica que no encuentra el codigo objeto de las funciones, lo que indica que muy probablemente no estas incluyendo el archivo fuente dentro del proyecto, dices que compilaste los archivos pero ¿Lo estas haciendo por separado? (retorica). De ser asi, ese es el error, al compilar debes poner los tres archivos dentro del mismo proyecto, y compilarlos juntos todos al mismo tiemp (rebuild) o quizas estes deshabilitando algun archivo dentro del proyecto, verifica eso tambien.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Comodoro

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Problemilla con Divide y Venceras?
« Respuesta #4 en: Sábado 22 de Enero de 2011, 21:02 »
0
Hola ProfesorX gracias por la respuesta, te explico lo que he hecho.

1.- Todos los Archivos estan dentro de una misma Carpeta.
   En principio solo Compilaba el Archivo Principal(Programa), lo cual me arrogaba Errores, despues los compile todos. Y sigue con Problamas(Errores). Y si los compile uno por uno.

Ahora la Pregunta que me surge como los Compilo todos a la vez. Me podrias decir Como?  Please?  

Culturilla: En mi pequeña Investigacion me encontre con algo llamado Makefile. El cual soluciona este tipo de Problemillas. Pero me parece un tanto Dificil.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problemilla con Divide y Venceras?
« Respuesta #5 en: Domingo 23 de Enero de 2011, 22:36 »
0
Como dije antes, no trabajo con Borland, sino con Visual Studio, asi que la verdad no se como se haga en Borland.

En Visual Studio, simplemente creas un proyecto, añades todos los archivos de codigo fuente de tu programa al proyecto, y compilas (build).

Quizas alguien con experiencia en borland te pueda decir que hacer.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Problemilla con Divide y Venceras?
« Respuesta #6 en: Domingo 23 de Enero de 2011, 23:45 »
0
El problema está con el enlazador, ya que no encuentra el código objeto de las funciones matemáticas que definiste en el otro archivo.
No uso el entorno Borland y por tanto desconozco el manejo que haga, pero en la gran mayoría de entornos, para poder manejar programas de varios archivos necesitas crear un "proyecto", e ir agregando el código fuente a dicho proyecto, de manera que el entorno pueda distinguir cuál es el archivo principal (donde se encuentra la función main) y después pueda ejecutar los comandos de compilación y enlazado de manera correcta.
Busca en el entorno que usas donde tenga las opciones de proyecto y revisa los parámetros del enlazador, en si, lo que se debería hacer es crear un archivo objeto para cada archivo fuente, por ejemplo, si tus archivos fueran principal.c, funciones.c y funciones.h, la compilación debería generar archivos objeto para principal.c y funciones.c, generalmente principal.obj y funciones.obj, los cuales al final se pasarían como parámetros al enlazador para crear el ejecutable. En tu caso está ocurriendo que no se tiene el código de las funciones matemáticas.

Pasos para generar un ejecutable a partir de archivos principal.c, funciones.c y funciones.h:

compilar principal.c y generar principal.obj
compilar funciones.c y generar funciones.obj
enlazar y generar el ejecutable usando los archivos de código objeto principal.obj y funciones.obj
La imaginación es el límite.
Hardware & Software | Mexchip

Comodoro

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Problemilla con Divide y Venceras?
« Respuesta #7 en: Lunes 24 de Enero de 2011, 01:20 »
0
Gracias a ambos por la ayuda, voy aseguir en la Lucha a ver si por fin me corre el programita!

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Problemilla con Divide y Venceras?
« Respuesta #8 en: Lunes 24 de Enero de 2011, 03:22 »
0
Suerte con ello :).

Por otro lado, ¿estás usando Borland por tu propia cuenta o porque lo usan en la escuela? Porque te recomiendo que le eches un ojo a la versión gratuita de Visual C++: Visual C++ 2010 Express, solo puedo decirte que es un entorno excelente :).
La imaginación es el límite.
Hardware & Software | Mexchip

Comodoro

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Problemilla con Divide y Venceras?
« Respuesta #9 en: Lunes 24 de Enero de 2011, 14:54 »
0
Geo  es por Mi Cuenta, solo por Curiosidad. Deja probar con el Visual C++ haber que tal. Comparo y decido con cual quedarme!

•Parra

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Problemilla con Divide y Venceras?
« Respuesta #10 en: Martes 25 de Enero de 2011, 17:51 »
0
Cita de: "Comodoro"
Geo  es por Mi Cuenta, solo por Curiosidad. Deja probar con el Visual C++ haber que tal. Comparo y decido con cual quedarme!
El Express es la versión gratuita, pero yo te recomiendo la versión Professional, si no quieres gastarte dinero, puedes bajarlo de algun lado que seguro que lo encuentras.

Sobre tu error.. deberia de ver el proyecto, parece algun tipico error "absurdo".. de algun descuido. Porque los codigos que has puesto al principio, no hay ningun error.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problemilla con Divide y Venceras?
« Respuesta #11 en: Martes 25 de Enero de 2011, 18:16 »
0
Cita de: "•Parra"
te recomiendo la versión Professional, si no quieres gastarte dinero, puedes bajarlo de algun lado

Eso mi estimado amigo es pirateria y en este foro no fomentmos la pirateria, asi que si no tienes dinero  para comparte la version profesional, te recomiendo al igual que Geo, bajar la verion Express, que no le pide nada a la profesional, lo mismo que haces en la profesional lo hace la version Express, el generador de codigo es el mismo en las dos versiones, en realidad la profesional solo incluye ciertas conveniencias a los programadores profesionales, como por ejemplo tener en una sola solucion proyectos de Basic, C++ Y C#, conexion y creacion de bases de datos de cualquier manejador de bases de datos utiliando el IDE (las versiones express, solo admiten creacion desde el IDE de bases de datos de SQL Server), depuracion remota, y algunas otras cosas, pero que en realidad no son tan indispensables, de hecho, microsoft al principio pensaba cobrar por las versiones express, pero al final decidio que fuera gratuito, beneficiando a todos los programadores y en general a los estudiantes, ya que es raro que un estudiante tenga los recursos para comprar una version profesional.

Yo mismo utilizo la version Express, y te dire que es fabulosa.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

•Parra

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Problemilla con Divide y Venceras?
« Respuesta #12 en: Martes 25 de Enero de 2011, 19:48 »
0
Cita de: "ProfesorX"
Cita de: "•Parra"
te recomiendo la versión Professional, si no quieres gastarte dinero, puedes bajarlo de algun lado

Eso mi estimado amigo es pirateria y en este foro no fomentmos la pirateria, asi que si no tienes dinero  para comparte la version profesional, te recomiendo al igual que Geo, bajar la verion Express, que no le pide nada a la profesional, lo mismo que haces en la profesional lo hace la version Express, el generador de codigo es el mismo en las dos versiones, en realidad la profesional solo incluye ciertas conveniencias a los programadores profesionales, como por ejemplo tener en una sola solucion proyectos de Basic, C++ Y C#, conexion y creacion de bases de datos de cualquier manejador de bases de datos utiliando el IDE (las versiones express, solo admiten creacion desde el IDE de bases de datos de SQL Server), depuracion remota, y algunas otras cosas, pero que en realidad no son tan indispensables, de hecho, microsoft al principio pensaba cobrar por las versiones express, pero al final decidio que fuera gratuito, beneficiando a todos los programadores y en general a los estudiantes, ya que es raro que un estudiante tenga los recursos para comprar una version profesional.

Yo mismo utilizo la version Express, y te dire que es fabulosa.

Saludos :)
Está bien, perdonen, no tenia idea.

Yo uso Express.. pero a veces, cuando tengo algún error de memoria un poco complicado, Express me dice "hay un error", pero no me dice exactamente que error, o donde está, y tengo que adivinarlo, aunque en el fondo es un poco mejor asi, porque aprendo a no hacerlos.. ya que cuestan repararlos :P