Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Podobne dokumenty
int f(); //f - funkcja zwracająca wartość typu int int (*f)(); //f - wskaźnik do funkcji zwracającej wartość typu int

Metody rozwiązywania równań nieliniowych

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.

Obliczenia iteracyjne

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

Programowanie - wykład 4

Wstęp do metod numerycznych Rozwiazywanie równań algebraicznych. P. F. Góra

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Metody numeryczne I Równania nieliniowe

Wprowadzenie Metoda bisekcji Metoda regula falsi Metoda siecznych Metoda stycznych RÓWNANIA NIELINIOWE

Elementy metod numerycznych

1 Równania nieliniowe

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Wstęp do Programowania, laboratorium 02

ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

1 Metody rozwiązywania równań nieliniowych. Postawienie problemu

Wybrane metody przybliżonego. wyznaczania rozwiązań (pierwiastków) równań nieliniowych

Metody numeryczne Wykład 7

Część 4 życie programu

Iteracyjne rozwiązywanie równań

Wstęp do Programowania potok funkcyjny

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Laboratorium 5 Przybliżone metody rozwiązywania równań nieliniowych

RÓWNANIA NIELINIOWE Maciej Patan

METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Kubatury Gaussa (całka podwójna po trójkącie)

Rozwiązywanie równań nieliniowych

Podstawy Programowania Podstawowa składnia języka C++

Matematyka stosowana i metody numeryczne

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Rozwiązywanie równań nieliniowych i ich układów. Wyznaczanie zer wielomianów.

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Wskaźniki w C. Anna Gogolińska

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Pliki. Informacje ogólne. Obsługa plików w języku C

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Metody numeryczne. Równania nieliniowe. Janusz Szwabiński.

Alokacja pamięci dla tablicy dwuwymiarowej

5 Przygotował: mgr inż. Maciej Lasota

Podstawy programowania skrót z wykładów:

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Paradygmaty programowania

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 3 - sem.iii. Dr inż. M. Czyżak

Programowanie w języku Python. Grażyna Koba

Zmienne, stałe i operatory

Metody numeryczne. dr Artur Woike. Ćwiczenia nr 2. Rozwiązywanie równań nieliniowych metody połowienia, regula falsi i siecznych.

Lab 9 Podstawy Programowania

Programowanie strukturalne i obiektowe. Funkcje

1 Pochodne wyższych rzędów

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

IX. Wskaźniki.(3 godz.)

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Poprawność semantyczna

Zagadnienia - równania nieliniowe

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

1 Podstawy c++ w pigułce.

Struktury Struktura polami struct struct struct struct

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

1 Podstawy c++ w pigułce.

IX. Rachunek różniczkowy funkcji wielu zmiennych. 1. Funkcja dwóch i trzech zmiennych - pojęcia podstawowe. - funkcja dwóch zmiennych,

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Podstawy Programowania Obiektowego

Równania nieliniowe, nieliniowe układy równań, optymalizacja

Język C, tablice i funkcje (laboratorium, EE1-DI)

Analiza numeryczna kolokwium2a-15grudnia2005

METODY NUMERYCZNE. Wykład 4. Numeryczne rozwiązywanie równań nieliniowych z jedną niewiadomą. prof. dr hab.inż. Katarzyna Zakrzewska

4. Funkcje. Przykłady

I - Microsoft Visual Studio C++

Informatyka I: Instrukcja 4.2

1. Wprowadzanie danych z klawiatury funkcja scanf

Wstęp do programowania

Równania nieliniowe, nieliniowe układy równań, optymalizacja

Numeryczne rozwiązywanie równań i układów równań

Optymalizacja ciągła

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wstęp do programowania

Czym jest całka? Całkowanie numeryczne

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Metody numeryczne. materiały do wykładu dla studentów

Jerzy Nawrocki, Wprowadzenie do informatyki

Wstęp do informatyki- wykład 9 Funkcje

Warsztaty dla nauczycieli

Egzamin z Metod Numerycznych ZSI, Grupa: A

METODY NUMERYCZNE. Wykład 4. Numeryczne rozwiązywanie równań nieliniowych z jedną niewiadomą. Rozwiązywanie równań nieliniowych z jedną niewiadomą

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Metody numeryczne. Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski

Algorytm. a programowanie -

Funkcja (podprogram) void

Wstęp do wskaźników w języku ANSI C

Transkrypt:

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. 1. Identyfikator funkcji, wskaźnik do funkcji. Funkcje nie są zmiennymi; Identyfikator funkcji jest typu wskaźnik do funkcji i ma wartość równą adresowi funkcji; Wskaźniki do funkcji można przekazywać jako argumenty aktualne do innych funkcji. Odpowiedni argument formalny musi być wtedy wskaźnikiem do funkcji; Informacja o typie wartości zwracanej przez funkcję znajdującą się na liście argumentów formalnych musi być uwzględniona w deklaracji. int f(); //f - funkcja zwracająca wartość typu int int (*f)(); //f - wskaźnik do funkcji zwracającej wartość typu int 2. Metoda Newtona. Metoda Newtona (zwana metodą stycznych) pozwala na rozwiązanie równania postaci: =0 Założenia metody w odniesieniu do funkcji f(x): - Pierwiastek równania α znajduje się w przedziale [a,b]. - Funkcja ma różne znaki na krańcach przedziału, tj. <0. - Istnieją i są ciągłe f'(x) i f''(x), ponadto f''(x) nie zmienia znaku w [a,b]. Metoda działania: Niech będzie i-tym przybliżeniem pierwiastka, a h błędem tego przybliżenia, wtedy = +h po podstawieniu do funkcji otrzymujemy +h 0 Rozwijając funkcję w f szereg Taylora z zachowaniem jedynie wyrazu pierwszego rzędu otrzymujemy: 0= +h +h stąd otrzymujemy h = Ponieważ błąd w i-tej iteracji został policzony w sposób przybliżony, zamiast pierwiastka dokładnego α otrzymujemy kolejne przybliżenie pierwiastka = dla i=0,1,2,3 Iterację (obliczenia) należy przerwać po skończonej liczbie kroków. Warunek przerwania można zdefiniować jako: < gdzie ε jest żądaną dokładnością. Interpretacja geometryczna patrz: https://pl.wikipedia.org/wiki/metoda_newtona Przykład. Zbuduj program rozwiązujący równanie. Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 1

1 2 =0 podając następujące dane: przybliżenie początkowe (punkt startowy), dokładność, maksymalną liczbę iteracji. Obliczanie wartości funkcji dla dowolnego x zapisz w funkcji ff(), obliczanie wartości pochodnej zapisz w funkcji fp(). Metodę Newtona zapisz w funkcji newton(). Funkcja newton() ma zwrócić informację o zbieżności procesu iteracyjnego: 0 jeżeli proces jest zbieżny; 1 jeżeli proces jest rozbieżny. include "pch.h" include <stdio.h> include <stdlib.h> include <math.h> double f(double); double fp(double); int newton(double *x, int n, double eps); /* start 0.5 -> 0 0.8 -> -1.8954 1.0 -> 1.8954 */ int main() double x0 = 0.8, eps = 0.001; int n = 100; // printf("podaj:\n przybl. dokl. maks.iter.\n"); // scanf("%lf %lf %d", &x0,&eps,&n); if (!newton(&x0, n, eps)) printf("rozwiazanie= %lf wart.= %lf\n", x0, f(x0)); else printf("brak zbieznosci\n"); system("pause"); int newton(double *x, int n, double eps) double x1; int i = 0; do x1 = -f(*x) / fp(*x); *x += x1; if (fabs(x1) < eps) return 0; while (i++ < n); return 1; double f(double x) return sin(x) -.5*x; double fp(double x) return cos(x) -.5; 3. Funkcje w argumentach funkcji zmodyfikuj program z pkt.2 w taki sposób aby do funkcji int newton() przekazać przez argumenty funkcje double f() i double fp(). Tak napisany program wykorzystaj do rozwiązania równania: Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 2

1 2 =0 oraz 2 =0 Wywołanie funkcji w main() // dla f start 0.5 -> 0 0.8 -> -1.8954 1.0 -> 1.8954 // dla g start 0.2 -> 1.5 0.8 ->????? 1.0 -> 1.165561 newton(&x0, n, eps, ff, fp); //ff, fp - wskaźniki do funkcji int newton(double *x, int n, double eps, double(*f1)(double), double(*f2)(double)) double x1; int i = 0; do x1 = -(*f1)(*x) / (*f2)(*x); *x += x1; if (fabs(x1) < eps) return 0; while (i++ < n); return 1; 4. Napisz funkcję obliczającą wartość : = + Tak by funkcja f mogła być dowolną funkcją. W funkcji main() policz wartość y dla f(x)=sin(x) i f(x) = cos(x). 5. Synonimy nazw typów danych. W niektórych sytuacjach skomplikowane nazwy typów mogą zaciemniać obraz tworzonego projektu - język C dostarcza słowa kluczowego typedef, które pozwala na tworzenie nazw alternatywnych (synonimów) w stosunku do już istniejących. Łatwo sobie wyobrazić sytuację, w której na początku pisania kodu możemy nie być pewni z jakiego typu danych chcemy korzystać (prosty przykład: nie wiemy czy nasze obliczenia powinny być pojedynczej czy podwójnej precyzji) - w takiej sytuacji warto skorzystać z powyższego mechanizmu. typedef int data; data x; //zmianna x typu int 6. Struktura - złożony typ grupujący rożnego rodzaju dane w jednym obszarze pamięci. Struktury języka C są namiastką klas i obiektów wieloparadygmatowego języka C++. Składowe struktury opisane są za pomocą typu i nazwy (np. int zmienna). /*Deklaracja*/ struct student x, y; /*Definicja*/ struct student z; strcpy(z.imie, "Piotr\0"); z.nazwisko = (char*)malloc(sizeof(char) * 6); strcpy(z.nazwisko,"nowak\0"); z.rok = 1999; Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 3

7. Instancje struktur można definiować na kilka sposobów: a) Sposób I aby zdefiniować strukturę z o tych samych składowych, trzeba ponownie wymienić wszystkie składowe; struct x, y; b) Sposób II - w sposób domyślny parą typ-zmienna, identyfikator student nazywany jest etykietą struktury; struct student /*deklaracja*/ ; struct student x,y; /*definicja*/ c) Sposób III definiowany jest nowy typ STUDENT, etykieta student może być pominięta; typedef struct student STUDENT; STUDENT x, y; //lub struct student x,y; d) Sposób IV - poprzez wskaźnik. STUDENT *xx; xx = &x; 8. Dostęp do składowych struktur: a) bezpośredni nazwa_struktury.składowa do elementów struktury odwołujemy się poprzez kropkę (sposób definicji I, II, III); x.nazwisko; x.rok; b) pośredni wskaznik->składowa do elementów struktury odwołujemy się poprzez operator-> (sposób definicji IV); xx->nazwisko; xx->rok; Uwaga: x.rok (*xx).rok xx->rok 9. Struktury i wskaźniki do struktur można gromadzić w tablicach: STUDENT t[10], *s[5]; //t -tabl. struktur, s - tabl. wskaźników do struktur t[0]; //struktura o indeksie 0 typu STUDENT t[0].rok; //składnik rok struktury o indeksie 0 - int t[0].imie[1];//element o indeksie 1 składnika imie struktury o indeksie 0-char Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 4

s[0]; //zerowy element tablicy typu STUDENT * (*s[0]).rok; //składnik rok osoby wskazywanej przez s[0] s[0]->rok; //inny zapis powyższego s[0]->imie[1]; //druga litera imienia osoby wskazywanej przez s[0] 10. Napisz funkcje wykonujące operacje na liczbach zespolonych: 1. Funkcję obliczającą pierwiastki (rzeczywiste lub zespolone) równania kwadratowego. 2. Funkcję dodającą dwie liczby zespolone Zadanie zrealizować definiując strukturę o dwóch składowych typu double reprezentujących odpowiednio część rzeczywistą i część urojoną liczby zespolonej. Przypomnienie. Dla Δ<0 rozwiązania mają postać:!" = $!" = $ % =+&'( ) * ' $ $ % = &'( ) * ' $ $ 11. W pliku tekstowym zapisane są następujące dane o wielu studentach: imię, nazwisko, rok urodzenia, adres zamieszkania, kwota stypendium. Zapisz te dane do tablicy struktur i wybierz spośród wszystkich osób tego studenta który pobiera największe stypendium. Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 5