g語言代碼
㈠ G語言 圖形
G 語言 太專業了 是不是c語言
㈡ C語言代碼翻譯
好像很厲害的一段代碼,這是在做視圖壓縮啊還是矩陣加密啊?只是能不能用code的樣式貼出來啊?實在沒法看啊。。
我嘗試著調整一下格式,仍發現好像源碼錯漏了{符號,真頭大。
#include "stdlib.h"
#include "rinv.c"
int lman (n, m, k, f, q, r, h, y, x, p, g)
int n, m, k;
double f[], q[], r[], h[], y[], x[], p[], g[];
{
int i, j, kk, ii, l, jj, js;
double *e, *a, *b;
l = max(m, n);
e = malloc(m * m * sizeof(double));
a = malloc(l * l * sizeof(double));
b = malloc(l * l * sizeof(double));
/// 行列式 二維double 數組l*l足夠大,填充n*n對象
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
ii = i * l + j;
a[ii] = 0.0;
for (kk = 0; kk <= n - 1; kk++)
{
/// p 數據橫向遍歷一行, f 數據縱向遍歷一列
/// p 與 f 對應的橫列元素分別相乘後相加
a[ii] += p[i * n + kk] * f[j * n + kk];
}
}
}
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
ii = i * n + j;
p[ii] = q[ii]; ///將q數組中n*n對象拷入p數組中初始化
for (kk = 0; kk <= n - 1; kk++)
{
p[ii] += f[i * n + kk] * a[kk * l + j];
}
}
}
for (ii = 2; ii <= k; ii++)
{
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= m - 1; j++)
{
jj = i * l + j;
a[jj] = 0.0;
for (kk = 0; kk <= n - 1; kk++)
{
a[jj] = a[jj] + p[i * n + kk] * h[j * n + kk];
}
}
}
for (i = 0; i <= m - 1; i++)
{
for (j = 0; j <= m - 1; j++)
{
jj = i * m + j;
e[jj] = r[jj];
for (kk = 0; kk <= n - 1; kk++)
{
e[jj] = e[jj] + h[i * n + kk] * a[kk * l + j];
}
}
}
js = rinv(e, m);
if (js == 0)
{
free(e);
free(a);
free(b);
return (js);
}
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= m - 1; j++)
{
jj = i * m + j;
g[jj] = 0.0;
for (kk = 0; kk <= m - 1; kk++)
{
g[jj] = g[jj] + a[i * l + kk] * e[j * m + kk];
}
}
}
for (i = 0; i <= n - 1; i++)
{
jj = (ii - 1) * n + i;
x[jj] = 0.0;
for (j = 0; j <= n - 1; j++)
{
x[jj] = x[jj] + f[i * n + j] * x[(ii - 2) * n + j];
}
}
for (i = 0; i <= m - 1; i++)
{
jj = i * l;
b[jj] = y[(ii - 1) * m + i];
for (j = 0; j <= n - 1; j++)
{
b[jj] = b[jj] - h[i * n + j] * x[(ii - 1) * n + j];
}
}
for (i = 0; i <= n - 1; i++)
{
jj = (ii - 1) * n + i;
for (j = 0; j <= m - 1; j++)
{
x[jj] = x[jj] + g[i * m + j] * b[j * l];
}
}
if (ii < k)
{
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
for (kk = 0; kk <= m - 1; kk++)
{
a[jj] = a[jj] - g[i * m + kk] * h[kk * n + j];
}
}
}
if (i == j)
{
a[jj] = 1.0 + a[jj];
}
}
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
jj = i * l + j;
b[jj] = 0.0;
for (kk = 0; kk <= n - 1; kk++)
{
b[jj] = b[jj] + a[i * l + kk] * p[kk * n + j];
}
}
}
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
jj = i * l + j;
a[jj] = 0.0;
for (kk = 0; kk <= n - 1; kk++)
{
a[jj] = a[jj] + b[i * l + kk] * f[j * n + kk];
}
}
}
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
jj = i * n + j;
p[jj] = q[jj];
for (kk = 0; kk <= n - 1; kk++)
{
p[jj] = p[jj] + f[i * n + kk] * a[j * l + kk];
}
}
}
}
}
free(e);
free(a);
free(b);
return (js);
}
㈢ 全部G代碼並分類
1. 靈活設置參考點
BIEJING-FANUC Power Mate O數控車床共有二根軸,即主軸Z和刀具軸X。棒料中心為坐標系原點,各刀接近棒料時,坐標值減小,稱之為進刀;反之,坐標值增大,稱為退刀。當退到刀具開始時位置時,刀具停止,此位置稱為參考點。參考點是編程中一個非常重要的概念,每執行完一次自動循環,刀具都必須返回到這個位置,准備下一次循環。因此,在執行程序前,必須調整刀具及主軸的實際位置與坐標數值保持一致。然而,參考點的實際位置並不是固定不變的,編程人員可以根據零件的直徑、所用的刀具的種類、數量調整參考點的位置,縮短刀具的空行程。從而提高效率。
2. 化零為整法
在低壓電器中,存在大量的短銷軸類零件,其長徑比大約為2~3,直徑多在3mm以下。由於零件幾何尺寸較小,普通儀表車床難以裝夾,無法保證質量。如果按照常規方法編程,在每一次循環中只加工一個零件,由於軸向尺寸較短,造成機床主軸滑塊在床身導軌局部頻繁往復,彈簧夾頭夾緊機構動作頻繁。長時間工作之後,便會造成機床導軌局部過度磨損,影響機床的加工精度,嚴重的甚至會造成機床報廢。而彈簧夾頭夾緊機構的頻繁動作,則會導致控制電器的損壞。要解決以上問題,必須加大主軸送進長度和彈簧夾頭夾緊機構的動作間隔,同時不能降低生產率。由此設想是否可以在一次加工循環中加工數個零件,則主軸送進長度為單件零件長度的數倍 ,甚至可達主軸最大運行距離,而彈簧夾頭夾緊機構的動作時間間隔相應延長為原來的數倍。更重要的是,原來單件零件的輔助時間分攤在數個零件上,每個零件的輔助時間大為縮短,從而提高了生產效率。為了實現這一設想,我聯想到電腦程序設計中主程序和子程序的概念,如果將涉及零件幾何尺寸的命令欄位放在一個子程序中,而將有關機床控制的命令欄位及切斷零件的命令欄位放在主程序中,每加工一個零件時,由主程序通過調用子程序命令調用一次子程序,加工完成後,跳轉回主程序。需要加工幾個零件便調用幾次子程序,十分有利於增減每次循環加工零件的數目。通過這種方式編制的加工程序也比較簡潔明了,便於修改、維護。值得注意的是,由於子程序的各項參數在每次調用中都保持不變,而主軸的坐標時刻在變化,為與主程序相適應,在子程序中必須採用相對編程語句。
3. 減少刀具空行程
在BIEJING-FANUC Power Mate O數控車床中,刀具的運動是依靠步進電動機來帶動的,盡管在程序命令中有快速點定位命令G00,但與普通車床的進給方式相比,依然顯得效率不高。因此,要想提高機床效率,必須提高刀具的運行效率。刀具的空行程是指刀具接近工件和切削完畢後退回參考點所運行的距離。只要減少刀具空行程,就可以提高刀具的運行效率。(對於點位控制的數控車床,只要求定位精度較高,定位過程可盡可能快,而刀具相對工件的運動路線是無關緊要的。)在機床調整方面,要將刀具的初始位置安排在盡可能靠近棒料的地方。在程序方面,要根據零件的結構,使用盡可能少的刀具加工零件使刀具在安裝時彼此盡可能分散,在很接近棒料時彼此就不會發生干涉;另一方面,由於刀具實際的初始位置已經與原來發生了變化,必須在程序中對刀具的參考點位置進行修改,使之與實際情況相符,與此同時再配合快速點定位命令,就可以將刀具的空行程式控制制在最小范圍內從而提高機床加工效率。
4. 優化參數,平衡刀具負荷,減少刀具磨損
由於零件結構的千變萬化,有可能導致刀具切削負荷的不平衡。而由於自身幾何形狀的差異導致不同刀具在剛度、強度方面存在較大差異,例如:正外圓刀與切斷刀之間,正外圓刀與反外圓刀之間。如果在編程時不考慮這些差異。用強度、剛度弱的刀具承受較大的切削載荷,就會導致刀具的非正常磨損甚至損壞,而零件的加工質量達不到要求。因此編程時必須分析零件結構,用強度、剛度較高的刀具承受較大的切削載荷,用強度、剛度小的刀具承受較小的切削載荷,使不同的刀具都可以採用合理的切削用量,具有大體相近的壽命,減少磨刀及更換刀具的次數。
本文總結的一些具體結論僅適用於BIEJING- FANUC Power Mate O數控車床,但是它表現的編程思想具有普遍意義。要編制合理高效的加工程序,必須要熟悉所使用機床的程序語言並能加以靈活運用,了解機床的主參數,深入分析零件的結構特點、材料特性及加工工藝等。
BIEJING-FANUC Power Mate O數控車床指令包括G、M、S、T。其中指令為准備功能指令,M指令為輔助功能指令,S為主軸轉速控制指令,T為刀具選擇指令。下表列出了部分常用的指令代碼及含義。
代碼符號 代碼含義 代碼符號 代碼含義
G90 絕對值輸入 G31 等導程螺紋切削
G91 相對值輸入 G32 跳步功能
G00 快速點定位 M02、M03 程序結束
G01 直線插補 M00 程序停機
G02、G03 順圓和逆圓插補 M01 選擇停機
G28 自動返回參考點 M98 調用子程序
G04 暫停 M99 子程序結束
--------------------------------------------------------------------以上是本人在網上搜到的,非原創,只希望對您有幫助。
㈣ C語言代碼
看你的代碼,應該是想通過使用12個for循環嵌套來實現,但是這種方式效率是比較低的,13的12次方有23298085122481種方案,短時間內是看不到電腦的運行結果的。
所以我採用了另一種方法,最終算得的結果是64種方案。
#include<stdio.h>
#include"LinkedList.h"
intis_unique(int*array,intvalue,intlen)
{
inti=0,j=0;
for(i=0;i<len-1;i++)
{
for(j=i+1;j<len;j++)
{
if(array[i]==array[j])
return0;
}
}
return1;
}
intmain()
{
inti=0,j=0,m=0,n=0,k=0;
intcount[4]={0};
inttmp=0;
DataTypevalue;
inta[12]={0};//用於存放臨時組合的數據
intmax_num=0;//加減乘除四種運算中,符合條件的方案數量最少的個數
LinkedList_stru*list_array[4];
LinkedList_stru*list_tmp;
LinkNode_stru*p1,*p2,*p3,*p4;
intflag=0;
inttotal=0;
/*定義鏈表指針,用於存放創建的鏈表首地址*/
LinkedList_stru*list_addition=NULL,*list_subtraction=NULL;
LinkedList_stru*list_multiplication=NULL,*list_division=NULL;
printf(" 開始玩命分析......... ");
/*分析:總共有+,-,*,÷四種運算,而且運算結果需要在1~13之間。
*所以,我們可以先把這些所有符合條件的結果求出來.
**/
/*創建鏈表*/
list_addition=LinkedList_Create();//+
list_subtraction=LinkedList_Create();//-
list_multiplication=LinkedList_Create();//×
list_division=LinkedList_Create();//÷
/*1.求出+運算所有符合要求的方案*/
count[0]=0;
for(i=1;i<=13;i++)
{
for(j=1;j<=13;j++)
{
tmp=i+j;
if(tmp<=13)
{
if(i==j||j==tmp||i==tmp)
{
continue;
}
else
{
value.a1=i;
value.a2=j;
value.a3=tmp;
LinkedList_Add_Tail(list_addition,value);
count[0]++;
//printf("%2d+%2d=%2d ",i,j,(i+j));
}
}
}
}
//printf("計算完畢,+運算符合條件的結果總共有%d種! ",count[0]);
/*2.求出-運算所有符合要求的方案*/
count[1]=0;
for(i=1;i<=13;i++)
{
for(j=1;j<=13;j++)
{
tmp=i-j;
if(tmp>0&&tmp<=13)
{
if(i==j||j==tmp||i==tmp)
{
continue;
}
value.a1=i;
value.a2=j;
value.a3=tmp;
LinkedList_Add_Tail(list_subtraction,value);
count[1]++;
//printf("%2d-%2d=%2d ",i,j,(i-j));
}
}
}
//printf("計算完畢,-運算符合條件的結果總共有%d種! ",count[1]);
/*3.求出×運算所有符合要求的方案*/
count[2]=0;
for(i=1;i<=13;i++)
{
for(j=1;j<=13;j++)
{
tmp=i*j;
if(tmp>0&&tmp<=13)
{
if(i==j||j==tmp||i==tmp)
{
continue;
}
value.a1=i;
value.a2=j;
value.a3=tmp;
LinkedList_Add_Tail(list_multiplication,value);
count[2]++;
//printf("%2d×%2d=%2d ",i,j,(i*j));
}
}
}
//printf("計算完畢,+運算符合條件的結果總共有%d種! ",count[2]);
/*4.求出÷運算所有符合要求的方案*/
count[3]=0;
for(i=1;i<=13;i++)
{
for(j=1;j<=13;j++)
{
tmp=i%j;
if(tmp==0)
{
if(i==j||j==(i/j)||i==(i/j))
{
continue;
}
value.a1=i;
value.a2=j;
value.a3=(i/j);
LinkedList_Add_Tail(list_division,value);
count[3]++;
//printf("%2d÷%2d=%2d ",i,j,(i/j));
}
}
}
//printf("計算完畢,÷運算符合條件的結果總共有%d種! ",count[3]);
printf("list_addition:clen=%d! ",list_addition->clen);
printf("list_subtraction:clen=%d! ",list_subtraction->clen);
printf("list_multiplication:clen=%d! ",list_multiplication->clen);
printf("list_division:clen=%d! ",list_division->clen);
list_array[0]=list_addition;
list_array[1]=list_subtraction;
list_array[2]=list_multiplication;
list_array[3]=list_division;
max_num=list_array[0]->clen;
for(i=0;i<4;i++)
{
if(max_num>=list_array[i]->clen)
{
max_num=list_array[i]->clen;
//list_tmp=num[i];
}
}
//printf("最多隻能有%d種方案! ",max_num);
/*從上面的計算結果我們可以知道,最多隻能有10種方案,因為乘法和除法這兩種運算均只有10種方案符合條件
*所以,這里我們就基於除法去做匹配.按理說不應該這么做的,應該在代碼中進行判斷,但是為了節省時間,只能這樣了。
**/
/*遍歷鏈表*/
p4=list_division->pHead->pNext;
for(i=0;i<list_division->clen;i++)
{
p3=list_multiplication->pHead->pNext;
for(j=0;j<list_multiplication->clen;j++)
{
p2=list_subtraction->pHead->pNext;
for(m=0;m<list_subtraction->clen;m++)
{
p1=list_addition->pHead->pNext;
for(n=0;n<list_addition->clen;n++)
{
flag=111;
a[0]=p1->data.a1;a[1]=p1->data.a2;a[2]=p1->data.a3;
a[3]=p2->data.a1;a[4]=p2->data.a2;a[5]=p2->data.a3;
a[6]=p3->data.a1;a[7]=p3->data.a2;a[8]=p3->data.a3;
a[9]=p4->data.a1;a[10]=p4->data.a2;a[11]=p4->data.a3;
for(k=0;k<sizeof(a)/sizeof(a[0]);k++)
{
if(!is_unique(a,a[k],sizeof(a)/sizeof(a[0])))
{
flag=0;
break;
}
}
if(flag==111)
{
//printf(" ");
total++;
printf("方案%d: ",total);
printf("%2d+%2d=%2d ",a[0],a[1],a[2]);
printf("%2d-%2d=%2d ",a[3],a[4],a[5]);
printf("%2d×%2d=%2d ",a[6],a[7],a[8]);
printf("%2d÷%2d=%2d ",a[9],a[10],a[11]);
printf(" ");
}
p1=p1->pNext;
}
p2=p2->pNext;
}
p3=p3->pNext;
}
p4=p4->pNext;
}
printf("計算完畢,總共有%d種方案! ",total);
return0;
}
㈤ g代碼是什麼
G代碼是數控程序中的指令,一般都稱為G指令。
G代碼(G-code,又稱RS-274)是最為廣泛使用的數控(numerical control)編程語言,有多個版本,主要在計算機輔助製造中用於控制自動機床。
G代碼有時候也稱為G編程語言。使用G代碼可以實現快速定位、逆圓插補、順圓插補、中間點圓弧插補、半徑編程、跳轉加工。
(5)g語言代碼擴展閱讀
G代碼及其功能——
G00------快速定位
G01------直線插補
G02------順時針方向圓弧插補
G03------逆時針方向圓弧插補
G04------定時暫停
G05------通過中間點圓弧插補
G06------拋物線插補
G07------Z 樣條曲線插補
㈥ c語言printf中%g的含義是什麼代碼如下
轉換來說明及作為結果的列印源輸出%a 浮點數、十六進制數字和p-記數法(C99)
%A 浮點數、十六進制數字和p-記法(C99)
%c 一個字元
%d 有符號十進制整數
%e 浮點數、e-記數法
%E 浮點數、E-記數法
%f 浮點數、十進制記數法
%g 根據數值不同自動選擇%f或%e.
%G 根據數值不同自動選擇%f或%e.
%i 有符號十進制數(與%d相同)
%o 無符號八進制整數
%p 指針
%s 字元串
%u 無符號十進制整數
%x 使用十六進制數字0f的無符號十六進制整數
%X 使用十六進制數字0f的無符號十六進制整數
%% 列印一個百分號 使用printf ()函數 printf()的基本形式: printf("格式控制字元串",變數列表);
㈦ 數控G代碼的由來 光知道用 不知道怎麼來的。
這是科學家們做的事。普通人會用就行了。就像許多程序是由專C語言編出來的,你屬非要問C語言是怎麼來的。
這里涉及到高級語言和機器語言轉換識別的問題。一般人說不清。而且大部分人知道了也沒用。就算告訴你G01的機器是多少個0多個 1,你說你有用么?
㈧ c語言編程代碼
兩種方法我寫在一起,可以獨立拆開。
#include <stdio.h>
void finda1(char a[3][10]);
void finda2(char a[3][10]);
void show(char (*p)[10]);
int main()
{
char a[3][10]={{"gehajl"},{"788a987a7"},{"ccabbbabbb"}};
printf("原數組內容: ");
show(a);
printf(" 1、用數組指針的方法(函數): ");
finda1(a);
printf("執行後: ");
show(a);
printf(" --------------------- ");
char b[3][10]={{"gehajl"},{"788a987a7"},{"ccabbbabbb"}};
printf("原數組內容: ");
show(a);
printf(" 2、用指針數組的方法(函數finda2): ");
finda2(b);
printf("執行後: ");
show(b);
return 0;
}
void finda1(char a[3][10])
{
int i,j;
char (*p)[10]=a;
for(i=0;i<3;i++)
for(j=0;j<10;j++)
if(p[i][j]=='a')
printf("發現:第%d行第%d個元素是『a』,已替換 ",i+1,j+1),p[i][j]='1';
}
void finda2(char a[3][10])
{
int i,j;
char *p[3]={&a[0][0],&a[1][0],&a[2][0]};
for(i=0;i<3;i++)
for(j=0;j<10;j++)
if(p[i][j]=='a')
printf("發現:第%d行第%d個元素是『a』,已替換 ",i+1,j+1),p[i][j]='1';
}
void show(char (*p)[10])
{
int i,j;
for(i=0;i<3;i++,printf(" "))
for(j=0;j<10;j++)
printf("%c ",p[i][j]);
}