Reputation: 9
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
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
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:
while
with an if
getappdata
)Upvotes: 3