Repository navigation
Expand file tree
/
Copy pathmain.cpp
More file actions
110 lines (100 loc) · 3.59 KB
/
Copy pathmain.cpp
File metadata and controls
110 lines (100 loc) · 3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <string>
using namespace std;
bool checker();
double series();
double parallel();
string circuit_description;
string draft;
int main() {
double voltage,total_resistance;
cout << "Please enter your circuit description" << endl;
getline(cin,circuit_description);
cout << "Voltage applied?" << endl;
cin >> voltage;
if (checker()) return 0;
int count = 0;
for (size_t i = 0; i < circuit_description.size(); i++) if (circuit_description[i] == 'e') count++;
for (size_t i = 0; i <= count; i++)
{
int e = 0, S_P = 0;
for (size_t i = 0; i < circuit_description.size(); i++) if (circuit_description[i] == 'e')
{
e = i;
break;
}
S_P = e;
while (1)
{
S_P--;
if (circuit_description[S_P] == 'P' || circuit_description[S_P] == 'S' || e == 0) break;;
}
if (e == 0) draft = circuit_description;
else draft = circuit_description.substr(S_P, e-S_P+1);
if (circuit_description[S_P] == 'S')
{
total_resistance = series();
circuit_description = circuit_description.substr(0, S_P) + to_string(total_resistance) + circuit_description.substr(e+1,circuit_description.size());
}
else if (circuit_description[S_P] == 'P')
{
total_resistance = parallel();
circuit_description = circuit_description.substr(0, S_P) + to_string(total_resistance) + circuit_description.substr(e+1,circuit_description.size());
}
if (circuit_description.substr(0,1) == "S" && i == count)
{
circuit_description = draft;
total_resistance = series();
}
else if (circuit_description.substr(0,1) == "P" && i == count)
{
circuit_description = draft;
total_resistance = parallel();
}
}
cout << "Total Resistance = " << total_resistance << " Ohm" << endl;
cout << "Current = " << voltage/total_resistance << " A" << endl;
}
double series() {
int x = 0,y = 0;
double resistance, sum = 0;
while (1)
{
x = draft.find(" ",y)+1;
resistance = stof(draft.substr(x,draft.length()));
y = draft.find(" ",x)-1;
sum = resistance + sum;
if (y == draft.find("e")-2 || y == draft.find("E")-2) break;
}
return sum;
}
double parallel() {
int x = 0,y = 0;
double resistance, sum = 0;
while (1)
{
x = draft.find(" ",y)+1;
resistance = stof(draft.substr(x,draft.length()));
y = draft.find(" ",x)-1;
if (sum == 0) sum = resistance;
else sum = (resistance * sum) / (resistance + sum);
if (y == draft.find("e")-2 || y == draft.find("E")-2) break;
}
return sum;
}
bool checker() {
for (int i=0;i < circuit_description.length()-1;i++)
{
if (circuit_description[i] == 'S' || circuit_description[i] == 'P' ||
circuit_description[i] == 'E' || circuit_description[i] == 'e' ||
circuit_description[i] == '.' || circuit_description[i] == ' ' ||
circuit_description[i] == '0' || circuit_description[i] == '1' ||
circuit_description[i] == '2' || circuit_description[i] == '3' ||
circuit_description[i] == '4' || circuit_description[i] == '5' ||
circuit_description[i] == '6' || circuit_description[i] == '7' ||
circuit_description[i] == '8' || circuit_description[i] == '9') continue;
else cerr << "\aWrong Circuit Description" << endl;
return 1;
}
return 0;
}