??? Attempt to reference field of non-structure array.
Publicado por Francisco Javier Gimenez Rauch (1 intervención) el 04/11/2013 02:58:29
Hola, estoy programando un trabajo de simulación para mi facultad, estoy utilizando la GUI de matlab. Busque mucha información y comencé con el proyecto pero al codificarlo me sentí frustrado al no poder arreglar un error muy persistente. Ya busque la solución en internet pero no pude encontrarla. Paso a explicar el problema:
Tengo 4 Edit Text para ingresar 4 números naturales: "n" (cantidad de números pseudoaleatorios a generar), "semilla", "t" y "p" (los 3 valores se utilizan para crear números pseudoaleatorios)
y luego almaceno la serie generada en una tabla. Al hacer click en el botón se utiliza el codigo que cree:
n = get(handles.editn, 'string'); %Adquiero el valor de "n"
if ~isnan(str2double(n)) %Si lo ingresado ES un numero entonces...
n = str2double(n); %Convierto el String del edittext en un double
else
warndlg('Solamente puede ingresar numeros, intentelo nuevamente','Aviso');
return;
end
semilla = get(handles.editsemilla, 'string'); %Adquiero el valor de "semilla"
if ~isnan(str2double(semilla)) %Si lo ingresado ES un numero entonces...
semilla = str2double(semilla); %Convierto el String del edittext en un double
else
warndlg('Solamente puede ingresar numeros, intentelo nuevamente','Aviso');
return;
end
t = get(handles.editt, 'string'); %Adquiero el valor del parametro "t"
if ~isnan(str2double(t)) %Si lo ingresado ES un numero entonces...
t = str2double(t); %Convierto el String del edittext en un double
else
warndlg('Solamente puede ingresar numeros, intentelo nuevamente','Aviso');
return;
end
p = get(handles.editp, 'string'); %Adquiero el valor del parametro "p"
if ~isnan(str2double(p)) %Si lo ingresado ES un numero entonces...
p = str2double(p); %Convierto el String del edittext en un double
else
warndlg('Solamente puede ingresar numeros, intentelo nuevamente','Aviso');
return;
end
%Metodo multiplicativo de Congruencias
m=10000; %Modulo
a = 200 * t + p; %Parametro "a"
if ~isprime(semilla) %Si el numero no es primo que busque el siguiente primo con otro codigo
semilla=siguienteprimo(semilla);
set(handles.editsemilla,'String',semilla);
end
for i=1:n %Calculo de la serie de numeros pseudoaleatorios
r = mod((a * semilla), m);
semilla = r;
r01 = r/m;
serie(i) = r01;
end
set(handles.tablademanda,'data',serie);
set(handles.textmuestrademanda, 'visible','on');
set(handles.tablademanda,'visible','on'); % La tabla esta invisible al igual que el titulo
guidata(hObject,handles);
%Fin del codigo
El error que surge es:
??? Error while evaluating uicontrol Callback
??? Attempt to reference field of non-structure array.
Error in ==> Main>botongenerademanda_Callback at 180
n = get(handles.editn, 'string'); %Adquiero el valor de "n"
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> Main at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)Main('botongenerademanda_Callback',hObject,eventdata,guidata(hObject))
??? Error while evaluating uicontrol Callback
Lo mas curioso es que si intento ejecutar el programa desde el archivo main.fig sucede este error. ¡Pero si ejecuto el codigo main.m funciona!
¿Alguien podria ayudarme por favor? Gracias de antemano
Tengo 4 Edit Text para ingresar 4 números naturales: "n" (cantidad de números pseudoaleatorios a generar), "semilla", "t" y "p" (los 3 valores se utilizan para crear números pseudoaleatorios)
y luego almaceno la serie generada en una tabla. Al hacer click en el botón se utiliza el codigo que cree:
n = get(handles.editn, 'string'); %Adquiero el valor de "n"
if ~isnan(str2double(n)) %Si lo ingresado ES un numero entonces...
n = str2double(n); %Convierto el String del edittext en un double
else
warndlg('Solamente puede ingresar numeros, intentelo nuevamente','Aviso');
return;
end
semilla = get(handles.editsemilla, 'string'); %Adquiero el valor de "semilla"
if ~isnan(str2double(semilla)) %Si lo ingresado ES un numero entonces...
semilla = str2double(semilla); %Convierto el String del edittext en un double
else
warndlg('Solamente puede ingresar numeros, intentelo nuevamente','Aviso');
return;
end
t = get(handles.editt, 'string'); %Adquiero el valor del parametro "t"
if ~isnan(str2double(t)) %Si lo ingresado ES un numero entonces...
t = str2double(t); %Convierto el String del edittext en un double
else
warndlg('Solamente puede ingresar numeros, intentelo nuevamente','Aviso');
return;
end
p = get(handles.editp, 'string'); %Adquiero el valor del parametro "p"
if ~isnan(str2double(p)) %Si lo ingresado ES un numero entonces...
p = str2double(p); %Convierto el String del edittext en un double
else
warndlg('Solamente puede ingresar numeros, intentelo nuevamente','Aviso');
return;
end
%Metodo multiplicativo de Congruencias
m=10000; %Modulo
a = 200 * t + p; %Parametro "a"
if ~isprime(semilla) %Si el numero no es primo que busque el siguiente primo con otro codigo
semilla=siguienteprimo(semilla);
set(handles.editsemilla,'String',semilla);
end
for i=1:n %Calculo de la serie de numeros pseudoaleatorios
r = mod((a * semilla), m);
semilla = r;
r01 = r/m;
serie(i) = r01;
end
set(handles.tablademanda,'data',serie);
set(handles.textmuestrademanda, 'visible','on');
set(handles.tablademanda,'visible','on'); % La tabla esta invisible al igual que el titulo
guidata(hObject,handles);
%Fin del codigo
El error que surge es:
??? Error while evaluating uicontrol Callback
??? Attempt to reference field of non-structure array.
Error in ==> Main>botongenerademanda_Callback at 180
n = get(handles.editn, 'string'); %Adquiero el valor de "n"
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> Main at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)Main('botongenerademanda_Callback',hObject,eventdata,guidata(hObject))
??? Error while evaluating uicontrol Callback
Lo mas curioso es que si intento ejecutar el programa desde el archivo main.fig sucede este error. ¡Pero si ejecuto el codigo main.m funciona!
¿Alguien podria ayudarme por favor? Gracias de antemano
Valora esta pregunta


0