Стадия 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
Пример
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
(X,Y) ? D→(Y>=X-1) || (Y<=X+1)|| (Y<= -X+1)|| (Y >= -X-1)
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;
Неполный
If ( B) C1;
Блочный оператор
if (B) {c1;c2;}
else c3;
*{c1;c2;}-блок операторов
Примеры
1)Вычисление max
x, y
max=max{x, y}
if (x<y) max=y;
else max=x;
max=max{x, y, z}
1)
if (x<y)
if (y<z) max=z;
else max=y;
else if (x<z) max=z;
else max=x;
2)
max=x;
if (max<y) max=y;
if (max<z) max=z;
3)
if (1) {if (2) 1;}
else 2;
4)
if (1)
if (2) 1;
else 2;
5)
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
# 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 байта
▄1 ▄2 ▄3 ▄4 - мантисса
Порядок
Примечание
int x=100; double y=2.5;
y-y+x- тип double
Циклы
1) Цикл с предусловием
while (B) C;
Пустой цикл
Бесконечный цикл
While (B)
{
C1;C2;C3;
}
Цикл с постусловием
Do C while ( B)
Пример 1
С помощью цикла while вычислить
y=1+2+3+..+n
y=∑in=1i
# 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
# 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
# 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)!= ∑0∞ti
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.