Wymyslilem sobie, że zrobię sobie programik do liczenia rezystacji zastępczej.
Miał polegać na tym, że podaję stringa, np. "30 | 40 + 10", gdzie znak "|" oznacza połaczenie równoległe a '+' szeregowe, i progam wyrzuca mi rezystancję zastępcza.
W większości wypadków wynik jest dobry. Przykładowy łancuch dla którego występuje bład to "10|10 + 50 +3". Powinno być 58, a wypisuje 85.
#include<iostream>
#include<string>
#include<conio.h>
int main () {
string wejscie;
for(;;) {
wejscie.erase();
getline (cin, wejscie);
cout<< rezystancja (wejscie)<<endl;
system("pause");
system("cls");
}
}
double rezystancja (string &lancuch) {
bool rownolegle=0;
double wynik=0, konduktancja=0;
int dlugosc = lancuch.size();
string roboczy;
roboczy.erase();
lancuch += "+";
for(int i=0,k=0; i< dlugosc ;){
for(;(isdigit(lancuch[i]) || lancuch[i]=='.') && (i<dlugosc);){
roboczy[k]= lancuch[i];
k++;
i++;
}
for(;(lancuch[i] == ' ') && (i < dlugosc) ;)
i++;
if(lancuch[i] == '+'){
if (rownolegle) {
konduktancja += (1/ atof (roboczy.c_str()));
wynik += (1/konduktancja);
rownolegle =0;
i++;
k=0;
roboczy.erase();
konduktancja =0;
}
else {
wynik += atof (roboczy.c_str());
i++;
roboczy.erase();
k=0;
}
}
if(lancuch[i] == '|'){
konduktancja += (1 / atof(roboczy.c_str()));
rownolegle =1;
i++;
k=0;
roboczy.erase();
}
}
return wynik;
}