elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:43  


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Calculador del voltaje, intensidad y resistencia en un circuito eléctrico en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Calculador del voltaje, intensidad y resistencia en un circuito eléctrico en C++  (Leído 1,284 veces)
JuaN-ThE-HaCKeR

Desconectado Desconectado

Mensajes: 252


http://www.JBJ.esp.st


Ver Perfil WWW
Calculador del voltaje, intensidad y resistencia en un circuito eléctrico en C++
« en: 6 Noviembre 2008, 18:14 »

Hola!

Acabo de realizar un proyecto que calcula los voltajes, intensidades, y resistencias eléctricas que hay en un circuito eléctrico de corriente continua.
Citar
V1 = Voltaje 1
V2 = Voltaje 2
Vt = Voltaje total
I1 = Intensidad 1
I2 = Intensidad 2
It = Intensidad total
R1 = Resistencia 1
R2 = Resistencia 2
Rt = Resistencia total


Código
#include<iostream>
using namespace std;
main(){
      char circ;
      double x, V1, V2, Vt, I1, I2, It, R1, R2, Rt;
      x=0;
      cout << "Introduzca si el tipo de circuito es en (S)erie o (P)aralelo: ";
      cin >> circ;
      if ((circ!='S')&&(circ!='s')&&(circ!='P')&&(circ!='p')){
         cout << "\n\nERROR: Inserte 'S' si el circuito es en serie o 'P' si es en paralelo";
         getchar();
         getchar();
         return 0;}
                   cout << "\nHa elegido circuito en ";
                   if ((circ=='S')||(circ=='s'))cout << "serie.";
                   if ((circ=='P')||(circ=='p'))cout << "paralelo.";
                   cout << "\nEn caso de desconocerse un dato, inserte '0'.\n";
                   cout << "\nIndique el voltaje de V1: ";
                   cin >> V1;
                   cout << "Indique el voltaje de V2: ";
                   cin >> V2;                    
                   cout << "Indique el voltaje de Vt: ";
                   cin >> Vt;
                   cout << "Indique la intensidad de I1: ";
                   cin >> I1;
                   cout << "Indique la intensidad de I2: ";
                   cin >> I2;
                   cout << "Indique la intensidad de It: ";
                   cin >> It;
                   cout << "Indique la resistencia de R1: ";
                   cin >> R1;
                   cout << "Indique la resistencia de R2: ";
                   cin >> R2;
                   cout << "Indique la resistencia de Rt: ";
                   cin >> Rt;
 
 
 
                          switch(circ){
                                       case 'S': case 's':
                                            while (x<=10){
                                       if((V1!=0) && (V2!=0))Vt=(V1+V2);
                                       if((V1!=0) && (Vt!=0))V2=(Vt-V1);
                                       if((V2!=0) && (Vt!=0))V1=(Vt-V2);        
                                       if((I1!=0) && (R1!=0))V1=(I1*R1);
                                       if((I2!=0) && (R2!=0))V2=(I2*R2);
                                       if((It!=0) && (Rt!=0))Vt=(It*Rt);
                                       if(I1!=0){I2=I1; It=I1;}
                                       if(I2!=0){I1=I2; It=I2;}
                                       if(It!=0){I1=It; I2=It;}
                                       if((V1!=0) && (R1!=0))I1=(V1/R1);
                                       if((V2!=0) && (R2!=0))I2=(V2/R2);
                                       if((Vt!=0) && (Rt!=0))It=(Vt/Rt);
                                       if((R1!=0) && (R2!=0))Rt=(R1+R2);
                                       if((R1!=0) && (Rt!=0))R2=(Rt-R1);
                                       if((R2!=0) && (Rt!=0))R1=(Rt-R2);
                                       if((V1!=0) && (I1!=0))R1=(V1/I1);
                                       if((V2!=0) && (I2!=0))R2=(V2/I2);
                                       if((Vt!=0) && (It!=0))Rt=(Vt/It);
                                       x++;}
                                       break;
 
                                       case 'P': case 'p':
                                            while (x<=10){
                                       if(V1!=0){V2=V1; Vt=V1;}
                                       if(V2!=0){V1=V2; Vt=V2;}
                                       if(Vt!=0){V1=Vt; V2=Vt;}                    
                                       if((I1!=0) && (R1!=0))V1=(I1*R1);
                                       if((I2!=0) && (R2!=0))V2=(I2*R2);
                                       if((It!=0) && (Rt!=0))Vt=(It*Rt);                    
                                       if((I1!=0) && (I2!=0))It=(I1+I2);
                                       if((I1!=0) && (It!=0))I2=(It-I1);
                                       if((I2!=0) && (It!=0))I1=(It-I2);                    
                                       if((V1!=0) && (R1!=0))I1=(V1/R1);
                                       if((V2!=0) && (R2!=0))I2=(V2/R2);
                                       if((Vt!=0) && (Rt!=0))It=(Vt/Rt);                    
                                       if((R1!=0) && (R2!=0))Rt=((R1*R2)/(R1+R2));                    
                                       if((V1!=0) && (I1!=0))R1=(V1/I1);
                                       if((V2!=0) && (I2!=0))R2=(V2/I2);
                                       if((Vt!=0) && (It!=0))Rt=(Vt/It);
                                       x++;}
                                       break;
 
 
                        }
 
                   cout << "\nV1 = " << V1 << " Voltios";                    
                   cout << "\nV2 = " << V2 << " Voltios";                    
                   cout << "\nVt = " << Vt << " Voltios";                    
                   cout << "\nI1 = " << I1 << " Amperios";                    
                   cout << "\nI2 = " << I2 << " Amperios";                    
                   cout << "\nIt = " << It << " Amperios";                    
                   cout << "\nR1 = " << R1 << " Ohmnios";                    
                   cout << "\nR2 = " << R2 << " Ohmnios";                    
                   cout << "\nRt = " << Rt << " Ohmnios";
                   cout << "\n                                                Aplication created By: JuaN";
                   getchar();
                   getchar();  
 
                   }
 

He encontrado 2 cosas que se podrían mejorar:

1- Que el proyecto de opción a especificar que en el circuito hay por ejemplo 3 voltajes, 3 intensidades y 3 resistencias, y no solo 2.

2- Que el proyecto de opción a especificar que un circuito sea mixto.

¿A alguien se le ocurre algo más para mejorar? :rolleyes:

Saludos! ;)


« Última modificación: 20 Diciembre 2008, 23:57 por *JυαИ-TнE-HαÇKεR* » En línea





Flakito81


Desconectado Desconectado

Mensajes: 508



Ver Perfil
Re: Calculador del voltaje, intensidad y resistencia en un circuito eléctrico en C++
« Respuesta #1 en: 6 Noviembre 2008, 19:42 »

Como sugerencia te diré que podrías hacer una aplicación para calcular las intensidades en cada rama del circuito, por tanto las caidas de tension en cada resistencia. Simplemente sería aplicar el método de mallas. Que como supongo sabrás es aplicar la ley de ohm (R*I=V) pero usando determinantes.
Para que sea sencillo sólo has de pedir la matriz de resistencias(prestando atencion a los signos) y matriz de voltajes en cada malla.
Luego calculas el determinante de la matriz de resistencias y para cada malla sustituyes la columna de resistencias por la de voltajes, calculas el determinante, divides por el determinante de las resistencias y tienes la corriente (intensidad) de malla. Y para calcular la intensidad de las ramas comunes a dos mallas haces la suma o resta segun el sentido de las intensidades.

Ejemplo simple:

                R1       R2
    -------| 1 ohm |----o-------| 5 ohm |-------
    |                          |                              |
    |                         __                             |
    l                                                          |
 ¨¨¨¨¨¨                R3   1 ohm                   |
   ¨¨  2 v                 __                             |
    |                          |                              | 
    |                          |                              |
    ----------------------o------------------------
Hipotesis de los sentidos de las corrientes:
  - Malla 1 (izquierda): sentido horario
  - Malla 2 (derecha):   sentido antihorario

   R   *   I =  V
  2 1     I1    2
  1 6     I2    0

2 1
1 6  = 12 - 1 = 11

I1
                         2 1
                         0 6   = 12 - 0 = 12; I1 = 12/11 = 1.09 A

I2
                         2 2
                         1 0 = 0 - 2 = -2; I1 = -2/11 = -0.18 A (lo que implica que son 0.18 A pero en sentido opuesto a nuestra hipotesis inicial en la malla 2)

Como las corrientes por la rama de la resistencia comun a ambas mallas van en sentido contrario se resta, si sale negativo sabemos que va en sentido contrario a lo suspuesto inicialmente. Si fueran en el mismo sentido ambas intensidades se sumarian
I3 = I1 - I2 = 0.91 A

Como prueba:
 segun la ley de voltajes de kirchoff la suma delos voltajes a lo largo de cualquier trayectoria cerrada (malla) es cero, luego:
 Para la malla 1:
       voltaje que cae en R1= V1 = i1 * R1 -> 1.09 * 1 = 1.09
       voltaje que cae en R3= V3 = i3 * R3 -> 0.91* 1 = 0.91

  V= 2v - 1.09 - 0.91; V = 0
 Para malla 2:
     voltaje que cae en R2 = V2 = i2 * R2-> 0.18 * 5 = 0.9
     V3 ya se calculó
  V = V3 - V2; V = 0.01 v (si usamos mas decimales veriamos que el voltaje se hace cero)

Bueno ... si tienes dudas consulta la documentacion, aunque lo mas complicado sería saber hacer el determinante de una matriz y como veras tmp es que sea demasiado complicado.

Saludos!

PD: De forma muy similar puedes implementar la resolucion por nodos, auque para eso ya busca informacion :)


« Última modificación: 6 Noviembre 2008, 19:48 por Flakito81 » En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
resistencia de entrada
Electrónica
antonio lopez 3 2,687 Último mensaje 5 Diciembre 2010, 22:04
por Ivanchuk
Calculo de resistencia equiv. en un circuito paralelo
Electrónica
Balthazar 3 2,578 Último mensaje 21 Mayo 2011, 05:46
por Mr.Blue
[AYUDA] Programar un calculador de IVA en C++ « 1 2 »
Programación C/C++
versams 23 1,598 Último mensaje 20 Diciembre 2011, 23:42
por farresito
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines