** Login ** ** 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); }