Podstawy

Transkrypt

Podstawy
Podstawy
J zyk C wyłonił si z j zyka B, który powstał z kolei z j zyka BCPL (Basic Combined Programming Language). BCPL został
stworzony przez Martina Richardsa w roku 1967. Był to j zyk beztypowy, który działał bezpo rednio na słowach
maszynowych i adresach. Zainspirowany j zykiem BCPL Ken Thomspon w roku 1970 stworzył beztypowy j zyk B. J zyk B i
j zyk asemblera zostały u yte do napisania pierwszej wersji systemu UNIX. W roku 1972, Dennis Ritchie zaprojektował j zyk
C, w którym zawarł szereg idei pochodz cych z j zyka BCPL, ponadto zostały wprowadzone typy (typy całkowite,
rzeczywiste itp.). Komitet ANSI okre lił w roku 1988 unowocze niony standard j zyka C. J zyk zgodny z tym standardem
okre lony jest jako ANSI C.
J zyk C++ został stworzony przez Bjarne Stroustrup’a i jego zespół w AT&T, jako rozwini cie C .
Przeznaczenie: symulacje- j zyk miał umo liwi efektywne zorientowane obiektowo programowanie.
Pierwsza wersja C(++) powstała w 1980 roku jako „C with classes”, a ostateczna wersja j zyka wg Stroustrupa - w 1985 roku,
ju pod nazw C++.
1989 - utworzenie przez ANSI (American National Standards Institute) komitetu standaryzacyjnego. Cel – unifikacja j zyka –
ró nicowanego przez producentów kompilatorów i rodowisk programistycznych.
1998 ISO (International Organization for Standarization) zatwierdza standard dla C++ (ISO/IEC 14882).
C++Builder 5 jest rodowiskiem RAD (Rapid Application Development – błyskawiczne tworzenie aplikacji) dla
programuj cych w j zyku C++. C++Builder 6 - pierwszym, które zawiera bibliotek komponentów CLX, umo liwiaj c
tworzenie aplikacji dla Windows i Linuksa przy wykorzystaniu wspólnego kodu. Pozwoli to programistom (przy u yciu wersji
C++Buildera dla Linuksa - Kylix 3) szybko tworzy wydajne aplikacje dla obu najpopularniejszych systemów operacyjnych
dla PC. Oczywi cie korzystanie z CLX zamiast z kontrolek windowsowych (VCL) wpłynie nieco na wygl d i zachowanie, a
tak e wi ksz obj to tworzonych programów, jednak dzi ki temu mo liwe b dzie obni enie kosztów przygotowania
aplikacji dla wi kszej grupy u ytkowników.
!
!
Uruchomienie programu C++ Builder
C++ Builder po uruchomieniu wygeneruje automatycznie kod nowego projektu – niestety ten projekt to aplikacja
wykorzystuj ca interfejs graficzny. Poniewa nasze programy b d przeznaczone do uruchamiania w rodowisku konsoli, nie
mo emy korzysta z tego projektu.
Tworzenie nowego projektu
Je li chcemy utworzy nowy program, post pujemy zgodnie z ilustracjami poni ej.
[Wprowadzamy nast puj c konwencj zapisu takich operacji , jak powy ej: File>New>Other...>Console Wizard]
a nast pnie
Poniewa nasz pierwszy (i nie tylko) program nie b dzie korzystał z komponentów VCL , CLX ani te
wielow tkowy (Multi Threaded) – wybieramy jak powy ej.
nie b dzie
Kompilator automatycznie wygeneruje szkielet pliku ródłowego (Unit1.cpp):
//--------------------------------------------------------------------------#pragma hdrstop
//--------------------------------------------------------------------------#pragma argsused
int main(int argc, char* argv[])
{
return 0;
}
//--------------------------------------------------------------------------Wygenerowany kod nie jest nam do niczego potrzebny, zast pujemy go własnym.
Kompilowanie i uruchamianie projektu
Plik wykonywalny (*.exe) tworzony przez Buildera, zawsze b dzie miał tak sam nazw , jak projekt. Domy lnie projekt
uzyskuje nazw Projectnumer_porz dkowy (je li to pierwszy projekt, numer_porz dkowy b dzie równy 1). Projekt mo na
zapisa pod dowoln nazw : File > Save Project as .... Zakładaj c, e to nasz pierwszy projekt, Builder za da kolejno nazwy
pliku ródłowego (domy lnie Unit1.cpp) i nazwy pliku projektu (domy lnie Project1.bpr). Plik wykonywalny uzyskamy
poleceniem:
- Project > Make Project1 [skrót Ctrl+F9] - kompilator przetworzy tylko pliki, zmodyfikowane przez nas od dokonania
ostatniej kompilacji [ten sam efekt uzyskamy wydaj c polecenie uruchomienia naszego programu - Run [skrót F9]
(przycisk
)]. Oczywi cie Run po kompilacji dodatkowo uruchomi nasz program.
-
Project > Build Project1 [skrót F7]– kompilator przetwarza ponownie wszystkie pliki projektu
Otwieranie ju istniej cego pliku z kodem ródłowym1 (*.cpp)
Prac musimy rozpocz od polecenia File>Close All. Pomini cie tego kroku jest cz stym bł dem. Dlaczego?
Je li wła nie uruchomili my C++ Buildera, utworzony jest projekt przeznaczony dla aplikacji z interfejsem graficznym
(porównaj: Uruchomienie programu C++ Builder) – i skompilowanie naszego kodu ródłowego nie b dzie dla takiego
projektu mo liwe. Je li otwarty jest projekt przeznaczony dla konsoli – otwarcie naszego kodu ródłowego w tym projekcie
nic nie da, C++ Builder w dalszym ci gu b dzie kompilował stary plik ródłowy.
Przykład:
Utwórz nowy projekt: File>Close all; File>New>Other>Console Wizard. Jako kod ródłowy umie
#include <iostream>
using namespace std;
nast puj cy program:
int main()
{
cout<<"a";
system("pause");
return 0;
}
Teraz zapisz projekt [File>Save Project as...] pod nazw test.bpr [a plik ródłowy jako test.cpp]. Teraz otwórz program
notatnik, wprowad nast puj cy kod:
#include <iostream>
using namespace std;
int main()
{
cout<<"b";
system("pause");
return 0;
}
i zapisz plik jako test2.cpp w katalogu, w którym zostały zapisane pliki test.cpp i test.bpr. Zamknij w Builderze okno Edytora
kodu:
Teraz otwórz plik test2.cpp [File>Open....]. Uruchom program [F9]. Jaki komunikat został wy wietlony na konsoli?
Otwieranie pliku projektu – Project Manager
Aby otworzy zapisany plik projektu nale y wybra polecenie File>Open Project... [Ctrl+Shift+o], wyszuka plik projektu i
zatwierdzi . Po otwarciu projektu musimy sami otworzy okno Edytora kodu. Nale y otworzy narz dzie Project Manager View>Project Manager [skrót Ctrl+Alt+F11], a nast pnie rozwin w zeł o nazwie NazwaProjektu.exe i otworzy plik z
kodem ródłowym:
i ju mo emy zacz
1
prac z naszym programem.
Przyjmujemy, e jest to kod aplikacji przeznaczonej do wykonywania z poziomu konsoli
"
!
#
Najprostszy program w C++ ma posta :
int main()
{
return 0;
}
Ka dy program C++ przeznaczony dla konsoli musi zawiera funkcj main (główna funkcja programu, od niej powłoka
rozpoczyna wykonywanie programu), zwracaj c (do powłoki systemu operacyjnego) warto typu int (integer liczba
całkowita 2 lub 4 bajtowa [zale nie od architektury procesora]). Przedstawiony powy ej program składa si wył cznie
z definicji funkcji main. Ciało funkcji, zawarte pomi dzy nawiasami klamrowymi { }, składa si z jednej instrukcji:
return 0
zako czonej rednikiem. W j zyku C++ (w przeciwie stwie do np. Visual Basic-a) wi kszo instrukcji musi by
zako czonych rednikiem. Instrukcje, których nie ko czymy rednikiem zostan szczegółowo omówione pó niej.
Przyjmijmy, e nasz drugi program ma wy wietli na konsoli tekst „Jestem Twoim drugim programem”.
Skorzystamy z obiektu cout (console output), który kieruje wszystkie dane wysłane do niego na standardowe wyj cie
(zwykle jest to konsola, ale istnieje mo liwo przekierowania strumienia wyj cia do pliku lub urz dzenia peryferyjnego).
Obiekt cout jest instancj klasy ostream (output stream – „strumie wyj cia”). Obiekt ten jest tworzony automatycznie
podczas uruchomienia programu, je li doł czymy odpowiedni standardowy plik nagłówkowy przy u yciu dyrektywy
preprocesora (która zaczyna si od znaku # i ko czy wraz z ko cem linii):
#include <iostream>
.
Dyrektywa wymaga wykonania pewnego działania zanim program zostanie przetłumaczony na kod maszynowy. Preprocesor
wł cza (wstawia) zawarto wymienionego pliku (w tym przypadku iostream), dokładnie w miejscu, gdzie pojawia si linia
#include.
Zanim b dziemy mogli skorzysta z obiektu cout, musimy wst pnie omówi poj cie przestrzeni nazw (namespace).
Przestrze nazw jest narz dziem umo liwiaj cym unikni cie kolizji nazw zmiennych, stałych, funkcji i obiektów.
Do elementów nale cych do danej przestrzeni nazw mo emy si dosta tylko, je li poinformujemy kompilator, e dany
identyfikator nale y do okre lonej przestrzeni nazw.
Na przykład wszystkie identyfikatory standardowej biblioteki s zawarte w przestrzeni nazw std. Mo emy si do nich
odwoływa na trzy sposoby (przykłady dla obiektu cout):
-
za pomoc dyrektywy using, np:
using namespace std;
coutdalszy ci g instrukcji;
-
za pomoc kwalifikatora ::, np.:
std::coutdalszy ci g instrukcji;
-
za pomoc deklaracji using:
using std::cout;
coutdalszy ci g instrukcji;
My b dziemy si posługiwa pierwsz metod – dyrektyw using.
Aby przesła komunikat „Jestem Twoim drugim programem” do obiektu cout, który wy le go na konsol , u yjemy
operatora << (operator wstawienia - insertion). Odpowiednia instrukcja ma posta :
cout<<”Jestem Twoim drugim programem”;
.
Nasz drugi program b dzie miał zatem posta :
#include <iostream>
//dyrektywa preprocesora doł czaj ca plik nagłówka iostream
using namespace std;
/*udost pnienie wszystkich elementów przestrzeni nazw std
za pomoc dyrektywy using */
int main()
//definicja funkcji main() - pocz tek
{
cout<<”Jestem Twoim drugim programem”;
return 0;
}
//definicja funkcji main() - koniec
W powy szym kodzie pojawiaj si dwa nowe elementy :
//
symbol komentarza nakazuj cy kompilatorowi zignorowanie wszystkich znaków od miejsca
jego wyst pienia do ko ca linii
/*...*/
symbol /* nakazuje kompilatorowi zignorowa wszystkie znaki a do sekwencji ko cz cej
komentarz: */ - ten rodzaj komentarza mo e obejmowa kilka linii kodu
Jeszcze jedna uwaga – wykonywanie instrukcji zawartych w ciele funkcji (w naszym przypadku funkcji main) ko czy si
w momencie wykonania instrukcji return. Oznacza to, e dla ci gu instrukcji
int main()
//definicja funkcji main()
{
return 0;
cout<<”Jestem Twoim pierwszym programem”;
}
instrukcja cout<<”Jestem Twoim pierwszym programem”; nigdy nie zostanie wykonana, bo po instrukcji
return 0; program zwraca sterowanie do powłoki systemu operacyjnego (BCB:”Warning: unreacheable code”).
Okno konsoli zamkn ło si natychmiast po zako czeniu wykonywania programu. Je li chcemy wstrzyma wykonywanie
programu do momentu wci ni cia dowolnego klawisza, mo emy posłu y si funkcj getch(). Aby jej u y musimy
zał czy plik nagłówka conio (patrz zadanie 5). UWAGA: conio nie jest bibliotek standardow ANSI/ISO C++! Inny
sposób: system("pause"); - wymaga tylko biblioteki iostream.
$
%
%
&
Przyjmijmy, e chcemy wypisa na konsoli tekst:
Napis w pierwszej linii.
Napis w drugiej linii.
Aby przej do nowej linii mo emy posłu y si specjalnym manipulatorem strumieni wyj cia endl, wysyłaj cym znak
ko ca linii do strumienia:
cout<< ”Napis w pierwszej linii.”<<endl<<”Napis w drugiej linii.”;
Jak wida na powy szym listingu do obiektu cout mo emy wysła dowoln liczb wyra e poprzedzonych operatorem <<.
Równowa ny jest zapis:
cout<< ”Napis w pierwszej linii.”
<<endl
<<”Napis w drugiej linii.”;
//instrukcja mo e obejmowa
kilka wierszy!
Identyczny efekt uzyskamy korzystaj c ze specjalnej zbitki znaków \n:
cout<< ”Napis w pierwszej linii.\nNapis w drugiej linii.”;
Je li z jakich przyczyn (np. dla lepszej przejrzysto ci kodu) chcieliby my umie ci tekst wysyłany do obiektu cout w kilku
liniach, mo emy to zrobi tak e w nast puj cy sposób:
cout<< ”Napis w pierwszej linii.\n”
”Napis w drugiej linii.”;
Powy szy kod jest poprawny. Preprocesor sam poł czy nast puj ce po sobie teksty zawarte w cudzysłowach (okre lane dalej
jako stałe tekstowe lub ła cuchy tekstowe), je li s oddzielone spacj , znakiem tabulacji, ko cem linii lub pust lini . Linia
mo e by zawsze przedłu ona, je li jej ostatnim znakiem (czyli poprzedzaj cym znak ko ca linii) jest znak \ :
cout<< ”Napis w pierwszej linii.\n\
Napis w drugiej linii.”;
Wi cej specjalnych sekwencji rozpoczynaj cych si od znaku \ (escape sequences) zawiera tabela:
Tabela 1 Wybrane sekwencje specjalne.
Sekwencja
\a
\b
\t
\n
\r
Efekt
Sygnał d wi kowy
backspace
Tabulacja pozioma
Przej cie do nowego wiersza
Powrót karetki (strumie zaczyna pisa od pocz tku bie cego wiersza)
\”
\’
\?
\\
\0
\xhh
\888
Cudzysłów
Apostrof
?
Uko nik \
Znak ko ca ła cucha tekstowego
Kod znaku ASCII (hexadecymalnie)
Kod znaku ASCII (oktalnie)
Do obiektu cout mo emy wysyła tak e pojedyncze znaki:
cout<<'A';
oraz liczby:
cout<<121;
'
#
#
#
#
#
#
1.
Napisz program BANNER drukuj cy na ekranie napis:
#
#
#
#
#
#
#
#
#
#
#
#
#####
##
#
#
#
# #
#
#
#
#
#
#
#
#
######
#
#
#
#
# #
#
## ##
#
#
#
#
####
2. Napisz program, który wy wietli na konsoli Twoj wizytówk :
******************************
"
"
"
‘Imi Nazwisko’
"
"
wiek: 00 lat(a)
"
"
"
******************************
3.
*
*
*
*
*
*
*
Napisz program, który wy wietli na konsoli Twoje inicjały w formacie:
*
*
**
*
* *
*
* * *
*
* *
*
**
*
*
4.
Popraw bł dy w kodzie:
*/wyt
wzrok i znajd ??? szczegółów :-)//
#include <stream>
int main
{
cout<<”Je li’,
cout>>”program wy wietli”;
cout<<”endl;”
cout<<’ten tekst,’
<<” mo esz zrobi sobie przerw .”<<endl.
Return 0;
5.
Co wy wietli na konsoli ten program? Skorzystaj z Tabela 1 Wybrane sekwencje specjalne.
#include <iostream>
#include <conio> //UWAGA! conio nie jest standardow
using namespace std;
int main()
{
cout<<"\n1\n\t2\r3";
bibliotek
ANSI/ISO C++ !!!
getch();
/*
to jest funkcja z biblioteki conio – stosowanie jej nie jest
zalecane inne rozwi zanie:
system("pause"); //wysyła do powłoki komend systemow pause
*/
return 0;
}
6.
Napisz program, który b dzie zwracał nast puj c tabel ( == \xBE):
Poni sze kursy obowi zuj od dnia 2003-10-31:
+----------------+-------+---------------+-------+----------+
|Kraj
|Symbol |Waluta
|Kurs
|Kurs
|
|
|waluty |
|kupna |sprzeda y |
+----------------+-------+---------------+-------+----------+
|Australia
|781
|1 AUD
|2,8111 |2,8679
|
|Czechy
|213
|1 CZK
|0,1446 |0,1476
|
|Dania
|792
|1 DKK
|0,6243 |0,6369
|
|Estonia
|233
|1 EEK
|0,2965 |0,3025
|
|Japonia
|784
|100 JPY
|3,6686 |3,7428
|
|Kanada
|788
|1 CAD
|3,0324 |3,0936
|
+----------------+-------+---------------+-------+----------+
7.
Napisz program, który narysuje jeden z obrazków:
.--------------.
|
_._ _
`.,______
|
(__((_(
___(_()
| \'-:--:-.
,'`
'-|-'-----'--|-'
b
d
,\--/,
,-,__
--------------{ @ @ }-----------,-,| |_/|
--------------| \/ |-----------| |`-/ |
| ) ( |
,-,`-'_/ _/
--------------`W-mm-W'--------| | _/ /
\ /
/`-'/ _/|
WW
/___/ / |
|
| /| |
|___|/ | |
|
| |
|
| |