Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език




ИмеПрограма, превеждаща написана на език от високо ниво програма, в запис на машинен език
страница1/13
Дата на преобразуване06.10.2012
Размер1.95 Mb.
ТипПрограма
източникhttp://www.nikbsoft.com/PGMETT/@LC16/pMain_M301/@M_XIg/@M_OOP//@M_00a_eKnigi/CPP-arial.doc
  1   2   3   4   5   6   7   8   9   ...   13


Информатика със С++


Николина Николова


I.Основи на езика C++

1.Въведение

1.1.Произход на езика C++

Първото нещо, което прави впечатление на “новака” – това е името на езика. Дали има езици за програмиране C, C+ или C-? Може би съществуват езици А и В?

Въпреки, че отговорът на повечето от тези въпроси е отрицателен, то все пак съществува език В, но той на възниква от езика А, а от BCPL. Езикът С възниква от езика В, а С++ се появява на основата на С. Двата знака “+” към името са добавени, заради оператора “++”, който в С се използва много често.

Езикът С е разработен от Денис Ритчи, сътрудник на компанията AT&T Bell Laboratories, през 1970г. Отначало езикът С е бил написан за създаване и поддръжка на операционната система UNIX. (до този момент всички програми на операционната система UNIX са били написани или на асемблер, или на В, разработен от Кен Томпсън – създателят на UNIX.) Езикът С и средата UNIX дотолкова си паснали, че скоро всички програми, работещи под UNIX, били написани на С. Популярността на езика се увеличила дотолкова, че той бил пригоден за работа и с други операционни системи. Въпреки това езикът С не бил лишен от недостатъци.

Основна особеност на езика е, че бидейки език от високо ниво, той съхранява много черти на език от ниско ниво. В това се състоят неговите силни и едновременно с това – слаби страни. Както и асемблер, С може непосредствено да управлява паметта на компютъра. От друга страна С притежава черти на езиците от високо ниво; затова програмите на С се четат и създават по-леко, отколкото на асемблер. От друга страна обаче, езикът има значително по-малки възможности за автоматична проверка на програмата, отколкото някои други езици от високо ниво.

За да преодолее тези и някои други недостатъци на С Бярн Страуструп от AT&T Laboratories разработва през 1980г езика за програмиране С++ - усъвършенстван език С с добавени възможности за обектно-ориентирано програмиране. По-голямата част на С е подмножество на С++, т.е. повечето програми на С се явяват и програми на С++. Обратното, разбира се не е вярно.

1.2.Компилатори

За програмите, написани във вид на последователност от 0 и 1, казваме, че са написани на машинен език – единствения разбираем за компютъра език. При езиците от високо ниво обаче, за да бъде изпълнена програмата е необходимо тя да се преведе на машинен език. Преводът на инструкциите се осъществява чрез специални програми, наречени компилатори.


Компилатор – програма, превеждаща написана на език от високо ниво програма, в запис на машинен език.

Текстът на С++ програмата наричаме изходна програма или още източник на кода, а преведената на машинен език програма - обектен код (код).

Т.е., за да се изпълни една програма на С, първо се стартира компилатора с текста на програмата в качеството на входна информация. В резултат се получава дълга последователност от байтове, представляваща програмата, преведена на машинен език. След това се стартира получената програма като в качеството на входни данни се въвежда информацията, която трябва да се обработи. В резултат от работата се получават изходните данни.

В повечето С++ програми се използват оператори (например операторите за вход и изход), които вече са били написани и скомпилирани по-рано. При превода на програмата на машинен език обектният код на такива стандартни процедури се присъединява към обектния код на вашата програма. Това се изпълнява от друга програма, наречена свързваща програма (linker).

Свързване – процесът на съединяване на обектния код на програмата с обектния код на стандартните процедури. Изпълнява се от свързваща програма, наречена linker.

При много съвременни системи за програмиране свързването става автоматично.


фиг. 1

Взаимодействие на компилатора и свързващата програма


Програма на С++

Компилатор

Обектен код на програмата

Свързваща програма

Обектен код на стандартните подпрограми

Готов за изпълнение машинен код

1.3.Програмиране и решаване на задачи

Алгоритъм – последователност от точни инструкции за решаване на задачата

Процесът по написването на една програма се разделя на две фази- фаза на решаване и фаза на реализация. Резултатът от фазата на решаването е алгоритъма. След това той се превежда на език за програмиране – фаза на реализацията.


фиг. 2

Фаза на решаване

Фаза на реализация

Начало

Постановка на задачата

Създаване на алгоритъм

Проверка на алгоритъма на хартия

Превод на алгоритъма на език за програмиране

Тестване на програмата

Готова програма


1.4.Жизнен цикъл на програмното обезпечаване

Създателите на мощни програмни продукти (като компилатори и операционни системи) обикновено делят процеса на създаване на програмата на шест етапа, характеризиращи жизнения цикъл на програмното обезпечаване


  1. Анализ и точно определяне на проблема (постановка на задачата);

  2. Разработка на програмата (разработка на алгоритъма);

  3. Реализация на алгоритъма (превод в машинен код);

  4. Тестване;

  5. Поддръжка и развитие на системата;

  6. Стареене.


Не бива да се забравят последните два етапа, въпреки че те се появяват след създаването и в началото на използването на програмата. Не може програмата да се подобри и ли поправи, ако програмистът не е помислил предварително за това как тя да се чете лесно и леко да се променя.

При стареенето може да се наложат твърде големи усилия за преработка на програмата и да се окаже по-удачно създаването на нова програма.

въпроси и задачи:

  1. Опишете алгоритъм за отделяне на по-леката от девет, външно еднакви монети, само с помощта на аптекарски везни (без теглилки). Може ли алгоритъмът да се подобри (т.е. да се намали броят на операциите)?

  2. Избройте шестте етапа на жизнения цикъл на програмата

2.Структура на елементарна С++ програма

2.1.Структура на елементарна С++ програма


Да разгледаме следната програма:


#include


int main()

{

int number_of_klasses, students_per_klass, total_students;


cout<<"Въведете броя на класовете и натиснете Enter \n";

cin>>number_of_klasses;

cout<<"Въведете броя на учениците във всеки клас: \n";

cin>>students_per_klass;


total_students = number_of_klasses * students_per_klass;


cout<<"Във вашето училище има общо ";

cout<
cout<<" ученици.\n";


return 0;

}


Началото и края на програмата съдържат някои елементи, на които ще се спрем подробно по-късно. Програмата започва със следното:


#include


int main()

{


Засега това ще означава “Програмата започва тук.”. Съответно тя завършва със следните два реда:


return 0;

}


Редовете между началните и крайните инструкции представляват тялото на програмата.

Инструкцията


int number_of_klasses, students_per_klass, total_students;


се нарича обявяване на променливи. Тя съобщава, че думите number_of_klasses, students_per_klass и total_students ще се използват като имена на променливи. Първата дума int е съкращение от думата integer и означава,че тези променливи могат да приемат само целочислени стойности. Тя съобщава на компютъра и колко памет трябва да отдели за запомняне на тези стойности.

Останалите инструкции се наричат оператори. Всеки оператор в С завършва с “;”.


Забележка: За разлика от някои други езици в С символа “;” не служи за разделяне на два оператора, а е част от самия оператор


cin е оператор за вход, а cout – за изход на данни. Стрелките << и >> показват посоката, в която се движат данните. Ако под думата cout разбираме изходното устройство (монитора), то стрелките показват, че текстът в кавичките трябва да се придвижи от програмата към монитора. знакът \n съобщава на компютъра, че след извеждането на текста, той трябва да се подготви да пише на нов ред.

Аналогично, ако под думата cin разбираме стандартното входно устройство (клавиатурата), то стрелките в реда

cin>>number_of_klasses;

показват, че входната информация трябва да се придвижи от клавиатурата към променливата number_of_klasses.

задача:

Да се набере, компилира и тества горната програма.


Не е трудно да се досетим, че знака “=” служи за присвояване на стойност. Операторът се изпълнява отдясно наляво: първо се пресмята стойността на израза в дясната част на знака “=” и след това тази стойност се записва като стойност на променливата, намираща се вляво от знака “=”. Със знака “ * означаваме операцията умножение.


Забележка: При неправилно използване на наклонената черта в литерала \n (напр. замяна с ” /”) компилаторът няма да даде съобщение за грешка. Но няма и да се изпълни инструкцията за преминаване на нов ред.

При някои системи последният изходен оператор трябва задължително да завършва с \n .


Структура на елементарната С++ програма


#include


int main()

{

Обявяване на променливи


Оператор_1

Оператор_2

...

Оператор_N


return 0;

}


А сега да се върнем в началните редове на програмата.

Първият ред


#include


се нарича включваща директива. Тя указва на компилатора къде да търси информация за някои елементи на езика С++, използвани в програмата. В нашия пример iostream име на библиотека, съдържаща стандартните входно-изходни процедури, а iostream.h е името на файла, съдържащ и информацията за тази библиотека. Свързващата програма присъединява обектния код на тази библиотека към кода на нашата програма. За библиотеката iostream този процес се изпълнява автоматично, но ако трябва да се използват други библиотеки, то имената на съответните файлове трябва да бъдат указани в началото на програмата в директивата include. Всички директиви започват със символа “#”. За някои компилатори е важно до него да няма интервали. Затова винаги пишете #include в началото на реда, без интервали между символите.

Втория и третия непразен ред показват, че тук започва главната част на програмата.

int main()

{

По-правилно е да се каже,че тук започва главната функция на програмата. Скобите “{” и ”}” означават съответно начало и край на блок от оператори. Препоръчва се да се поставят в отделни редове, една под друга.

Последния оператор

return 0;

означава край на програмата. Не е задължително да бъде последен. Някои компилатори допускат отсъствието му, докато за други той е задължителен. Препоръчва се винаги да се пише. Операторът return се нарича възвръщаща оператор. Числото 0 има важно значение, на което ще се спрем по-късно.

2.2.Видове грешки при създаване на програма



                    1. Синтактични грешки – грешки при нарушаване на синтактичните правила на езика. Напр. пропуск на “;” и др. При наличие на такава грешка компилаторът извежда съобщение за грешка (error message) или предупреждение (warning message) и показва приблизителното местонахождение на синтактичната грешка. Понякога компилаторът може да “сгреши” характера на грешката.



                    2. Грешки по време на изпълнение. Напр. опит за деление на 0. Синтактична грешка няма, но операторът не може да бъде изпълнен. И при този вид компилаторът издава съобщение.



                    3. Логически грешки – грешки в алгоритъма, технически грешки (напр. замяна на една операция с друга) и т.н. Компютърът не може да “улови” такава грешка

задачи:

                    1. Напишете програма, която въвежда две числа, а след това извежда сумата и произведението им.

                    2. Напишете програма. която изписва името Ви, оградено в рамка по следния начин:

                      Пепи

                      За да изградите рамката използвайте символите | – +.

                    3. Напишете програма. която намира сумата и произведението на първите десет естествени числа

                    4. Напишете програма, която извежда съобщение “Hallo, my name is…” (на мястото на многоточието запишете Вашето име). След това на нов ред програмата трябва да извежда “What is your name?”. И накрая отново на нов ред да се извежда “Good day, dear ...(името на потребителя)”

Упътване: Тази програма е значително по-трудна от предишните, защото използва все още непознати елементи.За да я реализирате включете директивата

#include

За въвеждането и извеждането на името на потребителя ще Ви трябва променлива от тип символен низ (типовете данни и променливите ще научите в следващите уроци), която се обявява по следния начин:

string name;

Прочитането на името, въведено от потребителя става чрез оператора getline(cin, name); , a изписването му на екрана – по познатия вече начин: cout<
3.Променливи и присвояване на стойност

3.1.Променливи в езика С++

Да разгледаме следната програма:


#include

int main()

{

int number_of_bars;

double one_kkal, total_kkal;


cout <<"Въведете броя на бонбоните в една кутия:\n";

cout <<" и енергийната стойност на един бонбон. \n";

cin >>number_of_bars;

cin >>one_kkal;


total_kkal = one_kkal*number_of_bars;


cout <<"Общата енергийна стойност е "<

cout <<"Отворете друга кутия\n";

cout <<”Въведете броя на бонбоните в кутията:\n";

cout <<" и енергийната стойност на един бонбон. \n";

cin >>number_of_bars;

cin >>one_kkal;


total_kkal = one_kkal*number_of_bars;


cout <<"Общата енергийна стойност е "<

cout <<" Може би е по-добре да изядете една ябълка.\n";


return 0;


}


Думите number_of_bars, one_kkal и total_kkal се явяват имена на променливи.Както и в математиката променливата може да приема различни стойности. Тези стойности се записват в определен участък от паметта, който е единствен за всяка променлива. Затова в даден момент там може да има само една стойност. Например, ако в програмата въведем, че в първата кутия има 15 бонбона, а във втората – 20, променливата number_of_bars отначало ще приеме стойност 15, но след това тази стойност ще бъде заменена с 20. В такъв смисъл променливата представлява по-скоро участък от паметта, който може да бъде намерен по нейното име. Размерът на този участък се определя от типа на променливата.

Типът на променливите се указва при тяхното обявяване. В случая променливата number_of_bars е от тип int, а променливите one_kkal и total_kkal – от тип double. Променливите от тип int могат да приемат само целочислени стойности , а от тип double – рационални. Освен това за всяка променлива от тип int трябва да се отделят по 2 (за 16-битовите компилатори) или по 4 (за 32-битовите) байта памет, а за всяка променлива от тип double – по 8 байта.

Променливи – величини, които в различни моменти могат да съдържат различна информация. Фактически променливата представлява участък от паметта, чийто размер зависи от типа на променливата. Достъпът до този участък се осъществява чрез адреса му или чрез името на променливата. Имената на променливите са идентификатори.

Идентификаторът е дума, която се използва за означаване на променливи, константи, запазени думи и други елементи на езика. За да бъде дадена дума идентификатор в С++, тя с буква или символ за подчертаване, а после да следват букви, цифри или символ за подчертаване.

Препоръчва се имената на променливите да са мнемонични, т.е да носят информация за тяхното предназначение.


Внимание!

Компилаторът на С++ различава главни и малки букви. Напр. думите rate, RATE и Rate идентифицират три различни променливи. Прието е имената на променливи в С++ да се пишат с малки букви.


Идентификаторът в С++ може да бъде с произволна дължина, но някои компилатори възприемат само определен брой знаци.


Съществува определен клас идентификатори, наречени ключови (запазени) думи. Те се използват само за специални цели.

Пример: int, double.

3.2.Обявяване на променливи

Всяка променлива в С++ трябва да бъде обявена преди нейното използване. По този начин се съобщава на компилатора характера на информацията, която ще се пази в тази променлива, необходимото количество памет и името, чрез което програмистът има достъп до тази информация.

Това става по следния начин:

  1   2   3   4   5   6   7   8   9   ...   13

Свързани:

Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език iconКонспект За курса по програмиране и числени методи 2011 г
Езици на високо ниво. Етапи на реализиране на програма писана на език на високо ниво. Обща структура на програмата на Фортран
Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език iconАлгоритъм за управление на програмируем токоизточник за заряд на акумулаторни батерии
За реализиране на посочения процес се използва програмируем токоизточник с микропроцесорно управление. В доклада е представена блокова...
Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език icon2. Архитектури
Осигурява се времеделение и потребителски достъп; 2 Осигурява се среда за мултипрограмиране и поделяне на памет; 3 Написана на език...
Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език iconПрограма по български език
Българският език като национален език. Отношение между книжовен език и диалекти. Нормативност в езика. Езикови норми – произход и...
Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език iconКурсът е за учители в начален и среден курс, които преподават предмети от учебната програма на английски език. Участниците трябва да имат ниво на владеене на английски език минимум В1 според Европейската езикова рамка или (ielts 0)

Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език iconПрограма английска филология превод и бизнес комуникации
Програмата е предназначена както към всички завършили бакалавърска степен с английски език, така и към тези, които владеят английски...
Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език iconПриложна лингвистика английски език и испански език а/А1,А2/-30 приложна лингвистика английски език и китайски език в /В1,В2/ -25 английски и/ немски език-9, френски език-2, руски език-6, Втори семестър турски език/2/, новогръцки език-4/ обща група – С1,С2 Курс І 201 1 /201 2 г
Последна редакция: 21. 02. 2012 г. Специалност приложна лингвистика английски език и испански език а/А1,А2/-30
Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език iconПриложна лингвистика английски език и испански език а/А1,А2/-30 приложна лингвистика английски език и китайски език в /В1,В2/ -25 английски и/ немски език-9, френски език-2, руски език-6, турски език/2/, новогръцки език-4/ обща група – С1,С2 Първи семестър Курс І 2011/2012 г
Последна редакция: 03. 10. 2011 г. Специалност: приложна лингвистика английски език и испански език а/А1,А2/-30
Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език iconЕлена Любенова Граматика на горнолужишкия език Пловдив, 2003
Горнолужишкият език, подобно на долнолужишкия (също вариант на лужишкия език), чешкия, словашкия и полския език, е западнославянски...
Програма, превеждаща написана на език от високо ниво програма, в запис на машинен език iconПрограма за провеждане на детски голф лагер
Детският голф лагер е програма за деца от 7 до 18 годишна възраст с обучение на голф на български и английски език/ руски език от...
Поставете бутон на вашия сайт:
Документация


Базата данни е защитена от авторски права ©bgconv.com 2012
прилага по отношение на администрацията
Документация
Дом