Ejercicios (sin formularios) - Funciones (1) - Soluciones

En esta página se muestran una parte de las soluciones de los ejercicios Funciones (1), concretamente el fragmento PHP, sin el principio ni el final de la página que se pueden dejar en fragmentos HTML.

Si lo prefiere, puede descargar unas posibles soluciones completas de estos ejercicios.

Funciones (1) 01 - Dibuja dados

<?php
function generaMatrizEnterosRand(int $n, int $min, int $max): array
{
    for ($i = 0; $i < $n; $i++) {
        $m[] = rand($min, $max);
    }
    return $m;
}

function pintaDados(array $m): void
{
    print "  <p>\n";
    foreach ($m as $valor) {
        print "    <img src=\"img/dados/$valor.svg\" alt=\"$valor\" width=\"60\" height=\"60\">\n";
    }
    print "  </p>\n";
}

$n     = rand(5, 10);
$dados = generaMatrizEnterosRand($n, 1, 6);

print "  <h2>$n dados (sin ordenar)</h2>\n";
print "\n";
pintaDados($dados);
print "\n";

print "  <h2>$n dados (los mismos $n, ordenados)</h2>\n";
print "\n";
sort($dados);
pintaDados($dados);
print "\n";

$dados = array_unique($dados);
print "  <h2>" . count($dados) . " dados (los $n, sin repetir)</h2>\n";
print "\n";
pintaDados($dados);
print "\n";
?>

Funciones (1) 02 - Dibuja cartas

<?php
function generaMatrizCartasRand(int $n): array
{
    $palos = ["c", "d", "p", "t"];
    for ($i = 0; $i < $n; $i++) {
        $m[] = $palos[rand(0, 3)] . rand(1, 13);
    }
    return $m;
}

function pintaCartas(array $m): void
{
    print "  <p>\n";
    foreach ($m as $valor) {
        print "    <img src=\"img/cartas/$valor.svg\" alt=\"$valor\" width=\"70\">\n";
    }
    print "  </p>\n";
}

$n = rand(5, 10);

$cartas = generaMatrizCartasRand($n);
print "  <h2>$n cartas</h2>\n";
print "\n";
pintaCartas($cartas);
print "\n";

$cartas = generaMatrizCartasRand($n);
print "  <h2>$n cartas más</h2>\n";
print "\n";
pintaCartas($cartas);
print "\n";
?>

Funciones (1) 03 - Dibuja bolas

<?php
function generaMatrizValoresRand(array $m, int $n): array
{
    for ($i = 0; $i < $n; $i++) {
        $resultado[] = $m[array_rand($m)];
    }
    return $resultado;
}

function pintaCirculos(array $m): void
{
    print "  <p>";
    foreach ($m as $valor) {
        print "\n";
        print "    <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"60\" viewbox=\"-5 -5 60 60\">\n";
        print "      <circle cx=\"25\" cy=\"25\" r=\"25\" fill=\"$valor\" stroke=\"black\" />\n";
        print "    </svg>\n";
    }
    print "  </p>\n";
}

$nombreColores = ["black", "blue", "green", "gray", "red", "white", "yellow"];
$n             = rand(5, 10);

$colores = generaMatrizValoresRand($nombreColores, $n);
print "  <h2>$n círculos de colores</h2>\n";
print "\n";
pintaCirculos($colores);
print "\n";

$colores = generaMatrizValoresRand($nombreColores, $n);
print "  <h2>$n círculos de colores</h2>\n";
print "\n";
pintaCirculos($colores);
print "\n";

$colores = generaMatrizValoresRand($nombreColores, $n);
print "  <h2>$n círculos de colores</h2>\n";
print "\n";
pintaCirculos($colores);
print "\n";
?>

Funciones (1) 11 - miArrayFill()

<?php
function miArrayFill(int $startIndex, int $count, mixed $value): array
{
    for ($i = $startIndex; $i < $startIndex + $count; $i++) {
        $m[$i] = $value;
    }
    return $m;
}

$inicio = rand(0, 20);
$n      = rand(1, 10);
$valor  = rand(100, 1000);

print "  <h2>Matriz de $n valores $valor, índice empieza en $inicio</h2>\n";
print "\n";

print "  <pre>\n";
print_r(miArrayFill($inicio, $n, $valor));
print "</pre>\n";
print "\n";
?>

Funciones (1) 12 - miArraySum()

<?php
function generaMatrizEnterosRand(int $n, int $min, int $max): array
{
    for ($i = 0; $i < $n; $i++) {
        $m[] = rand($min, $max);
    }
    return $m;
}

function generaMatrizDecimalesRand(int $n, int $min, int $max): array
{
    for ($i = 0; $i < $n; $i++) {
        $m[] = rand($min * 10, $max * 10) / 10;
    }
    return $m;
}

function miArraySum(array $array): int|float
{
    $total = 0;
    foreach ($array as $valor) {
        $total += $valor;
    }
    return $total;
}

$n = rand(3, 7);
$m = generaMatrizEnterosRand($n, 1, 10);

print "  <h2>Suma de $n valores enteros</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m, true) . "</pre>\n";
print   "\n";
print   "  <p>Suma de valores: " . miArraySum($m) . "</p>\n";
print   "\n";

$n = rand(3, 7);
$m = generaMatrizDecimalesRand($n, 1, 10);

print "  <h2>Suma de $n valores decimales</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m, true) . "</pre>\n";
print   "\n";
print   "  <p>Suma de valores: " . miArraySum($m) . "</p>\n";
print "\n";
?>

Funciones (1) 13 - miArrayProduct()

<?php
function generaMatrizEnterosRand(int $n, int $min, int $max): array
{
    for ($i = 0; $i < $n; $i++) {
        $m[] = rand($min, $max);
    }
    return $m;
}

function generaMatrizDecimalesRand(int $n, int $min, int $max): array
{
    for ($i = 0; $i < $n; $i++) {
        $m[] = rand($min * 10, $max * 10) / 10;
    }
    return $m;
}

function miArrayProduct(array $array): int|float
{
    $total = 1;
    foreach ($array as $valor) {
        $total *= $valor;
    }
    return $total;
}

$n = rand(3, 7);
$m = generaMatrizEnterosRand($n, 1, 10);

print "  <h2>Producto de $n valores decimales</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m, true) . "</pre>\n";
print   "\n";
print   "  <p>Producto de valores: " . miArrayProduct($m) . "</p>\n";
print   "\n";

$n = rand(3, 7);
$m = generaMatrizDecimalesRand($n, 1, 10);

print "  <h2>Producto de $n valores decimales</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m, true) . "</pre>\n";
print   "\n";
print   "  <p>Producto de valores: " . miArrayProduct($m) . "</p>\n";
print "\n";
?>

Funciones (1) 14 - miArraySlice()

<?php
function generaMatrizEnterosRand(int $n, int $min, int $max): array
{
    for ($i = 0; $i < $n; $i++) {
        $m[] = rand($min, $max);
    }
    return $m;
}

function miArraySlice(array $array, int $offset, int $length): array
{
    for ($i = $offset; $i < $offset + $length; $i++) {
        $m[$i] = $array[$i];
    }
    return $m;
}

$n        = rand(7, 10);
$m        = generaMatrizEnterosRand($n, 1, 10);
$inicio   = rand(0, $n - 1);
$longitud = rand(1, $n - $inicio);

print "  <h2>Matriz de $n valores enteros</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m, true) . "</pre>\n";
print   "\n";

$m2 = miArraySlice($m, $inicio, $longitud);

if ($longitud == 1) {
    print "  <h2>Submatriz de $longitud valor desde el valor $inicio</h2>\n";
    print "\n";
} else {
    print "  <h2>Submatriz de $longitud valores desde el valor $inicio</h2>\n";
    print "\n";
}

print "  <pre>\n" . print_r($m2, true) . "</pre>\n";
print "\n";
?>

Funciones (1) 15 - miArrayUnshift()

<?php
function generaMatrizEnterosRand(int $n, int $min, int $max): array
{
    for ($i = 0; $i < $n; $i++) {
        $m[] = rand($min, $max);
    }
    return $m;
}

function miArrayUnshift(array $array, mixed $value): array
{
    $m[] = $value;
    foreach ($array as $valor) {
        $m[] = $valor;
    }
    return $m;
}

$n     = rand(7, 10);
$m     = generaMatrizEnterosRand($n, 1, 10);
$valor = rand(1, 10);

print "  <h2>Matriz de $n valores enteros</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m, true) . "</pre>\n";
print   "\n";

$m2 = miArrayUnshift($m, $valor);

print "  <h2>La misma matriz con el valor $valor al principio</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m2, true) . "</pre>\n";
print "\n";
?>

Funciones (1) 16 - miArrayReverse()

<?php
function generaMatrizEnterosRandRand(int $n, int $min, int $max): array
{
    $indices = range(0, $n);
    shuffle($indices);
    for ($i = 0; $i < $n; $i++) {
        $m[$indices[$i]] = rand($min, $max);
    }
    return $m;
}

function miArrayReverseSimple(array $array): array
{
    $array = array_values($array);
    $n     = count($array);
    for ($i = 0; $i < $n; $i++) {
        $array2[$i] = $array[$n - $i - 1];
    }
    return $array2;
}

$n = rand(7, 10);
$m = generaMatrizEnterosRandRand($n, 1, 10);

print "  <h2>Matriz de $n valores enteros</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m, true) . "</pre>\n";
print   "\n";

$m2 = miArrayReverseSimple($m);

print "  <h2>La misma matriz, al revés</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m2, true) . "</pre>\n";
print "\n";
?>
<?php
function generaMatrizEnterosRandRand(int $n, int $min, int $max): array
{
    $indices = range(0, $n);
    shuffle($indices);
    for ($i = 0; $i < $n; $i++) {
        $m[$indices[$i]] = rand($min, $max);
    }
    return $m;
}

function insertaValorMatriz(array $array, $index, $value): array
{
    $m = [$index => $value];
    foreach ($array as $indice => $valor) {
        $m[$indice] = $valor;
    }
    return $m;
}

function miArrayReverse(array $array, bool $preserve_keys = false): array
{
    if ($preserve_keys) {
        $array2 = [];
        foreach ($array as $indice => $valor) {
            $array2 = insertaValorMatriz($array2, $indice, $valor);
        }
    } else {
        $array = array_values($array);
        $n     = count($array);
        for ($i = 0; $i < $n; $i++) {
            $array2[$i] = $array[$n - $i - 1];
        }
    }
    return $array2;
}

$n = rand(7, 10);
$m = generaMatrizEnterosRandRand($n, 1, 10);

print "  <h2>Matriz de $n valores enteros</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m, true) . "</pre>\n";
print   "\n";

$m2 = miArrayReverse($m, true);

print "  <h2>La misma matriz, al revés y manteniendo los índices</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m2, true) . "</pre>\n";
print   "\n";

$m2 = miArrayReverse($m);

print "  <h2>La misma matriz, al revés, pero sin mantener los índices</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m2, true) . "</pre>\n";
print "\n";
?>

Funciones (1) 21 - sumaValorMatriz()

<?php
function generaMatrizEnterosRand(int $n, int $min, int $max): array
{
    for ($i = 0; $i < $n; $i++) {
        $m[] = rand($min, $max);
    }
    return $m;
}

function sumaValorMatriz(array $m, int|float $x): array
{
    foreach ($m as $valor) {
        $m2[] = $valor + $x;
    }
    return $m2;
}

$n = rand(3, 7);
$m = generaMatrizEnterosRand($n, 1, 10);

print "  <h2>Matriz de $n números</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m, true) . "</pre>\n";
print   "\n";

$valor = rand(1, 10);
$m2    = sumaValorMatriz($m, $valor);

print "  <h2>La misma matriz, sumando $valor a cada valor</h2>\n";
print "\n";
print "  <pre>\n" . print_r($m2, true) . "</pre>\n";
print "\n";
?>