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 - amchacon

#621
Programación C/C++ / Re: Munu
20 Julio 2013, 23:19 PM
Lo primero sería indentar bien el código:

Código (cpp) [Seleccionar]
#include <iostream>
#define MAX 1
using namespace std;

int op; //  opcion a escoger
int Salir = 0; // salir del programa
int numero;
float area; // El area a guardar
float lado, base, alt; // Los datos a pedir se guardaran en estas variables

int main ()
{
    do
    {
        cout << " M E N U " << endl << endl;
        cout << "1-. Tabla de Multiplicar" << endl;
        cout << "2-. Area y Perimetro de un rectangulo" << endl;
        cout << "3-. Llenar Vector Curso" << endl;
        cout << "4-. Salir" << endl;
        cout << "Elegir una opcion : ";
        cin >> op; // leer valor y guardar
        cout << endl << endl;

        switch (op)   // reviso el valor de Opc
        {

        case 1: //Opcion 1
            cout<<"Ingrese un numero: ";
            cin>>numero;
            cout<<"\nTabla del "<<numero <<endl;
            cout<<endl;
            for(int i = 1; i < 11; i++)
            {
                cout<<i<<" * " <<numero << " = " << i * numero <<endl;
                cout<<endl;
            }

        case 2: // Opcion 2
            cout << "RECTANGULO" << endl << endl;
            cout << "Ingrese un valor para la base : " ;
            cin >> base; // Guardo la base del rectangulo
            cout << "Ingrese un valor para la altura : " ;
            cin >> alt; // Guardo la altura del rectangulo
            area = base * alt; // Se calcula y guarda el area
            cout << "El Area del rectangulo dado es de : " << area;
            cout << endl << endl;
            break;

        case 3: // Opcion 3

            break;


        case 4: // Opcion 4
            Salir = 1; // Esto indica que se pretende salir
            break;

        default: // Otra letra
            cout << "Esa opcion no existe" << endl << endl;
            break;
        }

    }
    while (Salir == 0);

    system("pause");
   
    return 0;
}


Al indentar bien el código, se ven un error en el case 1 (falta un break).

Otra cuestión esque NO deberías usar variables globales:

Código (cpp) [Seleccionar]
#include <iostream>
#define MAX 1

using namespace std;

int main ()
{
    int op; //  opcion a escoger
    int Salir = 0; // salir del programa
    int numero;
    float area; // El area a guardar
    float lado, base, alt; // Los datos a pedir se guardaran en estas variables

    do
    {

        cout << " M E N U " << endl << endl;
        cout << "1-. Tabla de Multiplicar" << endl;
        cout << "2-. Area y Perimetro de un rectangulo" << endl;
        cout << "3-. Llenar Vector Curso" << endl;
        cout << "4-. Salir" << endl;
        cout << "Elegir una opcion : ";
        cin >> op; // leer valor y guardar
        cout << endl << endl;

        switch (op)   // reviso el valor de Opc
        {

        case 1: //Opcion 1
            cout<<"Ingrese un numero: ";
            cin>>numero;
            cout<<"\nTabla del "<<numero <<endl;
            cout<<endl;
            for(int i = 1; i < 11; i++)
            {
                cout<<i<<" * " <<numero << " = " << i * numero <<endl;
                cout<<endl;
            }
           
            break;

        case 2: // Opcion 2
            cout << "RECTANGULO" << endl << endl;
            cout << "Ingrese un valor para la base : " ;
            cin >> base; // Guardo la base del rectangulo
            cout << "Ingrese un valor para la altura : " ;
            cin >> alt; // Guardo la altura del rectangulo
            area = base * alt; // Se calcula y guarda el area
            cout << "El Area del rectangulo dado es de : " << area;
            cout << endl << endl;
            break;

        case 3: // Opcion 3

            break;


        case 4: // Opcion 4
            Salir = 1; // Esto indica que se pretende salir
            break;

        default: // Otra letra
            cout << "Esa opcion no existe" << endl << endl;
            break;
        }

    }
    while (Salir == 0);




    system("pause");
   
    return 0;
}


Por último pondría cada case en una función distinta (por ejemplo, en el case 1 se llama a la funcion ingresarnumero()).

En cuanto a:

Citartengo mis dudas de como hacerlo con estructuras para que sea generado con la función menú.

Tengo que decir que no entiendo lo que quieres hacer, lo que tienes hecho funciona pero tienes que corregir esos fallitos que te he puesto antes.
#622
¿46 segundos?  :huh: A mí me ha tardado 2-3 segundos el método clásico.

Excelente código, aunque voy a ser un poco troll y voy a mejorar el método clásico:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MIN 37
#define MAX 42

typedef unsigned long long fibo_t;

unsigned long long llamadas_clasico;
unsigned long long llamadas_optimizado;

#define MAX_CACHE 33

unsigned long long Fibonaci_Cache[MAX_CACHE] = {1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597
,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,31524578};

fibo_t fibo_clasico(fibo_t n)
{
    llamadas_clasico++;

    if(n < MAX_CACHE)
        return Fibonaci_Cache[n];

    return fibo_clasico(n - 1) + fibo_clasico(n - 2);
}

fibo_t fibo(fibo_t n)
{
   llamadas_optimizado++;

   if(n == 0)
       return 0;
   if(n == 1)
       return 1;
   if(n == 2) //Evitamos recurion infinita si n == 2
       return 1;

   if(n % 2) //n impar y mayor que 2
   {
       fibo_t k1,k2;

       k1 = fibo((n + 1) / 2);
       k2 = fibo((n - 1) / 2);

       return k1 * k1 + k2 * k2;
   }

   //n par y mayor que 2
   return fibo(n / 2) * (fibo((n / 2) + 1) + fibo((n / 2) - 1));
   //si n == 2 fibo(n / 2) * fibo(n / 2 + 1) = fibo(1) * fibo(2)
   //habria recursion infinita si no se pone n == 2 como caso base
}

int main(int argc, char *argv[])
{
   fibo_t i,valor;
   time_t ini;

   printf("Fibonacci clasico:\n");

   ini = time(NULL);

   for(i = MIN ; i < MAX ; i++)
   {
       llamadas_clasico = 0;
       valor = fibo_clasico(i);

       printf("  fibo_clasico(%llu) = %llu (%llu llamadas)\n",i,valor,llamadas_clasico);
   }

   printf("%llu segundos\n",time(NULL) - ini);

   printf("\nFibonacci optimizado:\n");

   ini = time(NULL);

   for(i = MIN ; i < MAX ; i++)
   {
       llamadas_optimizado = 0;
       valor = fibo(i);

       printf("  fibo(%llu) = %llu (%llu llamadas)\n",i,valor,llamadas_optimizado);
   }

   printf("%llu segundos\n",time(NULL) - ini);

   return 0;
}


Ala, ahora los tiempos y las llamadas deberían ser parecidos :xD
#623
Cita de: ankora45 en 20 Julio 2013, 13:22 PMdiremos que el menu esta en el centro se visualiza  a pantalla completa pero lo blanco estaria en negro y el raton no puede pasar, el puntero del raton son esas dos llaves encima de comenzar.


Lo primero, te voy a enseñar a sacar una captura de pantalla porque es más cómodo para todos:

- Pulsa la tecla "Impr pant" (debería estar al lado de Bloq Despl).
- Abre el paint, click derecho -> pegar.

(Para hacer capturas de una sola ventana pulsa ALT + impr pant).

Cita de: ankora45 en 20 Julio 2013, 13:22 PM
la resolucion de mi pantalla es de 1366*768 pero me refiero que al poner imagenes de la resolucion 640*480 se ve bien  y a pantalla completa pero se ve el menu en medio de la pantalla y dos barras negras a los lados y me gustaria que fuera por toda la pantalla xD no me he explicado bien aver si me entiendes de igual modo adjunto imagen:
¿Te refieres a que has puesto una imagen de 640x480 en una resolución de 1280x720? Pues claro que no lo vas a ver entero, tienes que usar una imagen de su tamaño *_*
#624
Programación C/C++ / Re: ¿Puedo hacer esto?
20 Julio 2013, 21:11 PM
Ah que es un error de ejecución... Pues entonces, comprueba si estan todas las imagenes.

Por cierto, no tienes que poner la ruta entera (tampoco es recomendable). Si la imagen está en la misma carpeta que el ejecutable te basta con poner el nombre:

Código (cpp) [Seleccionar]
FONDO = load_bitmap("FONDO.bmp", NULL);

Si está en una subcarpeta, puedes hacerlo asi:

Código (cpp) [Seleccionar]
FONDO = load_bitmap("./imagenes/FONDO.bmp", NULL);
#625
Por supuesto que voy a recomendar SFML xD.

¿Que resolucion de pantalla tienes? ¿Has probado ejecutarlo en pantalla completa? (estoy en el movil y no me acuerdo del comando exacto, pero era cambiando el gfx_normal por gfx_FullScreen o algo asi).

¿Has comprobado tambien que los punteros bitmap no tengan un valor nulo?
#626
Programación C/C++ / Re: ¿Puedo hacer esto?
20 Julio 2013, 12:25 PM
El boton derecho se hace con mouse_b & 2. Ademas tienes que poner un descanso en el bucle rest(100).

Aparte de eso, que error te da.
#627
Cita de: Caster en 17 Julio 2013, 17:33 PM
Buenas, he estado leyendo sobre arrays y punteros en C y he leido no es obligatorio pasar todo el array a una funcion sino que se puede pasar solo una parte, por ejemplo.
Los arrays no se pasan como parámetro a una función, en su lugar se pasa un puntero a su primer elemento (todo esto de forma transparente para ti).

Eso quiere decir, que da igual que uses 10,20,30 elementos... No estás copiando el array asi que en cuestión de rendimiento te da igual.

Otra cosa esque le pases otro parámetro para orientarte cuantos elementos son... Ese es el método que te ha propuesto eferion.
#628
Cita de: Oblivi0n en 17 Julio 2013, 18:20 PM
Depende del compilador se almacenan de forma lineal o no.
Perdona pero no, cualquier compilador actual convierte tu matriz en un vector unidimensional. Por esa razón tienes que indicar el número de columnas cuandos pasas una matriz como parámetro a una función.

Otra cosa son las matrices "dinámicas" que creas con malloc/new. Se suelen hacer con un array de punteros (y ahí si hay perdida de rendimiento porque tienes que redireccionar dos veces).
#629
Cita de: OmarHack en 17 Julio 2013, 16:55 PM
Ahora la última pregunta, ¿entonces porque en el foro de retrodev usamos SDL? Por lo que me cuentas Smfl le da un repaso a Sdl.
Porque Kaltorak solo sabía usar SDL.
#630
Cita de: OmarHack en 17 Julio 2013, 16:50 PMy es también multiplataforma y acepta opengl?
Sí y sí:
http://www.sfml-dev.org/

Además permite linkado estático (es decir, incrustar la librería en el ejecutable y no tener que depende de una DLL).