Pages

miércoles, 6 de febrero de 2013

Convertir segundos a semanas, días, horas, minutos. Codigo en C

Enunciado
Realice un programa en lenguaje C, que permita al usuario ingresar por teclado una cierta cantidad de segundos y muestre su equivalente en semanas, días, horas, minutos y segundos, según el siguiente formato:
Entrada:
Introduzca los segundos: 12345678
Salida:
>> Los 12345678 equivalen a: 20 semanas, 2 dias y  21h : 21m : 18s
Código Fuente en C
#include <iostream>
#include <iomanip>
using namespace std ;

const int SEG_MIN = 60;
const int MIN_HORA = 60;
const int HORAS_DIA = 24;
const int DIAS_SEMANA = 7;

const int SEG_HORA = SEG_MIN * MIN_HORA ;
const int SEG_DIA = SEG_HORA * HORAS_DIA ;
const int SEG_SEMANA = SEG_DIA * DIAS_SEMANA ;

int main ()
{
    cout << "Introduzca los segundos: " ;
    int segundos_totales ;
    cin >> segundos_totales ;

    int semanas = segundos_totales / SEG_SEMANA ;
    int resto = segundos_totales % SEG_SEMANA ;

    int dias = resto / SEG_DIA ;
    resto = resto % SEG_DIA ;

    int horas = resto / SEG_HORA ;
    resto = resto % SEG_HORA ;
    int minutos = resto / SEG_MIN ;
    int segundos = resto % SEG_MIN ;

    cout << "\n>> Los " <<segundos_totales << " equivalen a: "
         << semanas << " semanas, "
         << dias << " dias y  "
         << horas << "h : "
         << minutos << "m : "
         << segundos << "s" << endl ;

    return 0;
}

8 comentarios:

Unknown dijo...

Disculpa este mismo programa pero en Dev C++

MAXAITA dijo...

pues buscando no encontre una solucion que me diera una respuesta convincente todas las soluciones las hacen en base a aproximaciones y calculos automaticos pero no son reales, aqui tengo una solucion que es real.


notas:
label4 es donde muestro el resultado
DateTimePicker1 y DateTimePicker2 es donde consigo las fechas a comparar.



Private Sub seteodeprimerapagina()
If DateTimePicker1.Value > DateTimePicker2.Value Then
Me.Label4.Text = "Error - en fechas"
Else
Dim FECHA3, NewDateTime As Date
Dim ANNO1, ANNO2, MES1, MES2, DIA1, DIA2, CANANNO, CANMES, CANDIA As Integer

FECHA3 = DateTimePicker1.Value
ANNO1 = DateAndTime.Year(DateTimePicker1.Value)
ANNO2 = DateAndTime.Year(DateTimePicker2.Value)
MES1 = DateAndTime.Month(DateTimePicker1.Value)
MES2 = DateAndTime.Month(DateTimePicker2.Value)
DIA1 = DateAndTime.Day(DateTimePicker1.Value)
DIA2 = DateAndTime.Day(DateTimePicker2.Value)

Select Case ANNO2
Case > ANNO1
Select Case MES2
Case >= MES1
CANANNO = ANNO2 - ANNO1
Select Case DIA2
Case >= DIA1
CANMES = MES2 - MES1
CANDIA = DIA2 - DIA1
Case < DIA1
CANMES = 0
If MES1 = 12 Then
NewDateTime = New Date(ANNO1 + 1, MES1, 1)
Else
NewDateTime = New Date(ANNO1, MES1 + 1, 1)
End If
CANDIA = DateAndTime.DateDiff(DateInterval.Day, FECHA3, NewDateTime) + DIA2
End Select
Case < MES1
CANANNO = (ANNO2 - ANNO1) - 1
CANMES = (12 - MES1) + MES2
Select Case DIA2
Case >= DIA1
CANDIA = DIA2 - DIA1
Case < DIA1
If MES1 = 12 Then
NewDateTime = New Date(ANNO1 + 1, MES1, 1)
Else
NewDateTime = New Date(ANNO1, MES1 + 1, 1)
End If
CANDIA = DateAndTime.DateDiff(DateInterval.Day, FECHA3, NewDateTime) + DIA2
End Select
End Select
Case = ANNO1
CANANNO = 0

Select Case DIA2
Case >= DIA1
CANMES = MES2 - MES1
CANDIA = DIA2 - DIA1
Case < DIA1
CANMES = 0
If MES1 = 12 Then
NewDateTime = New Date(ANNO1 + 1, MES1, 1)
Else
NewDateTime = New Date(ANNO1, MES1 + 1, 1)
End If
CANDIA = DateAndTime.DateDiff(DateInterval.Day, FECHA3, NewDateTime) + DIA2
End Select
End Select

Me.Label4.Text = ""
If CANANNO > 0 Then
Me.Label4.Text = CType(CANANNO, String)
If CANANNO > 1 Then
Me.Label4.Text = Me.Label4.Text + " Años"
Else
Me.Label4.Text = Me.Label4.Text + " Año"
End If
End If

If CANANNO > 0 And CANMES > 0 Then
Me.Label4.Text = Me.Label4.Text + " - "
End If

If CANMES > 0 Then
Me.Label4.Text = Me.Label4.Text + CType(CANMES, String)
If CANMES > 1 Then
Me.Label4.Text = Me.Label4.Text + " Meses"
Else
Me.Label4.Text = Me.Label4.Text + " Mes"
End If
End If

If CANMES > 0 And CANDIA > 0 Then
Me.Label4.Text = Me.Label4.Text + " - "

Else
If CANANNO > 0 And CANDIA > 0 Then
Me.Label4.Text = Me.Label4.Text + " - "
End If

End If

If CANDIA > 0 Then
Me.Label4.Text = Me.Label4.Text + CType(CANDIA, String)
If CANDIA > 1 Then
Me.Label4.Text = Me.Label4.Text + " Dias"
Else
Me.Label4.Text = Me.Label4.Text + " Dia"
End If
End If

End If

End Sub




Espero les ayude se que no esta optimizada por que estoy empezando a aprender visual basic pero se que a mas de alguien sacara de problemas ya que a mi ninguna solucion me sirvio.

Anónimo dijo...

Gracias me fue de mucha ayuda

Anónimo dijo...

hola como convertir un valor x dado en minutos a horas,dias,semanas,meses

Max Choque dijo...

gracias

VANITAS YOLO. dijo...

4. Escribe un programa que pida al usuario los siguientes datos: días, horas y minutos. Y le conteste con la cantidad de segundos totales que son esos datos.

Unknown dijo...

Hola, estoy haciendo un programa que convierte segundos a minutos y horas. Tengo la tarea de ahora agregarle los días con el bucle While, pero no sé cómo hacerlo, alguien podría ayudarme, voy iniciando

CARLOS VERA dijo...

HOLA Estoy haciendo: un programa de desglose cierta cantidad de segundos introducida por teclado en su
equivalente en semanas, días, horas, minutos y segundos

Publicar un comentario