Advertisement
Riposati

PROBLEMA URI RESISTORES EM SÉRIE E PARALELO

Nov 3rd, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.81 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. double calculaResistenciaSerie(double a,double b){
  6.  
  7.     double resistencia = a + b;
  8.     return resistencia;
  9. }
  10.  
  11. double calculaResistenciaParalelo(double a, double b){
  12.  
  13.     double resistencia = 1 / ( (1/a) + (1/b) );
  14.     return resistencia;
  15. }
  16.  
  17. int main()
  18. {
  19.     stack<char>pilha;
  20.     vector<double>numeros;
  21.     vector<int>posicoesRetorno;
  22.     string s,aux;
  23.     double resistencia=0.0;
  24.     int pos;
  25.  
  26.     while(cin>>s!=NULL){
  27.  
  28.         s+=')'; // se não tiver o fechando coloca pra sinalizar a limpeza da pilha
  29.  
  30.         for(int i=0;i<s.size();i++){
  31.  
  32.             if(isdigit(s[i])){ // monta o numero
  33.                 aux += s[i];
  34.  
  35.             }else{ // aloca no vetor
  36.  
  37.                 int x = atoi(aux.c_str());
  38.                 if(x!=0)
  39.                     numeros.push_back(double (x));
  40.                 aux.clear();
  41.             }
  42.  
  43.             if(s[i]=='-' || s[i]=='|'){
  44.                 pilha.push(s[i]);
  45.             }
  46.  
  47.             if(s[i]==')'){ // achei o fechar preciso calcular a resistencia até o momento
  48.  
  49.                 pos = numeros.size()-1;
  50.  
  51.                 while(!pilha.empty() && pos > 0){
  52.  
  53.                     if(pilha.top()=='-'){
  54.  
  55.                         //printf("resistencia em serie\n");
  56.                         resistencia = calculaResistenciaSerie(numeros[pos],numeros[pos-1]);
  57.                         /*printf("valor utilizado encontrado na ultima posicao do vetor = %lf\n",numeros[pos]);
  58.                         printf("valor utilizado encontrado na penultima posicao do vetor = %lf\n",numeros[pos-1]);
  59.                         printf("resistencia em serie calculada = %lf\n",resistencia);*/
  60.  
  61.                     }else if(pilha.top()=='|'){
  62.  
  63.                         //printf("resistencia em paralelo\n");
  64.                         resistencia = calculaResistenciaParalelo(numeros[pos],numeros[pos-1]);
  65.                         /*printf("valor utilizado encontrado na ultima posicao do vetor = %lf\n",numeros[pos]);
  66.                         printf("valor utilizado encontrado na penultima posicao do vetor = %lf\n",numeros[pos-1]);
  67.                         printf("resistencia em paralelo calculada = %lf\n",resistencia);*/
  68.                     }
  69.  
  70.                     pilha.pop();
  71.                     numeros[pos-1] = resistencia;
  72.                     pos--;
  73.                 }
  74.  
  75.                 // aqui limpo o vetor e pilha pra não ter problemas com o que está na frente da expressão
  76.                 numeros.clear();
  77.                 numeros.push_back(resistencia);
  78.             }
  79.  
  80.         } // fim for
  81.  
  82.         printf("%.3lf\n",resistencia);
  83.         resistencia = 0.0;
  84.         numeros.clear();
  85.         s.clear();
  86.         aux.clear();
  87.  
  88.         while(!pilha.empty()){
  89.             pilha.pop();
  90.         }
  91.     }
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement