All pastes #258714 Raw Edit

Something

public text v1 · immutable
#258714 ·published 2006-11-26 20:10 UTC
rendered paste body
** Login   <battin_c@epita.fr>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
** Started on  Fri Nov 17 16:28:08 2006 clement battin                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
** Last update Sun Nov 26 17:23:11 2006 clement battin                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
*/

#define APPELS int base, char *m11, char *m12, char *m13, char *m14, char *m21, char *m22, char *m23, char *m24
#define M11M12 DecToBase(base_used, (BaseToDec(base_used, m11) * BaseToDec(base_used, m12)))
#define M11M13 DecToBase(base_used, (BaseToDec(base_used, m11) * BaseToDec(base_used, m13)))
#define M11M14 DecToBase(base_used, (BaseToDec(base_used, m11) * BaseToDec(base_used, m14)))
#define M11M21 DecToBase(base_used, (BaseToDec(base_used, m11) * BaseToDec(base_used, m21)))
#define M11M22 DecToBase(base_used, (BaseToDec(base_used, m11) * BaseToDec(base_used, m22)))
#define M11M23 DecToBase(base_used, (BaseToDec(base_used, m11) * BaseToDec(base_used, m23)))
#define M12M21 DecToBase(base_used, (BaseToDec(base_used, m12) * BaseToDec(base_used, m21)))
#define M12M22 DecToBase(base_used, (BaseToDec(base_used, m12) * BaseToDec(base_used, m22)))
#define M12M23 DecToBase(base_used, (BaseToDec(base_used, m12) * BaseToDec(base_used, m23)))
#define M12M24 DecToBase(base_used, (BaseToDec(base_used, m12) * BaseToDec(base_used, m24)))
#define M13M21 DecToBase(base_used, (BaseToDec(base_used, m13) * BaseToDec(base_used, m21)))
#define M13M22 DecToBase(base_used, (BaseToDec(base_used, m13) * BaseToDec(base_used, m22)))
#define M13M24 DecToBase(base_used, (BaseToDec(base_used, m13) * BaseToDec(base_used, m24)))
#define M14M22 DecToBase(base_used, (BaseToDec(base_used, m14) * BaseToDec(base_used, m22)))
#define M14M23 DecToBase(base_used, (BaseToDec(base_used, m14) * BaseToDec(base_used, m23)))
#define M14M24 DecToBase(base_used, (BaseToDec(base_used, m14) * BaseToDec(base_used, m24)))
#define M11_M21 DecToBase(base_used, (BaseToDec(base_used, m11) + BaseToDec(base_used, m21)))
#define M12_M22 DecToBase(base_used, (BaseToDec(base_used, m12) + BaseToDec(base_used, m22)))
#define M13_M23 DecToBase(base_used, (BaseToDec(base_used, m13) + BaseToDec(base_used, m23)))
#define M14_M24 DecToBase(base_used, (BaseToDec(base_used, m14) + BaseToDec(base_used, m24)))
#define M11M21_M13M22 DecToBase(base_used, BaseToDec(base_used, M11M21) + BaseToDec(base_used, M13M22))
#define M11M21_M12M22 DecToBase(base_used, BaseToDec(base_used, M11M21) + BaseToDec(base_used, M12M22))
#define M11M21_M12M23 DecToBase(base_used, BaseToDec(base_used, M11M21) + BaseToDec(base_used, M12M23))
#define M11M22_M12M24 DecToBase(base_used, BaseToDec(base_used, M11M22) + BaseToDec(base_used, M12M24))
#define M11M23_M13M24 DecToBase(base_used, BaseToDec(base_used, M11M23) + BaseToDec(base_used, M13M24))
#define M12M21_M14M22 DecToBase(base_used, BaseToDec(base_used, M12M21) + BaseToDec(base_used, M14M22))
#define M12M23_M14M24 DecToBase(base_used, BaseToDec(base_used, M12M23) + BaseToDec(base_used, M14M24))
#define M13M21_M14M22 DecToBase(base_used, BaseToDec(base_used, M13M21) + BaseToDec(base_used, M14M22))
#define M13M21_M14M23 DecToBase(base_used, BaseToDec(base_used, M13M21) + BaseToDec(base_used, M14M23))
#define M13M22_M14M24 DecToBase(base_used, BaseToDec(base_used, M13M22) + BaseToDec(base_used, M14M24))
#define TAB_BASE        char *base_used;                                                              \
                        char *base_full;                                                              \
                        int i;                                                                        \
                        i = base;                                                                     \
                        base_used = (char *)malloc(sizeof(base) * 16);                                \
                        base_full = "0123456789ABCDEF";                                               \
                        while (base--)                                                                \
                          base_used[i - base - 1] = base_full[i - base - 1];

typedef struct  s_opers
{
  char  oper;
  int   (*f)();
}               t_opers;

int     BaseToDec(char *bf,  char *nb)
{
  int   res;
  int   i;
  int   j;
  int   power;

  power = 1;
  i = my_strlen(nb) - 1;
  j = 0;
  res = 0;
  while (i >= 0)
    {
      while (bf[j] != nb[i])
        j++;
      res += j * power;
      j = 0;
      i--;
      power *= my_strlen(bf);
    }
  return (res);
}

char    *DecToBase(char *bf, int nb)
{
  char  *res;
  int   base;
  int   i;

  i = 0;
  res = (char *)malloc(sizeof(res) * my_strlen(bf) * nb);
  base = my_strlen(bf);
  while (nb)
    {
      res[i] = bf[nb % base];
      nb /= base;
      i++;
    }
  if (res[0] == '\0')
    return ("0");
  return (my_revstr(res));
}

void    add(APPELS)
{
  TAB_BASE
  printf("Matrix A:        %s     %s     %s    %s\n", m11, m12, m13, m14);
  printf("Matrix B:        %s     %s     %s    %s\n", m21, m22, m23, m24);
  printf("Matrix A+B:      ");
  printf("%s     ", M11_M21);
  printf("%s     ", M12_M22);
  printf("%s    ", M13_M23);
  printf("%s\n", M14_M24);
}

void    mult_nb(APPELS)
{
  TAB_BASE
  printf("Nomber p: %s\nMatrix A:       %s     %s    %s    %s\nMatrix p.A:     ", m11, m12, m13, m14, m21);
  printf("%s     ", M11M12);
  printf("%s    ", M11M13);
  printf("%s    ", M11M14);
  printf("%s\n", M11M21);
}

void    prod_vec(APPELS)
{
  TAB_BASE
  printf("Matrix A:       %s     %s     %s     %s\n", m11, m12, m13, m14);
  printf("Vector u:       %s     %s\n", m21, m22);
  printf("Vector A.u:     %s     %s\n", M11M21_M12M22, M13M21_M14M22);
}

void    prod_mat(APPELS)
{
  TAB_BASE
  printf("Matrix A:         %s      %s      %s      %s\n", m11, m12, m13, m14);
  printf("Matrix B:         %s      %s      %s      %s\n", m21, m22, m23, m24);
  printf("Matrix A.B:       %s      %s      %s      %s\n", M11M21_M12M23, M11M22_M12M24, M13M21_M14M23, M13M22_M14M24);
  printf("Matrix B.A        %s      %s      %s      %s\n", M11M21_M13M22, M12M21_M14M22, M11M23_M13M24, M12M23_M14M24);
}

t_opers gl_base[] =
  {
    {'1', add},
    {'2', mult_nb},
    {'3', prod_vec},
    {'4', prod_mat},
    {0, 0}
  };

int     matrix(char option, APPELS)
{
  int   i;

  i = 0;
  while (gl_base[i].oper != 0)
    {
      if (gl_base[i].oper == option)
        return (gl_base[i].f(base, m11, m12, m13, m14, m21, m22, m23, m24));
      i++;
    }
  my_putstr("Bad option.");
  return (0);
}

  int   main(int argc, char **argv)
{
  matrix(argv[1][0], my_getnbr(argv[2]), argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]);
  return (0);
}