Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- double calculaResistenciaSerie(double a,double b){
- double resistencia = a + b;
- return resistencia;
- }
- double calculaResistenciaParalelo(double a, double b){
- double resistencia = 1 / ( (1/a) + (1/b) );
- return resistencia;
- }
- int main()
- {
- stack<char>pilha;
- vector<double>numeros;
- vector<int>posicoesRetorno;
- string s,aux;
- double resistencia=0.0;
- int pos;
- while(cin>>s!=NULL){
- s+=')'; // se não tiver o fechando coloca pra sinalizar a limpeza da pilha
- for(int i=0;i<s.size();i++){
- if(isdigit(s[i])){ // monta o numero
- aux += s[i];
- }else{ // aloca no vetor
- int x = atoi(aux.c_str());
- if(x!=0)
- numeros.push_back(double (x));
- aux.clear();
- }
- if(s[i]=='-' || s[i]=='|'){
- pilha.push(s[i]);
- }
- if(s[i]==')'){ // achei o fechar preciso calcular a resistencia até o momento
- pos = numeros.size()-1;
- while(!pilha.empty() && pos > 0){
- if(pilha.top()=='-'){
- //printf("resistencia em serie\n");
- resistencia = calculaResistenciaSerie(numeros[pos],numeros[pos-1]);
- /*printf("valor utilizado encontrado na ultima posicao do vetor = %lf\n",numeros[pos]);
- printf("valor utilizado encontrado na penultima posicao do vetor = %lf\n",numeros[pos-1]);
- printf("resistencia em serie calculada = %lf\n",resistencia);*/
- }else if(pilha.top()=='|'){
- //printf("resistencia em paralelo\n");
- resistencia = calculaResistenciaParalelo(numeros[pos],numeros[pos-1]);
- /*printf("valor utilizado encontrado na ultima posicao do vetor = %lf\n",numeros[pos]);
- printf("valor utilizado encontrado na penultima posicao do vetor = %lf\n",numeros[pos-1]);
- printf("resistencia em paralelo calculada = %lf\n",resistencia);*/
- }
- pilha.pop();
- numeros[pos-1] = resistencia;
- pos--;
- }
- // aqui limpo o vetor e pilha pra não ter problemas com o que está na frente da expressão
- numeros.clear();
- numeros.push_back(resistencia);
- }
- } // fim for
- printf("%.3lf\n",resistencia);
- resistencia = 0.0;
- numeros.clear();
- s.clear();
- aux.clear();
- while(!pilha.empty()){
- pilha.pop();
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement