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

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
  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, indice_mayor=0, indice_trabajo=0, indice_menor=0, comun,fase;
  26.     Combi *combinaciones;
  27.    
  28.     printf ("Introduce el numero de cables: ");
  29.     scanf ("%d",&nCables);
  30.     cable = malloc(sizeof(char*) * nCables);
  31.  
  32.     for (i=0;i <nCables;i++){
  33.         cable [i]=malloc (sizeof (char)*25);
  34.     }
  35.     nCombinaciones=factorial (nCables)/(2*factorial(nCables-2));
  36.    
  37.     combinaciones=malloc (nCombinaciones*sizeof (Combi));
  38.    
  39.     for (i=0;i <nCables;i++)
  40.     {
  41.         printf ("Introduce el color %d: ",i+1);
  42.         scanf ("%s",cable[i]);
  43.     }
  44.     for (i=0;i<nCables-1;i++)
  45.     {
  46.         for (j=i+1;j <nCables;j++)
  47.         {
  48.             strcpy (combinaciones[n].cable[0],cable [i]);
  49.             strcpy (combinaciones[n].cable[1],cable [j]);
  50.             printf ("Introduce la resistencia entre el %s y el %s: ",combinaciones [n].cable[0],combinaciones [n].cable[1]);
  51.             scanf ("%f",&combinaciones[n].resistencia);
  52.             n++;
  53.         }
  54.     }
  55.     indice_menor=0;
  56.     indice_mayor=0;
  57.     for (i=0;i <nCombinaciones;i++)
  58.     {
  59.         if (combinaciones [indice_menor].resistencia >combinaciones [i].resistencia){
  60.             indice_menor=i;
  61.         }
  62.         if (combinaciones [indice_mayor].resistencia<combinaciones [i].resistencia){
  63.             indice_mayor=i;
  64.         }
  65.     }
  66.     indice_trabajo=0;
  67.    
  68.     for (i=0;i<nCombinaciones;i++)
  69.     {
  70.         if (indice_trabajo==indice_menor || indice_trabajo==indice_mayor)
  71.         {
  72.             indice_trabajo++;
  73.         }
  74.     }
  75.     printf ("El condensador va entre el %s y el %s\n", combinaciones[indice_mayor].cable[0],combinaciones [indice_mayor].cable[1]);
  76.     printf ("La bobina de arranque esta entre el %s y el %s\n",combinaciones[indice_menor].cable[0],combinaciones [indice_menor].cable[1]);
  77.     printf ("La bobina de trabajo esta entre el %s y el %s\n",combinaciones[indice_trabajo].cable[0],combinaciones [indice_trabajo].cable[1]);
  78.  
  79.     for (i=0;i <nCables;i++){
  80.         if ( (strcmp(combinaciones[indice_mayor].cable[0],cable [i])!=0) && (strcmp (combinaciones [indice_mayor].cable[1],cable [i])!=0)){
  81.             comun=i;
  82.             break;
  83.         }
  84.     }
  85.     printf ("El comun es el %s. Conecta el neutro en el\n",cable[comun]);
  86.     if (strcmp(combinaciones[indice_trabajo].cable[0],cable [comun])!=0){
  87.         fase=0;
  88.     }else {
  89.         fase=1;
  90.     }
  91.     printf ("El fase es el %s. Conecta el fase en el\n",combinaciones[indice_trabajo].cable [fase]);
  92.     for (i=0;i <nCables;i++){
  93.         free (cable [i]);
  94.     }
  95.     free (cable);
  96.     free (combinaciones);
  97. }

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.