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ú

Temas - LoLo2207

#1
Java / Duda programa JAVA al leer archivo binario
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
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.

/* Fuente: RACIONAL.C
  Programa: ARITMETICA BASICA CON NUMEROS RACIONALES
  Descripción: Este programa permite operar con números racionales. Un número racional
  se caracteriza por estar expresado con un denominador y un denominador.
  Las operaciones que contempla son:
    - suma
    - resta
    - producto
    - división
  Además utiliza una función para proporcionar siempre la expresión irreducible del número
  racional
*/

#include <stdio.h>
#include <math.h>
#include <ctype.h>

/* ---------------------------------------------------------- */
/* Definiciones globales                                      */
/* ---------------------------------------------------------- */
typedef struct {
  int num;   /* Numerador   */
  int denom; /* Denominador */
} Racional;

/* ---------------------------------------------------------- */
/* Prototipos                                                 */
/* ---------------------------------------------------------- */
  void Modulo_Principal (void);
  void Presentacion (void);
  void LeerRacional (Racional *);
  void MostrarRacional (Racional);
  void SumaRacional (Racional, Racional, Racional *);
  void RestaRacional (Racional, Racional, Racional *);
  void MultiplicaRacional (Racional, Racional, Racional *);
  void DivideRacional (Racional, Racional, Racional *);
  void SimplificaRacional (Racional *);
  int mcd (int, int);

/* ---------------------------------------------------------- */
  int main (void) {
/* ---------------------------------------------------------- */
    char respuesta;

    system ("cls");
    Presentacion();
    do
      { printf("\n");
        Modulo_Principal();
    printf("\n");
    do
      { printf("¿Otra ejecución (S/N)?: ");
        fflush(stdin); /* Limpia el buffer de teclado */
        respuesta = toupper(getchar());
      }
    while (respuesta != 'S' && respuesta != 'N');

      }
    while (respuesta != 'N');

    printf("\n");
    return 0;

} /* Fin del main */


/* ---------------------------------------------------------- */
  void Modulo_Principal (void) {
/* ---------------------------------------------------------- */
    Racional rac1, rac2, rsum, rres, rprod, rdiv;

    printf("Introduzca el primer número racional:\n");
    LeerRacional(&rac1);
    printf("Introduzca el segundo número racional:\n");
    LeerRacional(&rac2);

    printf("\n");
    SumaRacional (rac1, rac2, &rsum);
    printf("Suma.......: ");
    MostrarRacional(rsum);
    printf("\n");

    RestaRacional (rac1, rac2, &rres);
    printf("Resta......: ");
    MostrarRacional(rres);
    printf("\n");

    MultiplicaRacional (rac1, rac2, &rprod);
    printf("Producto...: ");
    MostrarRacional(rprod);
    printf("\n");

    DivideRacional (rac1, rac2, &rdiv);
    printf("División...: ");
    MostrarRacional(rdiv);
    printf("\n");
}

/* ---------------------------------------------------------- */
  void Presentacion (void) {
/* ---------------------------------------------------------- */
    puts("ARITMETICA BASICA CON NUMEROS RACIONALES");
    puts("========================================");
    puts("");
    puts("Realiza la suma de números racionales");
    puts("Siempre presenta la expresión irreducible del número racional");
    puts("");
}

/* ---------------------------------------------------------- */
  void LeerRacional (Racional *r) {
/* ---------------------------------------------------------- */
      scanf("%d/%d", &(r->num), &(r->denom));
}

/* ---------------------------------------------------------- */
  void SumaRacional (Racional a, Racional b, Racional *r) {
/* ---------------------------------------------------------- */

      if(a.denom == b.denom){
       (r->num)=(a.num + b.num);
       (r->denom)=(a.denom);
      }else{
       (r->denom)=(a.denom * b.denom);
       (r->num)=(((r->denom/a.denom)*a.num) + ((r->denom/b.denom)*b.num));
      }

      SimplificaRacional(&r);
}


/* ---------------------------------------------------------- */
  void RestaRacional (Racional a, Racional b, Racional *r) {
/* ---------------------------------------------------------- */

      if(a.denom == b.denom){
       (r->denom)=(a.denom);
       (r->num) = (a.num - b.num);
      }else{
       (r->denom)=(a.denom * b.denom);
       (r->num)=(((r->denom/a.denom)*a.num) - ((r->denom/b.denom)*b.num));
      }

   SimplificaRacional(&r);
}



/* ---------------------------------------------------------- */
  void MultiplicaRacional (Racional a, Racional b, Racional *r) {
/* ---------------------------------------------------------- */

      (r->num)=(a.num*b.num);
      (r->denom)=(a.denom*b.denom);
      SimplificaRacional(&r);
}


/* ---------------------------------------------------------- */
  void DivideRacional (Racional a, Racional b, Racional *r) {
/* ---------------------------------------------------------- */

      (r->num)=(a.num*b.denom);
      (r->denom=a.denom*b.num);
      SimplificaRacional(&r);
}


/* ---------------------------------------------------------- */
  void MostrarRacional (Racional r) {
/* ---------------------------------------------------------- */
    printf("%3d", r.num);
    if (r.denom != 1)
      printf(" /%3d", r.denom);
}


/* ---------------------------------------------------------- */
  void SimplificaRacional (Racional *r) {
/* ---------------------------------------------------------- */
// Calcula el mcd del numerador y del denominador
// Divide numerador y denominador por su mcd
// Si la fraccion debe llevar segno negativo (num*dem <0)
//    entonces el signo se coloca al numerador
   int min;

      min=mcd(r->num, r->denom);
      r->num = (r->num)/min;
      r->denom =(r->denom)/min;
      if((r->num * r->denom)<0){
       r->num = - r->num;
      }
}



/* ---------------------------------------------------------- */
  int mcd (int n, int d) {
/* ---------------------------------------------------------- */
/* Calcula el máximo común dividor de n y d */
/* Precisa que d sea distinto de cero       */
/* Precisa que n > d                        */
   int c;

      if(n!=0 && d!=0 && n>d){
       do{
           c=n%d;
           if(c!=0){
               n=d;
               d=c;
           }
       }while(c!=0);
      }else{
       return;
      }

return d;
}


EDIT: Para evitar abrir más hilos, pongo en este todas mis dudas personales. Nuevo programa añadido el 22/06/2012.