Ejercicios (sin formularios) - Matrices (3) Funciones - Soluciones

En esta página se muestran una parte de las soluciones de los ejercicios Matrices (3), concretamente el fragmento PHP, sin el principio ni el final de la página que se puede dejar en un fragmento HTML. La solución completa se puede descargar de la página de soluciones.

Matrices (3) 1 - Cartas extremas

<?php
// Guardamos los valores de las cartas en la matriz $cartas
$n = rand(5, 10);
for ($i = 0; $i < $n; $i++) {
    $cartas[] = rand(1, 10);
}

// Mostramos las imágenes de las cartas obtenidas
print "  <h2>Cartas</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/t$carta.svg\" alt=\"$carta de tréboles\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Calculamos y mostramos los valores máximo y mínimo
print "<p>La carta más alta es un " . max($cartas) . " y la carta más baja es un " . min($cartas) . "</p>\n";
print "\n";

?>

Matrices (3) 2 - Las cartas más altas

<?php
// Guardamos los valores de las cartas en la matriz $cartas
$n = rand(5, 10);
for ($i = 0; $i < $n; $i++) {
    $cartas[] = rand(1, 10);
}

// Mostramos las imágenes de las cartas obtenidas
print "  <h2>Cartas</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/t$carta.svg\" alt=\"$carta de tréboles\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Calculamos el valor máximo
$eliminar = max($cartas);

// Mostramos el valor máximo
print "<p>La carta más alta es un $eliminar.</p>\n";
print "\n";

// Mostramos la carta de valor máximo
print "  <h2>Carta a eliminar</h2>\n";
print "\n";
print "  <p>\n";
print "    <img src=\"img/cartas/t$eliminar.svg\" alt=\"$eliminar de tréboles\" width=\"100\">\n";
print "  </p>\n";
print "\n";

// Recorremos la matriz de valores de cartas y eliminamos los elementos que coinciden con el máximo
for ($i = 0; $i < $n; $i++) {
    if ($cartas[$i] == $eliminar) {
        unset($cartas[$i]);
    }
}

// Mostramos las imágenes de las cartas (las eliminadas ya no se mostrarán)
print "  <h2>Cartas restantes</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/t$carta.svg\" alt=\"$carta de tréboles\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Calculamos y mostramos el valor máximo actual
print "<p>La carta más alta es ahora un " . max($cartas) . ".</p>\n";
print "\n";

?>

Matrices (3) 3 - Eliminar repetidos

<?php
$numero = rand(5, 15);

// Guardamos los valores de las bolas en la matriz $bolas
$bolas = [];
for ($i = 0; $i < $numero; $i++) {
    $bolas[$i] = rand(10102, 10111);
}

// Mostramos las imágenes de las bolas obtenidas
print "  <h2>Entre estas $numero bolas ...</h2>\n";

print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">\n";
foreach ($bolas as $bola) {
    print "    &#$bola;\n";
}
print "  </p>\n";
print "\n";

// Eliminamos las bolas duplicadas
$resultado = array_unique($bolas);

// Mostramos las imágenes de las bolas restantes
print "  <h2>... hay " . count($resultado) . " bolas distintas</h2>\n";
print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">\n";
foreach ($resultado as $bola) {
    print "    &#$bola;\n";
}
print "  </p>\n";
print "\n";

?>

Matrices (3) 4 - Buscar emoticono

<?php
$numero = rand(10, 20);

// Guardamos los valores de los emoticonos en la matriz $emoticonos
$emoticonos = [];
for ($i = 0; $i < $numero; $i++) {
    $emoticonos[$i] = rand(128512, 128580);
}

// Mostramos las imágenes de los emoticonos obtenidos
print "  <h2>$numero emoticonos ...</h2>\n";
print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">\n";
foreach ($emoticonos as $emoticono) {
    print "    &#$emoticono;\n";
}
print "  </p>\n";
print "\n";

// Emoticono a buscar
$busca = rand(128512, 128580);

// Mostramos el resultado de la búsqueda
if (in_array($busca, $emoticonos)) {
  print "  <p>El emoticono <span style=\"font-size: 400%;\">&#$busca;</span> está entre ellos.</p>\n";
} else {
  print "  <p>El emoticono <span style=\"font-size: 400%;\">&#$busca;</span> NO está entre ellos.</p>\n";
}
print "\n";

?>

Matrices (3) 5 - Contar corazones

<?php
$numero = rand(7, 20);

// Guardamos los valores de las frutas en la matriz $frutas
$frutas = [];
for ($i = 0; $i < $numero; $i++) {
    $frutas[$i] = rand(128147, 128152);
}

// Mostramos las imágenes de las frutas obtenidas
print "  <h2>$numero corazones</h2>\n";

print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">\n";
foreach ($frutas as $fruta) {
    print "    &#$fruta;\n";
}
print "  </p>\n";
print "\n";

// Contamos las frutas
$cuenta = array_count_values($frutas);

// Mostramos el resultado de contar las frutas
print "  <h2>Conteo</h2>\n";
print "\n";

foreach ($cuenta as $indice => $valor) {
  print "  <p style=\"font-size: 400%; margin: 0;\">&#$indice; $valor</p>\n";
}

print "\n";

?>

Matrices (3) 6 - Unir matrices

<?php
// Definimos las matrices con los rangos de emoticonos
$emoticonos_1 = range(128512, 128580);
$emoticonos_2 = range(129296, 129303);
$emoticonos_3 = range(129312, 129327);
$emoticonos_4 = [129392, 129393];
$emoticonos_5 = range(129395, 129398);
$emoticonos_6 = [129402, 129488];

// Unimos las matrices en una sola
$emoticonos = array_merge($emoticonos_1, $emoticonos_2, $emoticonos_3, $emoticonos_4, $emoticonos_5, $emoticonos_6);

// Mostramos las imágenes de los emoticonos obtenidos
print "  <h2>". count($emoticonos) . " emoticonos</h2>\n";
print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">\n";
foreach ($emoticonos as $emoticono) {
    print "    &#$emoticono;\n";
}
print "  </p>\n";
print "\n";

// Mostramos un emoticono al azar
print "  <h2>Uno al azar</h2>\n";
print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">&#". $emoticonos[rand(0, count($emoticonos)-1)] . ";</p>\n";


?>

Matrices (3) 11 - Tirada ordenada

<?php
$numero = rand(2, 7);

// Creamos la matriz de dados aleatorios
$dados = [];
for ($i = 0; $i < $numero; $i++) {
    $dados[$i] = rand(1, 6);
}

// Mostramos los dados
print "  <h2>Tirada de $numero dados</h2>\n";
print "\n";
print "  <p>\n";
foreach ($dados as $dado) {
    print "    <img src=\"img/$dado.svg\" alt=\"$dado\" width=\"100\" height=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Ordenamos los dados
sort($dados);

// Mostramos los dados ordenados
print "  <h2>Tirada ordenada</h2>\n";
print "\n";
print "  <p>\n";
foreach ($dados as $dado) {
    print "    <img src=\"img/$dado.svg\" alt=\"$dado\" width=\"100\" height=\"100\">\n";
}
print "  </p>\n";

?>

Matrices (3) 12 - Ordenar cartas

<?php
$numero = rand(5, 10);

// Creamos la matriz de cartas aleatorias
$cartas = [];
for ($i = 0; $i < $numero; $i++) {
    $cartas[$i] = rand(127169, 127173);
}

// Mostramos las cartas
print "  <h2>Mano de $numero cartas</h2>\n";
print "\n";
print "  <p style=\"font-size: 700%; margin: 0; line-height: 100%;\">\n";
foreach ($cartas as $carta) {
    print "    &#$carta;\n";
}
print "  </p>\n";
print "\n";

// Ordenamos las cartas
$cartas_2 = array_unique($cartas);
sort($cartas_2);

// Mostramos las cartas ordenadas
print "  <h2>Cartas distintas obtenidas (ordenadas)</h2>\n";
print "\n";
print "  <p style=\"font-size: 700%; margin: 0; line-height: 100%;\">\n";
foreach ($cartas_2 as $carta) {
    print "    &#$carta;\n";
}
print "  </p>\n";
print "\n";

// Contamos las cartas
$cartas_3 = array_count_values($cartas);

// Mostramos las cartas contadas
print "  <h2>Número de cartas obtenidas (sin ordenar)</h2>\n";
print "\n";
print "  <p style=\"line-height: 600%;\">\n";
foreach ($cartas_3 as $indice => $valor) {
    print "    <span style=\"font-size: 500%;\">$valor</span> <span style=\"font-size: 700%;\">&#$indice; - </span>\n";
}
print "  </p>\n";
print "\n";

// Ordenamos las cartas
arsort($cartas_3);

// Mostramos las cartas contadas ordenadas
print "  <h2>Número de cartas obtenidas (ordenada)</h2>\n";
print "\n";
print "  <p style=\"line-height: 600%;\">\n";
foreach ($cartas_3 as $indice => $valor) {
    print "    <span style=\"font-size: 500%;\">$valor</span> <span style=\"font-size: 700%;\">&#$indice; - </span>\n";
}
print "  </p>\n";

?>

Matrices (3) 13 - Jugada de Risk

<?php
// Mostramos con cuántos dados va a jugar el Atacante
print "  <h2>Atacante</h2>\n";
print "\n";
$numero1 = rand(1, 3);
if ($numero1 == 1) {
    print "  <p>El atacante ataca con $numero1 dado:</p>\n";
} else {
    print "  <p>El atacante ataca con $numero1 dados:</p>\n";
}
print "\n";

// Guardamos los valores del Atacante en la matriz $dados1
$dados1 = [];
for ($i = 0; $i < $numero1; $i++) {
    $dados1[$i] = rand(1, 6);
}

// Ordenamos la matriz $dados2 y mostramos los resultados obtenidos por el Atacante
rsort($dados1);
print "  <p>\n";
foreach ($dados1 as $dado) {
    print "    <img src=\"img/$dado.svg\" alt=\"$dado\" width=\"100\" height=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Mostramos con cuántos dados va a jugar el Defensor
print "  <h2>Defensor</h2>\n";
print "\n";
$numero2 = rand(1, 2);
if ($numero2 == 1) {
    print "  <p>El defensor defiende con $numero2 dado:</p>\n";
} else {
    print "  <p>El defensor defiende con $numero2 dados:</p>\n";
}
print "\n";

// Guardamos los valores del Defensor en la matriz $dados2
$dados2 = [];
for ($i = 0; $i < $numero2; $i++) {
    $dados2[$i] = rand(1, 6);
}

// Ordenamos la matriz $dados2 y mostramos los resultados obtenidos por el Defensor
rsort($dados2);
print "  <p>\n";
foreach ($dados2 as $dado) {
    print "    <img src=\"img/$dado.svg\" alt=\"$dado\" width=\"100\" height=\"100\">\n";
}
print "  </p>\n";
print "\n";

// En los acumuladores $bajasAtacante $bajasDefensor contamos cuántas partidas ha perdido cada uno
// El número de dados que se compara es el menor de los números de dados tirados
$menor = min($numero1, $numero2);
$bajasAtacante = 0;
$bajasDefensor = 0;
for ($i = 0; $i < $menor; $i++) {
    if ($dados1[$i] > $dados2[$i]) {
        $bajasDefensor++;
    } else {
        $bajasAtacante++;
    }
}

// Mostramos cuántas bajas ha tenido cada jugador
print "  <h2>Resultado</h2>\n";
print "\n";
print "  <p>El atacante pierde <strong>$bajasAtacante</strong> unidad";
if ($bajasAtacante != 1) {
    print "es";
}
print ". El defensor pierde <strong>$bajasDefensor</strong> unidad";
if ($bajasDefensor != 1) {
    print "es";
}
print ".</p>\n";

?>

Matrices (3) 14 - Reparto de cartas

<?php
// Guardamos los valores de las cartas en la matriz $cartas
// $n es el número de cartas que repartiremos a cada jugador,
// por lo que generamos 2 * $n cartas
$n       = rand(2, 6);
$cartas = [];
for ($i = 0; $i < 2 * $n; $i++) {
    $cartas[] = rand(1, 10);
}

// Mostramos las imágenes de las cartas obtenidas
print "  <h2>Las " . (2 * $n) . " cartas a repartir</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Barajamos los valores de las cartas
shuffle($cartas);

// Creamos una matriz con las $n primeras cartas
$cartasA = [];
for ($i = 0; $i < $n; $i++) {
  $cartasA[] = $cartas[$i];
}

// Creamos una matriz con las $n siguientes cartas
for ($i = 0; $i < $n; $i++) {
  $cartasB[] = $cartas[$i+ $n];
}

// Mostramos las imágenes de las cartas del primer jugador
print "  <h2>Las $n cartas del jugador A</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartasA as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Mostramos las imágenes de las cartas del segundo jugador
print "  <h2>Las $n cartas del jugador B</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartasB as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

?>

Matrices (3) 15 - Cartas pares iguales consecutivas

<?php
// Guardamos los valores de las cartas en la matriz $cartas
$n      = rand(3, 12);
$cartas = [];
for ($i = 0; $i < $n; $i++) {
    $cartas[] = rand(1, 10);
}

// Mostramos las imágenes de las cartas obtenidas
print "  <h2>Las $n cartas</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Recorremos la matriz de cartas y si el valor de la carta es par, eliminamos el valor
for ($i = 0; $i < $n; $i++) {
    if ($cartas[$i] % 2) {
        unset($cartas[$i]);
    }
}

// Mostramos las imágenes de las cartas (las eliminadas ya no se mostrarán)
print "  <h2>Sin cartas impares</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Reindexamos la matriz de cartas para poderla recorrer con un bucle for
// y que los índices sean consecutivos
$cartas = array_values($cartas);

// Recorremos la matriz de cartas (hasta el penúltimo valor)
// comparando cada valor con el siguiente y si coinciden
// damos el valor true a la variable testigo $consecutivas
$consecutivas = false;
for ($i = 0; $i < count($cartas) - 1; $i++) {
    if ($cartas[$i] == $cartas[$i + 1]) {
        $consecutivas = true;
    }
}

// Según el valor de consecutivas mostramos un mensaje distinto
print ($consecutivas) ? "<p>Hay cartas iguales consecutivas</p>\n" : "<p>No hay cartas iguales consecutivas</p>\n";

?>