Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Podobne dokumenty
Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Język C zajęcia nr 11. Funkcje

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

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

Rekurencja (rekursja)

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

ALGORYTMY I STRUKTURY DANYCH

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

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Programowanie komputerowe. Zajęcia 3

Język C, tablice i funkcje (laboratorium)

Wstęp do Programowania, laboratorium 02

Programowanie - wykład 4

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

PRZYKŁADY OPERACJI PLIKOWYCH z wykorzystaniem biblioteki <stdio.h>

Język C część 2. Podejmowanie decyzji w programie. if else. switch

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

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

Programowanie strukturalne i obiektowe. Funkcje

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

1 Podstawy c++ w pigułce.

Programowanie komputerowe. Zajęcia 2

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

Warsztaty dla nauczycieli

Wstęp do programowania

Lab 9 Podstawy Programowania

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

Algorytm. a programowanie -

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

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

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

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

5 Przygotował: mgr inż. Maciej Lasota

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

1 Podstawy c++ w pigułce.

Część 4 życie programu

Podstawy Programowania C++

tablica: dane_liczbowe

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Wskaźniki. Informatyka

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Programowanie strukturalne i obiektowe

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

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Funkcje printf() i scanf() i operatory

Język C zajęcia nr 5

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Stałe, tablice dynamiczne i wielowymiarowe

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

Wskaźniki. Programowanie Proceduralne 1

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

4. Funkcje. Przykłady

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wstęp do programowania

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

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

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Zmienne, stałe i operatory

Tablice, funkcje - wprowadzenie

Język C, instrukcje sterujące (laboratorium)

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

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

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

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

Algorytmy i język C++

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

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Funkcja (podprogram) void

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

1. Napisz program wypisujący w kolejnych wierszach standardowego wyjścia pojedyncze słowa następującego napisu Bardzo dlugi napis. 2.

Rekurencja. Przygotowała: Agnieszka Reiter

I. Podstawy języka C powtórka

Warszawa dnia 2 stycznia 2011 r. Zbiór zadań z programowania w języku C do samodzielnego wykonania

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Podstawy Programowania. Specyfikacja funkcji, operacje wejścia i wyjścia na plikach, rekurencja, tablice i wskaźniki

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

Argumenty wywołania programu, operacje na plikach

Wykład 4: Klasy i Metody

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

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Proste programy w C++ zadania

Zmienne i struktury dynamiczne

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie Obiektowe i C++

Algorytmy i struktury danych. Wykład 4

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Proste algorytmy w języku C

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

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

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

Transkrypt:

Funkcje i tablice Elwira Wachowicz elwira@ifd.uni.wroc.pl 23 maja 2013 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 1 / 22

Największy wspólny dzielnik: algorytm Euklidesa Problem: Znaleźć największy wspólny dzielnik dwóch nieujemnych liczb całkowitych u i v. Krok 1: Jeśli v jest równe 0, to NWD jest równy u. Krok 2: Wyliczamy temp = u % v, u = v i v = temp. Wracamy do kroku 1. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 2 / 22

/* Funkcja znajdujaca NWD dwoch liczb calkowitych */ int nwd(int, int); int wynik; wynik = nwd(150, 35); printf("nwd dla 150 i 35 to %i.\n", wynik); wynik = nwd(1026, 405); printf("nwd dla 1026 i 405 to %i.\n", wynik); printf("nwd dla 83 i 240 to %i.\n", nwd(83, 240)); return 0; int nwd(int u, int v) int temp; while (v!= 0) temp = u % v; u = v; v = temp; NWD dla 150 i 35 to 5. NWD dla 1026 i 405 to 27. NWD dla 83 i 240 to 1. return u; Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 3 / 22

/* Funkcja wyliczająca wartosc bezwzgledna */ float wartoscbezwzgledna(float); float f1 = -15.5, f2 = 20.0, f3 = -5.0; int i1 = -716; float wynik; wynik = wartoscbezwzgledna(f1); printf("f1 = %.2f, wynik = %.2f.\n", f1, wynik); wynik = wartoscbezwzgledna(f2) + wartoscbezwzgledna(f3); printf("wynik = %.2f.\n", wynik); wynik = wartoscbezwzgledna( (float) i1); printf("wynik = %.2f.\n", wynik); wynik = wartoscbezwzgledna(i1); printf("wynik = %.2f.\n", wynik); printf("%.2f\n", wartoscbezwzgledna(-6.0) /4 ); return 0; float wartoscbezwzgledna(float x) if (x < 0) x = -x; f1 = -15.50, wynik = 15.50. wynik = 25.00. wynik = 716.00. wynik = 716.00. 1.50 return x; lwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 4 / 22

Obliczanie pierwiastka kwadratowego Metoda Newtona-Raphsona służąca do wyliczania pierwiastka kwadratowego liczby x. Krok 1: Ustalmy wartość zmiennej pierwiastek na 1. Krok 2: Jeśli pierwiastek pierwiastek x < ε, przechodzimy do kroku 4. Krok 3: Ustawiamy wartość pierwiastek na (x/pierwiastek + pierwiastek)/2. Przechodzimy do kroku 2. Krok 4: Wartość zmiennej pierwiastek jest przybliżeniem pierwiastka kwadratowego z x. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 5 / 22

/* Program z funkcja wyliczająca pierwiastek kwadratowy */ float wartoscbezwzgledna(float); float pierwiastekkwadratowy(float); printf("pierwiastek(2.0) = %f\n", pierwiastekkwadratowy(2.0)); printf("pierwiastek(144.0) = %f\n", pierwiastekkwadratowy(144.0)); printf("pierwiastek(17.5) = %f\n", pierwiastekkwadratowy(17.5)); return 0; float wartoscbezwzgledna(float x) if (x < 0) x = -x; return x; pierwiastek(2.0) = 1.414216 pierwiastek(144.0) = 12.000000 pierwiastek(17.5) = 4.183300 float pierwiastekkwadratowy(float x) const float epsilon =.00001; float pierwiastek = 1.0; while (wartoscbezwzgledna(pierwiastek * pierwiastek - x) >= epsilon) pierwiastek = ( x / pierwiastek + pierwiastek) / 2; return pierwiastek; lwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 6 / 22

Uwagi dotyczące funkcji Kompilator zakłada, że funkcja domyślnie zwraca wartość typu int. Definiując funkcję, która zwraca wartość int, i tak musimy to zapisać. Definiując funkcję niezwracającą żadnej wartości, jako typ zwracany musimy podać void. Kompilator konwertuje przekazane parametry na odpowiednie typy tylko wtedy, gdy funkcja zostanie wcześniej zdefiniowana lub zadeklarowana. Dobrze jest deklarować na początku wszystkie funkcje, nawet jeśli zostaną zdefiniowane przed swoim wywołaniem. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 7 / 22

Sprawdzanie argumentów funkcji float pierwiastekkwadratowy(float x) const float epsilon =.00001; float pierwiastek = 1.0; if ( x < 0) printf("przekazano ujemny argument do funkcji pierwiastekkwadratowy.\n"); return -1.0; while (wartoscbezwzgledna(pierwiastek * pierwiastek - x) >= epsilon) pierwiastek = ( x / pierwiastek + pierwiastek) / 2; return pierwiastek; Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 8 / 22

Funkcje rekurencyjne Rekurencja: wywoływanie funkcji przez samą siebie. /* rekur.c -- ilustracja rekurencji */ void gora_i_dol(int); gora_i_dol(1); return 0; void gora_i_dol(int n) printf("poziom %d\n", n); /* wyswietlanie #1 */ if(n < 4) gora_i_dol(n + 1); printf("poziom %d\n", n); /* wyswietlanie #2 */ Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 9 / 22

/* rekur.c -- ilustracja rekurencji */ void gora_i_dol(int); gora_i_dol(1); return 0; void gora_i_dol(int n) printf("poziom %d\n", n); if(n < 4) gora_i_dol(n + 1); printf("poziom %d\n", n); Poziom 1 Poziom 2 Poziom 3 Poziom 4 POZIOM 4 POZIOM 3 POZIOM 2 POZIOM 1 Zmienne w rekurencji zmienne n n n n wywołanie poziomu 1 1 wywołanie poziomu 2 1 2 wywołanie poziomu 3 1 2 3 wywołanie poziomu 4 1 2 3 4 powrót z poziomu 4 1 2 3 powrót z poziomu 3 1 2 powrót z poziomu 2 1 powrót z poziomu 1 lwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 10 / 22

Silnia /* silnia.c -- silnia iteracyjnie */ long silnia (int); int num; printf("podaj liczbę z przedziału 0-15 (q kończy program):\n"); while ( scanf("%d", &num) == 1 ) if ( num < 0 ) printf("żadnych liczb ujemnych proszę!\n"); else if ( num > 15 ) printf("wartość nie może przekraczać 15.\n"); else printf("%d silnia = %ld\n", num, silnia(num)); printf("podaj liczbę z przedziału 0-15 (q kończy program):\n"); return 0; long silnia(int n) /* pętla obliczająca silnię */ long odp; for(odp = 1; n > 1; n--) odp *= n; return odp; Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 11 / 22

/* rsilnia.c -- silnia rekurencyjnie */ long rsilnia (int); int num; printf("podaj liczbę z przedziału 0-15 (q kończy program):\n"); while ( scanf("%d", &num) == 1 ) if ( num < 0 ) printf("żadnych liczb ujemnych proszę!\n"); else if ( num > 15 ) printf("wartość nie może przekraczać 15.\n"); else printf("%d silnia = %ld\n", num, rsilnia(num)); printf("podaj liczbę z przedziału 0-15 (q kończy program):\n"); return 0; long rsilnia(int n) /* funkcja rekurencyjna */ long odp; if ( n > 0 ) odp = n * rsilnia(n - 1); else odp = 1; return odp; Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 12 / 22

/* binar.c -- wyświetla liczbę w systemie dwójkowym */ void do_binar(int); int liczba; printf("podaj liczbę całkowitą (q kończy program): \n"); while ( scanf("%d", &liczba) == 1 ) printf("w systemie dwójkowym: "); do_binar(liczba); putchar( \n ); printf("podaj liczbę całkowitą (q kończy program): \n"); return 0; void do_binar(int n) /* funkcja rekurencyjna */ int r; r = n % 2; if ( n >= 2) do_binar( n / 2 ); putchar( 0 + r); return; podaj liczbę całkowitą (q kończy program): 9 W systemie dwójkowym: 1001 podaj liczbę całkowitą (q kończy program): 255 W systemie dwójkowym: 11111111 podaj liczbę całkowitą (q kończy program): 1024 W systemie dwójkowym: 10000000000 podaj liczbę całkowitą (q kończy program): q Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 13 / 22

Tablice Tablica: ciąg wartości tego samego typu (np. dziesięciu znaków lub piętnastu liczb typu int) przechowywanych obok siebie. Cała tablica nosi jedną nazwę, a dostęp do poszczególnych elementów uzyskujemy przez podanie indeksu, który zawsze jest liczbą naturalną. float dlugi[20] 20-elementowa tablica o nazwie dlugi dlugi[0] wartość pierwszego elementu tablicy dlugi... dlugi[19] wartość dwudziestego elementu tablicy dlugi Przypisywanie wartości: dlugi[5] = 32.54; dlugi[6] = 1.2e+21; int nianie[22]; /* tablica z 22. liczbami typu int */ char aktorzy[26]; /* tablica przechowująca 26 znaków */ long duzy[500]; /* tablica z 500. liczbami typu long int */ Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 14 / 22

/* wyniki.c -- wykorzystuje pętle do przetwarzania tablicy */ #define ROZMIAR 10 #define PAR 72 int index, wynik[rozmiar]; int suma = 0; float srednia; printf("podaj %d wyników gry w golfa:\n", ROZMIAR); for (index = 0; index < ROZMIAR; index++) scanf("%d", &wynik[index]); /* wczytanie 10 wyników */ printf("odczytane wyniki to:\n"); for (index = 0; index < ROZMIAR; index++) printf("%5d", wynik[index]); /* wyświetlenie wczytanych wyników */ printf("\n"); for (index = 0; index < ROZMIAR; index++) suma += wynik[index]; /* i ich zsumowanie */ srednia = (float) suma / ROZMIAR; printf("suma wyników = %d, średnia = %.2f.\n", suma, srednia); printf("oznacza to handicap w wysokości %.0f.\n", srednia - PAR); Podaj 10 wyników gry w golfa: 102 98 112 108 105 103 99 101 96 102 100 Odczytane wyniki to: 102 98 112 108 105 103 99 101 96 102 Suma wyników = 1026, średnia = 102.60. Oznacza to handicap w wysokości 31. Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 15 / 22

Zmienne lub tablice automatyczne Zmienna lub tablica automatyczna: to zmienna lub tablica zadeklarowana wewnątrz funkcji. Zmienna zadeklarowana wewnątrz istnieje tylko w czasie działania funkcji po zakończeniu działania funkcji pamięć przeznaczona na zmienną jest zwalniana. int potegi[8] = 1, 2, 4, 8, 16, 32, 64, 128;... Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 16 / 22

int raport; int wilki[5] = 12, 10, 8, 9, 6; int jedzenie(int);... int jedzenie(int n)... Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 17 / 22 Zmienne i tablice zewnętrzne Zmienna lub tablica zewnętrzna: to zmienna lub tablica zadeklarowana poza jakąkolwiek funkcją. Są znane wszystkim funkcjom, które występują po ich deklaracji w pliku źródłowym. Istnieją przez cały czas działania programu. Są standardowo inicjalizowane i przyjmują wartość 0.

Zmienne i tablice statyczne Zmienne i tablice statyczne: definiuje się wewnątrz funkcji korzystając ze słowa kluczowego static. Są lokalne wewnątrz funkcji, ale zachowują swoje wartości między wywołaniami funkcji i otrzymują wartość początkową 0. int konto(intn, int m) static int fasola[2] = 343, 332;... Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 18 / 22

/* brak_dan.c -- niezainicjalizowane tablice */ #define ROZMIAR 4 int zewntab[rozmiar]; /* niezainicjalizowana tablica zewnętrzna */ static int statab[rozmiar]; /* niezainicjalizowana tablica statyczna */ int autab[rozmiar]; /* niezainicjalizowana tablica automatyczna */ int i; printf("%2s%10s%10s%10s\n", "i","zewntab","statab","autab"); for (i = 0; i < ROZMIAR; i++) printf("%2d%10d%10d%10d\n", i, zewntab[i], statab[i], autab[i]); return 0; i zewntab statab autab 0 0 0 0 1 0 0 0 2 0 0 4195344 3 0 0 0 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 19 / 22

/* troche_dan.c -- częściowo zainicjalizowane tablice */ #define ROZMIAR 4 int zewntab[rozmiar] = 1956, 1966; static int statab[rozmiar] = -50, -90; int autab[rozmiar] = 492, 567; int i; printf("%2s%10s%10s%10s\n", "i","zewntab","statab","autab"); for (i = 0; i < ROZMIAR; i++) printf("%2d%10d%10d%10d\n", i, zewntab[i], statab[i], autab[i]); return 0; i zewntab statab autab 0 1956-50 492 1 1966-90 567 2 0 0 0 3 0 0 0 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 20 / 22

Przypisywanie wartości do tablic Przypisywanie wartości następuje element po elemencie! /* nieprawidlowe przypisania */ #define ROZMIAR 5 int byki[rozmiar] = 5, 3, 2, 8; int jaki[rozmiar]; /* w porządku */ jaki = byki; /* niedozwolone */ jaki[rozmiar] = byki[rozmiar]; /* nieprawidlowa */ jaki[rozmiar] = 5, 3, 2, 8; /* niedopuszczalna */ Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 21 / 22