Matlab - MATRIZ CUADRADA DE "UNOS" DENTRO DE MATRIZ CUADRADA DE "CEROS"

 
Vista:
Imágen de perfil de Javier

MATRIZ CUADRADA DE "UNOS" DENTRO DE MATRIZ CUADRADA DE "CEROS"

Publicado por Javier (16 intervenciones) el 12/02/2017 17:49:21
Hola, buenas tardes:
Quiero hacer el siguiente ejercicio:
Se pide realizar una función que se llame mi_cuadrado, que recibiendo como argumento de entrada dos números enteros n y m, devuelva una matriz cuadrada A de dimensión n×n que contenga ceros en todas sus componentes, salvo en las que formen un cuadrado de lado m centrado en la matriz, que serán unos.

He realizado el siguiente programa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function A = mi_cuadrado(n,m)
 
A=zeros(n);
%Cuando n y m son pares
% if (rem(n,2==0))&&(rem(m,2==0))
    for i=((n/2)-(m/2)+1):((n/2)+(m/2))
        for j=((n/2)-(m/2)+1):((n/2)+(m/2))
            A(i,j) = 1;
        end
    end
% end
%Cuando n y m son impares
    for i=(((n-1)/2)-((m-1)/2)+1):(((n-1)/2)+((m+1)/2))
        for j=(((n-1)/2)-((m-1)/2)+1):(((n-1)/2)+((m+1)/2))
            A(i,j) = 1;
        end
    end

Cada uno de los dos algoritmos (probandolos por separado) en si están bien, tanto cuando n y m son pares como cuando son impares.
Sin embargo cuando los pruebo como un solo programa, introducindo el IF me sale el siguiente error:

NaN's cannot be converted to logicals.

Error in mi_cuadrado (line 5)
if (rem(n,2==0))&&(rem(m,2==0))

y no lo entiendo entiendo ya que el IF que planteo debería existir, por si me voy por el camino de los datos de entrada n y m pares como por n y m impares.

Gracias.
Un saludo.
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

MATRIZ CUADRADA DE "UNOS" DENTRO DE MATRIZ CUADRADA DE "CEROS"

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 12/02/2017 19:11:56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function A = mi_cuadrado(n,m)
if nargin==0
    n=12
    m=6
end
 
A=zeros(n);
%Cuando n y m son pares
 if (rem(n,2)==0)&&(rem(m,2)==0)
    for i=((n/2)-(m/2)+1):((n/2)+(m/2))
        for j=((n/2)-(m/2)+1):((n/2)+(m/2))
         A(i,j) = 1;
        end
    end
 end
%Cuando n y m son impares
for i=(((n-1)/2)-((m-1)/2)+1):(((n-1)/2)+((m+1)/2))
for j=(((n-1)/2)-((m-1)/2)+1):(((n-1)/2)+((m+1)/2))
A(i,j) = 1;
end
end


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
>> mi_cuadrado
 
n =
 
    12
 
 
m =
 
     6
 
 
ans =
 
     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     1     1     1     1     1     1     0     0     0
     0     0     0     1     1     1     1     1     1     0     0     0
     0     0     0     1     1     1     1     1     1     0     0     0
     0     0     0     1     1     1     1     1     1     0     0     0
     0     0     0     1     1     1     1     1     1     0     0     0
     0     0     0     1     1     1     1     1     1     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0



Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Javier

MATRIZ CUADRADA DE "UNOS" DENTRO DE MATRIZ CUADRADA DE "CEROS"

Publicado por Javier (16 intervenciones) el 14/02/2017 18:44:56
Muchísimas gracias otra vez José.
La verdad es que así da gusto.
Alguien que atiende tan rápido y bien.
De nuevo he cometido un error de notación.
Un saludo y gracias otra vez.
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