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

#1
Hola, de nuevo. Escribo este post para ver si me pueden ayudar en estos dos problemas. Bien, comencemos por el primero: necesito generar un listado un listados de años de bisiestos, es decir me piden que a partir del año 1900 y hasta un año, a ingresar por el usuario, se impriman un listado con todos los años bisiestos que han transcurrido.


     /*  printf("Introduzca el año en el que nos encontramos\n");
         scanf("%d", &numero);


         do{
            resultado=serieA (numero);
       
             printf("%d\n",resultado);
}
         while(resultado<numero);


Este es el trozo de codigo que he hecho, por supuesto las variables y funciones estan bien declaras etc etc(no las incluyo para que asi esto no sea demasiado largo. Añado que dentro funcion serieA (numero);, hay otra funcion llamada bisiesto(n); que calcula el año bisiesto(la cual funciona bien, por ella no hay problema).

Dicho esto mi pregunta es: ¿como debo estructurar este programa para que me imprima los años bisiestos desde el 1900 al año que yo quiera? Y, ¿ como deberia hacer la funcion serieA(); que la que me de dar pie a este programa?

Y aprovecho para preguntar esta duda (mucho mas corta) y asi no hacer dos teas para nada: he crreado otro programa que hace un juego de cara o cruz jugando al doble o nada:



                     i=1;
                   
               
                     printf("\nSi sale Cara ganas el Doble si sale Cruz lo pierdes Todo\n");
                     
                 
                      printf("\nIntroduce la cantidad a Apostar :  ");
                        scanf("%d",&numero);
                     

                    do{
                     resultado=generar();
                       
                   
                      switch(resultado){
                         case 0:
                            total=0;
                  printf("\nLo Siento ha perdido Todo, Su cantidad es : 0\n\n ");
                         
                            break;
                         
                         case 1:
                             i=i*2;
                             total=numero*i;
                  printf("\nEnorabuena, su Cantidad es : %.2f\n\n ",total);
                              break;
                     
}                       printf("Si desea seguir apostando pulse 1, en caso contrario pulse 0\n");
                        scanf("%d",&opcion);
                         
                    }while(opcion!=0);

                 
                          break;

}


La funcion resultado=generar(); me genera 1 o 0 segun sea cara cruz y hace que si ganes o pierdas te pregunte si quieres jugar otra vez con la cantidad total ganada( si has ganado la primera vez apostando 2 la segunda jugaras con cuatro, es decir con todo lo ganado). Quisiera hacer que al perder y al elegir volver a jugar te diese la opcion de volver a introducir una cantidad como al principio, ya que ganas pierdes y vuelves a ganar en la tercera apuesta sigue apostando lo total ganado, es decir si auesto 2, gano y tengo 4, pierdo en la siguiente apuesta si continuo jugando vuelve a apostar 4, y mi intencion y rebanamiento de sesos durante mucho tiempo ha sido que vuelva a pedirte una cantidad a apostar. He probrado con estructuras do while pero no lo he encontrado el punto exacto.

Perdonen que sea tan extenso pero queria explicarme bien, llevo dos dias intentando solucionar estos problemas y nada!

Gracias por adelantado!!
#2
Muchisimas gracias a todos!!! Todo solucionado!!
#3
Uffff me habeis salvado!! Muchisimas gracias ya mas o menos veo que me anda todo!  Pero no me termina de andar esto, son errores de funcione y me suena a mi que esta en los return que estan mal colocados que pensais¿?
#include <stdio.h>

void menu(void);
int factorial(int n);
int primo(int n);
int main() {

  int numero,opcion, resultado;
  menu();

  scanf("%d",&opcion);

  switch (opcion){
   
   case 1:
       printf("Introduzca el número\n");
       scanf("%d", &numero);
       resultado = factorial(numero);
       printf("El factorial de %d es %d\n", numero, resultado);
       break;

   case 2:
       printf("Introduzca el número\n");
       scanf("%d", &numero);

       resultado=primo(numero);

      if(resultado==1){
         printf("EL numero es primo\n");
}
      else{
         printf("EL numero no es primo \n");
}
      break;
   }
return 0;
}



void menu(){

printf( "Marque la opción que prefiera\n");
printf( "0 Salir del programa\n");
printf( "1 Calcular el factorial de una número\n");
printf( "2 Comprobar si un número es primo\n");
printf( "3 Calcular el mínimo común múltiplo\n");
printf( "4 Calcular el máximo común divisor\n");
printf( "5 Determinar si un año es bisiesto\n");
printf( "6 Mostrar los años bisiestos\n");
printf( "7 Mostrar número de dias de un mes y año\n");
printf( "8 Calcular números combinatorios\n");
printf( "9 Operar números racionales\n");
printf( "10 Jugar al doble o nada\n");

}




int factorial (int n){

int fact, x;

x=1;
fact=1;

while(x<=n){

fact = fact*x++;

}
return fact;
}



int primo(int n){

int x=2;
       
while(x<n){

   while(n%x!=0){

          x=x++;

    if(n==x)                         
     
      return 1;

    else
     
      return 0;
}
}
}

#4
Muchas gracias por las respuestas, pero sigo sin verlo, se que comento errores de bulto y trabajo para corregirlos, y perdonad por ser asi de malo xd.

No consigo corregirlo y no termino de entender los errores, he leido esto, he releido los apuntes, internet... y no consigo dar ese pasito para sacarlo uff.

Reformulo la pregunta para ver si asi me entero yo:

int main() {
  menu();
  /* ...... */
  switch(opcion) {
     case 1:
          funcion1(); /* llamo a funcion */
     /* ........*/
    case 2:
         funcion2();
   /* ......... */
  }

return 0;
}


Esa estructura es me gusta y viéndolo desde tu razonamiento tienes toda la razon. Pero sigo sin ver un par de cosas. Yo creo un funcion cualquiera para después, según el numero marcado y mediente el switch, esta se ejecute pero que me pida valores de una/s variables. La verdad es que me pierdo porque no se si esas variables, a las que el usuario debe de dar un valor, deben de ser declaradas dentro del cada caso del switch o en cada función, no se si me explico.

Y al compilar hay un error que no se a que se refiere a ver si vosotros lo comprendeis:  una etiqueta sólo puede ser parte de una declaración y una declaración no es un enunciado.

Vuelvo a decir que sera por incompetencia mia, no lo dudo, pero sigo sin verlo, tengo hechas todas las funciones, mi unico problema esque no se llamarlas adecuadamente en el switch, haciendo asi un menu opciones, y donde tengo que declarar las variables a las cuales el usuario de debe dar valor.

Muchas gracias de antemano! Agradeceria un ejemplo practico para verlo mas claro y poder extrapolarlo a mis funciones. Por supuesto, ni mucho digo que tenga q ser mi codigo, con que sea que te pida dos numero para sumar me basta me sobra y me doy con un canto en los dientes.
#5
Programación C/C++ / Duda llamar funciones
9 Enero 2013, 21:27 PM
Hola, lo primero saludarles por primera vez ya que me acabo de registrar. Lo segundo decidles que procurare no cagarla con las normas del foro.

Bueno pues al lio: estoy haciendo una practica en la que me obligan a hacer un menu mediante un switch e invocar distintas funciones que he tenido que crear yo mismo. Tras largo tiempo tiempo pensando he decidio preguntar por aqui cua es mi error (errores mas bien) en este codigo:

#include<stdio.h>
int factorial(int n);

int main (void){

void menu();

}



void menu(){

int opcion;

printf( "Marque la opción que prefiera\n");
printf( "0 Salir del programa\n");
printf( "1 Calcular el factorial de una número\n");
printf( "2 Comprobar si un número es primo\n");
printf( "3 Calcular el mínimo común múltiplo\n");
printf( "4 Calcular el máximo común divisor\n");
printf( "5 Determinar si un año es bisiesto\n");
printf( "6 Mostrar los años bisiestos\n");
printf( "7 Mostrar número de dias de un mes y año\n");
printf( "8 Calcular números combinatorios\n");
printf( "9 Operar números racionales\n");
printf( "10 Jugar al doble o nada\n");
***(solo les pido ayuda la opcion 1 porque las demas son de igual manera)
scanf("%d",&opcion);



switch (opcion){

   

   case 1:
       
     int numero, resultado;
       printf("Introduzca el número");
        scanf("%d", &n);
        resultado = factorial(n);
      printf("El factorial de %d es %d", numero, resultado);
       
       return 0;

      break;



     default:
       printf("Válido\n");

}




int factorial(int n){
if(n > 1)
return n * factorial(n-1);
return 1;

}


No hace falta decir que esta mal, pero no consigo ver y resolver el problema, se que no gacen tarea de los demas pero si me guian sobre esta las otras nueve invocaciones seran mas sencillas dado que son del mismo tipo y dificultad.

Por cierto pra matar dos pajaros de un tiro: ¿como puedo invocar una funcion dentro de otra funcion para despues invocarla en main?

MUchas gracias y espero haberme explicado medianamente bien, saludos y gracias de ante mano.