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

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Wskaźniki. Informatyka

Funkcja (podprogram) void

Tablice, funkcje - wprowadzenie

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Wstęp do Programowania, laboratorium 02

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

Język C zajęcia nr 11. Funkcje

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Wykład 5: Klasy cz. 3

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

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

Wstęp do informatyki- wykład 11 Funkcje

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

Wstęp do informatyki- wykład 9 Funkcje

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Zmienne, stałe i operatory

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Język C++ zajęcia nr 2

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

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

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Struktury Struktura polami struct struct struct struct

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Język C, tablice i funkcje (laboratorium)

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wstęp do programowania

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

C-struktury wykład. Dorota Pylak

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

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

Część 4 życie programu

Języki i metodyka programowania. Wprowadzenie do języka C

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2

Argumenty wywołania programu, operacje na plikach

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

2 Przygotował: mgr inż. Maciej Lasota

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Programowanie komputerowe. Zajęcia 4

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

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

Wstęp do informatyki- wykład 9 Pętla while, do while,for -pętla w pętli- przykłady Funkcje

Język C++ Różnice między C a C++

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

C-struktury wykład. Dorota Pylak

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

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

Wykład 8: klasy cz. 4

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

Wykład 4: Klasy i Metody

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

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

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

Wstęp do programowania

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

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

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

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. Metody stałe w klasie

PMiK Programowanie Mikrokontrolera 8051

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

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

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

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Wskaźniki w C. Anna Gogolińska

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

1 Podstawy c++ w pigułce.

Laboratorium nr 10. Temat: Funkcje cz.2.

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Programowanie Proceduralne

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

Struktury. Przykład W8_1

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

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Programowanie - wykład 4

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

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

Laboratorium Podstaw Informatyki Strona 1. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 2. Funkcje, operatory i wyrażenia.

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

Transkrypt:

Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych zwracanych po wykonaniu funkcji nazwa identyfikator funkcji w kodzie programu argumenty jedna lub więcej wartości, które zostaną przekazane do użycia przez kod funkcji w postaci wewnętrznych zmiennych lokalnych ciało funkcji instrukcje, które zostaną wykonane po wywołaniu funkcji 41 Argumenty wywołania i zmienne lokalne: kiedy stosujemy funkcje, zmienne zadeklarowane w tych funkcjach mają ściśle określony obszar, w którym są dostępne oraz czas, kiedy w ogóle istnieją: int silnia(int x) int i, wynik = 1; Argumenty wywołania: x Zmienne lokalne: i oraz wynik Zmienne lokalne tworzone wtedy, kiedy wywoływana jest funkcja i istnieją tak długo, póki sterowanie znajduje się w obrębie kodu funkcji Ilekroć wywoływana jest ta sama funkcja, te zmienne są tworzone na nowo. Po wykonaniu ostatniej instrukcji w funkcji zmienne są usuwane. 42 Dostęp do zmiennych lokalnych: Zmienne lokalne dostępne wyłącznie w kodzie funkcji, w której zostały zadeklarowane Mamy dane dwie funkcje: main i silnia. Jeżeli main wywołuje silnia, to: 1. zmienne lokalne main nie są dostępne w kodzie silnia, choć w momencie wywołania silnia zmienne te nie są usuwane 2. po zakończeniu działania silnia nadal można pracować na zmiennych lokalnych main tak długo, póki main nie zakończy działania Jak w kodzie silnia odwołać się do wartości przechowywanych w zmiennych lokalnych main? Przekazując ich wartości do wewnątrz silnia korzystając z argumentów wywołania silnia. 43 Przesłanianie zmiennych: Zmienne zdefiniowane w pliku w obszarze kodu pomiędzy funkcjami są nazywane zmiennymi globalnymi. Są one widziane wewnątrz wszystkich funkcji Zmienne lokalne funkcji mogą mieć taką samą nazwę, jak zmienne globalne: następuje wtedy przesłanianie zmiennych. Korzystając z takiej nazwy zawsze odwołujemy się do zmiennej zdefiniowanej bliżej, tj. zmiennej lokalnej. Przesłanianie dotyczy również argumentów wywołania funkcji. 44 Argumenty wywołania: int silnia(int x) int i, wynik = 1; return wynik; int a,b,c,d,x; a = silnia(b); a = silnia(d); c = silnia(x); W momencie wywołania funkcji silnia tworzona jest wewnątrz funkcji zmienna x, do której kopiowana jest zawartość zmiennej b. Zmiany wartości zmiennej x zadeklarowanej wewnątrz funkcji, które byłyby tam wykonane, nie powodują, że zmieniana jest również wartość zmiennej b x jest tylko kopią ( b i x to dwie różne zmienne). Wartość wyrażenia umieszczonego po return jest wartością wywołania funkcji silnia zwracaną po jej zakończeniu. Wartość ta jest przepisywana do lewej strony równania, w którym nastąpiło wywołanie silnia. 45 1

Użycie funkcji w tekście musi być (powinno być) leksykalnie poprzedzone jej definicją. Dlatego funkcja silnia została w pliku umieszczona przed main Użycie funkcji w tekście musi być leksykalnie poprzedzone jej definicją. Problem: int fun1(int k) x = fun2(k); int fun2(int m) y = fun1(m); 46 47 Definicje i deklaracje funkcji Definicje i deklaracje funkcji Jeżeli w kodzie pojawi się odwołanie do funkcji, której wcześniej nie zdefiniowano, kompilator nie będzie potrafił określić, czy: 1. ta funkcja istnieje gdzieś w kodzie, czy też 2. jest to pomyłka programisty. Deklaracja podanie prototypu, który zawiera informacje o tym, ile i jakie ma parametry oraz jakiego typu wartość zwraca. Deklaracja ma formę nagłówka funkcji, po którym następuje średnik. Kompilator w takim momencie nie potrzebuje pełnej definicji. Wystarczy mu zapewnienie, ze taka funkcja istnieje. Tzn. wystarczy, ze zna jej prototyp. Przykład: int silnia(int); Ta sama funkcja może być deklarowana wielokrotnie. Definicja jej może wystąpić tylko raz. Deklaracje i definicje muszą być ze sobą zgodne. 48 49 Rozwiązanie problemu: W deklaracji nie musimy podawać nazw dla argumentów wywołania. Wystarczy, że określimy prawidłowo typ dla każdego z nich. int fun2(int); /* deklaracja fun2 */ int fun1(int k) x = fun2(k); int fun2(int m) y = fun1(m); 50 Deklaracje funkcji: int silnia(int x); void fun1(int a, int b); void fun2(int a, int b=0, int c=3.14); int fun3(void); a = silnia(b); silnia(b); fun1(x,y); fun2(x,y,z); fun2(x,y); fun2(x); a = fun3(); fun3(); 51 2

Przekazywanie argumentu przez wartość i wskaźnik void fun(int x, int *y) x = 2*x; *y = 4* (*y); x przekazywany przez wartość pracuje na kopii lokalnej y przekazywany przez wskaźnik pracuje na adresie oryginału int a=1,b=2; fun(a,&b); Przekazywanie tablic w argumencie wywołania funkcji void funtab1(double t[]) double tab[] = 0 ; /* tablica zainicjowana zerami */ funtab1(tab); funtab1 t jest typu double* przy czym rozmiar tablicy nie jest znany 52 53 Argumenty wywołania programu int main(int argc, char *argv[]) argc liczba łańcuchów tekstowych, jakie zostały podane przy wywołaniu programu (z nazwą programu włącznie) argv tablica z wartościami tekstowymi, argv[0] nazwa wywołanego programu np.: dir /O:E /P /Q argv[0] : dir argv[1] : /O:E argv[2] : /P argv[3] : /Q argc : 4 54 ISO/ANSI C Łańcuchy tekstowe Ciąg znaków zakończony znakiem zero. Deklaracje: Wprost: Jako tablica: "to jest napis" char napis[20] = "i to jest napis"; Przykłady użycia: printf("to jest napis"); printf("%s", "to też jest napis"); printf("%s", napis); Tablica napis jest dłuższa, niż jej treść. Skąd program wie, ile znaków wypisać w oknie konsoli? Zawartość tablicy napis : t o j e s t n a p i s '\0'?????? %s wypisuje wszystkie znaki aż do znaku zera: printf("%s",napis); %c wypisuje jeden znak z tej tablicy: printf("%c", napis[1]); Zmiana zawartości tablicy: Napis[7] = \0 ; Skutek: t o j e s t '\0' n a p i s '\0'?????? 56 57 3

Zmiana zawartości tablicy: Napis[7] = \n ; Skutek: t o j e s t '\n' n a p i s '\0'?????? Różne metody deklaracji i inicjalizacji tablic z C-napisami: char napis1[] = "to jest napis"; char napis2[] = 't','o',' ','j','e','s','t','\0'; char napis3[20] = '\0'; printf("%s", napis); W oknie konsoli pojawi się tekst w dwóch linijkach: To jest napis 58 59 Biblioteka #include <string.h> Biblioteka #include <string.h> Kopiowanie: char napis[20]; strcpy(napis, "to jest napis"); Łączenie: strcat(napis1, napis2); Porównanie (pod względem wartości kodu ASCII znaków): wynik = strcmp(napis1, napis2); if (wynik<0). /* pierwszy jest mniejszy */ else if (wynik>0). /* drugi jest mniejszy */ else. /* są równe */ 60 61 C struktury to struktury podlegające regułom języka C (różniącym się od C++) Struktura jest to typ danych definiowany przez użytkownika. Jest kolekcją nazwanych zmiennych składowych (pól), które mogą być różnych typów: ISO/ANSI C Struktury i unie struct Nazwa Typ1 sklad1; Typ2 sklad2; /* tutaj ewentualne inne pola */ ; 63 4

Przykład #1: struct film_t ; int main() struct film_t S; strcpy(s.tytul, "Deadpool"); S.rok = 2016; Przykład #2: struct film_t ; int main() struct film_t S[10]; strcpy(s[0].tytul, "Deadpool"); S[0].rok = 2016; strcpy(s[1].tytul, "Ben-Hur"); S[1].rok = 2016; strcpy(s[2].tytul, "Geniusz"); S[2].rok = 2016; 64 65 Struktury można zagnieżdżać: struct film_t ; struct przyjaciel_t char imie[80]; char email[80]; struct film_t ulubiony_film[10]; ; struct film_t ; struct przyjaciel_t char imie[80]; char email[80]; struct film_t ulubiony_film[10]; ; struct film_t f1; struct przyjaciel_t p1; strcpy(f1.tytul, "Nerve"); f1.rok = 2016; strcpy(p1.imie, "Eugeniusz"); strcpy(p1.email, "gienio@o2.pl"); strcpy(p1.ulubiony_film[0].tytul, f1.tytul); p1.ulubiony_film[0].rok=f1.rok; strcpy(p1.ulubiony_film[1].tytul, "Marsjanin"); p1.ulubiony_film[1].rok=2015; 66 67 ISO/ANSI C unie ISO/ANSI C unie Unia to lista składowych, które reprezentują różne typy danych dla tego samego obszaru pamięci. union Worek int x; char t[32]; w; Zmienna w zajmuje obszar takiego rozmiaru, jak największy z obszarów zadeklarowanych jako składniki unii (czyli 32 bajty). strcpy(w.t, "I am Groot!"); w.x = 128; /* ta instrukcja zamaże część poprzedniego zapisu */ Odczytywanie pojedynczych bitów struct bit_field unsigned f1:1; unsigned f2:1; unsigned f3:1; unsigned f4:1; unsigned f5:1; unsigned f6:1; unsigned f7:1; unsigned f8:1; ; union para struct bit_field bits; unsigned char c; ; union para pc; pc.c = 'a'; printf("%u",pc.bits.f1); 68 69 5