<div class="container"> <h1 >Media aritmética</h1> <input type="number" id="numero"> <input type="button" id="botontirar" value="Añadir"> <input type="button" id="botondeshacer" value="Deshacer"> <input type="button" id="botonreset" value="Empezar de nuevo"> <div id="resultado"></div> <script> document.getElementById("botontirar").addEventListener("click", calcular); document.getElementById("botondeshacer").addEventListener("click", deshacer); document.getElementById("botonreset").addEventListener("click", reset); var numeros = []; function reset() { numeros = []; document.getElementById('resultado').innerHTML = ""; } function deshacer() { numeros.pop(); document.getElementById('resultado').innerHTML = "<p>" + numeros.toString() + "</p>"; document.getElementById('resultado').innerHTML += "<p>Media: " + mediaAritmetica(numeros) + "</p>"; } function calcular() { var numero = parseInt(document.getElementById('numero').value); numeros.push(numero); document.getElementById('resultado').innerHTML = "<p>" + numeros.toString() + "</p>"; document.getElementById('resultado').innerHTML += "<p>Media: " + mediaAritmetica(numeros) + "</p>"; document.getElementById('numero').value = ""; } function mediaAritmetica(tabla) { var suma = 0; for (var i = 0; i < tabla.length; i++) { suma += tabla[i]; } return suma / tabla.length; } </script> </div>
Etiqueta: array
Ejercicio palabras mal escritas
<style> .celdako,.celdaok{ cursor: pointer; width:100px; height:50px; text-align: center; } .celdaok:active { background-color:lightgreen; } .celdako:active { background-color: red; } </style> <?php function muestraTabla($tabla) { echo "<pre>"; print_r($tabla); echo "</pre>"; } $palabras = array( array('length', array('lenght', 'legnth', 'langth', 'lentgh', 'lenhgt')), array('locomotion', array('lomocotion', 'lotocomion', 'molocotion', 'locamotion', 'locomocion')), array('bedroom', array('vedroom', 'bedrum', 'berdoom', 'bedrun', 'bedroon', 'beddroom')), array('coin', array('coyn', 'cony', 'cain', 'con')), array('stable', array('estable', 'stoble', 'stabel', 'tsable')), array('crush', array('cruhs', 'clush', 'cruss', 'crusah')), array('fantasy', array('fantasi', 'fantascy', 'fatnasy', 'frantasy')), array('pillow', array('pellow', 'pillou', 'pilluw', 'pilow', 'pilou')), ); function array_to_table($tabla, $buena,$ancho=2) { $res = "<table border=1>"; for ($i = 0; $i < count($tabla); $i++) { if ($i % $ancho == 0) { $res .= "<tr>"; } $res .= '<td class="' . ($tabla[$i] == $buena ? 'celdaok' : 'celdako') . '">' . $tabla[$i] . "</td>"; if ($i % $ancho == $ancho-1) { $res .= "</tr>"; } } $res .= "</table>"; return $res; } //Seleccionar una palabra al azar rand (0,count($palabras)-1) $palabra = $palabras[rand(0, count($palabras) - 1)]; // muestraTabla($palabra); //Coger la palabra buena y seleccionar tres palabras malas al azar $tablero[] = $palabra[0]; // $malos = $palabra[1]; //shuffle($malos); //$malos=array_slice($malos, 0, 8); $tablero = array_merge($tablero, $palabra[1]); while (count($tablero)<9){ $a=$palabras[array_rand($palabras)]; $palazar=$a[1][array_rand($a[1])]; if (!in_array($palazar, $tablero)){ $tablero[]=$palazar; } } // muestraTabla($tablero); //Mezclar shuffle($tablero); //Y mostrar echo array_to_table($tablero, $palabra[0],3); ?>
Funciones esMagico y crearCuadrado
function cuadrado_magico($ancho) { if ($ancho % 2 == 0) $ancho--; $posy = 0; $posx = floor($ancho / 2); $cont = 1; while ($cont <= $ancho ** 2) { if (empty($c[$posy][$posx])) { $c[$posy][$posx] = $cont++; $posx = ($posx + 1) % $ancho; $posy = ($posy - 1 + $ancho) % $ancho; } else { $posx = ($posx - 1 + $ancho) % $ancho; $posy = ($posy + 2) % $ancho; } } return $c; } function esMagico($t) { //Sumo la primera fila para tener un valor de referencia $sum = array_sum($t[0]); $sd1 = 0; $sd2 = 0; for ($i = 0; $i < count($t); $i++) { $sf = 0; $sc = 0; $sd1 += $t[$i][$i]; $sd2 += $t[$i][count($t) - 1 - $i]; for ($j = 0; $j < count($t[$i]); $j++) { $sf += $t[$i][$j]; //Sumo la fila $sc += $t[$j][$i]; //Sumo la columna } //Si fila o columna son diferentes al valor de referencia no es mágico if ($sf != $sum || $sc != $sum) { return false; } } return !($sd1 != $sum || $sd2 != $sum); }
Funciones de arrays (VI)
Funciones para mezclar o comparar arrays:
Funciones de suma y producto:
Funciones de mezcla de variables y array:
Pasar una función a cada elemento del array:
Ejemplo de este último:
$frutas = array("d" => "limón", "a" => "naranja", "b" => "banana", "c" => "manzana"); function test_alter(&$elemento1, $clave, $prefijo) { $elemento1 = "$prefijo: $elemento1"; } function test_print($elemento2, $clave) { echo "$clave. $elemento2 \n"; } echo "Antes ...:\n"; array_walk($frutas, 'test_print'); array_walk($frutas, 'test_alter', 'fruta'); echo "... y después:\n"; array_walk($frutas, 'test_print');
Funciones para convertir un array bidimensional en html
function array_to_table($tabla) { $res = "<table border=1>"; for ($i = 0; $i < count($tabla); $i++) { $res .= "<tr>"; for ($j = 0; $j < count($tabla[$i]); $j++) { $res .= "<td>" . $tabla[$i][$j] . "</td>"; } $res .= "</tr>"; } $res .= "</table>"; return $res; } function array_to_table2($tabla) { $res = "<table border=1>"; foreach ($tabla as $n) { $res .= "<tr>"; foreach ($n as $el) { $res .= "<td>" . $el . "</td>"; } $res .= "</tr>"; } $res .= "</table>"; return $res; }
Arrays multidimensionales
En PHP los arrays multidimensionales se crean con arrays dentro de arrays:
function muestraTabla($tabla) { echo "<pre>"; print_r($tabla); echo "</pre>"; } $m=array( array(1,2), array(3,4), ); muestraTabla($m); for($i=0;$i<count($m);$i++){ for ($j=0;$j<count($m[$i]);$j++){ echo $m[$i][$j]."<br/>"; } } foreach ($m as $n){ foreach ($n as $el){ echo $el."<br/>"; } }
Podemos tener las dimensiones que queramos:
$m = array( array( array(0, 1), array(2, 3) ), array( array(4, 5), array(6, 7) ), array( array(8, 9), array(10, 11) ), ); muestraTabla($m); for ($i = 0; $i < count($m); $i++) { for ($j = 0; $j < count($m[$i]); $j++) { for ($k = 0; $k < count($m[$i][$j]); $k++) { echo $m[$i][$j][$k] . "<br/>"; } } } foreach ($m as $n) { foreach ($n as $el) { foreach ($el as $e) { echo $e . "<br/>"; } } }
Lo mismo que usamos para recorrer lo podemos usar para generar:
for ($i = 0; $i < 10; $i++) { for ($j = 0; $j < 10; $j++) { $m[$i][$j]=$j+$i*10; } } muestraTabla($m);
Un array puede ser cualquier combinación de valores, asociativos, arrays dentro de arrays dentro de arrays….
$tablaLoca = array( "juan", "pepe" => array(1, 2, 3), array( array("a","b"), "w" ), 5, "ppp"=>array( "q"=>3, "w"=>array(1,2,array(7,8)) ) ); muestraTabla($tablaLoca);
Si quisiéramos acceder a los valores de una tabla como la anterior necesitaríamos una función recursiva:
function valores($var){ $res=""; if (is_array($var)){ foreach($var as $v){ $res.=valores($v); } } else{ $res=$var.","; } return $res; } echo valores($tablaLoca);
Ordenar por funciones propias
Con usort(), uasort() y uksort() podemos ordenar por funciones propias. Esto nos da mucha flexibilidad a la hora de ordenar. Ejemplos:
function muestraTabla($tabla) { echo "<pre>"; print_r($tabla); echo "</pre>"; } function miOrden($a, $b) { $la = strlen($a); $lb = strlen($b); return $la < $lb ? -1 : 1; } function acentos($name1, $name2) { $patterns = array( 'a' => '(á|à|â|ä|Á|À|Â|Ä)', 'e' => '(é|è|ê|ë|É|È|Ê|Ë)', 'i' => '(í|ì|î|ï|Í|Ì|Î|Ï)', 'o' => '(ó|ò|ô|ö|Ó|Ò|Ô|Ö)', 'u' => '(ú|ù|û|ü|Ú|Ù|Û|Ü)', 'n '=>'(ñ)' ); $name1 = preg_replace(array_values($patterns), array_keys($patterns), $name1); $name2 = preg_replace(array_values($patterns), array_keys($patterns), $name2); return strcasecmp($name1, $name2); } $array1 = array("no", "ño", "na", "ña","ánimo","oído","ópera","nzuelo"); usort($array1,'miOrden'); muestraTabla($array1); usort($array1,'acentos'); muestraTabla($array1);
Arrays multidimensionales en PHP
$b=array(array('A','b'),array('c','d','e','f'),array('g','h','i')); echo "<pre>"; print_r($b); echo "</pre>"; echo $b[1][2]; echo "<br/>"; for ($i=0;$i<count($b);$i++){ for($j=0;$j<count($b[$i]);$j++){ echo "($i,$j) ".$b[$i][$j]." | "; } echo "<br/>"; } foreach($b as $valor){ foreach($valor as $letra){ echo $letra."|"; } echo "<br/>"; } for ($i = 0; $i < 5; $i++) for ($j = 0; $j < 5; $j++) $c[$i][$j] = $j + $i * 5; echo array_to_table($c); function array_to_table($tabla) { $res="<table border=1>"; for ($i = 0; $i < count($tabla); $i++) { $res.="<tr>"; for ($j = 0; $j < count($tabla[$i]); $j++) { $res.="<td>" . $tabla[$i][$j] . "</td>"; } $res.="</tr>"; } $res.="</table>"; return $res; } //Mezcla sin sentido, a lo loco: $tutifruti=array('juan'=>array('a','b','c'),'ana'=>array('c'=>3,'d'=>6,'e'=>8),'rosa'=>array('j','k',array(1,2,3,4))); var_dump($tutifruti);
Arrays asociativos en PHP
$a=array('Juan'=>'Técnico','Ana'=>'Marketing','Rosa'=>'Administración'); $a['Jose']='Ventas'; echo $a['Juan']."<br/>"; foreach($a as $clave=>$valor){ echo $clave." - ".$valor."<br/>"; } echo "<pre>"; print_r($a); var_dump($a); echo "</pre>";