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

Podobne dokumenty