Język ANSI C Funkcje Wykład: Programowanie komputerów

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Język C/C++ Funkcje.
Programowanie obiektowe
C++ wykład 13,14,15 (16/23/ ) STL.
Mgr inż.Marcin Borkowski Podstawy Java Część II
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Programowanie obiektowe
Wzorce.
Prowadzący: mgr inż. Elżbieta Majka
Programowanie I Rekurencja.
Static, const, volatile.
Języki programowania C++
PROGRAMOWANIE STRUKTURALNE
formatowanie kodu źródłowego
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Funkcje Modularyzacja : program główny , funkcje Funkcje :
Instrukcje Instrukcja : definicja obliczenia i określenie sposobu wykonania tego obliczenia. Program : ciąg instrukcji wykonywanych kolejno od pierwszej.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Podstawy informatyki Informatyka stosowana Prowadzący: Grzegorz Smyk
Podstawy informatyki Wirtotechnologia – Funkcje Grupa: 1A
Kurs Pascala – spis treści
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
Podstawy programowania PP – WYK2 Wojciech Pieprzyca.
Java – programowanie obiektowe
Grupa 1 Sposoby rozwiązywania układów równań stopnia I z dwiema i z trzema niewiadomymi. Wykresy funkcji w szkole ponadgimnazjalnej.
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Podstawy programowania
Metody Programowania Wykład
POJĘCIE ALGORYTMU Pojęcie algorytmu Etapy rozwiązywania zadań
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Podstawy programowania
Programowanie strukturalne i obiektowe
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
Podstawy programowania. Język C i C++– podstawy Temat: 1
Instrukcje sterujące część 2
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 c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
STEROWANIE Ale nie tylko
Andrzej Repak Nr albumu
Programowanie strukturalne i obiektowe
Podstawy informatyki 2013/2014
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Podstawy języka Instrukcje - wprowadzenie
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++
opracowała: Anna Mikuć
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Instrukcje wyboru.
Programowanie proceduralne Podstawy Programowania dla geoinformatyków Wykład 3 Rafał Witkowski, 2015.
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
Wykład 4 Klasa Vec, której konstruktory alokują pamięć dla obiektów 1.Przykład definicji klasy Vec 2.Definicje konstruktorów i destruktora 3.Definicja.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Podstawy informatyki Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
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.
Wskaźniki Elżbieta Labocha.
PODSTAWY INFORMATYKI Wykład 4.
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:

Język ANSI C Funkcje Wykład: Programowanie komputerów Prowadzący: dr inż. Sławomir Nowak

Takie zadanie spełniają w języku C FUNKCJE Wprowadzenie Często istnieje potrzeba wielokrotnego wykonywania tych samych operacji. Łatwiej było by zastąpić wielokrotnie wykonywany fragment przez uniwersalny podprogram, np.: wyznaczający określoną wartość dla zadanych parametrów. Takie zadanie spełniają w języku C FUNKCJE

Przykład: rozwiązywanie układu równań liniowych metodą wyznaczników Algorytm jest następujący: Pobierz współczynniki równań; Oblicz wyznacznik główny W; Jeśli wyznacznik główny jest różny od 0 skocz do 6 Oblicz wyznacznik Wx; Jeśli Wx <> 0 – poinformuj o braku rozwiązań, Wx=0 oznacza nieskończenie wiele rozwiązań. W obu przypadkach zakończ wykonywanie programu. Oblicz Wx i Wy, x=W/Wx, y=W/Wy, wypisz rezultaty wyjściowe i zakończ program.

#include <stdio.h> double Wyzn (double a1, double a2, double b1, double b2) { return a1*b1-a2*b2; } int main(void){ double a1=1, a2=1, a3=2, b1=-1, b2=1, b3=4, W, x, y; W = Wyzn(a1, a3, b1, b3); if(!W) if (!Wyzn(a1, a3, b1, b3)) puts (”\n Uklad rownan zależnych”); else puts(”\n Układ równań sprzecznych”); x = Wyzn(a3, b3, a2, b2)/W; y = Wyzn(a1, a3, b1, b3)/W; printf(”\n x=%lf \n y=%lf”, x, y); return 0;

Można także, aby program uczynić bardziej uniwersalnym, zamknąć część programu obliczającą wynik równań w osobnej funkcji: unsigned RozwUklad( double a1, double a2, double a3 double b1, double b2, double b3, double * x, double * y) { double W; W = Wyzn(a1, a3, b1, b3); if (W != 0) if(!Wyzn(a1, a3, b1, b3)) return 0xffff; else return 0; } * x = Wyzn(a3, b3, a2, , b2) / W; * y = Wyzn(a1, a3, b1, b3) / W; return 1;

Przykład: rozwiązywanie układu równań liniowych metodą wyznaczników Wywołanie programu przybierze wtedy postać: int main (void) { double a1=1, a2=1, a3=2, b1=-1, b2=1, b3=4, W, x, y; unsigned lrozw = RozwUklad(a1, a2, a3, b1, b2, b3, &x, &y); ... wypisywanie wyników w zależności od liczby rozwiązań ... }

Czemu stosujemy funkcje? Przejrzystość struktury programu; Oszczędność czasu – raz napisana funkcja może być wielokrotnie wykorzystywana; Oszczędność pamięci – funkcja umieszczana jest w jednym miejscu pamięci;

Definicja funkcji Aby korzystać z funkcji, musi być ona zdefiniowana. Definicja obejmuje: Opcjonalne słowa kluczowe extern, static, inline; typ wartości funkcji; identyfikatora (nazwy) funkcji; listy parametrów; Ciała funkcji w nawiasach klamrowych.

Słowa kluczowe extern, static, inline extern - informuje, że funkcja może być odstępna poza modułem programu (domyślnie) static – funkcja dostępna tylko w module, w którym ją zdefiniowano inline – dostępne w C++, oznacza, że skompilowane ciało funkcji umieszczane jest w miejscu jej wywołania, co powinno przyspieszyć wykonywanie programu

Typ wartości Typ wartości funkcji. Jeśli typ został pominięty, domyślnie przyjmuje się int Dozwolone są wszelkie typy z wyjątkiem tablic i funkcji

Typ wartości Typ wartości funkcji. Jeśli typ został pominięty, domyślnie przyjmuje się int Dozwolone są wszelkie typy z wyjątkiem tablic i funkcji

Nazwa funkcji W przypadku nazwy funkcji obowiązują te same zasady, co w przypadku identyfikatorów zmiennych. W języku C w obrębie jednego modułu nazwy funkcji nie mogą się powtarzać.

Lista deklaracji parametrów Lista parametrów składa się z deklaracji parametrów rozdzielonych przecinkami. Deklaracja parametru wygląda identycznie jak deklaracja zmiennej określonego typu. Dopuszczalne jest użycie specyfikatora const

Ciało funkcji Ciało funkcji zbudowane jest z instrukcji ujętych w nawiasy klamrowe. W ciele funkcji następuje przekazanie wyniku funkcji przez użycie słowa kluczowego return wyrażenie. Instrukcja ta kończy działanie funkcji. Jeśli typ funkcji został określony jako void działanie funkcji może być zakończone bezparametrowym wyrażeniem return. W tym przypadku słowo return można też pominąć.

Definicje funkcji - przykłady Funkcja oblicza minimum dwóch elementów double min (double x, double y) { return x < y ? x : y; }

Definicje funkcji - przykłady Funkcja oblicza sumę elementów w tablicy double suma (double *tab, unsigned numel) { int i; double suma = 0; for (i=0; i<numel; i++) suma +=tab[i]; return suma; }

Deklaracja funkcji Funkcja w momencie wywołania musi być znana kompilatorowi. Jeśli jej wywołanie poprzedza definicję funkcji, musi być ona przynajmniej wcześniej zadeklarowana. Taką deklarację nazywa się prototypem funkcji. Prototyp zawiera nazwę i typ funkcji oraz opis jej parametrów. Opis parametrów może być uproszczony (ograniczać się tylko do typów zmiennych).

Deklaracja funkcji - przykłady void funkcja (void); fun1 (int a); double max (double aa, double bb); int wyzn (int, int, int, int); int dlugosc (char *);

Wywołanie funkcji ma postać: nazwa funkcji(lista_parametrów_wywołania);

Przekazywanie parametrów i zwracanie wartości Zmienne globalne Funkcja Parametry Wartości Modyfikacja zmiennych globalnych

Przekazywanie parametrów i zwracanie wartości Jeśli chodzi o formalne przekazywanie parametrów do funkcji w języku C mamy dwie możliwości: przekazywanie parametrów przez wartość przekazywanie parametrów przez wskaźnik W języku C++ pojawiła się możliwość przekazywanie parametrów przez referencje

Kolejny przykład – funkcja silnia double silnia (unsigned n) { double wynik=1; for (; n ; --n) wynik *=n; return wynik;

Różnica pomiędzy przekazywaniem przez wartość a przez wskaźnik: Chcemy napisać funkcję swap, zamieniającą miejscami wartości dwóch zmiennych a i b. void swap(int x, int y){ int temp; temp = x; x = y; y = temp; } void swap(int *px, int *py){ temp = *px; *px = *py; *py = temp; Niepoprawnie

Kolejny przykład – funkcja sortuj – przekazywanie przez wskaźnik void sortuj (int *tab, int numel){ int nieuporz = 1, i; --numel; while (nieuporz) { nieuporz = 0; for (i=0; i<numel; ++i) if (!(tab[i]<tab[i+1])) int hh=tab[i]; tab[i] = tab[i+1]; tab[i+1] = hh; nieuporz = 1; } }}

Kolejny przykład – funkcja sortuj – przekazywanie przez wskaźnik wywołanie: ... int tab[10] = {9,8,4,3,5,4,2,7,8,10}; sortuj(tab, 10);

Funkcja main i jej parametry Dotychczas wykorzystywaliśmy main jako funkcję bezparametrową. Kod wynikowy programu, zapisany w postaci np. pliku *.exe może być wykorzystany z poziomu systemu operacyjnego. Jeśli chcemy z wiersza poleceń przekazać jakieś parametry, to możemy to zrobić w sposób prosty i naturalny, definiując main jako: int main(int argc, char * argv[]) argc – liczba parametrów argv[0] – ścieżka dostępu argv[1]..argv[argc-1] – kolejne parametry w formie tekstowej (łańcuchy znaków)

Funkcja rekurencyjne Niektóre pojęcia możemy zdefiniować jako odwołania do „siebie samego”. Takie odwołania nazywamy odwołaniami rekurencyjnymi. Np.. funkcję silnia możemy zdefiniować jako: n! = (n-1)! * n, co w języku C możemy zapisać jako: double silnia (unsigned n) { return n ? n*silnia(n-1) : 1.0; } Uwaga: musi istnieć „warunek stopu”!

Podsumowanie