Something
public text v1 · immutable** 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);
}