Nueva pregunta

Pregunta:

Fecha: 06-02-2019 16:46:05 (En Español)

Ayuda con ejercicio[Resuelta]

Hola soy nuevo en esto y la verdad no se como realizar este ejercicio
Un edificio tiene 5 pisos, cada piso tiene 4 apartamentos, los apartamentos están
numerados de la siguiente forma 101, 102, 103 y 104 para el primer piso, así
sucesivamente hasta el piso 5 con los apartamentos 501, 502, 503 y 504.
a. Mostrar cada uno de los apartamentos que tiene el edificio desde el 101 hasta el 504.
b. Mostrar cada uno de los apartamentos que tiene el edificio desde el 504 hasta el 101.

Tengo que realizarlo con un ciclo

espero que me puedan ayudar y gracias
Etiquetas: PHP - Pregunta Votos: 0 - Respuestas: 7 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 06-02-2019 18:36:24 Hola que tal, tan simple como esto:

    $pisos = 5;
    $apartamentos = 4;
    
    for($i=1; $i <= $pisos; $i++){
        echo "<li>Piso: ".$i."<ul>";
        for($p=1; $p<=$apartamentos; $p++){
            echo "<li>Apto: ".$i."0".$p."</li>";
        }
        echo "</ul></li>";
    }
    


    para el orden decreciente solo realiza el cambio en los bucles de esta manera:

    $pisos = 5;
    $apartamentos = 4;
    
    for($i=$pisos; $i >= 1; $i--){
        echo "<li>Piso: ".$i."<ul>";
        for($p=$apartamentos; $p>=1; $p--){
            echo "<li>Apto: ".$i."0".$p."</li>";
        }
        echo "</ul></li>";
    }
    


    ya después solo juegas con las variables $pisos y $apartamentos de acuerdo a la cantidad de pisos y apartamentos que posea cada uno
      Votos: 2 - Link respuesta
     
  • Fecha: 07-02-2019 15:07:06 O así:

    $maxPisos        = 5;
    $maxApartamentos = 4;
    
    $edificio = array_fill(0, $maxPisos, range(1, $maxApartamentos));
    
    /**
     * @param array  $edificio
     * @param string $orden
     *
     * @return string
     */
    function imprime(array $edificio, string $orden = 'asc')
    {
        if (!$edificio) {
            return '';
        }
    
        $lista = "<ul>";
        foreach ($edificio as $piso => $apartamentos) {
            $lista .= "<li>Piso: " . ++$piso . "<ul>";
            ($orden === 'desc') ? rsort($apartamentos) : sort($apartamentos);
            foreach ($apartamentos as $apartamento) {
                $lista .= "<li>Apto: " . $piso . str_pad($apartamento, 2, '0', STR_PAD_LEFT) . "</li>";
            }
            $lista .= "</ul></li>";
        }
        $lista .= "</ul>\n";
    
        return $lista;
    }
    
    //Imprime en órden ascendente
    echo imprime($edificio);
    //Imprime en órden descendente
    echo imprime($edificio, 'desc');
    
      Votos: 1 - Link respuesta
     
  • Fecha: 07-02-2019 16:01:15 Excelente Ernesto, pero no invierte los pisos, solo los apartamentos, en ese caso yo le aplicaria un array_reverse al edificio para esa tarea antes del foreach:

    
    $edificio = ($orden === 'desc') ? array_reverse($edificio,true) : $edificio;
    
    
      Votos: 1 - Link respuesta
     
  • Fecha: 07-02-2019 16:13:39 Otra forma de implementar el Excelente ejemplo de Ernesto sería convertirlo en una clase que le permita manipular la cantidad de pisos y apartamentos por piso, algo así:

    
    Class Edificio{
        private $pisos;
        private $apartamentos;
    
        function setFloors(int $x=1){
            $this->pisos = ($x>0) ? $x : 1;
            return $this;
        }
    
        function setApt(int $x=1){
            $this->apartamentos = ($x >0) ? $x : 1;
            return $this;
        }
    
        function setBuilding(bool $orden = true){
            $edi = array_fill(0, $this->pisos, range(1, $this->apartamentos));
    
            $lista = "<ul>";
        
            $edi = (!$orden) ? array_reverse($edi,true) : $edi;
        
            foreach ($edi as $piso => $apartamentos) {
                $lista .= "<li>Piso: " . ++$piso . "<ul>";
                (!$orden) ? rsort($apartamentos) : sort($apartamentos);
                foreach ($apartamentos as $apartamento) {
                    $lista .= "<li>Apto: " . $piso . str_pad($apartamento, 2, '0', STR_PAD_LEFT) . "</li>";
                }
                $lista .= "</ul></li>";
            }
            $lista .= "</ul>\n";
            return $lista;
        }
    }
    
    $edificio = new Edificio();
    
    //Retorna la lista en forma Ascendente
    echo $edificio->setFloors(5)->setApt(4)->setBuilding();
    
    //Retorna la lista en Forma Descendente
    echo $edificio->setFloors(5)->setApt(4)->setBuilding(false);
    
    


    Eso le permite jugar con los valores de entrada, incluso pasarlos vacíos y el sistema retornaría el armado por defecto.

    Claro habría que agregarle el manejo de excepciones en caso de que reciba

    Si tiene algún pelón me avisan y edito. Saludos
      Votos: 1 - Link respuesta
     
  • Fecha: 08-02-2019 14:17:26 Hola, muchas gracias por sus rapidas respuestas pero falto lo de 101-102-103 ...
    donde pongo eso y gracias.
      Votos: -1 - Link respuesta
     
  • Fecha: 08-02-2019 14:48:56 oye Kudriavka, ¿al menos probaste y analizaste los códigos?, allí esta la respuesta, puedes adaptarlos a tu conveniencia.

    Este bloque especificamente es el que imprime los apartamentos:
    foreach ($apartamentos as $apartamento) {
                    $lista .= "<li>Apto: " . $piso . str_pad($apartamento, 2, '0', STR_PAD_LEFT) . "</li>";
                }
    


    o en los primeros aqui:

    for($p=$apartamentos; $p>=1; $p--){
            echo "<li>Apto: ".$i."0".$p."</li>";
        }
    


    Por favor, un consejo, recuerda que se ayuda, pero también debes poner un poco de tu parte en los análisis o en casos más complejos tendrás serios problemas.

    Saludos
      Votos: 1 - Link respuesta
     
  • Fecha: 09-02-2019 10:21:18 Muchas Gracias Amigos y Ernesto revise linea por linea haber que hace y pude entender   Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión