Sunteți pe pagina 1din 22

Ejercicios bucles y condicionales

Aqu os dejo otros cinco ejercicios


1. Realizar un programa (EcuacionTercerGrado.m),

que pida los coeficientes de una ecuacin de 3er grado y en funcin del discriminate
diga cuantas raices tiene y de que tipo son las raices (reales o complejas). Nota: No es
necesario calcular las raices
2. En base al programa anterior realizar un segundo programa
(EcuacionTercerGrado2.m), que pregunte si quiere continuar introduciendo
ecuaciones, y si es as que vuelva a preguntar por los coeficientes.
3. Realizar un programa (SucesionCondicional.m) que calcule los terminos de la
sucesion:
xn+1={a*xn si xn<1/2, a*(1-xn) si 1/2 <=xn}
preguntando por el valor incial x0 y el coeficiente a y el nmero de trminos. El valor
de a ha de ser mayor que cero y el de x0 ha de estar en el intervalo [0,1]
4. Realizar un programa (SucesionCondicional2.m), sume todos los terminos que se
muestren por pantalla en el ejercicio anterior, y clacule tambin su producto. La
suma y el producto se mostrar al final.
5. Realizar un programa (SucesionCondicional3.m) que que dir si la sucesin
converge a un valor si despus de 2 iteraciones seguidas, el valor no cambia, que
diverge si algn valor de la sucesin no es finito. Y desconocido, si despus de N
iteraciones la sucesin, ni converge, no diverge.

Soluciones bucles
Aqu os dejo las soluciones de los ejercicios de bucles
*Media.m
% Autor: Diego Viadero Lucas
% Descripcion: Programa que recoja nmeros del usuario hasta que se introduzca un 0 y
despus devuelva la media de los nmeros introducidos.
% Fecha: 18102012
% Inicio
n=input('Dame un valor: ')
% Nombramos una variable que cuente el numero de veces que se realiza el
% ciclo (contador)
c=1;
% Nombramos una variable pra que se acumule n en cada ciclo
v=0;

while n~=0
c=c+1;
v=v+n;
n=input('Dame un valor: ')
end
% Calculamos la media y la imprimimos en pantalla
m=v/c;
disp('La media es: ')
disp(m)
% Fin
disp('Fin de programa')

Bucles
Buenas en este post os mostrar como hacer bucles con Matlab
-Aqu os dejo un link en el cual os llevara a un PDF, en el que viene informacin de como
realiza un bucle:
https://dl-web.dropbox.com/get/Matlab/SentenciasDeControlBucles.pdf?w=ae7ca9a8
Los siguientes ejercios que os propongo son para practicar con los bucles con las
funciones if(condicones) y while (bucles)

Hacer un programa (media.m) que recoja nmeros del usuario hasta que se
introduzca un 0 y despus devuelva la media de los nmeros introducidos.

Hacer un programa que pida un nmero y vaya decrementando su valor en una


unidad hasta que llegue a cero (decremento.m).

Hacer un programa que pida un numero y compruebe si ese numero es primo


(primo.m).

Hace un programa que pida un nmero hasta que este nmero sea mayor que cero,
indicando con un mensaje que el nmero introducido no es mayor de cero
(numeroCorrecto.m).

Hacer un programa para imprimir la sucesin de Fibonacci


(CalcularSucesionFibonacci.m)

Hacer un programa para calcular el factorial de un nmero. (CalcularFactorial.m)

Hacer un programa que pida un nmero N y despliegue todas las combinaciones de


dos nmeros que sumados den N. (CombinacionesDeNumeros.m)

Hacer un programa que despliegue la tabla de multiplicar de un nmero X.


(TablaDeMultiplicar.m )

Soluciones condicionales (if)


Aqu van la soluciones a los cuatro ejercicios de la entrada anterior:
(Las palabras en verde son anotaciones mas y lo de negrita es lo que meteramos en Matlab o

Ocatave para realizar el programa)


-edad.m
%Descripcion: Progama que determine la edad de la persona
%Autor: Diego Viadero Lucas
%Fecha: 20121011
%0. Inicio
%1.Pedir un la edad y guardarlo en la variable A
A=input ('Cuantos aos tienes?')
%2. Comparar si A<18, si lo es imprimir en pantalla que A
%
es menor de 18 aor
if A<18
disp ('Es menor de edad')
%3. Comparar si A>=60, si lo es imprimir en pantalla que A
%
es de la tercera edad
elseif A>=60
disp ('Es de la tercera edad')
else A<60
disp ('Es mayor de edad')
end
%4.imprimir en pantalla 'Fin de programa'
disp ('Fin de programa')
%5.Fin
-signos.m
%Descripcion: Programa que determine si dos variables sean
%

positivas o negativas

%Autor: Diego Viadero Lucas


%Fecha: 20121011

%0. Inicio
%1.Pedir un valor y guardarlo en la variable I
I=input ('Cuanto vale I?')
%2.Pedir un valor y guardarlo en la variable J
J=input ('Cuanto vale J?')
%3. Comparar si I>0
if I>0

if J>0
disp ('POSITIVOS')

elseif J<0
disp ('MEZCLADOS')
end

elseif I<0
disp ('NEGATIVO')
end
%4.imprimir en pantalla 'Fin de programa'
disp ('Fin de programa')
%5.Fin
-raices_2
%

Descripcion: programa que permite calcular races cuadrticas, sin

salir del programa, preguntndonos cuando queremos finalizar.

Autor: Diego Viadero Lucas

Fecha: 20121011

% 0.Inicio
% 1.Introducir coeficientes
a=input('Dame el valor del coeficiente que acompaa a x^2: ')
b=input('Dame el valor del coeficiente que acompaa a x: ')
c=input('Dame el valor del trmino independiente: ')
if (b*b-4*a*c)>0
R1=(-b+sqrt(b^2-4*a*c))/(2*a)
R2=(-b-sqrt(b^2-4*a*c))/(2*a)
disp('Las soluciones son')
disp(R1)
disp(R2)
else
i=sqrt(-1)
Ri1=(-b+sqrt(-(b^2-4*a*c))*i)/(2*a)
Ri2=(-b-sqrt(-(b^2-4*a*c))*i)/(2*a)
disp('Las soluciones son')

disp(Ri1)
disp(Ri2)
end
disp('Fin de programa')
(La funcin sqrt se utiliza cuando queremos hacer un raiz de un numero)

Condicionales
Aqu os dejo una introduccin de como usar los condicionales en Matlab

Esta imagen son cuatro ejercicios para practicar las condicionales y ya subir las soluciones.

MAR
23

Uso del fprintf


Muy buenas en este post os voy a contar como utilizar el matlab la
siguiente funcin llamada fprintf:
*Esta funcion nos va a permitir escribir por pantalla un resultado que no sabemos, pero
que le calculamos a lo largo de nuestro programa, aunque tambin se puede escribir cosas
que sepamos. Este resultado puede ser tanto un numero como texto .
IMPORTANTE: Para introducir cualquier resultado con el fprintf tenemos que
guardarlo previamente en el programa creado en una variable

* Primero: escribimos el fprintf


*Segundo: ponemos los parntesis y las comillas, dentro de esto escribimos lo que
queremos que aparezca por pantalla, poniendo un "%" donde queremos que aparezca los
resultados guardados en sus respectivas variables.
Hay que tener en cuenta lo siguiente en funcin de lo que queramos introducir:
*Queremos introducir un texto: %s
*Queremos introducir un numero con todos los decimales que se obtengan: %f
*Queremos introducir un numero entero (sin decimales): %d
Justo antes de la ultima comilla ponemos un \n para que haga un salto de linea (esto
ultimo es por un tema de esttica a la hora de ejecutar el programa pero el fprintf funciona
igual sin el)
Tercero: Despus de la comilla ponemos una coma y seguido el nombre de las
variables en las que guardamos los valores que queremos escribir, las variables las
tenemos que poner en el orden en el que aparezcan los valores que le corresponden dentro
de las comillas.
*La mejor manera de explicar esta funcin es con unos ejemplos as que ah van:

* Como vemos en ambos ejemplos podemos introducir valores que ya sabes o valores
que calculamos a lo largo del programa
Aqui os dejo un ejercio para que practiquis:
Realizar el siguiente programa sin usar mens. Ha de hacer cada los pasos que se indican y
terminar. Usar las operaciones entre vectores (./ .*) y funciones que calculan mximos o
sumas de vectores (sum, max) Realizar un programa llamado FormulaElectoral.mque:
1. Pida el nmero de representantes (escaos) disponibles
2. El nmero de listas (partidos polticos) candidatas
3. El nmero de votos por lista (partido) y que esta informacin la guarde en un vector
fila de tantas columnas como listas (partidos) haya. Para ello que imprima el
siguiente mensaje por pantalla para pedir el nmero de votos por lista (partido):
4. Dame el nmero de votos de la lista 1: 232123
5. Dame el nmero de votos de la lista 2: 3400322
...
6. Calcular el nmero de representantes (escaos) por lista (partido). Esta informacin
se guardar en un vector de tamao el numero de listas (partidos) existentes. Para
elaborar el clculo se inicializar el vector a ceros, y dentro de un bucle while que
iterar hasta el nmero de representantes (escaos) introducido en el punto 1).
En cada interacin calcular para cada lista (partido) el siguiente cociente:
Cociente=Votos/(Representates+1)
Cada cociente calculado para cada lista (partido) se guardar en un vector de tamao igual
al nmero de listas (partidos). De ese vector de cocientes se buscar cul es el mximo y la
posicin del mximo:
>> help max
Esta posicin ser la lista (partido) ganadora y se incrementar su nmero de
representantes (escaos) en una unidad.
7. Una vez obtenido el vector con los representantes (escaos) ganados por cada lista
(partido), imprimir los resultados por pantalla. La informacin se mostrar en formato
de tabla con todas sus columnas bien "alineadas". Cada fila mostrar la informacin
para cada lista (partido):
8. Partido 1: 232123 votos; 23.87% votos; 9 representantes; 21.98% representantes

Partido 2: 3400322 votos; 43.45% votos; 10 representantes; 45.43% representantes


La primera columna ser el partido con su nmero representado con 2 cifras. La segunda
columna consistir en el nmero de votos (entero en base 10) recibidos por el partido. La
tercera columna ser el nmero de representantes (escao) obtenido representado con 3
cifras (entero en base 10). La cuarta columna el porcentaje de votos recibidos redondeado
a 2 cifras decimales. La quita columna el porcentaje de representantes (escaos) ganados
redondeado a 2 cifras decimales.

MAY
9

Uso de funciones
A continuacin os voy a explicar como crear y usar una funcin.
La aplicacin de la funcin es la siguiente:
Hemos visto que MATLAB nos permite llamar a funciones para
llevar a cabo determinadas tareas o clculos, como por ejemplo:
a=input('Introduce un valor: ');
b=sqrt(a);
disp('su raiz cuadrada vale: ');
disp(b);
Bien pues ahora MATLAB nos va a permitir definir funciones propias para llevar a cabo otras
tareas o clculos, como por ejemplo:

function [a]=modulo(x,y)
a=sqrt(x^2+y^2);
[...]
disp('Su modulo vale: ');
disp(modulo(x,y));

Funciones de Usuario

Las funciones de usuario permiten dividir un programa en componentes ms pequeos, con


un objetivo propio. Por tanto un programa MATLAB puede ser modularizado usando
funciones, por ejemplo:
function
function
function
function
function
function
function
function

[m]=modulo(x,y)
[d]=direccion(x,y)
[K]=convertirKelvinCentigrado(C)
[K]=convertirKelvinCentigrado(C)
[p]=esPrimo(n)
[cuota]=calcularCuotaMensual(capital,plazo,interes)
[A]=calcularArea(...)
[P]=calcularPerimetro(...)

Modularizacin de Programas

Cuando me refiero a que un programa de matlab puede ser modularizado usando


funciones me refiero a lo siguiente:

En muchos programas es bastante comn querer ejecutar un conjunto de instrucciones en


varias partes de un mismo programa de forma repetitiva. Este conjunto de instrucciones
puede ser incluido dentro de una
funcin pudindose acceder en cualquier momentoa ella.
Por tanto el uso de funciones evita la necesidad de programar de forma redundante las
mismas instrucciones.
Debido a esta descomposicin los programas poseen una lgica ms clara facilitando su
escritura, lectura y depuracin de errores.
Esto es especialmente cierto para programas complicados y largos, y es por ello que
normalmente cualquier programa en MATLAB es modularizado siendo una buena
costumbre de programacin.

Definicin de Funcin

Un funcin es un sub-programa definido por el programador que es escrito usando


instrucciones estndar de MATLAB en un fichero .m, y usado como cualquier otra
instruccin de MATLAB en cualquier otro fichero .m.
Como cualquier otra instruccin de MATLAB, las funciones tienen un nmero y posicin de
argumentos de entrada y salida.
Una funcin puede ser accesible desde cualquier punto de un programa y una vez que la
funcin ha llevado a cabo su tarea, el control ser devuelto al punto desde donde se llam.
Generalmente una funcin procesar la informacin que se le pase desde el punto de
llamada y devolver unos valores. A esta informacin se la denomina argumentos o
parmetros de entraday a los valores devueltos se les denomina argumentos o parmetros
de salida.

Una funcin tiene dos componentes principales:


La declaracin de la funcin con sus argumentos
Y el cuerpo de la funcin
EJ. function [as1, as2, ... asM]=nombreFuncion(ae1, ae2, ... aeN) Cuerpo de la funcin
Para declarar una funcin el comando es function
No existe lmite en el nmero de argumentos de entrada o salida.
Los argumentos de salida se engloban con [ ] y los de salida con ( )
A la hora de nombrar las funciones hay que seguir los mismos
criterios que para las variables.
Ejemplo:

function [a]=modulo(x,y)
a=sqrt(x^2+y^2);
Pare hacer un programa con funciones es muy IMPORTANTE tener en cuenta los
siguientes puntos:
Las funciones tienen su propio fichero .m.
Lo primero para crear una funcin es crear un nuevo fichero .m.
La primera linea del fichero ha de ser la instruccin function
IMPORTANTE: asegurarse de que el nombre de la funcin es algo fcil de recordar.
Despus de crear la funcin hay que salvar el fichero .m
IMPORTANTE: El nombre del fichero tiene que ser el mismo que el nombre de la funcin
Las lineas de cdigo que se escriben a continuacin de la instruccin function se
denominan cuerpo de la funcin y contienen otras instrucciones MATLAB u otras funciones.
Es aqu donde todos los operaciones, o lgica de la funcin son escritos.
Una vez que sepamos estos puntos podemos empezar a escribir una funcion, una ayuda
para hacer las primeras funciones con matlba es la siguiente:
Cuando se escribe una funcin es importante determinar los argumentos/parmetros de
entrada y salida. Por tanto es una buena idea desarrollar un pequeo esquema en el
programa, para escribirlo lo ponemos como si fuese un comentario(%), como por ejemplo:
*Ejemplo del fichero modulo.m :

function [a]=modulo(x,y)
%a=modulo(x,y) : funcin que calcula el modulo de un vector
% a partir de sus coordenadas x e y.
%
% Argumentos de entrada:
% x: coordenada x del vector
% y: coordenada y del vector
%
% Argumentos de salida:
% m: modulo del vector

a=sqrt(x^2+y^2);

Una vez leido, comprendidos estos conceptos lo tendremos que poner en practica para
ellos os pongo a continuacion una serie de sencillos ejercicios que mas tarde subir
resueltos:

Ejercicios
Escribir una funcin, llamada miTriangulo a la cual le pasemos la longitud de los 3 lados y
devuelva el rea y permetro del triangulo usando la formula de Heron
Escribir una funcin en MATLAB que calcule el rea de un trapecio dados las longitudes de
los lados paralelos y la distancia entre ambos lados. La funcin se llamar areaTrapecio, y
tendr tres argumentos de entrada: lado1, lado2 y altura. Escribir tambin el script
asociado que pida la informacin necesaria y escriba el resultado por pantalla
El ndice de masa corporal (IMC) es una medida de asociacin entre el peso y la talla de un
individuo, utilizado para evaluar su estado nutricional, de acuerdo con los valores
propuestos por la Organizacin Mundial de la Salud. El IMC se calcula dividiendo el peso del
individuo (en kilogramos) por su altura (en metros) al cuadrado. El valor obtenido no es
constante, sino que vara con la edad y el sexo y tambin depende de otros factores, como
las proporciones de tejidos muscular y adiposo. Escribir una funcin (calculoIMC.m) que a
la que se le pase los valores correspondientes del peso del individuo y su altura como
argumentos de entrada y devuelva:
1. el valor de su IMC,
2. el valor de su categora como un a cadena de texto que sea 'Infrapeso' si IMC<19,
'Sobrepeso' son IMC>25 y 'Peso normal' si 19<=IMC<=25
3. y el valor de su peso ideal, que ser el peso correspondiente a un IMC=19 si su
categora es 'Infrapeso' o IMC=25 si su categora es 'Sobrepeso'
Hacer uso de la funcin dentro de un script (MenuIMC.m), que cree un men, con la
opciones: 1) Introducir peso (kg) 2) Introducir altura (cm) 3) Calcular IMC, Categora y Peso
Ideal 4) Mostrar resultados 5) Reiniciar Menu 0) Salir La opcin 3) slo estar disponible
cuando haya introducido el peso y la altura de forma correcta. La opcin 4) solo se activar
cuando se haya pulsado la opcin 3). La opcin 5) se activar cuando haya introducido un
valor vlido de altura o de peso. Si se selecciona la opcin 5) el men volver a su estado
incicial, como si no se hubiese introducido ni un valor para peso ni para altura. Los valores
para peso y altura solo sern vlidos si son mayores que cero. Si el usuario introduce un
valor no vlido, el programa volver a preguntar por el valor (sin pasar otra vez por el
men). Mostrar por pantalla el IMC con 2 decimales y 2 posiciones para la parte entera. Con
respecto al peso, usar 1 decimal y 3 posiciones para la parte entera. Mostar la altura en
centrimetros sin decimales y 3 caracteres.

MAY
9

RESOLUCIN DE PROGRAMAS DE FUNCIONES


Aqu os dejo la solucin del ultimo ejercicio propuesto de funciones.
El texto que esta en color verde son solo comentarios para que sigis a la hora de realizar
el programa mientras que el texto en negro es lo que hay que escribir en matlab para la
ejecucin del programa
MENU IMC
%Pedimos la altura y el peso para calcular el IMC y lo guardamos en dos
%variables distintas.
%Utilizamos la funcion IMC creada anteriormente
%Descripcion: Programa que pidiendo los valor del el peso y la altura de
%una persona calcula el indice de masa corporal de esa persona utilizando
%una funcion creada anteriormente.
%Autor: Diego Viadero Lucas
%Fecha:20121214
%Creamos estas variables para que luego en el bucle podamos modificarlas
FIN=0;
IMC1=0;
h=0;
p=0;
hcargado=0;
pcargado=0;
%Iniciar un bucle para que el programa impra siempre por pantalla el menu
%a no ser que el usuario pulse el 0
while FIN==0;
%Pedimos la altura y el peso para calcular el IMC y lo guardamos en dos
%variables distintas.
disp ('1. Introducir la altura (m)')
disp ('2. Introducir el peso (kg)')
%Creamos el if para que la opcion del menu tres no se muestre sin que
%antes se hayan introducido el peso y la altura
if hcargado==1 && pcargado==1
disp ('3. Calcular IMC, Categora y Peso Ideal ')
end
%Creamos el if para que la opcion del menu cuatro no se muestre sin que
%antes se haya utilizado la opcion tres
if IMC1==1
disp ('4. Mostrar resultados')
end
disp ('5. Reiniciar Menu')
disp ('0. Salir')
opcion=input ('seleccione una opcion del menu: ');

%Introducimos la variable switch para que el programa realice las


%diferentes funciones que hay en cada apartado del menu
switch opcion
case 0
%Si el usuario pulsa cero el programa debe de salir del bucle y
%y por lo tanto finalizar el programa
FIN=1;
case 1
%Creamos un bucle para que si el usuario introduce un valor de
%la altura <=0 te vuelva a preguntar por el valor de la altura
%sin tener que pasar por el menu
h=-1;
while h<0
h=input('Dame el valor de la altura en metros: ');
end
%Para pasar la altura en metros a centimetros
hcm=h*100;
%Cambiamos el valor de la variable para que aparezca la opcion
%tres del menu una vez que tambien marquemos el peso
hcargado=1;
case 2
%Creamos un bucle para que si el usuario introduce un valor de
%la altura <=0 te vuelva a preguntar por el valor de la altura
%sin tener que pasar por el menu
p=-1;
while p<0
p=input('Dame el valor del peso en kilogramos: ');
end
%Cambiamos el valor de la variable para que aparezca la opcion
%tres del menu una vez que tambien marquemos la altura
pcargado=1;
case 3
%Introducimos la funcion creada anteriormente en otro scrip
[IMC,categoria,pideal]=calculoIMC(h,p);
%Cambiamos el valor de esta variable para que se pueda mostrar
%la opcion de menu 4
IMC1=1;
case 4
%Utilizando el fprintf imprimimos por pantalla un mensaje que nos indica
%los resultadosobtenidos en la funcion
fprintf('Un individuo con peso %.1f Kgs y altura %3d cms tiene %s (IMC= %.2f) y su
peso ideal sera %.1f Kgs\n',p,hcm,categoria,IMC,pideal)
case 5
%Cambiamos el valor de todas la variables de nuevo a cero para
%que cuando el usuario pulse la opcion 5 del menu el programa
%se reinicie y pregunte otra vez por los valores
IMC1=0;

h=0;
p=0;
hcargado=0;
pcargado=0;
end
end
CALCULO DE IMC
function [IMC,categoria,pideal]=calculoIMC(h,p)
%[Altura,Peso]=calculoIMC(h,p) : crear una funcion en la cual metiendo los
%valores de la altura y el peso nos calcula el indice de masa corporal de
%cada persona
%
% Argumentos de entrada:
%
h:altura de la persona
%
p: peso de la persona
%
% Argumentos de salida:
%
IMC: indice de masa corporal
%
pideal: el peso ideal para las persornas con infrapeso o sobrepeso
%
categoria: son los diferentes tipos de peso de cada persona
%
%Autor: Diego Viadero Lucas
%Fecha:20121213
%
%Calculamos el IMC
IMC = p/(h^2);
%Creamos un if para saber en funcion del resultado del IMC nos indique la
%categoria del peso de esa persona
if IMC>=19 && IMC<=25
categoria= 'Peso normal';
%Como las personas que esten en esta categoria ya estan en
%su peso ideal igualamos el peso que ha introducido la
%persona en la variable p a la variable pideal
pideal=p;
elseif IMC<19
categoria= 'Infrapeso';
%Calculamos el peso ideal para las personas con infrapeso
%calculamos cual seria su peso ideal sabiendo que el minimo
%IMC para tener un peso normal es 19
pideal=19*(h^2);

else
categoria='Sobrepeso';
%Calculamos el peso ideal para las personas con sobrepeso
%calculamos cual seria su peso ideal sabiendo que el maximo
%IMC para tener un peso normal es 25
pideal=25*(h^2);

end
Compartirlo en google +1 no cuesta nada ;)
AQUI OS DEJO ENLACES DE DESCARGA:
ENUNCIADO: https://www.dropbox.com/s/1kcrtdj0dvnc4lr/entregar%28IMC%29.png
MENU IMC: https://www.dropbox.com/s/x8zhzvmkpdspcxi/menuIMC.m
PROGRAMA IMC: https://www.dropbox.com/s/eianw0zyoxuhkfy/calculoIMC.m

MAY
9

RESOLUCION EJERCICIO FPRINTF


Como espero que hayais podido ver hice una actualizacion en la entrada de "USO DE
FPRINTF"
En la actualizacion lo unico que cambi fue la inocrporacion de un ejercicio y aqui os dejo
su resolucion:
% Descripcion: Programa que te permite obtener el numero de %escaos que obtiene
cada partido politico en funcion de los %votos conseguidos.
%
Autor: Diego Viadero Lucas
%
Fecha: 20121122 c
clear all
% Inicio del Programa
disp('Inicio de Programa')
%Se inicializan las isguientes variables
R=1; SVotos=0;
% Preguntamos por el numero de escaos y lo guardamos en una variable
E=input('Dime el numero de representantes disponibles: ');
% Preguntamos por el numero de listas y lo guardamos en una variable
P=input('Dime el numero de listas candidatas: ');
% creamos una variable igual a la de escaos, es decir que tenga el mismo
%valor, necesitamos crear esta variable debido a que al asignar los escaos
%a los partidos el valor de esta variable cambiara,y la necesitamos para
%calcular el porcentaje al final.
E1=E;
% Creamos un vector con los votos de cada partido
VVotos(P)=0;
% Creamos un bucle, en el cual se saldra cuando N sea igual al numero de
%partidos que hay
while R<=P
%Preguntamos por los votos que ha obtenido cada partido, utilizando
%fprintf para cambiar el nuermo del partido

fprintf('Dame el numero de votos de la lista %d: ',N)


%Con el input guardamos el resultado en una variable
V=input('');
%SVotos es el numero de votos totales con el cual calcularemos el
%porcentaje despues
SVotos=SVotos+V;
VVotos(R)=V;
%Incrementamos el valor de N para poder salir del bucle
R=R+1;
end
%Volvemos a igualar N a 1 para controlar las posiciones en los vectores
R=1;
%Creamos un vector escaos para introducir los escaos de cada partido,
%inicialmente le damos un valor 0 y el numero de partidos es igual al
%numero de columnas
VEscanos(P)=0;
%Calculamos el valor maximo del VVotos para asignarle un escao
[c,y]=max(VVotos);
%En la coluna y se le da un escao
VEscanos(y)=1;
%Se realiza el bucle siempre que tenga escaos para repartir
while E1~=1
%Con esta operacion podremos seguir asignando escaos
[c,y]=max(VVotos./(VEscanos+1));
VEscanos(y)= VEscanos(y)+1;
%Restamos un escao cada vaz para que el bucle pueda finalizar
E1=E1-1;
end
%Volvemos a dar a N el valor 1 para volver a podercontrolar las posiciones
%en los vectores
R=1;
%Creamos un bucle para poder ir poniendo la tabla de cada partido
while R<=P
%Primero calculamos el porcentaje de votos de cada partido
PorcenajeVotos=(VVotos(R)*100)/SVotos;
%Segundo calculamos el porcentaje de escanos de cada partido
PorcentajeEscanos=(VEscanos(R)*100)/E;
% Con este fprintf imprimimos por pantalla los resultados y nos permite ir
%variando los resultado para cada partido
fprintf('Partido %02d: %d votos; %03d representantes (escanos); %.2f%% votos; %.2f%%
representantes (escanos)\t\n',R,VVotos(R),VEscanos(R),PorcenajeVotos,PorcentajeEscanos)
%Se incrementa el valor de N para poder salir del bucle cuando todos los
%partidos esten asignados
R=R+1; end
% Fin de Programa
disp('Fin de Programa')
Hice una pequea modificacion y puse los comentarios para que lo entendais mejor en
verde, estos comentarios no influyen en el programa pero ayudan a la hora de hacer el
programa

JAN
19

NUEVOS EJERCICIOS
Hola buenos dias aqu os dejo algn ejercicio resuelto mas espero que os sirva de ayuda y
ya sabeis no cuesta nada compartir con google +1

-Como realizar un programa que pida una fecha, compruebe la si la fecha


introducida es correcta y que te diga si la fecha existe o no.
%Introducimos unas variables (las que queramos) para empezar el programa
d=input('escribe el dia: ');
m=input('escribe el mes con un numero: ');
a=input('introduzca el ano con un numero: ');
%Voy a parar el programa si no se cumple que el numero introducido es un numero entero
%por otro lado si es entero continuo con el programa
if( d~=fix(d) || m~=fix(m) || a~=fix(a))
disp ('el numero es decimal')
else
%comprobamos si el ao esta en el rango indicado
if (a<1600 a="">=2014 )
fprintf ('el ao %d no est en el rango indicado',a)
else
%Ahora compruebo si el ao es bisiesto o no, para ello utilizo la orden rem(x,y)
%que me da lo que sobra si no se quieren decimales
%si el ao es bisiesto f=29 , de lo contrario f=28
f=28;
if (rem(a,4)==0)
f=29;
if (rem(a,100)==0)
f=28;
if (rem(a,400)==0)
f=29;
end

end
end
if (f==29)
fprintf('el ao %d es bisiesto\n',a)
end
%Ahora compruebo que el mes este entre enero (1) y diciembre(12)
%y que cada mes contiene sus dias correspondientes
if(m==1)
if (d>=1 && d<=31)
fprintf('la fecha %d-%d-%d es correcta y existe',d,m,a)
else
fprintf('enero no tiene %d dias',d)
end
elseif(m==2)
if (d>=1 && d<=f)
fprintf('la fecha %d-%d-%d es correcta y existe',d,m,a)
else
fprintf('febrero no tiene %d dias',d)
end
elseif(m==3)
if (d>=1 && d<=31)
fprintf('la fecha %d-%d-%d es correcta y existe',d,m,a)
else
fprintf('marzo no tiene %d dias',d)
end
elseif(m==4)
if d>=1 && d<=30
fprintf('la fecha %d-%d-%d es correcta y existe',d,m,a)
else
fprintf('abril no tiene %d dias',d)
end
elseif(m==5)
if (d>=1 && d<=31)
fprintf('la fecha %d-%d-%d es correcta y existe',d,m,a)
else
fprintf('mayo no tiene %d dias',d)
end
elseif(m==6)
if (d>=1 && d<=30)
fprintf('la fecha %d-%d-%d es correcta y existe',d,m,a)
else
fprintf('junio no tiene %d dias',d)
end
elseif(m==7)
if (d>=1 && d<=31)
fprintf('la fecha %d-%d-%d es correcta y existe',d,m,a)
else
fprintf('julio no tiene %d dias',d)
end

elseif(m==8)
if (d>=1 && d<=31)
fprintf('la fecha %d-%d-%d es correcta y
else
fprintf('agosto no tiene %d dias',d)
end
elseif(m==9)
if(d>=1 && d<=30)
fprintf('la fecha %d-%d-%d es correcta y
else
fprintf('septiembre no tiene %d dias',d)
end
elseif(m==10)
if (d>=1 && d<=31)
fprintf('la fecha %d-%d-%d es correcta y
else
fprintf('octubre no tiene %d dias',d)
end
elseif(m==11)
if (d>=1 && d<=30)
fprintf('la fecha %d-%d-%d es correcta y
else
fprintf('nobiembre no tiene %d dias',d)
end
elseif(m==12)
if (d>=1 && d<=31)
fprintf('la fecha %d-%d-%d es correcta y
else
fprintf('ciciembre no tiene %d dias',d)
end
else
fprintf('el mes %d no existe',m)
end
end
end

existe',d,m,a)

existe',d,m,a)

existe',d,m,a)

existe',d,m,a)

existe',d,m,a)

%FIN DEL PROGRAMA


Ahora unos ejerccios de estructuras ciclicas, en el que el grado de dificultad va
de menos a mas
* Hacer un programa (media.m) que recoja numeros del usuario hasta que se
introduzca un 0 y despus devuelva la media de los numeros introducidos.
%Hacer un programa que recoja numeros del usuario hasta que se introduzca un 0 y
despues devuelva la media de los numeros introducidos
contador=0;
n=input('Introduce un numero');
sumatorio=0;
while(n~=0)
sumatorio=sumatorio+n;

contador=contador+1;
n=input('Intoduce un numero');
end
med=sumatorio/contador;
fprintf('La media vale %f',med)
%FIN
* Hacer un programa que pida un numero y vaya decrementando su valor en
una unidad hasta que llegue a cero (decremento.m).
%Cuenta atras hasta que llegue a cero
n=input('Introduce el numero');
while(n>0)
disp(n)
n=n-1;
end
disp(' 0')
*Hacer un programa que pida un numero y compruebe si ese numero es primo
(primo.m).
%Indica si es un numero primo
clc
clear all
n=input('Introduce el numero')
a=0;
contador=2;
while(contador~=n-1)
if(rem(n,contador)==0)
a=1;
%Aqui meteria un break para que si ya se demuestra que es no primo que se pare el
programa
break
end
contador=contador+1;
end
if(a==1)
disp('el numero no es primo')
else
disp('el numero es primo')
end
*Hace un programa que pida un numero hasta que este numero sea mayor que
cero, indicando con un mensaje que el numero introducido no es mayor de cero
(numeroCorrecto.m).
%Introduce un numero menor que cero sino escribe que es mayor que cero
n=input('introduce numero')
while(n<0 font="">

disp('El numero es negativo')


n=input('introduzca otro numero')
end
disp('el numero introducido es mayor que cero')