Podstawy programowania PP – LAB4 Wojciech Pieprzyca.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

Język C/C++ Funkcje.
Wstęp do programowania
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 2 Wojciech Pieprzyca.
Dzisiejszy wykład Wyjątki.
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 4 Wojciech Pieprzyca.
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 3 Wojciech Pieprzyca.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Prowadzący: mgr inż. Elżbieta Majka
Języki programowania C++
DZIEDZICZENIE · klasy bazowe i klasy pochodne WyświetlAutora( ) Autor
Metody numeryczne Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Wskaźniki. Definiowanie wskaźników Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Real; Przykłady: Wskaźnik.
Struktury.
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Podstawy programowania PP – WYK3 Wojciech Pieprzyca.
Podstawy programowania PP – WYK2 Wojciech Pieprzyca.
Podstawy programowania PP – LAB6 Wojciech Pieprzyca.
Podstawy programowania
Podstawy programowania PP - LAB1 Wojciech Pieprzyca.
Podstawy programowania PP – LAB5 Wojciech Pieprzyca.
#include #include main () { cout
Programowanie obiektowe W2
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
Pracę wykonali: Rafał Chmielorz Michał Sporek Jan Nowik
Podstawy programowania
Metody Programowania Wykład
Podstawy programowania II
Podstawy informatyki (4)
Programowanie obiektowe III rok EiT
Podstawy programowania w języku C i C++
Podstawy programowania
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Float; Przykład: Wskaźnik przechowuje adres obiektu wskazanego.
Wczytywanie danych z klawiatury, komentarze, zmienne.
Podstawy programowania w języku C i C++
Informatyka I Wykład 10 WSKAŹNIKI I ADRESY Jerzy F. Kotowski.
Łódź, 3 października 2013 r. Katedra Analizy Nieliniowej, WMiI UŁ Podstawy Programowania Złożona składnia języka C++
Procedury i funkcje.
Przekazywanie argumentów
Podstawy programowania
Jerzy F. Kotowski1 Informatyka I Wykład 8 STRUKTURA PROGRAMU n Funkcje n Klasy zmiennych n Projekt.
Podstawy programowania w języku C i C++
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Java – coś na temat Klas Piotr Rosik
Programowanie strukturalne i obiektowe
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Programowanie obiektowe 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Składnia pętli do … while do instrukcja while (wyrażenie); gdzie: instrukcja – instrukcja pojedyncza lub blok instrukcji wyrażenie – wyrażenie przyjmujące.
Programowanie strukturalne i obiektowe C++
Funkcje w C++ Funkcja – wydzielony fragment kodu użyty w programie (raz lub więcej razy) spełniający określone zadanie, np. obliczenie średniej ocen.
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Programowanie proceduralne Podstawy Programowania dla geoinformatyków Wykład 3 Rafał Witkowski, 2015.
Przeładowanie funkcji. Dotychczas wiedzieliśmy, że: w danym zakresie ważności może być tylko jedna funkcja o danej nazwie. Kompilator języka C++ daje.
Funkcje - rekurencja Zajęcia 8. Funkcje - definicja Ogólna postać funkcji w C++: typZwracany nazwaFunkcji(listaParametrówWejściowychFunkcji) { ciało funkcji.
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Mapa STL – C++. Problem polega na tym, że najczęściej chcielibyśmy przechowywać w zbiorze elementy jakiegoś bardziej złożonego typu, których on nie będzie.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
Przycisk uruchamiający napisany przez nas program
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Zapis prezentacji:

Podstawy programowania PP – LAB4 Wojciech Pieprzyca

Funkcje Funkcja jest częścią programu spełniającą określone zadanie. Cały program zwykle składa się z wielu funkcji (podprogramów). Pozwala to podzielenie programu na wiele mniejszych, niezależnych fragmentów. Funkcja może na wejściu przyjąć dowolną liczbę argumentów. Każda funkcja musi zwrócić na wyjściu jakąś wartość. W szczególności, gdy nie istnieje potrzeba zwracania żadnej konkretnej wartości, zwracana jest tzw. wartość pusta typu void.

Definicja funkcji Definicja funkcji polega na określeniu typu zwracanego przez funkcję, jej nazwy oraz listy argumentów. W ramach definicji określa się również działanie funkcji tzw. ciało funkcji. typ nazwa(lista argumentów) { ciało funkcji return typ; } Lista argumentów może być pusta () lub też przyjąć dowolnie wiele wartości: (typ zm1,typ zm2,…, typN zmN) Każdy argument musi mieć określony swój typ i nazwę. Zwracana wartość określana jest po słowie return. Typ zwracanej wartości musi zgadzać się z typem podanym w nagłówku funkcji.

Przykłady void funkcja1() Funkcja nie zwracająca żadnej wartości i nie przyjmująca żadnych argumentów. void funkcja2(int x) Funkcja nie zwracającą żadnej wartości i przyjmującą jeden argument wartość x typu całkowitego. int funkcja3(float x) Funkcja zwracająca wartość całkowitą i przyjmująca jako argument wartość x typu rzeczywistego. double funkcja4(int x, char y) Funkcja zwracająca wartość rzeczywistą i przyjmująca jako argumenty wartość x typu całkowitego i wartość y typu znakowego.

Przykład funkcji – wzór Herona float Heron (float a, float b, float c) { float p = (a+b+c)/2; return sqrt(p*(p-a)*(p-b)*(p-c)); } Int main() { float a,b,c; cout << Podaj a: ; cin >> a; cout << Podaj b: ; cin >> b; cout << Podaj c: ; cin >> c; cout << Pole trojkata = << Heron(a,b,c); }

Uwagi do programu Program oblicza pole trójkąta zgodnie ze wzorem podanym przez Herona. Obliczanie pola odbywa się w funkcji o nazwie Heron. Funkcja ta przyjmuje trzy argumenty, którymi są długości boków trójkąta a,b,c. Wszystkie te wartości są typu rzeczywistego float. Jako typ zwracanej wartości również określono typ rzeczywisty float. Zwrot wartości funkcji następuje poprzez instrukcję return. Wartość ta określana jest poprzez wzór sqrt(p*(p-a)*(p- b)*(p-c)). Funkcja główna w naszym programie zapytuje użytkownika o długości boków a,b,c po czym przekazuje je jako argumenty wejściowe do funkcji Heron. Funkcja Heron z kolei zwraca obliczoną wartość pola trójkąta, która w funkcji main jest wyświetlana na ekranie.

Przekazywanie argumentów przez wartość (I) Argumenty do funkcji mogą być przekazywane na dwa sposoby: 1.Przez wartość, 2.Przez referencję. Najpierw omówimy sposób przekazywania zmiennej przez wartość. Przekazywanie przez wartość charakteryzuje się tym, iż do funkcji nie jest przekazywany oryginał podawanej zmiennej, a jedynie kopia jej wartości. Konsekwencją tego faktu jest to, że jakiekolwiek zmiany dokonane na zmiennej w ramach funkcji są ważne tylko do jej zakończenia. Po zakończeniu funkcji, wszelkie odwołania do zmiennej będą wskazywać na oryginalną, niezmienioną wartość.

Przekazywanie argumentów przez wartość (II) void zmien(int liczba) { liczba = liczba+5; cout << Liczba w funkcji: << liczba << endl; } int main() { int liczba = 10; cout << Liczba przed wywolaniem funkcji: << liczba << endl; zmien(liczba); cout << Liczba po wywolaniu funkcji: << liczba << endl; } Wynikiem działania programu będzie wyświetlenie wartości 10,15,10. Wynika to z tego, że zmieniona wartość liczby widoczna jest tylko w ramach funkcji zmien.

Przekazywanie argumentów przez referencję (I) W przypadku przekazywanie argumentu przez referencję do funkcji nie trafia sama wartość argumentu, tylko adres komórki pamięci w której ta wartość się znajduję. Wszelkie odwołania w ramach funkcji odnosić się zatem będą do oryginalnej zawartości zmiennej. Należy zatem zauważyć, że w przypadku przekazywania argumentów przez referencje, wszelkie zmiany dokonywane na zmiennych będą widoczne także po zakończeniu funkcji. Przekazywanie argumentów przez referencję uzyskuje się poprzedzając w nagłówku funkcji nazwy zmiennych znakiem ampersand (&). Samo wywołanie takiej funkcji pozostaje bez zmian.

Przekazywanie argumentów przez referencję (II) void zmien(int &liczba) { liczba = liczba+5; cout << Liczba w funkcji: << liczba << endl; } int main() { int liczba = 10; cout << Liczba przed wywolaniem funkcji: << liczba << endl; zmien(liczba); cout << Liczba po wywolaniu funkcji: << liczba << endl; } Wynikiem działania programu będzie wyświetlenie wartości 10,15,15. Bierze się to stąd iż operacje w funkcji były wykonywane na oryginalnej zawartości zmiennej liczba.

Ćwiczenia (1) 1.Napisz program, która wyznacza wartość wielomianu ax 2 +bx+c. Program powinien składać się z 2 funkcji. Pierwsza pyta użytkownika o parametry a,b,c,x, a druga oblicza samą wartość wielomianu. 2.Napisz funkcję przyjmującą trzy argumenty. Pierwsze i drugi argument to liczby, a trzeci to nazwa operacji do wykonania. Dozwolone operacje to suma, różnica, iloczyn i iloraz. Funkcja ma zwracać wynik wykonanego wyrażenia. 3.Napisz funkcję, która sprawdza czy dany trójkąt o podanych bokach a, b i c jest równoboczny, równoramienny lub prostokątny. 4.Napisz dwie funkcje. Jedna wyznacza minimum a druga maksimum dwóch podanych liczb.

Funkcję operujące na tekście (1) Pod pojęciem tekstu rozumiemy w tym przypadku ciąg znaków nazywany także łańcuchem tekstowym. Tekst przechowywany jest w postaci tablicy znaków. Przykład deklaracji takiej tablicy znajduje się poniżej: char tekst[20]; W tej tablicy możemy zapisać do 20 znaków. Do zapisu może posłużyć nam funkcja strcpy kopiująca podany tekst do miejsca docelowego np. strcpy(tekst,Przykladowy krotki tekst); Każda litera tekstu zapisana jest w osobnej komórce tablicy. Oznacza to, że do pierwszej litery możemy odwołać się pisząc tekst[0]. Należy pamiętać o tym, że tablice w C++ są numerowane od 0, a więc indeksy dla tablicy 20 elementowej rozpoczynają się od 0 a kończą na 19.

Funkcję operujące na tekście (2) Możliwa jest także inicjalizacja (przypisanie tekstu) do tablicy znakowej już w trakcie jej deklaracji np. char tekst[20] = Super tekst; Także bez podawania wielkości tablicy takie przypisanie będzie poprawne, wówczas rozmiar tablicy zostanie dostosowany do rozmiaru podanego tekstu np. char tekst[] = Super tekst; W tym przypadku tekst składa się z 11 znaków i taki też będzie rozmiar tablicy. Do łączenia tekstów (tzw. konkatenacja) służy funkcja strcat. Składnia: strcat(tekst1, tekst2); Przykład: tekst = strcat(kot,w butach);

Funkcję operujące na tekście (3) Długość łańcucha tekstowego można sprawdzić za pomocą funkcji strlen(napis). Przykład: char tekst[20] = WSIiZ; cout << strlen(tekst); Powyższy przykład wyświetli liczbę 5 oznaczającą długość podanego tekstu WSIiZ. Brany jest zatem pod uwagę nie rozmiar samej tablicy w której przechowywany jest tekst, ale efektywna długość samego ciągu znaków. Kolejna funkcja to strcmp(tekst1,tekst2). Sprawdza ona czy podane dwa teksty są identyczne. Jeżeli tak to zwraca wartość 0, w przeciwnym razie wartość różną od 0. Przykład: if (strcmp(tekst,ala)==0) cout << Zmienna tekst to ala;

Funkcję operujące na tekście (4) Funkcja strstr(tekst1,tekst2) poszukuje ciągu znaków tekst2 w tekst1. Jeżeli tekst zostanie znaleziony to funkcja zwróci wskaźnik do pierwszego wystąpienia tekstu, jeżeli tekst nie zostanie odnaleziony to funkcja zwróci 0. Przykład: if (strstr(tekst,ala)!=0) cout << Zmienna tekst zawiera napis ala; Ponieważ funkcja wczytującą dane z klawiatury do zmiennej (cin) potrafi operować tylko na pojedynczym wyrazie (bez spacji) to wprowadzono dodatkową funkcję gets (get string – czyli pobierz ciąg znaków). Funkcja ta ma postać: gets(zmienna) i powoduje zapis do zmiennej całego tekstu wpisanego z klawiatury. Przykład: cout << Podaj imie i nazwisko; gets(dane); cout << dane;

Ćwiczenia (2) 1.Napisz funkcję, która przyjmuje jako parametry dwa łańcuchy tekstowe, a następnie: - pokaże długość pierwszego i drugiego łańcucha, - połączy oba łańcuchy w jeden i go wyświetli, - sprawdzi czy łańcuchy są takie same. 2.Napisz funkcję, która przyjmuje jako parametry dwa łańcuchy tekstowe (dany,szukany), a następnie sprawdza za pomocą funkcji strstr czy tekst szukany znajduje się w tekście danym. Proszę wykorzystać funkcję gets.

Funkcje rekurencyjne (1) Rekurencja dotyczy przypadków, gdy funkcja wywołuje samą siebie ze swego wnętrza. Oczywiście takie cykliczne wywołanie musi mieć swój koniec, dlatego każda funkcja rekurencyjna posiada warunek zakończenia, kiedy to nie wywołuje się funkcji, a zwraca jakąś konkretną wartość. Przykładem zastosowania funkcji rekurencyjnej może być obliczanie silni. Silnia to iloczyn kolejnych liczb naturalnych od 1 do n, gdzie n to wartość dla której chcemy obliczyć silnię: 0! = 0 1! = 1 n! = n*(n-1)!

Funkcje rekurencyjne (2) Funkcja obliczająca silnię wygląda następująco: int silnia(int n) { if (n==1) return 1; return n*silnia(n-1); } Jak widzimy, wewnątrz funkcji wywołuje ona samą siebie. Różni się jedynie argument przekazywany do funkcji, który za każdym wywołaniem pomniejszany jest o jeden (n-1). Warunkiem kończącym ciąg wywołań funkcji jest wartość n=1 (co zajdzie wówczas, gdy do funkcji zostanie przekazana wartość 1).

Funkcje rekurencyjne (3) Przeanalizujmy ciąg wywołań dla obliczenia wartości 5!. Pierwotne wywołanie silnia(5) silnia(1) = 1 silnia(n) = n*silnia(n-1), dla n>1 a zatem: silnia(5) = 5*silnia(4) = 5*4*silnia(3) = 5*4*3*silnia(2) = = 5*4*3*2*silnia(1) = 5*4*3*2*1 = 120

Ćwiczenia (3) 1.Napisz funkcję rekurencyjną obliczającą dowolny wyraz ciągu Fibonacciego. Ciąg ten ma następującą postać: F(1) = 1 F(2) = 1 F(n) = F(n-1)+F(n-2), dla n>2