¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros y videos
  2. Algoritmia - Técnicas fundamentales de programación
  3. Técnicas fundamentales de programación
Extrait - Algoritmia - Técnicas fundamentales de programación Ejemplos en PHP (numerosos ejercicios corregidos)
Extractos del libro
Algoritmia - Técnicas fundamentales de programación Ejemplos en PHP (numerosos ejercicios corregidos) Volver a la página de compra del libro

Ejercicios corregidos

Introducción a los algoritmos

Ejercicio 1

Para convertir un número binario en decimal, hacemos:

  1. Añadir números

  2. Utilizar potencias de 2 en función del peso

  3. Convertir grupos de 4 bits

  4. Sumar los números y dividirlos por 2

Solución

Utilizar potencias de 2 en función del peso.

Ejercicio 2

¿Cuál es el valor máximo de un número codificado en 16 bits sin tener en cuenta el signo? Indica cómo calcular este valor y expresa el resultado en decimal y hexadecimal.

Solución

El tamaño máximo de un número de 16 bits es 216-1. Este resultado se encuentra fácilmente así:

1*215 + 1*214 + 1*213 + … + 1*20

Esto da 65535, el número máximo que se puede almacenar en 16 bits, no 65536 (216).

Su representación hexadecimal es FFFF.

Ejercicio 3

Convierta el número decimal 3407 en binario y hexadecimal.

Solución

3407-2048 = 1359, por lo que hay 1 vez 2048 en 3407

1359-1024 = 335 así que 1

335-512 = -177 así que 0

335-256 = 79 así que 1

79-128 = -49 así que 0

79-64 = 15 así que 1

15-32 = -17 así que 0

15-16 = -1 así que 0

15-8 = 7 así que 1

7-4 = 3 así que 1

3-2 = 1 así que 1

1-1 = 0 entonces 1

El resultado es 1101 0100 1111, es decir, 12 bits.

En hexadecimal, podemos partir del resultado binario y consultar la tabla de este libro para encontrar: D4F.

Ejercicio 4

¿Cuál...

Variables y operadores

Ejercicio 1

¿Cuáles serán los valores de las variables A y B después de ejecutar las siguientes instrucciones?

VAR  
A,B:enteros  
INICIO  
Aimages/flechegauche.PNG2  
Bimages/flechegauche.PNGA+4  
Aimages/flechegauche.PNG4  
FIN 

Solución

Aimages/flechegauche.PNG2images/flechegauche.PNG 

A=2, B aún no tiene valor.

Bimages/flechegauche.PNGA+4 

A=2, B=6.

Aimages/flechegauche.PNG4 

A=4, B=6.

Ejercicio 2

¿Cuáles serán los valores de las variables A, B y C después de ejecutar las siguientes instrucciones?

VAR  
A,B,C:enteros  
INICIO  
Aimages/flechegauche.PNG1  
Bimages/flechegauche.PNG3  
Cimages/flechegauche.PNGA+B  
Aimages/flechegauche.PNG5  
Cimages/flechegauche.PNGB-A  
FIN 

Solución

Aimages/flechegauche.PNG1 

A=1, B y C aún no tiene valor.

Bimages/flechegauche.PNG3 

A=1, B=3, C aún no tiene valor.

Cimages/flechegauche.PNGA+B 

A=1, B=3, C=4.

Aimages/flechegauche.PNG5 

A=5, B=3, C=4.

Cimages/flechegauche.PNGB-A 

A=5, B=3, C=-2.

Ejercicio 3

¿Cuáles serán los valores de las variables A y B después de ejecutar las siguientes instrucciones?

VAR  
A,B:enteros  
INICIO  
Aimages/flechegauche.PNG2  
Bimages/flechegauche.PNGA+3  
Aimages/flechegauche.PNGA+5  
Bimages/flechegauche.PNGA-4  
FIN 

Solución

Aimages/flechegauche.PNG2 

A=2, B todavía no tiene valor.

Bimages/flechegauche.PNGA+3 

A=2, B=5.

Aimages/flechegauche.PNGA+5 

A=7, B=5.

Bimages/flechegauche.PNGA-4 

A=7, B=3.

Ejercicio 4

¿Cuáles son los valores de A y B al final del siguiente código? Adapte el algoritmo para intercambiar los valores de A y B.

VAR  
A,B:enteros  
INICIO  
Aimages/flechegauche.PNG1  
Bimages/flechegauche.PNG3  
Aimages/flechegauche.PNGB  
Bimages/flechegauche.PNGA  
FIN 

Solución

A=3, B=3

Se podría...

Pruebas y lógica booleana

Ejercicio 1

Escriba un algoritmo que utilice el teclado para leer tres nombres comunes y le diga si están en orden alfabético.

Solución

VAR   
a, b, c:cadena   
INICIO   
Visualizar "1er nombre"   
Introducir a   
Visualizar "2º nombre"   
Introducir b  
Visualizar "3er nombre"   
Introducir c  
  
Si a < b Y b < c Entonces   
  Visualizar "Los 3 nombres están en orden alfabético"  
Sino   
  Visualizar " Los 3 nombres no están en orden alfabético "  
FinSi   
  
Fin 

Ejercicio 2

Utilizando comparaciones, escriba un algoritmo que lea las horas y los minutos del teclado y muestre la hora un minuto después. Por ejemplo, si el usuario teclea 20 y luego 33, el algoritmo debería responder:

"Dentro de un minuto serán 20 hora(s) 34 minuto(s).

Nota: se supone que el usuario introduce una hora válida.

Solución

VAR  
h, m:entero  
INICIO  
Visualizar "Hora"  
Introducir h  
Visualizar "Minuto"  
Introducir m  
mimages/flechegauche.PNGm+1  
Si m = 60 Entonces  
  m images/flechegauche.PNG 0  
  h images/flechegauche.PNG h + 1  
FinSi  
Si h = 24 Entonces  
  h images/flechegauche.PNG 0  
FinSi  
Visualizar "En un minuto será " + h + " hora(s) " + m + "minuto(s)"  
Fin 

En la sentencia Visualizar, el signo + se utiliza para concatenar cadenas de caracteres ("En un minuto será") y las variables (h o m).

Ejercicio 3

Escriba el mismo algoritmo, pero utilizando dos variables booleanas para comprobar si los minutos son iguales a 60 y las horas a 24, sin comparaciones en los SI.

Solución

VAR  
h, m:entero  
boolH, boolM:booleanos  
INICIO  
Visualizar "Hora"  
Introducir h  
Visualizar "Minuto"  
Introducir m  
mimages/flechegauche.PNGm+1  
boolMimages/flechegauche.PNGm = 60  
Si boolM Entonces  
  m images/flechegauche.PNG 0  
  h images/flechegauche.PNG h + 1  
FinSi  
boolHimages/flechegauche.PNGh = 24  
Si boolH Entonces  
  h images/flechegauche.PNG 0  ...

Los bucles

Ejercicio 1

Escriba un algoritmo que pida un número inicial y luego muestre la tabla de multiplicar de ese número. Ejemplo con el número 6:

1+2+3+4+5+6 = 21

Escribe el programa PHP equivalente.

Solución

VAR  
numero, i, suma:entero   
INICIO   
Visualizar "Número"   
Introducir numero   
suma = 0   
Para i De 1 Hasta numero Hacer   
  suma = suma + i   
FinPara   
Visualizar "La suma de los enteros De 1 Hasta " + numero + " es igual a " +  
suma   
FIN 

En PHP:

<html>   
  <head>   
    <title>suma</title>   
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  </head>   
  <body>   
  <?php   
  if(!isset($_GET['number'])) {   
  ?>  
    <form method="GET">  
      Indique un número: <input type="text" size="4" name="number" /><br />  
      <input type="submit" name="OK" />   
    </form>   
  <?php   
  } else {   
    $number=$_GET['number'];   
    $suma = 0;  
    for ($i=1;$i<=$number;$i++) {   
           $sum = $sum + $i;   
    }  
    echo "La suma de los enteros De 1 Hasta ".$number." Es igual a ".$sum;  
  }   
  ?>   
  </body>   
</html> 

Ejercicio 2

Escriba un algoritmo que pida un número inicial y luego muestre la tabla de multiplicar de ese número. Ejemplo con el número 6:

Tabla del 6:  
6 x 1 = 6  
6 x 2 = 12  
6 x 3 = 18   
... 

Escriba el programa PHP equivalente.

Solución

VAR   
numero, i:entero   
INICIO   
Visualizar "Número"   ...

Tablas y estructuras

Ejercicio 1

Cree una tabla que contenga los números del 1 al 10 y otra que contenga los números del 11 al 20. A continuación, cree otra tabla que contenga la suma de las dos primeras tablas y muestre sus valores. Necesita utilizar bucles para crear estas tablas.

Escribe el programa PHP equivalente.

Solución

VAR  
tabla1:tabla[1..10] de enteros  
tabla2:tabla[1..10] de enteros  
tablaSuma:tabla[1..10] de enteros  
INICIO  
Para i De 1 Hasta 10 Hacer  
  tabla1[i]images/flechegauche.PNGi  
FinPara  
Para i De 1 Hasta 10 Hacer  
  Tabla2[i]images/flechegauche.PNGi+10  
FinPara  
Para i De 1 Hasta 10 Hacer  
  tablaSuma[i]images/flechegauche.PNG tabla1[i] + tabla2[i]  
FinPara  
Para i De 1 Hasta 10 Hacer  
  Visualizar tablaSuma[i]  
FinPara  
FIN 

En PHP:

<?php  
$table1 = array();  
$table2 = array();  
$tableSum = array();  
  
for ($i=1;$i<=10;$i++) { //tabla De 1 Hasta 10  
    $table1[$i]=$i;  
}  
for ($i=1;$i<=10;$i++) { //tabla de 11 hasta 20  
    $table2[$i]=$i+10;  
}  
for ($i=1;$i<=10;$i++) { //tabla con la suma de las otras 2 tablas  
    $tableSum[$i]=$table1[$i]+$table2[$i];  
}  
//visualiza los valores de la suma de las otras 2 tablas  
for ($i=1;$i<=10;$i++) {  
    echo $tableSum[$i]."<br />";  
}  
?> 

Ejercicio 2

Dos tablas:

  • La tabla1 está formada por los elementos 6, 25, 35 y 61.

  • La tabla2 está formada por los elementos 12, 24 y 46.

Escriba el algoritmo para calcular un valor representativo de estas dos tablas, S. El valor S se calcula multiplicando cada valor de la tabla1 por el valor de la tabla2 y sumándolos a continuación.

En este ejemplo, el valor S será igual a:

12*6+12*25+12*35+12*61+24*6+24*25+24*35+24*61+46*6+46*25+46*35+46*61

Por supuesto, tiene que utilizar bucles para hacer este ejercicio.

Escriba el programa PHP equivalente.

Solución

VAR  
tabla1:tabla[1..4]images/flechegauche.PNG{6,25,35,61} de enteros  
tabla2:tabla[1..3]images/flechegauche.PNG{12,24,46} de enteros  
suma, num_tabla1...

Subprogramas

Ejercicio 1

Cree una función que calcule la suma de valores pasados como argumentos. Esta función tendrá como primer argumento por referencia el resultado y como segundo argumento la tabla de valores. Llama a la función con un array que contenga los números 5,9,4 y 18. Escriba la solución en PHP.

Solución

<?php  
  
// Función con el resultado como primer argumento por referencia  
// y la suma de los valores de la tabla pasada como segundo argumento.  
function sum(&$result,$tab_values) {  
    $result = 0;  
    foreach ($tab_values as $val) {  
         $result += $val;  
    }  
}  
// Llamada  
$table = [5,9,4,18];  
sum($result,$table); // tabla que se pasa como argumento 
echo 'suma($result,[5,9,4,18]) => ',$result,'<br />';  
?> 

Ejercicio 2

Cree una tabla que contenga 10 números aleatorios entre 1 y 100 y luego ordénela sin utilizar métodos de ordenación de tablas como sort(). Cree una función para intercambiar dos valores en una tabla. Mostrar estos valores separados por una coma. Escriba la solución en PHP.

Solución

<?php  
  
$table1 = array();  
  
//Función para intercambiar el valor en una tabla  
//La tabla se pasa por referencia  
function exchange(&$table, $i, $j)  
{  
   $temp = $table[$i];  
   $table[$i] = $table[$j];  
   $table[$j] = $temp;  
}  
  
//rellenar una tabla de 10 valores aleatorios entre 1 y 100  
for ($i=1;$i<=10;$i++) {  
    $table1[$i]=rand(1,100);  
}  
  
  
$length=10;  
while($length>0)  
{  ...

Los archivos

Ejercicio 1

Escriba un programa PHP para crear un archivo de texto si no existe ya, luego escriba "fecha y hora actuales:" seguido de la fecha actual en este archivo. En PHP, la fecha se muestra utilizando la función date(’d.m.Y G:i:s’).

Solución

<?php  
  
$ressource = fopen('log.txt', 'w+'); //creación del archivo de texto si no 
                                    //existe.  
if ($ressource) {  
       fputs($ressource, 'fecha y hora actuales:');  
       fputs($ressource, date('d.m.Y G:i:s').PHP_EOL); //escritura de 
       //la fecha y de la hora actuales  
}  
  
fclose($ressource);  
?> 

Ejercicio 2

Escriba un programa PHP para crear un fichero de texto que almacene el número de veces que una página ha sido vista.

Solución

Cree un archivo llamado counter.txt y ejecute el siguiente código:

<?php  
  
$ressource = fopen('counter.txt', 'r+');  
  
$num_views = fgets($ressource); // Lectura de la primera línea que contiene ...

Conceptos avanzados

Ejercicio 1

Escriba en PHP el algoritmo de ordenación por fusión explicado en la sección de ejemplos de ordenación.

Solución

Asegúrese de pasar la tabla por referencia cuando llame a sortMerge y merge.

<?php  
function sortMerge (&$tab, $begin, $end)  
{  
    if($begin<$end)  
    {  
           $middle = round(($begin+$end)/2,0, PHP_ROUND_HALF_DOWN);  
           sortMerge($tab, $begin, $middle);  
           sortMerge($tab, $middle+1, $end);  
           merge($tab, $begin, $middle, $end);  
    }  
}  
  
function merge (&$tab, $begin, $middle, $end)  
{  
    $tab_tempo = $tab; // tabla temporal para almacenar 
                       // los datos ordenados.  
  
    $i1 = $begin; //índice en la primera mitad de tab_tempo  
    $i2 = $middle+1; // índice en la segunda mitad de tab_tempo  
    $i = $begin; //índice en la tabla tab  ...

Una aproximación al objeto

Ejercicio 1

Cree las cinco clases del siguiente diagrama, teniendo en cuenta su herencia. Todos los métodos son públicos y los atributos privados.

images/cap9_pag53.png

Solución

Vehicle.class.php:

<?php  
class Vehicle  
    {  
        // Declaración de los atributos 
           private string $color;  
           private int $weight;  
  
  
           //métodos públicos  
           public function move()  
           {  
  
           } : void  
  
        public function add_person(float $weight_person)  
           {  
  
           } : void  
}  
?> 

Four_wheels.class.php:

<?php  
class Four_wheels extends Vehicle  
    {  
           // Declaración de los atributos  
           private int $number_door;  
  
           //método público 
           public function repaint(string $color) : void  
           {  
  
           }  
    }  
?> 

Two_wheels.class.php:

<?php  
class Two_wheels extends Vehicle  
    {  
           // Declaración de los atributos  
           private...