Informatyka przemysłowa – tendencje i wyzwania
Transkrypt
Informatyka przemysłowa – tendencje i wyzwania
Języki programowania - podstawy Andrzej Dudek Wydział Techniczno – Informatyczny W Jeleniej Górze Dudek A. Informatyka przemysłowa tendencje i wyzwania 26.10.2015 1 /24 Algorytm określony sposób rozwiązania jakiegoś problemu, składający się z ciągu następujących po sobie czynności (lub instrukcji) Sposób zapisu Słowny Przy pomocy schematu blokowego W pseudokodzie Implementacja w języku programowania Dudek A. Algorytm, sposób zapisu, język programowania - podstawy Oznaczenia Oznaczenia Języki programowania • • • • • • • • • • Dudek A. Programowanie proceduralne programowanie strukturalne – C , Pascal, Fortran programowanie funkcyjne - Scala programowanie imperatywne programowanie obiektowe – Java, C++, C#, Objective C programowanie uogólnione programowanie logiczne - Prolog programowanie aspektowe - AspectJ programowanie deklaratywne –Prolog, SQL programowanie sterowane zdarzeniami Algorytm, sposób zapisu, język programowania - podstawy Struktura programu - podstawy W programie w języku C / C++ można wyróżnić w miarę stałe bloki: W przypadku prostych programów nie wykorzystujących funkcji lub klas: #include <iostream> using namespace std; int main() { // Deklaracje dołączanych bibliotek / plików nagłowkowych, dyrektywy kompilatora, przestrzenie nazw // funkcja main - główna funkcja programu int ile_razy=1; // Deklaracje zmiennych for(int i=0;i<0;i++){ // Właściwe instrukcje cout << "!!!Hello World!!!" << endl; } return 0; // zakończenie funkcji main } W przypadku bardziej złożonych programów, oprócz funkcji main występują jeszcze definicje innych funkcji i/lub klas, plik cpp jest jeszcze często połączony z plikiem nagłówkowym *.h zawierającym ich prototypy. Słowa Kluczowe języka C Słowo OPIS asm Kod w asemblerze auto Modyfikator określający, że zmienne są pamiętane w domyślnym miejscu pamięci break Polecenie kończące bezwarunkowo for, while, switch, i do...while case W połączeniu ze switch - wybór wielokrotny char Najprostszy typ danych, 1 bajt const Modyfikator powodujący, że zmienna musi mieć w trakcie wykonywania programu tą samą wartość continue Polecenie powodujące przejście do następnej iteracji for, while, i do...while default Domyślna wartość w instrukcji switch do Instrukcja pętli double Typ danych - podwójna precyzja, zmiennopozycyjne. else Instrukcje do wykonania jeśli warunek po If ...jest niespełniony enum Typ danych pozwalający aby zmienna przyjmowała tylko określone wartości Słowa Kluczowe języka C extern Modyfikator określający, że zmienna jest zdefiniowana na zewnątrz programu/ funkcji float Typ danych – pojedyncza precyzja, zmiennopozycyjne. for Instrukcja pętli goto Instrukcja skoku if Instrukcja wyboru int Typ danych przechowujący liczby całkowite long Typ danych przechowujący liczby całkowite długie register Modyfikator określający, że zmienne są pamiętane w rejestrze ( o ile to możliwe) return Powrót z aktualnie wykonywanej funkcji short Typ danych przechowujący liczby całkowite krótkie Słowa Kluczowe języka C signed Modyfikator określające, że zmienne danego typu mogą być ujemne sizeof Operator określający rozmiar zmiennej static Modyfikator określający, że wartość zmiennej nie zmienia się pomiędzy kolejnymi wywołaniami funkcji struct Deklaracja struktury switch Wybór wielokrotny typedef Definicja nowego typu union Deklaracja unii unsigned Modyfikator określające, że zmienne danego typu nie mogą być ujemne void "Pusty" typ danych. Najczęściej służy do określenia, że funkcja nie ma zwracać żadnych wartości. volatile Modyfikator określający, że zmienna może być modyfikowana while Instrukcja pętli wykonywana dopóki warunek pętli jest prawdziwy. Słowa Kluczowe języka C ++ catch inline template class new this delete operator throw except private try finally Protected virtual friend Public Priorytety operatorów: Operatory Wiązanie 1. () [] -> :: . ++ i -- (przyrostkowe) od lewej do prawej 2. ! ~ + - ++ -- & * (typ) sizeof new delete od prawej do lewej 3. .* ->* 4. */ % 5. +- 6. << >> od lewej do prawej 7. < <= > >= od lewej do prawej 8. == != od lewej do prawej 9. & od lewej do prawej 10. ^ od lewej do prawej 11. | od lewej do prawej 12. && od lewej do prawej 13. || od lewej do prawej 14. ?: od prawej do lewej 15. = *= /= %= += -= &= ^= |= <<= >>= od prawej do lewej 16. , od lewej do prawej (dostęp do składowych obiektów) od lewej do prawej od lewej do prawej (dwuargumentowe) od lewej do prawej Funkcja: printf() biblioteka: <stdio.h> wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący , argument_1 , argument_2 , . . . ) ; tekst sterujący jest to stała łańcuchowa (w podwójnych cudzysłowach) zawierająca: zwykłe znaki (które są po prostu kopiowane na ekran) kody formatujące kolejnych argumentów: %c pojedynczy znak %s łańcuch znaków %d liczba dziesiętna ze znakiem %f liczba zmiennoprzecinkowa (notacja dziesiętna) %e liczba zmiennoprzecinkowa (notacja wykładnicza) %g liczba zmiennoprzecinkowa (krótszy z formatów %f %e) %u liczba dziesiętna bez znaku %x liczba w kodzie szesnastkowym (bez znaku) %o liczba w kodzie ósemkowym (bez znaku) l przedrostek (long) stosowany przed: d u x o \n nowa linia Instrukcja warunkowa: if ( wyrażenie ) instrukcja_1 ; else instrukcja_2 ; Przykład Napisz program , który rozwiąże układ równań ax+by=c dx+ey=e badając możliwe sytuacje (jedno rozwiązanie, wiele rozwiązań, brak rozwiązań) Instrukcja while Składnia instrukcji while jest następująca: while ( warunek ) instrukcja; warunek jest wyrażeniem języka C++, zaś instrukcja jest dowolną instrukcją lub blokiem instrukcji C++. Gdy wartością wyrażenia warunek jest true (prawda), wykonywana jest instrukcja, po czym następuje powrót do początku pętli i ponowne sprawdzenie warunku. Czynność ta powtarza się, dopóki warunek zwraca wartość true. Gdy wyrażenie warunek ma wartość false, działanie pętli zostaje zakończone Może się zdarzyć, że przed wykonaniem całego zestawu instrukcji w pętli będziesz chcieć powrócić do jej początku. Służy do tego instrukcja continue (kontynuuj). Może zdarzyć się także, że będziesz chcieć wyjść z pętli jeszcze przed spełnieniem warunku końca. Instrukcja break (przerwij) powoduje natychmiastowe wyjście z pętli i przejście wykonywania do następnych instrukcji programu. Przykład // zliczanie do 10 int x = 0; while (x < 10) { printf("X: %d", x); x++; } Przykład: Napisz program losujący liczbę całkowitą tak długo, aż wylosowana zostanie liczba podzielna przez 666. Instrukcja do...while Składnia instrukcji do...while jest następująca: do instrukcja while (warunek); Wykonywana jest instrukcja, po czym sprawdzany jest warunek. Jeśli warunek jest spełniony, pętla jest powtarzana; w przeciwnym razie jej działanie się kończy. Pod innymi względami instrukcje i warunki są identyczne, jak w pętli while. Przykład // wypisujemy małe litery alfabetu char ch = 'a'; do { printf("%c",ch); ch++; } while ( ch <= 'z' ); Używaj pętli do...while, gdy chcesz mieć pewność że pętla zostanie wykonana co najmniej raz. Używaj pętli while, gdy chcesz pominąć pętlę (gdy warunek nie jest spełniony). Składnia pętli for Składnia instrukcji for jest następująca: for (inicjalizacja; test; akcja ) instrukcja; Instrukcja inicjalizacja jest używana w celu zainicjalizowania stanu licznika lub innego przygotowania do wykonania pętli. Instrukcja test jest dowolnym wyrażeniem języka C++, które jest obliczane przed każdym wykonaniem zawartości pętli. Jeśli wyrażenie test ma wartość true, wykonywane jest ciało pętli, po czym wykonywana jest instrukcja akcja z nagłówka pętli (zwykle po prostu następuje inkrementacja zmiennej licznikowej). Przykład 1 // dziesięć razy wpisuje napis "Hello" for (int i = 0; i < 10; i++) printf("Hello! "); Przykład 2 for (int i = 0; i < 10; i++) { printf("Hello!"); printf("wartoscia i jest: %d",i); } Przykład Napisz program obliczający n-tą liczbę Fibbonaciego Instrukcja switch Składnia instrukcji switch jest następująca: switch (wyrażenie) { case wartośćJeden: instrukcja; case wartośćDwa: instrukcja; .... case wartośćN: instrukcja; default: instrukcja; } Instrukcja switch umożliwia rozgałęzienie programu (w zależności od wartości wyrażenia). Na początku wykonywania instrukcji następuje obliczenie wartości wyrażenia, gdy odpowiada ona którejś z wartości przypadku case, wykonanie programu przechodzi do tego właśnie przypadku. Wykonywanie instrukcji jest kontynuowane aż do końca ciała instrukcji switch lub do czasu napotkania instrukcji break. Jeśli wartość wyrażenia nie odpowiada żadnej z wartości przypadków case i występuje przypadek default, wykonanie przechodzi do przypadku default. W przeciwnym razie wykonywanie instrukcji switch się kończy. Przykład: Napisz program podający słownie dzień tygodnia , dla dnia tygodnia podanego w postaci liczby. Tablice : int tablica [ 20 ]; // 20-cio elementowa tablica liczb całkowitych # define ile=15 float tekst [ile]; rzeczywiste typu float // 15-cio elementowa tablica zmiennych zmiennopozycyjnych (liczby char macierz [ 3 ] [ 5 ]; // dwuwymiarowa tablica: znaków 3 wiersze po 5 kolumny, w języku C tablice są zawsze np. pierwszym elementem tablicy macierz jest: macierz[ 0 ][ 0 ] a ostatnim elementem jest: tzn. macierz[ 2][ 4 ] macierz[ wymiar_1 indeksowane 1 ][wymiar_2 od zera 1] w języku C nie jest sprawdzana zgodność indeksu z wymiarami tablicy !!! często jest to przyczyną trudnych do wykrycia błędów. np. odwołanie: macierz[ 1 ][ 5 ] zwróci w rzeczywistości wartość pierwszego elementu z trzeciego wiersza tzn. macierz[ 2 ][ 0 ] Definicję tablicy można połączyć z inicjacją jej zawartości: // sama definicja bez inicjacji int tab[ 10 ]; int tab_inicjowana[ 10 ] = { 20, -3, 12, 1, 0, 7, -5, 100, 2, 5 }; char tab_znakow[ 5 ] { ‘a’, ‘B’, ‘\n’, ‘1’, ‘\0’ }; float macierz_A[ 3 ][ 2 ] = { {1,1}, {3.5,7.0}, {-15,100} }; float macierz_B[ 3 ][ 2 ] = { 1, 1, 3.5, 7.0, -15, 100 }; = Kolejne „inicjatory” zawsze wstawiane są do (w związku z tym można pominąć wewnętrzne nawiasy klamrowe). kolejnych „komórek” tablicy Jeżeli lista inicjatorów jest krótsza niż ilość elementów tablicy to pozostałe elementy są uzupełniane zerami lub wskaźnikami NULL np. definicja: int tab[ 10 ] = { 20, -3, 12, 1 }; jest równoważna: int tab[ 10 ] = { 20, -3, 12, 1, 0, 0, 0, 0, 0, 0 }; a definicja: float macierz[ 3 ][ 2 ] = { {1}, {3.5,7.0} }; jest równoważna: float macierz[ 3 ][ 2 ] = { {1,0}, {3.5,7.0}, {0,0} }; lub: float macierz[ 3 ][ 2 ] = { 1, 0, 3.5, 7.0, 0, 0 }; PRZYKŁAD (tablice): • Wprowadź dane do tablicy 10 elementowej • Policz ile w tablicy jest elementów większych od trzech • Znajdź minimalną i maksymalną wartość w tablicy • Posortuj liczby bąbelkowego w tablicy metodą sortowania