elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Java / Duda programa JAVA al leer archivo binario en: 13 Diciembre 2012, 14:04 pm
Hola, estoy haciendo una práctica final para la asigntaura Programación III de la uni y tengo un problema en una clase (AccionMostrarListaClientes)

Al ejecutar el programa, aparece el menú primario  :D (Operaciones clientes), el submenú  :D(por ahora estoy probando con la opción 1.1) Alta ), introduzco los datos y se crea el archivo  :D (aunque su contenido no es texto, son numeros (supongo que porque es binario no?). Luego vuelvo a ejecutar la opcion 1 y luego la subopción 1.4) Listar clientes. Aquí es cuando me peta :huh:. Me da error a la hora de leer el archivo ya creado y mostrarlo.

Os paso el proyecto entero (sé que hay clases de sobra, pero así son todas mas o menos las que hacemos en clase) y me decís por qué falla esa parte.  :-(

https://www.sugarsync.com/pf/D790980_61560035_852649

Saludos y gracias.   ;-)
2  Programación / Programación C/C++ / Ayuda con estos códigos (Actualizado 22/06/2012) en: 26 Marzo 2012, 20:26 pm
Hola, estoy intentando hacer un ejercicio sobre aritmética racional (sumar, restar, multiplicar y dividir fracciones). Al mostrar los resultados hay que simplificarlos, pero según veo en el depurador, no se pasan correctamente los valores a simplificar a la función. Qué debo cambiar? Seguramente sea muy obvio, pero soy malísimo con punteros y estructuras xD

Gracias.

Código
  1. /* Fuente: RACIONAL.C
  2.    Programa: ARITMETICA BASICA CON NUMEROS RACIONALES
  3.    Descripción: Este programa permite operar con números racionales. Un número racional
  4.    se caracteriza por estar expresado con un denominador y un denominador.
  5.    Las operaciones que contempla son:
  6.      - suma
  7.      - resta
  8.      - producto
  9.      - división
  10.    Además utiliza una función para proporcionar siempre la expresión irreducible del número
  11.    racional
  12. */
  13.  
  14. #include <stdio.h>
  15. #include <math.h>
  16. #include <ctype.h>
  17.  
  18. /* ---------------------------------------------------------- */
  19. /* Definiciones globales                                      */
  20. /* ---------------------------------------------------------- */
  21. typedef struct {
  22.   int num;   /* Numerador   */
  23.   int denom; /* Denominador */
  24. } Racional;
  25.  
  26. /* ---------------------------------------------------------- */
  27. /* Prototipos                                                 */
  28. /* ---------------------------------------------------------- */
  29.   void Modulo_Principal (void);
  30.   void Presentacion (void);
  31.   void LeerRacional (Racional *);
  32.   void MostrarRacional (Racional);
  33.   void SumaRacional (Racional, Racional, Racional *);
  34.   void RestaRacional (Racional, Racional, Racional *);
  35.   void MultiplicaRacional (Racional, Racional, Racional *);
  36.   void DivideRacional (Racional, Racional, Racional *);
  37.   void SimplificaRacional (Racional *);
  38.   int mcd (int, int);
  39.  
  40. /* ---------------------------------------------------------- */
  41.   int main (void) {
  42. /* ---------------------------------------------------------- */
  43.     char respuesta;
  44.  
  45.     system ("cls");
  46.     Presentacion();
  47.     do
  48.       { printf("\n");
  49.         Modulo_Principal();
  50.     printf("\n");
  51.     do
  52.       { printf("¿Otra ejecución (S/N)?: ");
  53.         fflush(stdin); /* Limpia el buffer de teclado */
  54.         respuesta = toupper(getchar());
  55.       }
  56.     while (respuesta != 'S' && respuesta != 'N');
  57.  
  58.       }
  59.     while (respuesta != 'N');
  60.  
  61.     printf("\n");
  62.     return 0;
  63.  
  64. } /* Fin del main */
  65.  
  66.  
  67. /* ---------------------------------------------------------- */
  68.   void Modulo_Principal (void) {
  69. /* ---------------------------------------------------------- */
  70.     Racional rac1, rac2, rsum, rres, rprod, rdiv;
  71.  
  72.     printf("Introduzca el primer número racional:\n");
  73.     LeerRacional(&rac1);
  74.     printf("Introduzca el segundo número racional:\n");
  75.     LeerRacional(&rac2);
  76.  
  77.     printf("\n");
  78.     SumaRacional (rac1, rac2, &rsum);
  79.     printf("Suma.......: ");
  80.     MostrarRacional(rsum);
  81.     printf("\n");
  82.  
  83.     RestaRacional (rac1, rac2, &rres);
  84.     printf("Resta......: ");
  85.     MostrarRacional(rres);
  86.     printf("\n");
  87.  
  88.     MultiplicaRacional (rac1, rac2, &rprod);
  89.     printf("Producto...: ");
  90.     MostrarRacional(rprod);
  91.     printf("\n");
  92.  
  93.     DivideRacional (rac1, rac2, &rdiv);
  94.     printf("División...: ");
  95.     MostrarRacional(rdiv);
  96.     printf("\n");
  97. }
  98.  
  99. /* ---------------------------------------------------------- */
  100.   void Presentacion (void) {
  101. /* ---------------------------------------------------------- */
  102.     puts("ARITMETICA BASICA CON NUMEROS RACIONALES");
  103.     puts("========================================");
  104.     puts("");
  105.     puts("Realiza la suma de números racionales");
  106.     puts("Siempre presenta la expresión irreducible del número racional");
  107.     puts("");
  108. }
  109.  
  110. /* ---------------------------------------------------------- */
  111.   void LeerRacional (Racional *r) {
  112. /* ---------------------------------------------------------- */
  113.       scanf("%d/%d", &(r->num), &(r->denom));
  114. }
  115.  
  116. /* ---------------------------------------------------------- */
  117.   void SumaRacional (Racional a, Racional b, Racional *r) {
  118. /* ---------------------------------------------------------- */
  119.  
  120.       if(a.denom == b.denom){
  121.        (r->num)=(a.num + b.num);
  122.        (r->denom)=(a.denom);
  123.       }else{
  124.        (r->denom)=(a.denom * b.denom);
  125.        (r->num)=(((r->denom/a.denom)*a.num) + ((r->denom/b.denom)*b.num));
  126.       }
  127.  
  128.       SimplificaRacional(&r);
  129. }
  130.  
  131.  
  132. /* ---------------------------------------------------------- */
  133.   void RestaRacional (Racional a, Racional b, Racional *r) {
  134. /* ---------------------------------------------------------- */
  135.  
  136.       if(a.denom == b.denom){
  137.        (r->denom)=(a.denom);
  138.        (r->num) = (a.num - b.num);
  139.       }else{
  140.        (r->denom)=(a.denom * b.denom);
  141.        (r->num)=(((r->denom/a.denom)*a.num) - ((r->denom/b.denom)*b.num));
  142.       }
  143.  
  144.    SimplificaRacional(&r);
  145. }
  146.  
  147.  
  148.  
  149. /* ---------------------------------------------------------- */
  150.   void MultiplicaRacional (Racional a, Racional b, Racional *r) {
  151. /* ---------------------------------------------------------- */
  152.  
  153.       (r->num)=(a.num*b.num);
  154.       (r->denom)=(a.denom*b.denom);
  155.       SimplificaRacional(&r);
  156. }
  157.  
  158.  
  159. /* ---------------------------------------------------------- */
  160.   void DivideRacional (Racional a, Racional b, Racional *r) {
  161. /* ---------------------------------------------------------- */
  162.  
  163.       (r->num)=(a.num*b.denom);
  164.       (r->denom=a.denom*b.num);
  165.       SimplificaRacional(&r);
  166. }
  167.  
  168.  
  169. /* ---------------------------------------------------------- */
  170.   void MostrarRacional (Racional r) {
  171. /* ---------------------------------------------------------- */
  172.     printf("%3d", r.num);
  173.     if (r.denom != 1)
  174.       printf(" /%3d", r.denom);
  175. }
  176.  
  177.  
  178. /* ---------------------------------------------------------- */
  179.   void SimplificaRacional (Racional *r) {
  180. /* ---------------------------------------------------------- */
  181. // Calcula el mcd del numerador y del denominador
  182. // Divide numerador y denominador por su mcd
  183. // Si la fraccion debe llevar segno negativo (num*dem <0)
  184. //    entonces el signo se coloca al numerador
  185.    int min;
  186.  
  187.       min=mcd(r->num, r->denom);
  188.       r->num = (r->num)/min;
  189.       r->denom =(r->denom)/min;
  190.       if((r->num * r->denom)<0){
  191.        r->num = - r->num;
  192.       }
  193. }
  194.  
  195.  
  196.  
  197. /* ---------------------------------------------------------- */
  198.   int mcd (int n, int d) {
  199. /* ---------------------------------------------------------- */
  200. /* Calcula el máximo común dividor de n y d */
  201. /* Precisa que d sea distinto de cero       */
  202. /* Precisa que n > d                        */
  203.    int c;
  204.  
  205.       if(n!=0 && d!=0 && n>d){
  206.        do{
  207.            c=n%d;
  208.            if(c!=0){
  209.                n=d;
  210.                d=c;
  211.            }
  212.        }while(c!=0);
  213.       }else{
  214.        return;
  215.       }
  216.  
  217. return d;
  218. }

EDIT: Para evitar abrir más hilos, pongo en este todas mis dudas personales. Nuevo programa añadido el 22/06/2012.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines