Ejercicios corregidos
Introducción a los algoritmos
Ejercicio 1
Para convertir un número binario en decimal, hacemos:
-
Añadir números
-
Utilizar potencias de 2 en función del peso
-
Convertir grupos de 4 bits
-
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
A
2
B
A+4
A
4
FIN
Solución
A
2
A=2, B aún no tiene valor.
B
A+4
A=2, B=6.
A
4
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
A
1
B
3
C
A+B
A
5
C
B-A
FIN
Solución
A
1
A=1, B y C aún no tiene valor.
B
3
A=1, B=3, C aún no tiene valor.
C
A+B
A=1, B=3, C=4.
A
5
A=5, B=3, C=4.
C
B-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
A
2
B
A+3
A
A+5
B
A-4
FIN
Solución
A
2
A=2, B todavía no tiene valor.
B
A+3
A=2, B=5.
A
A+5
A=7, B=5.
B
A-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
A
1
B
3
A
B
B
A
FIN
Solución
A=3, B=3
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
m
m+1
Si m = 60 Entonces
m
0
h
h + 1
FinSi
Si h = 24 Entonces
h
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
m
m+1
boolM
m = 60
Si boolM Entonces
m
0
h
h + 1
FinSi
boolH
h = 24
Si boolH Entonces
h
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]
i
FinPara
Para i De 1 Hasta 10 Hacer
Tabla2[i]
i+10
FinPara
Para i De 1 Hasta 10 Hacer
tablaSuma[i]
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]
{6,25,35,61} de enteros
tabla2:tabla[1..3]
{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.

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...