Matlab - Error en vector numeros impares

 
Vista:

Error en vector numeros impares

Publicado por LorenaGg (2 intervenciones) el 27/05/2011 10:34:21
El resultado me da correcto al introducir vec1, pues me sale el vector de 10 numeros impares de mayor a menor, el problema esta en que me sigue saliendo error en esta linea:

if (vec1(k)/2==floor(vec1(k)/2)) % Condición de término par.

??? Attempted to access vec1(11); index out of bounds because numel(vec1)=10.

Error in ==> C7impares at 3
if (vec1(k)/2==floor(vec1(k)/2)) % Condición de término par.

Alguien podría ayudarme a dar con el error! Gracias!


vec1=linspace(20,1,20);
for k=1:20
if (vec1(k)/2==floor(vec1(k)/2)) % Condición de término par.
vec1(k)=[];
else vec1(k)=k;
end
end
fprintf('Vector impares:%i',vec1)
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Error en vector numeros impares

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 27/05/2011 16:40:07
Hola LorenaGg.
Hice unos arreglos a tu programa para que se ejecute correctamente y tambien hice un programa que hace lo mismo lo que tu estas haciendo.
Aqui te copió los dos programas el BLOQUE 1 es tuyo y el BLOQUE2 lo que agregé.

%===============================================
%BLOQUE 1
clear,
vec1=linspace(20,1,20);
n=length(vec1);
for k=1:n
if k<n
if vec1(k)/2==floor(vec1(k)/2) % Condición de término par.
vec1(k)=[];
n=length(vec1);
else
vec1(k)=k;
end
end
end
fprintf('El vector impar es:[')
for k=1:length(vec1)
fprintf(' %i',vec1(k));
end
fprintf(']\n');
%=======================================



%===================================
%BLOQUE2
clear,
vec1=linspace(20,1,20);
n=length(vec1);
l=1;
for k=1:n
if rem(k,2)~=0
vec2(l)=k;
l=l+1;
end
end
fprintf('El vector impar es vec2:[')
vec2=vec2(end:-1:1);
for k=1:length(vec2)
fprintf(' %i',vec2(k));
end
fprintf(']\n');
%========================================

EJECUCION:
>> vectorpar
El vector impar es:[ 19 17 15 13 11 9 7 5 3 1]
El vector impar es vec2:[ 19 17 15 13 11 9 7 5 3 1]



Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
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

Error en vector numeros impares

Publicado por ramiro (54 intervenciones) el 27/05/2011 20:59:58
Lorena:
Discúlpen que me entrometa, tu programa también funciona si sólo cambias el índice del for de la forma siguiente:
vec1=linspace(20,1,20);
n=length(vec1);
for k=1:n/2
if (vec1(k)/2==floor(vec1(k)/2)) % Condición de término impar.
vec1(k)=[];
else vec1(k)=k;
end
end
n=length(vec1);
fprintf('El vector impar es:[')
for k=1:n
fprintf(' %i',vec1(k));
end
fprintf(']\n');
Quizá te quede la duda de ¿por qué trabaja bien? si vec1 tiene n=20 elementos y al partirlo a la mitad sólo barrería los primeros 10, lo que pasa es que al entrar al for se redefine vec1, de hecho se está "regenerando".
Por supuesto que me fusilé la forma de Jeremías para mostrar el vector con la instrucción fprintf.
Saludos desde Torreón, México.
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Error en vector numeros impares

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 27/05/2011 21:50:10
Hola Ramiro.

Me queda una duda. ¡Que pasaria si tengo un vecto de cualquier tamaño?
Y quiero extraer los elementos pares. Y los elementos pares pueden estar en cualquier posicion del vector.

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
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

Error en vector numeros impares

Publicado por LorenaGg (2 intervenciones) el 30/05/2011 09:35:23
Muchas gracias Jeremias. Utilizare la correpción del mio. Me han servido ambas de gran ayuda.
Un saludo.
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

Error en vector numeros impares

Publicado por ramiro (54 intervenciones) el 30/05/2011 21:10:50
Jeremías:
Mi único propósito al entrometerme en tu participación era tratar de entender y contestar la pregunta original, incluso no sé si fue correcta mi apreciación sobre la causa del por qué persistía el error.
En cuanto a la otra duda, aunque lo más probable es que esto no sea nada nuevo para tí y a reserva de estar malinterpretando el sentido de tu cuestionamiento, me permito mandarte esta "solución":
>> x=floor(10*rand(1,25))
>> k=find(x./2~=floor(x./2))
>> xnon=x(k)
Saludos
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Error en vector numeros impares

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 30/05/2011 23:45:43
HOla Ramiro.
Buena forma de resolver!!.
>> x=floor(10*rand(1,15))
x =
9 5 1 1 2 8 2 8 2 9 3 1 2 6 4
>> k=find(x/2==floor(x/2));
>> Elem_pares=x(k)
Elem_pares =
2 8 2 8 2 2 6 4

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
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