📄 axis.c
字号:
/*----------------------------------------------------------
* Copyright (c) 2008 eryar All rights reserved.
*
* File: axis.c
* Description:
* 力矩分配法校中船舶轴系。只是作分配用。使用方法:
* 下图为一船舶动力装置教材中的例子:
* 900N/m 2000N 900N/m
* |||||||||| ↓ |||||||||||
* |-----------><-----------------><-------------|
* A 2m B 1.5m | 1.5m C 2m D
*
* 其中: 节点A,D为固定端;
* 计算步骤:
* 1.先求单位刚度;
* 2.再根据刚度求出分配系数;
* 3.根据材料力学的知识求出固定弯矩;
* 4.将以上数据输入程序;
* 5.求各点的支反力;
* 6.校核支反力;
*
* 现结合以上例子说明此程序的用法:
* 节点数:4 //上述轴中有四个节点:A,B,C,D
* 分配次数:20 //越多越好,重复机械的活交给计算机
* ---分配系数--- //将以上计算的分配系数输入
* 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
* 输入完毕,回车即得到分配的情况,
* 程序计算完后生成一个文本文件,
* 最后一行为各节点的弯矩之和.
*
* 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
/*--------函数声明------------------*/
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*/
/*输入数据*/
printf("节点数:"); scanf("%d",&NODE);
printf("分配次数:"); scanf("%d",&TIMES);
printf("---分配系数---\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];
}/*输入数据*/
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);/*关闭文件*/
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]; /*每个节点之和*/
SUM[i] = -SUM[i]; /*力矩取 负号*/
B1[i+1] = SUM[i]*L[i+1]; /*按各节点的 */
B1[i+2] = SUM[i]*L[i+2]; /*分配系数分配*/
}
}/*力矩分配*/
/*力矩按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]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -