⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 axis.c

📁 力矩分配法校中船舶轴系。只是作分配用, 没有计算力矩。有待提高.....
💻 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 + -