user2417860
user2417860

Reputation: 9

I used while loop and my project become not responding (MATLAB)

I'm beginner in MATLAB programming. I'm working on statistic data and I have some problem with while looping. Here's the codes :

% --- Executes on button press in b_analisa_data.
function b_analisa_data_Callback(hObject, eventdata, handles)
hitung(handles.lb_tkp, handles);
tkp=getappdata(handles.lb_tkp,'tkp2');
tpp=getappdata(handles.lb_tpp,'tpp2');
po=getappdata(handles.lb_po,'po2');
nq=getappdata(handles.lb_nq,'nq2');
nt=getappdata(handles.lb_nt,'nt2');
tq=getappdata(handles.lb_tq,'tq2');
tt=getappdata(handles.lb_tt,'tt2');
s=getappdata(handles.lb_s,'s2');

set(handles.lb_tkp,'String',tkp);
set(handles.lb_tpp,'String',tpp);
set(handles.lb_po,'String',po);
set(handles.lb_nq,'String',nq);
set(handles.lb_nt,'String',nt);
set(handles.lb_tq,'String',tq);
set(handles.lb_tt,'String',tt);
set(handles.lb_s,'String',s);
% hObject    handle to b_analisa_data (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


function hitung(handles_hitung,handles)
% Perhitungan tingkat kedatangan pelanggan (TKP)
a=str2num(get(handles.st_twak,'String'));
b=str2num(get(handles.st_jwak,'String'));
param=str2num(get(handles.txt_param,'String'));
c=a/b;
t=3600;
tkp=t/c;
%set(handles.lb_tkp,'String',tkp);

% Perhitungan tingkat pelayanan pelanggan (TPP)
d=str2num(get(handles.st_twp,'String'));
e=str2num(get(handles.st_jwp,'String'));
f=d/e;
tpp=t/f;
%set(handles.lb_tpp,'String',tpp);

% Perhitungan probabilitas tidak adanya pelanggan (PO)
s=str2num(get(handles.st_kasir,'String'));
g=tkp/tpp;
h=tkp/(s*tpp);
for i=0:s-1;
    j(i+1)=(g^i)/(factorial(i));
end
k=sum(j);
l=g/((factorial(s)*(1-h)));
m=k+l;
po=1/m;
%set(handles.lb_po,'String',po);

% Perhitungan jumlah pelanggan dalam antrian (NQ)
n=po*(g^s)*h;
o=factorial(s);
p=o*((1-h)^2);
nq=n/p;
%set(handles.lb_nq,'String',nq);

% Perhitungan jumlah pelanggan dalam sistem (NT)
nt=nq+g;
%set(handles.lb_nt,'String',nt);

% Perhitungan waktu tunggu rata-rata dalam antrian (TQ)
tq=nq/tkp;
%set(handles.lb_tq,'String',tq);

% Perhitungan waktu tunggu rata-rata dalam sistem (TT)
q=tq+(1/tpp);
tt= q*60;
%set(handles.lb_tt,'String',tt);

% Perhitungan jumlah kasir (S)
%set(handles.lb_s,'String',s);

while tt>param
    s=s-1;
    tkp=t/c;
    tpp=t/f;
    po=1/m;
    nq=n/p;
    nt=nq+g;
    tq=nq/tkp;
    tt= q*60;
end
setappdata(handles_hitung,'tkp2',tkp);
setappdata(handles_hitung,'tpp2',tpp);
setappdata(handles_hitung,'po2',po);
setappdata(handles_hitung,'nq2',nq);
setappdata(handles_hitung,'nt2',nt);
setappdata(handles_hitung,'tq2',tq);
setappdata(handles_hitung,'tt2',tt);
setappdata(handles_hitung,'s2',s);

My project will calculate statistic data using more than one formula. So, I put on all the formula within "function hitung"

function hitung(handles_hitung,handles)
% Perhitungan tingkat kedatangan pelanggan (TKP)
a=str2num(get(handles.st_twak,'String'));
b=str2num(get(handles.st_jwak,'String'));
param=str2num(get(handles.txt_param,'String'));
c=a/b;
t=3600;
tkp=t/c;
%set(handles.lb_tkp,'String',tkp);

% Perhitungan tingkat pelayanan pelanggan (TPP)
d=str2num(get(handles.st_twp,'String'));
e=str2num(get(handles.st_jwp,'String'));
f=d/e;
tpp=t/f;
%set(handles.lb_tpp,'String',tpp);

% Perhitungan probabilitas tidak adanya pelanggan (PO)
s=str2num(get(handles.st_kasir,'String'));
g=tkp/tpp;
h=tkp/(s*tpp);
for i=0:s-1;
    j(i+1)=(g^i)/(factorial(i));
end
k=sum(j);
l=g/((factorial(s)*(1-h)));
m=k+l;
po=1/m;
%set(handles.lb_po,'String',po);

% Perhitungan jumlah pelanggan dalam antrian (NQ)
n=po*(g^s)*h;
o=factorial(s);
p=o*((1-h)^2);
nq=n/p;
%set(handles.lb_nq,'String',nq);

% Perhitungan jumlah pelanggan dalam sistem (NT)
nt=nq+g;
%set(handles.lb_nt,'String',nt);

% Perhitungan waktu tunggu rata-rata dalam antrian (TQ)
tq=nq/tkp;
%set(handles.lb_tq,'String',tq);

% Perhitungan waktu tunggu rata-rata dalam sistem (TT)
q=tq+(1/tpp);
tt= q*60;
%set(handles.lb_tt,'String',tt);

% Perhitungan jumlah kasir (S)
%set(handles.lb_s,'String',s);

while tt>param
    s=s-1;
    tkp=t/c;
    tpp=t/f;
    po=1/m;
    nq=n/p;
    nt=nq+g;
    tq=nq/tkp;
    tt= q*60;
end
setappdata(handles_hitung,'tkp2',tkp);
setappdata(handles_hitung,'tpp2',tpp);
setappdata(handles_hitung,'po2',po);
setappdata(handles_hitung,'nq2',nq);
setappdata(handles_hitung,'nt2',nt);
setappdata(handles_hitung,'tq2',tq);
setappdata(handles_hitung,'tt2',tt);
setappdata(handles_hitung,'s2',s);

And I call "function hitung" within "function b_analisa_data Callback"

function b_analisa_data_Callback(hObject, eventdata, handles)
    hitung(handles.lb_tkp, handles);
    tkp=getappdata(handles.lb_tkp,'tkp2');
    tpp=getappdata(handles.lb_tpp,'tpp2');
    po=getappdata(handles.lb_po,'po2');
    nq=getappdata(handles.lb_nq,'nq2');
    nt=getappdata(handles.lb_nt,'nt2');
    tq=getappdata(handles.lb_tq,'tq2');
    tt=getappdata(handles.lb_tt,'tt2');
    s=getappdata(handles.lb_s,'s2');

    set(handles.lb_tkp,'String',tkp);
    set(handles.lb_tpp,'String',tpp);
    set(handles.lb_po,'String',po);
    set(handles.lb_nq,'String',nq);
    set(handles.lb_nt,'String',nt);
    set(handles.lb_tq,'String',tq);
    set(handles.lb_tt,'String',tt);
    set(handles.lb_s,'String',s);
    % hObject    handle to b_analisa_data (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)

My program will dislpay all the result from calculating the formulas in 8 listboxes. But I had no idea to call the "function hitung" so it can be displayed in 8 listboxes as well. I tried the codes bellow and got some errors :

function b_analisa_data_Callback(hObject, eventdata, handles)
        hitung(handles.lb_tkp,handles.lb_tpp, handles);
        ....

So, I tried with only 1 listbox and it works as long as program didn't use the while loop.

function b_analisa_data_Callback(hObject, eventdata, handles)
        hitung(handles.lb_tkp, handles);
        ...

If the condition make the program use while loop, then it become not responding. I still confused why it turns out like this.

Upvotes: 0

Views: 229

Answers (2)

mlai
mlai

Reputation: 3393

Dennis is right. Another guess at what you may want is to make sure q gets updated. As you have it, q is set outside the while loop and never changes inside.

Since you have

tt= q*60;

q needs to be updated inside the loop in order for tt to be as well.

Upvotes: 0

Dennis Jaheruddin
Dennis Jaheruddin

Reputation: 21563

I see you have this while loop:

while tt>param
    s=s-1;
    tkp=t/c;
    tpp=t/f;
    po=1/m;
    nq=n/p;
    nt=nq+g;
    tq=nq/tkp;
    tt= q*60;
end

Both tt and param will never be changed (well tt can change the first time). So once you are in the second iteration, you can never get out.


Some guesses of what you may want, if it is not just a typo:

  1. If you only want to do this once, replace the while with an if
  2. If you want to wait till a variable get updated, you need to put everything that is required for updating this variable inside the loop. (for example getappdata)

Upvotes: 3

Related Questions