Кай Хорстман, Принципи на програмирането със С++, ИК Софтех, София, 2000.
http://www.math.bas.bg/~nkirov/bfu/pec1_bg.html
Принципи на работа на компютъра
Управляващо устройство (УУ), аритметично устройство (АУ)
и оперативна памет (ОП).
Анатомия на компютъра (hardware)
* Централен процесор (CPU),
* Оперативна памет (RAM, ROM, Cache)
* Външна памет (HDD, FDD, CD)
* Карти (графична, звукова, мрежова)
* Портове (LPT, COM, Keyboard, USB)
Операционни системи (software)
Unix, DOS, Windows
DOS - запознаване и основни команди
Алгоритми и блок-схеми
Внасяме в банка 10000 лева с 6% годищна лихва. Влогът
се олихвява месечно. След колко години сумата по сметката ще стане двойно
по-голяма?
Месец | Сума | |
0 | 10000.00 | |
1 | 10050.00 | =10000.00*1.005 |
2 | 10100.25 | =10050.00*1.005 |
3 | 10150.75 | =10100.25*1.005 |
4 | 10201.51 | =10150.75*1.005 |
Месец | Сума |
0 | 10000 |
Бройни системи
* Десетична бройна система
цифри: 0,1,2,3,4,5,6,7,8,9
152=2.100+5.101+1.102
* Двоична бройна система
цифри: 0,1
101112=1.20+1.21+1.22+0.23+1.24=1+2+4+16=23
*Шестнадесетична бройна система
цифри: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
7A116=1.160+10.161+7.162
=1+160+1792=1953
Транслиране на програмите
* машинни инструкции
1. Премести съдържанието на клетка 40000
от паметта в регистъра AX.
2. Извади 100 от регистъра AX.
3. Ако разултатът е положителен, премини към инструкцията,
намираща се в клетка 11280
от паметта.
Intel 80386: 161 40000
45 100 127 11280
* Асемблер
MOV
AX, [40000]
SUB AX, 100
JG 11280
---
MOV AX, [INT_RATE]
SUB AX, 100
JG INT_ERROR
Езици за програмиране
* C++
if (int_rate > 100) message_box("Interest
rate error");
* Паскал
if int_rate > 100 then writeln('Interest
rate error');
История на езиците за програмиране
Системи за програмиране
-- С/С++: Borland C/C++ (DOS), Borland C/C++ Builder
(Win), MS Visual C++ (Win), gcc (Unix, Linux)
-- Pascal: Turbo Pascal (DOS), Borland DELPHI (Win)
-- Софтуерни системи с програмен език: MATLAB, Word,
...
Компилиране на проста програма
#include <iostream>
using namespace std;
int main()
{ cout << "Hello,
World!\n";
return 0;
}
Hello, World!
Процесът на компилиране и изпълнение на програмата
* Написване на текста на програмата:
текстов редактор (изходен код, source code) [hello.cpp]
* Компилиране на програмата:
компилатор (обектен код, object code) [hello.o
или hello.obj]
* Свързване на програмата:
свързващ редактор, linker (изпълним файл) [hello.exe
или hello или a]
* Изпълнение на програмата:
операционна система, програмна система, debug
Цикъл: редактиране - компилиране - настройка
Видове грешки
* "Грешка" при писане на програмата [текстов редактор]
* Грешка по време на компилация (синтактична грешка)
[компилатор]
* Грешка по време на изпълнение (Run-time error) [дебъгер]
* Грешка в алгоритъма (логическа грешка) [??]
Вход и изход
#include <iostream>
using namespace std;
int main()
{
cout << "How
many pennies do you have? ";
int pennies;
cin >> pennies;
cout << "How
many nickels do you have? ";
int nickels;
cin >> nickels;
cout << "How
many dimes do you have? ";
int dimes;
cin >> dimes;
cout << "How
many quarters do you have? ";
int quarters;
cin >> quarters;
double total = pennies
* 0.01 + nickels * 0.05 +
dimes * 0.10 + quarters * 0.25;
/* total value
of the coins */
cout << "Total
value = " << total << "\n";
return 0;
}
How many pennies do you have?
10
How many nickels do you
have? 3
How many dimes do you have?
7
How many quarters do you
have? 3
Total value = 1.70
* четене на цели и дробни
числа (десетични дроби)
* грешки при вход
* въвеждане на повече от
1 число
* извеждане на числа и низове
Оператор за присвояване
#include <iostream>
using namespace std;
int main()
{ cout << "How
many pennies do you have? ";
int count;
cin >> count;
double total = count
* 0.01;
cout << "How
many nickels do you have? ";
cin >> count;
total = count * 0.05
+ total;
cout << "How
many dimes do you have? ";
cin >> count;
total = count * 0.10
+ total;
cout << "How
many quarters do you have? ";
cin >> count;
total = count * 0.25
+ total;
cout << "Total
value = " << total << "\n";
return 0;
}
* текуща стойност на променлива
* дефиниция на променлива (единствена
!)
double total = count * 0.01;
* оператор за присвояване
total = count * 0.05 + total;
* знакът за равенство в математиката
и в С++
* съкращение за оператора добавяне
на 1 и изваждане на 1
month=month+1
month++
month=month-1
month--
Константи
#include <iostream>
using namespace std;
int main()
{
double bottles;
cout << "How
many bottles do you have? ";
cin >> bottles;
double cans;
cout << "How
many cans do you have? ";
cin >> cans;
double total = bottles * 2 + cans * 0.355;
cout << "The
total volume is " << total << "\n";
return 0;
}
How many bottles do you
have? 5
How many cans do you have?
4
Total volume is 11.42
Kакво е значението но числото 0.355?
1 кутия съдържа 12 унции = 0.355
литра
#include <iostream>
using namespace std;
int main()
{
double bottles;
cout << "How
many bottles do you have? ";
cin >> bottles;
double cans;
cout << "How
many cans do you have? ";
cin >> cans;
const double BOTTLE_VOLUME
= 2.0;
const double CAN_VOLUME
= 0.355;
double total = bottles*BOTTLE_VOLUME
+ cans*CAN_VOLUME;
cout << "The
total volume is " << total << " liter.\n";
return 0;
}
Аритметика
* събиране +
a+b
* изваждане -
a-b
* умножение * a*b
* деление /
a/b
* остатък от деление % a%b
* скоби (a+b)/2, а не a+b/2
* приоритети
* аргументна зависимост:
1.25+2.0 резултат 3.25; 1.25+2 резултат 3.25; 3+2 резултат
5;
4.2/2.0 резултат 2.1; 5.0/2
резултат 2.5; 4/2 резултат 2;
5/2 резултат 2;
5%2 резултат 1;
34%2 резултат 0; 5.1%3
- грешка;
* аритметични функции:
(-b+sqrt(b*b-4*a*c))/(2*a)