
Problema con bucle principal
Publicado por JuanMa (37 intervenciones) el 27/05/2014 17:34:09
Hola, tengo un problema con el bucle de una función, resulta que todo lo de dentro funciona correctamente ejecutado paso a paso, pero no me funciona el bucle principal, la función, dada una matriz A, lo que hace es extraer las filas cuyo último valor esté dentro de un intervalo en una pequeña matriz, una vez en esta, se ordenan y la que queda la primera se guarda en otra matriz del tamaño de A llamada R, en A se va eliminando la fila que se coloca en R, de manera que deben de quedar en R reordenadas, el problema, es que al disminuir A y finalmente quedarse sin ninguna dimensión falla el programa; he intentado poner como condición que el bucle pare al quedarse A sin dimensiones, pero no funciona ¿Alguien sabe por qué?
Esto es para simular la recepción de mensajes de un bus de comunicaciones.
Abajo les dejo el código:
Muchas gracias.
Saludos.
Esto es para simular la recepción de mensajes de un bus de comunicaciones.
Abajo les dejo el código:
Muchas gracias.
Saludos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
% Recibir despacha los mensajes en orden de llegada
function R = recibir (tiempo)
load variables2; % Cargamos la matriz A
load variables; % Cargamos T
tr=T+(1.3100e-04); % Tiempo de recepción
tf = T; % Defino tf, tiempo final hasta el que se compara
tiempo = 2;
R(length(A),15) = zeros; % Inicializo la matriz en la que introducire todas las filas ordenadas
b=0; % Inicializo b para contar el numero de mensajes dentro de un intervalo
c=0; % Inicializo c, que contara la posicion a partir de la que se debe seguir rellenando R
%d=1; % Inicializo d, que es la marca del comparador
tt=(1.3100e-04); % Tiempo de trama
while (R((length(R)-10),15) == 0) % Bucle para buscar los intervalos, la condicion no se cumple, no se porque
if (A((b+1),15) <= tf) % Comprobamos si t es menor que tf
b=b+1; % Si es asi incrementamos b, que nos debe dar el numero de mensajes en dicho intervalo
%d=d+1 % Incrementamos d para que se compruebe la línea siguiente
else
if (b==0)
else
B(b,15) = zeros; % Si no, con b, inicializamos una nueva matriz
for r=1:b
B(r,:) = A(r,:); % La rellenamos con los datos correspondientes de A
end
[x,y] = max(B(:,4)); % Obtenemos la fila con mas prioridad de B
if ((B(y,15))<=tr) % Si el tiempo de esta fila es menor que el de recepcion podemos recibirla
B(y,15)=B(y,15)+tt; % La despachamos en B
R((c+1),:) = B(y,:); % Introducimos en R esta fila
c=c+1; % Actualizamos c, que es la posicion a partir de la cual tenemos que rellenar R
A(y,:)=[]; % Borramos la fila de A
b=0;
end
end
tr=tr+T; % Actualizamos tr
tf=tf+T; % Actualizamos tf
end
end
end
Valora esta pregunta


0