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ú

Mensajes - MAFUS

#491
Apuesto a que no te va a funcionar por diámetro.
#492
Pues así como está no.
Tu hace dos cosas:
Declara L1 como Lista.
Define L2 como Lista de tamaño nodo.
#493
Programación C/C++ / Re: Cajero automatico
13 Marzo 2018, 23:23 PM
No soy de C++, lo he visto de pincelada, lo mio es el C.

Pero a mi modo de ver el cliente solo debería guardar su saldo, aumentarlo o disminuirlo. Para más seguridad estas deberían ser incluso operaciones privadas a las que no se pudieran acceder desde ningún lugar, solo desde el cajero. Deberían ser funciones amigas.

El encargado de ingresar, retirar o ver el capital del cliente es el cajero y de éste dependen las reglas para hacerlo. Por ejemplo: si se intenta sacar más del capital que hay la operación falla.

Algo así:
Código (C++) [Seleccionar]
#include <iostream>
using namespace std;

class Cliente{
public:
   Cliente() {
       capital = 0;
   }

   double obtenerCapital() {
       return capital;
   }

   void ingreso(double cantidad) {
       capital += cantidad;
   }

   void retiro(double cantidad) {
       capital -= cantidad;
   }

private:
   double capital;
};

class Cajero {
public:
   Cajero() {
       _cliente = NULL;
   }

   void nuevoCliente(Cliente &cliente) {
       _cliente = &cliente;
   }

#define SI_HAY_CLIENTE() if(!_cliente) { \
   cout << "No hay un cliente definido para realizar esta accion." << endl; \
   return; } else ;

#define SI_TIENE_PERMISO(permiso, mensajeError) if(!permiso) { \
   cout << "Operacion denegada.\nRazon: " << mensajeError << "\n" << endl; \
   return; } else ;

   void ingreso(double cantidad) {
       bool permiso = true;
       string razon = "";

       SI_HAY_CLIENTE() {
           // Condiciones que permiten el ingreso. Si no es posible
           // hacer permiso false y rellenar la razón

           SI_TIENE_PERMISO(permiso, razon) {
               _cliente->ingreso(cantidad);
               cout << "Ingresados " << cantidad << " creditos.\n" << endl;
           }
       }
   }

   void retiro(double cantidad) {
       bool permiso = true;
       string razon = "";

       SI_HAY_CLIENTE() {
           // Condiciones que permiten el retiro. Si no es posible
           // hacer permiso false y rellenar la razón
           // Un ejemplo sería que no hubiera suficiente capital

           if(cantidad > _cliente->obtenerCapital()) {
               permiso = false;
               razon = "No hay capital suficiente para realizar esta operacion.";
           }

           SI_TIENE_PERMISO(permiso, razon) {
               _cliente->retiro(cantidad);
               cout << "Retirados " << cantidad << " creditos de la cuenta.\n" << endl;
           }
       }
   }

   void obtenerCapital() {
       SI_HAY_CLIENTE()
           cout << "Capital actual: " << _cliente->obtenerCapital() << " creditos.\n" << endl;
   }

#undef SI_TIENE_PERMISO
#undef HAY_CLIENTE

   void cerrarCliente() {
       _cliente = NULL;
   }

private:
   Cliente *_cliente;
};

int main() {
   Cliente p1;
   Cajero cajero;

   cajero.nuevoCliente(p1);

   cajero.ingreso(2000);
   cajero.retiro(500);
   cajero.obtenerCapital();
   cajero.ingreso(100);
   cajero.obtenerCapital();
   cajero.retiro(3000);
   cajero.obtenerCapital();
   cajero.cerrarCliente();
   cajero.obtenerCapital();

   return 0;
}
#494
Tres pistas:
1. En C una sentencia es falsa si se evalúa a 0 y es verdadera si se evalúa diferente a 0.
2. while ejecuta su código asociado si la condición es cierta y repite.
3. scanf devuelve el número de conversiones realizadas con éxito, es decir, en caso de no poder hacer ninguna devuelve 0.
#495
Sigo creyendo que es un problema de mala interpretación. Viendo algunas soluciones al tablero de las 8 reinas siempre hay algunas de ellas alineadas, aunque sea a dos saltos de caballo.




Se me ha ocurrido. A ver si en línea recta no quiere decir que el intervalo de de tres reinas significa la misma función de recta entre las tres:
Por ejemplo un salto de caballo [+2, -1], o un salto un poco más largo [+3, +2]. Entonces sí se podría decir que están alineadas por una recta, pero tal y como muestras en el ejemplo de tu ejercicio pues no es una recta; es una línea pero no es recta.
#496
La alineación se refiere, cómo has dicho, en la misma diagonal, columna o fila. Para lo demás está bien. Si ya lo tienes resuelto así ya has terminado.
#497
No.
Supongamos que mayor vale 100.
Consigues la nota de un alumno, supongamos 50.

Si comparas si nota > mayor (50 > 100) siempre saldrá como más grande mayor.

En cambio si haces, en un principio, que mayor vale 0, en la primera comparación harás nota > mayor (50 > 0), cosa que será verdadera y podrás hacer mayor = nota.
#498
Empieza definiendo notamenor=100 y notamayor=0. En el for, por cada nota válida, si la nota > notamayor, actualizas notamayor = nota; y si la nota < notamenor, actualizas notamenor = nota.
#499
Programación C/C++ / Re: duda
9 Marzo 2018, 13:47 PM
Es al revés p1.wheight. Primero va la variable de tipo estructura (que es quien engloba) y después su variable interna.
#500
C no retorna múltiples valores, solo uno.
Deberás pasar datos por referencia o hacer las variables n1, n2 y n3 globales.