Стадия 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

Пример

стадия 3. компиляция программы - 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

стадия 3. компиляция программы - student2.ru

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

стадия 3. компиляция программы - 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;

стадия 3. компиляция программы - student2.ru

Неполный

If ( B) C1;

стадия 3. компиляция программы - student2.ru

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

if (B) {c1;c2;}

else c3;

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

стадия 3. компиляция программы - student2.ru

Примеры

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

x, y

max=max{x, y}

стадия 3. компиляция программы - student2.ru

if (x<y) max=y;

else max=x;

max=max{x, y, z}

1)

стадия 3. компиляция программы - student2.ru

if (x<y)

if (y<z) max=z;

else max=y;

else if (x<z) max=z;

else max=x;

2)

стадия 3. компиляция программы - student2.ru

max=x;

if (max<y) max=y;

if (max<z) max=z;

3)

стадия 3. компиляция программы - student2.ru

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

else 2;

4)

стадия 3. компиляция программы - student2.ru if (1)

if (2) 1;

else 2;

5) стадия 3. компиляция программы - 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

стадия 3. компиляция программы - 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;

стадия 3. компиляция программы - student2.ru

Пустой цикл

стадия 3. компиляция программы - student2.ru

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

стадия 3. компиляция программы - student2.ru

While (B)

{

C1;C2;C3;

}

стадия 3. компиляция программы - student2.ru

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

Do C while ( B)

стадия 3. компиляция программы - student2.ru

Пример 1

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

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

y=∑in=1i

стадия 3. компиляция программы - 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

стадия 3. компиляция программы - 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

стадия 3. компиляция программы - 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+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

Преобразование типа переменной в программе.

Операторы перехода

Преобразование типа переменной в программе

1) y=y+static_coast<double>i / (i+1)

2) y=y+(double) i/(i+1)

Операторы перехода

Break

i=1;

while(1)

{

if(i>10) break;

cout<<”i=”<<i<<”_”;

i++;

}

cout<<endl;

результат работы программы:1_2_3_4_5_6_7_8_9_10

Continue

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

{

if (i %2) continue;

cout<<i<<”_”;

}

результат работы программы:2_4_6_8

Goto

С помощью инструкции goto и метки можно организовать

следующий цикл на 100 итераций.

i=1;

loop1:

cout<<i<<”_”;

i++;

if (i<=100) goto loop1;

результат работы программы:1_2_3_4_5_6_7_... _100

Оператор switch (переключатель)

switch (выражение) { case константа 1: [список операторов]

case константа 2: [список операторов]

………………………………………….

case константа n: [список операторов]

default: [список операторов]

}

Задача 1

Простейший калькулятор

# include <iostream.h>

void main()

{

int a,b,res;

char op;

cout <<” enter 1 operand:”;

cin>>a;

cout <<” enter sign of operation:”;

cin>>op;

cout <<” enter 2 operand:”;

cin>>b;

bool f=true;

switch (op) {

case ‘+’ : res=a+b; break;

case ‘-‘ : res=a-b; break;

case ‘*‘ : res=a*b; break;

case ‘/‘ : res=(double) a/b; break;

default: cout<<”unknown operator “<<endl;

f=false;

}

if (f) cout<<”result:”<<res<<endl;

}

Задача 2

Угадывание числа

# include <iostream.h>

# include <stdlib.h>

# include <time.h>

void main()

{

bool t;

int x, y, n, i;

srand (time(0));

x=rand()%10+1;

cout<<” the computer define number in the range 1-10”<<endl;

t=false;

cout<<” Guess the number!!!”<<endl;

cout<< “You must guess the number the computer”<<endl;

cout<<” enter n=”;

cin>>n; //ввод количества попыток

i=1;

while ( i<=n && !t )

{

cout<<”enter number”;

cin>>y; //ввод числа пользователем

if (y==x) t=true;

i++;

}

if (t)

{

cout<< “You win!”<<endl;

cout<<” The number of attempts i = ”<<i<<endl;

cout<<”Computer defined number:<<x<<endl;

}

else {

cout<<”Sorry! The computer number =”<<x<<endl;

}

}

Задача 3

Определение простого числа

true, если число x простое

T=

false, если число x не является простым

i=2…..sqrt(x)- возможные делители числа х.

Листинг программы

# include <iostream.h>

# include <math.h>

void main()

{

int i,x;

bool t;

cout<<”enter x=”;

cin>>x;

if (x<=1) t=false;

else if (x==2) t=true;

else

{

t=true;

for (i=2; i<=sqrt(x) && t; i++)

{

if (x% i==0) t=false;

}

}

if (t) cout<< x<<” -prime”<< endl;

else cout<< x<<” - not prime”<< endl;

}

Задача 4.

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