?? axis.c
字號(hào):
/*----------------------------------------------------------
* Copyright (c) 2008 eryar All rights reserved.
*
* File: axis.c
* Description:
* 力矩分配法校中船舶軸系。只是作分配用。使用方法:
* 下圖為一船舶動(dòng)力裝置教材中的例子:
* 900N/m 2000N 900N/m
* |||||||||| ↓ |||||||||||
* |-----------><-----------------><-------------|
* A 2m B 1.5m | 1.5m C 2m D
*
* 其中: 節(jié)點(diǎn)A,D為固定端;
* 計(jì)算步驟:
* 1.先求單位剛度;
* 2.再根據(jù)剛度求出分配系數(shù);
* 3.根據(jù)材料力學(xué)的知識(shí)求出固定彎矩;
* 4.將以上數(shù)據(jù)輸入程序;
* 5.求各點(diǎn)的支反力;
* 6.校核支反力;
*
* 現(xiàn)結(jié)合以上例子說明此程序的用法:
* 節(jié)點(diǎn)數(shù):4 //上述軸中有四個(gè)節(jié)點(diǎn):A,B,C,D
* 分配次數(shù):20 //越多越好,重復(fù)機(jī)械的活交給計(jì)算機(jī)
* ---分配系數(shù)--- //將以上計(jì)算的分配系數(shù)輸入
* Lambda 1: 0
* Lambda 2: 0.6
* Lambda 3: 0.4
* Lambda 4: 0.4
* Lambda 5: 0.6
* Lambda 6: 1
* ----固定彎矩---
* Torque 1: 300
* Torque 2: -300
* Torque 3: 750
* Torque 4: -750
* Torque 5: 300
* Torque 6: -300
* 輸入完畢,回車即得到分配的情況,
* 程序計(jì)算完后生成一個(gè)文本文件,
* 最后一行為各節(jié)點(diǎn)的彎矩之和.
*
* Environment:VC6.0
* Date:10:21 2008-1-9
* Author:eryar@163.com
*
*--------------------------------------------------------*/
#include <math.h>
#include <conio.h>
#include <stdio.h>
#define MAX 100
/*--------函數(shù)聲明------------------*/
void print(int N,float B[]);
void distribution(float B1[],float L[],int N);
void transmission(float B1[],int N);
/*----------------------------------*/
main()
{
int i,j,k;
int TIMES=0; /*Frequence of Distribution*/
int NODE=0; /*The number of Node*/
float FT1[MAX]; /*Save Fixed Torque*/
float FT2[MAX]; /*Total Fixed Torque*/
float Lambda[MAX]; /*Distribution ratio*/
FILE *eryar; /*Save to the file*/
/*輸入數(shù)據(jù)*/
printf("節(jié)點(diǎn)數(shù):"); scanf("%d",&NODE);
printf("分配次數(shù):"); scanf("%d",&TIMES);
printf("---分配系數(shù)---\n");
for(i=0;i<(NODE*2-2);i++) {
printf("Lambda %d:",i+1);
scanf("%f",&Lambda[i]);
}
printf("---固定彎矩---\n");
for(i=0;i<(NODE*2-2);i++) {
printf("Torque %d:",i+1);
scanf("%f",&FT1[i]);
FT2[i]=FT1[i];
}/*輸入數(shù)據(jù)*/
k=NODE*2-2;
eryar = fopen("axis.txt","w"); /*打開文件*/
fprintf(eryar,"\t\t---軸系合理校中---\n");
for(i=0;i<k;i++) fprintf(eryar,"%.2f\t",Lambda[i]);
fprintf(eryar,"\n");
for(i=0;i<k;i++)
fprintf(eryar,"%.2f\t",FT1[i]);
fprintf(eryar,"\n");
print(NODE,FT1); printf("\n");
/*分配傳遞*/
for(i=0;i<TIMES;i++) {
distribution(FT1,Lambda,NODE);
for(j=0;j<k;j++) FT2[j]+=FT1[j];
print(NODE,FT1); printf("\n");
for(j=0;j<k;j++) fprintf(eryar,"%.2f\t",FT1[j]);
fprintf(eryar,"\n");
transmission(FT1,NODE);
for(j=0;j<k;j++) FT2[j]+=FT1[j];
print(NODE,FT1); printf("\n");
for(j=0;j<k;j++) fprintf(eryar,"%.2f\t",FT1[j]);
fprintf(eryar,"\n");
}/*分配傳遞*/
print(NODE,FT2);
printf("\007");
for(j=0;j<k;j++) fprintf(eryar,"%.2f\t",FT2[j]);
fprintf(eryar,"\n*注:最后一行為總彎矩!");
fprintf(eryar,"\n\t\t---eryar@163.com---\n");
fclose(eryar);/*關(guān)閉文件*/
printf("\nPress any key to halt...");
getch();
}
/*力矩分配*/
void distribution(float B1[],float L[],int N)
{
int i;
int last;
float SUM[MAX];
last = N*2-3;
B1[0] = B1[0] * L[0];
B1[0] = -B1[0];
B1[last] = B1[last]*L[last];
B1[last] = -B1[last];
for(i=0;i<last-2;i+=2) {
SUM[i] = B1[i+1]+B1[i+2]; /*每個(gè)節(jié)點(diǎn)之和*/
SUM[i] = -SUM[i]; /*力矩取 負(fù)號(hào)*/
B1[i+1] = SUM[i]*L[i+1]; /*按各節(jié)點(diǎn)的 */
B1[i+2] = SUM[i]*L[i+2]; /*分配系數(shù)分配*/
}
}/*力矩分配*/
/*力矩按0.5傳遞*/
void transmission(float B1[],int N)
{
int i;
int last;
float temp[MAX];
last = N*2-3;
for(i=0;i<=last;i++)
temp[i] = B1[i];
for(i=0;i<=last;i+=2) {
B1[i] = temp[i+1]/2;
B1[i+1] = temp[i]/2;
}
}/*力矩傳遞*/
void print(int N,float B[])
{
int i;
for(i=0;i<N*2-2;i++)
printf("%.2f\t",B[i]);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -