線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1227
推到 Plurk!
推到 Facebook!

紙張修裁計算問題

缺席
lei1120
一般會員


發表:2
回覆:4
積分:1
註冊:2006-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-08-03 09:47:02 IP:220.229.xxx.xxx 訂閱

各位大大好,小弟因為工作關係開始學習BCB,

現在在做和PLC通訊控制一台兩軸的機械,以下問題困擾了小弟兩個多月

機器一軸有七隻刀另一軸有12個滾輪

我有兩個EDIT一個為輸入紙張長度另一個為修裁尺寸

當在尺寸格輸入320*5,結果如下:

200

300

200 300 200*2R200 240 200*1

壓線尺寸如下:

200

200

240

220 300 220*2

表示第二種尺寸為 200 240 200,一裁即以 *1 表示.

R 表示兩種尺寸之分隔處

實線表示要以刀切割處

虛線表示以滾輪壓痕處

想請教各位前輩指導,小弟下列問題:

2.當出現下狀況(1)使用計算出來刀或滾輪數使用數比機械上的多(2)修裁總長比輸入紙張長度還長(3)輸入錯誤格式時等狀況顯示訊息[此格式無法完成]

希望能有高手為小弟解除這問題~多謝

阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-08-04 18:19:42 IP:61.66.xxx.xxx 未訂閱

你的兩個問題
第1個是計算
第2個是判斷
這你怎麼計算 怎麼判斷
程式就怎麼計算 怎麼判斷

是不知道邏輯如何處理?
還是不知道如何把邏輯轉成程式呢?

lei1120
一般會員


發表:2
回覆:4
積分:1
註冊:2006-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-08-05 09:07:09 IP:220.229.xxx.xxx 訂閱

===================引 用 文 章===================

你的兩個問題
第1個是計算
第2個是判斷
這你怎麼計算 怎麼判斷
程式就怎麼計算 怎麼判斷

是不知道邏輯如何處理?
還是不知道如何把邏輯轉成程式呢?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
小弟的問題就像大大您所說的隻到它的動作模式有基本邏輯概念
但是就是苦於無法實現將它轉換成程式,應此才會上來請教有實力能轉換的大大
看是否可以求得大體動作模式的程式~~多謝
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-08-15 13:46:46 IP:61.66.xxx.xxx 未訂閱

你會寫程式也知道邏輯了嗎

BCB我不會 但我知道邏輯

1.格式檢查
格式不合則提示錯誤

一個字元一個字元的檢查

符號計數值=0

第一個字元必須為數字

若為數字 符號計數值=0

若不為數字 判斷是否為合法符號( ,*,R)

若不是 提示錯誤

若是 符號計數值 1

若符號計數值大於等於2 提示錯誤

換下一個字元

2.計算修裁總長度
並判斷是否大於輸入紙張長度
若大於則提示錯誤

3.計算使用刀數
並判斷是否大於7
若大於則提示錯誤

4.計算滾輪數
並判斷是否大於12
若大於則提示錯誤

5.計算刀的位置

6.計算滾輪的位置

可以先看看你現在的程式嗎!

lei1120
一般會員


發表:2
回覆:4
積分:1
註冊:2006-07-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-08-16 08:18:23 IP:220.229.xxx.xxx 訂閱

===================引 用 文 章===================
可以先看看你現在的程式嗎!
以下是小弟的程式
ans=ans "\n";
kfs="";
whs="";
char text[80];
memmove(text,ans.c_str(),ans.Length());
char Nunber[5]={0};
int MUL;
int sum_total=0,Add=0;
int ivv,jvv,kvv,ii,jj,kk,aa;
jvv=0;
kk=0;
for(ivv=0;text[ivv] !='\n';ivv )//判斷結束字元
{
if( text[ivv] != 'R')
{
if( (text[ivv] ==' ') || (text[ivv] == '*') )
{
Add = atoi(Nunber);
sum_total = Add;
jvv=0;
if(text[ivv] ==' ')
{
whs =AnsiString(sum_total) " ";
}
}
else if(text[ivv-1] == '*')
{
for(kvv=0;kvv<=4;kvv )
{
Nunber[kvv] = 0x00;
}
kfs =AnsiString(sum_total) " ";
//MUL=text[i]-0x30;
jvv=0;
kvv = ivv;
while(1)
{
if( (text[kvv] == 'R') || (text[kvv] == '\n') )
{
MUL = atoi(Nunber);
MUL = MUL-1;
aa = jvv;
jvv = 0;
break;
}
else
{
Nunber[jvv] = text[kvv];
jvv ;
kvv ;
}
}
for(kvv=0;kvv<=4;kvv )
{
Nunber[kvv] = 0x00;
}
jvv=0;
for(ii = 0;ii {
for(jj=kk;text[jj] !='R';jj )
{
if( (text[jj] ==' ') || (text[jj] == '*') )
{
Add = atoi(Nunber);
sum_total = Add;
jvv=0;
if(text[jj] == '*')
{
break;
}
else
{
whs =AnsiString(sum_total) " ";
}
}
else
{
Nunber[jvv] = text[jj];
jvv ;
}
}
kfs =AnsiString(sum_total) " ";
}
kk = ivv aa 1;
jvv=0;
for(kvv=0;kvv<=4;kvv )
{
Nunber[kvv] = 0x00;
}
}
else
{
Nunber[jvv] = text[ivv];
jvv ;
}
}
else
{
jvv = 0;
}
}
kvv = ivv;
while(1)
{
kvv--;
if( (text[kvv] ==' ') || (text[kvv] == '*')||( text[ivv] == 'R') )//判斷最後若有加號,則加最後一個數
{ //其他則無
if(text[kvv] ==' ')
{
Add = atoi(Nunber);
sum_total = Add;
kfs =AnsiString(sum_total) " ";
}
break;
}
}
Edit3->Text=IntToStr(sum_total);
if(Edit1->Text=="")
{
Shape1->Width=750;
}
else
{
Shape1->Width=StrToInt(Edit1->Text)*0.3;
}
Shape1->Left=((Panel1->Width)-(Shape1->Width))/2;
上述做的內容是判斷輸入EDIT的格式顯示總裁切長度
還有將要下刀和下輪的地方分兩個陣列放
但總感覺這樣寫起來很陽春,二來對智慧選擇的地方還沒有好的頭緒
不知道哪位大大有比較好的見解和方法~可以提供
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-08-16 10:08:13 IP:61.66.xxx.xxx 未訂閱

看別人的程式好辛苦

程式風格
1.先做好程式架構
2.先寫註解再寫程式
3.使用有意義的變數名稱
4.模組化 分出主程式跟副程式

-------------------------------
2.計算修裁總長度
並判斷是否大於輸入紙張長度
若大於則提示錯誤

(1)找數字
起找位置=0
Loop:
尋找符號位置( ,*,R) 若沒有符號 則跳出
符號前的字元組合成一個數字存起來(使用int陣列)
符號存起來(使用char陣列)
起找位置=符號位置 1
回Loop再找一次

(2)計算

依序取數字
判斷符號若為" " 則加下個數字
判斷符號若為"*" 則乘下個數字
判斷符號若為"R" 則記下目前總數 重新取數字

下面是參考程式 不是可執行的

計算長度副程式 (){
Number[]={100,200,200,2,300}; //int陣列
symbol[]={' ',' ','*','R'}; //char陣列

i=0; //做迴圈用
sum=0; //總長度
sumtemp=Number[i]; //長度暫存

for (i=0,i<符號數目,){ //這裡i不用

if (symbol[i]==' '){
i ;
sumtemp =Number[i];
}


elseif (symbol[i]=='*'){
i ;
sumtemp*=Number[i];
}


elseif (symbol[i]=='R'){
i ;
sum=sumtemp;
sumtemp=Number[i];
}
}

sum =sumtemp; //這裡就是總長度了
}

阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-08-16 10:12:20 IP:211.21.xxx.xxx 未訂閱
另外如果是200 300*2 100
要怎麼裁
lei1120
一般會員


發表:2
回覆:4
積分:1
註冊:2006-07-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-08-16 13:34:47 IP:211.20.xxx.xxx 訂閱

===================引 用 文 章===================
另外如果是200 300*2 100
要怎麼裁
看不懂您的意思~你是指200 300這種SIZE裁兩張再裁1張100這種SIZE嗎?
如果是的話小弟在一開此問題的時候~就有說過尺寸不同時須以R做分隔
又如果是您所想表示的是200 300 300 100這樣的話~
那就必須要照小弟所打的不可以用*2來表示(不好意思程式功力不高~待大大解決^^)
而小弟PO出來的程式本身就可以算出總長@@
我只是卡在選擇刀和輪子不知如何下手!!
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2006-08-17 12:44:18 IP:211.21.xxx.xxx 未訂閱

我的意思是當發生這種輸入時
200 300*2 100
是判斷為錯誤輸入嗎?
如果是的話
輸入檢查副程式中要加一條
'*'號後面的符號只能是'R'

200 300*2*2時又如何?
應該也要判斷為錯誤輸入吧!

>我只是卡在選擇刀和輪子不知如何下手!!
這聽不是很懂耶!

我之前提了6個程式步驟
1.格式檢查
2.計算修裁總長度
3.計算使用刀數
...

你的問題是哪一個?
還是是在這些之外!
可不可以說明詳細一點!

lei1120
一般會員


發表:2
回覆:4
積分:1
註冊:2006-07-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2006-08-17 13:34:34 IP:211.20.xxx.xxx 訂閱
>我的意思是當發生這種輸入時
>200 300*2 100
>是判斷為錯誤輸入嗎?
>如果是的話
>輸入檢查副程式中要加一條
>*'號後面的符號只能是'R'
>200 300*2*2時又如何?
>應該也要判斷為錯誤輸入吧!
的確~上述格式應判斷為輸入錯誤沒錯
>我之前提了6個程式步驟
1.格式問題~小弟目前沒有去做像上面您所說的格式判斷
2.計算修裁總長度並判斷是否超出輸入紙張長度~有完成
3.4.計算刀和輪的使用數~小弟有自己另寫一個副程式有計算~方式陽春勉強達成
5.6.刀和輪的位置也有計算&紀錄
而小弟再上上一篇所說的問題則是
我現在知道該用幾隻刀(輪)也知道位置
但是~我該用哪隻刀(或輪)?~才是最方便的選擇在定位或是執行速度上也比較快?
不知道這樣拙劣的表示~是否能讓你理解~
因為小弟是半途出家~接觸時間不長(約5個月)~所以請多包涵!
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2006-08-17 16:28:56 IP:61.66.xxx.xxx 未訂閱

共有7隻刀 12滾輪

這些刀輪有沒有原始位置
跟移動位置限制

如第1刀只能在0~300的位置
第2刀只能在150~450的位置

如果有 還要再限制輸入條件
如果沒有 那就隨便排

還是你是想 要平均使用

比如用3隻刀時 就用第1、4、7刀
用4隻刀時用1、3、5、7刀

如果是這樣 那直接用查表法就好了
反正就1~7隻刀而已
至於滾輪 也一樣處理

系統時間:2024-05-10 15:09:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!