# Całka

Dec 21st, 2016
110
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. using System;
2. using System.Collections.Generic;
3. using System.Linq;
4. using System.Reflection;
5. using System.Text;
7.
8. namespace Calka
9. {
10.     public interface Methods
11.     {
12.        void showMethod(double result, double steps);
13.        double calculateResult(ref double k, double a, double b);
14.     }
15.
16.     public static class MathFunctions
17.     {
18.         public static readonly double M_E = 2.71828182845904523536;
19.
20.         public static double f(double x) => (Math.Pow(M_E, x) + 1) / (Math.Pow(x, 2) + 1);
21.
22.         public static double h(double k, double a, double b) => ((b - a) / Math.Pow(2, k));
23.
24.         public static double x(double i, double k, double a, double b) => (a + i * h(k, a, b));
25.
26.         public static double y(double i, double k, double a, double b) => (f(x(i, k, a, b)));
27.     }
28.
29.     public static class SumFunctions
30.     {
31.        public static double sum1(double k, double a, double b)
32.         {
33.             double sum = 0;
34.             for (int i = 1; i < Math.Pow(2, k); i++)
35.             {
36.                 sum += MathFunctions.y(i, k, a, b);
37.             }
38.             return sum;
39.         }
40.
41.         public static double sum2(double k, double a, double b)
42.         {
43.             double sum = 0;
44.             for (int i = 1; i < Math.Pow(2, k); i += 2)
45.             {
46.                 sum += MathFunctions.y(i, k, a, b);
47.             }
48.             return sum;
49.         }
50.
51.         public static double sum3(double k, double a, double b)
52.         {
53.             double sum = 0;
54.
55.             for (int i = 2; i < Math.Pow(2, k) - 1; i += 2)
56.             {
57.                 sum += MathFunctions.y(i, k, a, b);
58.             }
59.             return sum;
60.         }
61.
62.        public static double sum4(double k, double a, double b)
63.         {
64.             double sum = 0;
65.             for (int i = 1; i <= Math.Pow(2, k - 1) - 1; i++)
66.             {
67.                 sum += MathFunctions.f(a + ((2 * i) - 1) * MathFunctions.h(k, a, b));
68.             }
69.             return sum;
70.         }
71.     }
72.
73.     public static class MathMethods
74.     {
75.         public static double T(double k, double a, double b) => (MathFunctions.h(k, a, b) / 2) * (MathFunctions.f(a) + MathFunctions.f(b) + 2 * SumFunctions.sum1(k, a, b));
76.
77.         public static double S(double k, double a, double b) => (MathFunctions.h(k, a, b) / 3) * (MathFunctions.y(0, k, a, b) + MathFunctions.y(Math.Pow(2, k), k, a, b) + 4 * SumFunctions.sum2(k, a, b) + 2 * SumFunctions.sum3(k, a, b));
78.
79.         public static double R(double k, double a, double b)
80.         {
81.             if (k == 0)
82.                 return ((MathFunctions.f(a) + MathFunctions.f(b)) / 2) * (b - a);
83.             else
84.                 return (1 / 2 * R(k - 1, a, b)) + (MathFunctions.h(k, a, b) * SumFunctions.sum4(k, a, b));
85.         }
86.     }
87.
88.     public static class ExecuteMethods
89.     {
90.         public static readonly double eps = 10e-4;
91.
92.         public static double R(ref double kr,double a, double b)
93.         {
94.             double R1 = 0, R2 = 0;
95.             do
96.             {
97.                 kr++;
98.                 R2 = R1;
99.                 R1 = MathMethods.R(kr,a,b);
100.
101.             } while (Math.Abs(R1 - R2) > eps);
102.             return R1;
103.         }
104.
105.         public static double S(ref double ks,double a, double b)
106.         {
107.             double S1 = 0, S2 = 0;
108.             do
109.             {
110.                 ks++;
111.                 S2 = S1;
112.                 S1 = MathMethods.S(ks, a, b);
113.
114.             } while (Math.Abs(S1 - S2) > eps);
115.             return S1;
116.         }
117.
118.         public static double T(ref double kt,double a, double b)
119.         {
120.             double T1=0,T2 = 0;
121.             do
122.             {
123.                 kt++;
124.                 T2 = T1;
125.                 T1 = MathMethods.T(kt, a, b);
126.             } while (Math.Abs(T1 - T2) > eps);
127.
128.             return T1;
129.         }
130.     }
131.
132.     public class ShowResultsT : Methods
133.     {
134.         public double calculateResult(ref double k, double a, double b)
135.         {
136.             return ExecuteMethods.T(ref k, a, b);
137.         }
138.
139.         public void showMethod(double result, double steps)
140.         {
141.             Console.WriteLine(\$"Metoda trapezów:");
142.             Console.WriteLine(\$" wynik: {result}");
143.             Console.WriteLine(\$" kroki: {steps}");
144.             Console.WriteLine();
145.         }
146.     }
147.
148.     public class ShowResultsS : Methods
149.     {
150.         public double calculateResult(ref double k, double a, double b)
151.         {
152.             return ExecuteMethods.S(ref k, a, b);
153.         }
154.
155.         public void showMethod(double result, double steps)
156.         {
157.             Console.WriteLine(\$"Metoda parabol:");
158.             Console.WriteLine(\$" wynik: {result}");
159.             Console.WriteLine(\$" kroki: {steps}");
160.             Console.WriteLine();
161.         }
162.     }
163.
164.     public class ShowResultsR : Methods
165.     {
166.         public double calculateResult(ref double k, double a, double b)
167.         {
168.             return ExecuteMethods.R(ref k,a,b);
169.         }
170.
171.         public void showMethod(double result, double steps)
172.         {
173.             Console.WriteLine(\$"Metoda na r:");
174.             Console.WriteLine(\$" wynik: {result}");
175.             Console.WriteLine(\$" kroki: {steps}");
176.             Console.WriteLine();
177.         }
178.     }
179.
180.
181.     class Program
182.     {
183.         static void Main(string[] args)
184.         {
185.             #region user variables
186.             double a = -2;
187.             double b = 0;
188.             #endregion
189.
190.             #region program variables
191.             double steps=1;
192.             var methods = from t in Assembly.GetExecutingAssembly().GetTypes()
193.                             where t.GetInterfaces().Contains(typeof(Methods))
194.                                      && t.GetConstructor(Type.EmptyTypes) != null
195.                             select Activator.CreateInstance(t) as Methods;
196.             #endregion
197.
198.             #region execute
199.             foreach (var method in methods)
200.             {
201.                 method.showMethod(method.calculateResult(ref steps,a,b),steps);
202.             }
203.             #endregion
204.         }
205.     }
206. }
RAW Paste Data