Wygląd formatki: Komponenty • 3 komponenty TButton (karta
Transkrypt
Wygląd formatki: Komponenty • 3 komponenty TButton (karta
Wielomian interpolacyjny Lagrange’a 1 Zadanie 2. Zaprojektuj aplikację, która dla danego stopnia wielomianu i węzłów interpolacji oblicza, korzystając z wielomianu interpolacyjnego Lagrange’a, wartość wielomianu dla x=c. Definicja klasy TWielomian i definicje funkcji składowych mają być zamieszczone w oddzielnym pliku Unit2.h i Unit2.cpp.Możesz skorzystać z gotowego projektu lub z ostatnich ćwiczeń. Wygląd formatki: Komponenty 3 komponenty TButton (karta Standard), uzupełnij odpowiednio własność Caption: Podaj dane, Oblicz wartości wielomianu, Koniec 5 komponentów TEdit (karta Standard), uzupełnij własność Text jak na rysunku 8 komponentów TLabel (karta Standard), uzupełnij własność Caption jak na rysunku 1 komponent TPanel, 1 komponent TStringGrid (karta Additional), uzupełnij własności: ColCount: 3 DefaultColWidth: 40 DefaultRowHeight: 24 FixedCols: 0 FixedRows: 1 Height: 89 Name: SG_wsp RowCount: 3 Width: 473 Options, goEditing: true Visible: false Opis komponentu TStringGrid Wiersze i kolumny są numerowane od lewego, górnego rogu. Odwołanie się do komórki siatki: SG_wsp ->Cells[kolumna][wiersz] Pierwsza komórka, w górnym lewym rogu komponentu ma indeksy Cells[0][0] Wielomian interpolacyjny Lagrange’a 2 Obsługa zdarzeń kliknięcia na przyciski: Podaj dane – dostosowanie liczby kolumn siatki TStringGrid do stopnia wielomianu, pokazanie komponentu, uzupełnienie nagłówkowego wiersza komponentu TStringGrid liczbami od 0 do n: Oblicz wartość wielomianu – obliczanie wartości wielomianu za pomocą wzoru Lagrange’a: Koniec – zamknięcie aplikacji Wygląd aplikacji po uruchomieniu: Plik Unit2.cpp, Unit2.h W celu obliczenia wartości wielomianu należy do klasy TWielomian dodać pola prywatne: private: int n; double double double double a[MAX]; wx[MAX]; //węzły wy[MAX]; // wartości w węzłach W_Lagr[MAX]; //wspolczynniki wielomianu Lagrangea oraz trzy funkcje składowe void CzytajWezlyWielomianu(int nn, double *x, double *y); wczytanie do pól klasy węzłów i wartości w węzłach z tablic x, y podanych jako parametry bool WspLagrangea(); obliczenie współczynników wielomianu Lagrange’a według wzoru: W_Lagr [i ] yi n (x j 0 i xj) j i double WielomianLagrangea(double); obliczenie wartości wielomianu ze wzoru Lagrange’a z wykorzystaniem obliczonych już współczynników według wzoru: n n x xj i 0 j 0 xi x j p ( x) y i j i public: TWielomian() {}; Wielomian interpolacyjny Lagrange’a 3 ~TWielomian() {}; void CzytajWezlyWielomianu(int, double*, double*); bool WspLagrangea(); double WielomianLagrangea(double); Ponadto: W pliku Unit1.cpp dodać funkcję o nazwie PoprawneDane sprawdzającą poprawność wartości w węzłach oraz pobierającą te dane do dwóch tablic x, y Funkcja zwraca true w przypadku poprawnych danych, wtedy można obliczać wartość wielomianu w punkcie. W przeciwnym razie zwraca false i pojawia się odpowiedni komunikat. Plik Unit1.cpp TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {} //-----------------------------------------------------------------bool PoprawneDane(TStringGrid *SG_wsp, int nn, double *x, double *y) { bool popr = true; double wspx, wspy; for(int i=0;i<nn+1;i++) { if(TryStrToFloat(SG_wsp->Cells[i][1],wspx) && TryStrToFloat(SG_wsp->Cells[i][2],wspy)) { x[i] = wspx; y[i] = wspy; } else { ShowMessage("niepoprawne dane"); return false; } } return popr; } //-----------------------------------------------------------------... Praca domowa Jeżeli uruchomiłeś program w wersji podstawowej zadbaj o sprawdzanie poprawności danych i czyszczenie pół przy zmianie danych: do pola Edit1 (stopień wielomianu) można wpisywać tylko liczby całkowite, po wczytaniu liczby całkowitej należy sprawdzić, czy jest z zakresu od 2 do 10, siatka TStringGrid pokazuje się dopiero po podaniu stopnia wielomianu, w przypadku zmiany stopnia wielomianu sitaka jest czyszczona i znika, czyszczone jest również pole edycyjne z wynikiem, pole edycyjne z wynikiem czyszczone jest również w przypadku zmiany wartości c, wartość c powinna się zawierać pomiędzy najmniejszą i największą wartością węzłów interpolacji, wartość wynikowa powinna być wyświetlana z dokładnością do dwóch miejsc po przecinku, należy zliczyć i wyświetlić liczbę mnożeń i dodawań, jeśli dane są zmieniane pola są czyszczone, przycisk Oblicz wartość wielomianu jest aktywny dopiero po podaniu stopnia i współczynników wielomianu.