Ver Mensaje Individual
  #13 (permalink)  
Antiguo 26/07/2016, 16:51
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Necesito orientacion con planteamiento de codigo en C

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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  typedef struct {
  6.             char cable[2] [25];
  7.             float resistencia;
  8. }Combi;
  9.  
  10. long factorial(int n)
  11. {
  12.     int c;
  13.     long result = 1;
  14.    
  15.     for (c = 1; c <= n; c++){
  16.         result *= c;
  17.     }
  18.     return result;
  19. }
  20.  
  21. int main ()
  22. {
  23.     int nCombinaciones,nCables;
  24.     char **cable;
  25.     int n=0, j, i=0, comun,fase;
  26.     Combi *combinaciones,combinacion_aux;
  27.     do {
  28.         printf ("Introduce el numero de cables: ");
  29.         scanf ("%d",&nCables);
  30.         if (nCables <3){
  31.             printf ("Tiene que tener al menos 3 cables\n");
  32.         }
  33.     }while (nCables  <3);
  34.    
  35.     cable = malloc(sizeof(char*) * nCables);
  36.  
  37.     for (i=0;i <nCables;i++){
  38.         cable [i]=malloc (sizeof (char)*25);
  39.     }
  40.     nCombinaciones=factorial (nCables)/(2*factorial(nCables-2));
  41.    
  42.     combinaciones=malloc (nCombinaciones*sizeof (Combi));
  43.    
  44.     for (i=0;i <nCables;i++)
  45.     {
  46.         printf ("Introduce el color %d: ",i+1);
  47.         scanf ("%s",cable[i]);
  48.     }
  49.     for (i=0;i<nCables-1;i++)
  50.     {
  51.         for (j=i+1;j <nCables;j++)
  52.         {
  53.             strcpy (combinaciones[n].cable[0],cable [i]);
  54.             strcpy (combinaciones[n].cable[1],cable [j]);
  55.             printf ("Introduce la resistencia entre el %s y el %s: ",combinaciones [n].cable[0],combinaciones [n].cable[1]);
  56.             scanf ("%f",&combinaciones[n].resistencia);
  57.             n++;
  58.         }
  59.     }
  60.     for (i=0;i<nCombinaciones-1;i++)
  61.     {
  62.         for (j=i+1;j <nCombinaciones;j++)
  63.         {
  64.             if (combinaciones [i].resistencia > combinaciones [j].resistencia)
  65.             {
  66.                 combinacion_aux = combinaciones [i];
  67.                 combinaciones [i] = combinaciones [j];
  68.                 combinaciones [j] = combinacion_aux;
  69.             }
  70.         }
  71.     }
  72.  
  73.     printf ("El condensador va entre el %s y el %s\n", combinaciones[nCombinaciones-1].cable[0],combinaciones [nCombinaciones-1].cable[1]);
  74.     printf ("La bobina de arranque esta entre el %s y el %s\n",combinaciones[0].cable[0],combinaciones [0].cable[1]);
  75.    
  76.     for (i=0;i <nCables;i++){
  77.         if ( (strcmp(combinaciones[nCombinaciones-1].cable[0],cable [i])!=0) && (strcmp (combinaciones [nCombinaciones-1].cable[1],cable [i])!=0)){
  78.             comun=i;
  79.             break;
  80.         }
  81.     }
  82.     printf ("El comun es el %s. Conecta el neutro en el\n",cable[comun]);
  83.    
  84.     for (i=1,j=0;i<nCombinaciones-1;i++)
  85.     {
  86.         if (strcmp (cable [comun],combinaciones [i].cable [0])==0){
  87.             j++;
  88.             printf ("La bobina de trabajo %d esta entre el %s y el %s\n",j, combinaciones[i].cable[0],combinaciones [i].cable[1]);
  89.             printf ("El fase es el %s. Conecta el fase en el\n",combinaciones[i].cable [1]);
  90.         }else if (strcmp (cable [comun],combinaciones [i].cable [1])==0){
  91.             j++;
  92.             printf ("La bobina de trabajo %d esta entre el %s y el %s\n",j, combinaciones[i].cable[0],combinaciones [i].cable[1]);
  93.             printf ("El fase es el %s. Conecta el fase en el\n",combinaciones[i].cable [0]);
  94.         }
  95.     }
  96.    
  97.     for (i=0;i <nCables;i++){
  98.         free (cable [i]);
  99.     }
  100.     free (cable);
  101.     free (combinaciones);
  102. }
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.