Professional Documents
Culture Documents
03 Intro
03 Intro
Любомир Чорбаджиев1
lchorbadjiev@elsys-bg.org
1
Технологическо училище “Електронни системи”
Технически университет, София
29 март 2009 г.
1 Класове
4 Обработка на изключения
Конструктори
Конструктори
public :
2
4 y ); // конструктор
5 //...
6 };
Конструктори
class Point {
public :
1
x, y );
Point ( void );
3
5 };
6 ...
7 Point p1 (1.0 ,1.0);
8 Point p2 ;
class Point {
3
double x_ , y_ ;
4
public :
5
10
void
5
void
10
double dy = y_ - other . y_ ;
2
return sqrt ( dx * dx + dy * dy );
3
5 }
6 };
4 result ;
5 }
6
10 result ;
11 }
Point p2 ) {
return p1 . distance ( p2 );
13
14
15 }
Реализация на стек
int top_ ;
3
public :
4
6 Stack () {
7 top_ =0;
8 }
Реализация на стек
2 {
3 data_ [ top_ ++]= val ;
4 }
}
int pop ( void ) {
5
i f ( top_ >0) {
6
}
return 0;
9
10
11 }
Реализация на стек
bool is_empty () {
return top_ ==0;
1
}
bool is_full () {
3
6 }
7 };
Използване на стек
Stack st ;
for ( char * p = msg ;* p != ’ \0 ’; p ++)
4
st . push (* p );
char * p = buff ;
6
11 0;
12 }
Пространство от имена
Пространство от имена
2 {
3 ...
4 };
5 };
2 {
3 ...
4 };
5 };
Входно/изходни операции
3 {
printf ( " Hello ␣ world !\ n " );
return 0;
4
6 }
4 argv []) {
cout << " Hello ␣ world ! " << endl ;
return 0;
5
7 }
argv []) {
int number1 , number2 ;
4
9 0;
10 }
Обработка на грешки
Обработка на грешки
...
void push ( int val ) {
4
6 {
7 data_ [ top_ ++]= val ;
8 }
9 }
10 ...
11 };
}
return -1; // Грешка: стека е пълен
5
7 }
...
int pop ( void ) {
4
i f ( top_ >0) {
5
}
return 0;
8
10 }
11 ...
12 };
}
return -1; // Грешка: стека е празен
5
7 }
Обработка на грешки
Генериране на изключение
Генериране на изключение
...
public :
3
...
int pop ( void ) {
5
i f ( top_ <=0)
6
throw StackError ;
7
10 }
11 ...
12 }
Обработване на изключение
Обработване на изключение
4 } ( StackError ex ) {
5 // Обработка на грешка при използването на стека
...
catch
6
7 } (...) {
8 // Обработка на всички останали грешки
9 ...
10 }
Обработване на изключение
class Stack {
2
int top_ ;
4
public :
5
7 Stack () {
8 top_ =0;
}
void int
9
push ( val ) {
if
10
12 StackError ();
13 data_ [ top_ ++]= val ;
14 }
}
bool is_empty () {
5
}
bool is_full () {
8
10
11 }
12 };
1 try {
Stack st ;
for ( char * p = msg ;* p != ’ \0 ’; p ++)
2
st . push (* p );
char * p = buff ;
4
9 } ( StackError ex ) {
10 cerr < < " StackError ␣ catched ... " << endl ;
exit (1);
catch
11
12 } (...) {
13 cerr < < " Unknown ␣ error ␣ catched ... " << endl ;
14 exit (1);
}
return
15
16 0;
17 }
Редуцирана форма
изпълнено следното:
′ a ′ b
a = , b = , (1)
( , )
GCD a b ( , )
GCD a b
5: b ← r
6: r ← a mod b
7: end while
8: return b ◁ НОД е равен на стойността на b
9: end procedure
Нормална форма
class Rational {
5
s) {
while ( s !=0) {
9
long temp = r ;
10
11
12 r=s;
13 s = temp % s ;
}
return
14
15 r;
16 }
den_ =1;
} else {
3
i f (g >1){
6
8 num_ /= g ;
9 den_ /= g ;
10 }
11 }
12 }
3 den_ = - den_ ;
4 num_ = - num_ ;
5 }
6 reduce ();
7 }
public :
int int
1
i f ( den_ ==0)
5
8 standardize ();
9 }
get_numerator () {
long return den_ ;}
11
12 get_denominator () {
void
13
14 dump () {
15 cout << " ( " << num_ << " / " << den_ << " ) " ;
16 }
Събиране и изваждане
A a1 a2 a1 b2 + a2 b 1
= + = . (3)
B b1 b2 b1 b2
A a1 a2 a1 b2 − a2 b 1
= − = . (4)
B b1 b2 b1 b2
Умножение и делене
A a1 a2 a1 a2
= · = . (5)
B b1 b2 b1 b2
A a1 a2 a1 b2
= : = . (6)
B b1 b2 b1 a2
6 sub ( Rational r ) {
7 num_ = num_ * r . den_ - den_ * r . num_ ;
8 den_ = den_ * r . den_ ;
9 standardize ();
10 }
6 division ( Rational r ) {
7 num_ *= r . den_ ;
8 den_ *= r . num_ ;
9 standardize ();
10 }
11 };
7 r . add ( p );
8 r . dump ();
9 cout << endl ;
1 p . add ( s );
2 p . dump ();
3 cout << endl ;
4
5 r . multiplication ( q );
6 r . dump ();
7 cout << endl ;
return
8
9 0;
10 }
choosen at random.
#ifndef RANDOM_HPP__
#define RANDOM_HPP__
1
namespace Random {
3
10 };
#endif
11
12
namespace Random {
4
seed ) {
unsigned int s =
6
int next_int () {
11
13
14 }
double next_double () {
return static_cast < double >( next_int ())/
1
4 }
{
return next_int () %
6
7 max ;
8 }
max ) {
return min + next_int ()
10
11 % ( max - min );
12 }
13 };
Хврърляне на монета
Хврърляне на монета
Инициализация
12
13 head [ i ]=0;
Хвърляне на монета
Извеждане на резулатата
4 TOSS_COUNT )*100.0);
5 cout << setw (2) < < i << " ␣ "
<< setw (7) << head [ i ];
for int
6
return
12
13 0;
14 }
Разделно компилиране
Разделно компилиране
Разделно компилиране
Тесте карти
enum Suit {
4
6 CLUBS =0 , DIAMONDS ,
7 HEARTS , SPADES
8 };
1 class Card {
Suit suit_ ;
int face_ ;
2
public :
3
Suit get_suit () {
return
1
2 suit_ ;
}
int
3
get_face () {
return
4
5 face_ ;
}
void
6
print () {
static const char
7
8 FACES [][3]={
9 " A " ," 2 " ," 3 " ," 4 " ," 5 " ," 6 " ," 7 " ," 8 " ," 9 " ,
" 10 " ," J " ," Q " ," K " };
static const char
10
11 SUITS [][9]={
12 " Clubs " ," Diamonds " ," Hearts " ," Spades " };
13 cout << FACES [ face_ ]
14 << " ( " << SUITS [ suit_ ] << " ) " ;
15 }
16 };
1 class Deck {
Card cards_ [52];
int next_ ;
2
public :
3
Deck ( void ) {
4
6 {
7 cards_ [ i ]. set_card ( i );
8 }
9 next_ =0;
10 }
void shuffle () {
for ( int i =0; i <52; i ++) {
1
Card deal_one () {
return
11
Главна функция
4 Deck my_deck ;
my_deck . shuffle ();
for int
5
return
11
12 0;
13 }
Разделно компилиране