Matlab - comando go to

   
Vista:

comando go to

Publicado por emilio (51 intervenciones) el 28/09/2011 17:00:43
Hola,

lo que quiero hacer es que dentro de un loop (while o for) dada cierta condición vaya a la linea "X" o
" Y " del *.m

algo más o menos así:

for ky...

linea x-1
linea x
linea x+1

for h=1 to n

muchas lineas de programa

linea y-1
linea y
linea y+1

while @@@
muchas lineas de programa
etc...

si se cumple la sentencia

vaya a la linea x

o si se cumple esta otra

vaya a la linea y

end de condiciones

etc
etc
end

alguna ayuda, Gracias!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO

comando go to

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3433 intervenciones) el 28/09/2011 17:38:53
Hola emilio.
revisa esta direccion

http://www.lawebdelprogramador.com/foros/Matlab/1262898-como_hago_sentencia_%22GOTO%22__.html


%================================
clear all;
x=17*rand(1,20);
bol=0;
for i=1:20
if x(i)<10
bol=1;
end

if x(i)>=10
bol=2;
end
end

if bol==1
display('Los numeros son menores que 10');
end
if bol==2
display('Los numeros son mayores que 10');
end
%===========================

EJECUCION
>> boleano
Los numeros son mayores que 10
>> boleano
Los numeros son menores que 10
>> boleano
Los numeros son menores que 10
>> boleano
Los numeros son mayores que 10



%=================================
Mi consulta es sobre como generar una sentencia del tipo "GOTO" en Matlab 6.5,
% ya que no la tiene.
% Miré entre varios libros, pero solo explican las sentencias mas comunes
% como "for", "if", etc.
% Lo que debo hacer es ir sacando numeros de una matriz de forma aleatoria,
% y a esas posiciones de la matriz cada vez que saco el numero lo reemplazo
% por un cero.
% El problema es cuando el proceso aleatorio cáe justo en una posicion pasada
% en donde ya puse un cero, eso es lo que no quiero que haga.
% Si tubiera un "go to" , vuelvo a ejecutar la linea que elegi de forma
% aleatoria la posicion, y de esta forma repito hasta que no sea justo un cero.
% En fín, si alguien podria explicarme como genero un GO TO, agradezco de antemano!


clear
deck=importdata('matrizgoto2.txt');
[fil,col]=size(deck);
n=input('Ingrese la cantidad de cartas a sacar n:');
if n<=fil*col
display(deck);
i=0;
while i<=n-1
f=randperm(fil);
c=randperm(col);
if deck(f(1),c(1))==0
continue;
else
i=i+1;
fprintf(' i=%2d deck(%2d,%2d) carta=%2d\n',i,f(1),c(1),deck(f(1),c(1)));
deck(f(1),c(1))=0;
end
end
display(deck);
else
display('Numero de cartas a sacar excedido');
end

%=============================================

EJECUCION
>> matrizgoto2
Ingrese la cantidad de cartas a sacar n:70
Numero de cartas a sacar excedido


Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR MATLAB
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comando go to

Publicado por emilio (51 intervenciones) el 28/09/2011 18:21:40
si había leido este post, pero no es lo mismo, lo que yo busco es que dada cierta condición el programa vaya a cierta linea en especifica, osea que se salte todo el resto de los comando y vaya directamente a la linea "y" del programa, es como el continue de fortran

ejemplo

este un trozo del programa

for u=1:nr

linea 5
varias lineas de codigo y condiciones para q(r)
for i=1:nr

linea 23

for thj=0:359
q1xmin=double((G/2-q0x)*cos(thj*pi/180));
q1ymin=double((G/2-q0x)*sin(thj*pi/180));

if sqrt(q1xmin^2+q1xmin^2)<G/2
r=1;
while q(r)<=sqrt(q1xmin^2+q1xmin^2)
r=r+1;
if r>qlim
vaya a la linea 5
end

if condicion en q(r)
vaya a linea 23
end

if otras condiciones de q(r)
vaya a la linea 200
end

end

for ll=r-1:qlim
q1x=double(q(ll)*cos(thj*pi/180));
q1y=double(q(ll)*sin(thj*pi/180));

if abs(q1x+q0x)>G/2&&abs(q1y+q0y)<G/2
q3=sqrt();
end
if abs(q1x+q0x)<G/2&&abs(q1y+q0y)>G/2

end

if abs(q1x+q0x)<G/2&&abs(q1y+q0y)>G/2

end

end
end

end

linea 200

end
end


es más o menos así
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

comando go to

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3433 intervenciones) el 28/09/2011 18:35:14
hola.
Trata poner toda la informacion posible.
Y no solo pedazos.
Caso contrario nadie te va a dar una respuestas acertada.

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR MATLAB
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comando go to

Publicado por emilio (51 intervenciones) el 28/09/2011 19:16:45
el problema es que esta es una función que depende de otra funciones más que yo he creado, y los parametros de entrada tambien dependen de otras funciones, pero bueno aqui vá la funcion completa,

q0x y q0y no te los puedo dar ya que los desconozco porque dependen de otra función que utilizo en el programa principal
G=depende del programa principal pero en general vale 4Pi
qlim, depende lo q0 vector programa principal
w0 una energía depende del programa principal
w energías totales depende del programa principal
nr size(w,2)
tol 10^-4

function [DELTA TOLDELTA]=busca(q0x,q0y,q,qlim,G,w0,w,nr,tol)
% Esta funcion busca interacciones energeticas para un vector de onda dado q0 con una freq w0
%
%% input parameter
% q0 vector
% q wavevector
% qlim Brillouin zone limit
% G vector
% w0 frequency scalar
% w frequency matrix
% nr numero de polarizaciones
% tol tolerancia para q0==q2

%% output
% Delta matrix de las interacciones
% TOLDELTA matrix de las tolerancias de los procesos
DELTA(1:nr,1:nr)=0;TOLDELTA =DELTA;

for p1=1:nr %%se varia pol de w'
for p2=1:nr %%se varía pol de w"

""LINEA 22""

for thj=0:359%%se varía el angulo de q'

""LINEA 26""

q1xmin=double((G/2-q0x)*cos(thj*pi/180));
q1ymin=double((G/2-q0x)*sin(thj*pi/180));
if sqrt(q1xmin^2+q1ymin^2)<G/2
r=1;
while q(r)<=sqrt(q1xmin^2+q1xmin^2)%se busca la posición de q'
r=r+1;
if r>qlim

"""Vaya a la linea 22""" % está es la linea que me falta

end

if abs(q(r)-sqrt(q0x^2+q0y^2))<=tol

""VAYA A LiNEA 26"""

end

end

for ll=r-1:qlim
q1x=double(q(ll)*cos(thj*pi/180));
q1y=double(q(ll)*sin(thj*pi/180));

if abs(q1x+q0x)>G/2&&abs(q1y+q0y)<G/2
q3=double(sqrt((q0x+q1x-G/2)^2+(q0y+q1y)^2));
end
if abs(q1x+q0x)<G/2&&abs(q1y+q0y)>G/2
q3=double(sqrt((q0x+q1x)^2+(q0y+q1y-G/2)^2));
end

if abs(q1x+q0x)<G/2&&abs(q1y+q0y)>G/2
q3=double(sqrt((q0x+q1x-G/2)^2+(q0y+q1y-G/2)^2));
end
if q3<G/2
rr=1;
while q(rr)<=q3
rr=rr+1;
end
Dw1=double(abs(w0+w(ll,p1)-w(rr-2,p2)));
Dw2=double(abs(w0+w(ll,p1)-w(rr-1,p2)));
Dw3=double(abs(w0+w(ll,p1)-w(rr,p2)));
if Dw1<Dw2
dw=Dw1;
else
dw=Dw2;
end
if dw>Dw3
dw=Dw3;
end
[DW TOL]=guarda(dw);%%%guarda funcion que verifica si es proceso es posible
DELTA(p1,p2)=DW;
TOLDELTA(p1,p2)=TOL;
end

end


end
end
end
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar