Muy interesante los cambios. Tengo que verlo más tranquilo en el pc.
Ahora estaba liado con el tema de poder hacerlo con más cables pero no se porque con 3 cables va correcto pero si le pongo por ejemplo 5 da resultados erróneos. No termino de dar con el modo. Actualmente lo tenia asi: (queda pendiente los cambios sugeridos):
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char cable[2] [25];
float resistencia;
}Combi;
long factorial(int n)
{
int c;
long result = 1;
for (c = 1; c <= n; c++){
result *= c;
}
return result;
}
int main ()
{
int nCombinaciones,nCables;
char **cable;
int n=0, j, i=0, comun,fase;
Combi *combinaciones,combinacion_aux;
do {
printf ("Introduce el numero de cables: "); if (nCables <3){
printf ("Tiene que tener al menos 3 cables\n"); }
}while (nCables <3);
cable
= malloc(sizeof(char*) * nCables
);
for (i=0;i <nCables;i++){
cable
[i
]=malloc (sizeof (char)*25); }
nCombinaciones=factorial (nCables)/(2*factorial(nCables-2));
combinaciones
=malloc (nCombinaciones
*sizeof (Combi
));
for (i=0;i <nCables;i++)
{
printf ("Introduce el color %d: ",i
+1); }
for (i=0;i<nCables-1;i++)
{
for (j=i+1;j <nCables;j++)
{
strcpy (combinaciones
[n
].
cable[0],cable
[i
]); strcpy (combinaciones
[n
].
cable[1],cable
[j
]); printf ("Introduce la resistencia entre el %s y el %s: ",combinaciones
[n
].
cable[0],combinaciones
[n
].
cable[1]); scanf ("%f",&combinaciones
[n
].
resistencia); n++;
}
}
for (i=0;i<nCombinaciones-1;i++)
{
for (j=i+1;j <nCombinaciones;j++)
{
if (combinaciones [i].resistencia > combinaciones [j].resistencia)
{
combinacion_aux = combinaciones [i];
combinaciones [i] = combinaciones [j];
combinaciones [j] = combinacion_aux;
}
}
}
printf ("El condensador va entre el %s y el %s\n", combinaciones
[nCombinaciones
-1].
cable[0],combinaciones
[nCombinaciones
-1].
cable[1]); printf ("La bobina de arranque esta entre el %s y el %s\n",combinaciones
[0].
cable[0],combinaciones
[0].
cable[1]);
for (i=0;i <nCables;i++){
if ( (strcmp(combinaciones
[nCombinaciones
-1].
cable[0],cable
[i
])!=0) && (strcmp (combinaciones
[nCombinaciones
-1].
cable[1],cable
[i
])!=0)){ comun=i;
break;
}
}
printf ("El comun es el %s. Conecta el neutro en el\n",cable
[comun
]);
for (i=1,j=0;i<nCombinaciones-1;i++)
{
if (strcmp (cable
[comun
],combinaciones
[i
].
cable [0])==0){ j++;
printf ("La bobina de trabajo %d esta entre el %s y el %s\n",j
, combinaciones
[i
].
cable[0],combinaciones
[i
].
cable[1]); printf ("El fase es el %s. Conecta el fase en el\n",combinaciones
[i
].
cable [1]); }else if (strcmp (cable
[comun
],combinaciones
[i
].
cable [1])==0){ j++;
printf ("La bobina de trabajo %d esta entre el %s y el %s\n",j
, combinaciones
[i
].
cable[0],combinaciones
[i
].
cable[1]); printf ("El fase es el %s. Conecta el fase en el\n",combinaciones
[i
].
cable [0]); }
}
for (i=0;i <nCables;i++){
}
}
Os pongo un enlace a un video donde lo hace a mano para un motor de 5 cables con 3 velocidades:
https://youtu.be/8g0vUVi3uvU
A ver si podéis echarme otro cable para saber como hacerlo.