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

Podobne dokumenty
TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

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

tablica: dane_liczbowe

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Wstęp do Programowania, laboratorium 02

Język C, tablice i funkcje (laboratorium)

Tablice, funkcje - wprowadzenie

Wstęp do programowania

Wstęp do informatyki- wykład 11 Funkcje

Wstęp do informatyki- wykład 9 Funkcje

5 Przygotował: mgr inż. Maciej Lasota

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

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

Języki i metodyka programowania. Wskaźniki i tablice.

Zmienne, stałe i operatory

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Funkcja (podprogram) void

Operacje wejścia/wyjścia odsłona pierwsza

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

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

( wykł. dr Marek Piasecki )

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

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

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Uzupełnienie dot. przekazywania argumentów

C-struktury wykład. Dorota Pylak

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

2 Przygotował: mgr inż. Maciej Lasota

Struktury Struktura polami struct struct struct struct

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

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

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

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

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Wskaźniki. Programowanie Proceduralne 1

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

IX. Wskaźniki.(3 godz.)

Część 4 życie programu

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

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

Tablice deklaracja, reprezentacja wewnętrzna

4) Operacje na tablicy dwuwymiarowej bez wykorzystywania indeksów liczbowych:

Podstawy programowania w języku C++

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

C-struktury wykład. Dorota Pylak

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

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

Co nie powinno być umieszczane w plikach nagłówkowych:

Lab 9 Podstawy Programowania

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Podstawy programowania C. dr. Krystyna Łapin

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

Język C zajęcia nr 11. Funkcje

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

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

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

Wskaźniki. Informatyka

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

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

METODY I JĘZYKI PROGRAMOWANIA. Programowanie w języku C notatki z wykładów

Podstawy programowania 1

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

1. Wprowadzanie danych z klawiatury funkcja scanf

Programowanie w języku C++

Wyklad 7 Funkcje (c.d.). Tablice jednowymiarowe znaków

Funkcje zawarte w bibliotece < io.h >

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Podstawy programowania w języku C i C++

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Wskaźniki w C. Anna Gogolińska

ŁAŃCUCHY W JĘZYKU C/C++

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

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

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.

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Funkcje zawarte w bibliotece < io.h >

Stałe, tablice dynamiczne i wielowymiarowe

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

Tablice, funkcje, wskaźniki - wprowadzenie

KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }

Ćwiczenie 5 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Ćwiczenie 4 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

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

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

INSTRUKCJE REPETYCYJNE PĘTLE

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

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

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

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

Transkrypt:

Funkcja wysoce niezależny blok definicji i instrukcji programu (podprogram) Każdy program napisany w języku C/C++ zawiera przynajmniej jedną funkcję o predefiniowanej nazwie: main( ). Najczęściej wykorzystuje się również wiele innych predefiniowanych funkcji np. printf(...), scanf(...), abs(...), sin(...), itp. Można również definiować nowe własne funkcje. Składnia definicji funkcji: zwracany_typ NAZWA_FUNKCJI ( lista parametrów ) instrukcja lub sekwencja instrukcji ; przykład: int MAX ( int liczba_1, int liczba_2 ) if( liczba_1 > liczba_2 ) return liczba_1 ; else return liczba_2 ; lista parametrów może być pusta lub zawierać opisy kolejnych parametrów (pooddzielane przecinkami): main( ) main( void ) main( int argc, char argv[ ] ) parametry definiowane są tak jak zmienne. Uwaga: nie można grupować sekwencji parametrów tego samego typu: int MAX ( int liczba_1, liczba_2, liczba_3 ) źle! ciało funkcji jest zawarte pomiędzy nawiasami:... (bez średnika na końcu) działanie funkcji kończy się po napotkaniu polecenia return lub po wykonaniu sekwencji wszystkich instrukcji zawartych w ciele funkcji, jeżeli funkcja jest typu void, to używamy samego słowa return, bez żadnego wyrażenia po nim, jeżeli funkcja jest typu innego niż void to po poleceniu return musi się pojawić wyrażenie odpowiedniego typu (może być w nawiasach), np.: return liczba_1; lub return( liczba_1 ) ; M.Piasecki: PODSTAWY PROGRAMOWANIA 1 (W6) Definiowanie własnych funkcji

1) program bez pod-funkcji #include <iostream> int a,b,c,suma; float srednia; int main(void) //--- wczytaj dane --- cout<<"podaj trzy liczby: "; cin>>a>>b>>c; //--- policz wartości --- suma = a+b+c; srednia = suma/3.0; //--- wyświetl wyniki --- cout<<endl<<"suma = "<<suma; cout<<endl<<"sredn = "; cout<<srednia; //--- zakończ program --- cout<<endl<<"nacisnij ENTER"; cin.ignore(); cin.get(); 2) funkcje bezparametrowe #include <iostream> int a,b,c,suma; float srednia; void WCZYTAJ(void) cout<<"podaj trzy liczby: "; cin>>a>>b>>c; void POLICZ(void) suma = a+b+c; srednia = suma/3.0; void WYSWIETL(void) cout<<endl<<"suma = "<<suma; cout<<endl<<"srednia = "; cout<<srednia; int main(void) WCZYTAJ(); POLICZ(); WYSWIETL(); cout<<endl<<"nacisnij ENTER"; cin.ignore(); cin.get(); 3) funkcje z jawnymi parmetrami #include <iostream> void WCZYTAJ(int& x, int& y, int&z) cout<<"podaj trzy liczby: "; cin>>x>>y>>z; void LICZ_SUM(int a,int b,int c, int& s) s = a+b+c; float POLICZ_SR(int x, int y, int z) int sum = x+y+z; // LICZ_SUM( x, y, z, sum ); return sum/3.0; void WYSWIETL(int su, float sr) cout<<endl<<"suma = "<<su; cout<<endl<<"srednia = "<<sr; int main(void) int a,b,c,suma; float srednia; WCZYTAJ(a,b,c); LICZ_SUM(a,b,c,suma); srednia=policz_sr(a,b,c); WYSWIETL(suma,srednia);

Definicja Wywołanie Prototyp funkcji Prototyp funkcji deklaracja uprzedzająca, określa tylko nazwę funkcji oraz typ zwracanej wartości i parametrów (sam nagłówek funkcji zakończony średnikiem) Taka deklaracja funkcji jest konieczna w przypadkach, gdy wywołanie funkcji występuje wcześniej niż jej definicja. Np. // program wyznaczający maksimum 3 liczb poprzez wywołanie funkcji MAX #include <stdio.h> int MAX ( int, int ) ; // Prototyp - deklaracja funkcji MAX int main( void ) int a, b, c, m. ; printf( " Podaj liczbe A = " ); scanf( " %d ", &a ); printf( " Podaj liczbe B = " ); scanf( " %d ", &b ); printf( " Podaj liczbe C = " ); scanf( " %d ", &c ); m = MAX( a, b ); // Wywolanie funkcji MAX printf( " \n\nmaksimum z liczb A i B rowna sie = %d ", m ) ; printf( " \n\nmaksimum z liczb B i C rowna sie = %d ", MAX( b,c ) ) ; printf( " \n\nmaksimum z A,B,C rowna sie = %d ", MAX( a, MAX(b,c) ) ) ; flushall(); getchar(); int MAX ( int liczba_1, int liczba_2 ) if( liczba_1 > liczba_2 ) return liczba_1 ; else return liczba_2 ; // Definicja funkcji MAX M.Piasecki: PODSTAWY PROGRAMOWANIA 3 (W6) Definiowanie własnych funkcji

FUNKCJE / PRZEKAZYWANIE PARAMETRÓW 1. Funkcja bezparametrowa nie zwracająca żadnej wartości (procedura?) przykład void nazwa_funkcji(void) return; // powoduje natychmiastowe zakończenie wykonywania funkcji // na końcu funkcji można pominąć void odwrotność(void) // obliczenie odwrotności liczby wczytanej z klawiatury double liczba; scanf( %lf, &liczba ); if( liczba == 0 ) return; printf( %f, 1/liczba ); return; // to «return» można pominąć 2. Funkcja pobierająca parametr i zwracająca wartość UWAGA! w języku C parametry przekazywane są tylko przez wartość tzn. po wywołaniu funkcji tworzone są nowe zmienne (lokalne), których zawartość inicjowana jest wartościami parametrów (zmiennych, stałych lub wyrażeń) podanych przy wywołaniu. przykład a) double odwrotność( double liczba ) if( liczba == 0 ) return( 0 ); else return( 1/liczba ); void main( void ) double x=10, y; y = odwrotnosc( 20 ); y = odwrotnosc( x ); odwrotnosc( 3 (15-x) ); // definicja funkcji «odwrotność» // przykład wywoływania funkcji «odwrotnosc» M.Piasecki: PODSTAWY PROGRAMOWANIA 4 (W6) Przekazywanie parametrów funkcji

przykład b) // przykład funkcji zwracającej wartość większego z argumentów double maksimum( double a, double b ) if( a > b) return( a ); return( b ); przykład c) void posortuj_1 ( double a, double b ) // UWAGA!!! double buf; // błędny sposób przekazywania if( a > b) // parametrów (przez wartość). // Sortowane są zmienne lokalne a i b buf = a; // (kopie parametrów x i y). a = b; // Zawartość x i y nie ulegnie zmianie! b = buf; void main( void ) double x=7, y=5; posortuj_1( x, y ); // do funkcji przekazywane są wartości zmiennych przykład d) void posortuj_2 ( double a, double b ) // przekazywanie parametrów przez adres double buf; if( a > b) // porównywane są zawartości miejsc // wskazywanych przez wskaźniki na a i b buf = a; a = b; b = buf; void main( void ) double x=7, y=5; posortuj_2( &x, &y ); // do funkcji przekazywane są adresy zmiennych M.Piasecki: PODSTAWY PROGRAMOWANIA 5 (W6) Przekazywanie parametrów funkcji

W języku C++ parametry mogą być przekazywane przez wartość lub przez referencję Typ referencyjny zmienne tego typu nie zajmują nowego miejsca w pamięci, służą do reprezentacji innych zmiennych w programie. nazwa_typu nazwa_zmiennej; utworzenie zwykłej zmiennej nazwa_typu & nazwa_zmiennej_referencyjnej = nazwa_zmiennej; (jest to zdefiniowanie aliasu innej nazwy dla tej samej zmiennej) przykład int wzrost; int sredni_wzrost = wzrost; int& wysokosc = wzrost; // utworzenie zmiennej referencyjnej // związanej z tym samym obszarem // pamięci co wzrost wysokosc = wysokosc + 1; // równoważne: wzrost = wzrost + 1 przykład e) void posortuj_3 ( double & a, double & b ) double buf; // przekazywanie parametrów if( a > b) // przez referencję buf = a; // a i b są referencyjnymi nazwami x i y a = b; b = buf; int main( void ) double x=7, y=5; posortuj_3( x, y ); // parametry x i y inicjują zmienne referencyjne M.Piasecki: PODSTAWY PROGRAMOWANIA 6 (W6) Przekazywanie parametrów funkcji

FUNKCJE OPERUJĄCE NA PAMIĘCI <mem.h> void memset ( void wsk_pocz, int wartosc, size_t dlugosc ) (obszar wskazywany przez wsk_pocz o długości dlugosc jest wypełniany wartością wartosc) np. int i, tab[1000]; memset( &i, 0, sizeof( i ) ); // równoważne: i = 0 memset( &i, 1, sizeof( i ) ); // równoważne: i = 257 = 1 256 + 1 memset( tab, 0, sizeof( tab ) ); // wypełnienie tablicy zerami void memcpy ( void wsk_dokąd, void wsk_skąd, size_t dlugosc ) ( memory copy skopiowanie dlugosc bajtów spod adresu wsk skąd pod adres wsk dokąd) np. int i, j=10, tab1[1000], tab2[1000]; memcpy( &i, &j, sizeof( i ) ); // równoważne: i = j ; memcpy( tab1, tab2, sizeof( tab1 ) ); // skopiowanie zawartości // tablicy tab2 do tab1 int memcmp ( void obszar_1, void obszar_2, size_t dlugosc ) ( memory compare porównanie dlugosc bajtów spod adresu obszar 1 oraz adresu obszar 2 ) funkcja zwraca wartość: < 0 gdy zawartość obszar_1 < obszar_2 = 0 gdy zawartość obszar_1 == obszar_2 > 0 gdy zawartość obszar_1 > obszar_2 np. int i, j, tab1[1000], tab2[1000]; if( memcmp( &i, &j, sizeof( int ) ) ) // równoważne porównaniu i!= j printf( te zmienne mają rozna wartosc ); memcmp( tab1, tab2, sizeof( tab1 ) ); // porównanie zawartości // tablicy tab1 oraz tab2 void memmove ( void wsk_dokąd, void wsk_skąd, size_t dlugosc ) ( memory move kopiowanie ze sprawdzaniem zachodzenia się obszarów ) void memccpy (void dokąd, void skąd, int znak, size_t dlugosc ) ( memory char copy kopiowanie ograniczone ilością bajtów lub skopiowaniem znaku ) void memchr ( void wsk_pocz, int znak, size_t dlugosc ) ( memory char search szukanie pozycji wystąpienia bajtu o zadanej wartości ) M.Piasecki: PODSTAWY PROGRAMOWANIA 7 (W6) Funkcje <mem.h>

PRZYKŁADY WYKORZYSTANIA FUNKCJI MEM // załóżmy następującą definicję tablicy: long tab[11] = 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5 ; // po operacji: memcpy( &tab[ 0 ], &tab[ 5 ], sizeof(long) ); // lub: memcpy( tab + 0, tab + 5, sizeof(long) ) ; // zawartość tablicy jest równa: 0, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5 // po operacji: memcpy( tab + 0, tab + 6, 5 sizeof(long) ) ; // zawartość tablicy jest równa: 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 // po operacji: ( ) memcpy( tab + 0, tab + 1, 10 sizeof(long) ) ; // zawartość tablicy jest równa: 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 5 // po operacji: ( ) memcpy( tab + 1, tab + 0, 10 sizeof(long) ) ; // zawartość tablicy jest równa: 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 // po operacji: ( ) memmove( tab + 1, tab + 0, 10 sizeof(long) ) ; // zawartość tablicy jest równa: 5, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4 // skopiowanie zawartości tablicy A do tablicy B : long A[ 100 ], B[ 100 ] ; // poprzez operację: memcpy( B, A, 100 sizeof(long) ) ; // lub: memcpy( B, A, sizeof( B ) ) ; // lub: memcpy( B, A, sizeof( A ) ) ; // UWAGA!!! przy kopiowaniu zawartości tablicy, która jest parametrem funkcji : void funkcja( long A[ 100 ] ) long B[ 100 ] ; memcpy( B, A, sizeof( A ) ) ; memcpy( B, A, sizeof( B ) ) ; // ŹLE!!! bo A jest zmienną zawierającą adres, // sizeof( A ) jest równe 2 (zamiast 400) // dobrze M.Piasecki: PODSTAWY PROGRAMOWANIA 8 (W6) Funkcje <mem.h>