| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 838 人关注过本帖
标题:[求助]用C++怎么实现这个程序?急啊!
只看楼主 加入收藏
tongtingting
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-3-7
收藏
 问题点数:0 回复次数:7 
[求助]用C++怎么实现这个程序?急啊!
算法实现题1-3 等效电阻问题
«问题描述:
电阻是电子线路中的主要元件。当电阻值分别为1 R 和2 R 的2 个电阻串联时,其等效电
阻值为1 2 R + R ;并联时,其等效电阻值为
1 2
1 2
R R
R R
+

由电阻的串联或并联方式连接成的电路称为混联电路。给定一个混联电路,求该电路中
指定端点间的等效电阻值。
«编程任务:
对于给定的由n 个电阻构成的混联电路,编程计算指定端点间的等效电阻值。
«数据输入:
由文件input.txt提供输入数据。文件的第1 行中有3个正整数n,a 和b。正整数a 和b
表示要计算端点a 和b 间的等效电阻值。正整数n表示混联电路中有n个电阻。接下来的n
行表示n 个电阻在电路中的连接方式。每行用3 个整数i,j 和r 描述1 个电阻,表示端点i
和j之间有1个电阻值为r 的电阻。
«结果输出:
程序运行结束时,将计算出的等效电阻值输出到文件output.txt 中。电阻值保留2 位小
数。
输入文件示例 输出文件示例
input.txt output.txt
6 1 6 75.00
1 2 500
1 3 15
3 4 40
3 5 100
4 6 60
5 6 50
搜索更多相关主题的帖子: 电阻 阻值 电路 
2007-03-07 13:30
steamwaterss
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-1-19
收藏
得分:0 
这个不太清楚呀,去米鼠网的qq群问问那的高手吧

我很懒,没有留下签名
2007-03-07 14:35
半支烟
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-16
收藏
得分:0 

这种程序写起来总是那么费劲,

[CODE]#include< stdio.h >
#include< iostream>
#include< fstream >
#include< iomanip >
#include< vector >
using namespace std;
typedef struct Link //为读入数据
{
int StartPos; //一个连接的起点
int EndPos; //一个连接的终点
float R; //阻值大小
}TheLink;
void ChangeRoadMap(vector< TheLink > &array); //修改电路图
void DelOpenRoad(vector< TheLink > &array); //删除断路的电阻
void Series(vector< TheLink > &array); //计算两个电阻串联阻值
void Parallel(vector< TheLink > &array); //计算两个电阻并联阻值
int N,A,B;
int main()
{
ifstream fin("input.txt");
fin>>N>>A>>B;
vector< TheLink > LinkArray(N);
for ( int i = 0; i < N; i++)
fin>>LinkArray[i].StartPos
>>LinkArray[i].EndPos
>>LinkArray[i].R;
ChangeRoadMap(LinkArray);
while ( LinkArray.size() != 1 )
{
DelOpenRoad(LinkArray);
Series(LinkArray);
Parallel(LinkArray);
}
FILE *f = fopen("output.txt","w");
fprintf(f,"%.2f",LinkArray[0].R);
return 0;
}
//该函数的目的是要将电路图修改为以A为起点,B为终点的规则的电路图
void ChangeRoadMap(vector< TheLink > &array)
{
vector < int > ReversePosArray(1) ;
ReversePosArray[0] = A;
for ( int j = 0; j < ReversePosArray.size(); j++ )
for ( int i = 0; i < array.size(); i++ )
{
if ( array[i].EndPos == ReversePosArray[j] )
{
bool repeat = false;
for ( int y = 0; y < j; y++ )
if ( ReversePosArray[y] == array[i].StartPos )
{
repeat = true;
break;
}

if ( !repeat )
{
int temp = array[i].StartPos;
array[i].StartPos = array[i].EndPos;
array[i].EndPos = temp;
ReversePosArray.push_back(temp);
}
}
}
}
void DelOpenRoad(vector< TheLink > &array)
{
bool open;
for ( int i = 1; i <=N ; i++ )
{
open = true;
for ( int j = 0; j < array.size(); j++ )
if ( array[j].StartPos == i || i == B)
{
open = false;
break;
}

if ( open ) //如果断开,则删除所有以该结点位尾结点的连接
{
for ( int j = 0; j < array.size(); j++ )
if ( array[j].EndPos == i ) array.erase(&array[j]);
}
}
}
void Series(vector< TheLink > &array)
{
for ( int i = 1; i <= N; i++ )
{
int LastLink = 0, //记录以i为尾结点的连接数
NextLink = 0; //记录以i为首结点的连接数
for ( int j = 0; j < array.size(); j++ )
{
if ( i == array[j].EndPos ) LastLink++;
if ( i == array[j].StartPos ) NextLink++;
}

if ( 1 == LastLink && 1 == NextLink ) //满足该条件即i处于局部的串联中
{
float TotalR = 0.0f;
int start, end;
for ( int j = 0; j < array.size(); j++ )
{
if ( i == array[j].EndPos ) //删除以i为尾结点的连接
{
start = array[j].StartPos;
TotalR += array[j].R;
array.erase(&array[j]);
j--;
}
if ( i == array[j].StartPos ) //删除以i为首结点的连接
{
end = array[j].EndPos;
TotalR += array[j].R;
array.erase(&array[j]);
j--;
}
}
TheLink *link = new TheLink; //添加新的连接
link->StartPos = start;
link->EndPos = end;
link->R = TotalR;
array.push_back(*link);
}
}
}
void Parallel(vector< TheLink > &array)
{
for ( int i = 0; i < array.size(); i++ )
{
for ( int j = i+1; j < array.size(); j++ )
{
if ( array[i].StartPos == array[j].StartPos &&
array[i].EndPos == array[j].EndPos )
{
float TotalR = ( array[i].R * array[j].R /
(array[i].R + array[j].R) );
int start = array[i].StartPos;
int end = array[i].EndPos;
TheLink *link = new TheLink; //添加新的连接
link->StartPos = start;
link->EndPos = end;
link->R = TotalR;
array.push_back(*link);
array.erase(&array[i]);
i--;
array.erase(&array[j-1]);
j--;
}
}
}
}[/CODE]


2007-03-09 11:06
i7366
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-14
收藏
得分:0 
我觉得可以不这么些复杂,不过我用的是MFC.过两天我发一个过来,还用得着吗?请留言.
2007-03-09 12:28
半支烟
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-16
收藏
得分:0 
发嘛 。。我也想看看。。。

2007-03-09 12:32
tongtingting
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-3-7
收藏
得分:0 

要,当然要,谢谢了。

2007-03-09 14:50
tongtingting
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-3-7
收藏
得分:0 
#include< stdio.h >
#include< iostream>应为#include< iostream.h>吧
#include< fstream >
#include< iomanip >应为#include< iomanip.h >
#include< vector > 应为#include< vector.h >
你这程序运行不出.晕~~~~~~~~~~~~~
2007-03-12 13:28
倒着走路
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-3-9
收藏
得分:0 
那个程序可以运行的,我运行过了。。。。
2007-03-12 17:15
快速回复:[求助]用C++怎么实现这个程序?急啊!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018622 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved