Въведение 1а
Учебник: Cay
Horstmann, Computing
Concepts with C++ Essentials, Third Edition, John
Wiley & Sons, 2003.
Cay S. Horstmann, Timothy A. Budd, Big C++, 2nd Edition, Wiley,
January 2009.
Какво е компютър?
Няма дефиниция, понятието се променя с времето.
Компютрите могат да се справят с повтарящи се задачи.
Компютърът може да се програмира, че да се справи с различни
задачи:
- Баланс на сметки.
- Сърфиране в интернет.
- Обработка на текст.
- Играене на игри.
Компютърни действия са съставени от огромен брой изключително
примитивни операции. Примери за примитивни операции:
- Сложи червена точка в тази позиция на екрана.
- Вземи число от дадено място в паметта.
- Изпрати буквата A към принтера.
- Събери тези две числа.
- Ако стойността е отрицателна, продължи програмата с тази
инструкция.
Компютърът дава илюзията за плавно изпълнение, защото той
изпълнява тези операции с голяма скорост (каква?).
Компютрите са гъвкави: те могат да се справят с широк спектър от
задачи, тъй като те изпълняват различни програми, всяка от които
прави компютъра да работи по конкретна задача.
Джон
Атанасов - история на компютрите.
От микрокомпютър до суперкомпютър. Многопроцесорни компютри,
квантови компютри.
Херц, гигахерц; байт, гигабйт; флопс (FLOPS), гигафлопс,
екзафлопс (EFLOPS = 1000 petaFLOPS)
(103 - кило, 106 - мега, 109 -
гига, 1012 - тера, 1015 - пета)
2013, Tianhe-2, рекорд от 33.86 petaFLOPS, разпределени
изчисления, облаци
Пример:
MacBook Pro 13"
Dual-Core i5
Анонсиран: June 2012
2.5GHz / 4GB / 500GB / Intel HD Graphics
4000 / с international клавиатура
Какво е програмиране?
- Програмата дава на компютъра последователността на стъпките,
необходими за изпълнение на дадена задача.
- Компютърният програмист проектира, пише и прилага тези
програми.
- Повечето компютърни потребители не са
компютърни програмисти.
- Програмирането е важно умение за информатика, софтуерния
инженер и специалист по мрежите. Еднакво важно за двата
модула на програмата "Информационни технологии" - Технологии за
компютърни игри, Бизнес информатика.
- Програмирането не е единствено техническо умение, необходими
за да бъдете успешен компютърен специалист, но е най-основното и
най-важното.
- Началните ви програми ще са досадни и няма да си съперничат
със софтуера, който сте ползвали като потребител.
- След като развиете определени умения, дори и прости програми
могат да бъдат вълнуващи.
Анатомия на компютъра
- CPU - централен процесор - параметри, 2.5GHz, 10 GFLOPS
(теоретично)
- Memory - памет - параметри, 4GB
- RAM (Random Access Memory): read-write memory (primary
storage), , 4GB
- ROM (Read Only Memory): contains certain programs that
must always be present, the code needed to start a computer.
- Secondary storage (e.g. a hard drive or flash memory)
provides persistent storage, 500GB
- Bus (шина) - линии, които свързват CPU, RAM и други
устройства.
- Мotherboard (дънна платка): CPU, memory, bus, card slots
(слотове) свързващи дъното с други устройства (LAN card, sound
card, video card, etc.).
- Peripherals (периферия) свързва компютъра с човека (Universal
Serial Bus - USB):
- Monitor
- Mouse
- Keyboard
- Printer
- Camera
- Компютрите се свързват помежду си чрез компютърни мрежи (жични
или безжични).
** По-важни характеристики на
синтаксиса на езика:
- Азбуката на езика се състои от всички символи от клавиатурата на
компютъра.
- Поредица от букви и цифри образува име, разделители между имената
са интервал или символ, който не е буква или цифра.
- С++ различава малки от главни букви, напр. имената main
и Main са различни.
- Програмата се разполага линейно - по редове (няма горни и долни
индекси).
- Програмата се състои от оператори - всеки оператор завършва с
точка и запетая ";".
- Един оператор може да се разположи на два и повече реда; няколко
оператора може да се разположат на един ред - добрия стил на
програмиране изисква един оператор да се пише на един ред (освен ако
няма съществена причина за противното).
** Процесът от написване до
изпълнение на програмата се състои от следните стъпки:
I стъпка: Написване на текста на програмата;
използва се текстов редактор, който създава текстов файл - изходен
код (source code) [напр. hello.c].
II стъпка: Компилиране на програмата; извършва се
от компилатора, който създава файл - обектен код (object code)
[напр. hello.o или hello.obj].
III стъпка: Свързване на програмата;
извършва се от свързваща програма (linker), която създава изпълним
файл [напр. hello.exe или hello или a.out].
IV стъпка: Изпълнение на програмата;
операционната система или програмната система стартира създадения
изпълним (executable) файл.
* Цикъл: Edit -> Compile -> Debug
** Транслиране на програма до машинен
код
* Процесорът изпълнява машинни инструкции, които са:
* Асемблер
- език от ниско ниво:
- Първа стъпка - даване на имена на командите:
mov 40000, %eax
sub 100, %eax
jg 11280
- Втора стъпка - използване на имена вместо адреси:
mov int_rate, %eax
sub 100, %eax
jg int_error
- По-лесни за четене и писане.
- Все още процесорно зависими.
* Програмни езици от високо ниво:
** Езици за програмиране
* Специална компютърна програма, наречена компилатор, превежда
описанието на по-високо ниво (език за програмиране) в машинни
инструкции за конкретен процесор (машинен език).
* Компилаторите следват строги конвенции (правила) по отношение на
използването на езика за програмиране. Когато компилатор чете
инструкции за програмиране (изрази, операции и оператори) на език
за програмиране, той ще ги преведе в машинен код, само ако входът
следва езиковите конвенции точно.
* Строгите правила предотвратяват по-катастрофални грешки, които
биха могли да възникнат, ако компилаторът трябва "да гадае".
* Има много (стотици) езици за програмиране (List
of programming languages).
* Различията в езиците за програмиране понякога са незначителни,
но в други случаи са съществени.
* Видове езици за програмиране (List
of programming languages by type).
* Hello
world на различни езици за програмиране.
** История на езика С++.
* Езикът С се създава и развива заедно с операционната система
UNIX. Първата версия е създадена през 1973 г. от Денис
Ричи. Езикът се развива интензивно и през 1977 г. UNIX е
пренаписана на С. Стандартна версия на езика е установена през
1989 година.
* Езикът С++ е създаден от Бьорн
Страуструп 1983 г., като към езика С са добавени нови
елементи. Всъщност възниква нов обектно-ориентиран език, който
веднага получава много широко разпространение. Стандартизацията на
езика завършва през 1998 година, като книгата на Страуструп e
всъщност този стандарт.
** Компилатори и среди за програмиране на С и С++
* Unix ОС (Ubuntu и др.), Мас:
- GCC е GNU компилатор, който
поддържа най-новите версии (стандарти) на езиците C, C++;
- текстов редактор
* Системи (среди) за програмиране за MS Windows -
обикновено се състоят от текстов редактор, компилатор, библиотеки
и система за проверка на програмите (debug). За С/С++
по-известните среди за програмиране са:
- MS Visual C++ -
продукт на Майкрософт, не поддържа С++ стандарт;
- Dev C++ - поддържа С++
стандарт, няма help за езика и удобен дебъгер;
- Code::Blocks -
The open source, cross platform, free C++ IDE.
** Видове грешки.
* Грешка по време на компилация (синтактична грешка) - неправилно
написана конструкция от езика. Компилаторът не може да продължи,
дава съобщение за грешка, програмистът трябва да поправи грешката и
отново да стартира компилатора.
* Грешка по време на изпълнение (Run-time error) - процесорът не
може да изпълни някоя инструкция, напр. делене на 0. Операционната
система прекратява изпълнението на програмата.
* Грешка в алгоритъма (логическа грешка) - програмата работи, но
дава грешни резултати.
**Алгоритми
* Процесът на планиране трябва да предхожда писането
(имплементацията) на компютърна програма за решаване на определена
задача.
* Компютърът се нуждае от систематичен подход за намирането на
решения: поредица от стъпки, които не включват предположения.
* Алгоритъм е начин за решение (описание на стъпките), който е
недвусмислен, изпълним и краен.
- Недвусмислен - няма място за догадки или творчество; точни
инструкции за това какво да се прави.
- Изпълним - всяка стъпка може да се осъществи на практика (от
точно определен изпълнител).
- Краен - процесът в крайна сметка ще завърши.
Пример:
Слагаме $10,000 в банкова сметка с 5% лихва годишно. Колко
години са необходими, за да се удвои началната сума?
Стъпка 1: Започваме с таблицата:
След година
|
Сума (баланс)
|
0
|
$10,000.00
|
1
|
$10,500.00
|
2
|
$11,025.00
|
3
|
|
Стъпка 2: Повторете стъпки 2а-2в докато балансът е по-малък от
20,000
Стъпка 2а. Добавете нов ред в таблицата.
Стъпка 2б. В колона 1 на новия ред, сложете число
с едно повече от предходния ред.
Стъпка 2в. В колона 2, поставете стойност, равна
на стойността на предходния баланс, умножена по 1.05.
Стъпка 3: Решението е последното число в колоната година като броя
на годините, необходими за удвояване на инвестицията.
Забележка. Десетичен знак в US е "." (точка). BG десетичен
знак е "," (запетайка), а в US запетайка е разделител на хиляди
(3-цифрена група). В компютрите и програмирането за десетичен
знак се използва точка (виж Decimal mark).
* Преди да започнете програмиране, трябва да се уверите, че
съществува алгоритъм, и че ясно сте разбрали всяка стъпка на
алгоритъма.