Компјутерска програма напишана во објектно-ориентиран стил.
**Сметачки програм**  (исто така програмска опрема, или само една **програм** или **прилог**, апликација) е низа од инструкции напишани за вршење на определени задачи со компјутер.
Компјутерот бара програми за функционира, обично извршување на инструкции на програмата во централниот обработувач.
Програмата има извршна форма дека компјутерот може да се користи директно за извршување на инструкции. Истата програма во човечки читлив изворен код, од кои извршнитепрограми се изведени (на пример, составени), им овозможува на програмерот да учи и да ги развие своите алгоритми.
Компјутерски изворниот код е често напишан од програмери. Изворниот код е напишан во програмскиот јазик кој обично следи еден од двата главни парадигми: императив или декларатив програмирање. Изворниот код може да се претвори во извршна податотека (понекогаш се нарекува извршна програма или бинарна) од страна на компајлерот, а подоцна и погубен од страна на централната единица за обработка. Алтернативно, сметачки програми може да се изврши со помош на преведувач (интерпретер), или можат да бидат вградени директно во хардверот.
Сметачките програми може да се категоризираат по функционални линии: системскиот софтвер и апликативен софтвер. Две или повеќе сметачки програми може да работат истовремено на еден компјутер, процес познат како мултитаскинг.

Програмирање
------------

Компјутерско програмирање е итеративен процес на пишување или уредување на изворниот код.
Уредување на изворниот код вклучува испробување, анализа, и рафинирање, а понекогаш и координирање со другите програмери на заедничкa развиенa програма.
Човек кој ја практикува оваа вештина е наведен како компјутерски програмер, развивач на софтвер или кодер.
Понекогаш долг процес на компјутерско програмирање обично е наведено како развој на софтвер.
Поимот софтверското инженерство станува популарен, и процесот се гледа како инженерска дисциплина.

### Парадигми

Сметачките програми може да се категоризираат од страна на програмските јазични парадигми што се користи за да ги произведе истите. Двајца од главните парадигми се императив и декларатив.
Програми напишани со помош императив јазик особено алгоритмите користење декларации, изрази, и изјави.
Двојните изјави се променлива ,име на тип на податоци. На пример:  `var x: integer;` ; Изразот дава вредност. На пример:  `2 + 2`  дава 4. Конечно, изјавата може да се додели како израз на променлива или употреба на вредноста на променлива за менување контрола на протокот на програмата. На пример: `x := 2 + 2; if x = 4 тогаш направи нешто();` Една критика на императив јазици е пропратен ефект на задача, изјава за класа на променливи и се нарекува не-локални променливи .
Програми напишани со помош на декларативен јазик особено својствата кои треба да бидат исполнети од страна на излезот. Тие не се определи детално изразени во однос на контрола на протокот на извршувашната машина, но на математички односи меѓу декларираните објекти и нивните својства. Две широки категории на декларативна јазици се функционални јазици и логички јазици. Принципот зад функционални јазици (како Хаскел) е да не дозволите несакани ефекти, што ги прави полесно да се причина за програми како математички функции .
Принципот зад логички јазици (како Пролог) е да се дефинира проблемот што треба да се реши -. цел-. и да создаде детално решение за Пролог системот 
Целта е дефинирана од обезбедување на список на подцели. Тогаш секој подцел се дефинира преку понатамошно обезбедување на список на подцели, итн. Ако патот на подцелите не успее да најде решение, тогаш подцелта е грешна и друг пат систематски се бара.
Формата во која програмата е создадена може да биде текстуална или визуелна. Во визуелен програмски јазик, елементи се манипулираат графички, наместо текстуално.

### Составувањето или интепретација

Компјутерска програма во форма на човечки читлив програмски јазик се нарекува изворен код. Изворниот код може да се претвори во извршна слика со компајлер или со извршување веднаш со помош на преведувач.
Или собрани или толкувани програми може да се извршат во серија процес без човечка интеракција, но толкуваните програми му дозволуваат на корисникот да напишеш команди во една интерактивна сесија. Во овој случај програми се посебни команди, чие извршување се случува последователно, и на тој начин заедно. Кога некој јазик се користи за да даде команди за да софтверска апликација (како shell) се нарекува јазик за скриптирање.
Компајлери се користат да се преведе изворниот код од програмскиот јазик во објектниот код или машински код. Објектниот код има потреба од понатамошна обработка за да стане машина код, и машински код е мајчин код ,централната единица за обработка и извршување со машините. Компајлираните сметачки програми најчесто се нарекува извршни, бинарни слики, или едноставно како бинарни податотеки - упатување на бинарен формат на податотека кој се користи за чување на извршниот код.
Толкувани сметачки програми - во серија или интерактивна сесија - се декодира и потоа веднаш се егзекутира или се декодира во некои ефикасна средно застапеност за понатамошно извршување.BASIC, Perl и Java се примери за веднаш погубени сметачки програми. Алтернативно, Java компјутерските програми се составуваат пред време и се чуваат како независен толкуван код наречен bytecode. Bytecode-от потоа се извршува по барање на преведувач кој се нарекува виртуелна машина.
Главниот недостаток на преведувачите е дека компјутерските програми работат побавно отколку кога се компајлирани. Кодот на интерпретерот е побавно од пустање на компајлирана верзија, бидејќи преведувачот мора да го декодира секој ред од изворниот код и секој пат таа е вчитана и потоа се извршува на посакуваната акција. Сепак, развој на софтвер може да биде побрзо со помош на преведувач, бидејќи испробување е итно ,а постепеното компајлирање е испуштено. Друг недостаток на интерпретерот е дека најмалку еден човек мора да бидат присутни на компјутерот за време на компјутерското извршување на програмата. Спротивно на тоа, компајлирана компјутерска програма нема потреба од присуство на човекза време на извршувањето.
Нема својства во програмскиот јазика ко бараат изворниот код да бите прецизно да биди компајлиран или толкуван. Категоризацијата обично се одразува на најпопуларниот метод на извршување на јазикот. На пример, BASIC се смета за толкуван јазик ,а C компајлиран јазик, и покрај постоењето на основните компајлери за BASIC и C интерпретери(преведувачи). Некои системи користат само just-in-time компајлирање при што делови од изворот се компајлираат "on the fly"(во лет) и се чуваат за последователни погубувања.

### Само-прилагодувачки програми

Компјутерска програма во извршувањесе третираат нормално како различни форми на податоците со кој програмата работи. Меѓутоа, во некои случаи оваа разлика е нејасна кога компјутерската програмасе модифицира сама. Изменетата компјутерска програма се последователно извршува како дел од истата програма. Само-прилагодувачкиот код е можност за програми напишани во мачински код, асемблерски јазик, Lisp, C, COBOL, PL / 1, Prolog и го вклучите Javascript-(на eval функција) меѓу другите и JavaScript(eval финкција) меѓу другите.

Извршување и складирање
-----------------------

Обично, сметачките програми се чуваат во non-volatile меморија додека директно или индиректно да биде извршена од страна на корисникот на компјутер. По таквото барање, на програмата е натоварена во случаен пристап на меморија, од компјутерска програма наречена оперативен систем, каде што може да се пристапи директно од централниот обработувач. Централниот обработувач тогаш извршува ‘’’runs’’’(извршување) на програмата, инструкција по инструкција, до крајот на изврчувањето. Програма во извршување се нарекува процес 
Стопирањето на извршувањето е по нормален пат или по грешка — софтверска или хардверска грешка.

### Рачно програмирање

 Склопки за рачно внесување на Data General Nova 3
Компјутерските програми историски биле рачно внесување на централниот обработувач преку прекинувачи. Упатство било застапено од конфигурацијата на вклучување / исклучување поставувања. По поставувањето на конфигурацијата, извршно копчето се притиснува. Овој процес пото се повторува. Сметачките програми, исто така, историски биле рачно внесување преку лента од хартија или punched card(ударни картички). Откако медиумот е внесен, почетната адреса се поставува преку прекинувачи и се притиска извршното копче.

### Автоматска програмска генерација

Генеративно програмирање е стил на компјутерско програмирањ која создава изворен код преку генерички класи, прототипови, шаблони, аспекти, и код генератори за подобрување на продуктивноста на програмер. Изворниот код е генериран со програмирање алатки како дефиниран обработувач или интегриран развој на средината. Најпростиот облик на изворниот код генератор е макро обработувач, како на пример Ц преобработувач, кој го заменува моделот во изворниот код, според релативно едноставни правила.
Софтвер мотори излезниот изворниот код или makeup код кој истовремено станува влез на друг компјутерски процес. Апликациски опслужувачи се софтвер мотори кои нудат апликации за клиент на компјутерите. На пример, на Wiki е апликационен опслужувач кој им овозможува на корисниците да изградат динамични содржини составен од статии. Wiki генерира HTML, CSS, Java, и го вклучите Javascript кои потоа се толкува од страна на прелистувачот.

### Истовременото извршување

Поврзано: Процес (компјутер) и Мултипроцесирање
Многу оперативни системи за поддршка мултитаскинг кој им овозможува на многу сметачки програми да се појавуваат и да работат истовремено на еден компјутер. Оперативните системи може да работат на повеќе програми преку процесот на планирање - софтвер механизам да се префрли на обработувачот меѓу процеси често така што корисниците можат да комуницираат со секоја програма додека е пуштена. 
Во рамките на хардвер, денешните мултиобработувачски компјутери или компјутери со повеќе јадрени обработувачи може да ја стартуваат повеќе програми.
Еден компјутерска програма може да се пресметива истовремено повеќе од една операција со користење теми или одделни процеси. Мултичитачките обработувачи се оптимизирани за извршување на повеќе теми ефикасно.

Функционални категории
----------------------

Сметачките програми може да се категоризираат по функционални линии. Главните функционални категории се системски софтвер и апликативен софтвер. Системски софтвер вклучува оперативен систем кој двојки компјутерски хардвери со апликативен софтвер. Целта на оперативниот систем е да обезбеди средина во која апликативен софтвер извршува во удобен и ефикасен начин.
Во прилог на оперативен систем, системски софтвер вклучува корисни програми кои им помагаат со управување и адаптација на компјутер. Ако компјутерската програма не е системски софтвер, тогаш тоа е апликативен софтвер. Апликативен софтвер вклучува middleware, кои парови на системскиот софтвер се со кориснички интерфејс. Апликативен софтвер, исто така, вклучува корисни програми кои им помагаат на корисниците да ги решат проблемите на апликациите, како и потребата за сортирање.
Понекогаш развојот на [[софтвер|софтверот се гледа како функционална категорија на сопствените, особено во контекст на интеракција на човечкиот компјутер и програмскиот дизајн на јазик. Развојните околини собираат системски софтвер (како што се компајлери и серија на системот за обработка на скриптни јазици) и апликативен софтвер (како што IDEs) за специфична цел на помагање на програмерите кои создаваат нови програми.

Поврзано
--------

* Алгоритам за односот помеѓу сметачки програми и алгоритми
* Компјутерски софтвер за повеќе информации за сметачки програми
* Податочна структура

Наводи
------

1. ↑  Stair, Ralph M.; и др. (2003). *Principles of Information Systems, Sixth Edition*. Thomson Learning, Inc. стр. 132. ISBN 0-619-06489-7.
2. ↑  Silberschatz, Abraham (1994). *Operating System Concepts, Fourth Edition*. Addison-Wesley. стр. 58. ISBN 0-201-50480-4.
3. ↑  Wilson, Leslie B. (1993). *Comparative Programming Languages, Second Edition*. Addison-Wesley. стр. 75. ISBN 0-201-56885-3.
4. 1 2  Wilson, Leslie B. (1993). *Comparative Programming Languages, Second Edition*. Addison-Wesley. стр. 213. ISBN 0-201-56885-3.
5. ↑  Wilson, Leslie B. (1993). *Comparative Programming Languages, Second Edition*. Addison-Wesley. стр. 244. ISBN 0-201-56885-3.
6. ↑  Silberschatz, Abraham (1994). *Operating System Concepts, Fourth Edition*. Addison-Wesley. стр. 97. ISBN 0-201-50480-4.
7. ↑  Silberschatz, Abraham (1994). *Operating System Concepts, Fourth Edition*. Addison-Wesley. стр. 6. ISBN 0-201-50480-4.
8. ↑  Silberschatz, Abraham (1994). *Operating System Concepts, Fourth Edition*. Addison-Wesley. стр. 100. ISBN 0-201-50480-9 Проверете ја вредноста `|isbn=`: checksum (help).
9. ↑  Akhter, Shameem (2006). *Multi-Core Programming*. Richard Bowles (Intel Press). стр. 11–13. ISBN 0-9764832-4-6.
10. 1 2  Silberschatz, Abraham (1994). *Operating System Concepts, Fourth Edition*. Addison-Wesley. стр. 1. ISBN 0-201-50480-4.

Дополнителна литература
-----------------------

* Knuth, Donald E. (1997). *The Art of Computer Programming, Volume 1, 3rd Edition*. Boston: Addison-Wesley. ISBN 0-201-89683-4.
* Knuth, Donald E. (1997). *The Art of Computer Programming, Volume 2, 3rd Edition*. Boston: Addison-Wesley. ISBN 0-201-89684-2.
* Knuth, Donald E. (1997). *The Art of Computer Programming, Volume 3, 3rd Edition*. Boston: Addison-Wesley. ISBN 0-201-89685-0.

Поврзано
--------

* Програмска опрема
* Програмирање

Наводи
------

Надворешни врски
----------------

|  |  |  |
| --- | --- | --- |
| 

|  |  |
| --- | --- |
| Нормативна контрола | 
* WorldCat
* LCCN: sh85029524
* GND: 4047394-6
* NKC: ph124516
* BNE: XX526558

 |

 |