Podstawy Programowania. Składnia wyrażeń i instrukcji, złożoności obliczeniowej, operacje wejścia i wyjścia, definicja

Podobne dokumenty
Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

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

Podstawy Programowania Podstawowa składnia języka C++

2 Przygotował: mgr inż. Maciej Lasota

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

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

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

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

#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 ); }

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

#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 ); }

Zmienne, stałe i operatory

Programowanie komputerowe. Zajęcia 1

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

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

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); }

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Wstęp do Programowania, laboratorium 02

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

Język C zajęcia nr 5

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce.

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

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

KURS C/C++ WYKŁAD 1. Pierwszy program

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

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

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

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

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Instrukcje sterujące. Programowanie Proceduralne 1

Tablice, funkcje - wprowadzenie

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

Struktura pliku projektu Console Application

Podstawy programowania w języku C

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Programowanie strukturalne i obiektowe

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

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

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

Programowanie w C/C++ Instrukcje - konstrukcje powtórka. LABORKA Piotr Ciskowski

Termin Egzaminu (Język C): !!! >> CZWARTEK, 7 LUTEGO << GODZ

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

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

Informatyka 1. Wyrażenia i instrukcje cd., ręczna symulacja, operacje wejścia/wyjścia

Język C, tablice i funkcje (laboratorium)

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

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

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

Funkcja (podprogram) void

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wskaźniki w C. Anna Gogolińska

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

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

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Część 4 życie programu

Podstawy Programowania C++

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

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

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

Język C zajęcia nr 11. Funkcje

Wykład 2 Składnia języka C# (cz. 1)

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

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

Programowanie komputerowe. Zajęcia 3

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

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

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

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Język ludzki kod maszynowy

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Języki programowania - podstawy

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

Programowanie - wykład 4

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

Biblioteka standardowa - operacje wejścia/wyjścia

Stuck in the loop. Sterowanie. Marcin Makowski. 29 października Zak lad Chemii Teoretycznej UJ

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Podstawy programowania w języku C i C++

Jerzy Nawrocki, Wprowadzenie do informatyki

Programowanie I C / C++ laboratorium 01 Organizacja zajęć

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

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

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

Języki i metody programowania. Omówienie języków C, C++ i Java

System operacyjny Linux

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

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

( wykł. dr Marek Piasecki )

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

1 Wielokrotne powtarzanie tych samych operacji

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Elementarne wiadomości o języku C

Transkrypt:

Podstawy Programowania Wykład III Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje Robert Muszyński Katedra Cybernetyki i Robotyki, PWr Zagadnienia: składnia wyrażeń i instrukcji, instrukcje warunkowe i pętli, zagadnienia złożoności obliczeniowej, operacje wejścia i wyjścia, definicja funkcji, jej argumenty, struktura programu, zasięg zmiennych. Copyright c 2007 2018 Robert Muszyński Niniejszy dokument zawiera materiały do wykładu na temat podstaw programowania w językach wysokiego poziomu. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych, prywatnych potrzeb i może być kopiowany wyłącznie w całości, razem ze stroną tytułową. Skład FoilTEX

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 1 Składnia wyrażeń wyrazenie = [ wyrazenie "," ] wyrazenie-przypisania. wyrazenie-przypisania = wyrazenie-warunkowe wyrazenie-jednoargumentowe operator-przypisania wyrazenie-przypisania. operator-przypisania = "=" "*=" "/=" "%=" "+=" "-=" "<<=" ">>=" "&=" "^=" " =". wyrazenie-jednoargumentowe = ( "++" "--" "sizeof" ) wyrazenie-jednoargumentowe "sizeof" "(" nazwa-typu ")" wyrazenie-przyrostkowe operator-jednoargumentowy wyrazenie-rzutowania. operator-jednoargumentowy = "&" "*" "+" "-" "~" "!". wyrazenie-rzutowania = wyrazenie-jednoargumentowe "(" nazwa-typu ")" wyrazenie-rzutowania.

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 2 Składnia wyrażeń cd. wyrazenie-przyrostkowe = wyrazenie-proste wyrazenie-przyrostkowe ( "++" "--" "[" wyrazenie "]" "(" [ lista-argumentow ] ")" ( "." "->" ) identyfikator ). wyrazenie-proste = identyfikator stala napis "(" wyrazenie ")". lista-argumentow = [ lista-argumentow ] "," wyrazenie-przypisania. wyrazenie-warunkowe = logiczne-wyrazenie-or [ "?" wyrazenie ":" wyrazenie-warunkowe ]. logiczne-wyrazenie-or = logiczne-wyrazenie-and [ " " logiczne-wyrazenie-or ]. logiczne-wyrazenie-and = wyrazenie-or [ "&&" logiczne-wyrazenie-and ]. wyrazenie-or = wyrazenie-xor [ " " wyrazenie-or ]...

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 3 Składnia instrukcji instrukcja-wyrazeniowa = [ wyrazenie ] ";". instrukcja = instrukcja-wyrazeniowa instrukcja-zlozona instrukcja-wyboru instrukcja-powtarzania instrukcja-etykietowana instrukcja-skoku. instrukcja-wyboru = "if (" wyrazenie ")" instrukcja [ "else" instrukcja ] "switch (" wyrazenie ")" instrukcja. instrukcja-powtarzania = "while (" wyrazenie ")" instrukcja "do" instrukcja "while (" wyrazenie ");" "for ("[wyrazenie]";"[wyrazenie]";"[wyrazenie]")" instrukcja. instrukcja-etykietowana = identyfikator ":" instrukcja "case" wyrazenie-stale ";" instrukcja "default :" instrukcja. instrukcja-skoku = "goto" identyfikator ";" "continue" "break" "return" [ wyrazenie ] ";".

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 4 if (n > 0) if (a > b) z = a; else z = b; Instrukcje warunkowe przykłady if (n > 0) { if (a > b) z = a; else z = b; if (wyrazenie) instrukcja else if (wyrazenie) instrukcja else if (wyrazenie) instrukcja else instrukcja

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 5 Instrukcje pętli przykłady Równoważność pętli for i while for (wyr1; wyr2; wyr3) instrukcja wyr1; while (wyr2) { instrukcja wyr3; for (i = 0; i < n; i++) {... for (;;) {... goto!!! break??? continue??? return?

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 6 O instrukcji goto (by xkcd)

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 7 Operatory dzielenia całkowitoliczbowego Dla dowolnych całkowitych x i y zachodzi x = y * (x / y) + (x % y) Przykładowo procentowy wynik wyborów: (IloscZa * 100) / IloscGlosow ale nie IloscZa / IloscGlosow * 100

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 8 Operatory dzielenia całkowitoliczbowego cd. k-ta cyfra w rozwinięciu liczby n określonej w układzie pozycyjnym o podstawie p ( n k = n / p (k 1)) % p w szczególności, w układzie dziesiętnym n k = ( n / 10 (k 1)) % 10

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 9 Liczymy więc przykładowo ( n / 10 k 1 ) % 10 (853 / 1) % 10 = 3 (853 / 10) % 10 = 5 (853 / 100) % 10 = 8 i piszemy program int Potega(int a, int b) { int m = 1; for(i=1; i<=b; i++) m = m * a; return m; int main() (* Algorytm 1 *)... NrCyfry = 1; while (???) { Cyfra = Liczba / Potega(10,NrCyfry-1) % 10; NrCyfry += 1;

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 10 cyfr podstawień mnożeń dodawań porównań 3 30 12 6? 6 69 33 12? n n 2 +5n+3 n 2 2 + 5n 2 2n?

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 11 Napisaliśmy: int Potega(int a, int b) { int m = 1; Można prościej: for(i=1; i<=b; i++) m = m * a; return m;... (* Algorytm 1 *) NrCyfry = 1; while (???) { Cyfra = Liczba / Potega(10,NrCyfry-1) % 10; NrCyfry += 1;... (* Algorytm 2 *) Dzielnik = 1; while (Dzielnik < Liczba) { Cyfra = Liczba / Dzielnik % 10; Dzielnik *= 10;

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 12 Obecnie: A mieliśmy: cyfr podstawień mnożeń dodawań porównań 3 7 9 0 4 6 13 18 0 7 n 2n + 1 3n 0 n + 1 cyfr podstawień mnożeń dodawań porównań 3 30 12 6? 6 69 33 12? n n 2 +5n+3 n 2 2 + 5n 2 2n?

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 13 Lub jeszcze prościej: Liczba = 853 while (Liczba > 0) { (* Algorytm 3 *) Cyfra = Liczba % 10; Liczba = Liczba / 10; co daje krok Cyfra Liczba 0? 853 1 3 85 2 5 8 3 8 0 4 STOP Teraz: cyfr podstawień mnożeń dodawań porównań 3 6 6 0 4 6 12 12 0 7 n 2n 2n 0 n + 1

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 14 Podsumowując: Złożoność obliczeniowa zarys algorytm podstawień mnożeń dodawań porównań złożoność 1 n 2 + 5n + 3 n 2 2 + 5n 2 2n? O(n 2 ) 2 2n + 1 3n 0 n + 1 O(n) 3 2n 2n 0 n + 1 O(n) dla n = 100 algorytm podstawień mnożeń dodawań porównań 1 10503 5250 200? 2 201 300 0 101 3 200 200 0 101

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 15 Standardowe strumienie danych W systemie, dla procesów automatycznie udostępniany jest standardowy strumień wejściowy stdin (domyślnie zazwyczaj klawiatura terminala) standardowy strumień wyjściowy stdout (domyślnie zazwyczaj ekran terminala) standardowy strumień diagnostyczny stderr (domyślnie zazwyczaj ekran terminala) W dobrych środowiskach istnieje możliwość przekierowywania strumieni./a.out <plikwe >plikwy i przetwarzania potokowego prog1 prog2 prog3

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 16 Standardowa biblioteka we/wy stdio Dołączenie pliku nagłówkowego biblioteki #include <stdio.h> Najprostsze mechanizmy wejścia/wyjścia int getchar(void); /* zwraca przeczytany znak lub EOF */ int putchar(int); /* zwraca wypisany znak lub EOF */ #include <stdio.h> #include <ctype.h> main() { /* zamien wielkie litery na male */ int znak; /* co bedzie, gdy zadeklarujemy char znak? */ while ((znak = getchar())!= EOF) putchar(tolower(znak)); return 0;

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 17 Formatowane wyjście printf Wypisywanie formatowanego wyjścia umożliwia funkcja int printf(char *format, arg1, arg2...) funkcja pod nadzorem argumentu format przekształca i wypisuje swoje argumenty wartością funkcji jest liczba pomyślnie wypisanych znaków Format zawiera: zwykłe znaki, które są kopiowane do strumienia wyjściowego specyfikacje przekształceń (rozpoczynające się znakiem %), z których każda wskazuje sposób przekształcenia i wypisania kolejnego argumentu

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 18 Formatowane wyjście przykłady printf("oto jestem swiecie\n"); printf("znak uzyskany to %c\n",znak); /* przy char znak; */ printf("znak uzyskany to %u\n",znak); /* a takze %d */ printf("wartosci to %d i %d\n",i1,i2); /*przy int i1, i2;*/ printf("wartosci to %3d i %6d\n",i1,i2); printf("wartosci to %3.0f i %6.1f\n",f1,f2);

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 19 Formatowane wyjście przykłady cd Dostępne specyfikacje przekształceń: %d %i liczba dziesiętna %6d liczba dziesiętna, zajmująca co najmniej 6 znaków %f liczba zmiennopozycyjna %6f liczba zmiennopozycyjna, zajmująca co najmniej 6 znaków %.2f %6.2f liczba zmiennopozycyjna z 2 miejscami po kropce dziesiętnej liczba zmiennopozycyjna z 2 miejscami po kropce dziesiętnej, zajmująca co najmniej 6 znaków %u liczba dziesiętna bez znaku %o liczba ósemkowa bez znaku %x liczba szesnastkowa bez znaku %ld liczba całkowita typu long %c jeden znak %s ciąg znaków wypisany do napotkania \0 lub wyczerpania znaków %% wypisanie znaku %

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 20 Formatowane wejście scanf Wczytywanie formatowanego wejścia umożliwia funkcja int scanf(char *format,...); funkcja pod nadzorem argumentu format wczytuje swoje pozostałe argumenty, które muszą być wskaźnikami wskazującymi, gdzie należy przekazać przekształcone dane wejściowe wartością funkcji jest liczba pomyślnie wczytanych argumentów lub EOF scanf("%f%f%f", &a, &b, &c); scanf("dane:%f%f%f", &a, &b, &c);

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 21 Składnia funkcji Ogólna definicja funkcji ma postać [ typ-zwracanej-wartosci ] nazwa-funkcji "(" [ deklaracja-parametrow ] ")" "{" { deklaracja { instrukcja "" int Potega(int podstawa, int wykladnik) /* przyklad funkcji */ { /* podnies podstawa do potegi wykladnik */ int i, tmp = 1; /* wersja 1 */ for(i=1; i<=wykladnik; i++) tmp *= podstawa; return tmp;

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 22 Funkcje przykłady int Potega(int podstawa, int wykladnik){ int i, tmp = 1; for(i=1; i<=wykladnik; i++) tmp *= podstawa; return tmp; /* wersja 1 */ Jeśli pominięto typ-zwracanej-wartosci, to przyjmuje się, że funkcja zwraca wartość typu int, instrukcja return jest narzędziem, dzięki któremu wywołana funkcja przekazuje do miejsca wywołania wartość wyrażenia (return wyrazenie;), deklaracja int Potega(int podstawa, int wykladnik); zwana jest prototypem funkcji i musi być zgodna z definicją funkcji, nazwy argumentów funkcji jak i zadeklarowanych w niej zmiennych są dla niej całkowicie lokalne i są niedostępne dla wszystkich innych funkcji.

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 23 Funkcje przekazywanie argumentów W języku C wszystkie argumenty funkcji są przekazywane przez wartość (Wywoływana funkcja zamiast oryginałów otrzymuje wartości swoich argumentów w zmiennych tymczasowych) int Potega(int podstawa, int wykladnik){ int i; for(i=1; wykladnik>0; --wykladnik) i *= podstawa; return i; /* wersja 2 */ Argumentem wykladnik posłużono się jako zmienną tymczasową, zmniejszaną stopniowo do zera, cokolwiek zrobiono ze zmienną wykladnik wewnątrz funkcji Potega, nie ma to żadnego wpływu na wartość argumentu, z którym funkcja ta została wywołana.

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 24 Struktura programu w C Program w języku C ma następującą strukturę [ definicja-zmiennych-globalnych ] { definicja-funkcji Nie można deklarować funkcji wewnątrz innych funkcji, jedna z zadeklarowanych funkcji musi nazywać się main, odwołania mogą być dokonywane tylko do wcześniej określonych (przez definicję lub prototyp) obiektów, zmienne globalne są dostępne w dowolnej funkcji programu, zmienne lokalne definiuje się wewnątrz dowolnej instrukcji złożonej, nie tylko tej definiującej funkcję, zmienna lokalna zaczyna istnieć w chwili wywołania instrukcji złożonej i znika po jej zakończeniu, tak zadeklarowane zmienne zasłaniają identycznie nazwane zmienne z bloków zewnętrznych.

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 25 #include <stdio.h> Struktura programu w C przykłady int Potega(int, int); /* testowanie funkcji Potega */ main() { int i; for (i=0, i<=10, i++) printf("%d %d %d\n", i, Potega(2,i), Potega(-3,i)); return 0; /* Podnies podstawa do potegi wykladnik */ int Potega(int podstawa, int wykladnik){ int i; /* wersja 3 */ /* niezalecana */ for(i=1; wykladnik>0; --wykladnik, i*=podstawa); return i;

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 26 Struktura programu w C przykłady cd #include <stdio.h> int Max(int, int); /* prototyp funkcji */ int wiek_taty, wiek_mamy; /* zmienne globalne */ int main(){ /* definicja funkcji */ int tmp; /* zmienna lokalna */ printf("podaj wiek taty i mamy\n"); scanf("%d %d", &wiek_taty, &wiek_mamy); printf("starsza osoba ma %d lat\n", Max(wiek_taty,wiek_mamy)); return 0; /* Zwroc wieksza z dwoch podanych wartosci */ int Max(int a, int b){ /* definicja funkcji */ return a>b?a:b; Pojawiające się w definicji funkcji Max argumenty a, b to parametry formalne funkcji, pojawiające się w jej wywołaniu argumenty wiek_taty, wiek_mamy to parametry aktualne funkcji.

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 27 Zmienne globalne a lokalne, przesłanianie zmiennych Zasadniczo, funkcje powinny przekazywać sobie wartości przez argumenty Zmienne globalne są ogólnie dostępne są alternatywą dla argumentów Dla funkcji wymagających dostępu do dużej liczby danych zmienne globalne mogą okazać się wygodniejsze i bardziej skuteczne choć może wtedy trzeba najpierw pomyśleć nad uporządkowaniem struktur danych Zmienne globalne mogą niekorzystnie wpływać na strukturę programu nie nadużywać Zmienne lokalne są dla funkcji wewnętrzne zaczynają istnieć w chwili wywołania funkcji i nikną zaraz po jej zakończeniu nie zachowują więc swoich wartości dopóki ich wartości początkowe nie zostaną określone, należy przyjąć, że zawierają nieznane wartości Jeśli wewnątrz bloku zdefiniowano zmienną o takiej samej nazwie jak nazwa zmiennej zewnętrznej, to zmienna wewnętrzna przesłania zmienną zewnętrzną do zmiennej zewnętrznej nie ma dostępu Chodzi o to, by się nie pomylić!

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 28 Funkcje podsumowanie Dekompozycja problemu: podział problemu na wiele mniejszych i wydzielenie rozwiązań tych mniejszych problemów od rozwiązania problemu głównego jest drogą do zredukowania wielkości i stopnia komplikacji problemu. Czytelność i przejrzystość programu: niezależnie od stopnia złożoności problemu, podział na funkcje jest drogą do zwiększenia czytelności programu, co zawsze jest celowe. Jednakże dodawanie procedur nie jest celem samym w sobie. Unikanie powtórzeń: często warto wyodrębnić w funkcję powtarzający się zestaw instrukcji, wyrażeń, bądź schemat obliczeniowy. Zasada lokalności: określa, że wszystkie elementy mające ze sobą związek powinny znaleźć się jak najbliżej siebie w programie. Wielkość funkcji: niezbyt duże, np. < 50 linii, ważna jest też spójność.

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 29 Zagadnienia podstawowe Podsumowanie 1. Jakie znasz instrukcje warunkowe w C i jaka jest ich składnia? 2. Jakie znasz instrukcje pętli w C? Czym się one od siebie różnią? 3. Czy pętla for(i = 0; i <= 10; i++) wykona się 10 razy? 4. Porównaj efekt wykonania instrukcji pętli for(i=0;i<10;i++){... z instrukcją for(i=0;i<10;){i++;... 5. Jaka biblioteka języka C zawiera deklaracje funkcji obsługi standardowego wejście? 6. W jaki sposób ustala się sposób formatowania wyjścia dla poznanych typów zmiennych? 7. Czy podane wyrażenie ma prawidłową składnię: 3>5 4<3&&2+2?printf("poz\n");:2<3?printf("poz2\n");:printf("neg\n");? 8. Czy funkcja void inicjuj(int a){a=5; ma sens? Dlaczego? 9. Czym różnią się parametry formalne funkcji od jej parametrów aktualnych? 10. Czym różnią się zmienne lokalne od globalnych? 11. Na czym polega zjawisko przesłaniania zmiennych? 12. Czy wskazane jest używanie zmiennych globalnych w miejsce zmiennych lokalnych? 13. Czy prawdą jest, że zmienne globalne należy stosować w celu zmniejszenia ilości danych, które trzeba przekazać przy wywołaniu funkcji? Zagadnienia rozszerzające

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 30 1. Czy znając złożoność obliczeniową dwóch programów możemy stwierdzić który z nich wykona się szybciej? Uzasadnij i podaj przykłady. 2. Czy w warunku instrukcji if może wystąpić wywołanie funkcji scanf? Jeżeli tak, to w jakich sytuacjach może to być wskazane? 3. Poszukaj, jakie jeszcze są możliwości formatowania tekstu za pomocą funkcji printf i scanf. 4. Jakimi liczbami oznaczone są standardowe wyjścia w systemie UNIX/linux? 5. Czy istnieje inny sposób przekazywania zmiennej do funkcji niż przez wartość? Jeśli tak, to w jakim celu? 6. Niektóre języki programowania oprócz przekazywania argumentów do funkcji przez wartość umożliwiają przekazywanie ich przez zmienną/referancję. Jakie są różnice między tymi sposobami? Zadania 1. Zapisz funkcję int Min(int a, int b) wyznaczającą wartość minimalną. 2. Napisz program wyszukujący wszystkie dzielniki zadanej liczby. 3. Napisz algorytm który wczyta liczbę w systemie dziesiętnym i wypisze ją w systemie siódemkowym (lub ogólniej dowolnym zadanym). Napisz na jego podstawie program. 4. Napisz algorytm pozwalający na wyliczenie numeru grupy do haszówki na podstawie numeru indeksu i współczynników przy trzech ostatnich cyfrach. Napisz na jego podstawie program.

Składnia wyrażeń i instrukcji, złożoność obliczeniowa, operacje wejścia i wyjścia, funkcje 31 5. Napisz program wypisujący na ekranie kolejne potęgi liczby podanej przez użytkownika aż do przekroczenia wartości miliona wykorzystując formatowanie tekstu w celu uzyskania czytelnych rezultatów. 6. Znajdź algorytm, pozwalający na znajdowanie liczb pierwszych. Na jego podstawie napisz program, który będzie znajdował wszystkie liczby pierwsze w podanym przedziale. 7. Za pomocą zagnieżdżonych pętli for wypisz wszystkie dni występujące w roku 2010 w formacie dd:mm.