Стадия 2. Препроцессорная обработка программы

На второй стадии программист дает команду скомпилировать программу. В системе С++ перед началом компиляции автоматически исполняется программа- препроцессорю.

Препроцессор С++ распознает команды , называемые препроцессорными директивами, которые указывают , что над программой перед компиляцией должны быть произведены определенные манипуляции. Эти манипуляции состоят обычно во включении в компиляцию других текстовых файлов и различных текстовых заменах.

Стадия 3. Компиляция программы

На третьей стадии компилятор транслирует программу на С++ в код машинного языка

( называемый также объектным кодом )

Стадия 4. Компоновка.

Четвертая стадия называется компоновкой (linking). Программы С++ обычно содержат ссылки на функции и данные , определяемые в другом месте (или проект содержит несколько cpp файлов) , например , в библиотеках или частных библиотеках группы программистов, работающих над конкретным проектом. Из-за отсутствия этих частей в программах С++ имеются “дыры”. Компоновщик (linker) присоединяет к объектному коду код отсутствующих функций, чтобы создать исполняемый образ. Если программа успешно компилируется и компонуется , образуется исполняемый файл.

Стадия 5. Загрузка

Для того чтобы программа смогла исполняться , необходимо поместить ее в память. Это выполняется программой загрузчиком

Стадия 6. Исполнение

Наконец , компьютер под управлением центрального процессора, исполняет программу одиночными инструкциями.

Переменные

Тип Диапазон Размер

bool true 1; false 0 1байт

char

signed -128 до 127 1байт

unsigned 0 до 255 1 байт

Int

signed mod 232-1 4 байтa

unsigned 0 до 4 294 967 295 4 байтa

Double 3.4e-308-1.7e+308 8 байов

Лекция№2

Алгебра логики

Bool a,y,z

True-истина

False-ложь

Операции

Конъюнкция

&&- *, ^.& -and

Дизъюнкция

||-v-or

Отрицание

!- ⌐X-not

X Y X&Y XVY ⌐X

Правило де Моргана

⌐XvY= ⌐X&⌐Y ⌐ X&Y= ⌐Xv ⌐Y

X Y XVY ⌐XVY ⌐X ⌐Y ⌐X&⌐Y

X&(Y v Z)=X&Y v X&Z

X v (Y&Z) =(X v Y) & (X v Z)

X v ⌐X =1

X & ⌐X =0

Импликация

Из X следует Y

X Y XàY

Пересечение X ^ Y

Объединение X v Y

Пример

Стадия 2. Препроцессорная обработка программы - student2.ru

D=D1^D1^D2^D3^D4

(X,Y) € D →((X,Y) € D1)& ((X,Y) € D2)& ((X,Y) € D3)& ((X,Y) € D4)

На языке С

(X,Y) € D →(Y>=X-1)&& (Y<=X+1)& & (Y<= -X+1)&& (Y >= -X-1)

D=D1vD1vD2vD3vD4

Стадия 2. Препроцессорная обработка программы - student2.ru

(X,Y) € D→(Y>=X-1) || (Y<=X+1)|| (Y<= -X+1)|| (Y >= -X-1)

Стадия 2. Препроцессорная обработка программы - student2.ru

A € X\Y=X ^ ⌐Y

X\Y c X ^ ⌐Y

X ^ ⌐YcX\Y

Доказательство:

1) p€ X\Y=(p € X)&(p € ⌐Y)=p€ X ^ ⌐Y

2) p€ X ^ ⌐Y=(p € X)&(p € ⌐Y)=p€ X\Y

D1\D2

(X,Y) € D1\D2 =(X,Y) € D1^⌐ D2

((X,Y) € D1)&&((X,Y) € ⌐ D2)↔ ((X,Y) € D1)&&!(( X,Y) € D2)

Лекция№3

Операторы

Условный оператор

Полный

If ( B) C1; else C2;

если условие В истинно, то выполнится действие C1;

если условие В ложно, то выполнится действие C2;

Стадия 2. Препроцессорная обработка программы - student2.ru

Неполный

If ( B) C1;

Стадия 2. Препроцессорная обработка программы - student2.ru

Блочный оператор

if (B) {c1;c2;}

else c3;

*{c1;c2;}-блок операторов

Стадия 2. Препроцессорная обработка программы - student2.ru

Примеры

1)Вычисление max

x, y

max=max{x, y}

Стадия 2. Препроцессорная обработка программы - student2.ru

if (x<y) max=y;

else max=x;

max=max{x, y, z}

1)

Стадия 2. Препроцессорная обработка программы - student2.ru

if (x<y)

if (y<z) max=z;

else max=y;

else if (x<z) max=z;

else max=x;

2)

Стадия 2. Препроцессорная обработка программы - student2.ru

max=x;

if (max<y) max=y;

if (max<z) max=z;

3)

Стадия 2. Препроцессорная обработка программы - student2.ru

if (1) {if (2) 1;}

else 2;

4)

Стадия 2. Препроцессорная обработка программы - student2.ru if (1)

if (2) 1;

else 2;

5) Стадия 2. Препроцессорная обработка программы - student2.ru

if (1)

{

1;

if (2) {2;3;}

else {4;5;}

6;

}

else

{

if (3)

{

if (4) {3;4;}

}

else 9;

10;

}

6) Решение квадратного уравнения ax2+bx+c=0

Стадия 2. Препроцессорная обработка программы - student2.ru

# include <iostream.h>

# include <math.h>

void main()

{

int a ,b, c;

double x, d, x1, x2;

cout<<”Enter a, b, c”;

cin>>a, b, c;

if (a==0)

{

if (b==0)

{

if (c==0) cout<<”x-любое число”;

else cout<<”“нет решений”;

}

else {x= -c/b;}

}

else

{

D=b*b-4*a*c;

if (D>=0)

{

x1=( -b+ sqrt(D))/(2*a);

x2= (-b- sqrt(D))/(2*a);

}

else cout<<”нет действительных корней”;

}

cout<<endl;

}

Примечание

Возведение в степень

b2=paw(b,2)

Нельзя объявлять переменную два раза в одном и том же блоке

void main()

{

int i;

i=5;

{

int i;

i=10;

cout<<i; //на экран будет выведено 10

}

cout<<i; //на экран будет выведено 5

}

Лекция №4

Системы счисления

Циклы

Десятичная0,1,2,3,4,5,6,7,8,9

904=9*102+0*10+4*100

Двоичная0,1

1012=1*22+0*2+1*20=510

Троичная0,1,2

1013=1*32+0*3+1*30=1010

Шестнадцатеричная0,1,2,3,4,5,6,7,8,9,A, B, C, D

ABBA16=10*163+11*162+11*16+10*160=40960+2816+176+10=4396210

Перевод вещественных чисел из одной системы в другую

904,90410=1110001000,1112

Перевод целой части

904/2=452 остаток 0

452/2=226 остаток 0

226/2=113 остаток 0

113/2=56 остаток 1

56/2=28 остаток 0

28/2=14 остаток 0

14/2=7 остаток 0

7/2=3 остаток 1

3/2=1 остаток 1

Перевод дробной части

0,904*2=1,808

0,808*2=1,616

0,616*2=1,232

0,232*2=0,464

Перевод из двоичной системы в четверичную, восьмеричную, шестнадцатеричную.

0110111011100011=123232034

= 673438

=6ЕЕ316

10 16 2

0 0 0000

1 1 0001

2 2 0010

9 9 1001

10 А 1010

11 B 1011

12 C 1100

13 D 1101

14 E 1110

15 F 1111

10010=11001002=12104=1448=6416

int x =100

количество байтов=4 байт

1 байт=8 бит 4 байта=32бит

Инверсия битов

0→1

1→0

Прибавляя к коду 1, получаем число в дополнительном коде

0,25*1010-порядок

Мантисса

Double 4 байта

1234 - мантисса

Порядок

Примечание

int x=100; double y=2.5;

y-y+x- тип double

Циклы

1) Цикл с предусловием

While (B) C;

Стадия 2. Препроцессорная обработка программы - student2.ru

Пустой цикл

Стадия 2. Препроцессорная обработка программы - student2.ru

Бесконечный цикл

Стадия 2. Препроцессорная обработка программы - student2.ru

While (B)

{

C1;C2;C3;

}

Стадия 2. Препроцессорная обработка программы - student2.ru

Цикл с постусловием

Do C while ( B)

Стадия 2. Препроцессорная обработка программы - student2.ru

Пример 1

С помощью цикла while вычислить

y=1+2+3+..+n

y=∑in=1i

Стадия 2. Препроцессорная обработка программы - student2.ru

# include <iostream.h>

void main()

{ int i ,y, n;

cout<<”Enter n=”;

cin>>n;

y=0;

i=1;

while (i<=n) { y=y+i;

i++;

}

cout<<”y=”<<y<<endl;

}

С помощью цикла do while вычислить

y=1+2+3+..+n

Стадия 2. Препроцессорная обработка программы - student2.ru

# include <iostream.h>

void main()

{ int i ,y, n;

cout<<”Enter n=”;

cin>>n;

y=0;

i=1;

do { y=y+i;

i++;

}

while (i<=n);

cout<<”y=”<<y<<endl;

}

Пример 2

y=1/1!+1/2!+1/3!+…1/n!

y=y+1/f - тип double

Стадия 2. Препроцессорная обработка программы - student2.ru

# include <iostream.h>

void main()

{

int i ,f, n;

double y;

cout<<”Enter n=”;

cin>>n;

y=0;

i=1;

f=1;

while (i<=n)

{f=f*i;

y=y+(double)1/f;

i++;

}

cout<<”y=”<<y<<endl;

}

Пример 3

Вычислить y=sin(x)

sin (x) =x -x3/3!+x5/5!-x7/7!+…

sin( x) = ∑0 (-1)i x2i+1/(2i+1)!

1 способ

step=x

znak=1

fact=1

y=y+ step*znak/fact

# include <iostream.h>

# include <math.h>

void main()

{

int i, n, fact, znak;

double y,x,step;

cout<<”enter x=”;

cin>>x;

cout<<”enter n=”;

cin>>n;

y=x;

znak=1;

step=x;

factorial=1;

for ( i=1;i<=n;i++)

{

znak=-znak;

step=step*x*x;

factorial=factorial*2*i*(2*i+1);

y=y+znak*stepen/fact;

}

cout<<”y=”<<y;

cout<<”sin(x)=”<<sin(x);

}

2 способ (универсальный для всех рядов )

y= x-x3/3!+x5/5!-x7/7!+…

y=∑0 (-1)i x2i+1/(2i+1)!= ∑0ti

ti=ti-1*p

p= ti/ ti-1= ((-1)i x2i+1/(2i+1)!)/ ((-1)i-1 x2i-1/(2i-1)!)= -x2/2*i*(2*i+1)

# include <iostream.h>

void main()

{

double y, x, t;

int i, n;

cout << ”enter x=”;

cin >> x;

cout << ”enter n=”;

cin >> n;

y=x;

t=x;

for ( i=1;i<=n;i++)

{

t= -t*x*x/((2*i+1)*2*i)

y=y+t;

}

cout << ”y=” << y;

}

Возможные варианты

while- вариант

# include <iostream.h>

# include <math.h>

void main()

{

const double eps=0.001;

double y, x, t;

cout << ”enter x=”;

cin >> x;

y=0;

t=x;

int i=1;

while (fabs(t)>eps)

{

y = y+t;

t = -t*x*x/((2*i+1)*2*i);

i++;

}

Cout << ”y=” << y;

}

2) При помощи цикла for

for (int i=1; fabs(t)>eps; i++)

{

t= -t*x*x/((2*i-1)*2*i)

y=y+t;

}

Пример 4

Вычислить косинус

Cos(x)=∑i (-1)i x2i/2i!

p = -x2 / ((2*i+1)*2*i)

# include <iostream.h>

void main()

{double y, x, t; int n;

int n;

cout<<”enter x=”;

cin>>x;

cout<<”enter n=”;

cin>>n;

y=x;

t=x;

for (int i=1;i<=n;i++)

{

t= -t*x*x/((2*i-1)*2*i)

y=y+t;

}

cout<<”y=”<<y;

}

Лекция №5

Наши рекомендации