Programowanie w C++

Transkrypt

Programowanie w C++
Podstawy języka C++
Maciej Trzebiński
Instytut Fizyki Jądrowej
Polskiej Akademii Nauk
Praktyki studenckie na LHC
IFJ PAN
6 lipca 2015
M. Trzebiński
C++
1/16
Uruchomienie maszyny w CC1
Otworzyć stronę: www.cloud.ifj.edu.pl
Zaloguj się
Maszyny wirtualne → Nowa maszyna
Obraz: praktyki 2015
Sprzęt: 2 cpu
Zasoby:
Adres IP: none
Dołącz dysk: zaznaczyć opcję podpięcia swojego dysku
Dołącz obraz ISO: none
VNC: zaznaczyć
Nadać maszynie nazwę i utworzyć.
Poczekać, aż status maszyny zmieni się z init na running
Kliknąć na utworzoną maszynę → rozwinie się okno z jej statusem
Kliknąć Konsola graficzna (VNC)
Zalogować się na konto student
M. Trzebiński
C++
2/16
Przygotowanie środowiska pracy
Otworzyć LXTerminal (skrót jest dostępny np. na pasku zadań)
Zamontować dysk:
Sprawdzić, czy dysk /dev/vda1 jest widoczny: sudo fdisk -l
Zamontować dysk do katalogu /media:
sudo mount -t ext4 /dev/vda1 /media/
Zmienić właściciela katalogu: sudo chown student /media/
Sprawdzić, czy wszystko działa: cd /media
echo ”Witaj swiecie!” > witaj.txt
cat witaj.txt
Proszę pamiętać, że wszystko należy zapisywać w katalogu
/media.
Dane zapisane w innych miejscach (np. w katalogu /home)
zostaną skasowane wraz ze zniszczeniem maszyny wirtualnej!
M. Trzebiński
C++
3/16
Tworzenie minimalnego, działającego programu
Otworzyć dowolny edytor tekstu:
@ > leafpad program1.cpp &
1
2
3
i n t main ( ) {
return 0;
}
Program zawiera funkcję główną main(). W tym przypadku funkcja ta zwraca
(return) liczbę całkowitą (int); tutaj jest to 0. Wszystkie polecenia
wykonywane w ramach tej funkcji muszą się znaleźć pomiędzy nawiasami
klamrowymi.
Skompilować program:
@ > g++ -o program1 program1.cpp
Uruchomić program:
@ > ./program1
M. Trzebiński
C++
4/16
Witaj świecie
@ > leafpad program1.cpp &
1
2
3
4
5
6
7
8
#i n c l u d e <i o s t r e a m >
u s i n g namespace s t d ;
i n t main ( ) {
c o u t << ” W i t a j s w i e c i e ! ” << e n d l ;
return 0;
}
Program przekierowuje (<<) do konsoli (cout, ang. console output) napis
Witaj swiecie! oraz znak końca linii (endl). Polecenia te nie są podstawowe
w języku C++. Ich definicja znajduje się w osobnej bibliotece (iostream),
którą należy dołączyć do programu (#include). Ponadto, polecenia znajdują
się w przestrzeni nazw std. Kompilator jest o tym informowany przez
dyrektywę using namespace. Każdy ciąg poleceń kończymy średnikiem.
@ > g++ -o program1 program1.cpp && .program1
M. Trzebiński
C++
5/16
Środowisko programistyczne i komentarze
@ > geany program1.cpp &
Bo kolorowanie składni oraz inne ułatwienia są przydatne :)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#i n c l u d e <i o s t r e a m >
u s i n g namespace s t d ;
i n t main ( ) {
/∗ t o j e s t k o m en ta r z
w
kilku
l i n i j k a c h ∗/
// A t o k o m en ta r z w j e d n e j l i n i i
c o u t << ” W i t a j s w i e c i e ! ” << e n d l ;
return 0;
}
Skompilować program:
kliknąć symbol cegiełki
Uruchomić program:
kliknąć symbol koła zębatego
M. Trzebiński
C++
6/16
Definiowanie zmiennych
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
i n t main ( ) {
i n t a ; // d e k l a r a c j a z m i e n n e j t y p u c a l k o w i t e g o ( i n t e g e r )
// z m i en n e mozna d e k l a r o w a c po k i l k a , o d d z i e l a j a c j e p r z e c i n k a m i
// mozne t e z p r z y p i s a c im w a r t o s c p o cz a tk o w a
int b = 3 , c = 10;
f l o a t A = 1 0 . 2 5 ; // l i c z b a z m i e n n o p r z e c i n k o w a ( p o j e d y n c z a p r e c y z j a )
d o u b l e B ; // l i c z b a z m i e n n o p r z e c i n k o w a ( p o d w o jn a p r e c y z j a )
B = 0 . 0 1 5 ; // p r z y p i s a n i e z m i e n n e j B w a r t o s c i 0 . 0 1 5
B = 1 . 2 5 e5 ; // a t e r a z z m i en n a B ma w a r t o s c 125000
c h a r z n a k = ’A ’ ; // p o j e d y n c z y z n a k
s t r i n g c i a g = ” C i a g znakow b l a , b l a , b l a . . . ” ; // c i a g znakow ;
b i b l i o t e k a <s t r i n g >; n a m es p a ce s t d
b o o l p = t r u e , f = f a l s e ; // z m i en n a l o g i c z n a prawda / f a l s z
a = b ; // p r z y p i s a n i e l i c z b i e a w a r t o s c i b
a = a + 1 ; // z w i e k s z e n i e w a r t o s c i a o 1
a += 1 ; // jw .
a++; // jw .
a
a
a
a
=
=
=
=
b
b
b
b
+
−
∗
/
c;
c;
c;
c;
// p r z y p i s a n i e
// o d ejm o w a n i e
// m n o z en i e
// d z i e l e n i e
l i c z b i e a w a r t o s c i sumy b + c
return 0;
}
M. Trzebiński
C++
7/16
Zadania
1. Jaki jest wynik działań 1/2 oraz 1./2.?
2. Zadeklarować zmienne całkowite i1 = 2, i2 = 3 oraz zmiennoprzecinkowe f1
= 0.5, f2 = 2.5. Stworzyć i wyświetlić zmienne a = i1 + i2, b = f1 + f2, c =
i1 + f2, d = i1 / i2, e = i1 / f1, f = i1 * f1, g = f1 * i1.
3. Wyświetlić resztę z dzielenia 12331 przez 334 (przydatny link:
www.google.pl).
M. Trzebiński
C++
8/16
Pętle
1
2
3
4
5
6
7
8
9
10
11
12
i n t main ( ) {
f o r ( i n t a =0; a <100; a++)
{
c o u t << ” Wyswietlam l i c z b e c a l k o w i t a \ t ” << a << e n d l ;
}
f o r ( d o u b l e b = −3.5; b < 3 . 5 ; b +=0.5)
{
c o u t << ” Wyswietlam l i c z b e z m i e n n o p r z e c i n k o w a \ t ” << a << e n d l ;
}
return 0;
}
Pętle służą do wielokrotnego wykonywania poleceń. W powyższym kodzie
wykorzystana jest pętla for. Wykonywana jest do czasu, gdy wartość
zadeklarowanej zmiennej o ustalonej wartości początkowej (int a=0) nie
przekroczy danej wartości (a<100). Po każdej iteracji zmienna a ma zostać
zwiększona o 1.
Drugi przykład jest analogiczny, liczba typu double jest zwiększana o 0.5.
M. Trzebiński
C++
9/16
Warunki if, else, else if
1
2
3
4
5
6
7
8
9
10
11
12
13
14
i n t main ( ) {
f o r ( i n t a =0; a <100; a++)
{
i f ( a <10) c o u t << a << e n d l ; // w y s w i e t l a j e z e l i j e s t ono
m n i e j s z e n i z 10
e l s e i f ( a <50) // w yk o n a j , j e z e l i p o w yz s z y w a r u n ek n i e j e s t
s p e l n i o n y i a j e s t m n i e j s z e n i z 50
{
// w a r u n k i em moze b yc o b j e t y c h k i l k a l i n i j e k
c o u t << ” ponad ” << e n d l ;
c o u t << ” 50 ” << e n d l ;
}
e l s e c o u t << ” Ponad\ t ” << a << e n d l ; // w yk o n a j gdy w s z y s t k i e
p o p r z ed n i e warunki n i e sa s p e l n i o n e
}
return 0;
}
Porównanie wartości:
a > b, a < b // a większe niż b, a mniejsze niż b
a >= b, a <= b // a większe lub równe b, a mniejsze lub równe b
a == b //a równe b
a! = b //a nie równe b
Operacje logiczne:
A&&B // koniunkcja logiczna (A i B)
A||B // alternatywa logiczna (A lub B)
!A
// negacja logiczna (nieprawda że A)C++
M. Trzebiński
10/16
Instrukcje continue i break
1
2
3
4
5
6
7
8
9
10
i n t main ( ) {
f o r ( i n t a =0; a <100; a++)
{
i f ( a <10) c o n t i n u e ;
i f ( a==50) b r e a k ;
c o u t << ” Wyswietlam \ t ” << a << e n d l ;
}
c o u t << ” K o n i e c ! ” << e n d l ;
return 0;
}
Powyższy program wyświetli liczby od 10 do 49. W pętli najpierw sprawdzany
jest warunek a < 10 jeżeli jest spełniony to program wraca do początku pętli,
zwiększając zmienną a (w tym przykładzie o 1). Instrukcje po linijce z continue
nie są wykonywane. Jeżeli wartość a będzie wynosić 50, to pętla zostanie
zakończona (break).
M. Trzebiński
C++
11/16
Funkcje
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void wyswietl ( s t r i n g napis ){
c o u t << n a p i s << e n d l ;
}
d o u b l e x pow ( d o u b l e x , i n t y ) {
d o u b l e w yn i k = x ;
f o r ( i n t a =1; a<y ; a++) w yn i k ∗= x ;
r e t u r n w yn i k ;
}
i n t main ( ) {
w y s w i e t l ( ” P o c z a t e k p r o g r a m u” ) ;
double a ;
a = x pow ( 1 0 . , 4 ) ;
c o u t << w y s w i e t l ( ” 3 . 5 ˆ 4 w y n o s i : ” ) << x pow ( 3 . 5 , 4 ) << e n d l ;
return 0;
}
W programie znajdują się trzy funkcje. Każda z nich jest innego typu –
program oczekuje, że funkcja będzie zwracać (return) określoną wartość: main
jest typu całkowitego (int), x pow zwraca liczbę z podwójną precyzją
(double), wyswietl jest typu void – nie zwraca wartości. Funkcja wyswietl
przyjmuje jeden parametr (typu string): napis, a funkcja x pow dwa
parametry (pierwszy typu double, drugi int).
M. Trzebiński
C++
12/16
Zadania
1. Napisać program, który sprawdzi czy 113 jest liczbą pierwszą.
2. Napisać funkcję, która sprawdzi czy liczba podana w argumencie jest
pierwsza.
3. Przyśpieszyć funkcję z pkt. 3, aby nie szukała dalej po pierwszym
stwierdzeniu podzielności.
4. Wypisać 1000 pierwszych liczb pierwszych.
5. Porównać czas działania programu z pkt. 5 w przypadku zastosowania
przyśpieszenia (pkt. 4) i przeciwnym.
6. Zabezpieczyć funkcję z pkt. 4 tak, aby działała tylko w przypadku podania
dodatniej liczby całkowitej. W innych przypadkach ma informację o błędzie.
M. Trzebiński
C++
13/16
Klasy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
c l a s s Wektor{
p u b l i c : // prawo d o s t e p u : p u b l i c z n e
v o i d u s ta w ( d o u b l e , d o u b l e ) ; // d e k l a r a c j a f u n k c j i
d o u b l e d l u g o s c ( ) ; // d e k l a r a c j a f u n k c j i
p r i v a t e : // prawo d o s t e p u : p r y w a t n e ( w i d o c z n e z poziomu k l a s y )
d o u b l e x , y ; // d e k l a r a c j a z m i en n ych
} ; // k l a s e konczymy s r e d n i k i e m
// d e f i n i c j a f u n k c j i ” u s ta w ” z k l a s y ” Wektor ”
v o i d Wektor : : u s ta w ( d o u b l e a , d o u b l e b ) {
x = a;
y = b;
}
// d e f i n i c j a f u n k c j i ” d l u g o s c ” z k l a s y ” Wektor ”
v o i d Wektor : : d l u g o s c ( ) {
r e t u r n s q r t ( x∗ x + y∗ y ) ;
}
i n t main ( ) {
Wektor v ; // u t w o r z e n i e o b i e k t u k l a s y ” Wektor ”
v . u s ta w ( 3 . , 4 . ) ;
c o u t << v . d l u g o s c ( ) << e n d l ;
return 0;
}
W programie znajdują się klasa Wektor. Zawiera deklaracje dwóch zmiennych (x oraz y) oraz
dwóch funkcji (ustaw(double, double), dlugosc()). Funkcje są zdefiniowane w dalszej części
programu. Kompilator wie, że należą one do klasy przez określenie Wektor:: w definicji funkcji.
M. Trzebiński
C++
14/16
Struktura programu
Plik program.h zawiera informacje o: bibliotekach, przestrzeniach nazw,
klasach, funkcjach.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#i n c l u d e <i o s t r e a m >
u s i n g namespace s t d ;
c l a s s Wektor{
public :
v o i d u s ta w ( d o u b l e , d o u b l e ) ;
double dlugosc () ;
private :
double x , y ;
};
v o i d Wektor : : u s ta w ( d o u b l e a , d o u b l e b ) {x = a ; y = b ; }
v o i d Wektor : : d l u g o s c ( ) { r e t u r n s q r t ( x ∗x + y∗ y ) ; }
Plik program.cpp zawiera program główny.
1
2
3
4
5
6
7
8
#i n c l u d e ” p r o g r a m . h”
i n t main ( ) {
Wektor v ;
v . u s ta w ( 3 . , 4 . ) ;
c o u t << v . d l u g o s c ( ) << e n d l ;
return 0;
}
M. Trzebiński
C++
15/16
Zadania
1. Dodać funkcję, która skaluje wektor o zadaną liczbę. Definicje mają się
znajdować w pliku .h.
2. Zmienić współrzędne na public zdefiniować operator dodawania dwóch
wektorów.
M. Trzebiński
C++
16/16

Podobne dokumenty