Foros del Web » Programando para Internet » PHP »

Lógica de programación ejercicio

Estas en el tema de Lógica de programación ejercicio en el foro de PHP en Foros del Web. Hola, soy nuevo en el foro, me estoy iniciando en la programación, tengo un problema con un ejercicio de lógica de programación, es el siguiente: ...
  #1 (permalink)  
Antiguo 29/08/2011, 10:26
Avatar de Edgar87  
Fecha de Ingreso: agosto-2011
Mensajes: 4
Antigüedad: 12 años, 7 meses
Puntos: 1
Lógica de programación ejercicio

Hola, soy nuevo en el foro, me estoy iniciando en la programación, tengo un problema con un ejercicio de lógica de programación, es el siguiente:

Calcular el sueldo semanal de un trabajador de jornada diurna en base a su sueldo por hora y las horas que trabajó a la semana, considerando el artículo 66 de la Ley federal del trabajo que dice: "podrá también prolongarse la jornada de trabajo por circunstancias extraordinarias, sin exceder nunca de tres horas diarias ni de tres veces en una semana", las primeras 8 horas se pagarán doble y las demás el triple.

Este es el ejercicio, en lo que se me dificulta, es como sumar el total que gano en una semana más las horas extras, a continuación muestro el codigó que logre generar, pero creo que no esta bien del todo, creo que puede reducirse más y generar un mejor codigó, ¿como puedo lograr que el codigó tenga mayor funcionalidad con la menor cantidad de líneas?...


Código PHP:
<?php

$sueldoPorHora 
50;
    
    for(
$horaDia 1$horaDia <= 40$horaDia++){
        
$horasTrabajadas++ ."<br>";
        
        if(
$horasTrabajadas == 8){
            echo 
"En un d&Iacute;a se gana ".($sueldoPorHora $horaDia). " pesos<br>";
        }else{
            if(
$horasTrabajadas == 16){
                echo 
"En dos d&Iacute;as se gana ".($sueldoPorHora $horaDia)." pesos<br>";
            }else{
                if(
$horasTrabajadas == 24){
                    echo 
"En tres d&Iacute;as se gana ".($sueldoPorHora $horaDia)." pesos<br>";
                }else{
                    if(
$horasTrabajadas == 32){
                        echo 
"En cuatro d&Iacute;as se gana ".($sueldoPorHora $horaDia)." pesos<br>";
                    }else{
                        if(
$horasTrabajadas == 40){
                            echo 
"En cinco d&Iacute;as se gana ".($sueldoPorHora $horaDia)." pesos<br><br>";
                            echo 
"En una semana se gana ".($sueldoPorHora $horaDia)." pesos<br><br>";
                        }
                    }
                }
            }
        }
    }
    
    echo 
"Horas Extras Acumuladas<br><br>";
    
    for(
$horaExtra 1$horaExtra <= 9$horaExtra ++){
        if(
$horaExtra == 3){
            echo 
"En el d&iacute;a 1 horas acumuladas son ".(($sueldoPorHora $horaExtra) * 2)." pesos<br>";
        }else{
            if(
$horaExtra == 6){
                echo 
"En el d&iacute;a 2 horas acumuladas son ".(($sueldoPorHora $horaExtra) * 2)." pesos<br>";
            }else{
                if(
$horaExtra == 8){
                    echo 
"En el d&iacute;a 3 horas acumuladas son ".((($sueldoPorHora $horaExtra) * 2) + ($sueldoPorHora 3))." pesos<br>";
                }
            }
        }
    }


?>
Coloque una variable llamada $sueldoPorHora con un valor de 50, como ejemplo, dos for, el primero para horas que trabaja en una semana, suponiendo que la jornada laboral del trabajador por dia son 8 horas y 5 días a la semana, de Lunes a Viernes, el segundo for para las horas extras que trabajo.

Gracias por la atención, espero me puedan ayudar con mi problema.


  #2 (permalink)  
Antiguo 29/08/2011, 10:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Lógica de programación ejercicio

Si lo que quieres es mostrar los mismos mensajes, en lugar de hacer esos ifs, puedes uso del operador % para mostrarlos, por ejemplo:
Código PHP:
Ver original
  1. for (/* */) {
  2.     if (($i % 8) == 0) {
  3.              echo "...";
  4.     }
  5. }

Eso se va a ejecutar cada que el ciclo caiga en un múltiplo de 8, o puedes mejor incrementar cada 8 tu for:
Código PHP:
Ver original
  1. for ($i = 0; $i < $total; $i+=8) {
  2.  
  3. }

Saludos.
  #3 (permalink)  
Antiguo 29/08/2011, 12:06
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Lógica de programación ejercicio

Creo que estás interpretando mal el ejercicio con esta parte "sin exceder nunca de tres horas diarias ni de tres veces en una semana", esa parte te está haciendo confundir. Tienes como base un sueldo por hora y las horas que trabajó en la semana. Tu dices que suponiendo un trabajador trabaja de lunes a viernes y 8 horas diarias. Serían 40 horas a la semana. esas 40 horas se pagan el doble, ahora necesitas sacar las extras que según la ley federal se pagan el triple, una resta horas trabajadas menos 40 horas. Ya tienes las horas extras, ahora esas horas se multiplican por el sueldo base y por 3.

Básicamente sería:

Código PHP:
Ver original
  1. <?php
  2. $horastrabajadas = 41; //1 hora extra
  3. $sueldoporhora = 50;
  4. $extras = $horastrabajadas - 40;
  5. $sueldo = ($horastrabajadas-$extras)*$sueldoporhora*2;
  6. $sueldoconextras = $sueldo+($extras*$sueldoporhora*3);
  7. echo 'Sueldo semana: ' . $sueldoconextras;

ahora si lo quieres completar más:

Código PHP:
Ver original
  1. <?php
  2. $horastrabajadas = array(8, 8, 8, 9, 8); //horas semana, 5 días
  3. $sueldoporhora = 50;
  4. $sueldosemana = 0;
  5. $ley = 0;
  6.  
  7. if (max($horastrabajadas) <= 11) { //sin exceder nunca de tres horas diarias
  8.     foreach ($horastrabajadas as $ht) {
  9.         if ($ht == 8) {
  10.             $sueldosemana += $ht * $sueldoporhora * 2;
  11.     //las primeras 8 horas se pagarán doble
  12.         } else if ($ht > 8) {
  13.             $extras = $ht - 8;
  14.             $sueldosemana += 8 * $sueldoporhora * 2;
  15.             $sueldosemana += $extras * $sueldoporhora * 3;
  16.             $ley++;
  17.     //las demás el triple.
  18.         }
  19.     }
  20.     if ($ley <= 3) { //ni de tres veces en una semana
  21.         echo 'Sueldo semana: ' . $sueldosemana;
  22.     } else {
  23.         echo 'No cumple con la ley federal';
  24.     }
  25. } else {
  26.     echo 'No cumple con la ley federal';
  27. }

En cualquiera de los 2 casos da el mismo resultado.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #4 (permalink)  
Antiguo 29/08/2011, 13:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Lógica de programación ejercicio

Son 3 horas extras a las 8 normales, es decir, son 40 horas base (a la semana), de ahí, son dobles, siempre y cuando caigan en esa condición, que no sean más de 3 horas por día y no se pueda repetir más de 3 veces a la semana.

De ese total (3 días * 3 horas) (9 horas a la semana max (por ley)) las primeras 8 son al doble y las siguientes son al triple.

Ahora para simplificar, de las 40 horas base, el restante, solo las primeras 8 serían al doble, y el resto al triple.

Es una formula sencilla.

Saludos.
  #5 (permalink)  
Antiguo 29/08/2011, 20:30
Avatar de Edgar87  
Fecha de Ingreso: agosto-2011
Mensajes: 4
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Lógica de programación ejercicio

Muchisimas gracias amigos, me han dado nuevas ideas para realizar este ejercicio, estoy en friega loca resolviendo muchos ejercicios de este tipo, gracias por compartir código, tengo una idea más clara de como podre resolver los futuros ejercicios, espero compartir pronto unos scripts buenos de php.

Muchisimas gracias por su ayuda.


Etiquetas: ejercicio, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:50.