Spis treści

Transkrypt

Spis treści
1
2010-05-29
Spis treści
1. LITERATURA.................................................................................................................................................................................... 3
2. PODSTAWOWE POJĘCIA .............................................................................................................................................................. 3
3. PROGRAM ......................................................................................................................................................................................... 4
3.1. JĘZYKI PROGRAMOWANIA .............................................................................................................................................................. 4
3.2. KOMPILOWANIE PROGRAMU .......................................................................................................................................................... 4
3.3. URUCHAMIANIE I TESTOWANIE PROGRAMU ................................................................................................................................... 4
3.4. DOKUMENTACJA PROGRAMU ......................................................................................................................................................... 4
3.5. PROGRAM – JEDNOSTKI SYNTAKTYCZNE ........................................................................................................................................ 5
4. ŚRODOWISKO PROGRAMISTYCZNE — WPROWADZENIE................................................................................................ 5
5. WPROWADZENIE DO C++............................................................................................................................................................. 6
ZMIENNE I FUNKCJE .............................................................................................................................................................................. 7
ZMIENNE TYPÓW ZŁOŻONYCH .............................................................................................................................................................. 7
6. INSTRUKCJE STERUJĄCE ............................................................................................................................................................ 8
INSTRUKCJA WARUNKOWA IF .............................................................................................................................................................. 8
PĘTLA WHILE ....................................................................................................................................................................................... 8
PĘTLA DO WHILE ................................................................................................................................................................................. 8
PĘTLA FOR ........................................................................................................................................................................................... 8
INSTRUKCJA WYBORU SWITCH ............................................................................................................................................................... 9
INSTRUKCJA GOTO ................................................................................................................................................................................. 9
INSTRUKCJA BREAK................................................................................................................................................................................ 9
INSTRUKCJA CONTINUE .......................................................................................................................................................................... 9
7. TYPY DANYCH ............................................................................................................................................................................... 10
7.1. DEFINIOWANIE ZMIENNYCH I STAŁYCH NAZWANYCH. DEKLARACJA A DEFINICJA ZMIENNEJ ....................................................... 10
7.2. KLASYFIKACJA TYPÓW ................................................................................................................................................................ 10
Typy proste wbudowane, reprezentujące liczby............................................................................................................................ 10
Typy złożone.................................................................................................................................................................................. 10
Typ void ...................................................................................................................................................................................... 11
Typ wyliczeniowy enum ................................................................................................................................................................ 11
Instrukcja typedef ..................................................................................................................................................................... 11
Modyfikator register ............................................................................................................................................................... 11
Modyfikator volatile ............................................................................................................................................................... 11
7.3. ZAKRES WAŻNOŚCI NAZWY A CZAS ŻYCIA OBIEKTU..................................................................................................................... 11
7.4. ZMIENNE GLOBALNE I LOKALNE. PRZESTRZEŃ NAZW. ZASŁANIANIE NAZW OBIEKTÓW ............................................................... 12
7.5. STAŁE DOSŁOWNE ........................................................................................................................................................................ 12
8. OPERATORY................................................................................................................................................................................... 13
8.1. OPERATORY MATEMATYCZNE ...................................................................................................................................................... 13
8.2. POZOSTAŁE OPERATORY .............................................................................................................................................................. 14
8.3. PRIORYTETY I ŁĄCZNOŚĆ OPERATORÓW ...................................................................................................................................... 14
9. FUNKCJE.......................................................................................................................................................................................... 16
9.1. PROCEDURA A FUNKCJA. PARAMETRY FORMALNE I AKTUALNE. DEKLARACJA A DEFINICJA FUNKCJI .......................................... 16
9.2. ZWRACANIE REZULTATU PRZEZ FUNKCJĘ..................................................................................................................................... 16
9.3. PRZESYŁANIE ARGUMENTÓW DO FUNKCJI PRZEZ WARTOŚĆ ......................................................................................................... 17
9.4. PRZESYŁANIE ARGUMENTÓW PRZEZ REFERENCJĘ ........................................................................................................................ 17
9.5. PRZESYŁANIE ARGUMENTÓW JAKO WSKAŹNIKÓW ....................................................................................................................... 17
9.6. ARGUMENTY DOMNIEMANE ......................................................................................................................................................... 18
9.7. ZAKRES WAŻNOŚCI NAZWY A CZAS ŻYCIA OBIEKTU — C.D.......................................................................................................... 18
Obiekty globalne ........................................................................................................................................................................... 18
Obiekty lokalne automatyczne...................................................................................................................................................... 18
Obiekty lokalne statyczne ............................................................................................................................................................. 18
10. TABLICE ........................................................................................................................................................................................ 19
10.1. DEFINIOWANIE TABLIC.............................................................................................................................................................. 19
10.2. ELEMENTY TABLICY ................................................................................................................................................................... 19
10.3. INICJALIZACJA TABLIC ............................................................................................................................................................... 19
10.4. TABLICE ZNAKOWE .................................................................................................................................................................... 19
10.5. PRZEKAZYWANIE TABLIC DO FUNKCJI. TABLICE WIELOWYMIAROWE ........................................................................................ 19
2
11. WSKAŹNIKI .................................................................................................................................................................................. 20
11.1. DEFINIOWANIE I UŻYWANIE WSKAŹNIKÓW ................................................................................................................................ 20
11.2. OPERATOR RZUTOWANIA REINTERPRET_CAST ........................................................................................................................... 20
11.3. WSKAŹNIKI TYPU VOID............................................................................................................................................................... 20
11.4. ZASTOSOWANIE WSKAŹNIKÓW WOBEC TABLIC .......................................................................................................................... 20
11.5. STAŁE WSKAŹNIKI, WSKAŹNIKI DO STAŁYCH ............................................................................................................................. 21
11.6. ZASTOSOWANIE WSKAŹNIKÓW W ARGUMENTACH FUNKCJI ....................................................................................................... 21
11.7. ZASTOSOWANIE WSKAŹNIKÓW PRZY DOSTĘPIE DO KONKRETNYCH KOMÓREK PAMIĘCI ............................................................. 21
11.8. REZERWACJA OBSZARÓW PAMIĘCI ............................................................................................................................................. 21
Operatory new i delete .......................................................................................................................................................... 21
Dynamiczna alokacja tablicy........................................................................................................................................................ 21
Umiejscawiający operator new .................................................................................................................................................... 21
3
1. Literatura
Algorytmika
[1] J. Glenn Brookshear: Informatyka w ogólnym zarysie. WNT, Warszawa 2003
[2] Leszek Jung: Podstawy użytkowania komputerów. Konstruowanie algorytmów. S. WAT, Warszawa 1988
[3] Niklaus Wirth: Algorytmy + struktury danych = programy. WNT, Warszawa 2004
[4] Henryk Spustek, Jerzy Grzyb: Informatyka - algorytmy, wstęp do programowania. Skrypt WSISiZ,
Warszawa 2002
Programowanie w C++
[5] Jerzy Grębosz: Symfonia C++ standard. Edition 2000 Kraków
[6] Jesse Liberty (tłum. Marcin Pancewicz): C++ dla każdego. Helion, Gliwice 1994
org. Teach Yourself C++ in 21 Days. Fourth Edition. Sams
[7] A.Stasiewicz: C++ Ćwiczenia praktyczne. Helion, Gliwice 08/2004
[8] Piotr Wróblewski: Język C++ dla programistów. Helion, Gliwice 1994
[9] Michael Flenov: Elementarz hakera. Helion, Gliwice 2005
[10] Richard C. Linecker, Tom Archer: Visual C++ Vademecum profesjonalisty. Helion, Gliwice
[11] Viktor Toth: Programowanie Windows 98/NT. Księga eksperta. Helion, Gliwice (org. Sams)
[12] Charles Petzold, Paul Yao: Programowanie Windows 95. Helion, ReadMe 1997 (org. Microsoft Press)
2. Podstawowe pojęcia
Informatyka – nauka o przetwarzaniu informacji przy użyciu środków automatyzujących ten proces.
Informacja – wielkość abstrakcyjna, która może być
• przechowywana w pewnych obiektach,
• przesyłana między pewnymi obiektami,
• przetwarzana w pewnych obiektach
• i stosowana do sterowania pewnymi obiektami,
przy czym przez obiekt rozumie się organizmy żywe, urządzenia techniczne oraz systemy takich obiektów.
Komunikat – odpowiednio zakodowana wiadomość, zawierająca pewną ilość informacji.
Komputer – urządzenie techniczne, umożliwiające automatyzację procesu przetwarzania informacji,
opisywanego przez program zapisywany w pamięci komputera,
a następnie wykonywany (celem realizacji tego procesu przetwarzania informacji)
przez jego procesor (układ operacyjny, zdolny do wykonywania obliczeń opisanych kolejnymi instrukcjami programu).
Programowanie – samodzielna dyscyplina, zajmująca się systematycznym konstruowaniem i formułowaniem
algorytmów, zapisywanych jako programy, które są następnie uruchamiane i testowane.
Algorytm – opis działań, które należy wykonać w określonej kolejności na ustalonych obiektach i zbiorach
wartości dla osiągnięcia wyznaczonego celu.
Schemat blokowy – graficzny zapis działań algorytmu przy wykorzystaniu ustalonych schematów graficznych
łączonych za pomocą skierowanych linii obrazujących kolejność ich wykonywania.
Program – skonkretyzowany zapis w formie tekstowej algorytmu (wraz z opisem obiektów w nim
występujących) przy użyciu pojęć danego języka programowania.
4
3. Program
Język programowania – ściśle określona konwencja notacyjna służąca do zapisu algorytmów w formie
programów, które są przeznaczone do wykonywania przez komputer.
Program – ciąg symboli definiowanych przez język programowania.
Komputer może wykonywać tylko programy zapisane w swoim języku wewnętrznym.
Język formalny – system:
gdzie:
J = V , G , D, Z ,
V – alfabet (dopuszczalny zbiór znaków języka);
G – gramatyka (składnia (syntaktyka); zbiór reguł składniowych);
D – dziedzina (zbiór informacji wyrażalnych w języku);
Z – znaczenie (semantyka; zbiór relacji wiążących wyrażenia języka z elementami jego dziedziny),
w którym – stosując dobrze określone reguły składniowe – możemy uzyskać (lub sprawdzić) wszystkie
napisy (zdania) uznawane za komunikaty w tym języku.
Pragmatyka języka – zbiór zaleceń dotyczących używania poprawnych wyrażeń języka.
3.1. Języki programowania
Język wewnętrzny (maszynowy) – język programowania, którego jedynymi dopuszczalnymi wyrażeniami są
zapisywane jako liczby binarne, słowa rozkazowe należące do repertuaru rozkazów (zwanego także listą
rozkazów), w który jest technicznie „wyposażony” dany komputer i które mogą być bezpośrednio
wykonywane (przez procesor).
Programy tłumaczące:
• asembler dla języków niskopoziomowych;
• kompilator dla języków wysokopoziomowych;
• interpreter dla języków konwersacyjnych;
Język niskopoziomowy – język programowania, którego własności w istotnym stopniu odzwierciedlają
własności konkretnego komputera.
Język zestawiający (asemblerowy) – język programowania, powstały z języka wewnętrznego przez
parametryzację zapisu części słowa rozkazowego; parametryzacja polega głównie na symbolicznym
zastąpieniu liczbowych kodów rozkazów oraz liczbowych adresów słów pamięci.
Język wysokopoziomowy – język programowania, którego własności i notacja jest zbliżona do stosowanej
notacji oraz pojęć z określonej dziedziny zastosowań.
3.2. Kompilowanie programu
Kompilacja – proces tłumaczenia programów zapisanych w języku programowania na równoważny
semantycznie (znaczeniowo) program zapisany w języku wewnętrznym komputera, realizowany przez
specjalny program tłumaczący, zwany kompilatorem.
3.3. Uruchamianie i testowanie programu
Testowanie programu – proces wielokrotnej realizacji programu dla zbioru zestawów danych testowych
(wybranych zestawów danych wejściowych) celem wykrycia możliwie największej liczby błędów;
Metoda eksperymentalnego badania poprawności programu, zajmująca od 30 do 60% całego czasu
przeznaczonego na opracowanie programu.
Uruchamianie programu – proces złożony z kilku etapów: wykrycie miejsca wystąpienia i powstania błędu,
doprowadzenie programu do działania, które są powtarzane cyklicznie, po każdorazowym stwierdzeniu
wystąpienia błędu.
3.4. Dokumentacja programu
Dokumentacja programu – jest wyselekcjonowanym zbiorem informacji z kolejnych etapów jego
projektowania oraz o sposobie użytkowania i pielęgnowania.
Trzy rodzaje dokumentacji programu:
– projektowa, opisuje kolejne etapów wytwarzania programu;
– eksploatacyjna, zwana podręcznikiem użytkownika, opisuje przeznaczenie programu i sposób używania;
– techniczna, tworzona dla potrzeb przyszłej pielęgnacji programu.
5
3.5. Program – jednostki syntaktyczne
Jednostka syntaktyczna – wyodrębniona część programu, która ma dobrze określoną interpretację (znaczenie)
w ramach programu.
Jednostki syntaktyczne:
Moduł – wyodrębniona część programu mająca:
• dobrze (i jednoznacznie) określone znaczenie, które jest niezależne od miejsca użycia modułu i wewnętrznej
struktury innych modułów;
• nazwę i ściśle określoną komunikację (więzi) z innymi modułami, poprzez specyfikację atrybutów
(jednostek programowych):
– importowanych z innych modułów,
– eksportowanych do innych modułów,
których rodzaj i sposób użycia określa jednoznacznie sama ich deklaracja;
• ustalone zasady łączenia z innymi modułami w większe jednostki programowe (do programu włącznie) na
podstawie ich specyfikacji i bez znajomości wewnętrznej struktury tych modułów.
Część deklaracyjna, część instrukcyjna.
Stała – jednostka syntaktyczna, reprezentująca synonim pewnej niezmiennej wartości wyrażenia (wielkości)
przypisanego jej w deklaracji stałych.
Wyrażenie – zespół argumentów powiązanych operatorami według ustalonych reguł syntaktycznych określonej konwencji
notacyjnej (najczęściej zwyczajowej notacji matematycznej).
Typ danych – jednostka syntaktyczna, określająca zbiór wartości oraz operacji wykonywanych na tych
wartościach.
Deklaracje typów wprowadzają nazwy, które reprezentują opis typu danych.
Zmienna – jednostka syntaktyczna reprezentująca obiekt programu, który może przyjmować wartości ze
zbioru określonego typem danych tej zmiennej.
Deklaracje stałych wprowadzają nazwy stałych jako synonimy ustalonych wielkości (literałów: liczb, znaków, ciągów znaków).
Deklaracje zmiennych wprowadzają nazwy, które reprezentują obiekty przyjmujące wartości ze zbioru wartości określonego typem
danych deklarowanej zmiennej.
Procedura / funkcja – wyodrębniona część programu (podprogramu, modułu), posiadająca:
• nazwę, opisującą dobrze określone działanie wykonywane na dobrze określonych obiektach (parametrach
formalnych, zmiennych lokalnych i zmiennych globalnych)
• ustalony sposób wymiany danych z pozostałymi częściami programu:
• sposób przekazu danych do treści procedury / funkcji z pozostałej części programu (w której nastąpiło
wywołanie procedury / funkcji)
• sposób przekazu obliczonej wartości do miejsca wywołania funkcji.
Deklaracje procedur / funkcji wprowadzają nazwy, którym przypisywana jest wyodrębniona część programu
Parametr formalny – nazwa zmiennej występującej w treści procedury, której nie odpowiada żaden obiekt
programu (algorytmu);
dopiero w chwili użycia (wywołania) procedury podczas wykonywania programu, w którym została
zdefiniowana, każdemu parametrowi formalnemu zostaje przyporządkowany
parametr aktualny, czyli jakiś obiekt (zmienna, wartość wyrażenia) programu, który zastępuje
odpowiadający mu parametr formalny w treści procedury.
Instrukcja – wyróżniona jednostka syntaktyczna mająca jasno określone znaczenie operacyjne przez
semantykę języka. Wykonanie instrukcji polega na realizacji w jednoznacznie określonym porządku operacji
(działań) na obiektach wskazanych przez identyfikatory zmiennych (oznaczających elementy struktury
danych) występujących w rozważanej instrukcji.
4. Środowisko programistyczne — wprowadzenie
6
5. Wprowadzenie do C++
#include
// Program 1
/* najprostszy program
w C++ */
/* wersja obiektowa */
#include <iostream.h>
void main()
{
cout << "Halo\n";
}
iostream.h
/* wersja
proceduralna */
#include <stdio.h>
void main()
{
printf("Halo\n");
}
stdio.h
main
void
\n
← dyrektywa włączenia tekstu
zawartego w pliku
← (Input Output Stream) plik
deklaracji obiektowych strumieni
wej/wyj
← (Standard Input Output) plik
deklaracji funkcji wej/wyj
← zastrzeżona nazwa głównej
funkcji programu
← typ danej “pustej”
← przejście do nowego wiersza
Wolny format zapisu programu
Instrukcje oddzielane za pomocą ; Białe znaki – ignorowane: spacje, tabulatory, nowe linie
lub
// do końca linii
Komentarze: /* nie wolno zagnieżdżać */
Zastrzeżona nazwa głównej funkcji programu — funkcja main()
Nazwy w C++
Dowolnie długi ciąg liter, cyfr oraz znaków podkreślenia _.
Nazwa nie może się zacząć od cyfry. Małe i wielkie litery w nazwach są rozróżniane.
Nazwa nie może być identyczna z żadnym ze słów kluczowych języka C++.
Słowa kluczowe w C++
asm
auto
bool
break
case
catch
char
class
const
const_cast
continue
default
delete
do
double
dynamic_cast
else
enum
explicit
export
extern
false
float
for
friend
goto
if
inline
int
long
mutable
namespace
new
operator
private
protected
public
register
reinterpret_cast
return
short
signed
sizeof
static
static_cast
struct
switch
template
this
throw
true
try
typedef
typeid
typename
union
unsigned
using
virtual
void
volatile
wchart_t
while
Standardowa obiektowa biblioteka wejścia/wyjścia – plik nagłówkowy <iostream.h> lub nowsza plik
nagłówkowy <iostream> (deklaracje).
obiekty predefiniowane:
cin – standardowy strumień wejściowy danych (zwykle klawiatura)
cout – standardowy strumień wyjściowy danych (zwykle ekran monitora)
cerr – standardowy strumień wyjściowy błędów (zwykle ekran monitora)
Zmiana strumienia wejściowego cin:
Wykorzystanie strumienia wyjściowego błędów cerr:
dany jest plik tekstowy a.txt,
zawierający np:
3.4 6.1
i wynikowy Program 2: program.exe,
który uruchamiamy: program.exe < a.txt
#include <iostream.h>
void main()
// ...
cerr << "OK!\n";
// ...
}
uruchamiamy: program.exe > kom.txt
7
Zmienne i funkcje
// Program 2
#include <iostream>
using namespace std;
// włączenie pliku
// użycie przestrzeni nazw std
endl ← (end line) manipulator
przejścia do nowej linii
float roznica(float x, float y); // deklaracja funkcji
void main()
// główna funkcja
{
float a, b;
// definicja zmiennych: a, b
cin >> a >> b;
// wczytanie wartości do a, b
float s = roznica(a, b); // wywołanie funkcji (parametry aktualne)
cout << "Roznica = " << s << "\n";
cout << "2 - 3 = " << roznica(2,3) << endl;
}
float roznica(float x, float y) // definicja funkcji
{
// x, y – parametry formalne
return x - y;
// zwrócenie wartości przez funkcję
}
Definicja zmiennej (§7.1, s. 10)
typz nazwa_zmiennej;
Definicja funkcji (§9.1, s. 16)
typf nazwa_fun(typ1 arg1, typ2 arg2, ..., typn argn)
{
// ciało funkcji
}
Deklaracja funkcji (§9.1, s. 16)
typf nazwa_fun(typ1 [arg1], typ2 [arg2], ..., typn [argn]);
Wywoływanie funkcji (§9.1, s. 16)
nazwa_fun(arg_akt1, arg_akt2, ..., arg_aktn)
Zmienne typów złożonych
zmienne wskaźnikowe (§11, s. 20), zmienne referencyjne, tablice (§10, s. 19).
// Program 3
#include <iostream>
using namespace std;
Odwołania programu Pamięć fizyczna
a
wartość
adres
&a
1->2->3
1000h
void main()
// główna funkcja
wsk
{
1000h
1004h
*wsk
int a = 1; // definicja i inicjalizacja zmiennej a
10
1008h
ref
// zmienna wskaźnikowa (wskaźnik to zmienna do przechowywania adresu)
20
100Ch
tab
int* wsk;
// definicja wskaźnika do obiektów typu int
0
1010h
wsk = &a;
// przypisanie do wskaźnika adresu zmiennej (obiektu) a
tab[0]
1014h
cout << a; // 1
tab[1]
1008h
*wsk = 2;
// przypisanie do obiektu wskazanego przez wsk wartości 2
tab[2]
cout << a; // 2
101Ch
wtab
// zmienna referencyjna (referencja to alias już istniejącej zmiennej):
int& ref = a;
// definicja referencji do obiektu a
cout << a; // 2
ref = 3;
// przypisanie do referencji ref wartości 3
cout << a; // 3
// tablica (grupuje zmienne jednego typu):
int tab[3] = {10, 20}; // definicja tablicy 3-elementowej obiektów typu int
for(int i=0; i<3; i++)
cout << tab[i]; // wydruk elem. tablicy: 10 20 0
int* wtab = tab; // nazwa tablicy jest adresem jej początku, czyli pierwszego
// elementu o indeksie 0 (tablice indeksowane są od 0)
}
// włączenie pliku
// użycie przestrzeni nazw std