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

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

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

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

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

Obliczenia iteracyjne

Metody rozwiązywania równań nieliniowych

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

Programowanie - wykład 4

Wstęp do Programowania, laboratorium 02

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

Lab 9 Podstawy Programowania

Metody numeryczne I Równania nieliniowe

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

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

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

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

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

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

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

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

Wskaźniki w C. Anna Gogolińska

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

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.

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

Struktury. Przykład W8_1

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

1 Równania nieliniowe

Część 4 życie programu

Język C zajęcia nr 12. Struktury i unie

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

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

Programowanie w języku Python. Grażyna Koba

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

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Elementy metod numerycznych

Struktury Struktura polami struct struct struct struct

Informatyka I: Instrukcja 4.2

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

RÓWNANIA NIELINIOWE Maciej Patan

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH

Zmienne, stałe i operatory

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

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

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Podstawy Programowania C++

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

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

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

Wstęp do Programowania potok funkcyjny

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

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

Funkcja (podprogram) void

1 Podstawy c++ w pigułce.

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

IX. Wskaźniki.(3 godz.)

Rozwiązywanie równań nieliniowych

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Metody numeryczne Wykład 7

Warsztaty dla nauczycieli

Iteracyjne rozwiązywanie równań

Podstawy algorytmiki i programowania - wykład 4 C-struktury

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

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Podstawy Programowania Obiektowego

METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH

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

C-struktury wykład. Dorota Pylak

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

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

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

Wstęp do informatyki- wykład 11 Funkcje

Wstęp do informatyki- wykład 9 Funkcje

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Programowanie strukturalne i obiektowe. Funkcje

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Czym jest całka? Całkowanie numeryczne

1 Podstawy c++ w pigułce.

Wstęp do programowania obiektowego, wykład 7

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Wskaźniki. Programowanie Proceduralne 1

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

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

Deklaracja i definicja metod, zwracanie wartości z metod, przekazywania parametrów do metod

Programowanie strukturalne i obiektowe

Wskaźniki. Informatyka

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Poprawność semantyczna

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

Wprowadzenie do języka Java

Wstęp do programowania

Struktury czyli rekordy w C/C++

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

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

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

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

Transkrypt:

Języki i paradygmaty programowania 1 studia niestacjonarne 2018/19 Lab 5. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. Struktury danych: kolejka (bufor FIFO), stos (bufor LIFO), lista jednokierunkowa, lista dwukierunkowa. Unie. 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. Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 1

Zbuduj program rozwiązujący równanie. 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; //zmienna 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. typedef struct CO double re; double im; COMPLEX; 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. struct student char *imie; char *adres; double stypendium; ; Zapisz te dane do tablicy struktur i wybierz spośród wszystkich osób tego studenta który pobiera największe stypendium. 12. Zapoznaj się ze strukturami danych: kolejka (FIFO), stos (LIFO), lista jednokierunkowa, lista dwukierunkowa. 13. Zaimplementuj listę jedno- i dwukierunkową (w osobnych projektach) bazując na strukturach języka C (struct). W pliku tekstowym zapisane są następujące dane o wielu studentach: imię, nazwisko, rok urodzenia, adres zamieszkania, kwota stypendium. Zapisz te dane do listy struktur i napisz funkcje pozwalające na: a) Inicjalizację listy odczyt danych z pliku; b) Wybranie spośród wszystkich osób tego studenta który pobiera największe stypendium c) Wyświetlania zawartości listy; d) Dodania elementu na początek listy; e) Dodania elementu na koniec listy; f) Zliczania ilości elementów listy; g) Usunięcia elementu z początku listy; h) Usunięcia elementu z końca listy. Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 5

Implementacja niektórych funkcjonalności (np. h) będzie uciążliwa szczególnie w przypadku listy jednokierunkowej - proszę wspomagać się dodatkowymi wskaźnikami tymczasowymi i przeszukiwaniem listy od początku. 14. Unia - rodzaj typu danych, który pozwala na różną interpretację zaalokowanego obszaru pamięci. Składowe unii wskazują zawsze na początek zaalokowanego obszaru. Obszar ten ma rozmiar największej składowej unii. Ze względu na różnice w architekturach komputerów jak i samych kompilatorach języka C, typ ten jest nieprzenaszalny, tzn. ten sam program skompilowany przez inny kompilator może dać zupełnie inne wyniki, np. (za Wikipedia): union nazwa_unii char tablica_znakowa[4]; int wartosc; ; u.wartosc = 0x44434241; W u.tablica_znakowa znalazł się napis: 'ABCD' w przypadku procesora Intel, kompilator 32-bitowy 'AB' w przypadku procesora Intel, kompilator 16-bitowy dla DOS-u 'DCBA' w przypadku procesora Motorola. 15. Stwórz strukturę składającą się z dwóch pól typu int8. Utwórz unię, której pierwszy element będzie typu struktury a drugi typu int16. Zainicjuj wystąpienie unii i przypisz wartości do pól struktury ( int8) z zakresu od 0 do 255 (dlaczego z takiego zakresu?) Wyświetl elementy struktury i element unii (typu int16) w postaci szesnastkowej: "%x\n". Co zaobserwowałaś/eś? Zapoznaj się z problemem big-endian/little-endian. Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 6