jazykc  2013.3
upoljazykc
 All Classes Files Functions Variables Typedefs Macros Pages
mapovani-pole-funkci.c
Go to the documentation of this file.
1 
56 #include <stdio.h>
57 #include <stdlib.h>
58 #include <math.h>
59 #include <assert.h>
60 
61 double na2(double x){ return x*x; }
62 double na3(double x){ return x*x*x; }
63 
68 double **map(double(*fce[])(double),double *vstup,int pocet_fce, int pocet_vstup) {
69  int radku;//kolik radku ma vystup: 1+pocet_fce
70  double **vysledky;
71  double *vysledek;
72  double (*f)(double);
73  int i, j;
74 
75  assert(pocet_fce>=0);
76  assert(pocet_vstup>0);
77  assert(vstup);
78 
79  radku = pocet_fce+1;//+1 : prvni (nulty) radek opakuje/obsahuje vstup
80  vysledky = (double **)malloc(radku * sizeof(double *));
81 //naalokujeme radky pro vysledky
82  for (i=0; i<radku; i++) {
83  vysledky[i] = (double *)malloc(pocet_vstup * sizeof(double));
84  }
85 //vysledky[0] obsahuje kopii vstup:
86  for(i=0; i<pocet_vstup; i++) {
87  vysledky[0][i] = vstup[i];
88  }
89  for(i=0; i<pocet_fce; i++) {
90  vysledek = vysledky[i+1];//+1, vysledky[0] obsahuje kopii vstupu!
91  f = fce[i];
92  for(j=0; j<pocet_vstup; j++) {
93  vysledek[j] = f(vstup[j]);
94  }
95  }
96  return vysledky;
97 }
98 
99 static vypis (double *vstup, int delka) {
100  int i;
101  for (i=0; i<delka; i++) {
102  printf("%c%8g", i?',':'[', vstup[i]);
103  };printf("]\n");
104 }
105 
106 #ifndef NELEM
107 #define NELEM(pole) (sizeof pole/sizeof *pole)
108 #endif
109 
110 double vstup[] = {1,2,3,4,5, 10};
111 
112 //ted vyuzijeme math.h
113 double ludolf[] = {0.0, M_PI_4, M_PI_2, M_PI};
114 
115 double (*fce[])(double) = {na2, na3, sqrt};
116 
117 int main(void) {
118  double **vysledky_na2;
119  double **vysledky_na3;
120  double **vysledky_sin;
121  int i;
122 
123  vysledky_na2 = map(fce, vstup, NELEM(fce), NELEM(vstup));
124  vysledky_na3 = map(fce, vstup, NELEM(fce), NELEM(vstup));
125 
126 //vyuzijeme vypis() z predchoziho prikladu mapovani-funkce.c
127  for(i=0; i<= NELEM(fce); i++) {
128  vypis(vysledky_na2[i], NELEM(vstup));
129  }
130 }
131 
132 
double na2(double x)
double ** map(double(*fce[])(double), double *vstup, int pocet_fce, int pocet_vstup)
#define NELEM(pole)