Задача за програмиране 10 Програмно осигуряване на съвремените компютри (обобщение) 13 Системи за програмиране 15



страница2/12
Дата21.11.2017
Размер1.86 Mb.
#35102
ТипЗадача
1   2   3   4   5   6   7   8   9   ...   12
cout<<”hb=”<

cout<<”hc=”<

}


  1. Тестване на алгоритъма и отстраняване на синтактичните грешки

С помощта на средата за програмиране алгоритъмът се въвежда в паметта на компютъра и се тества.

  1. Тестване на алгоритъма за логически грешки и отстраняването им

За да се тества алгоритъма за логически грешки се избират специфични входни данни, които трябва да определят дали алгоритъмът работи коректно. При така описания по-горе алгоритъм с входни данни 2, 10 и 7, програмата ще изведе съобщение за грешка, тъй като в определен момент ще се наложи да се намира корен квадратен от –1.

  1. Създаване на изпълнима програма.

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

#include

#include

void main()

{

float a, b,c,S,p,ha,hb,hc;

cin>>a>>b>>c;

if(a+b>c&&a+c>b&&b+c>a&&a>0&&b>0&&c>0)

{

p=(a+b+c)/2;



S=sqrt(p*(p-a)*(p-b)*(p-c));

ha=2*S/a;

hb=2*S/b;

hc=2*S/c;

cout<<”ha=”<

cout<<”hb=”<

cout<<”hc=”<

}

else

cout<<“Некоректни данни\n”

}

Програмно осигуряване на съвремените компютри



  1. Програми

Във всеки момент от време компютърът работи по следният начин :

Централният процесор се обръща към оперативната памет, прочита от там поредната инструкция и необходимите за изпълнението й данни и я изпълнява. Както вече знаем, по този начин компютърът изпълнява едно цяло действие, построено на базата на множество инструкции, които ще наречем команди.

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

Тъй като компютърът е машина с програмно управление, той не може да работи без програми. Програмите, необходими за работа на един компютър са различни по своето предназначение.



  1. Същност на програмното осигуряване

Казваме, че всички програми които работят на даден компютър образуват неговото програмно осигуряване.

За изразяване на съвкупност от програми в много случаи се използва понятието софтуер (software), противоположно на понятието хардуер (hardware), което както знаем означава апаратната част на компютъра.

Понятието софтуер се разглежда от няколко различни гледни точки. Понякога говорим за софтуер за текстообработка, или за софтуер за счетоводство. В този случай става дума за една или няколко програми с точно определено предназначение. В други случаи говорим за софтуер за определен вид компютри, например за РС или Macintosh.Тогава имаме предвид всички програми, които работят на този вид компютри и определено става дума за много повече програми.


  1. Структура на програмното осигуряване

Програмите, работещи на даден компютър се разделят на две основни големи групи (фиг. 12) приложни програми и базови програми.
а) Приложни са тези програми, които превръщат компютъра ни в интелигентна пишеща машина, видео или домашна аудио система. Те са тези, които ни позволяват да превърнем старата, изпокъсана снимка в съвършенна фотография, или използвайки Интернет, да разговаряме с наши приятели от другия край на света.

Познатите вече приложни програми можем да разделим на следните основни групи:



  • текстообработващи системи - съвкупност от програми, предназначени за писане, редактиране, оформяне и отпечатване на текст: Word Pad, Microsoft Word и др.

  • графични редактори – програми, предназначени за създаване, редактиране и отпечатване на графични обекти - картинки, графики, снимки и др.: Paint, Power Point, Corel Draw, Photo Shop и др.

  • електронни таблици - програми, обработващи наредена по определени правила информация: Microsoft Excel и др.

  • информационни системи - програми, които съхраняват огромни обеми от информация и при заявка от наша страна извеждат необходимата справка: системите в пощата, на гарата, в кварталните видеотеки и др.

  • експертни системи - програми, които освен базата данни разполагат и с база знания и правила, според които могат да правят изводи. Те имитират човешкото мислене и по дадени начални сведения, могат да генерират експертни предположения. Например: ако кажете на една такава експертна система, която е специализирана в областта на медицината, че имате температура, хрема и ви болят главата и гърлото, тя би трябвало да ви отговори, че сте настинали или нещо от този род.

  • мултимедийни програми - превръщат компютъра във висококачествена аудио- и видео- система, като позволяват да се слуша музика, да се гледа филм, да се правят записи и др. Такива са Winamp, MDVD, Codeck и др.

  • компютърни игри - отделяме ги специално от мултимедийните програми, защото те са особен вид програми, които служат за забавление на малки и големи и всички добре ги позвават.

Има и други видове специализирани програми, но тези които описахме са най-често използваните.

а) Базови се наричат тези програми, които осигуряват работата на компютъра. Те пряко управляват работата на устройствата му. Към този вид се включват програмите на операционните системи и тези в средите за програмиране.

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




Среди за програмиране

  1. Що е програмиране?

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

Например много лесно можем да помислим за еднакви следните две редици от нули и единици:

010111111011111 и 0101111111011111

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



  1. Елементи на средите за програмиране

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

а) текстов редактор - той предоставя възможност за въвеждане от клавиатурата на текста на програмата, с използване на основните операции за работа с текстове и тяхното редактиране (меню EDIT). Осигурява възможности за съхраняване и прередактиране на програмите.

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

Можем да си представим ролята на транслатора като тази на преводачите от един говорим език на друг. Известно е, че преводачите работят по различен начин: някои превеждат разговорите между няколко събеседници (симултантен превод). Те изчакват разговарящият да произнесе своята реплика и след това я превеждат веднага. Други преводачи получават написан текст, превеждат го изцяло и го написват отново, но вече на другия език. Докато в първият случай преводачът винаги трабва да е до нас, за да може да превежда всяка реплика, във втория ние можем да ползваме преведения вече текст и без присъствието му.

По подобен признак можем да разделим и видовете транслатори, които са - компилатори и интерпретатори.

Интерпретаторът е транслатор, който приема като вход всяка отделна команда на програмата, проверява я за грешки и я изпълнява, след което преминава към следващата команда и т.н.

К
Фиг. 13
омпилаторът
е транслатор, който приема като вход цялата програма, проверява я за грешки и

я превежда. В резултат се получава изпълнима програма. Тя може да се изпълнява многократно и без наличието на компилатор на дадения компютър (фиг. 13).

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

в) дебъгери (Debuger) - програма за търсене на грешки. Тя позволява да следим изпълнението на цялата програма стъпка по стъпка и по този начин да открием логическите грешки. По време на преглеждането дебъгерът може да показва и някои междинни резултати, които позволяват да се определи мястото и вида на логическата грешка.

г) библиотеки приложни програми (функции)

В структурата на сложните обекти обикновенно присъстват по-прости. Например:



  • Учебниците се изграждат от няколко раздела. Разделите се състоят от няколко теми. Всяка тема включва няколко урока. Всеки урок се състои от няколко точки.

  • Мебелите в дома и в офиса се "сглобяват" от отделни секции (според пространството и вкуса).

  • Влаковата композиция се състои от локомотиви и вагони (променлив брой и различни видове).

  • Организационната структура в армията е йерархична. Например:

  • полкът се състои от батальони

  • батальонът се състои от роти

  • ротите от взводовe

  • взводовете от отделения и т.н.

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

Подчинявайки се на този принцип още от самото начало в системите за програмиране се поставят основите на автоматизацията на програмирането.

Много скоро след създаването на първите компютърни програми, специалистите са осъзнали, че по сложните програми биха могли да се изграждат от предварително написани и проверени програми, наречени стандартни програми (функции).

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

Например в езика С++ всички функции за въвеждане и извеждане са дадени като отделни библиотеки (stdio.h, iostream.h и др.). В друга библиотека са всички математически функции (math.h) и др.

д) свързващ редактор

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



е) меню за изпълнение на програми (RUN) - чрез него се извършва стартиране на програми или на части от тях. Може да се представи изпълнението на програмата или изпълнението и да се извърши в режим, в които може да бъде наблюдавано.

ж) помощна информация - към системите за програмиране винаги се прилага и програма за помощна информация, описваща както работата на самата система, така и правилата за запис на различните елементи на съответния език за програмиране.
Среда за програмиране Borland C++

  1. Стартиране

Знаем различни варианти за стартиране на програми, които зависят от допълнителните настройки, които правим в работната среда. Най-сигурният начин, по който можем да стартираме средата Borland C++ е:

C:\BorlandC\Bin\Bc.Exe

  1. Работен екран

Р
аботния екран (фиг.2) на средата за програмиране Borland C++ предлага инструменти за редактиране, съхраняване, тестване и изпълнение на програми. Основните му елементи са следните:

  • ивица с команди;

  • работна област – включва в себе си няколко вида прозорци:

      • текстов прозорец – такива може да има няколко, в зависимост от това върху колко програми работи програмистът в дадения момент;

      • прозорец за съобщения – това е прозорец, в който системата извежда информация за своята работа – компилиране, свързване, стартиране и др. Ако по време на компилация бъдат открити грешки, те също се извеждат в този прозорец;

      • прозорец за проследяване на стойностите на променливи и изрази по време на изпълнението на програмата – визуализира се с помощта на комбинацията от клавиши Ctrl+F7. При това се задава име на променливата или израза, чиято стойност искаме да проследим.

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

  1. Текстов редактор:

а) въвеждане и редактиране на текст;

Текстовия редактор предоставя всички стандартни инструменти за текстообработка. Двата режима на работа – вмъкване и заместване, се превключват чрез клавиша Insert. Движението на курсора в текстовото поле се осъществява чрез клавишите – стрелки и чрез клавишите Page Up, Page Down, Home, End, като тяхното значение е същото каквото е в стандартните текстови редактори.



Page Up – придвижва курсора с един екран нагоре на същата позиция в реда;

Page Down– придвижва курсора с един екран надолу на същата позиция в реда;

Home – придвижва курсора в началото на текущия ред;

End – придвижва курсора в края на текущия ред;

Ctrl +Page Up – придвижва курсора в началото на текста;

Ctrl + Page Down– придвижва курсора в края на текста;

Ctrl + Home – придвижва курсора в началото на текущия екран, запазвайки хоризонталната му позиция;

Ctrl + End – придвижва курсора в края на текущия екран, запазвайки хоризонталната му позиция;

Другият стандартен начин за придвижване на курсора е чрез щракване на левия бутон на мишката на желаното място.



б) маркиране

Маркирането на текста се извършва по стандартните начини – чрез мишката или чрез клавиша Shift и клавишите - стрелки;



в) копиране, преместване и изтриване /Edit/

Тези операции са реализирани както в останалите текстови редактори с командите Cut, Copy, Paste и Clear, но клавишните комбинации, съответстващи на тези команди, не съвпадат с тези в редакторите на Microsoft.

Съответствието между командите и клавишните комбинации е следното:


Команда

Клавишна камбинация

Edit/Undo

Alt+BkSp

Edit/Cut

Shift +Del

Edit/Copy

Ctrl + Insert

Edit/Paste

Shift + Insert

Edit/Clear

Ctrl + Del

изтриване на текущия ред

Ctrl+Y

изтриване на маркиран текст

Ctrl+K,Y

Всяка една от клавишните комбинации може да бъде разгледана в самата среда BorlandC, срещу името на съответната команда в менюто.

г) търсене и заместване

В много случаи може да се наложи претърсване на програмата за някакъв текст и/или заместването му с друг. Това се реализира с помощта на командите от меню Search;



  1. Изпълнение на програми

а) меню RUN

Съдържа команди за изпълнение на програми (клавишната комбинация за изпълнение на програма е Ctrl + F9 – тя предизвиква изпълнението на командата Run/Run, която осигурява компилирането и последващото стартиране на програмата;



б) меню Compile

Съдържа команди за компилиране на програми (клавишната комбинация за компилиране на програма е F9 – тя предизвиква изпълнението на командата Compile/Make, която осигурява компилирането на програмата и създаването на изпълним файл);



в) преглеждане на резултати от изпълнението

Резултатите от изпълнението на програмата могат да се разглеждат чрез комбинация Alt + F5.



  1. Файлове, създавани от средата за програмиране BorlandC:

  • файл с разширение СРРсъдържа текста на програмата и се получава след изпълнението на командата File\Save или чрез клавиша F2.

  • файл с разширение ВАК – архивно копие на програмата. Прави се автоматично от средата, след изпълнение на Save.

  • файл с разширение ЕХЕизпълнима програма, еквивалентна на написаната. Създава се при компилиране на синтактически правилана програма.

  1. Проследяване на изпълнението на програмата.

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

а) извеждане на проследяващ прозорец

Извеждането на този прозорец става с помоща на клавишната комбинация Ctrl + F7 или чрез командата Debug/Watches/Add Watch. След изпълнението и на екрана се появява прозорец и се очаква въвеждането на израза, който искаме да проследим. Въвеждаме израза и избираме бутона ОК. Веднага след това на екрана се появява прозорец, съдържащ въведения израз и неговата стойност (ако е изчислена до момента). При следващото изпълнение на тази команда новият израз се появява след стария.

Следящия прозорец може да се редактира чрез командата Debug/Watches/Edit Watch или чрез позициониране на курсора на прозореца върху даден израз и натискане на клавиша Enter.

Допуска се и изтриване на изразите, които се проследяват. Това става чрез командата Debug/Watches/Delete Watch или чрез маркиране на съответния израз и натискане на клавиша Delete.



б) Проследяване на изпълнението на програмата

Осъществява се чрез последователно натискане на клавиша F7 или чре командата Run/Trace Into. На всяка стъпка се изпълнява по един ред в програмата и се изчисляват всички изрази, описани в този ред.



Задачи за упражнение:

Зад. 1. Напишете текста на следната програма на С++

#include



void main()

{

cout<<”Това е първата”;



cout<<”програма, която пиша на С++”;

cout<<”Успех!Чао\n”;

}

Зад. 2. Запишете програмата под име Р1 със следната последователност от команди File/Save as

Зад. 3. Компилирайте програмата (проверка за грешки и превод без да се стартира - F9).

Зад. 4. Ако има грешки, поправете ги и съхранете промените с клавиша F2.

Зад. 5. Предизвикайте изпълнението на програмата с Ctrl + F9.

Зад. 6. Използвайте Alt + F5 или Windows\User screen, за да видите резултата.

Зад. 7. Върнете се към средата с натискане на произволен клавиш.

Зад. 8. Отворете нов файл и въведете следната програма на С++
#include

void main()

{

cout<<”Аз се казвам ХХХ.\n”;



cout<<”Здравей ХХХ”;

cout<<”Приятен ден!”;

}

Зад. 9. Променете вторият ред cout<<“\n\n Здравей ХХХ!”;

Елементи на езиците за програмиране

Всички ние сме учили в една или друга степен чужди (говорими) езици. Усвояването на един език е свързано с изучаването на неговите елементи – азбука, структура на изреченията, правила за образуване на изреченията, смисъла на различните думи и словосъчетания и др. Езиците за програмиране се различават от говоримите езици, но все пак изучаването им много прилича на изучаването на говорим език. Ето защо, базирайки се на опита, който имаме при усвояване на чужди езици, дори и на езика на математиката, запознаването ни с конкретен език за програмиране трябва да започне с усвояване на елементите на езика – знаците и символите, с които ще си служим. Тук ще изброим елементите на езиците за програмиране, като за илюстрасия ще използваме езика С++.



  1. Азбука на езиците за програмиране (С++) -

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

а) букви – в основата обикновено е заложена латинската азбука - използват се всички малки и главни латински букви. В езика С++ се прави разлика между малките и главните букви. Символът долно тире “_” също се приема за буква.

б) цифри – всички арабски цифри 0, 1, ..., 9

в) служебни символи на езика- , . : ; ? ! < > ( ) [ ] + - * / \ = & % ~ “ { } # $ ^ >= <= == || != += *= -= /= и др.

г) запазени думи – for, int, void, do, if, while, floid, long, else, struct и др. Използват се за описание на различни елементи на програмата. Записват се винаги с малки букви. Тяхното значение не може да бъде променено от програмиста в текста на програмата.

д) служебни думи – cin, cout, abs, fabs printf, scanf и др. те имат точно определено предназначение в програмата. За разлика от запазените думи, те могат да се използват за наименования на други елементи на програмата, но тогава те губят стандартното си предназначение. Ето защо, използването на стандартните думи в смисъл, различен от стандартния, не е препоръчително.

е) разделителиинтервал, ;, “нов ред” и табулация. Аналогично на практиката с текстови редактори, тези знаци се използват като разделители, а “нов ред” за край на текущият ред.

Задача 1: Открийте отделните елементи от азбуката на езика С++ в следните програми:

а)

#include



void main()

{


int a, b, s;

a=5; b=4;

s=a*b;

}
б)



#include

void main()

{

cout<<”Това е първата “;



cout<<”програма на С”;

}


  1. Коментари

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

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

В езика С++ има два вида коментари:


  • едноредов (действащ до края на реда) - задава се с // и се използват за обявяване на текста до края на реда за коментар.

  • многоредов - за начало на коментара се задава последователността /*, а за край */. Този вид означение обявява за коментар само тази част от текста на програмата, който е заграден от посочените символи.

Реализирането на по-сложни алгоритми изисква задължително използване на коментари. Те могат да се поставят на всяко място в програмата. Могат да бъдат произволно големи. Не влияят върху бързината на изпълнение на програмата.

Задача 2: Вмъкнете коментари в програмите от Задача 1 по известните ви начини.

  1. Величини

а) определение

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

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

Величината е характеристика на даден предмет или явление.

Величини, например, са следните характеристики: обем, маса, цвят, материал, дължина, ширина и др.



б) видове величини

  • константи

В много случаи една величина остава постоянна и не се променя, независимо от процесите, които протичат при дадено явление и въздействията, които те имат върху даден предмет. Пример за такива величини са математическите числа e и π, земното ускорение g, температурата на кипене и замръзване на водата при морска височина и др.

От гледна точка на езиците за програмиране константите са величини, за стойностите, на които се заделя място в оперативната памет на компютъра, те имат собствено име и стойността им не се променя в процеса на изпълнение на програмата..

  • променливи

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

Променливите са величини, за стойностите, на които се заделя място в оперативната памет на компютъра, те имат собствени имена и могат да заемат различни стойности в процеса на изпълнение на програмата.

В израза за пресмятане дължината на окръжност участват няколко величини:



С=2* π *r;

Тук C и r са променливи, защото могат да са дължина и радиус на различни окръжности, а π е константа.



  • литерали

Числото 2 играе важна роля в тази формула, но то не отговаря на нито едно от определенията за константи и променливи дадени по-горе. По-скоро бихме казали, че то е константа, но забелязваме, че няма собствено име и за него няма да се задели място в оперативната памет на компютъра. Величини от този вид се наричат “литерали”.

Литерали – величини, които нямат собствени имена, а само участват със своята стойност в процеса на изпълнение на програмата.

Зад понятието константа и променлива се крие в действителност клетка от оперативната паметта на компютъра, в която се съхранява текущата стойност на променливата. Всяка клетка от паметта има определен адрес. Използването на името на константата или променливата е аналогично на обръщение към адреса на съответната клетка от паметта и на използване на нейното съдържание, т.е. на стойността на променливата.



  1. Идентификатор

Програмите в езика С++ различават променливите, константите и другите обекти в програмите чрез техните имена. Те се задават чрез идентификатори.

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

При задаване и използване на идентификаторите трябва да се имат предвид следните важни



Забележки

  • В С++ е позволено символът за подчертаване да се използва като буква (например А_B е идентификатор);

  • не се препоръчва символът _ да е първи, тъй като се използва от много служебни и системни програми;

  • идентификаторът трябва да е различен от ключовите думи за езика С++. Единствения случай, когато в качеството на идинтификатор се използва ключова дума е ако в него се използва една или повече главни букви.

Пример 1:

forward – е валиден идентификатор независимо, че съдържа for;

FOR – валиден идентификатор;

for – невалиден идентификатор;



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

Пример 2:

Аа, Namename

Всяка променлива или константа се означава с име, представляващо идентификатор. Обикновено се стремим името да съответства в някаква степен на смисъла на представяната информация.

Задача 3: Посочете в програмите от Задача 1 идентификаторите.


  1. Оператори

Последователност от елементи на езика, записани по определени правила, които предизвикват изпълнение на една или повече команди, се нарича оператор.

  1. Подпрограма(функция)

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

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

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

  • правила за запис;

  • правила за изпълнение.

Да се спрем по-подробно на тях.

а) правила за запис

Всеки език има точно определени правила, по които се построяват неговите конструкции. Например в българския език има точно определени правила, по които се построяват изреченията. Прието е науката за тези правила да се нарича синтаксис. Така ще наричаме и правилата за запис на елементите на езиците за програмиране.



б) правила за изпълнение

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



Пример 3:

Известно е, че синтактически правилно е едно изречение да бъде съставено от подлог, сказуемо и допълнение. Като подлог и допълнение могат да се ползват съществителни, а като сказуемо – глаголи. Нека са ни дадени съществителните момиче и ябълка и глаголът яде. Да видим колко синтактически правилни изречения можем да съставим с тях.



Момичето яде ябълка.

Ябълката яде момиче.

Второто изречение е правилно синтактически, но в него липсва смисъл. Ето защо за даден език е много важен смисъла на езиковите конструкции. Науката, която се занимава с това, се нарича семантика. Така ще наричаме и правилата за изпълнение на елементите на езиците за програмиране.

Става ясно, че за да познаваме един елемент от езика ние трябва да сме наясно с неговите синтаксис и семантика. Ето защо от сега нататък при изучаване на езика С++ ние ще се спираме подробно и на двете характеристики на всеки негов елемент.

Задачи за упражнение:

Зад. 1. Посочете кои от изброените последователности от знаци могат да бъдат идентификатори и кои не, и защо?
Max1, 1sum, max_1, max, max 1, int2
Зад. 2..Създайте нови идентификатори, като използвате тези от Зад. 1.

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


  1. Изпълнение на С++ програма:

а) предпроцесор (предкомпилатор)

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

За да могат тези библиотеки да се включат към текста на нашата програма, се налага този текст да бъде обработен от специална програма, наречена предпроцесор (предкомпилатор). Ролята на предпроцесора е да обработи първоначалния текст на програмата в зависимост от специални команди, написани в началото и. Тези команди се наричат директиви на предпроцесора и се различават от останалия текст на програмата по това, че всяка директива се пише на отделен ред, като реда започва винаги със знака #. Директивите посочват на предпроцесора, че трябва да включи дадена библиотека към текста на нашата програма или, че трябва да замести даден символен низ с друг и т.н.

б) етапи на изпълнение на С++ програма

Програма на ЕП

предпроцесор




прекомпилатор



Програма 2

компилатор



Изпълнима програма

изпълнение



П
фиг. 15

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


  1. Общ вид на С++ програма:

директиви към предпроцесора

декларации на глобални обекти

описание на функции, една от които е главна и винаги се нарича main
а) директиви към предпроцесора

Най-често ще използваме следните две директиви на предпроцесора:



  • директива за включване на заглавен файл:

    #include <име на заглавен файл>

    или


    #include “име на заглавен файл

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

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



  • директива за дефиниране на стойност на идентификатор:

    #define идентификатор стойност

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

б) декларации на глобални обекти

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



в)описание на функции, една от които е главна и винаги се нарича main

В една програма на С++ може да има множество подпрограми (функции), описващи различни алгоритми, но винаги трябва да има точно една главна функция, която се нарича main и от нея започва изпълнението на програмата. Една функция ще бъде изпълнена в нашата програма, само ако е била извикана от функцията main или от друга функция, която вече се изпълнява. Независимо от ролята си в дадена програма всяка функция се описва по определени правила и има следните елементи:


тип_на_функция име_на_функция (параметри_на_функция )

{

дефиниция на различни величини и оператори;

}

Тази част от функцията, която е заградена в {} се нарича тяло на функцията.



Да разгледаме една програма, която извършва нещо сравнително лесно – прочита от клавиатурата две числа и ги отпечатва в нарастващ ред. За да може да направи това програмата сравнява двете числа и ако първото е по-голямо от второто им разменя местата с помощта на специално описана функция. Програмата е написана на езика С++ и повечето елементи в нея са непознати, но по-нататък когато се запознаем по-подробно с езика, ще се върнем отново на тази програма, за да изясним по-подробно нейните елементи.
#include

void swap(int &x, int &y)//функция, която разменя стойностите на две цели числа

{

int z=x ;

x=y ;

y=z


}

void main()

{

int a,b;

cin>>a>>b; //въвеждат се две цели числа a и b от клавиатурата

if(a>b)swap(a,b); //ако a>b техните стойности се разменят

cout<на екрана се извеждат стойностите на а и b, отделени с един интервал

}


  1. Правила за подреждане на програми

В практиката често върху една и съща програма работят екип от програмисти. Често се налага те да четат взаимно своите програми. Ето защо е добре те да бъдат написани така, че да могат лесно да се четат и разбират. Това се налага дори и когато човек работи сам и иска да прочете след известно време собствените си програми. За да могат програмите да са достъпни за разбиране, при писането им трябва да се спазват някои определени правила:

  • Програмите трябва да съдържат коментари, указващи действието, което извършва дадения програмен фрагмент.

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

  • Когато даден оператор е съставен от няколко елемента (запазени думи или елементи на езика) и се налага пренасянето им на нов ред, те трябва да бъдат написани малко по-надясно от основния оператор.



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

  • Желатено е скобите { и } да се пишат на самостоятелен ред и една под друга.

Например, следният оператор if е съставен от няколко елемента. Ще приведем двата начина за запис на оператора –

Без подреждане:
if(a==0) if(b==0)сout<<”всяко х е решение\n”;

else

cout<<”няма решение\n”;}



else { x=a/b;

cout<<”x=”<
С подреждане:
if(a==0)

{

if(b==0)



cout<<”всяко х е решение\n”;

else

cout<<”няма решение\n”;

}

else

{

x=a/b;


cout<<”x=”<

}

При втория начин става ясно, че конструкциите



{

if(b==0)

cout<<”всяко х е решение\n”;

else



cout<<”няма решение\n”;

}

и



{

x=a/b;


cout<<”x=”<}

са елементи на оператора if(a==0) ... else …. Също така е ясно, че операторът if(b==0)...else... е вложен в предходния оператор if. При първия запис това не е ясно от пръв поглед.



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

  1. Задачи за упражнение:

Зад. 1. От колко функции се състои следната програма и какви са техните имена.
#include

int m,n,mn[20][10000];

void read()

{

int i,j;

cin>>m;

cin>>n;


for (i=0;i
for (j=0;j

cin>>mn[i][j];

}

int i_i_t(int p,int f)

{

int k=0;



for (int i=0;i
if
(mn[f][p]>mn[f][i]) k++;

return k;

}

void compare()

{

int i,j,br;

for (i=0;i

{

br=0;



br+=mn[i][0]-1;

for (j=1;j
if (mn[i][j]!=1) br+=mn[i][j]-(i_i_t(j,i))-1;

cout<

}

}

int main()



{

read();


compare();

return 0;

}
Числови типове данни и операции в С++



  1. Теоретични бележки

  1. Типове данни

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

а) що е тип данни?

Конкретните стойности, които заемат величините при изпълнение на програмата, ще наричаме данни.

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

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



б)елементи на тип данни:

  • множество от стойности, които могат да приемат величините от типа;

  • множество от операции, в които могат да участват величините от типа;

  1. Деклариране на тип на величина

а) константи

За да декларираме константа ние трябва да укажем нейният тип, име и стойност. За да стане ясно, че декларираме именно константа преди декларацията записваме запазената дума const. Синтаксисът за деклариране на константа е следния:



const тип_на константа име_на_константа = стойност_на_константа;

Пример 1:

const a=12, b=-1;

const float pi=3.14;

Забележка 1: Указването на типа на константата е задължително Има само един случай когато може да не укажем типа на константата – когато тя е целочислена.

Забележка 2: Ако искаме да декларираме няколко константи от един и същ тип, можем да използваме само едно указване на думата const и само едно указване на тип, след което да изредим със запетаи имената на константите и техните стойности, като в следната декларация.

const float pi=3.14, g=9.8, e=2.67;

Какво се случва при декларация на константа? Да разгледаме като пример декларацията на константата pi. Когато програмата срещне тази декларация, се предизвиква следната последователност от действия в компютъра:

  • заделя се толкова памет, колкото е необходима за обект от указания тип. (В случая – за дробно число);

  • така заделената памет се свързва с идентификатора, указан като име на константата. От този момент нататък винаги когато в програмата се срещне идентификатора pi, той ще се свързва със същата част от паметта;

  • в паметта, заделена за константата се записва нейната стойност, така че всеки път когато програмата се обръща към нея да може да получи тази стойност. Както вече отбелязахме, когато говорихме за константи, стойността на константата не може да се променя по време на изпълнение на програмата.

б) променливи

За да декларираме променлива е задължително да укажем нейният тип и име. Синтаксисът за деклариране на променлива е следния:



тип_на_променлива име_на_ променлива;

Пример 1:

int a;

float c;

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

int x,y,z;

float k,l,m ;

в) инициализация на променливи

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



int x,y=0,z;

float k=1.002, l=2.4, m ;

Какво се случва при декларация на променлива? Да разгледаме като пример декларацията

int x;

Когато програмата срещне тази декларация, се предизвиква следната последователност от действия в компютъра:



  • заделя се толкова памет, колкото е необходима за обект от указания тип. (в случая – за цяло число);

  • така заделената памет се свързва с идентификатора, указан като име на променливата. От този момент нататък винаги когато в програмата се срещне идентификатора х, той ще се свързва със същата част от паметта;

  • ако променливата е инициализирана, в паметта, заделена за нея се записва нейната стойност, така че всеки път когато програмата се обръща към нея да може да получи тази стойност. Както вече отбелязахме, стойността на променливите може да се променя по време на изпълнение на програмата. Какви са начините за промяна на стойности на променлива ще разгледаме по-нататък.

  1. Стандартни типове данни

В
зависимост от тези елементи класифицираме величините по следният начин:

В настоящото ръководство ще се разгледат само част от изброените типове. Останалите са предмет на дисциплината Програмиране 2 и ще бъдат разгледани в друго ръководство.



  1. Числови типове.

При изучаването на нов тип данни, трябва да обърнем внимание на следните основни моменти:

  • множество от стойности на типа;

  • множество от операции, в които могат да участват величините от типа;

  • множество от отношения между величините от типа;

  • средства на езика за програмиране за работа с величини от типа.

Самото наименование на числовите типове показва, че стойностите, които ще приемат величините от тези типове, са числа. От опит знаем, че делим числата на две основни групи (множества): цели и реални, които дават имената на двата подтипа числови величини: целочислен тип и реален тип. Оформянето на два отделни подтипа е необходимо, тъй като операциите, допустими за двата типа не съвпадат. Друга не по-маловажна причина е мястото, което се заделя в оперативната памет за величините от двата типа и начина, по който те се представят в нея.

а)целочислени типове

Тип

Размер в байтове

Числен интервал

int

2

[-32768,32767]

unsigned

2

[0,65535]

long

4

[-2 147 483 648, 2 147 483 647]

unsigned long

4

[0, 4 294 967 295]

Каталог: tadmin -> upload -> storage
storage -> Литература на факта. Аналитизъм. Интерпретативни стратегии. Въпроси и задачи
storage -> Лекция №2 Същност на цифровите изображения Въпрос. Основни положения от теория на сигналите
storage -> Лекция 5 система за вторична радиолокация
storage -> Толерантност и етничност в медийния дискурс
storage -> Ethnicity and tolerance in media discourse revisited Desislava St. Cheshmedzhieva-Stoycheva abstract
storage -> Тест №1 Отбележете невярното твърдение за подчертаните думи
storage -> Лекции по Въведение в статистиката
storage -> Търсене на живот във вселената увод
storage -> Еп. Константинови четения – 2010 г някои аспекти на концептуализация на богатството в руски и турски език


Сподели с приятели:
1   2   3   4   5   6   7   8   9   ...   12




©obuch.info 2024
отнасят до администрацията

    Начална страница