Matlab - Cómo tener el mismo vector de un script dentro de una funcion

 
Vista:
sin imagen de perfil
Val: 38
Ha aumentado su posición en 3 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Cómo tener el mismo vector de un script dentro de una funcion

Publicado por Bel (24 intervenciones) el 19/02/2019 05:48:26
Hola a todos.
Tengo el siguiente problema: Estoy escribiendo un Script en el que tengo un vector del cual necesito los valores para utilizar en diferentes opciones. Programadas, sin embargo, no sé cómo hacer que ese vector sea leido en una de las funciones que hace parte de las opciones. Os dejo un ejemplo de lo que busco. Gracias.


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
continuar = true;
opcion = 0;
nelem = input ('Cuantas calificaciones va a ingresar: ');
vec1 = zeros (1,nelem);
for i = 1:nelem
    vec1(i) = input(['calificacion #', num2str(i),' ']);
end
disp(vec1)
 
while seguircontinuar
    opcion = menu(); % Este lo programe para que me aparezca una especie de menu con los dos casos a usar.
    disp(opcion)
    pause (0.2)
 
    switch (opcion)
 
        case 1
            fprintf('Clasifica las calificaciones\n')
            calificaciones = clasificacion_calificaciones (vec1);
        case 2
            fprintf('Promedio de los aprobados y reprobados\n')
            promedio = aprovados_reprovados (vec1);
        case 0
            fprintf ('Salir\n')
 
        otherwise
            fprintf('Opcion invalida\n');
    end
end
 
 
% Para el caso 1 escribi un codigo como función en otro archivo, así:
function [contadores] = contador_calificaciones(vec1)
    ContAprov = 0;
    ContDesaprov = 0;
    ContLimite = 0;
 
   if vec1>0.0 && vec1<5
       fprintf ('%d es calificacion aprobadoria\n', vec1)
       ContDesaprov = ContDesaprov+1;
    end
    if vec1 == 5
        fprintf ('%d es una calificacion sobre el limite\n', vec1)
        ContLimite = ContLimite+1;
    end
    if vec1>5.0 && vec1<=10
        fprintf ('%d es calificacion aprobatoria\n', vec1)
        ContAprov = ContAprov+1;
    end
    % Suma de los distintos pH
fprintf('El numero de calificaciones aprovatorias es: %0.1f\n',ContAprov);
fprintf('El numero de calificaciones sobre el limite es: %0.1f\n',ContLimite);
fprintf('El numero de calificaciones desaprovatorias es: %0.1f\n',ContDesaprov);
end

Como véis para el caso 2 voy a necesitar los mismos valores de vec1 ingresados al principio. De todas formas, la funcion del caso 1 no corre en Matlab.

GRACIAS.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Cómo tener el mismo vector de un script dentro de una funcion

Publicado por Daniel (354 intervenciones) el 19/02/2019 09:22:10
Hola,

Si quieres compartir variables entre funciones de Matlab puedes utilizar variables globales, en general no es una buena practica. Para ello solamente tienes que definir la variable global al principio de cada función o script en la que la utilices.

global variable;

Así puede leer y escribir esa variable en todas la funciones y scripts.

Es importante definirla como global, en caso contrario, aunque tenga el mismo nombre, la variable será local.

Saludos,
Daniel Rodríguez.
https://www.analyticslane.com
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

Cómo tener el mismo vector de un script dentro de una funcion

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/02/2019 18:04:38
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
function variables_globales
continuar = true;
opcion = 0;
nelem = input ('Cuantas calificaciones va a ingresar: ');
vec1 = zeros (1,nelem);
for i = 1:nelem
    vec1(i) = input(['calificacion #', num2str(i),' ']);
end
disp(vec1)
 
%while seguircontinuar
    opcion = input('ingrese opcion  1 ó 2  :'); % Este lo programe para que me aparezca una especie de menu con los dos casos a usar.
    disp(opcion)
    pause (0.2)
 
    switch (opcion)
 
        case 1
            fprintf('Clasifica las calificaciones\n')
             contador_calificaciones (vec1);
        case 2
            fprintf('Promedio de los aprobados y reprobados\n')
            promedio = aprovados_reprovados (vec1);
        case 0
            fprintf ('Salir\n')
 
        otherwise
            fprintf('Opcion invalida\n');
    end
%end
 
end
 
% Para el caso 1 escribi un codigo como función en otro archivo, así:
function contador_calificaciones(vec1)
    ContAprov = 0;
    ContDesaprov = 0;
    ContLimite = 0;
 
    for i=1:length(vec1)
   if vec1(i)>0.0 && vec1(i)<5
       fprintf ('%d es calificacion aprobadoria\n', vec1(i))
       ContDesaprov = ContDesaprov+1;
    end
    if vec1(i) == 5
        fprintf ('%d es una calificacion sobre el limite\n', vec1(i))
        ContLimite = ContLimite+1;
    end
    if vec1(i)>5.0 && vec1(i)<=10
        fprintf ('%d es calificacion aprobatoria\n', vec1(i))
        ContAprov = ContAprov+1;
    end
    end
    % Suma de los distintos pH
fprintf('El numero de calificaciones aprovatorias es: %0.1f\n',ContAprov);
fprintf('El numero de calificaciones sobre el limite es: %0.1f\n',ContLimite);
fprintf('El numero de calificaciones desaprovatorias es: %0.1f\n',ContDesaprov);
end


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>> variables_globales
Cuantas calificaciones va a ingresar: 3
calificacion #1 4
calificacion #2 7
calificacion #3 10
     4     7    10
 
ingrese opcion  1 ó 2  :1
     1
 
Clasifica las calificaciones
4 es calificacion aprobadoria
7 es calificacion aprobatoria
10 es calificacion aprobatoria
El numero de calificaciones aprovatorias es: 2.0
El numero de calificaciones sobre el limite es: 0.0
El numero de calificaciones desaprovatorias es: 1.0


https://www.lawebdelprogramador.com/foros/Matlab/1684677-Sumatoria-de-vectores.html


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
0
Comentar

Cómo tener el mismo vector de un script dentro de una funcion

Publicado por Bel (1 intervención) el 19/02/2019 18:08:55
Muchas gracias por tu ayuda. :)
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