Bueno pues al final me puse a repensar el código que tenia y después de mucho me ha quedado asi:
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, indice_mayor=0, indice_trabajo=0, indice_menor=0, comun,fase;
Combi *combinaciones;
printf ("Introduce el numero de cables: "); 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++;
}
}
indice_menor=0;
indice_mayor=0;
for (i=0;i <nCombinaciones;i++)
{
if (combinaciones [indice_menor].resistencia >combinaciones [i].resistencia){
indice_menor=i;
}
if (combinaciones [indice_mayor].resistencia<combinaciones [i].resistencia){
indice_mayor=i;
}
}
indice_trabajo=0;
for (i=0;i<nCombinaciones;i++)
{
if (indice_trabajo==indice_menor || indice_trabajo==indice_mayor)
{
indice_trabajo++;
}
}
printf ("El condensador va entre el %s y el %s\n", combinaciones
[indice_mayor
].
cable[0],combinaciones
[indice_mayor
].
cable[1]); printf ("La bobina de arranque esta entre el %s y el %s\n",combinaciones
[indice_menor
].
cable[0],combinaciones
[indice_menor
].
cable[1]); printf ("La bobina de trabajo esta entre el %s y el %s\n",combinaciones
[indice_trabajo
].
cable[0],combinaciones
[indice_trabajo
].
cable[1]);
for (i=0;i <nCables;i++){
if ( (strcmp(combinaciones
[indice_mayor
].
cable[0],cable
[i
])!=0) && (strcmp (combinaciones
[indice_mayor
].
cable[1],cable
[i
])!=0)){ comun=i;
break;
}
}
printf ("El comun es el %s. Conecta el neutro en el\n",cable
[comun
]); if (strcmp(combinaciones
[indice_trabajo
].
cable[0],cable
[comun
])!=0){ fase=0;
}else {
fase=1;
}
printf ("El fase es el %s. Conecta el fase en el\n",combinaciones
[indice_trabajo
].
cable [fase
]); for (i=0;i <nCables;i++){
}
}
Funciona aunque aún queda mucho trabajo ya que tengo que controlar que los malloc funcionen correctamente, que el número de cables sea mayor que 2, y además para los motores de más de tres cables tengo que ver bien como va el cálculo para saber cómo programarlo y no se si será mejor crear funciones separadas. Como dije, aun queda curro.