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();
}
}
}