できた
完成。まぁバカ正直に手書きでやるよか早かったと思われ。
#include <stdio.h> #include <stdlib.h> double min2(double a,double b){ return (a-b<0)? a:b; } double min3(double a,double b,double c){ return (min2(a,b)-c<0)? min2(a,b):c; } double max2(double a,double b){ return (a-b>=0)? a:b; } double max3(double a,double b,double c){ return (max2(a,b)-c>=0)? max2(a,b):c; } int main(int argc, char *argv){ int i,j; double R[4][3] = { {0.7 , 0.5 , 0.0}, {1.0 , 0.0 , 0.0}, {0.0 , 1.0 , 0.0}, {0.0 , 0.4 , 0.3}}; double S[3][2] = { {0.6 , 0.8}, {0.0 , 1.0}, {0.0 , 0.9}}; //max-min puts("max-min合成"); for(i=0;i<4;i++){ for(j=0;j<2;j++){ printf("%.2f ",max3(min2(R[i][0],S[0][j]),min2(R[i][1],S[1][j]),min2(R[i][2],S[2][j]))); } putchar('\n'); } puts("\nmin-max合成"); //min-max for(i=0;i<4;i++){ for(j=0;j<2;j++){ printf("%.2f ",min3(max2(R[i][0],S[0][j]),max2(R[i][1],S[1][j]),max2(R[i][2],S[2][j]))); } putchar('\n'); } //min-min puts("\nmin-min合成"); for(i=0;i<4;i++){ for(j=0;j<2;j++){ printf("%.2f ",min3(min2(R[i][0],S[0][j]),min2(R[i][1],S[1][j]),min2(R[i][2],S[2][j]))); } putchar('\n'); } //max-max puts("\nmax-max合成"); for(i=0;i<4;i++){ for(j=0;j<2;j++){ printf("%.2f ",max3(max2(R[i][0],S[0][j]),max2(R[i][1],S[1][j]),max2(R[i][2],S[2][j]))); } putchar('\n'); } //max積合成 puts("\nmax積合成"); for(i=0;i<4;i++){ for(j=0;j<2;j++){ printf("%.2f ",max3(R[i][0]*S[0][j],R[i][1]*S[1][j],R[i][2]*S[2][j])); } putchar('\n'); } return EXIT_SUCCESS; }