Pobierz - antenor.pol.lublin.pl
Transkrypt
Pobierz - antenor.pol.lublin.pl
SKA EL E HN B P O LI T C IKA LU LABORATORIUM INFORMATYKI 13 Programowanie C# OOP cd. Metody wirtualne Zadania do wykonania: 1. Uruchomi powy szy program 2. Porównaj wyniki oblicze metod prostok tów i metod trapezów dla ró nej liczby przedziałów n. Porównaj wyniki obu metod z wynikiem obliczonym analitycznie. 3. Utwórz klas o nazwie Sinus jako pochodna klasy CałkaOznaczona i przeprowad seri oblicz jak w p.2 dla przedziału x1=0 i x2=Pi/2. Porównaj wyniki obu metod z wynikiem obliczonym analitycznie. 4. Utwórz klas o nazwie CwiartkaOkregu jako pochodna klasy CałkaOznaczona opisuj c okr g o promieniu 1 i rodku w pocz tku układu współrz dnych. Nast pnie przeprowad seri oblicz jak w p.2 dla przedziału x1=0 i x2=1. Porównaj wyniki obu metod z wynikiem obliczonym analitycznie. Równanie okr gu: r2=(x-x0)2+(y-y0)2, gdzie x0 i y0: współrz dne rodka Metody wirtualne s wa nym mechanizmem z powodu tego co si z nimi dzieje przy ich wywołaniu poprzez referencj do klasy bazowej. Zostaje wybrana wersja metody na podstawie typu obiektu, na który wskazuje referencja. Wybór dokonywany jest w czasie rzeczywistym podczas realizacji programu. Metoda wirtualna jest metod , która została zadeklarowana jako virtual w klasie bazowej i przeładowana (przeci ona, przedefiniowana) w klasie pochodnej z u yciem modyfikatora override. Proces redefinicji metody w klasie pochodnej nazywa si przykrywaniem. Przykrywaj metod jej nazwa oraz liczba i typy argumentów musz by identyczne jak w przykrywanej metodzie wirtualnej (zdefiniowanej w klasie bazowej). Nie jest konieczne przykrywanie metody wirtualnej. Je li klasa pochodna nie posiada własnej wersji metody obowi zuje metoda z klasy bazowej. Program using System; using System.Collections.Generic; using System.Text; namespace Calka { class CalkaOznaczona { protected virtual double Funkcja(double x) { return 0; } public double ObliczMetodaProstokat(double x1, double x2, int n) { double dx = (x2 - x1) / n; double c = 0; for (int i = 0; i < n; i++) { c += Funkcja(x1 + i * dx) * dx; } return c; } SKA EL E HN B P O LI T C IKA LU LABORATORIUM INFORMATYKI 13 Programowanie C# public double ObliczMetodaTrapez(double x1, double x2, int n) { double dx = (x2 - x1) / n; double c = 0; for (int i = 0; i < n; i++) { c += 0.5 * (Funkcja(x1 + i * dx)+Funkcja(x1 + (i + 1) * dx)) * dx; } return c; } } class Prosta : CalkaOznaczona { protected override double Funkcja(double x) { return x; } } class Prosta1 : CalkaOznaczona { protected override double Funkcja(double x) { return 2*x+1; } } class Program { static void Main(string[] args) { double x1 = 0; // poczatek double x2 = 1; // koniec int n = 5; // liczba przedziałów Prosta pr = new Prosta(); Prosta1 pr1 = new Prosta1(); // CalkaOznaczona c; c = pr; Console.WriteLine("Pole pod krzyw : x1={0}, x2={1}, n={2}", x1, x2, n); Console.WriteLine("Metoda prostok tów {0}", c.ObliczMetodaProstokat(x1, x2, n)); Console.WriteLine("Metoda trapezów {0}", c.ObliczMetodaTrapez(x1, x2, n)); // c = pr1; Console.WriteLine("Pole pod krzyw : x1={0}, x2={1}, n={2}", x1, x2, n); Console.WriteLine("Metoda prostok tów {0}", c.ObliczMetodaProstokat(x1, x2, n)); Console.WriteLine("Metoda trapezów {0}", c.ObliczMetodaTrapez(x1, x2, n)); // Console.Write("Naci nij <ENTER> aby zako czy "); Console.ReadLine(); } } }