/***********************************************************
*                                                          *
*   ohmwatt.c                                              *
*   Programa para diferentes c lculos el‚ctricos           *
*   ©1999, Virgilio G˘mez Negrete                          *
*   Modificado por Mi 23-06-2004			   *
*                                                          *
***********************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>


/***********************************************************
*   Prototipo de funciones                                 *
***********************************************************/
#define MAXRES 10
//#define ma 10
//#define ra 24
//#define mb 10
//#define rb 24

int menu(void);
void resserie(void);
void obteserie(void);
void copy(void);


/***********************************************************
*   Variables globales                                     *
***********************************************************/
int opcion;
float serie, paralelo;


int main()
{
	float resistencia, potencia, voltaje, corriente;
	clrscr();

	menu();
	do
	{
		switch(opcion)
		{
			case 0:
			break;

			case 1:
			{
				printf("\nLey de Ohm: Calcular voltaje (E)\n\n");
				printf("Introduzca el valor de la corriente (I)"
				  "en Amperes:\n");
				scanf("%f", &corriente);
				printf("Introduzca el valor de la resistencia (R)"
				  "en Ohms:\n");
				scanf("%f", &resistencia);
				clrscr();
				printf("\n\n\nEl voltaje (E) es de %f Voltios\n\n\n\n",
				  voltaje=(corriente*resistencia));
				menu();
			};
			break;

			case 2:
			{
				printf("\nLey de Ohm: Calcular corriente (I)\n\n");
				printf("Introduzca el valor del voltaje (E)"
				  "en Voltios:\n");
				scanf("%f", &voltaje);
				printf("Introduzca el valor de la resistencia (R)"
				  "en Ohms:\n");
				scanf("%f", &resistencia);
				clrscr();
				printf("\n\n\nLa corriente (I) es de %f Amperes\n\n\n\n",
				  corriente=(voltaje/resistencia));
				menu();
			};
			break;

			case 3:
			{
				printf("\nLey de Ohm: Calcular resistencia (R)\n\n");
				printf("Introduzca el valor del voltaje (E)"
				  "en Voltios:\n");
				scanf("%f", &voltaje);
				printf("Introduzca el valor de la corriente (I)"
				  "en Amperes:\n");
				scanf("%f", &corriente);
				clrscr();
				printf("\n\n\nLa resistencia (R) es de %f Ohms\n\n\n\n",
				  resistencia=(voltaje/corriente));
				menu();
			};
			break;

			case 4:
			{
				printf("\nPotencia (P) en terminos de voltaje y coriente\n\n");
				printf("Introduzca el valor del voltaje (E) en Voltios:\n");
				scanf("%f", &voltaje);
				printf("Introduzca el valor de la corriente (I) en Amperes:\n");
				scanf("%f", &corriente);
				clrscr();
				printf("\n\n\nLa potencia (P) es de %f Watts\n\n\n\n",
				  potencia=(voltaje*corriente));
				menu();
			};
			break;

			case 5:
			{
				printf("\nPotencia (P) en terminos de corriente (I)"
				  " y resistencia (R)\n\n");
				printf("Introduzca el valor de la resistencia (R) en Ohms:\n");
				scanf("%f", &resistencia);
				printf("Introduzca el valor de la corriente (I) en Amperes:\n");
				scanf("%f", &corriente);
				clrscr();
				printf("\n\n\nLa potencia (P) es de %f Watts\n\n\n\n",
				  potencia=((corriente*corriente)*resistencia));
				menu();
			};
			break;

			case 6:
			{
				printf("\nPotencia (P) en terminos de voltaje (E)"
				  " y resistencia (R)\n\n");
				printf("Introduzca el valor del voltaje (E) en Voltios:\n");
				scanf("%f", &voltaje);
				printf("Introduzca el valor de la resistencia (R) en Ohms:\n");
				scanf("%f", &resistencia);
				clrscr();
				printf("\n\n\nLa potencia (P) es de %f Watts\n\n\n\n",
				  potencia=((voltaje*voltaje)/resistencia));
				menu();
			};
			break;

			case 7:
			{
				printf("\nVoltaje (E) en terminos de potencia (P)"
				  " y corriente (I)\n\n");
				printf("Introduzca el valor de la potencia (P) en Watts:\n");
				scanf("%f", &potencia);
				printf("Introduzca el valor de la corriente (I) en Amperes:\n");
				scanf("%f", &corriente);
				clrscr();
				printf("\n\n\nEl voltaje (E) es de %f Voltios\n\n\n\n",
				voltaje=(potencia/corriente));
				menu();
			};
			break;

			case 8:
			{
				printf("\nVoltaje (E) en terminos de potencia (P)"
				" y resistencia (R)\n\n");
				printf("Introduzca el valor de la potencia (P) en Watts:\n");
				scanf("%f", &potencia);
				printf("Introduzca el valor de la resistencia (R) en Ohms:\n");
				scanf("%f", &resistencia);
				clrscr();
				printf("\n\n\nEl voltaje (E) es de %f Voltios\n\n\n\n",
				voltaje=sqrt(potencia*resistencia));
				menu();
			};
			break;

			case 9:
			{
				printf("\nCorriente (I) en terminos de potencia (P)"
				" y voltaje (E)\n\n");
				printf("Introduzca el valor de la potencia (P) en Watts:\n");
				scanf("%f", &potencia);
				printf("Introduzca el valor del voltaje (E) en Voltios:\n");
				scanf("%f", &voltaje);
				clrscr();
				printf("\n\n\nLa corriente (I) es de %f Amperes\n\n\n\n",
				corriente=(potencia/voltaje));
				menu();
			};
			break;

			case 10:
			{
				printf("\nCorriente (I) en terminos de potencia (P)"
				" y resistencia (R)\n\n");
				printf("Introduzca el valor de la potencia (P) en Watts:\n");
				scanf("%f", &potencia);
				printf("Introduzca el valor de la resistencia (R) en Ohms:\n");
				scanf("%f", &resistencia);
				clrscr();
				printf("\n\n\nLa corriente (I) es de %f Amperes\n\n\n\n",
				voltaje=sqrt(potencia/resistencia));
				//corriente=sqrtf((potencia/resistencia)));
				menu();
			};
			break;

			case 11:
			{
				printf("\nResistencia (R) en terminos de potencia (P)"
				" y corriente (I)\n\n");
				printf("Introduzca el valor de la potencia (P) en Watts:\n");
				scanf("%f", &potencia);
				printf("Introduzca el valor de la corriente (I) en Amperes:\n");
				scanf("%f", &corriente);
				clrscr();
				printf("\n\n\nLa resistencia (R) es de %f Ohms\n\n\n\n",
				resistencia=(potencia/(corriente*corriente)));
				menu();
			};
			break;

			case 12:
			{
				printf("\nResistencia (R) en terminos de voltaje (E)"
				" y potencia (P)\n\n");
				printf("Introduzca el valor del voltaje (E) en Voltios:\n");
				scanf("%f", &voltaje);
				printf("Introduzca el valor de la potencia (P) en Watts:\n");
				scanf("%f", &potencia);
				clrscr();
				printf("\n\n\nLa resistencia (R) es de %f Ohms\n\n\n\n",
				resistencia=((voltaje*voltaje)/potencia));
				menu();
			};
			break;

		//hasta aqui ejecuto bien, del case 13 al 14 da problema.

			case 13:
			{		
				resserie();
				menu();
			};
			break;

			case 14:
			{
				obteserie();
				menu();
			};
			break;

//Parte final del programa original al final de case 3

			default:
			printf("\n\nERROR 0001: Opcion incorrecta!\n\n");
			menu();
			break;
		}
	}
	while(opcion!=0);
	copy();
	return 0;
}


int menu()
{
	printf("- - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n");
	printf("Seleccione una opcion:\n");
	printf("Salir del programa.......................................0\n");
	printf("Ley de Ohm: Calcular voltaje (E).........................1\n");
	printf("Ley de Ohm: Calcular corriente (I).......................2\n");
	printf("Ley de Ohm: Calcular resistencia (R).....................3\n");
	printf("Potencia (P) en terminos de voltaje y corriente..........4\n");
	printf("Potencia (P) en terminos de corriente y resistencia......5\n");
	printf("Potencia (P) en terminos de voltaje y resistencia........6\n");
	printf("Voltaje (E) en terminos de potencia y corriente..........7\n");
	printf("Voltaje (E) en terminos de potencia y resistencia........8\n");
	printf("Corriente (I) en terminos de potencia y voltaje..........9\n");
	printf("Corriente (I) en terminos de potencia y resistencia.....10\n");
	printf("Resistencia (R) en terminos de potencia y corriente.....11\n");
	printf("Resistencia (R) en terminos de voltaje y potencia.......12\n");
	printf("Calcula la resistencia Total en Serie...................13\n");
	printf("Obtener resist EIA E24 utilizando dos Resistencias......14\n");

	printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
	scanf("%d", &opcion);
	clrscr();
	return 0;
};  //; se lo quite


void copy(void)
{
	printf("- - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
	printf("O H M W A T T (Version 1.0.0) Calculos electricos basicos\n\n");
	printf("Publicado en:\n");
	printf("www.GeoCities.com/SiliconValley/Garage/8211\n");
	printf("Para comentarios respecto a este programa, escriba:\n");
	printf("virgiliotech@yahoo.es\n");
	printf("(C)1999, Virgilio Gomez Negrete\n");
	printf("- - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n");
};


void resserie(void)
{
	int i, cantidad;
	float resistencias[MAXRES];

	printf("Calcula la resistencia Total en Serie...................");
	Aqui:
	printf("\nCantidad de resistencias:\n\n");
	scanf("%d", &cantidad);
	clrscr();

	if(cantidad >= MAXRES+1) //le agregue el * porque daba un warning.
	{
		printf("\n\nERROR 0002: La cantidad maxima es de %d\n\n", MAXRES);
		goto Aqui;
	}

	for(i=0; i<cantidad; i++)
	{
		printf("Valor del resistor %d en Ohms\n", i+1); //Este i+1 es que repite este mensaje
		scanf("%f", &resistencias[i]);                  //su valor en cantidad de veces.
		serie=resistencias[i]+serie;
		paralelo=(1/resistencias[i])+paralelo;
	}
	clrscr();
	printf("\n\nLa resistencia total en serie es de %.4f Ohms\n", serie);
	printf("La resistencia total en paralelo es de %.4f Ohms\n\n\n", 1/paralelo);

	getche();
	paralelo=0, serie=0;
	clrscr();
};



//Recordatorio:
//rc resistencia calcular, ctr counter, r1 resistencia uno,
//valor, multiplo, r2 resistencia dos, rs resistencia serie,
//porcentaje, e, rt resistencia paralelo.
void obteserie(void)
{
int ma, ra, mb, rb;
float valor, multiplo;
int rc, ctr, r1, r2, rs, porcentaje, e, rt;

printf("\nIntroduzca el valor deseado en Ohms\n");
scanf("%f", &rc);
clrscr();
ctr=0;
for(ma=0; ma<10; ma++)
{
	for(ra=0; ra<24; ra++)
	{
		for(mb=0; mb<10; mb++)
		{
			for(rb=0; rb<24; rb++)
			{
				r1=(valor[ra]*multiplo[ma]);
				r2=(valor[rb]*multiplo[mb]);
				rs=r1+r2; // Resistencia en serie
				if(r1<=r2&&rc<=rs+(rs*porcentaje/100)&&rc>=
				  rs-(rs*porcentaje/100))
				{
					if((rc!=r1) && (rc!=r2))
					{
						e=((rs-rc)/rc)*100;
						if(e<=porcentaje)
						{
							printf("%.3f + %.3f = %.4f %.4f %% error.\n",
							  r1, r2, rs, e);
							ctr++;
						}
					}
				}
				rt=((r1 * r2)/(r1 + r2)); // Resistencia en paralelo
				if(r1<=r2&&rc<=rt+(rt*porcentaje/100)&&rc>=
				  rt-(rt*porcentaje/100))
				{
					if((rc != r1) && (rc != r2))
					{
						e=((rt - rc)/rc)*100;
						if(e<=porcentaje)
						{
							printf("%.3f || %.3f = %.4f %.4f %% error\n",
							  r1, r2, rt, e);
							ctr++;
						}
					}
				}
				if(ctr >= 24)
				{
					printf("\nMAS VALORES -");
					ctr=0;
					getch();
				}
			}
		}
	}
}

//printf("\nPresione cualquier tecla para regresar al menu\n");
getch();
clrscr();
//menu();
//break;
};



