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

#271
En el otro hilo me dijeron lo mismo, y al final quedo asi el codigo:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main() {

uint64_t segundos, minutos, horas, dias;

printf("Introduce los segundos: ");
scanf("%llu", &segundos);

minutos=segundos/60;
puts((segundos%=60) ? "N" : "S");

horas=minutos/60;
puts((minutos%=60) ? "N" : "S");

dias=horas/24;
puts((horas%=24) ? "N" : "S");

printf("%llu d, %llu h, %llu m, %llu s\n", dias, horas, minutos, segundos);

return 0;
}


Es el codigo del ejercicio completo, por eso hay alguna parte que no tiene nada que ver son este hilo.

Saludos
#272
Cita de: eaguel en  1 Noviembre 2012, 13:44 PM
Tenéis razón si introduzco un número raro antes de uno correcto ya no se corta con el 0, lo he corregido introduciendo otra vez el if ese del principio dentro del bucle.

No tienes porque poner dos veces el if, lee la solucion que te ha dejado BatchianoISpyxolo mas arriba.

Saludos
#273
Cita de: BatchianoISpyxolo en  1 Noviembre 2012, 12:41 PM
Disculpa, eso pasa cuando no lees los códigos xD.

Otra cosa, el do while va a terminar cuando mes sea igual a 0... Pero dentro de ese ciclo tienes otro ciclo que verifique que introduces números entre 1 y 12 para mes... Nunca va a terminar...

while (mes < ENERO || mes > DICIEMBRE) {..}

Ahí pides un número entre 1 y 12 para mes... Por tanto al llegar al final del do while, mes nunca será 0.

Si lo colocas ahí ya va a funcionar como quieres:

while ((mes < ENERO-1) || mes > DICIEMBRE) {..}

Ahi si que tienes razon, si la primera vez introduces un mes incorrecto, despues ya no saldria del bucle, con tu solucion es suficiente.

Saludos
#274
Cita de: DickGumshoe en  1 Noviembre 2012, 00:10 AM

Normalmente se devuelve 0 cuando el programa termina correctamente u otro número si hay un error. Con el return 0 funcionará, pero como técnica sería mejor poner otro número (normalmente 1 o -1).

Saludos.

Pero si no pones 0, el programa no termina, y lo que esta tratando de buscar eaguel es que el programa se cierre.

Cita de: BatchianoISpyxolo en  1 Noviembre 2012, 00:12 AM
No he leído el código pero además si dentro del while no tuviera una instrucción que modificara la variable de control del bucle, este se iría a infinito. Porque tiene return y termina la ejecución de la función que si no... Catapún xD

Por cierto:
if (mes == 0) return 0;

Es una redundancia, lo lógico sería escribir:

return mes

Por otra parte, dejas el return en una bifurcación, que puede ser tomada o no. Problema avistado xD

¡Saludetes!

Sera una redundancia, pero si pones return mes el programa no se cierra, y el return 0 esta puesto para que se cierre si introduces el numero 0, lo que no entiendo es lo de la bifurcacion, el return 0 solo se ejecutara si introduces el numero 0, y despues el otro return 0 si la ejecucion del programa es correcta, no hay mas.

Saludos
#275
Programación C/C++ / Re: Ayuda con ejercicio en C
1 Noviembre 2012, 00:01 AM
Vale, ahora lo entiendo todo perfectamente, me gusta mas el codigo de xiruko, es simple, no es largo y facil de entender, muchas gracias a todos por la ayuda.

Saludos
#276
Si, el codigo funciona, el uso de return 0 en medio del programa nose si es correcto, supongo que si, pero el bucle while que contiene return 0, no tiene sentido que sea un bucle, porque esa sentencia termina el programa, entonces solo se ejecutara una vez, lo mas logico seria con un if, cambia esto:

while (mes == 0)
     {
      return 0;
     }


Por esto:

if (mes == 0) return 0;

Saludos
#277
Yo opino lo mismo, de hecho en alguna duda que han posteado y yo posiblemente supiese aydar me negue a intentar descifrar codigos sin tabulacion ni etiquetas Geshi ni nada, un codigo bien organizado y bien posteado atrae mas para ayudar.

Saludos
#278
Gran fallo mio, exactamente era ese el fallo, ando algo espeso ahora mismo  :xD

Saludos y muchas gracias
#279
Lo que yo he entendido, es que quieres que al introducir 0 en los meses cierre el programa, esto se hace facilmente añadiendo esto despues del scanf que pide el numero del mes:

printf("Introduzca un mes: ");
    scanf(" %d", &mes);
    if (mes == 0) break;


Aparte de esto, he metido todo el codigo en un bucle do - while para que al final te pida si quieres volver a hacerlo o finalizar el programa, al final el codigo queda asi:

/*
**   Fichero:   estaciones.c
**   Autor:      Departamento de Ingenieria Telematica
**   Fecha:      24-09-2012
**
**   Descripcion:   Determina (aproximadamente) la estacion del año en
**         funcion del numero de mes que se le indique por teclado.
*/

/* Includes del sistema */
#include <stdio.h>

/* Includes de la aplicacion */

/* Constantes del fichero */
#define ERROR        0
#define INVIERNO     1
#define PRIMAVERA    2
#define VERANO       3
#define OTONO         4

#define ENERO         1
#define FEBRERO      2
#define MARZO        3
#define ABRIL        4
#define MAYO         5
#define JUNIO        6
#define JULIO        7
#define AGOSTO        8
#define SEPTIEMBRE   9
#define OCTUBRE     10
#define NOVIEMBRE   11
#define DICIEMBRE   12

/* Tipos definidos por el usuario para el fichero */
/* Prototipo de funciones locales */

int main ()
{
  int mes;
  int estacion;
  int opcion;

  do
  {
    printf("Introduzca un mes: ");
    scanf(" %d", &mes);
    if (mes == 0) break;
   
       
    if(DICIEMBRE == mes || ENERO == mes || FEBRERO == mes)
    {
    estacion = INVIERNO;
    }
    else if (MARZO == mes || ABRIL == mes || MAYO == mes)
    {
    estacion = PRIMAVERA;
    }
    else if (JUNIO == mes || JULIO == mes || AGOSTO == mes)
    {
    estacion = VERANO;
    }
    else if(SEPTIEMBRE == mes || OCTUBRE == mes || NOVIEMBRE == mes)
    {
    estacion = OTONO;
    }
    else
    {
    estacion = ERROR;
    }
    printf ("El mes %d pertenece a la estacion %d\n", mes, estacion);
    printf("Pulse cualquier letra para volver al inicio, pulse 0 para terminar el programa\n");
    scanf("%d", &opcion);

  }while (opcion != 0);

return 0;
}


Tambien te recomendaria que cambiases todos los if por un switch, es mas como y mas facil de entender.

Saludos

P.D: Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
#280
Programación C/C++ / Duda sobre el uso de break;
31 Octubre 2012, 20:00 PM
Pues queria saber si se puede usar break de esta forma:

#include <stdio.h>

int main()
{
int x;
x = getchar();
while (x <= 100)
if (x < 0)
puts("[!] VALOR NEGATIVO DE X [!]"); break;
return 0;
}


Supuestamente segun el libro que estoy leyendo el break haria que se salga del bucle while, pero al compilar el codigo me da error, no se si es un fallo mio o es que este uso de break no es correcto, se que otra forma de hacer esto seria dejando la condicion del while asi:

while (x <= 100 && x > 0)

Pero eso no me importa, lo que quiero saber es si el uso que le doy a break es correcto. El error que me da el compilador es el siguiente:

Citarla declaración break no está dentro de un bucle o switch

Saludos