Está en la página 1de 16

Programacin en Matlab

Manera de realizar estos ejercicios: Es importante que pienses las soluciones de los problemas y las escribas en una
hoja de papel antes de comprobarlo en el ordenador. Recuerda que tu objetivo -y el nuestro- es que aprendas a trabajar
con Matlab. Es muy difcil que lo consigas si no piensas un poco antes de ver la solucin.

1. Variables
a) Dado el siguiente cdigo:

a = a + 2;
b = b * 3;
c = rem(b,a);

Cunto valen a, b y c si al principio a = 3 y b = 4?


Cunto valen a, b y c si al principio a = 1 y b = 5?

b) Describe qu hacen cada una de las siguientes sentencias

a = 3;
b = 4;
temp = a;
a = b;
b = temp;

c) Qu consigue hacer el cdigo del apartado a?

d) Para qu sirve la variable temp? Se puede eliminar?

e) Modifica el cdigo del apartado a para que se asigne primero la variable b y luego la variable a.

f) Escribe un pequeo programa que intercambie el valor de tres variables a, b y c. El orden es a->b, b->c y c->a.

2. Lectura y escritura de datos

a) Cul es el resultado si ejecutamos las siguientes sentencias?

a = 3;
b = 4;
fprintf(El resultado de sumar a+b si a=%d y b=%d es: %d, a, b, a+b);

Pgina 1 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
b) Cul es el resultado si ejecutamos las siguientes sentencias?

cadena = Hola Mundo!;


disp(upper(cadena(2:8))

c) Cul es el resultado si ejecutamos las siguientes sentencias?

a = 10;
b = 4;
fprintf(El resultado de multiplicar a*b si a=%d y b=%d es:\n %d, a, b,
a+b);

d) Qu hace el siguiente cdigo?

var = input (introduce un nmero );


var2= 5*var

e) Qu hace el siguiente cdigo?

var = input (introduce un nmero ,s);


var2= 5*var

3. Operadores relacionales
Dados los escalares a = 5, b = 2, c = -4, determinar los valores de verdad de las proposiciones.

a) a>b

b) ~(b<c)

c) (a>b)||(c>b)

d) ~((a<b)&&(c<b))

e) (a > b) || (a > c)

f) (a < b && a > c) || (b > c)

g) (a > b) || ((a > c) && (b < a))

h) Siendo A = [2 7 6; 9 0 5; 3 0.5 6]; y B = [8 7 0; 3 2 5; 4 -1 7]; Cul es la salida del siguiente cdigo?

a. A == B

b. A > 2

Pgina 2 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
4. Condicionales
a) Cul es la salida por pantalla de los siguientes cdigos?

if 8 > 7
disp('Yep')
else
disp('Nope')
end

var = 'Panda';
if strcmp(var,'panda')
disp('Cute!')
elseif strcmp(var,'Panda')
disp('Regal!')
else
disp('Ugly...')
end

temp = 26;
if temp > 30
disp('Hot')
elseif temp > 40
disp('REALLY HOT!')
elseif temp > 20
disp('Comfortable')
else
disp('Cold')
end

temp = '26';
if temp > 30
disp('Hot')
elseif temp > 40
disp('REALLY HOT!')
elseif temp > 20
disp('Comfortable')
else
disp('Cold')
end

Pgina 3 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
b) Modifica el siguiente cdigo para que muestre por pantalla la palabra Hot si la temperatura est entre 25 y
35. Si est por encima mostrar REALLY HOT.

if temp > 40
disp('REALLY HOT!')
elseif temp > 30
disp('Hot')
elseif temp > 20
disp('Comfortable')
else
disp('Cold')
end

c) Dado el siguiente cdigo:

resultado = false;
if valor >= limite_1 && valor < limite_2
resultado = true;
end

Cunto vale resultado si valor = 5, limite_1 = 3 y limite_2 = 8?


Cunto vale resultado si valor = 5, limite_1 = 3 y limite_2 = 4?
Cunto vale resultado si valor = 1, limite_1 = 1 y limite_2 = 4?

d) Qu hace el siguiente cdigo? Se valorar ms una descripcin de la finalidad del cdigo por ejemplo
suma los elementos en posicin par de un vector o devuelve el mximo de un vector - que una descripcin
del cdigo lnea a lnea.

if a<b && a<c % Se supone que a, b y c estn definidos


disp(Hola Mundo);
elseif b<c
disp(Hello World);
else
disp(Ciao Mondo);
end

e) Escribe un trozo de cdigo que muestre por pantalla la frase Hello World! si la variable hola es mayor o
igual a tres.

f) Escribe un trozo de cdigo que compare las variables varA y varB. Si varA es mayor que varB mostrar
por pantalla Mayor. Si varA es menor que varB mostrar por pantalla Menor. En otro caso mostrar por
pantalla Igual.

Pgina 4 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
5. Bucles
a) Cul es la salida por pantalla de los siguientes cdigos?

num = 10;
for num=1:5
disp(num)
end
disp(num)

divisor = 2;
for num=0:2:10
disp(num / divisor)
end

for variable=1:20
if rem(variable,4) == 0
disp(variable)
end
if rem(variable,16) == 0
disp('Bu!')
end
end

cadena = 'hola';
for letter=1:length(cadena)
disp(cadena(letter))
end

count = 0;
cadena = ('nieva!');
for letter=1:length(cadena)
fprintf('La letra # %d es %s\n', letter,
cadena(letter))
count = count + 1;
end
disp(count)

losses = [1, 25, 4, 9, 16];


net = 100;
for loss=1:length(losses)
net = net - loss;
end
disp(net)

Pgina 5 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
b) Modifica el tercer cdigo anterior para que muestre los mltiplos de tres. Si el valor es 12 adicionalmente
mostrar la cadena Bravo!

c) El siguiente cdigo pretende contar el nmero de elementos positivos en un vector. En el recuadro falta una
lnea de cdigo. Escribe la lnea que falta.

mi_vector = [1, -2, -4, 3, 8, 5];


contador = 0;
for cont=1:length(mi_vector)
if mi_vector(cont) > 0

end
end
disp(contador)

d) Dado el siguiente cdigo

myStr = 'biologia';

for cont = 1:length(myStr)


disp(myStr(cont))
end

disp('done')

Contesta las siguientes preguntas:

Cuntas veces se muestra la b por pantalla?


Cuntas veces se muestra la i por pantalla?
Cuntas veces se muestra la l por pantalla?
Cuntas veces se muestra la a por pantalla?
Cuntas veces se muestra done por pantalla?

Pgina 6 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
e) Dado el siguiente cdigo

greeting = 'Hello!';
contador = 0;

for cont = 1:length(greeting)


contador = contador + 1;
if rem(cont, 2) == 0
disp(greeting(cont))
end
disp(greeting(cont))
end

disp('done')

Contesta las siguientes preguntas:

Cuntas veces se muestra la H por pantalla?


Cuntas veces se muestra la e por pantalla?
Cuntas veces se muestra la l por pantalla?
Cuntas veces se muestra la o por pantalla?
Cuntas veces se muestra ! por pantalla?
Cuntas veces se muestra done por pantalla?

f) Dado el siguiente cdigo indique qu se muestra por pantalla al ejecutarlo:

valores = [1, 25, 4, 9, 16];


inicio = 100;
for cont=1:length(valores)
inicio = inicio valores(cont);
end
disp(inicio)

g) Dado el siguiente cdigo

resultado = 0;
for cont = 1:length(vector)
if vector(cont) > resultado
resultado = vector(cont);
end
end

Cunto vale resultado si al principio vector = [1 2 3 4 5]?


Cunto vale resultado si al principio vector = [20 -10 6 -2 0]?

Pgina 7 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
h) Qu hace el siguiente cdigo? Se valorar ms una descripcin de la finalidad del cdigo por ejemplo
suma los elementos en posicin par de un vector o devuelve el mximo de un vector - que una descripcin
del cdigo lnea a lnea.

x = [1 8 3 9 0 1 12 14 -7];
total = 0;
for j = 2:2:length(x)
total = total + x(j);
end

i) Dado el siguiente cdigo rellena la tabla con los valores de las variables en las distintas iteraciones:

m = 2; n = 3;
for i = 1:m
for j = 1:n
k = i + j;
end
end

i j k

Pgina 8 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
j) Dado el siguiente cdigo

universidad = 'Universidad de Granada';


numVocales = 0;
numCons = 0;
for cont = 1:length(universidad)
if universidad(cont) == 'a' ...
|| universidad(cont) == 'e' ...
|| universidad(cont) == 'i' ...
|| universidad(cont)== 'o' ...
|| universidad(cont)== 'u'
numVocales = numVocales + 1;
else
if universidad(cont)== 'a' ...
|| universidad(cont) == 'G'
disp (universidad(cont))
end
numCons = numCons - 1;
end
end
fprintf('numVocales vale: %d\n', numVocales)
fprintf('numCons vale: %d\n', numCons)

Contesta las siguientes preguntas:

Cuntas veces se muestra la a por pantalla?


Cuntas veces se muestra la G por pantalla?
Cunto valdr numVocales?
Cunto valdr numCons?

k) Convierte los cdigos siguientes en cdigos equivalentes que usen la estructura for.

disp(2)
disp(4)
disp(6)
disp(8)
disp(10)
disp('Goodbye!')

disp('Hello!')
disp(10)
disp(8)
disp(6)
disp(4)
disp(1)

Pgina 9 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
l) Escribe un programa que sume los nmeros pares desde 1 hasta 30 y muestre el resultado por pantalla.

m) Escribe un programa que rellene una matriz de 10 filas y 10 columnas usando la estructura forend. Cada
elemento tomar el valor de la suma de su fila y su columna.

n) Dado el siguiente cdigo rellena la tabla con los valores de las variables en las distintas iteraciones:

cont = 4;
resultado = 0;
limite = 0;
while limite < cont
resultado = resultado + cont;
cont = cont - 1;
end

cont resultado limite

o) Cul es la salida por pantalla de los siguientes cdigos? SI el programa nunca termina indcalo.

num = 0;
while num <= 5
disp(num);
num = num + 1;
end

disp('Fuera del bucle')


disp(num)

num = 10;
while num > 3
num = num - 1;
disp(num)
end
Pgina 10 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
p) Dado el siguiente cdigo rellena la tabla con los valores de las variables en las distintas iteraciones:

numberOfLoops = 0;
numberOfApples = 2;
while numberOfLoops < 10
numberOfApples = numberOfApples * 2;
numberOfApples = numberOfApples + numberOfLoops;
numberOfLoops = numberOfLoops - 1
end
printf('Number of apples: %d',numberOfApples)

numberOfApples numberOfLoops

q) Dado el siguiente cdigo:

cont = 0;
resultado = 0;
while cont < limite
resultado = resultado + cont;
cont = cont + 1;
end
Cunto vale resultado si al principio limite = -1?
Cunto vale resultado si al principio limite = 3?
Cunto vale resultado si al principio limite = 0?

r) Convierte los cdigos siguientes en cdigos equivalentes que usen la estructura while.

disp(2)
disp(4)
disp(6)
disp(8)
disp(10)
disp('Goodbye!')

Pgina 11 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
disp('Hello!')
disp(10)
disp(8)
disp(6)
disp(4)
disp(1)

6. Scripts

a) Escribe un script que resuelva el siguiente problema:

Dados dos nmeros a y b -ya definidos- si a es mayor que b y menor que 2*b muestra el producto a*b. Si b es
mayor que a muestra la suma a+b y en otro caso muestra el mensaje Nmeros errneos. Usar la
sentencia if elseif else end y la funcin disp/fprintf.

b) Escribe un script que resuelva el siguiente problema:

Queremos programar una pantalla de informacin en la autopista. La pantalla mostrar distintos mensajes
segn la velocidad del conductor y si se le ha puesto alguna multa anteriormente o no. Los mensajes a mostrar
son:

Velocidad Reincidente Mensaje

<= 120 Da igual Buen viaje!

120-140 S Multa de 160

>140 S Multa de 200

>120 No Multa de 100

c) Escribe un script que resuelva el siguiente problema

Dado un vector con nmeros positivos y negativos queremos mostrar por pantalla la suma de los elementos
negativos del vector.

Pgina 12 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
d) Escribe un script que resuelva el siguiente problema:

Queremos mostrar por pantalla cunto vale la suma de todos los nmeros desde 1 hasta N. Donde N va de 1 a
20. La salida por pantalla deber ser:

N Suma

1 1

2 3

3 6

20 210

e) Escribe un script que resuelva el siguiente problema

Escribir un script que, dado un vector x (por ejemplo x = [9 1 5 -9 4 -8 1]) ya definido, muestre el producto de
todos los elementos en posicin par. Usar la sentencia for end y la funcin disp/fprintf.

f) Escribe un script que resuelva el siguiente problema:

Queremos un programa que pida al usuario nmeros positivos. El usuario podr introducir todos los nmeros
positivos que quiera. Cuando el usuario no quiera introducir ms nmeros escribir un nmero negativo
cualquiera. En ese momento el programa mostrar por pantalla la media de los nmeros positivos introducidos
hasta ese momento.

7. Funciones
a) Qu hacen las siguientes funciones?

function [ salida ] = prueba (num)


%una funcin
valor = 1;
for i=1:2:num
valor = valor * i;
end
salida = valor;
end
Pgina 13 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
function [ salida ] = prueba (vector)
%una funcin

for i=1:length(vector)
if vector(i) < 0
vector (i) = 0;
end
end

salida = vector;
end

function [ salida ] = prueba (vector)


%una funcin
salida = [];
for i=1:length(vector)
if vector(i) < 0
salida = [salida,vector(i)];
end
end

end

b) Qu hace el siguiente cdigo? Se valorar ms una descripcin de la finalidad del cdigo por ejemplo
suma los elementos en posicin par de un vector o devuelve el mximo de un vector - que una descripcin
del cdigo lnea a lnea.

function [ salida ] = prueba (vector)


%una funcin

for i=1:length(vector)
if vector(i) < 0
vector (i) = 0;
end
end

salida = vector;
end

c) Hemos escrito una funcin que nos devuelve cuantas veces aparece una letra en una palabra, pero se nos ha
desordenado el programa. A la izquierda tienes todas las lneas de cdigo de la funcin. Indica su orden
correcto en el listado de la derecha.
Pgina 14 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
A. if palabra(cont) == letra 1.
B. for cont = 1:length(palabra) 2.
C. resultado = num_letras; 3.
D. num_letras = 0; 4.
E. function resultado = contar_letras(palabra, letra) 5.
F. num_letras = num_letras + 1; 6.
G. end 7.
H. end 8.

d) Modifica la primera funcin del apartado a para que calcule la suma de todos los mltiplos de cinco desde 1
hasta num.

e) Modifica la segunda funcin del apartado a para que substituya por cinco todos los nmeros mayores que
cinco.

f) Escribe una funcin de nombre esVocal que tome como entrada una letra y devuelva true si es una vocal y
false si es una consonante.

g) Escribe una funcin de nombre cuadrado que tome como entrada un valor y devuelva el cuadrado de ese
valor

h) Escribe una funcin de nombre a_la_quinta que tome como entrada un valor y devuelva ese valor elevado
a cinco.

i) Escribe una funcin de nombre potencia que tome como entrada dos argumentos y devuelva el primer
argumento elevado al segundo argumento.

j) Sean las funciones:

function [ salida ] = a (x,y,z)


% una funcin
if x
salida = y;
else
salida = z;
end

end

function [ salida ] = b(q,r)


%otra funcin
salida = a(q>r, q, r);
Pgina 15 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es
end

Cual es la salida de las siguientes llamadas:

o a(False, 2, 3)
o a(True, 3, 2)
o b(3, 2)
o b(4, 5)

Pgina 16 de 16

ETSI Informtica y de Telecomunicacin. C/ Periodista Daniel Saucedo Aranda s/n. 18071. Granada.

Tlfno.: +34 958 244019 Fax: +34 958 243317. Web: http://decsai.ugr.es