środa, 20 listopada 2013

Język C++ ( Pętle )

WPROWADZENIE

Pętla umożliwia cykliczne wykonywanie ciągu instrukcji określoną liczbę razy, do momentu zajścia pewnych warunków  lub w nieskończoność. Po prostu służy do powtarzania instrukcji, które chcemy aby się wykonały więcej niż raz bez konieczności ich wielokrotnego pisania w kodzie. 
Dzięki temu możemy na przykład w bardzo łatwy i krótki sposób wypisać na przykład ten sam komunikat kilka razy lub pobrać od użytkownika 100 zmiennych. 
Dlatego przy pomocy pętli nasz kod jest krótszy, czytelniejszy i łatwiejszy w utrzymaniu. 

W dzisiejszym temacie przedstawię:

 1. Pętle (kod + schemat blokowy + przykład); 
 2. Zagnieżdżanie pętli (pętla w pętli); 
 3. Instrukcja break i continue; 
 4. Trzy przykładowe programy z pętlami; 

PĘTLA - WHILE

Dopóki warunek jest spełniony (czyli wartość logiczna wynosi true) dopóty pętla będzie powtarzała instrukcję (lub blok instrukcji.
Blok instrukcji umieszczony w pętli while może się nie wykonać ani razu jeżeli wartość logiczna warunku przy pierwszym wejściu w pętlę będzie fałszywa. Jest to kluczowa, a zarazem jedyna różnica pętli while od pętli do ... while

#kod




#schemat blokowy

File:While-loop-diagram.svg

#przykład





PĘTLA - FOR

Używamy  jej praktycznie zawsze, gdy znamy ilość danych, jaką mamy wczytać, wypisać lub zmienić. Jeśli chcemy policzyć średnią z określonej liczby liczb, wczytać określoną ilość danych z pliku lub wypisać określoną ilość danych na ekran, pętla for jest do tego po prostu idealna.  
Za pomocą pętli for możemy wykonywać dokładnie te same rzeczy co za pomocą pętli do...while. Jednak każda pętla jest znacznie wygodniejsza od pozostałych w określonych sytuacjach.


#kod



#schemat blokowy

File:CPT-For-loop-diagram-complex.svg

#przykład





PĘTLA - DO ... WHILE

Ta pętla podobnie jak pętla for jak  i wszystkie pozostałe pętle, umożliwi nam powtórzenie określonych operacji tak długo jak warunek końcowy jest spełniony. 
W przypadku pętli do ... while pierwsze wykonywana jest lista instrukcji, następnie jest sprawdzany warunek. Pętla wykonuje się do momentu, gdy warunek końcowy będzie fałszywy. 
W odróżnieniu od innych pętli,  lista instrukcji pętli do ... while wykona się co najmniej raz.


#kod


#schemat blokowy

File:Do-while-loop-diagram.svg

#przykład


ZAGNIEŻDŻANIE - PĘTLI W PĘTLI

Zagnieżdżanie pętli sprowadza się do umieszczania jednej pętli wewnątrz drugiej (czy też kolejnej) pętli.







PRZERYWANIE PĘTLI - BREAK

Ta instrukcja pozwoli nam przerwać działanie jednej z pętli - czyli jeżeli gdzieś w pętli wystąpi instrukcja break to program bezwarunkowo zakończy swoje działanie.



















POMIJANIE PĘTLI - CONTINUE

Instrukcja ta kończy działanie przebiegu kodu pętli - czyli jeżeli gdzieś w pętli wystąpi instrukcjacontinue to program pomija instrukcje występujące po niej i przystępuje do ponownego sprawdzenia warunku. Instrukcja ta powoduje przedwczesne, bezwarunkowe zakończenie wykonania wewnętrznej instrukcji pętli i podjęcie próby realizacji następnego cyklu pętli.


















3 PRZYKŁADOWE PROGRAMY Z PĘTLI

#przykład1












#przykład2











#przykład3



Język C++ ( Funkcje )

WPROWADZENIE

W matematyce pod pojęciem funkcji rozumiemy twór, który pobiera pewną liczbę argumentów i zwraca wynik. Jeśli dla przykładu weźmiemy funkcję sin(x) to x będzie zmienną rzeczywistą, która określa kąt, a w rezultacie otrzymamy inną liczbę rzeczywistą - sinus tego kąta
Funkcja w języku C/C++  to podprogram, który może być wykorzystywany wielokrotnie w naszej aplikacji, a także wykorzystuje się go do podziału dużego programu na mniejsze co jest łatwiejszy do implementacji. Jeśli w naszym programie jakaś czynność jest wykonywana wielokrotnie, możemy ją napisać raz (w postaci funkcji) i w odpowiedniej sytuacji odwoływać się do niej.
Argumentami są natomiast dane przekazywane do funkcji.

W dzisiejszym temacie przedstawię:

 1. Budowa funkcji i przykłady; 
 2. Wywołanie funkcji; 
 3. Funkcja typu VOID
 4. Przekazywanie argumentów do funkcji; 
 5. Zmienne lokalne i globalne funkcji; 
 6. Przydatne funkcje dostępne w rożnych bibliotekach
 7. Funkcje rekurencyjne;
 8. Odpowiedzi na ciekawe pytania;
 9. Przykładowe programy wykorzystujące funkcje; 

BUDOWA FUNKCJI

Każda funkcja posiada trzy własności:
1. posiada nazwę;
2. może posiadać dowolną liczbę argumentów wejściowych (lub może nie mieć żadnego, jeśli tego     nie chcemy).
3. zwraca dane (lub nie jeśli tego nie chcemy);

Przykład 1 - funkcja obliczająca pole kwadratu, przyjmująca jeden argument typu int, zwracająca wynik typu int :
Przykład 2 - funkcja obliczająca pole prostokąta, przyjmująca dwa argumenty typu float, zwracająca wynik typu float:


WYWOŁYWANIE FUNKCJI

Wywoływanie funkcji jest bardzo proste - wystarczy wpisać jej nazwę i przekazać wartości do funkcji. Ogólna postać wywołania funkcji wygląda następująco:

Przykład 1


FUNKCJA TYPU VOID

Najprostsza funkcja w językach C i C++, która nie przyjmuje argumentów i nie zwraca wartości. Słowo kluczowe void informuje kompilator, że funkcja nie zwraca żadnej wartości.Wewnątrz klamr umieszczamy kod, który ma się wykonać w chwili gdy zostanie wywołana funkcja.
Przyjęło się, że procedura od funkcji różni się tym, że ta pierwsza nie zwraca żadnej wartości.

PRZEKAZYWANIE ARGUMENTÓW DO FUNKCJI

#przez wartość



Najpopularniejszą metodą budowania funkcji jest przekazywanie argumentów przez wartość. Funkcja musi zawierać argumenty wraz z ich typami oddzielone przecinkami. Kiedy przekazujemy do funkcji jakąś zmienną, zostaje utworzona w pamięci jej kopia, czyli wszystko co dzieje się wewnątrz funkcji odbywa się tak na prawdę na kopii zmiennej przekazanej w argumencie poprzez wartość.

#przez referencję


Przekazywanie argumentów przez referencję występuje jedynie w języku C++. W funkcji tworzymy dowolną ilość argumentów wraz z typami. Nazwy argumentów poprzedzone są ampersandem (&). Zmienne wewnątrz funkcji nie są kopią, oznacza to że operując na zmiennych referencyjnych operujemy także na zmiennej oryginalnej z pod której wywołana została funkcja.

ZMIENE LOKANLNE I GLOBALNE FUNKCJI

Zmienna lokalna to zmienna o zasięgu obejmującym pewien blok, podprogram czyli znajduje się w funkcji, wewnątrz, której została zdefiniowana. Nie jest widoczna na zewnątrz funkcji (czyli np. w wywołującym ją programie). Jeśli zmienna lokalna ma w podprogramie taką samą nazwę jak zmienna globalna, to w podprogramie nastąpi przesłonięcie zmiennej globalnej przez tę lokalną i zmienna globalna wewnątrz takiego podprogramu nie będzie widoczna.

Zmienna globalna to zmienna istniejąca przez cały czas życia programu i widziana z wielu miejsc w programie.Widoczna w całym obszarze programu od momentu jej zadeklarowania.Czyli jest to zmienna deklarowana w każdym bloku nadrzędnym do tego w którym jest umieszczony podprogram.

PRZYDATNE FUNKCJE DOSTĘPNE W ROŻNYCH BIBLIOTEKACH

#biblioteka: <stdio.h> 

printf - formatowanie danych wyjściowych
scanf - formatowane przekształcanie danych wejściowych

fopen - funkcja otwiera plik

#biblioteka: <stdlib.h> 

div - obliczanie ilorazu oraz reszty dzielenia liczb całkowitych
exit normalne zakończenie programu
srand - generator liczb losowych

#biblioteka: <math.h> 

sqrt - pierwiastek kwadratowy
cbrt - pierwiastek sześcienny
isnormal - sprawdza czy argument jest liczbą rzeczywistą

#biblioteka: <string.h> 

strcat - połączenie dwóch łańcuchów
strlen - oblicza długość łańcucha
strncpy - kopiuje łańcuch znaków

FUNKCJE REKURENCYJNE

Funkcje rekurencyjne są to funkcje wywołujące same siebie. Jedną z takich funkcji rekurencyjnych będzie funkcja obliczających silnię z liczby. Silnia to iloczyn kolejnych liczb mniejszych od tej liczby i tej liczby. Oto prosty program korzystający z silni:

ODPOWIEDZI NA CIEKAWE PYTANIA

#Jak zwrócić kilka wartości?

Aby funkcja zwracała kilka wartości należy na przykład zwrócić tablicę, strukturę albo obiekt.

#Jak można przeciążyć funkcję?

Przeciążyć funkcje można poprzez przeciążanie nazw funkcji. Polega to na wielokrotnym wykorzystaniu takiej samej jej nazwy, różniącej się tylko typem i ilością argumentów. Funkcje mogą mieć różne zwracane wartości, natomiast takie same argumenty wynikiem będzie zwrócenie błędu przez kompilator.